Monday, December 14, 2015

server.c - Dr. Mayhew 12/14/2015

#include <sys/types.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <netdb.h>
#include <stdio.h>


char    db[100][1000000];


void    error    (const char*    msg)    {perror(msg); exit(0); }


const    int    BUF_SIZE    = 1024;
char    db[100][1000000];





int
lookup (
    int    m,
    int    u
) {
    return db[m][u];
}

void
insert (
    int    m,
    int    u
) {
    db[m][u]    = 1;
}

void
delete (
    int    m,
    int    u
) {
    db[m][u]    = 0;
}



void
db_load (
) {
    FILE*    q;
    int        m;
    int        u;

    q    = fopen("george", "r");
    if (q) {
        while(fscanf(q, "%d %d", &m, &u) != EOF) {
            if ((m < 100) && (u < 1000000)) {
                insert(m, u);
            }
        }
        fclose(q);
    }
}



void
db_store (
) {
    FILE*    q;
    int        i;
    int        j;

    q    = fopen("george", "w");
    for (i = 0; i < 100; ++i) {
        for (j = 0; j < 1000000; ++j) {
            if (lookup(i, j))    fprintf(q, "%d %d\n", i, j);
        }
    }
    fclose(q);
}




int
main (
    int        argc,
    char*    argv[]
) {
   int                    sock;
   int                    length;
   int                    n;
   socklen_t            fromlen;
   struct sockaddr_in    server;
   struct sockaddr_in    from;
   char                    buf[BUF_SIZE];
   char                    buffer[BUF_SIZE];

    int        m;
    int        u;
    int        ok;

   if (argc != 2)    error("ERROR, no port provided\n");
  
   sock        = socket(AF_INET, SOCK_DGRAM, 0);
   if (sock < 0) error("Opening socket");

   length    = sizeof(server);
   bzero(&server, length);
   server.sin_family        = AF_INET;
   server.sin_addr.s_addr    = INADDR_ANY;
   server.sin_port            = htons(atoi(argv[1]));

   if (bind(sock,(struct sockaddr *)&server,length) < 0) error("binding");
   fromlen    = sizeof(struct sockaddr_in);
   db_load();
   for (;;) {
           ok    = 0;
        n    = recvfrom(sock, buf, BUF_SIZE, 0, (struct sockaddr *)&from, &fromlen);
        if (n < 0) error("recvfrom");

        buf[n] = 0;
        sscanf(buf + 2, "%d %d", &m, &u);
        if (m > 99) {
            if (u > 1000000)    ok    = 5;
            else                ok    = 3;
        }
        else if (u > 1000000)    ok    = 4;
        else {
            switch (buf[0]) {
                case 'I':
                    insert(m, u);
                    db_store();
                    break;
                case 'D':
                    delete(m, u);
                    db_store();
                    break;
                case 'L':
                    ok    = !lookup(m, u);
                    break;
                default:
                    ok    = 2;
            }
        }
        buffer[0] = '0' + ok;
        n    = sendto(sock, buffer, 1, 0, (struct sockaddr *)&from, fromlen);
       if (n < 0) error("sendto");
   }
 }

Sunday, December 13, 2015

Dr. Mayhew's Keypad Program - 12/12/2015

#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>


void
blink(){

    digitalWrite(0,1);
    delay(300);
    digitalWrite(0,0);

}

char
get_key(){
   
    int        i;
    int        j;

    for (j = 21; j < 25; ++j) {
        digitalWrite(j, 1);   
    }
    for (;;) {
        for (i = 25; i < 29; ++i) {
            if (digitalRead(i))     {
                for (j = 21; j < 25; ++j) {
                    digitalWrite(j, 0);   
                    if (!digitalRead(i)) {
                        blink();
                        switch (((i - 25) << 2) | (j - 21)) {
                            case  0: return '1';
                            case  1: return '4';
                            case  2: return '7';
                            case  3: return 'C';
                            case  4: return '2';
                            case  5: return '5';
                            case  6: return '8';
                            case  7: return '0';
                            case  8: return '3';
                            case  9: return '6';
                            case 10: return '9';
                            case 11: return '#';
                            case 12: return 'A';
                            case 13: return 'B';
                            case 14: return 'C';
                            case 15: return 'D';
                        }
                    }
                }
            }
        }   
    }   
}       




int
get_num (
    int count,
    int x
){
    char    k;
   
    printf("in get number");

    while(count){   
        printf ("\ncount = %d", count);
        k = get_key();
        printf ("key = %c\n", k);
        if (k == '#') return x;
        if (('0' <= k) && (k <= '9')){
            x    = (x * 10) + (k - '0') ;
        }
        else return -1;
        --count;
        }
   
    k = get_key();
    if (k == '#') return x;
    else return         -1;
    }

int
main()
{
    int     a;
    int     i,j;
    int     x,y,z;
    int     count;


    wiringPiSetup();

    pinMode(21, OUTPUT);
    pinMode(22, OUTPUT);
    pinMode(23, OUTPUT);
    pinMode(24, OUTPUT);
    pinMode(25, INPUT);
    pinMode(26, INPUT);
    pinMode(27, INPUT);
    pinMode(28, INPUT);

    pinMode(0, OUTPUT);

    x = get_num( 6,0 );
    printf("\nthe number = %d\n" , x );

}

Friday, December 4, 2015

Database db.c - 12/02/2015 Dr.Mayhew

#include    <stdlib.h>
#include    <stdio.h>



char    db[100][1000000];





int
lookup (
    int    m,
    int    u
) {
    return db[m][u];
}

void
insert (
    int    m,
    int    u
) {
    db[m][u]    = 1;
}

void
delete (
    int    m,
    int    u
) {
    db[m][u]    = 0;
}



void
db_load (
) {
    FILE*    q;
    int        m;
    int        u;

    q    = fopen("george", "r");
    if (q) {
        while(fscanf(q, "%d %d", &m, &u) != EOF) {
            if ((m < 100) && (u < 1000000)) {
                insert(m, u);
            }
        }
        fclose(q);
    }
}

void
db_store (
) {
    FILE*    q;
    int        i;
    int        j;

    q    = fopen("george", "w");
    for (i = 0; i < 100; ++i) {
        for (j = 0; j < 1000000; ++j) {
            if (lookup(i, j))    fprintf(q, "%d %d\n", i, j);
        }
    }
    fclose(q);
}





int
main (
) {
    FILE*    q;
    int        m;
    int        u;
    int        i;
    int        j;

    db_load();
    insert(59, 600);
    insert(59, 700000);
    for (i = 0; i < 100; ++i) {
        for (j = 0; j < 1000000; ++j) {
            if (lookup(i, j))    printf("%d %d\n", i, j);
        }
    }
    db_store();
}