Esempio n. 1
0
void cgi_parse_hex(char * gdata)
{
  unsigned int len = 0;
  unsigned char r = 0;
  unsigned char *p = NULL;

  len = strlen(gdata);

  for (p = gdata; *p; p++) {
      len--;

      if (*p == '%') {
         if ((*(p + 1)) && (*(p + 2))) {
            r = hex2asc(*(p + 1), *(p + 2));
            
            *p = r;

            memcpy((char *)(p + 1), (char *)(p + 3), (len - 2));

            *(p + len - 1) = '\0';
         }         
      }

      else if (*p == '+')
	 *p = ' ';
  }
}
Esempio n. 2
0
void main(void) {
    long op1, op2;   //32-bit operands
    char* ptr;       //pointer to keypad buffer
    char* blanks;
    char kbuf[12];   //keypad buffer
    char c, a;
    int i;
    ptr = kbuf;
    blanks = "      ";


    PLL_init();           //set system clock freq to 24MHz
    lcd_init();         //enable lcd
    keypad_enable();    //enable keypad
    set_lcd_addr(0x00); //display on 1st line
    i = 0;
    while(1) {
        c = getkey();     //read keypad
        a = hex2asc(c);   //convert to ascii
        kbuf[i] = a;      // and store in kbuf
        if(c<10) {        //if 0 - 9
            data8(a);      //   display on lcd
            wait_keyup();  //   wait to release key
            i++;           //increment index
        } else {
            switch(c) {
            case 0xE:   //if enter (*) key
                op1 = number(ptr);  //convert to binary
                set_lcd_addr(0x40); //display on 2nd line
                write_long_lcd(op1);
                set_lcd_addr(0x00); //clear 1st line
                type_lcd(blanks);
                wait_keyup();      //wait to release key
                i = 0;             //reset kbuf index
                set_lcd_addr(0x00); //display on 2nd line
                break;

            case 0xA:   //if key A
                op2 = number(ptr);  //convert to binary
                op1 = op1 + op2;    //compete sum
                set_lcd_addr(0x40); //display on 2nd line
                write_long_lcd(op1);
                set_lcd_addr(0x00);  //clear 1st line
                type_lcd(blanks);
                wait_keyup();        //wait to release key
                i = 0;               //reset kbuf index
                set_lcd_addr(0x00);  //display on 1st line
                break;
            case 0xF:   //if clear (#) key
                clear_lcd();  //clear lcd display
                wait_keyup(); //wait to release key
                i = 0;        //reset kbuf index
                break;
            default:
                break;
            }
        }
    }
}
Esempio n. 3
0
int main(){
        unsigned char hexStr[16+1] = { 0x00 };
        strcpy((char *)hexStr, "65");
        char ascStr[8+1] = { 0x00 };
        hex2asc(hexStr, 4, ascStr, 2);
        printf("%s\n", ascStr);
        memset(hexStr, 0x00, sizeof(hexStr));
        asc2hex(ascStr, 2, hexStr, 5);
        printf("%s\n", hexStr);
        return 0;
}
void __xprintf(const char *fmt, va_list ap,
               void (*xputc)(unsigned n, void *cookie),
               void *cookie)
{
    char scratch[16];

    for(;;){
        switch(*fmt){
        case 0:
            va_end(ap);
            return;
        case '%':
            switch(fmt[1]) {
            case 'c': {
                unsigned n = va_arg(ap, unsigned);
                xputc(n, cookie);
                fmt += 2;
                continue;
            }
            case 'h': {
                unsigned n = va_arg(ap, unsigned);
                xputc(hex2asc(n >> 12), cookie);
                xputc(hex2asc(n >> 8), cookie);
                xputc(hex2asc(n >> 4), cookie);
                xputc(hex2asc(n >> 0), cookie);
                fmt += 2;
                continue;
            }
            case 'b': {
                unsigned n = va_arg(ap, unsigned);
                xputc(hex2asc(n >> 4), cookie);
                xputc(hex2asc(n >> 0), cookie);
                fmt += 2;
                continue;
            }                
            case 'p':
            case 'X':
            case 'x': {
                unsigned n = va_arg(ap, unsigned);
                char *p = scratch + 15;
                *p = 0;
                do {
                    *--p = hex2asc(n);
                    n = n >> 4; 
                } while(n != 0);
                while(p > (scratch + 7)) *--p = '0';
                xputs(p, xputc, cookie);
                fmt += 2;
                continue;
            }
            case 'd': {
                int n = va_arg(ap, int);
                char *p = scratch + 15;
                *p = 0;
                if(n < 0) {
                    xputc('-', cookie);
                    n = -n;
                }
                do {
                    *--p = (n % 10) + '0';
                    n /= 10;
                } while(n != 0);
                xputs(p, xputc, cookie);
                fmt += 2;
                continue;
            }
            case 's': {
                char *s = va_arg(ap, char*);
                if(s == 0) s = "(null)";
                xputs(s, xputc, cookie);
                fmt += 2;
                continue;
            }
            }
            xputc(*fmt++, cookie);
            break;
        case '\n':
            xputc('\r', cookie);
        default:
            xputc(*fmt++, cookie);
        }
    }
}
Esempio n. 5
0
void stdMode(char key, Flag *flag){
   int i;
   char a = hex2asc(key);   //convert to ascii
   kbuf[kidx] = a;      // and store in kbuf
    
   if(key<10 && flag->nlock == false){         //if 0 - 9
     if(kidx < 16){ 
       flag->olock = false;       // reset operator lock
       wait_keyup();   // wait to release key
       kidx++;         //increment index
       display(kbuf, kidx,0x40);
     }
      
     
   }  //end if(c<10)
       
   else{        //c !<10
      switch(key){
         /* case 0xB: 
            sprintf(s, "%g", d);
            clear_lcd();
            set_lcd_addr(0x40);
            type_lcd(s);
            wait_keyup();
            break;*/
      
          
         case 0xE:   //if decimal (*) key
           if(flag->deci == false){  
            flag->deci = true;
            wait_keyup();      //wait to release key
            kbuf[kidx++] = '.'; //store '.' in kbuf
            display(kbuf, kidx, 0x40);   
           } 
           break;
            
           case 0xA:   //if Postfix (A) key
             if(flag->post == false) {
               flag->post = true; //set flag to indicate input will be in postfix notation
               led_on(0); //turn on led 0
               clrLine(2);
               kidx = 0; //reset index
               kbuf[kidx] = '\0'; //clear keypad buffer for new input                    
             } 
             else {
               flag->post = false; //back to prefix mode
               led_off(0);  //turn off led 0
               clrLine(2);
               kidx = 0; 
               kbuf[kidx] = '\0'; 
             }
             wait_keyup();
             
             break;       
            
             
          case 0xC: //if delete (C) key
            if(kidx > 0){  //make sure index does not go below 0
             if(is_number(kbuf[kidx-1]))
                flag->olock = true;
             if(kbuf[kidx-1] == '.')
                flag->deci = false;
             if(kbuf[kidx-1] == '(')
                flag->leftpar -= 1;
             if(kbuf[kidx-1] == ')') {          
                flag->leftpar += 1;
                flag->nlock = false;
                flag->olock = false;
             } 
             else
              flag->olock = true;
             
             kbuf[--kidx] = '\0';  //delete char at i by changing to null char
             clrLine(2);
             display(kbuf, kidx, 0x40);
             
            }
            wait_keyup();
            break;
            
            
          case 0xD:   //if shift (D) key
             flag->shift = true;          
             wait_keyup(); //wait to release key
             break;
               
          case 0xF: //if negative (#) key
            if(flag->neg == false){
              flag->neg = true;
              
              for(i = kidx; i > 0; i--){
                kbuf[i] = kbuf[i-1];
              }
              kbuf[0] = '-';
              kidx++;

            } 
            else{
              flag->neg = false;
              
              for(i = 0; i < kidx; i++){
                kbuf[i] = kbuf[i+1];
                
              }
              kidx--;
               
            } 
            clrLine(2);
            display(kbuf, kidx, 0x40);
            wait_keyup(); 
            break;

            default: break;
         }  //switch
      }  //end else (c !< 10)
  
}
void __xprintf(void *outbuf, const char *fmt, va_list ap,
               void (*xputc)(void *outbuf, unsigned n, void *cookie),
               void *cookie)
{
    char scratch[16];
    curbufidx = 0;

    /*serial_puts_msg("\n 1outbuf=");
    dump_uint(outbuf);
    serial_puts_msg("  ");
    serial_puts_msg("  1curbufidx=");
    dump_uint(curbufidx);
    serial_puts_msg("  ");*/

    for(;;) {
        switch(*fmt) {
        case 0:
            va_end(ap);
            return;
        case '%':
            switch(fmt[1]) {
            case 'c': {
                unsigned n = va_arg(ap, unsigned);
                xputc(outbuf, n, cookie);
                fmt += 2;
                continue;
            }
            case 'h': {
                unsigned n = va_arg(ap, unsigned);
                xputc(outbuf, hex2asc(n >> 12), cookie);
                xputc(outbuf, hex2asc(n >> 8), cookie);
                xputc(outbuf, hex2asc(n >> 4), cookie);
                xputc(outbuf, hex2asc(n >> 0), cookie);
                fmt += 2;
                continue;
            }
            case 'b': {
                unsigned n = va_arg(ap, unsigned);
                xputc(outbuf, hex2asc(n >> 4), cookie);
                xputc(outbuf, hex2asc(n >> 0), cookie);
                fmt += 2;
                continue;
            }
            case 'p':
            case 'X':
            case 'x': {
                unsigned n = va_arg(ap, unsigned);
                char *p = scratch + 15;
                *p = 0;
                do {
                    *--p = hex2asc(n);
                    n = n >> 4;
                } while(n != 0);
                while(p > (scratch + 7)) *--p = '0';
                xputs(outbuf, p, xputc, cookie);
                fmt += 2;
                continue;
            }
            case 'd': {
                int n = va_arg(ap, int);
                char *p = scratch + 15;
                *p = 0;
                if(n < 0) {
                    xputc(outbuf, '-', cookie);
                    n = -n;
                }
                do {
                    *--p = (n % 10) + '0';
                    n /= 10;
                } while(n != 0);
                xputs(outbuf, p, xputc, cookie);
                fmt += 2;
                continue;
            }
            case 's': {
                char *s = va_arg(ap, char*);
                if(s == 0) s = "(null)";
                xputs(outbuf, s, xputc, cookie);
                fmt += 2;
                continue;
            }
            }
            xputc(outbuf, *fmt++, cookie);
            break;
#if 0
        case '\n':
		/*serial_puts_msg(" [ is return : ");
		dump_uint(fmt[1]);
		serial_puts_msg(" ] ");*/
		xputc(outbuf, '\r', cookie);
#endif
        default:
            xputc(outbuf, *fmt++, cookie);
        }
    }
}