home *** CD-ROM | disk | FTP | other *** search
/ Boldly Go Collection / version40.iso / TS / 17A / DRWIN101.ZIP / STRUTIL.H < prev    next >
C/C++ Source or Header  |  1991-08-22  |  11KB  |  337 lines

  1. #ifndef CUTIL_LOADED
  2.   #define CUTIL_LOADED
  3.  
  4. #include <stdio.h>
  5. #include <conio.h>
  6. #include <ctype.h>
  7.  
  8.  
  9. #if !defined (TRUE)
  10.   #define TRUE 1
  11. #endif
  12. #if !defined (FALSE)
  13.   #define FALSE 0
  14. #endif
  15.  
  16. #if !defined(MIN)
  17.   #define MIN(a,b)    (((a)<(b)) ? (a) : (b))
  18. #endif
  19. #if !defined(MAX)
  20.   #define MAX(a,b)    (((a)>(b)) ? (a) : (b))
  21. #endif
  22.  
  23. #if !defined (BYTE)
  24.   #define BYTE unsigned char
  25. #endif
  26. #if !defined (WORD)
  27.   #define WORD unsigned int
  28. #endif
  29. #if !defined (LWORD)
  30.   #define LWORD unsigned long int
  31. #endif
  32.  
  33. #if !defined (BYTE_OF)                 /*requires Lvalue as operand*/
  34.   #define BYTE_OF  *(BYTE far *)&
  35. #endif
  36.  
  37. #if !defined (WORD_OF)                 /*requires Lvalue as operand*/
  38.   #define WORD_OF  *(WORD far *)&
  39. #endif
  40.  
  41. #if !defined (INT_OF)
  42.   #define INT_OF   *(INT far *)&
  43. #endif
  44.  
  45. #if !defined (LO)                      /*returns LSB of variable as BYTE*/
  46.   #define LO(x)    *((BYTE *)&x)
  47. #endif
  48.  
  49. #if !defined (HI)                      /*returns 2nd-LSB of variable as BYTE*/
  50.   #define HI(x)    *(((BYTE *)&x)+1)
  51. #endif
  52.  
  53. #if !defined (LOWRD)                   /*returns LSW of variable as WORD*/
  54.   #define LOWRD(x)    *((WORD *)&x)
  55. #endif
  56.  
  57. #if !defined (HIWRD)                   /*returns 2nd-LSW of variable as WORD*/
  58.   #define HIWRD(x)    *(((WORD *)&x)+1)
  59. #endif
  60.  
  61. #define _upper(c)      ( ((c)>='a')&&((c)<='z') ? ((c)-0x20) : (c) )
  62. #define _lower(c)      ( ((c)>='A')&&((c)<='Z') ? ((c)+0x20) : (c) )
  63.  
  64. #define HEX0(x)        (_hextab[(x)&0x0F])
  65. #define HEX1(x)        (_hextab[((x)>>4)&0x0F])
  66. #define HEX2(x)        (_hextab[((x)>>8)&0x0F])
  67. #define HEX3(x)        (_hextab[((x)>>12)&0x0F])
  68. #define HEXVAL(c)      ( ((c)<'A') ? ((c)-'0') : (((c)<'a') ? ((c)-'A'+10) : ((c)-'a'+10)) )
  69.  
  70. #define PSEP           2
  71. #define PARAMSEP       1
  72. #define NO_PARAMSEP    0
  73. #define NO_PSEP        0
  74.  
  75. #define MAX_PARAMS 32
  76. #define COLOR_POINTER (WORD far *)0xB8000000L
  77. #define MONO_POINTER (WORD far *)0xB0000000L
  78.  
  79. #define STR_LEN 256
  80.  
  81.  
  82. /****************************************************************************/
  83. /*  ASCII control characters...                                             */
  84. /****************************************************************************/
  85. #ifndef __ASCII
  86. #define __ASCII
  87. #define NUL    0x00    /*null character*/
  88. #define SOH    0x01    /*start of header*/
  89. #define STX    0x02    /*start of text*/
  90. #define ETX    0x03    /*end of text*/
  91. #define EOT    0x04    /*end of transmission*/
  92. #define ENQ    0x05    /*enquiry*/
  93. #define ACK    0x06    /*acknowledge*/
  94. #define BEL    0x07    /*bell, beep*/
  95. #define BS     0x08    /*backspace*/
  96. #define HT     0x09    /*horizontal tab*/
  97. #define TAB    0x09    /*horizontal tab, common name*/
  98. #define LF     0x0A    /*linefeed*/
  99. #define VT     0x0B    /*vertical tab*/
  100. #define FF     0x0C    /*formfeed*/
  101. #define CR     0x0D    /*carriage return, enter*/
  102. #define SO     0x0E    /*shift out*/
  103. #define SI     0x0F    /*shift in*/
  104. #define DC0    0x10    /*device control 0*/
  105. #define DLE    0x10    /*data link escape*/
  106. #define DC1    0x11    /*device control 1*/
  107. #define XON    0x11    /*transmit on*/
  108. #define DC2    0x12    /*device control 2*/
  109. #define DC3    0x13    /*device control 3*/
  110. #define XOFF   0x13    /*transmit off*/
  111. #define DC4    0x14    /*device control 4*/
  112. #define NAK    0x15    /*negative acknowledge*/
  113. #define SYN    0x16    /*synchronous idle*/
  114. #define ETB    0x17    /*end transmission block*/
  115. #define CAN    0x18    /*cancel*/
  116. #define EM     0x19    /*end of medium*/
  117. #define SUB    0x1A    /*substitute*/
  118. #define ESC    0x1B    /*escape*/
  119. #define FS     0x1C    /*file separator*/
  120. #define GS     0x1D    /*group separator*/
  121. #define RS     0x1E    /*record separator*/
  122. #define US     0x1F    /*unit separator*/
  123. #define SPC    0x20    /*space, blank*/
  124. #define DEL    0x7F    /*delete character*/
  125. #endif                                 /*if ascii not already defined*/
  126.  
  127.  
  128. /****************************************************************************/
  129. /*  The following special keys are returned by the getkey() function.       */
  130. /*  The keys are simply the second (scan) code with 256 added.              */
  131. /****************************************************************************/
  132. #ifndef __FKEYS
  133. #define __FKEYS
  134. #define A_ESC      0x0101
  135. #define A_1        0x0178
  136. #define A_2        0x0179
  137. #define A_3        0x017A
  138. #define A_4        0x017B
  139. #define A_5        0x017C
  140. #define A_6        0x017D
  141. #define A_7        0x017E
  142. #define A_8        0x017F
  143. #define A_9        0x0180
  144. #define A_0        0x0181
  145. #define A_MINUS    0x0182    /*0x010C?*/
  146. #define A_EQUAL    0x0183    /*0x010D?*/
  147. #define A_BS       0x010E
  148. #define S_TAB      0x010F
  149. #define A_Q        0x0110
  150. #define A_W        0x0111
  151. #define A_E        0x0112
  152. #define A_R        0x0113
  153. #define A_T        0x0114
  154. #define A_Y        0x0115
  155. #define A_U        0x0116
  156. #define A_I        0x0117
  157. #define A_O        0x0118
  158. #define A_P        0x0119
  159. #define A_LTBRKT   0x011A
  160. #define A_RTBRKT   0x011B
  161. #define A_ENTER    0x011C
  162. #define A_A        0x011E
  163. #define A_S        0x011F
  164. #define A_D        0x0120
  165. #define A_F        0x0121
  166. #define A_G        0x0122
  167. #define A_H        0x0123
  168. #define A_J        0x0124
  169. #define A_K        0x0125
  170. #define A_L        0x0126
  171. #define A_SEMICOL  0x0127
  172. #define A_QUOTE    0x0128
  173. #define A_TILDE    0x0129
  174. #define A_BSLASH   0x012B
  175. #define _F11       0x01D9
  176. #define _F12       0x01DA
  177. #define S_F11      0x0187
  178. #define S_F12      0x0188
  179. #define C_F11      0x0189
  180. #define C_F12      0x018A
  181. #define A_F11      0x018B
  182. #define A_F12      0x018C
  183. #define A_Z        0x012C
  184. #define A_X        0x012D
  185. #define A_C        0x012E
  186. #define A_V        0x012F
  187. #define A_B        0x0130
  188. #define A_N        0x0131
  189. #define A_M        0x0132
  190. #define A_COMMA    0x0133
  191. #define A_PERIOD   0x0134
  192. #define A_SLASH    0x0135
  193. #define A_TAB      0x01A5
  194.  
  195. #define _F1        0x013B
  196. #define _F2        0x013C
  197. #define _F3        0x013D
  198. #define _F4        0x013E
  199. #define _F5        0x013F
  200. #define _F6        0x0140
  201. #define _F7        0x0141
  202. #define _F8        0x0142
  203. #define _F9        0x0143
  204. #define _F10       0x0144
  205. #define _HOME      0x0147
  206. #define _UPAR      0x0148
  207. #define _PGUP      0x0149
  208. #define _LTAR      0x014B
  209. #define _RTAR      0x014D
  210. #define _END       0x014F
  211. #define _DNAR      0x0150
  212. #define _PGDN      0x0151
  213. #define _INS       0x0152
  214. #define _DEL       0x0153
  215. #define S_F1       0x0154
  216. #define S_F2       0x0155
  217. #define S_F3       0x0156
  218. #define S_F4       0x0157
  219. #define S_F5       0x0158
  220. #define S_F6       0x0159
  221. #define S_F7       0x015A
  222. #define S_F8       0x015B
  223. #define S_F9       0x015C
  224. #define S_F10      0x015D
  225. #define C_F1       0x015E
  226. #define C_F2       0x015F
  227. #define C_F3       0x0160
  228. #define C_F4       0x0161
  229. #define C_F5       0x0162
  230. #define C_F6       0x0163
  231. #define C_F7       0x0164
  232. #define C_F8       0x0165
  233. #define C_F9       0x0166
  234. #define C_F10      0x0167
  235. #define A_F1       0x0168
  236. #define A_F2       0x0169
  237. #define A_F3       0x016A
  238. #define A_F4       0x016B
  239. #define A_F5       0x016C
  240. #define A_F6       0x016D
  241. #define A_F7       0x016E
  242. #define A_F8       0x016F
  243. #define A_F9       0x0170
  244. #define A_F10      0x0171
  245. #define C_PRTSC    0x0172
  246. #define C_LTAR     0x0173
  247. #define C_RTAR     0x0174
  248. #define C_END      0x0175
  249. #define C_PGDN     0x0176
  250. #define C_HOME     0x0177
  251. #define C_PGUP     0x0184    /*0x0178?*/
  252.  
  253. #define C_A        0x01
  254. #define C_B        0x02
  255. #define C_C        0x03
  256. #define C_D        0x04
  257. #define C_E        0x05
  258. #define C_F        0x06
  259. #define C_G        0x07
  260. #define C_H        0x08
  261. #define C_I        0x09
  262. #define C_J        0x0A
  263. #define C_K        0x0B
  264. #define C_L        0x0C
  265. #define C_M        0x0D
  266. #define C_N        0x0E
  267. #define C_O        0x0F
  268. #define C_P        0x10
  269. #define C_Q        0x11
  270. #define C_R        0x12
  271. #define C_S        0x13
  272. #define C_T        0x14
  273. #define C_U        0x15
  274. #define C_V        0x16
  275. #define C_W        0x17
  276. #define C_X        0x18
  277. #define C_Y        0x19
  278. #define C_Z        0x1A
  279. #endif                                 /*if keys not already defined*/
  280.  
  281.  
  282. /****************************************************************************/
  283. /*  function protoypes...                                                   */
  284. /****************************************************************************/
  285.  
  286. int   strgetch(void);
  287. char* strdattim(WORD form);                  /*returns date/time string*/
  288. char* strsub(char *s,int pos,int len,char *t);   /*returns t*/
  289. char* strNcpy(char* d,char* s,int n);        /*force 0 at end of strncpy()*/
  290. int   strisalnum(char *s);                   /*T/F*/
  291. int   strcmpshort(char *s,char *t);          /*-1 if s<t,0 if ==,1 if >*/
  292. int   stricmpshort(char *s,char *t);         /*-1 if s<t,0 if ==,1 if >*/
  293. char* strcompress(char* d,char* s,int n);    /*returns d*/
  294. char* strcomment(char *s,char comchar);      /*returns s*/
  295. char* strcchr(char* d,char* s);              //points past C-char in source
  296. int   strcstr(char *d,char *s,int n);        /*returns chars in result*/
  297. int   str2cchr(char* d,char c);              //from char to C-char sequence
  298. int   str2cstr(char* d,char *s,int maxn);    //calls str2cchr() for string
  299. int   strparse(char *s,int psep);            //returns pnum
  300. char* strparam(char* d,int p,char* s);       //returns d
  301. int   strparamint(char* s,int p,int *ip);    //1 if parsed to int
  302. int   strparamsep(char* s);                  //puts \0 after each param
  303. int   strmatch(char *m,char *s);             /*matches, with wildcards*/
  304. int   strasc2ul(char* s,unsigned long* ul,unsigned base);
  305. int   strul2asc(char* s,unsigned long ul,unsigned base);
  306.  
  307. /*these macros allow compatibility with the old strutil...*/
  308. #if STRUTIL_OLD
  309.   #define getkey               strgetch
  310.   #define dattim(x)            strdattim((x))
  311.   #define sub_str(s,p,l,t)     strsub((s),(p),(l),(t))
  312.   #define white_char(c)        isspace((c))
  313.   #define alphanum_str(s)      strisalnum((s))
  314.   #define short_eq(s,t)        (strcmpshort((s),(t))==0)
  315.   #define shorti_eq(s,t)       stricmpshort((s),(t))
  316.   #define strip_white(s)       strcompress((s),(s),0)
  317.   #define strip_comment(s,c)   strcomment((s),(c))
  318.   #define c_chr_str(d,s)       strcstr((d),(s),0)
  319.   #define parse_str(s,sep)     strparse((s),(sep))
  320.   #define param_str(s,p,d)     strparam((s),(p),(d))
  321.   #define param_int(s,p,ip)    strparamint((s),(p),(ip))
  322.   #define param_sep(s)         strparamsep((s))
  323. #endif
  324.  
  325.  
  326. /****************************************************************************/
  327. /*  variable definitions...                                                 */
  328. /****************************************************************************/
  329. extern char *_hextab;                  /*for hex translations*/
  330. extern int  pnum;                      //number of parameters parsed
  331. extern int  ppos[];                    //offset of each parameter
  332. extern int  plen[];                    //length of each parameter
  333.  
  334.  
  335.  
  336. #endif                                 /*if not already loaded*/
  337.