
getStringc
By: a guest on
Feb 22nd, 2008 | syntax:
None | size: 1.60 KB | hits: 328 | expires: Never
void getString(int column, int row, char* buf, int length) {
unsigned int key;
int caps_flag = 1; /* 1 means lower case */
int pos = 0; /* keep track of current position/offset in buffer */
if (length <= 0) { return; }
char ckey;
/* init for data entry */
buf[0] = 0;
locate(column,row);
PrintC("_");
/* data entry loop */
while(1) {
GetKey(&key);
/* Handle control keys */
switch (key) {
case KEY_CTRL_OPTN: caps_flag = !caps_flag; goto print; /* flip the caps flag */
case KEY_CTRL_DEL: if (pos > 0) {pos--; buf[pos] = 0; goto print; }
case KEY_CTRL_AC: pos = 0; *buf = 0; locate(column,row); PrintLine(NULL, column+length); goto print;
case KEY_CTRL_EXE: return;
default: break;
}
/* convert some keys to ascii */
switch (key) {
case KEY_CHAR_PLUS: key = '+'; break;
case KEY_CHAR_MINUS: key = '-'; break;
case KEY_CHAR_MULT: key = '*'; break;
case KEY_CHAR_DIV: key = '/'; break;
case KEY_CHAR_PMINUS: key = '-'; break;
case KEY_CTRL_XTT: key = 'x'; break;
case KEY_CHAR_POW: key = '^'; break;
default: break;
}
ckey = (char) key;
/* check for ascii */
if ((key >= 0x20 && key <= 0x7d) && (pos+1) < length) {
/* check for alpha-chars and upper/lowercase as user wants */
if (key >= 0x41 && key <= 0x5a && caps_flag) { ckey += 0x20; }
buf[pos] = ckey;
pos++;
buf[pos] = 0;
goto print;
}
/* other non-ascii keys */
print:
if (pos < length-1) { buf[pos] = '_'; buf[pos+1] = 0; }
locate(column,row);
PrintLine((unsigned char*)buf, column+pos+(pos < length-1));
}
}