--- np2/common/profile.c 2003/10/16 17:57:10 1.1 +++ np2/common/profile.c 2004/02/11 17:39:59 1.2 @@ -103,3 +103,133 @@ gden_err0: return(r); } + +// ---- + +typedef struct { + UINT8 num; + char str[7]; +} KEYNAME; + +#include "pf_key.tbl" + +static const char *getarg(const char *str, char *buf, UINT leng) { + + UINT8 c; + + if (leng) { + leng--; + } + else { + buf = NULL; + } + if (str) { + c = (UINT8)*str; + while(((c - 1) & 0xff) < 0x20) { + str++; + c = (UINT8)*str; + } + if (c == 0) { + str = NULL; + } + } + if (str) { + c = (UINT8)*str; + while(c > 0x20) { + if (leng) { + *buf++ = c; + leng--; + } + str++; + c = (UINT8)*str; + } + } + if (buf) { + buf[0] = '\0'; + } + return(str); +} + +static const KEYNAME *searchkeynum(const char *str) { + +const KEYNAME *n; +const KEYNAME *nterm; + + n = keyname; + nterm = keyname + (sizeof(keyname) / sizeof(KEYNAME)); + while(n < nterm) { + if (!milstr_cmp(str, n->str)) { + return(n); + } + n++; + } + return(NULL); +} + +static const KEYNAME *searchkeystr(UINT8 num) { + +const KEYNAME *n; +const KEYNAME *nterm; + + n = keyname; + nterm = keyname + (sizeof(keyname) / sizeof(KEYNAME)); + while(n < nterm) { + if (n->num == num) { + return(n); + } + n++; + } + return(NULL); +} + +UINT profile_setkeys(const char *str, UINT8 *key, UINT keymax) { + + UINT ret; + char work[7]; +const KEYNAME *k; + + ret = 0; + while(ret < keymax) { + str = getarg(str, work, sizeof(work)); + if (str == NULL) { + break; + } + k = searchkeynum(work); + if (k) { + key[ret] = k->num; + ret++; + } + } + return(ret); +} + +void profile_getkeys(char *str, UINT strmax, const UINT8 *key, UINT keys) { + + UINT space; + UINT i; +const KEYNAME *k; + UINT len; + + if ((str == NULL) || (strmax == 0)) { + return; + } + strmax--; + space = 0; + for (i=0; istr); + if ((len + space) > strmax) { + break; + } + if (space) { + *str++ = ' '; + } + CopyMemory(str, k->str, len); + str += len; + space = 1; + } + } + str[0] = '\0'; +} +