Don't like ads? PRO users don't see any ads ;-)
Guest

getStringc

By: a guest on Feb 22nd, 2008  |  syntax: None  |  size: 1.60 KB  |  hits: 328  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. void getString(int column, int row, char* buf, int length) {
  2.         unsigned int key;
  3.         int caps_flag = 1; /* 1 means lower case */
  4.         int pos = 0;    /* keep track of current position/offset in buffer */
  5.         if (length <= 0) { return; }
  6.         char ckey;
  7.        
  8.         /* init for data entry */
  9.         buf[0] = 0;
  10.         locate(column,row);
  11.         PrintC("_");
  12.        
  13.         /* data entry loop */
  14.         while(1) {
  15.                 GetKey(&key);
  16.                
  17.                 /* Handle control keys */
  18.                 switch (key) {
  19.                         case KEY_CTRL_OPTN:     caps_flag = !caps_flag;  goto print;    /* flip the caps flag */
  20.                         case KEY_CTRL_DEL:      if (pos > 0) {pos--;  buf[pos] = 0; goto print; }
  21.                         case KEY_CTRL_AC:       pos = 0; *buf = 0; locate(column,row); PrintLine(NULL, column+length); goto print;
  22.                         case KEY_CTRL_EXE:      return;
  23.                         default:                break;
  24.                 }
  25.                
  26.                 /* convert some keys to ascii */
  27.                 switch (key) {
  28.                         case KEY_CHAR_PLUS:     key = '+'; break;
  29.                         case KEY_CHAR_MINUS:    key = '-'; break;
  30.                         case KEY_CHAR_MULT:     key = '*'; break;
  31.                         case KEY_CHAR_DIV:      key = '/'; break;
  32.                         case KEY_CHAR_PMINUS:   key = '-'; break;
  33.                         case KEY_CTRL_XTT:      key = 'x'; break;
  34.                         case KEY_CHAR_POW:      key = '^'; break;
  35.                         default:                break;
  36.                 }
  37.                
  38.                 ckey = (char) key;
  39.                
  40.                 /* check for ascii */
  41.                 if ((key >= 0x20 && key <= 0x7d) && (pos+1) < length) {
  42.                         /* check for alpha-chars and upper/lowercase as user wants */
  43.                         if (key >= 0x41 && key <= 0x5a && caps_flag) { ckey += 0x20; }
  44.                         buf[pos] = ckey;
  45.                         pos++;
  46.                         buf[pos] = 0;
  47.                         goto print;
  48.                 }
  49.                
  50.                 /* other non-ascii keys */
  51.         print:
  52.                 if (pos < length-1) { buf[pos] = '_'; buf[pos+1] = 0; }
  53.                 locate(column,row);
  54.                 PrintLine((unsigned char*)buf, column+pos+(pos < length-1));
  55.         }
  56. }