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 = ' '; } }
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; } } } }
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); } } }
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); } } }