|
|
1.1 root 1: /* BAJA.C */
2:
3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
4:
5: #include <io.h>
6: #include <stdio.h>
7: #include <string.h>
8: #include <ctype.h>
9: #include <fcntl.h>
10: #include <share.h>
11: #include <alloc.h>
12: #include "cmdshell.h"
13: #include "ars_defs.h"
14: #include "crc32.h"
15:
16: unsigned _stklen=20000; /* Set stack size in code, not header */
17:
18: char **label_name=NULL
19: ,**goto_file=NULL
20: ,**goto_label=NULL
21: ,**call_file=NULL
22: ,**call_label=NULL;
23:
24: ulong *var_name=NULL,vars=0;
25:
26: char **define_str=NULL
27: ,**define_val=NULL;
28:
29: char *linestr="%s %d: %s\n";
30: char tmp[256];
31:
32: uint *label_indx=NULL
33: ,*goto_indx=NULL
34: ,*goto_line=NULL
35: ,*call_indx=NULL
36: ,*call_line=NULL;
37:
38: uint display=0,line=0,labels=0,gotos=0,calls=0,defines=0,case_sens=0;
39:
40: FILE *out=NULL;
41:
42: void bail(void)
43: {
44: if(out)
45: chsize(fileno(out),0);
46: }
47:
48: /****************************************************************************/
49: /* Truncates white-space chars off end of 'str' and terminates at first tab */
50: /****************************************************************************/
51: void truncsp(char *str)
52: {
53: int c;
54:
55: c=strlen(str);
56: while(c && str[c-1]<=SP) c--;
57: str[c]=0;
58: }
59:
60: /****************************************************************************/
61: /* Converts an ASCII Hex string into an ulong */
62: /****************************************************************************/
63: ulong ahtoul(char *str)
64: {
65: ulong l,val=0;
66:
67: while((l=(*str++)|0x20)!=0x20)
68: val=(l&0xf)+(l>>6&1)*9+val*16;
69: return(val);
70: }
71:
72: /* C Escape char */
73:
74: uchar cesc(char ch)
75: {
76: switch(ch) {
77: case 'r':
78: return(CR);
79: case 'n':
80: return(LF);
81: case 't':
82: return(TAB);
83: case 'b':
84: return(BS);
85: case 'a':
86: return(7);
87: case 'f':
88: return(FF);
89: case 'v':
90: return(11);
91: default:
92: return(ch); }
93: }
94:
95: long val(char *src, char *p)
96: {
97: static int inside;
98: long l;
99:
100: if(isdigit(*p) || *p=='-') /* Dec, Hex, or Oct */
101: l=strtol(p,&p,0);
102: else if(*p=='\'') { /* Char */
103: p++;
104: if(*p=='\\') {
105: p++;
106: l=cesc(*p); }
107: else
108: l=*p;
109: p++; }
110: else if(*p=='.') /* Bit */
111: l=1L<<strtol(p+1,&p,0);
112: else {
113: printf("SYNTAX ERROR (expecting integer constant):\n");
114: printf(linestr,src,line,*p ? p : "<end of line>");
115: exit(1);
116: return(0); }
117: if(inside) {
118: return(l); }
119: inside=1;
120: while(*p)
121: switch(*(p++)) {
122: case '+':
123: l+=val(src,p);
124: break;
125: case '-':
126: l-=val(src,p);
127: break;
128: case '*':
129: l*=val(src,p);
130: break;
131: case '/':
132: l/=val(src,p);
133: break;
134: case '%':
135: l%=val(src,p);
136: break;
137: case '&':
138: l&=val(src,p);
139: break;
140: case '|':
141: l|=val(src,p);
142: break;
143: case '~':
144: l&=~val(src,p);
145: break;
146: case '^':
147: l^=val(src,p);
148: break;
149: case '>':
150: if(*p=='>') {
151: p++;
152: l>>=val(src,p); }
153: break;
154: case '<':
155: if(*p=='<') {
156: p++;
157: l<<=val(src,p); }
158: break;
159: case SP:
160: case '#':
161: inside=0;
162: return(l); }
163: inside=0;
164: return(l);
165: }
166:
167:
168: void writecstr(uchar *p)
169: {
170: char str[1024];
171: int j=0,inquotes=0;
172:
173: while(*p) {
174: if(*p=='"') { /* ignore quotes */
175: if(inquotes)
176: break;
177: inquotes=1;
178: p++;
179: continue; }
180: if(*p=='\\') { /* escape */
181: p++;
182: if(isdigit(*p)) {
183: str[j]=atoi(p); /* decimal, NOT octal */
184: if(isdigit(*(++p))) /* skip up to 3 digits */
185: if(isdigit(*(++p)))
186: p++;
187: j++;
188: continue; }
189: switch(*(p++)) {
190: case 'x':
191: tmp[0]=*(p++);
192: tmp[1]=0;
193: if(isxdigit(*p)) { /* if another hex digit, skip too */
194: tmp[1]=*(p++);
195: tmp[2]=0; }
196: str[j]=(char)ahtoul(tmp);
197: break;
198: case 'r':
199: str[j]=CR;
200: break;
201: case 'n':
202: str[j]=LF;
203: break;
204: case 't':
205: str[j]=TAB;
206: break;
207: case 'b':
208: str[j]=BS;
209: break;
210: case 'a':
211: str[j]=7; /* BEL */
212: break;
213: case 'f':
214: str[j]=FF;
215: break;
216: case 'v':
217: str[j]=11; /* VT */
218: break;
219: default:
220: str[j]=*(p-1);
221: break; }
222: j++;
223: continue; }
224: str[j++]=*(p++); }
225: str[j]=0;
226: fwrite(str,1,j+1,out);
227: }
228:
229: void writestr(uchar *p)
230: {
231: char str[1024];
232: int j=0;
233:
234: while(*p) {
235: if(*p=='"') { /* ignore quotes */
236: p++;
237: continue; }
238: if(*p=='\\' && *(p+1)=='"' && *(p+2))
239: p++;
240: str[j++]=*(p++); }
241: str[j]=0;
242: fwrite(str,1,j+1,out);
243: }
244:
245: /****************************************************************************/
246: /* Returns 32-crc of string (not counting terminating NULL) */
247: /****************************************************************************/
248: ulong crc32(char *str)
249: {
250: int i=0;
251: ulong crc=0xffffffffUL;
252:
253: while(str[i])
254: crc=ucrc32(str[i++],crc);
255: crc=~crc;
256: return(crc);
257: }
258:
259: void cvttab(char *str)
260: {
261: int i;
262:
263: for(i=0;str[i];i++)
264: if(str[i]==TAB)
265: str[i]=SP;
266: }
267:
268: void newvar(uchar *in)
269: {
270: uchar name[128];
271: long i,l;
272:
273: sprintf(name,"%.80s",in);
274: if(!case_sens)
275: strupr(name);
276: l=crc32(name);
277: for(i=0;i<vars;i++)
278: if(var_name[i]==l)
279: break;
280: if(i<vars)
281: return;
282: if((var_name=(ulong *)REALLOC(var_name,sizeof(long)*(vars+1)))==NULL) {
283: printf("Too many (%lu) variables!\r\n",vars);
284: exit(1); }
285: var_name[vars]=l;
286: if(display)
287: printf("newvar(%08lX)=%s\n",l,in);
288: vars++;
289: }
290:
291: void writecrc(uchar *src, uchar *in)
292: {
293: uchar name[128];
294: long i,l;
295:
296: sprintf(name,"%.80s",in);
297: if(!case_sens)
298: strupr(name);
299: if(!stricmp(name,"STR") || !name[0])
300: l=0;
301: else {
302: l=crc32(name);
303:
304: for(i=0;i<vars;i++)
305: if(var_name[i]==l)
306: break;
307: if(i==vars) {
308: printf("SYNTAX ERROR (expecting variable name):\n");
309: printf(linestr,src,line,*in ? in : "<end of line>");
310: exit(1); }
311:
312: }
313: fwrite(&l,4,1,out);
314: }
315:
316: long isvar(uchar *arg)
317: {
318: uchar name[128],*p;
319: long i,l;
320:
321: if(!arg || !*arg)
322: return(0);
323:
324: sprintf(name,"%.80s",arg);
325: if((p=strchr(name,SP))!=NULL) // Truncate at first space
326: *p=0;
327: if(!case_sens)
328: strupr(name);
329: l=crc32(name);
330:
331: for(i=0;i<vars;i++)
332: if(var_name[i]==l)
333: break;
334: if(i==vars)
335: return(0);
336: return(l);
337: }
338:
339: int str_cmp(char *s1, char *s2)
340: {
341: if(case_sens)
342: return(strcmp(s1,s2));
343: return(stricmp(s1,s2));
344: }
345:
346: void expdefs(uchar *line)
347: {
348: uchar str[512],*p,*sp,sav[2]={0};
349: int i;
350:
351: str[0]=0;
352: for(p=line;*p;p++) {
353: if(*p==SP) {
354: strcat(str," ");
355: continue; }
356:
357: if(*p=='"') { /* Skip quoted text */
358: sp=strchr(p+1,'"');
359: if(sp) *sp=0;
360: strcat(str,p);
361: if(!sp)
362: break;
363: strcat(str,"\"");
364: p+=strlen(p);
365: continue; }
366:
367: for(sp=p;*sp;sp++)
368: if(!isalnum(*sp) && *sp!='_')
369: break;
370: sav[0]=*sp; /* Save delimiter */
371: sav[1]=0;
372: *sp=0;
373: for(i=0;i<defines;i++)
374: if(!str_cmp(define_str[i],p))
375: break;
376: if(i<defines)
377: strcat(str,define_val[i]);
378: else
379: strcat(str,p);
380: if(!sav[0]) /* Last argument */
381: break;
382: p+=strlen(p);
383: strcat(str,sav); /* Restore delimiter */
384: }
385: strcpy(line,str);
386: }
387:
388:
389:
390: void compile(char *src)
391: {
392: uchar str[1024],save[1024],*p,*sp,*tp,*arg,*arg2,*arg3,*ar,ch;
393: ushort i,j;
394: long l,v,savline;
395: FILE *in;
396:
397: strupr(src);
398: if((in=fopen(src,"rb"))==NULL) {
399: printf("error opening %s for read\n",src);
400: exit(1); }
401: line=0;
402:
403: while(!feof(in) && !ferror(in)) {
404: if(!fgets(str,1000,in))
405: break;
406: truncsp(str);
407: cvttab(str);
408: line++;
409: strcpy(save,str);
410: p=str;
411: while(*p && *p<=SP) /* look for beginning of command */
412: p++;
413: if(!*p)
414: continue;
415: if(*p=='#') /* remarks start with # */
416: continue;
417: expdefs(p); /* expand defines */
418: if(display)
419: printf("%s\n",p);
420: sp=strchr(p,SP);
421: arg=arg2=arg3="";
422: if(sp) {
423: *sp=0;
424: arg=sp+1;
425: while(*arg && *arg<=SP) arg++;
426: sp=strchr(arg,SP);
427: if(sp) {
428: arg2=sp+1;
429: while(*arg2 && *arg2<=SP) arg2++;
430: sp=strchr(arg2,SP);
431: if(sp) {
432: arg3=sp+1;
433: while(*arg3 && *arg3<=SP) arg3++; } } }
434:
435: if(!stricmp(p,"!INCLUDE")) {
436: savline=line;
437: sp=strchr(arg,SP);
438: if(sp) *sp=0;
439: compile(arg);
440: line=savline;
441: continue; }
442:
443: if(!stricmp(p,"!DEFINE")) { /* define */
444: sp=strchr(arg,SP);
445: if(sp)
446: *sp=0;
447: else
448: break;
449: tp=strrchr(arg2,'\"');
450: if(!tp)
451: tp=arg2;
452: sp=strchr(tp,'#');
453: if(sp)
454: *sp=0;
455: truncsp(arg2);
456: if((define_str=(char **)REALLOC(define_str,sizeof(char *)*defines+1))
457: ==NULL) {
458: printf("Too many defines.\r\n");
459: exit(1); }
460: if((define_str[defines]=(char *)MALLOC(strlen(arg)+1))==NULL) {
461: printf("Too many defines.\r\n");
462: exit(1); }
463: if((define_val=(char **)REALLOC(define_val,sizeof(char *)*defines+1))
464: ==NULL) {
465: printf("Too many defines.\r\n");
466: exit(1); }
467: if((define_val[defines]=(char *)MALLOC(strlen(arg2)+1))==NULL) {
468: printf("Too many defines.\r\n");
469: exit(1); }
470: strcpy(define_str[defines],arg);
471: strcpy(define_val[defines],arg2);
472: defines++;
473: continue; }
474:
475: if(!stricmp(p,"!GLOBAL")) { /* declare global variables */
476: if(!*arg) break;
477: for(p=arg;*p && *p!='#';) {
478: sp=strchr(p,SP);
479: if(sp) *sp=0;
480: newvar(p);
481: if(!sp)
482: break;
483: p=sp+1;
484: while(*p && *p<=SP)
485: p++; }
486: continue; }
487:
488: if(!stricmp(p,"PATCH")) {
489: if(!*arg) break;
490: p=arg;
491: while(*p) {
492: while(*p && *p<=SP) p++;
493: tmp[0]=*p++;
494: tmp[1]=*p++;
495: tmp[2]=0;
496: if(!tmp[0])
497: break;
498: ch=ahtoul(tmp);
499: fputc(ch,out); }
500: continue; }
501:
502: if(!stricmp(p,"SHOW_VARS")) {
503: fputc(CS_VAR_INSTRUCTION,out);
504: fputc(SHOW_VARS,out);
505: continue; }
506:
507: if(!stricmp(p,"COMPARE_ARS")) {
508: if(!*arg) break;
509: strupr(arg);
510: ar=arstr(&i,arg);
511: fprintf(out,"%c%c",CS_COMPARE_ARS,(uchar)i);
512: fwrite(ar,i,1,out);
513: FREE(ar);
514: continue; }
515:
516: if(!stricmp(p,"CHKSYSPASS")) {
517: fprintf(out,"%c",CS_CHKSYSPASS);
518: continue; }
519: if(!stricmp(p,"INFO_SYSTEM")) {
520: fprintf(out,"%c",CS_INFO_SYSTEM);
521: continue; }
522: if(!stricmp(p,"INFO_SUBBOARD")) {
523: fprintf(out,"%c",CS_INFO_SUBBOARD);
524: continue; }
525: if(!stricmp(p,"INFO_DIRECTORY")) {
526: fprintf(out,"%c",CS_INFO_DIRECTORY);
527: continue; }
528: if(!stricmp(p,"INFO_VERSION")) {
529: fprintf(out,"%c",CS_INFO_VERSION);
530: continue; }
531: if(!stricmp(p,"INFO_USER")) {
532: fprintf(out,"%c",CS_INFO_USER);
533: continue; }
534: if(!stricmp(p,"INFO_XFER_POLICY")) {
535: fprintf(out,"%c",CS_INFO_XFER_POLICY);
536: continue; }
537: if(!stricmp(p,"LOGKEY")) {
538: fprintf(out,"%c",CS_LOGKEY);
539: continue; }
540: if(!stricmp(p,"LOGKEY_COMMA")) {
541: fprintf(out,"%c",CS_LOGKEY_COMMA);
542: continue; }
543: if(!stricmp(p,"LOGSTR")) {
544: fprintf(out,"%c",CS_LOGSTR);
545: continue; }
546:
547: if(!stricmp(p,"ONLINE")) {
548: fprintf(out,"%c%c",CS_ONE_MORE_BYTE,CS_ONLINE);
549: continue; }
550: if(!stricmp(p,"OFFLINE")) {
551: fprintf(out,"%c%c",CS_ONE_MORE_BYTE,CS_OFFLINE);
552: continue; }
553: if(!stricmp(p,"NEWUSER")) {
554: fprintf(out,"%c%c",CS_ONE_MORE_BYTE,CS_NEWUSER);
555: continue; }
556: if(!stricmp(p,"LOGON")) {
557: fprintf(out,"%c%c",CS_ONE_MORE_BYTE,CS_LOGON);
558: continue; }
559: if(!stricmp(p,"LOGOUT")) {
560: fprintf(out,"%c%c",CS_ONE_MORE_BYTE,CS_LOGOUT);
561: continue; }
562: if(!stricmp(p,"EXIT")) {
563: fprintf(out,"%c%c",CS_ONE_MORE_BYTE,CS_EXIT);
564: continue; }
565:
566: if(!stricmp(p,"USER_EVENT")) {
567: if(!*arg)
568: break;
569: if((l=isvar(arg))!=0) {
570: fputc(CS_USE_INT_VAR,out);
571: fwrite(&l,4,1,out); // variable
572: fputc(2,out); // int offset
573: fputc(1,out); // int length
574: ch=0; } // place holder
575: else
576: ch=val(src,arg);
577: fprintf(out,"%c%c",CS_TWO_MORE_BYTES,CS_USER_EVENT);
578: fwrite(&ch,1,1,out);
579: continue; }
580:
581: if(!stricmp(p,"PUT_NODE")) {
582: fprintf(out,"%c",CS_PUT_NODE);
583: continue; }
584: if(!stricmp(p,"SYNC")) {
585: fprintf(out,"%c",CS_SYNC);
586: continue; }
587: if(!stricmp(p,"ASYNC")) {
588: fprintf(out,"%c",CS_ASYNC);
589: continue; }
590: if(!stricmp(p,"RIOSYNC")) {
591: fprintf(out,"%c",CS_RIOSYNC);
592: continue; }
593: if(!stricmp(p,"GETTIMELEFT")) {
594: fprintf(out,"%c",CS_GETTIMELEFT);
595: continue; }
596: if(!stricmp(p,"SAVELINE")) {
597: fprintf(out,"%c",CS_SAVELINE);
598: continue; }
599: if(!stricmp(p,"RESTORELINE")) {
600: fprintf(out,"%c",CS_RESTORELINE);
601: continue; }
602: if(!stricmp(p,"IF_TRUE") || !stricmp(p,"IF_EQUAL")) {
603: fprintf(out,"%c",CS_IF_TRUE);
604: continue; }
605: if(!stricmp(p,"IF_FALSE") || !stricmp(p,"IF_NOT_EQUAL")) {
606: fprintf(out,"%c",CS_IF_FALSE);
607: continue; }
608: if(!stricmp(p,"IF_GREATER")) {
609: fprintf(out,"%c",CS_IF_GREATER);
610: continue; }
611: if(!stricmp(p,"IF_GREATER_OR_EQUAL")
612: || !stricmp(p,"IF_EQUAL_OR_GREATER")) {
613: fprintf(out,"%c",CS_IF_GREATER_OR_EQUAL);
614: continue; }
615: if(!stricmp(p,"IF_LESS")) {
616: fprintf(out,"%c",CS_IF_LESS);
617: continue; }
618: if(!stricmp(p,"IF_LESS_OR_EQUAL")
619: || !stricmp(p,"IF_EQUAL_OR_LESS")) {
620: fprintf(out,"%c",CS_IF_LESS_OR_EQUAL);
621: continue; }
622: if(!stricmp(p,"ENDIF") || !stricmp(p,"END_IF")) {
623: fprintf(out,"%c",CS_ENDIF);
624: continue; }
625: if(!stricmp(p,"ELSE")) {
626: fprintf(out,"%c",CS_ELSE);
627: continue; }
628: if(p[0]==':') { /* :label */
629: p++;
630: sp=strchr(p,SP);
631: if(sp)
632: *sp=0;
633: for(i=0;i<labels;i++)
634: if(!stricmp(label_name[i],p))
635: break;
636: if(i<labels) {
637: printf("SYNTAX ERROR (duplicate label name):\n");
638: printf(linestr,src,line,p);
639: exit(1); }
640: if((label_name=(char **)REALLOC(label_name,sizeof(char *)*labels+1))
641: ==NULL) {
642: printf("Too many labels.\n");
643: exit(1); }
644: if((label_indx=(uint *)REALLOC(label_indx,sizeof(int)*labels+1))
645: ==NULL) {
646: printf("Too many labels.\n");
647: exit(1); }
648: if((label_name[labels]=(char *)MALLOC(strlen(p)+1))==NULL) {
649: printf("Too many labels.\r\n");
650: exit(1); }
651: strcpy(label_name[labels],p);
652: label_indx[labels]=ftell(out);
653: labels++;
654: continue; }
655: if(!stricmp(p,"GOTO")) { /* goto */
656: if(!*arg) break;
657: sp=strchr(arg,SP);
658: if(sp)
659: *sp=0;
660: if((goto_label=(char **)REALLOC(goto_label,sizeof(char *)*gotos+1))
661: ==NULL) {
662: printf("Too many gotos.\r\n");
663: exit(1); }
664: if((goto_file=(char **)REALLOC(goto_file,sizeof(char *)*gotos+1))
665: ==NULL) {
666: printf("Too many gotos.\r\n");
667: exit(1); }
668: if((goto_indx=(uint *)REALLOC(goto_indx,sizeof(int)*gotos+1))
669: ==NULL) {
670: printf("Too many gotos.\r\n");
671: exit(1); }
672: if((goto_line=(uint *)REALLOC(goto_line,sizeof(int)*gotos+1))
673: ==NULL) {
674: printf("Too many gotos.\r\n");
675: exit(1); }
676: if((goto_label[gotos]=(char *)MALLOC(strlen(arg)+1))==NULL) {
677: printf("Too many gotos.\r\n");
678: exit(1); }
679: if((goto_file[gotos]=(char *)MALLOC(strlen(str)+1))==NULL) {
680: printf("Too many gotos.\r\n");
681: exit(1); }
682: strcpy(goto_label[gotos],arg);
683: strcpy(goto_file[gotos],str);
684: goto_indx[gotos]=ftell(out);
685: goto_line[gotos]=line;
686: gotos++;
687: fprintf(out,"%c%c%c",CS_GOTO,0xff,0xff);
688: continue; }
689: if(!stricmp(p,"CALL")) { /* call */
690: if(!*arg) break;
691: sp=strchr(arg,SP);
692: if(sp)
693: *sp=0;
694: if((call_label=(char **)REALLOC(call_label,sizeof(char *)*(calls+1)))
695: ==NULL) {
696: printf("Too many calls.\r\n");
697: exit(1); }
698: if((call_file=(char **)REALLOC(call_file,sizeof(char *)*(calls+1)))
699: ==NULL) {
700: printf("Too many calls.\r\n");
701: exit(1); }
702: if((call_indx=(uint *)REALLOC(call_indx,sizeof(int)*(calls+1)))
703: ==NULL) {
704: printf("Too many calls.\r\n");
705: exit(1); }
706: if((call_line=(uint *)REALLOC(call_line,sizeof(int)*(calls+1)))
707: ==NULL) {
708: printf("Too many calls.\r\n");
709: exit(1); }
710: if((call_label[calls]=(char *)MALLOC(strlen(arg)+1))==NULL) {
711: printf("Too many calls.\r\n");
712: exit(1); }
713: if((call_file[calls]=(char *)MALLOC(strlen(src)+1))==NULL) {
714: printf("Too many calls.\r\n");
715: exit(1); }
716:
717: strcpy(call_label[calls],arg);
718: strcpy(call_file[calls],src);
719: call_indx[calls]=ftell(out);
720: call_line[calls]=line;
721: calls++;
722: fprintf(out,"%c%c%c",CS_CALL,0xff,0xff);
723: continue; }
724:
725: if(!stricmp(p,"RETURN")) {
726: fprintf(out,"%c",CS_RETURN);
727: continue; }
728: if(!stricmp(p,"CMD_HOME")) {
729: fprintf(out,"%c",CS_CMD_HOME);
730: continue; }
731: if(!stricmp(p,"CMDKEY")) {
732: if(!*arg) break;
733: if(!stricmp(arg,"DIGIT"))
734: ch=CS_DIGIT;
735: else if(!stricmp(arg,"EDIGIT"))
736: ch=CS_EDIGIT;
737: else
738: ch=toupper(*arg);
739: if(ch=='/')
740: ch=*(arg+1)|0x80; /* high bit indicates slash required */
741: else if(ch=='^' && *(arg+1)>=0x40)
742: ch=*(arg+1)-0x40; /* ctrl char */
743: else if(ch=='\\')
744: ch=cesc(*(arg+1));
745: else if(ch=='\'')
746: ch=*(arg+1);
747: fprintf(out,"%c%c",CS_CMDKEY,ch);
748: continue; }
749: if(!stricmp(p,"SETLOGIC") || !stricmp(p,"SET_LOGIC")) {
750: if(!*arg) break;
751: if(!stricmp(arg,"TRUE") || !stricmp(arg,"EQUAL"))
752: ch=LOGIC_TRUE;
753: else if(!stricmp(arg,"GREATER"))
754: ch=LOGIC_GREATER;
755: else if(!stricmp(arg,"LESS"))
756: ch=LOGIC_LESS;
757: else
758: ch=LOGIC_FALSE;
759: fprintf(out,"%c%c",CS_SETLOGIC,ch);
760: continue; }
761:
762: if(!stricmp(p,"DEFINE_STR_VAR") || !stricmp(p,"STR")) {
763: if(!*arg) break;
764: for(p=arg;*p && *p!='#';) {
765: sp=strchr(p,SP);
766: if(sp) *sp=0;
767: fputc(CS_VAR_INSTRUCTION,out);
768: fputc(DEFINE_STR_VAR,out);
769: newvar(p);
770: writecrc(src,p);
771: if(!sp)
772: break;
773: p=sp+1;
774: while(*p && *p<=SP)
775: p++; }
776: continue; }
777: if(!stricmp(p,"DEFINE_INT_VAR") || !stricmp(p,"INT")) {
778: if(!*arg) break;
779: for(p=arg;*p && *p!='#';) {
780: sp=strchr(p,SP);
781: if(sp) *sp=0;
782: fputc(CS_VAR_INSTRUCTION,out);
783: fputc(DEFINE_INT_VAR,out);
784: newvar(p);
785: writecrc(src,p);
786: if(!sp)
787: break;
788: p=sp+1;
789: while(*p && *p<=SP)
790: p++; }
791: continue; }
792: if(!stricmp(p,"DEFINE_GLOBAL_STR_VAR") || !stricmp(p,"GLOBAL_STR")) {
793: if(!*arg) break;
794: for(p=arg;*p && *p!='#';) {
795: sp=strchr(p,SP);
796: if(sp) *sp=0;
797: fputc(CS_VAR_INSTRUCTION,out);
798: fputc(DEFINE_GLOBAL_STR_VAR,out);
799: newvar(p);
800: writecrc(src,p);
801: if(!sp)
802: break;
803: p=sp+1;
804: while(*p && *p<=SP)
805: p++; }
806: continue; }
807: if(!stricmp(p,"DEFINE_GLOBAL_INT_VAR") || !stricmp(p,"GLOBAL_INT")) {
808: if(!*arg) break;
809: for(p=arg;*p && *p!='#';) {
810: sp=strchr(p,SP);
811: if(sp) *sp=0;
812: fputc(CS_VAR_INSTRUCTION,out);
813: fputc(DEFINE_GLOBAL_INT_VAR,out);
814: newvar(p);
815: writecrc(src,p);
816: if(!sp)
817: break;
818: p=sp+1;
819: while(*p && *p<=SP)
820: p++; }
821: continue; }
822:
823: if(!stricmp(p,"LOGIN")) {
824: if(!*arg) break;
825: fputc(CS_STR_FUNCTION,out);
826: fputc(CS_LOGIN,out);
827: writecstr(arg);
828: continue; }
829:
830: if(!stricmp(p,"LOAD_TEXT")) {
831: if(!*arg) break;
832: fputc(CS_STR_FUNCTION,out);
833: fputc(CS_LOAD_TEXT,out);
834: writestr(arg);
835: continue; }
836:
837: if(!stricmp(p,"SET_STR_VAR")
838: || (!stricmp(p,"SET") && strchr(arg,'"'))) {
839: if(!*arg) break;
840: fputc(CS_VAR_INSTRUCTION,out);
841: fputc(SET_STR_VAR,out);
842: p=strchr(arg,SP);
843: if(!p)
844: break;
845: *p=0;
846: writecrc(src,arg);
847: writecstr(arg2);
848: continue; }
849: if(!stricmp(p,"CAT_STR_VAR")
850: || (!stricmp(p,"STRCAT") && strchr(arg,'"'))) {
851: fputc(CS_VAR_INSTRUCTION,out);
852: fputc(CAT_STR_VAR,out);
853: p=strchr(arg,SP);
854: if(!p)
855: break;
856: *p=0;
857: writecrc(src,arg);
858: writecstr(arg2);
859: continue; }
860: if((!stricmp(p,"STRSTR") || !stricmp(p,"COMPARE_SUBSTR"))
861: && strchr(arg,'"')) {
862: fputc(CS_VAR_INSTRUCTION,out);
863: fputc(STRSTR_VAR,out);
864: p=strchr(arg,SP);
865: if(!p)
866: break;
867: *p=0;
868: writecrc(src,arg);
869: writecstr(arg2);
870: continue; }
871: if(!stricmp(p,"STRSTR") || !stricmp(p,"COMPARE_SUBSTR")) {
872: if(!*arg) break;
873: fputc(CS_VAR_INSTRUCTION,out);
874: fputc(STRSTR_VARS,out);
875: p=strchr(arg,SP);
876: if(!p)
877: break;
878: *p=0;
879: writecrc(src,arg);
880: writecrc(src,arg2);
881: continue; }
882: if(!stricmp(p,"CAT_STR_VARS") || !stricmp(p,"STRCAT")) {
883: if(!*arg) break;
884: fputc(CS_VAR_INSTRUCTION,out);
885: fputc(CAT_STR_VARS,out);
886: p=strchr(arg,SP);
887: if(!p)
888: break;
889: *p=0;
890: writecrc(src,arg);
891: writecrc(src,arg2);
892: continue; }
893: if(!stricmp(p,"FORMAT") || !stricmp(p,"SPRINTF")) {
894: if(!*arg) break;
895: fputc(CS_VAR_INSTRUCTION,out);
896: fputc(FORMAT_STR_VAR,out);
897: p=strchr(arg,SP);
898: if(!p)
899: break;
900: *p=0;
901: writecrc(src,arg); /* Write destination variable */
902: p++;
903: while(*p && *p<=SP) p++;
904: arg=p;
905: p=strrchr(arg,'"');
906: if(!p)
907: break;
908: *p=0;
909: p++;
910: while(*p && *p<=SP) p++;
911: writecstr(arg); /* Write string */
912: l=ftell(out);
913: fputc(0,out); /* Write total number of args */
914: i=0;
915: while(p && *p) {
916: arg=p;
917: p=strchr(arg,SP);
918: if(p) {
919: *p=0;
920: p++; }
921: writecrc(src,arg);
922: i++; }
923: fseek(out,l,SEEK_SET);
924: fputc((char)i,out);
925: fseek(out,i*4,SEEK_CUR);
926: continue; }
927:
928: if(!stricmp(p,"STRFTIME") || !stricmp(p,"FTIME_STR")) {
929: if(!*arg || !*arg2 || !*arg3) break;
930: fputc(CS_VAR_INSTRUCTION,out);
931: fputc(FORMAT_TIME_STR,out);
932: p=strchr(arg,SP);
933: if(!p)
934: break;
935: *p=0;
936: writecrc(src,arg); /* Write destination variable */
937: p++;
938: while(*p && *p<=SP) p++;
939: arg=p;
940: p=strrchr(arg,'"');
941: if(!p)
942: break;
943: *p=0;
944: writecstr(arg); /* Write string */
945: p++;
946: while(*p && *p<=SP) p++;
947: writecrc(src,p);
948: continue; }
949:
950: if(!stricmp(p,"TIME_STR")) {
951: if(!*arg) break;
952: fputc(CS_VAR_INSTRUCTION,out);
953: fputc(TIME_STR,out);
954: p=strchr(arg,SP);
955: if(!p)
956: break;
957: *p=0;
958: writecrc(src,arg);
959: writecrc(src,arg2);
960: continue; }
961:
962: if(!stricmp(p,"DATE_STR")) {
963: if(!*arg) break;
964: fputc(CS_VAR_INSTRUCTION,out);
965: fputc(DATE_STR,out);
966: p=strchr(arg,SP);
967: if(!p)
968: break;
969: *p=0;
970: writecrc(src,arg);
971: writecrc(src,arg2);
972: continue; }
973:
974: if(!stricmp(p,"SECOND_STR")) {
975: if(!*arg) break;
976: fputc(CS_VAR_INSTRUCTION,out);
977: fputc(SECOND_STR,out);
978: p=strchr(arg,SP);
979: if(!p)
980: break;
981: *p=0;
982: writecrc(src,arg);
983: writecrc(src,arg2);
984: continue; }
985:
986:
987: if(!stricmp(p,"SET_INT_VAR")
988: || (!stricmp(p,"SET") && *arg2!='"')) {
989: if(!*arg) break;
990: fputc(CS_VAR_INSTRUCTION,out);
991: fputc(SET_INT_VAR,out);
992: p=strchr(arg,SP);
993: if(!p)
994: break;
995: *p=0;
996: writecrc(src,arg);
997: l=val(src,arg2);
998: fwrite(&l,4,1,out);
999: continue; }
1000:
1001: if(!stricmp(p,"COMPARE_STR_VAR") ||
1002: (!stricmp(p,"COMPARE") && *arg2=='"')) {
1003: if(!*arg) break;
1004: fputc(CS_VAR_INSTRUCTION,out);
1005: fputc(COMPARE_STR_VAR,out);
1006: p=strchr(arg,SP);
1007: if(!p)
1008: break;
1009: *p=0;
1010: writecrc(src,arg);
1011: writecstr(arg2);
1012: continue; }
1013:
1014: if(!stricmp(p,"COMPARE_STRN_VAR") ||
1015: ((!stricmp(p,"STRNCMP") || !stricmp(p,"COMPARE_STRN"))
1016: && *arg3 && strchr(arg3,'"'))) {
1017: if((l=isvar(arg))!=0) {
1018: fputc(CS_USE_INT_VAR,out);
1019: fwrite(&l,4,1,out); // variable
1020: fputc(2,out); // int offset
1021: fputc(1,out); // int length
1022: i=0; } // place holder
1023: else
1024: i=val(src,arg);
1025: fputc(CS_VAR_INSTRUCTION,out);
1026: fputc(STRNCMP_VAR,out);
1027: fwrite(&i,1,1,out); /* Length */
1028: p=strchr(arg2,SP);
1029: if(!p)
1030: break;
1031: *p=0;
1032: p++;
1033: while(*p && *p<=SP) p++;
1034: writecrc(src,arg2);
1035: writecstr(p);
1036: continue; }
1037:
1038: if(!stricmp(p,"COMPARE_STRN_VARS") || !stricmp(p,"STRNCMP")
1039: || !stricmp(p,"COMPARE_STRN")) {
1040: if(!*arg || !*arg2 || !*arg3)
1041: break;
1042: if((l=isvar(arg))!=0) {
1043: fputc(CS_USE_INT_VAR,out);
1044: fwrite(&l,4,1,out); // variable
1045: fputc(2,out); // int offset
1046: fputc(1,out); // int length
1047: i=0; } // place holder
1048: else
1049: i=val(src,arg);
1050: fputc(CS_VAR_INSTRUCTION,out);
1051: fputc(STRNCMP_VARS,out);
1052:
1053: fwrite(&i,1,1,out); /* Length */
1054: p=strchr(arg2,SP);
1055: if(!p)
1056: break;
1057: *p=0;
1058: p++;
1059: while(*p && *p<=SP) p++;
1060: writecrc(src,arg2);
1061: writecrc(src,p);
1062: continue; }
1063:
1064: if(!stricmp(p,"COMPARE_INT_VAR") ||
1065: (!stricmp(p,"COMPARE")
1066: && (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
1067: if(!*arg) break;
1068:
1069: fputc(CS_VAR_INSTRUCTION,out);
1070: fputc(COMPARE_INT_VAR,out);
1071: p=strchr(arg,SP);
1072: if(!p)
1073: break;
1074: *p=0;
1075: writecrc(src,arg);
1076: l=val(src,arg2);
1077: fwrite(&l,4,1,out);
1078: continue; }
1079:
1080: if(!stricmp(p,"COMPARE")) {
1081: if(!*arg) break;
1082: fputc(CS_VAR_INSTRUCTION,out);
1083: fputc(COMPARE_VARS,out);
1084: p=strchr(arg,SP);
1085: if(!p)
1086: break;
1087: *p=0;
1088: writecrc(src,arg);
1089: writecrc(src,arg2);
1090: continue; }
1091: if(!stricmp(p,"COPY")) {
1092: if(!*arg) break;
1093: fputc(CS_VAR_INSTRUCTION,out);
1094: fputc(COPY_VAR,out);
1095: p=strchr(arg,SP);
1096: if(!p)
1097: break;
1098: *p=0;
1099: writecrc(src,arg);
1100: writecrc(src,arg2);
1101: continue; }
1102: if(!stricmp(p,"SWAP")) {
1103: if(!*arg) break;
1104: fputc(CS_VAR_INSTRUCTION,out);
1105: fputc(SWAP_VARS,out);
1106: p=strchr(arg,SP);
1107: if(!p)
1108: break;
1109: *p=0;
1110: writecrc(src,arg);
1111: writecrc(src,arg2);
1112: continue; }
1113:
1114: if(!stricmp(p,"TIME")) {
1115: if(!*arg) break;
1116: fputc(CS_VAR_INSTRUCTION,out);
1117: fputc(TIME_INT_VAR,out);
1118: writecrc(src,arg);
1119: continue; }
1120:
1121: if(!stricmp(p,"DATE_INT")) {
1122: if(!*arg) break;
1123: fputc(CS_VAR_INSTRUCTION,out);
1124: fputc(DATE_STR_TO_INT,out);
1125: p=strchr(arg,SP);
1126: if(!p)
1127: break;
1128: *p=0;
1129: writecrc(src,arg);
1130: writecrc(src,arg2);
1131: continue; }
1132:
1133: if(!stricmp(p,"CRC16")) {
1134: if(!*arg) break;
1135: fputc(CS_VAR_INSTRUCTION,out);
1136: fputc(CRC16_TO_INT,out);
1137: p=strchr(arg,SP);
1138: if(!p)
1139: break;
1140: *p=0;
1141: writecrc(src,arg);
1142: writecrc(src,arg2);
1143: continue; }
1144:
1145: if(!stricmp(p,"CRC32")) {
1146: if(!*arg) break;
1147: fputc(CS_VAR_INSTRUCTION,out);
1148: fputc(CRC32_TO_INT,out);
1149: p=strchr(arg,SP);
1150: if(!p)
1151: break;
1152: *p=0;
1153: writecrc(src,arg);
1154: writecrc(src,arg2);
1155: continue; }
1156:
1157: if(!stricmp(p,"CHKSUM")) {
1158: if(!*arg) break;
1159: fputc(CS_VAR_INSTRUCTION,out);
1160: fputc(CHKSUM_TO_INT,out);
1161: p=strchr(arg,SP);
1162: if(!p)
1163: break;
1164: *p=0;
1165: writecrc(src,arg);
1166: writecrc(src,arg2);
1167: continue; }
1168:
1169: if(!stricmp(p,"ADD_INT_VAR")
1170: || (!stricmp(p,"ADD")
1171: && (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
1172: if(!*arg) break;
1173: fputc(CS_VAR_INSTRUCTION,out);
1174: fputc(ADD_INT_VAR,out);
1175: p=strchr(arg,SP);
1176: if(!p)
1177: break;
1178: *p=0;
1179: writecrc(src,arg);
1180: l=val(src,arg2);
1181: if(!l)
1182: break;
1183: fwrite(&l,4,1,out);
1184: continue; }
1185: if(!stricmp(p,"ADD_INT_VARS") || !stricmp(p,"ADD")) {
1186: if(!*arg) break;
1187: fputc(CS_VAR_INSTRUCTION,out);
1188: fputc(ADD_INT_VARS,out);
1189: p=strchr(arg,SP);
1190: if(!p)
1191: break;
1192: *p=0;
1193: writecrc(src,arg);
1194: writecrc(src,arg2);
1195: continue; }
1196:
1197: if(!stricmp(p,"SUB_INT_VAR")
1198: || (!stricmp(p,"SUB")
1199: && (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
1200: if(!*arg) break;
1201: fputc(CS_VAR_INSTRUCTION,out);
1202: fputc(SUB_INT_VAR,out);
1203: p=strchr(arg,SP);
1204: if(!p)
1205: break;
1206: *p=0;
1207: writecrc(src,arg);
1208: l=val(src,arg2);
1209: if(!l)
1210: break;
1211: fwrite(&l,4,1,out);
1212: continue; }
1213: if(!stricmp(p,"SUB_INT_VARS") || !stricmp(p,"SUB")) {
1214: if(!*arg) break;
1215: fputc(CS_VAR_INSTRUCTION,out);
1216: fputc(SUB_INT_VARS,out);
1217: p=strchr(arg,SP);
1218: if(!p)
1219: break;
1220: *p=0;
1221: writecrc(src,arg);
1222: writecrc(src,arg2);
1223: continue; }
1224:
1225: if(!stricmp(p,"MUL_INT_VAR")
1226: || (!stricmp(p,"MUL")
1227: && (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
1228: if(!*arg) break;
1229: fputc(CS_VAR_INSTRUCTION,out);
1230: fputc(MUL_INT_VAR,out);
1231: p=strchr(arg,SP);
1232: if(!p)
1233: break;
1234: *p=0;
1235: writecrc(src,arg);
1236: l=val(src,arg2);
1237: if(!l)
1238: break;
1239: fwrite(&l,4,1,out);
1240: continue; }
1241: if(!stricmp(p,"MUL_INT_VARS") || !stricmp(p,"MUL")) {
1242: if(!*arg) break;
1243: fputc(CS_VAR_INSTRUCTION,out);
1244: fputc(MUL_INT_VARS,out);
1245: p=strchr(arg,SP);
1246: if(!p)
1247: break;
1248: *p=0;
1249: writecrc(src,arg);
1250: writecrc(src,arg2);
1251: continue; }
1252:
1253: if(!stricmp(p,"DIV_INT_VAR")
1254: || (!stricmp(p,"DIV")
1255: && (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
1256: if(!*arg) break;
1257: fputc(CS_VAR_INSTRUCTION,out);
1258: fputc(DIV_INT_VAR,out);
1259: p=strchr(arg,SP);
1260: if(!p)
1261: break;
1262: *p=0;
1263: writecrc(src,arg);
1264: l=val(src,arg2);
1265: if(!l)
1266: break;
1267: fwrite(&l,4,1,out);
1268: continue; }
1269: if(!stricmp(p,"DIV_INT_VARS") || !stricmp(p,"DIV")) {
1270: if(!*arg) break;
1271: fputc(CS_VAR_INSTRUCTION,out);
1272: fputc(DIV_INT_VARS,out);
1273: p=strchr(arg,SP);
1274: if(!p)
1275: break;
1276: *p=0;
1277: writecrc(src,arg);
1278: writecrc(src,arg2);
1279: continue; }
1280:
1281: if(!stricmp(p,"MOD_INT_VAR")
1282: || (!stricmp(p,"MOD")
1283: && (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
1284: if(!*arg) break;
1285: fputc(CS_VAR_INSTRUCTION,out);
1286: fputc(MOD_INT_VAR,out);
1287: p=strchr(arg,SP);
1288: if(!p)
1289: break;
1290: *p=0;
1291: writecrc(src,arg);
1292: l=val(src,arg2);
1293: if(!l)
1294: break;
1295: fwrite(&l,4,1,out);
1296: continue; }
1297: if(!stricmp(p,"MOD_INT_VARS") || !stricmp(p,"MOD")) {
1298: if(!*arg) break;
1299: fputc(CS_VAR_INSTRUCTION,out);
1300: fputc(MOD_INT_VARS,out);
1301: p=strchr(arg,SP);
1302: if(!p)
1303: break;
1304: *p=0;
1305: writecrc(src,arg);
1306: writecrc(src,arg2);
1307: continue; }
1308:
1309: if(!stricmp(p,"AND_INT_VAR")
1310: || (!stricmp(p,"AND")
1311: && (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
1312: if(!*arg) break;
1313: fputc(CS_VAR_INSTRUCTION,out);
1314: fputc(AND_INT_VAR,out);
1315: p=strchr(arg,SP);
1316: if(!p)
1317: break;
1318: *p=0;
1319: writecrc(src,arg);
1320: l=val(src,arg2);
1321: fwrite(&l,4,1,out);
1322: continue; }
1323: if(!stricmp(p,"AND_INT_VARS") || !stricmp(p,"AND")) {
1324: if(!*arg) break;
1325: fputc(CS_VAR_INSTRUCTION,out);
1326: fputc(AND_INT_VARS,out);
1327: p=strchr(arg,SP);
1328: if(!p)
1329: break;
1330: *p=0;
1331: writecrc(src,arg);
1332: writecrc(src,arg2);
1333: continue; }
1334:
1335: if(!stricmp(p,"OR_INT_VAR")
1336: || (!stricmp(p,"OR")
1337: && (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
1338: if(!*arg) break;
1339: fputc(CS_VAR_INSTRUCTION,out);
1340: fputc(OR_INT_VAR,out);
1341: p=strchr(arg,SP);
1342: if(!p)
1343: break;
1344: *p=0;
1345: writecrc(src,arg);
1346: l=val(src,arg2);
1347: fwrite(&l,4,1,out);
1348: continue; }
1349: if(!stricmp(p,"OR_INT_VARS") || !stricmp(p,"OR")) {
1350: if(!*arg) break;
1351: fputc(CS_VAR_INSTRUCTION,out);
1352: fputc(OR_INT_VARS,out);
1353: p=strchr(arg,SP);
1354: if(!p)
1355: break;
1356: *p=0;
1357: writecrc(src,arg);
1358: writecrc(src,arg2);
1359: continue; }
1360:
1361: if(!stricmp(p,"NOT_INT_VAR")
1362: || (!stricmp(p,"NOT")
1363: && (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
1364: if(!*arg) break;
1365: fputc(CS_VAR_INSTRUCTION,out);
1366: fputc(NOT_INT_VAR,out);
1367: p=strchr(arg,SP);
1368: if(!p)
1369: break;
1370: *p=0;
1371: writecrc(src,arg);
1372: l=val(src,arg2);
1373: fwrite(&l,4,1,out);
1374: continue; }
1375: if(!stricmp(p,"NOT_INT_VARS") || !stricmp(p,"NOT")) {
1376: if(!*arg) break;
1377: fputc(CS_VAR_INSTRUCTION,out);
1378: fputc(NOT_INT_VARS,out);
1379: p=strchr(arg,SP);
1380: if(!p)
1381: break;
1382: *p=0;
1383: writecrc(src,arg);
1384: writecrc(src,arg2);
1385: continue; }
1386:
1387: if(!stricmp(p,"XOR_INT_VAR")
1388: || (!stricmp(p,"XOR")
1389: && (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
1390: if(!*arg) break;
1391: fputc(CS_VAR_INSTRUCTION,out);
1392: fputc(XOR_INT_VAR,out);
1393: p=strchr(arg,SP);
1394: if(!p)
1395: break;
1396: *p=0;
1397: writecrc(src,arg);
1398: l=val(src,arg2);
1399: fwrite(&l,4,1,out);
1400: continue; }
1401: if(!stricmp(p,"XOR_INT_VARS") || !stricmp(p,"XOR")) {
1402: if(!*arg) break;
1403: fputc(CS_VAR_INSTRUCTION,out);
1404: fputc(XOR_INT_VARS,out);
1405: p=strchr(arg,SP);
1406: if(!p)
1407: break;
1408: *p=0;
1409: writecrc(src,arg);
1410: writecrc(src,arg2);
1411: continue; }
1412:
1413: if(!stricmp(p,"RANDOM_INT_VAR") || !stricmp(p,"RANDOM")) {
1414: if(!*arg) break;
1415: if((l=isvar(arg2))!=0) {
1416: fputc(CS_USE_INT_VAR,out);
1417: fwrite(&l,4,1,out); // variable
1418: fputc(6,out); // int offset
1419: fputc(4,out); // int length
1420: l=0; } // place holder
1421: else
1422: l=val(src,arg2);
1423: fputc(CS_VAR_INSTRUCTION,out);
1424: fputc(RANDOM_INT_VAR,out);
1425: p=strchr(arg,SP);
1426: if(!p)
1427: break;
1428: *p=0;
1429: writecrc(src,arg);
1430: fwrite(&l,4,1,out);
1431: continue; }
1432:
1433: if(!stricmp(p,"SWITCH")) {
1434: if(!*arg) break;
1435: fputc(CS_SWITCH,out);
1436: writecrc(src,arg);
1437: continue; }
1438: if(!stricmp(p,"END_SWITCH")) {
1439: fputc(CS_END_SWITCH,out);
1440: continue; }
1441: if(!stricmp(p,"CASE")) {
1442: if(!*arg) break;
1443: fputc(CS_CASE,out);
1444: l=val(src,arg);
1445: fwrite(&l,4,1,out);
1446: continue; }
1447: if(!stricmp(p,"DEFAULT")) {
1448: fputc(CS_DEFAULT,out);
1449: continue; }
1450: if(!stricmp(p,"END_CASE")) {
1451: fputc(CS_END_CASE,out);
1452: continue; }
1453:
1454: if(!stricmp(p,"PRINT") && !strchr(arg,'"') && !strchr(arg,'\\')
1455: && !strchr(arg,SP)) {
1456: if(!*arg) break;
1457: fputc(CS_VAR_INSTRUCTION,out);
1458: fputc(PRINT_VAR,out);
1459: writecrc(src,arg);
1460: continue; }
1461:
1462: if(!stricmp(p,"PRINTF")) {
1463: if(!*arg) break;
1464: fputc(CS_VAR_INSTRUCTION,out);
1465: fputc(VAR_PRINTF,out);
1466: p=strrchr(arg,'"');
1467: if(!p)
1468: break;
1469: *p=0;
1470: p++;
1471: while(*p && *p<=SP) p++;
1472: writecstr(arg); /* Write string */
1473: l=ftell(out);
1474: fputc(0,out); /* Write total number of args */
1475: i=0;
1476: while(p && *p) {
1477: arg=p;
1478: p=strchr(arg,SP);
1479: if(p) {
1480: *p=0;
1481: p++; }
1482: writecrc(src,arg);
1483: i++; }
1484: fseek(out,l,SEEK_SET);
1485: fputc((char)i,out);
1486: fseek(out,i*4,SEEK_CUR);
1487: continue; }
1488:
1489: if(!stricmp(p,"FOPEN")) {
1490: if(!*arg || !*arg2 || !*arg3) break;
1491: if((l=isvar(arg2))!=0) {
1492: fputc(CS_USE_INT_VAR,out);
1493: fwrite(&l,4,1,out); // variable
1494: fputc(6,out); // int offset
1495: fputc(2,out); // int length
1496: i=0; } // place holder
1497: else
1498: i=val(src,arg2);
1499:
1500: fputc(CS_FIO_FUNCTION,out);
1501: if(*arg3=='"')
1502: fputc(FIO_OPEN,out);
1503: else
1504: fputc(FIO_OPEN_VAR,out);
1505: p=strchr(arg,SP);
1506: if(!p)
1507: break;
1508: *p=0;
1509: writecrc(src,arg);
1510: p=strchr(arg2,SP);
1511: if(!p)
1512: break;
1513: *p=0;
1514: p++;
1515: fwrite(&i,2,1,out);
1516: while(*p && *p<=SP) p++;
1517: if(*p=='"')
1518: writestr(p);
1519: else
1520: writecrc(src,p);
1521: continue; }
1522: if(!stricmp(p,"FCLOSE")) {
1523: if(!*arg) break;
1524: fputc(CS_FIO_FUNCTION,out);
1525: fputc(FIO_CLOSE,out);
1526: writecrc(src,arg);
1527: continue; }
1528: if(!stricmp(p,"FFLUSH")) {
1529: if(!*arg) break;
1530: fputc(CS_FIO_FUNCTION,out);
1531: fputc(FIO_FLUSH,out);
1532: writecrc(src,arg);
1533: continue; }
1534: if(!stricmp(p,"FREAD")) {
1535: if(!*arg) break;
1536:
1537: fputc(CS_FIO_FUNCTION,out);
1538: if(!*arg3 || isdigit(*arg3) || atoi(arg3))
1539: fputc(FIO_READ,out);
1540: else
1541: fputc(FIO_READ_VAR,out);
1542: p=strchr(arg,SP);
1543: if(!p)
1544: break;
1545: *p=0;
1546: writecrc(src,arg); /* File handle */
1547: p=strchr(arg2,SP);
1548: if(p)
1549: *p=0;
1550: writecrc(src,arg2); /* Variable */
1551: if(isdigit(*arg3))
1552: i=val(src,arg3); /* Length */
1553: else
1554: i=0;
1555: if(i || !*arg3)
1556: fwrite(&i,2,1,out);
1557: else
1558: writecrc(src,arg3);
1559: continue; }
1560: if(!stricmp(p,"FWRITE")) {
1561: if(!*arg) break;
1562: fputc(CS_FIO_FUNCTION,out);
1563: if(!*arg3 || isdigit(*arg3) || atoi(arg3))
1564: fputc(FIO_WRITE,out);
1565: else
1566: fputc(FIO_WRITE_VAR,out);
1567: p=strchr(arg,SP);
1568: if(!p)
1569: break;
1570: *p=0;
1571: writecrc(src,arg); /* File handle */
1572: p=strchr(arg2,SP);
1573: if(p)
1574: *p=0;
1575: writecrc(src,arg2); /* Variable */
1576: if(isdigit(*arg3))
1577: i=val(src,arg3); /* Length */
1578: else
1579: i=0;
1580: if(i || !*arg3)
1581: fwrite(&i,2,1,out);
1582: else
1583: writecrc(src,arg3);
1584: continue; }
1585: if(!stricmp(p,"FGET_LENGTH")
1586: || !stricmp(p,"FGETLENGTH")
1587: || !stricmp(p,"GETFLENGTH")) {
1588: if(!*arg || !*arg2) break;
1589: fputc(CS_FIO_FUNCTION,out);
1590: fputc(FIO_GET_LENGTH,out);
1591: p=strchr(arg,SP);
1592: if(!p)
1593: break;
1594: *p=0;
1595: writecrc(src,arg); /* File handle */
1596: writecrc(src,arg2); /* Variable */
1597: continue; }
1598: if(!stricmp(p,"FREAD_LINE")) {
1599: if(!*arg || !*arg2) break;
1600: fputc(CS_FIO_FUNCTION,out);
1601: fputc(FIO_READ_LINE,out);
1602: p=strchr(arg,SP);
1603: if(!p)
1604: break;
1605: *p=0;
1606: writecrc(src,arg); /* File handle */
1607: writecrc(src,arg2); /* Variable */
1608: continue; }
1609: if(!stricmp(p,"FEOF")) {
1610: if(!*arg) break;
1611: fputc(CS_FIO_FUNCTION,out);
1612: fputc(FIO_EOF,out);
1613: writecrc(src,arg);
1614: continue; }
1615: if(!stricmp(p,"FGET_POS")) {
1616: if(!*arg || !*arg2) break;
1617: fputc(CS_FIO_FUNCTION,out);
1618: fputc(FIO_GET_POS,out);
1619: p=strchr(arg,SP);
1620: if(!p)
1621: break;
1622: *p=0;
1623: writecrc(src,arg); /* File handle */
1624: writecrc(src,arg2); /* Variable */
1625: continue; }
1626: if(!stricmp(p,"FSET_POS") || !stricmp(p,"FSEEK")) {
1627: if(!*arg) break;
1628: fputc(CS_FIO_FUNCTION,out);
1629: if(isdigit(*arg2) || atol(arg2))
1630: fputc(FIO_SEEK,out);
1631: else
1632: fputc(FIO_SEEK_VAR,out);
1633: p=strchr(arg,SP);
1634: if(!p)
1635: break;
1636: *p=0;
1637: writecrc(src,arg); /* File handle */
1638: p=strchr(arg2,SP);
1639: if(p)
1640: *p=0;
1641: if(atol(arg2) || isdigit(*arg2)) {
1642: l=val(src,arg2);
1643: fwrite(&l,4,1,out); }
1644: else
1645: writecrc(src,arg2); /* Offset variable */
1646: i=0;
1647: if(p) {
1648: p++;
1649: while(*p && *p<=SP) p++;
1650: i=atoi(p);
1651: if(!stricmp(p,"CUR"))
1652: i=SEEK_CUR;
1653: else if(!stricmp(p,"END"))
1654: i=SEEK_END; }
1655: fwrite(&i,2,1,out);
1656: continue; }
1657: if(!stricmp(p,"FLOCK")) {
1658: if(!*arg) break;
1659: fputc(CS_FIO_FUNCTION,out);
1660: if(isdigit(*arg2) || atol(arg2))
1661: fputc(FIO_LOCK,out);
1662: else
1663: fputc(FIO_LOCK_VAR,out);
1664: p=strchr(arg,SP);
1665: if(!p)
1666: break;
1667: *p=0;
1668: writecrc(src,arg); /* File handle */
1669: if(atol(arg2) || isdigit(*arg2)) {
1670: l=val(src,arg2);
1671: if(!l)
1672: break;
1673: fwrite(&l,4,1,out); }
1674: else
1675: writecrc(src,arg2); /* Length variable */
1676: continue; }
1677: if(!stricmp(p,"FUNLOCK")) {
1678: if(!*arg) break;
1679: fputc(CS_FIO_FUNCTION,out);
1680: if(isdigit(*arg2) || atol(arg2))
1681: fputc(FIO_UNLOCK,out);
1682: else
1683: fputc(FIO_UNLOCK_VAR,out);
1684: p=strchr(arg,SP);
1685: if(!p)
1686: break;
1687: *p=0;
1688: writecrc(src,arg); /* File handle */
1689: if(atol(arg2) || isdigit(*arg2)) {
1690: l=val(src,arg2);
1691: if(!l)
1692: break;
1693: fwrite(&l,4,1,out); }
1694: else
1695: writecrc(src,arg2); /* Length variable */
1696: continue; }
1697: if(!stricmp(p,"FSET_LENGTH")) {
1698: if(!*arg) break;
1699: fputc(CS_FIO_FUNCTION,out);
1700: if(isdigit(*arg2) || atol(arg2))
1701: fputc(FIO_SET_LENGTH,out);
1702: else
1703: fputc(FIO_SET_LENGTH_VAR,out);
1704: p=strchr(arg,SP);
1705: if(!p)
1706: break;
1707: *p=0;
1708: writecrc(src,arg); /* File handle */
1709: if(atol(arg2) || isdigit(*arg2)) {
1710: l=val(src,arg2);
1711: fwrite(&l,4,1,out); }
1712: else
1713: writecrc(src,arg2); /* Length variable */
1714: continue; }
1715: if(!stricmp(p,"FPRINTF")) {
1716: if(!*arg) break;
1717: fputc(CS_FIO_FUNCTION,out);
1718: fputc(FIO_PRINTF,out);
1719: p=strchr(arg,SP);
1720: if(!p)
1721: break;
1722: *p=0;
1723: writecrc(src,arg); /* Write destination variable */
1724: p++;
1725: while(*p && *p<=SP) p++;
1726: arg=p;
1727: p=strrchr(arg,'"');
1728: if(!p)
1729: break;
1730: *p=0;
1731: p++;
1732: while(*p && *p<=SP) p++;
1733: writecstr(arg); /* Write string */
1734: l=ftell(out);
1735: fputc(0,out); /* Write total number of args */
1736: i=0;
1737: while(p && *p) {
1738: arg=p;
1739: p=strchr(arg,SP);
1740: if(p) {
1741: *p=0;
1742: p++; }
1743: writecrc(src,arg);
1744: i++; }
1745: fseek(out,l,SEEK_SET);
1746: fputc((char)i,out);
1747: fseek(out,i*4,SEEK_CUR);
1748: continue; }
1749: if(!stricmp(p,"FSET_ETX")) {
1750: if(!*arg) break;
1751: if((l=isvar(arg))!=0) {
1752: fputc(CS_USE_INT_VAR,out);
1753: fwrite(&l,4,1,out); // variable
1754: fputc(2,out); // int offset
1755: fputc(1,out); // int length
1756: ch=0; } // place holder
1757: else
1758: ch=val(src,arg);
1759:
1760: fputc(CS_FIO_FUNCTION,out);
1761: fputc(FIO_SET_ETX,out);
1762: fwrite(&ch,1,1,out);
1763: continue; }
1764: if(!stricmp(p,"FGET_TIME")) {
1765: if(!*arg || !*arg2) break;
1766: fputc(CS_FIO_FUNCTION,out);
1767: fputc(FIO_GET_TIME,out);
1768: p=strchr(arg,SP);
1769: if(!p)
1770: break;
1771: *p=0;
1772: writecrc(src,arg); /* File handle */
1773: writecrc(src,arg2); /* Variable */
1774: continue; }
1775: if(!stricmp(p,"FSET_TIME")) {
1776: if(!*arg || !*arg2) break;
1777: fputc(CS_FIO_FUNCTION,out);
1778: fputc(FIO_SET_TIME,out);
1779: p=strchr(arg,SP);
1780: if(!p)
1781: break;
1782: *p=0;
1783: writecrc(src,arg); /* File handle */
1784: writecrc(src,arg2); /* Variable */
1785: continue; }
1786: if(!stricmp(p,"REMOVE_FILE")) {
1787: if(!*arg) break;
1788: fputc(CS_FIO_FUNCTION,out);
1789: fputc(REMOVE_FILE,out);
1790: writecrc(src,arg); /* Str var */
1791: continue; }
1792: if(!stricmp(p,"RENAME_FILE")) {
1793: if(!*arg || !*arg2) break;
1794: fputc(CS_FIO_FUNCTION,out);
1795: fputc(RENAME_FILE,out);
1796: p=strchr(arg,SP);
1797: if(!p)
1798: break;
1799: *p=0;
1800: writecrc(src,arg); /* str var */
1801: writecrc(src,arg2); /* str var */
1802: continue; }
1803: if(!stricmp(p,"COPY_FILE")) {
1804: if(!*arg || !*arg2) break;
1805: fputc(CS_FIO_FUNCTION,out);
1806: fputc(COPY_FILE,out);
1807: p=strchr(arg,SP);
1808: if(!p)
1809: break;
1810: *p=0;
1811: writecrc(src,arg); /* str var */
1812: writecrc(src,arg2); /* str var */
1813: continue; }
1814: if(!stricmp(p,"MOVE_FILE")) {
1815: if(!*arg || !*arg2) break;
1816: fputc(CS_FIO_FUNCTION,out);
1817: fputc(MOVE_FILE,out);
1818: p=strchr(arg,SP);
1819: if(!p)
1820: break;
1821: *p=0;
1822: writecrc(src,arg); /* str var */
1823: writecrc(src,arg2); /* str var */
1824: continue; }
1825: if(!stricmp(p,"GET_FILE_ATTRIB")) {
1826: if(!*arg || !*arg2) break;
1827: fputc(CS_FIO_FUNCTION,out);
1828: fputc(GET_FILE_ATTRIB,out);
1829: p=strchr(arg,SP);
1830: if(!p)
1831: break;
1832: *p=0;
1833: writecrc(src,arg); /* str var */
1834: writecrc(src,arg2); /* int var */
1835: continue; }
1836: if(!stricmp(p,"SET_FILE_ATTRIB")) {
1837: if(!*arg || !*arg2) break;
1838: fputc(CS_FIO_FUNCTION,out);
1839: fputc(SET_FILE_ATTRIB,out);
1840: p=strchr(arg,SP);
1841: if(!p)
1842: break;
1843: *p=0;
1844: writecrc(src,arg); /* str var */
1845: writecrc(src,arg2); /* int var */
1846: continue; }
1847: if(!stricmp(p,"RMDIR") || !stricmp(p,"REMOVE_DIR")) {
1848: if(!*arg) break;
1849: fputc(CS_FIO_FUNCTION,out);
1850: fputc(REMOVE_DIR,out);
1851: writecrc(src,arg); /* Str var */
1852: continue; }
1853: if(!stricmp(p,"MKDIR") || !stricmp(p,"MAKE_DIR")) {
1854: if(!*arg) break;
1855: fputc(CS_FIO_FUNCTION,out);
1856: fputc(MAKE_DIR,out);
1857: writecrc(src,arg); /* Str var */
1858: continue; }
1859: if(!stricmp(p,"CHDIR") || !stricmp(p,"CHANGE_DIR")) {
1860: if(!*arg) break;
1861: fputc(CS_FIO_FUNCTION,out);
1862: fputc(CHANGE_DIR,out);
1863: writecrc(src,arg); /* Str var */
1864: continue; }
1865: if(!stricmp(p,"OPEN_DIR")) {
1866: if(!*arg || !*arg2) break;
1867: fputc(CS_FIO_FUNCTION,out);
1868: fputc(OPEN_DIR,out);
1869: p=strchr(arg,SP);
1870: if(!p)
1871: break;
1872: *p=0;
1873: writecrc(src,arg); /* int var */
1874: writecrc(src,arg2); /* str var */
1875: continue; }
1876: if(!stricmp(p,"READ_DIR")) {
1877: if(!*arg || !*arg2) break;
1878: fputc(CS_FIO_FUNCTION,out);
1879: fputc(READ_DIR,out);
1880: p=strchr(arg,SP);
1881: if(!p)
1882: break;
1883: *p=0;
1884: writecrc(src,arg); /* int var */
1885: writecrc(src,arg2); /* str var */
1886: continue; }
1887: if(!stricmp(p,"REWIND_DIR")) {
1888: if(!*arg) break;
1889: fputc(CS_FIO_FUNCTION,out);
1890: fputc(REWIND_DIR,out);
1891: writecrc(src,arg); /* int var */
1892: continue; }
1893: if(!stricmp(p,"CLOSE_DIR")) {
1894: if(!*arg) break;
1895: fputc(CS_FIO_FUNCTION,out);
1896: fputc(CLOSE_DIR,out);
1897: writecrc(src,arg); /* int var */
1898: continue; }
1899:
1900: if(!stricmp(p,"NODE_ACTION")) {
1901: if(!*arg) break;
1902: if((l=isvar(arg))!=0) {
1903: fputc(CS_USE_INT_VAR,out);
1904: fwrite(&l,4,1,out); // variable
1905: fputc(1,out); // int offset
1906: fputc(1,out); // int length
1907: ch=0; } // place holder
1908: else
1909: ch=val(src,arg);
1910:
1911: fprintf(out,"%c%c",CS_NODE_ACTION,ch);
1912: continue; }
1913: if(!stricmp(p,"NODE_STATUS")) {
1914: if(!*arg) break;
1915: if((l=isvar(arg))!=0) {
1916: fputc(CS_USE_INT_VAR,out);
1917: fwrite(&l,4,1,out); // variable
1918: fputc(1,out); // int offset
1919: fputc(1,out); // int length
1920: ch=0; } // place holder
1921: else
1922: ch=val(src,arg);
1923:
1924: fprintf(out,"%c%c",CS_NODE_STATUS,ch);
1925: continue; }
1926: if(!stricmp(p,"END_CMD") || !stricmp(p,"ENDCMD")) {
1927: fprintf(out,"%c",CS_END_CMD);
1928: continue; }
1929: if(!stricmp(p,"CMD_POP") || !stricmp(p,"CMDPOP")) {
1930: fprintf(out,"%c",CS_CMD_POP);
1931: continue; }
1932: if(!stricmp(p,"CLS")) {
1933: fprintf(out,"%c",CS_CLS);
1934: continue; }
1935: if(!stricmp(p,"CRLF")) {
1936: fprintf(out,"%c",CS_CRLF);
1937: continue; }
1938: if(!stricmp(p,"PAUSE")) {
1939: fprintf(out,"%c",CS_PAUSE);
1940: continue; }
1941: if(!stricmp(p,"PAUSE_RESET")) {
1942: fprintf(out,"%c",CS_PAUSE_RESET);
1943: continue; }
1944: if(!stricmp(p,"CLEAR_ABORT")) {
1945: fprintf(out,"%c",CS_CLEAR_ABORT);
1946: continue; }
1947: if(!stricmp(p,"GETLINES")) {
1948: fprintf(out,"%c",CS_GETLINES);
1949: continue; }
1950: if(!stricmp(p,"GETFILESPEC")) {
1951: fprintf(out,"%c",CS_GETFILESPEC);
1952: continue; }
1953: if(!stricmp(p,"FINDUSER")) {
1954: fprintf(out,"%c",CS_FINDUSER);
1955: continue; }
1956:
1957: if(!stricmp(p,"LOG")) {
1958: if(!*arg) break;
1959: fprintf(out,"%c",CS_LOG);
1960: writecstr(arg);
1961: continue; }
1962: if(!stricmp(p,"MNEMONICS")) {
1963: if(!*arg) break;
1964: fprintf(out,"%c",CS_MNEMONICS);
1965: writecstr(arg);
1966: continue; }
1967: if(!stricmp(p,"PRINT")) {
1968: if(!*arg) break;
1969: fprintf(out,"%c",CS_PRINT);
1970: writecstr(arg);
1971: continue; }
1972: if(!stricmp(p,"PRINT_LOCAL")) {
1973: if(!*arg) break;
1974: fprintf(out,"%c",CS_PRINT_LOCAL);
1975: writecstr(arg);
1976: continue; }
1977: if(!stricmp(p,"PRINT_REMOTE")) {
1978: if(!*arg) break;
1979: fprintf(out,"%c",CS_PRINT_REMOTE);
1980: writecstr(arg);
1981: continue; }
1982: if(!stricmp(p,"PRINTFILE")) {
1983: if(!*arg) break;
1984: if(*arg=='"') {
1985: fprintf(out,"%c",CS_PRINTFILE);
1986: writestr(arg); }
1987: else {
1988: if((l=isvar(arg2))!=0) {
1989: fputc(CS_USE_INT_VAR,out);
1990: fwrite(&l,4,1,out); // variable
1991: fputc(6,out); // int offset
1992: fputc(2,out); // int length
1993: i=0; } // place holder
1994: else
1995: i=val(src,arg2);
1996:
1997: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,PRINTFILE_VAR_MODE);
1998: p=strchr(arg,SP);
1999: if(p) *p=0;
2000: writecrc(src,arg);
2001: fwrite(&i,2,1,out); }
2002: continue; }
2003: if(!stricmp(p,"PRINTTAIL")) {
2004: if(!*arg || !*arg2)
2005: break;
2006: if((l=isvar(arg3))!=0) {
2007: fputc(CS_USE_INT_VAR,out);
2008: fwrite(&l,4,1,out); // variable
2009: fputc(8,out); // int offset
2010: fputc(1,out); // int length
2011: j=0; } // place holder
2012: else
2013: j=val(src,arg3);
2014:
2015: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,PRINTTAIL_VAR_MODE);
2016: p=strchr(arg,SP);
2017: if(p) *p=0;
2018: writecrc(src,arg);
2019: i=val(src,arg2);
2020: fwrite(&i,2,1,out);
2021: fwrite(&j,1,1,out);
2022: continue; }
2023:
2024: if(!stricmp(p,"PRINTFILE_STR")) {
2025: fprintf(out,"%c",CS_PRINTFILE_STR);
2026: continue; }
2027: if(!stricmp(p,"PRINTFILE_LOCAL")) {
2028: if(!*arg) break;
2029: fprintf(out,"%c",CS_PRINTFILE_LOCAL);
2030: writestr(arg);
2031: continue; }
2032: if(!stricmp(p,"PRINTFILE_REMOTE")) {
2033: if(!*arg) break;
2034: fprintf(out,"%c",CS_PRINTFILE_REMOTE);
2035: writestr(arg);
2036: continue; }
2037: if(!stricmp(p,"EXEC")) {
2038: if(!*arg) break;
2039: fprintf(out,"%c",CS_EXEC);
2040: writestr(arg);
2041: continue; }
2042: if(!stricmp(p,"EXEC_INT")) {
2043: if(!*arg) break;
2044: fprintf(out,"%c",CS_EXEC_INT);
2045: writestr(arg);
2046: continue; }
2047: if(!stricmp(p,"EXEC_BIN")) {
2048: if(!*arg) break;
2049: fprintf(out,"%c",CS_EXEC_BIN);
2050: writestr(arg);
2051: continue; }
2052: if(!stricmp(p,"EXEC_XTRN")) {
2053: if(!*arg) break;
2054: fprintf(out,"%c",CS_EXEC_XTRN);
2055: writestr(arg);
2056: continue; }
2057:
2058: if(!stricmp(p,"SELECT_SHELL")) {
2059: fprintf(out,"%c",CS_SELECT_SHELL);
2060: continue; }
2061: if(!stricmp(p,"SET_SHELL")) {
2062: fprintf(out,"%c",CS_SET_SHELL);
2063: continue; }
2064: if(!stricmp(p,"SELECT_EDITOR")) {
2065: fprintf(out,"%c",CS_SELECT_EDITOR);
2066: continue; }
2067: if(!stricmp(p,"SET_EDITOR")) {
2068: fprintf(out,"%c",CS_SET_EDITOR);
2069: continue; }
2070:
2071: if(!stricmp(p,"YES_NO")) {
2072: if(!*arg) break;
2073: fprintf(out,"%c",CS_YES_NO);
2074: writecstr(arg);
2075: continue; }
2076: if(!stricmp(p,"NO_YES")) {
2077: if(!*arg) break;
2078: fprintf(out,"%c",CS_NO_YES);
2079: writecstr(arg);
2080: continue; }
2081: if(!stricmp(p,"MENU")) {
2082: if(!*arg) break;
2083: fprintf(out,"%c",CS_MENU);
2084: writestr(arg);
2085: continue; }
2086: if(!stricmp(p,"SET_MENU_DIR")) {
2087: if(!*arg) break;
2088: fprintf(out,"%c",CS_SET_MENU_DIR);
2089: writestr(arg);
2090: continue; }
2091: if(!stricmp(p,"SET_MENU_FILE")) {
2092: if(!*arg) break;
2093: fprintf(out,"%c",CS_SET_MENU_FILE);
2094: writestr(arg);
2095: continue; }
2096: if(!stricmp(p,"SEND_FILE_VIA")) {
2097: if(!*arg || !*arg2) break;
2098: if(*arg2=='"') {
2099: fprintf(out,"%c%c%c",CS_VAR_INSTRUCTION,SEND_FILE_VIA,*arg);
2100: writestr(arg2); }
2101: else {
2102: fprintf(out,"%c%c%c",CS_VAR_INSTRUCTION,SEND_FILE_VIA_VAR,*arg);
2103: writecrc(src,arg2); }
2104: continue; }
2105: if(!stricmp(p,"RECEIVE_FILE_VIA")) {
2106: if(!*arg || !*arg2) break;
2107: if(*arg2=='"') {
2108: fprintf(out,"%c%c%c",CS_VAR_INSTRUCTION,RECEIVE_FILE_VIA,*arg);
2109: writestr(arg2); }
2110: else {
2111: fprintf(out,"%c%c%c",CS_VAR_INSTRUCTION,RECEIVE_FILE_VIA_VAR,*arg);
2112: writecrc(src,arg2); }
2113: continue; }
2114: if(!stricmp(p,"CHKFILE")) {
2115: if(!*arg) break;
2116: if(*arg=='"') {
2117: fprintf(out,"%c",CS_CHKFILE);
2118: writestr(arg); }
2119: else {
2120: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,CHKFILE_VAR);
2121: writecrc(src,arg); }
2122: continue; }
2123: if(!stricmp(p,"GET_FILE_LENGTH")) {
2124: if(!*arg || !*arg2)
2125: break;
2126: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,FLENGTH_TO_INT);
2127: p=strchr(arg,SP);
2128: if(p) *p=0;
2129: writecrc(src,arg);
2130: writecrc(src,arg2);
2131: continue; }
2132: if(!stricmp(p,"GET_FILE_TIME")) {
2133: if(!*arg || !*arg2)
2134: break;
2135: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,FTIME_TO_INT);
2136: p=strchr(arg,SP);
2137: if(p) *p=0;
2138: writecrc(src,arg);
2139: writecrc(src,arg2);
2140: continue; }
2141: if(!stricmp(p,"CHARVAL")) {
2142: if(!*arg || !*arg2)
2143: break;
2144: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,CHARVAL_TO_INT);
2145: p=strchr(arg,SP);
2146: if(p) *p=0;
2147: writecrc(src,arg);
2148: writecrc(src,arg2);
2149: continue; }
2150: if(!stricmp(p,"SETSTR")) {
2151: if(!*arg) break;
2152: fprintf(out,"%c",CS_SETSTR);
2153: writecstr(arg);
2154: continue; }
2155: if(!stricmp(p,"COMPARE_STR")) {
2156: if(!*arg) break;
2157: fprintf(out,"%c",CS_COMPARE_STR);
2158: writecstr(arg);
2159: continue; }
2160: if(!stricmp(p,"GET_TEMPLATE")) {
2161: if(!*arg) break;
2162: fprintf(out,"%c",CS_GET_TEMPLATE);
2163: writestr(arg);
2164: continue; }
2165: if(!stricmp(p,"READ_SIF")) {
2166: if(!*arg) break;
2167: fprintf(out,"%c",CS_READ_SIF);
2168: writestr(arg);
2169: continue; }
2170: if(!stricmp(p,"CREATE_SIF")) {
2171: if(!*arg) break;
2172: fprintf(out,"%c",CS_CREATE_SIF);
2173: writestr(arg);
2174: continue; }
2175: if(!stricmp(p,"TRASHCAN")) {
2176: if(!*arg) break;
2177: fprintf(out,"%c",CS_TRASHCAN);
2178: writestr(arg);
2179: continue; }
2180: if(!stricmp(p,"CMDSTR")) {
2181: if(!*arg) break;
2182: fprintf(out,"%c",CS_CMDSTR);
2183: writecstr(arg);
2184: continue; }
2185: if(!stricmp(p,"CMDKEYS")) {
2186: if(!*arg) break;
2187: fprintf(out,"%c",CS_CMDKEYS);
2188: for(p=arg;*p && *p!='#';p++) {
2189: ch=*p;
2190: if(ch=='"')
2191: continue;
2192: if(ch=='/') {
2193: p++;
2194: ch=*p|0x80; } /* high bit indicates slash required */
2195: else if(ch=='^' && *(p+1)>=0x40) {
2196: p++;
2197: ch=*p;
2198: ch-=0x40; }
2199: else if(ch=='\\') {
2200: p++;
2201: ch=cesc(*p); }
2202: fputc(ch,out); }
2203: fputc(0,out);
2204: continue; }
2205: if(!stricmp(p,"COMPARE_WORD")) {
2206: if(!*arg) break;
2207: fprintf(out,"%c",CS_COMPARE_WORD);
2208: writecstr(arg);
2209: continue; }
2210: if(!stricmp(p,"GETSTR")) {
2211: p=strchr(arg,SP);
2212: if(p) *p=0;
2213: if((!*arg || isdigit(*arg) || !stricmp(arg,"STR")) && !*arg3)
2214: fprintf(out,"%c%c",CS_GETSTR,atoi(arg) ? atoi(arg)
2215: : *arg2 ? atoi(arg2) : 128);
2216: else {
2217: if((l=isvar(arg2))!=0) {
2218: fputc(CS_USE_INT_VAR,out);
2219: fwrite(&l,4,1,out); // variable
2220: fputc(6,out); // int offset
2221: fputc(1,out); // int length
2222: i=0; } // place holder
2223: else if(*arg2)
2224: i=val(src,arg2);
2225: else
2226: i=0;
2227:
2228: fprintf(out,"%c%c",CS_VAR_INSTRUCTION
2229: ,*arg3 ? GETSTR_MODE : GETSTR_VAR);
2230: writecrc(src,arg);
2231:
2232: if(!i) i=128;
2233: fwrite(&i,1,1,out);
2234: if(*arg3) {
2235: l=val(src,arg3);
2236: fwrite(&l,4,1,out); } }
2237: continue; }
2238: if(!stricmp(p,"GETNUM")) {
2239: if(!*arg) break;
2240: p=strchr(arg,SP);
2241: if(p) *p=0;
2242: if(isdigit(*arg)) {
2243: i=val(src,arg);
2244: fprintf(out,"%c",CS_GETNUM);
2245: fwrite(&i,2,1,out); }
2246: else {
2247: if((l=isvar(arg2))!=0) {
2248: fputc(CS_USE_INT_VAR,out);
2249: fwrite(&l,4,1,out); // variable
2250: fputc(6,out); // int offset
2251: fputc(2,out); // int length
2252: i=0; } // place holder
2253: else
2254: i=val(src,arg2);
2255:
2256: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,GETNUM_VAR);
2257: writecrc(src,arg);
2258: fwrite(&i,2,1,out); }
2259: continue; }
2260: if(!stricmp(p,"MSWAIT")) {
2261: if(!*arg) break;
2262: if((l=isvar(arg))!=0) {
2263: fputc(CS_USE_INT_VAR,out);
2264: fwrite(&l,4,1,out); // variable
2265: fputc(1,out); // int offset
2266: fputc(2,out); // int length
2267: i=0; } // place holder
2268: else
2269: i=val(src,arg);
2270:
2271: fprintf(out,"%c",CS_MSWAIT);
2272: fwrite(&i,2,1,out);
2273: continue; }
2274: if(!stricmp(p,"GETLINE")) {
2275: p=strchr(arg,SP);
2276: if(p) *p=0;
2277: if(!*arg || isdigit(*arg))
2278: fprintf(out,"%c%c",CS_GETLINE,*arg ? atoi(arg) :128);
2279: else {
2280: if((l=isvar(arg2))!=0) {
2281: fputc(CS_USE_INT_VAR,out);
2282: fwrite(&l,4,1,out); // variable
2283: fputc(6,out); // int offset
2284: fputc(1,out); // int length
2285: i=0; } // place holder
2286: else
2287: i=val(src,arg2);
2288:
2289: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,GETLINE_VAR);
2290: writecrc(src,arg);
2291: if(!i) i=128;
2292: fwrite(&i,1,1,out); }
2293: continue; }
2294: if(!stricmp(p,"GETSTRUPR")) {
2295: p=strchr(arg,SP);
2296: if(p) *p=0;
2297: if(!*arg || isdigit(*arg))
2298: fprintf(out,"%c%c",CS_GETSTRUPR,*arg ? atoi(arg) :128);
2299: else {
2300: if((l=isvar(arg2))!=0) {
2301: fputc(CS_USE_INT_VAR,out);
2302: fwrite(&l,4,1,out); // variable
2303: fputc(6,out); // int offset
2304: fputc(1,out); // int length
2305: i=0; } // place holder
2306: else
2307: i=val(src,arg2);
2308:
2309: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,GETSTRUPR_VAR);
2310: writecrc(src,arg);
2311: if(!i) i=128;
2312: fwrite(&i,1,1,out); }
2313: continue; }
2314: if(!stricmp(p,"GETNAME")) {
2315: p=strchr(arg,SP);
2316: if(p) *p=0;
2317: if(!*arg || isdigit(*arg))
2318: fprintf(out,"%c%c",CS_GETNAME,*arg ? atoi(arg) :25);
2319: else {
2320: if((l=isvar(arg2))!=0) {
2321: fputc(CS_USE_INT_VAR,out);
2322: fwrite(&l,4,1,out); // variable
2323: fputc(6,out); // int offset
2324: fputc(1,out); // int length
2325: i=0; } // place holder
2326: else
2327: i=atoi(arg2);
2328:
2329: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,GETNAME_VAR);
2330: writecrc(src,arg);
2331: if(!i) i=128;
2332: fwrite(&i,1,1,out); }
2333: continue; }
2334: if(!stricmp(p,"SHIFT_STR")) {
2335: if(!*arg) break;
2336: p=strchr(arg,SP);
2337: if(p) *p=0;
2338: if(!*arg || isdigit(*arg))
2339: fprintf(out,"%c%c",CS_SHIFT_STR,atoi(arg));
2340: else {
2341: if((l=isvar(arg2))!=0) {
2342: fputc(CS_USE_INT_VAR,out);
2343: fwrite(&l,4,1,out); // variable
2344: fputc(6,out); // int offset
2345: fputc(1,out); // int length
2346: i=0; } // place holder
2347: else
2348: i=atoi(arg2);
2349:
2350: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,SHIFT_STR_VAR);
2351: writecrc(src,arg);
2352: if(!i) i=128;
2353: fwrite(&i,1,1,out); }
2354: continue; }
2355: if(!stricmp(p,"TRUNCSP")) {
2356: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,TRUNCSP_STR_VAR);
2357: writecrc(src,arg);
2358: continue; }
2359: if(!stricmp(p,"STRIP_CTRL")) {
2360: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,STRIP_CTRL_STR_VAR);
2361: writecrc(src,arg);
2362: continue; }
2363: if(!stricmp(p,"STRUPR")) {
2364: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,STRUPR_VAR);
2365: writecrc(src,arg);
2366: continue; }
2367: if(!stricmp(p,"STRLWR")) {
2368: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,STRLWR_VAR);
2369: writecrc(src,arg);
2370: continue; }
2371: if(!stricmp(p,"STRLEN")) {
2372: if(!*arg) break;
2373: fprintf(out,"%c%c",CS_VAR_INSTRUCTION,STRLEN_INT_VAR);
2374: p=strchr(arg,SP);
2375: if(!p)
2376: break;
2377: *p=0;
2378: writecrc(src,arg);
2379: writecrc(src,arg2);
2380: continue; }
2381: if(!stricmp(p,"REPLACE_TEXT")) {
2382: if(!*arg || !*arg2) break;
2383: if((l=isvar(arg))!=0) {
2384: fputc(CS_USE_INT_VAR,out);
2385: fwrite(&l,4,1,out); // variable
2386: fputc(1,out); // int offset
2387: fputc(2,out); // int length
2388: i=0; } // place holder
2389: else
2390: i=val(src,arg);
2391:
2392: fprintf(out,"%c",CS_REPLACE_TEXT);
2393: fwrite(&i,2,1,out);
2394: writecstr(arg2);
2395: continue; }
2396: if(!stricmp(p,"REVERT_TEXT")) {
2397: if(!*arg) break;
2398: if(!stricmp(arg,"ALL"))
2399: i=0xffff;
2400: else {
2401: if((l=isvar(arg))!=0) {
2402: fputc(CS_USE_INT_VAR,out);
2403: fwrite(&l,4,1,out); // variable
2404: fputc(1,out); // int offset
2405: fputc(2,out); // int length
2406: i=0; } // place holder
2407: else
2408: i=val(src,arg); }
2409:
2410: fprintf(out,"%c",CS_REVERT_TEXT);
2411: fwrite(&i,2,1,out);
2412: continue; }
2413: if(!stricmp(p,"TOGGLE_USER_MISC")
2414: || !stricmp(p,"COMPARE_USER_MISC")) {
2415: if(!*arg) break;
2416:
2417: if((l=isvar(arg))!=0) {
2418: fputc(CS_USE_INT_VAR,out);
2419: fwrite(&l,4,1,out); // variable
2420: fputc(1,out); // int offset
2421: fputc(4,out); // int length
2422: l=0; } // place holder
2423: else
2424: l=val(src,arg);
2425:
2426: if(!stricmp(p,"TOGGLE_USER_MISC"))
2427: fprintf(out,"%c",CS_TOGGLE_USER_MISC);
2428: else
2429: fprintf(out,"%c",CS_COMPARE_USER_MISC);
2430: fwrite(&l,4,1,out);
2431: continue; }
2432:
2433: if(!stricmp(p,"TOGGLE_USER_CHAT")
2434: || !stricmp(p,"COMPARE_USER_CHAT")) {
2435: if(!*arg) break;
2436:
2437: if((l=isvar(arg))!=0) {
2438: fputc(CS_USE_INT_VAR,out);
2439: fwrite(&l,4,1,out); // variable
2440: fputc(1,out); // int offset
2441: fputc(4,out); // int length
2442: l=0; } // place holder
2443: else
2444: l=val(src,arg);
2445:
2446: if(!stricmp(p,"TOGGLE_USER_CHAT"))
2447: fprintf(out,"%c",CS_TOGGLE_USER_CHAT);
2448: else
2449: fprintf(out,"%c",CS_COMPARE_USER_CHAT);
2450: fwrite(&l,4,1,out);
2451: continue; }
2452:
2453: if(!stricmp(p,"TOGGLE_USER_QWK")
2454: || !stricmp(p,"COMPARE_USER_QWK")) {
2455: if(!*arg) break;
2456:
2457: if((l=isvar(arg))!=0) {
2458: fputc(CS_USE_INT_VAR,out);
2459: fwrite(&l,4,1,out); // variable
2460: fputc(1,out); // int offset
2461: fputc(4,out); // int length
2462: l=0; } // place holder
2463: else
2464: l=val(src,arg);
2465:
2466: if(!stricmp(p,"TOGGLE_USER_QWK"))
2467: fprintf(out,"%c",CS_TOGGLE_USER_QWK);
2468: else
2469: fprintf(out,"%c",CS_COMPARE_USER_QWK);
2470: fwrite(&l,4,1,out);
2471: continue; }
2472:
2473: if(!stricmp(p,"TOGGLE_NODE_MISC")
2474: || !stricmp(p,"COMPARE_NODE_MISC")) {
2475: if(!*arg) break;
2476:
2477: if((l=isvar(arg))!=0) {
2478: fputc(CS_USE_INT_VAR,out);
2479: fwrite(&l,4,1,out); // variable
2480: fputc(1,out); // int offset
2481: fputc(2,out); // int length
2482: i=0; } // place holder
2483: else
2484: i=val(src,arg);
2485:
2486: if(!stricmp(p,"TOGGLE_NODE_MISC"))
2487: fprintf(out,"%c",CS_TOGGLE_NODE_MISC);
2488: else
2489: fprintf(out,"%c",CS_COMPARE_NODE_MISC);
2490: fwrite(&i,2,1,out);
2491: continue; }
2492:
2493: if(!stricmp(p,"TOGGLE_USER_FLAG")) {
2494: if(!*arg) break;
2495: p=arg;
2496: fprintf(out,"%c%c",CS_TOGGLE_USER_FLAG,toupper(*p++));
2497: while(*p && *p<=SP) p++;
2498: fprintf(out,"%c",toupper(*p));
2499: continue; }
2500:
2501: if(!stricmp(p,"SET_USER_LEVEL")) {
2502: if(!*arg) break;
2503:
2504: if((l=isvar(arg))!=0) {
2505: fputc(CS_USE_INT_VAR,out);
2506: fwrite(&l,4,1,out); // variable
2507: fputc(1,out); // int offset
2508: fputc(1,out); // int length
2509: ch=0; } // place holder
2510: else
2511: ch=val(src,arg);
2512:
2513: fprintf(out,"%c%c",CS_SET_USER_LEVEL,ch);
2514: continue; }
2515:
2516: if(!stricmp(p,"SET_USER_STRING")) {
2517: if(!*arg) break;
2518:
2519: if((l=isvar(arg))!=0) {
2520: fputc(CS_USE_INT_VAR,out);
2521: fwrite(&l,4,1,out); // variable
2522: fputc(1,out); // int offset
2523: fputc(1,out); // int length
2524: ch=0; } // place holder
2525: else
2526: ch=val(src,arg);
2527:
2528: fprintf(out,"%c%c",CS_SET_USER_STRING,ch);
2529: continue; }
2530:
2531:
2532: if(!stricmp(p,"ADJUST_USER_CREDITS")) {
2533: if(!*arg) break;
2534:
2535: if((l=isvar(arg))!=0) {
2536: fputc(CS_USE_INT_VAR,out);
2537: fwrite(&l,4,1,out); // variable
2538: fputc(1,out); // int offset
2539: fputc(2,out); // int length
2540: i=0; } // place holder
2541: else
2542: i=val(src,arg);
2543:
2544: fprintf(out,"%c",CS_ADJUST_USER_CREDITS);
2545: fwrite(&i,2,1,out);
2546: continue; }
2547:
2548: if(!stricmp(p,"ADJUST_USER_MINUTES")) {
2549: if(!*arg) break;
2550:
2551: if((l=isvar(arg))!=0) {
2552: fputc(CS_USE_INT_VAR,out);
2553: fwrite(&l,4,1,out); // variable
2554: fputc(1,out); // int offset
2555: fputc(2,out); // int length
2556: i=0; } // place holder
2557: else
2558: i=val(src,arg);
2559:
2560: fprintf(out,"%c",CS_ADJUST_USER_MINUTES);
2561: fwrite(&i,2,1,out);
2562: continue; }
2563:
2564: if(!stricmp(p,"SHOW_MEM")) {
2565: fprintf(out,"%c",CS_SHOW_MEM);
2566: continue; }
2567: if(!stricmp(p,"GURU_LOG")) {
2568: fprintf(out,"%c",CS_GURU_LOG);
2569: continue; }
2570: if(!stricmp(p,"ERROR_LOG")) {
2571: fprintf(out,"%c",CS_ERROR_LOG);
2572: continue; }
2573: if(!stricmp(p,"SYSTEM_LOG")) {
2574: fprintf(out,"%c",CS_SYSTEM_LOG);
2575: continue; }
2576: if(!stricmp(p,"SYSTEM_YLOG")) {
2577: fprintf(out,"%c",CS_SYSTEM_YLOG);
2578: continue; }
2579: if(!stricmp(p,"SYSTEM_STATS")) {
2580: fprintf(out,"%c",CS_SYSTEM_STATS);
2581: continue; }
2582: if(!stricmp(p,"NODE_STATS")) {
2583: fprintf(out,"%c",CS_NODE_STATS);
2584: continue; }
2585: if(!stricmp(p,"CHANGE_USER")) {
2586: fprintf(out,"%c",CS_CHANGE_USER);
2587: continue; }
2588: if(!stricmp(p,"ANSI_CAPTURE")) {
2589: fprintf(out,"%c",CS_ANSI_CAPTURE);
2590: continue; }
2591: if(!stricmp(p,"LIST_TEXT_FILE")) {
2592: fprintf(out,"%c",CS_LIST_TEXT_FILE);
2593: continue; }
2594: if(!stricmp(p,"EDIT_TEXT_FILE")) {
2595: fprintf(out,"%c",CS_EDIT_TEXT_FILE);
2596: continue; }
2597:
2598:
2599: if(!stricmp(p,"COMPARE_KEY")) {
2600: if(!stricmp(arg,"DIGIT"))
2601: ch=CS_DIGIT;
2602: else if(!stricmp(arg,"EDIGIT"))
2603: ch=CS_EDIGIT;
2604: else
2605: ch=toupper(*arg);
2606: if(ch=='/')
2607: ch=(*arg)|0x80; /* high bit indicates slash required */
2608: else if(ch=='^' && (*(arg+1))>=0x40)
2609: ch=(*(arg+1))-0x40; /* ctrl char */
2610: else if(ch=='\\')
2611: ch=cesc(*(arg+1));
2612: else if(ch=='\'')
2613: ch=*(arg+1);
2614: fprintf(out,"%c%c",CS_COMPARE_KEY,ch);
2615: continue; }
2616: if(!stricmp(p,"COMPARE_KEYS")) {
2617: fputc(CS_COMPARE_KEYS,out);
2618: for(p=arg;*p && *p!='#';p++) {
2619: ch=*p;
2620: if(ch=='"')
2621: continue;
2622: if(ch=='/') {
2623: p++;
2624: ch=*p|0x80; } /* high bit indicates slash required */
2625: else if(ch=='^' && *(p+1)>=0x40) {
2626: p++;
2627: ch=*p;
2628: ch-=0x40; }
2629: else if(ch=='\\') {
2630: p++;
2631: ch=cesc(*p); }
2632: fputc(ch,out); }
2633: fputc(0,out);
2634: continue; }
2635: if(!stricmp(p,"GETCMD")) {
2636: fprintf(out,"%c",CS_GETCMD);
2637: writecstr(arg);
2638: continue; }
2639: if(!stricmp(p,"INKEY")) {
2640: fprintf(out,"%c",CS_INKEY);
2641: continue; }
2642: if(!stricmp(p,"GETKEY")) {
2643: fprintf(out,"%c",CS_GETKEY);
2644: continue; }
2645: if(!stricmp(p,"GETKEYE")) {
2646: fprintf(out,"%c",CS_GETKEYE);
2647: continue; }
2648: if(!stricmp(p,"UNGETKEY")) {
2649: fprintf(out,"%c",CS_UNGETKEY);
2650: continue; }
2651: if(!stricmp(p,"UNGETSTR")) {
2652: fprintf(out,"%c",CS_UNGETSTR);
2653: continue; }
2654: if(!stricmp(p,"PRINTKEY")) {
2655: fprintf(out,"%c",CS_PRINTKEY);
2656: continue; }
2657: if(!stricmp(p,"PRINTSTR")) {
2658: fprintf(out,"%c",CS_PRINTSTR);
2659: continue; }
2660:
2661: /* FUNCTIONS */
2662:
2663: if(!stricmp(p,"NODELIST_ALL")) {
2664: fprintf(out,"%c",CS_NODELIST_ALL);
2665: continue; }
2666: if(!stricmp(p,"NODELIST_USERS")) {
2667: fprintf(out,"%c",CS_NODELIST_USERS);
2668: continue; }
2669:
2670: if(!stricmp(p,"USERLIST_ALL")) {
2671: fprintf(out,"%c",CS_USERLIST_ALL);
2672: continue; }
2673: if(!stricmp(p,"USERLIST_SUB")) {
2674: fprintf(out,"%c",CS_USERLIST_SUB);
2675: continue; }
2676: if(!stricmp(p,"USERLIST_DIR")) {
2677: fprintf(out,"%c",CS_USERLIST_DIR);
2678: continue; }
2679: if(!stricmp(p,"USERLIST_LOGONS")) {
2680: fprintf(out,"%c",CS_USERLIST_LOGONS);
2681: continue; }
2682:
2683: if(!stricmp(p,"HANGUP")) {
2684: fprintf(out,"%c",CS_HANGUP);
2685: continue; }
2686:
2687: if(!stricmp(p,"LOGOFF")) {
2688: fprintf(out,"%c",CS_LOGOFF);
2689: continue; }
2690:
2691: if(!stricmp(p,"LOGOFF_FAST")) {
2692: fprintf(out,"%c",CS_LOGOFF_FAST);
2693: continue; }
2694:
2695: if(!stricmp(p,"AUTO_MESSAGE")) {
2696: fprintf(out,"%c",CS_AUTO_MESSAGE);
2697: continue; }
2698:
2699: if(!stricmp(p,"MINUTE_BANK")) {
2700: fprintf(out,"%c",CS_MINUTE_BANK);
2701: continue; }
2702:
2703: if(!stricmp(p,"USER_EDIT")) {
2704: fprintf(out,"%c",CS_USER_EDIT);
2705: continue; }
2706:
2707: if(!stricmp(p,"USER_DEFAULTS")) {
2708: fprintf(out,"%c",CS_USER_DEFAULTS);
2709: continue; }
2710:
2711: if(!stricmp(p,"PAGE_SYSOP")) {
2712: fprintf(out,"%c",CS_PAGE_SYSOP);
2713: continue; }
2714: if(!stricmp(p,"PAGE_GURU")) {
2715: fprintf(out,"%c",CS_PAGE_GURU);
2716: continue; }
2717:
2718: if(!stricmp(p,"PRIVATE_CHAT")) {
2719: fprintf(out,"%c",CS_PRIVATE_CHAT);
2720: continue; }
2721:
2722: if(!stricmp(p,"PRIVATE_MESSAGE")) {
2723: fprintf(out,"%c",CS_PRIVATE_MESSAGE);
2724: continue; }
2725:
2726: if(!stricmp(p,"MAIL_READ")) {
2727: fprintf(out,"%c",CS_MAIL_READ);
2728: continue; }
2729: if(!stricmp(p,"MAIL_READ_SENT")) { /* Kill/read sent mail */
2730: fprintf(out,"%c",CS_MAIL_READ_SENT);
2731: continue; }
2732: if(!stricmp(p,"MAIL_READ_ALL")) {
2733: fprintf(out,"%c",CS_MAIL_READ_ALL);
2734: continue; }
2735: if(!stricmp(p,"MAIL_SEND")) { /* Send E-mail */
2736: fprintf(out,"%c",CS_MAIL_SEND);
2737: continue; }
2738: if(!stricmp(p,"MAIL_SEND_FEEDBACK")) { /* Feedback */
2739: fprintf(out,"%c",CS_MAIL_SEND_FEEDBACK);
2740: continue; }
2741: if(!stricmp(p,"MAIL_SEND_NETMAIL")) {
2742: fprintf(out,"%c",CS_MAIL_SEND_NETMAIL);
2743: continue; }
2744: if(!stricmp(p,"MAIL_SEND_NETFILE")) {
2745: fprintf(out,"%c",CS_MAIL_SEND_NETFILE);
2746: continue; }
2747: if(!stricmp(p,"MAIL_SEND_FILE")) { /* Upload Attached File to E-mail */
2748: fprintf(out,"%c",CS_MAIL_SEND_FILE);
2749: continue; }
2750: if(!stricmp(p,"MAIL_SEND_BULK")) {
2751: fprintf(out,"%c",CS_MAIL_SEND_BULK);
2752: continue; }
2753:
2754:
2755: if(!stricmp(p,"MSG_SET_AREA")) {
2756: fprintf(out,"%c",CS_MSG_SET_AREA);
2757: continue; }
2758: if(!stricmp(p,"MSG_SET_GROUP")) {
2759: fprintf(out,"%c",CS_MSG_SET_GROUP);
2760: continue; }
2761: if(!stricmp(p,"MSG_SELECT_AREA")) {
2762: fprintf(out,"%c",CS_MSG_SELECT_AREA);
2763: continue; }
2764: if(!stricmp(p,"MSG_SHOW_GROUPS")) {
2765: fprintf(out,"%c",CS_MSG_SHOW_GROUPS);
2766: continue; }
2767: if(!stricmp(p,"MSG_SHOW_SUBBOARDS")) {
2768: fprintf(out,"%c",CS_MSG_SHOW_SUBBOARDS);
2769: continue; }
2770: if(!stricmp(p,"MSG_GROUP_UP")) {
2771: fprintf(out,"%c",CS_MSG_GROUP_UP);
2772: continue; }
2773: if(!stricmp(p,"MSG_GROUP_DOWN")) {
2774: fprintf(out,"%c",CS_MSG_GROUP_DOWN);
2775: continue; }
2776: if(!stricmp(p,"MSG_SUBBOARD_UP")) {
2777: fprintf(out,"%c",CS_MSG_SUBBOARD_UP);
2778: continue; }
2779: if(!stricmp(p,"MSG_SUBBOARD_DOWN")) {
2780: fprintf(out,"%c",CS_MSG_SUBBOARD_DOWN);
2781: continue; }
2782: if(!stricmp(p,"MSG_GET_SUB_NUM")) {
2783: fprintf(out,"%c",CS_MSG_GET_SUB_NUM);
2784: continue; }
2785: if(!stricmp(p,"MSG_GET_GRP_NUM")) {
2786: fprintf(out,"%c",CS_MSG_GET_GRP_NUM);
2787: continue; }
2788: if(!stricmp(p,"MSG_READ")) {
2789: fprintf(out,"%c",CS_MSG_READ);
2790: continue; }
2791: if(!stricmp(p,"MSG_POST")) {
2792: fprintf(out,"%c",CS_MSG_POST);
2793: continue; }
2794: if(!stricmp(p,"MSG_QWK")) {
2795: fprintf(out,"%c",CS_MSG_QWK);
2796: continue; }
2797: if(!stricmp(p,"MSG_PTRS_CFG")) {
2798: fprintf(out,"%c",CS_MSG_PTRS_CFG);
2799: continue; }
2800: if(!stricmp(p,"MSG_PTRS_REINIT")) {
2801: fprintf(out,"%c",CS_MSG_PTRS_REINIT);
2802: continue; }
2803: if(!stricmp(p,"MSG_NEW_SCAN_CFG")) {
2804: fprintf(out,"%c",CS_MSG_NEW_SCAN_CFG);
2805: continue; }
2806: if(!stricmp(p,"MSG_NEW_SCAN")) {
2807: fprintf(out,"%c",CS_MSG_NEW_SCAN);
2808: continue; }
2809: if(!stricmp(p,"MSG_NEW_SCAN_SUB")) {
2810: fprintf(out,"%c",CS_MSG_NEW_SCAN_SUB);
2811: continue; }
2812: if(!stricmp(p,"MSG_NEW_SCAN_ALL")) {
2813: fprintf(out,"%c",CS_MSG_NEW_SCAN_ALL);
2814: continue; }
2815: if(!stricmp(p,"MSG_CONT_SCAN")) {
2816: fprintf(out,"%c",CS_MSG_CONT_SCAN);
2817: continue; }
2818: if(!stricmp(p,"MSG_CONT_SCAN_ALL")) {
2819: fprintf(out,"%c",CS_MSG_CONT_SCAN_ALL);
2820: continue; }
2821: if(!stricmp(p,"MSG_BROWSE_SCAN")) {
2822: fprintf(out,"%c",CS_MSG_BROWSE_SCAN);
2823: continue; }
2824: if(!stricmp(p,"MSG_BROWSE_SCAN_ALL")) {
2825: fprintf(out,"%c",CS_MSG_BROWSE_SCAN_ALL);
2826: continue; }
2827: if(!stricmp(p,"MSG_FIND_TEXT")) {
2828: fprintf(out,"%c",CS_MSG_FIND_TEXT);
2829: continue; }
2830: if(!stricmp(p,"MSG_FIND_TEXT_ALL")) {
2831: fprintf(out,"%c",CS_MSG_FIND_TEXT_ALL);
2832: continue; }
2833: if(!stricmp(p,"MSG_YOUR_SCAN_CFG")) {
2834: fprintf(out,"%c",CS_MSG_YOUR_SCAN_CFG);
2835: continue; }
2836: if(!stricmp(p,"MSG_YOUR_SCAN")) {
2837: fprintf(out,"%c",CS_MSG_YOUR_SCAN);
2838: continue; }
2839: if(!stricmp(p,"MSG_YOUR_SCAN_ALL")) {
2840: fprintf(out,"%c",CS_MSG_YOUR_SCAN_ALL);
2841: continue; }
2842: if(!stricmp(p,"CHAT_SECTION")) {
2843: fprintf(out,"%c",CS_CHAT_SECTION);
2844: continue; }
2845: if(!stricmp(p,"TEXT_FILE_SECTION")) {
2846: fprintf(out,"%c",CS_TEXT_FILE_SECTION);
2847: continue; }
2848: if(!stricmp(p,"XTRN_EXEC")) {
2849: fprintf(out,"%c",CS_XTRN_EXEC);
2850: continue; }
2851: if(!stricmp(p,"XTRN_SECTION")) {
2852: fprintf(out,"%c",CS_XTRN_SECTION);
2853: continue; }
2854:
2855: if(!stricmp(p,"FILE_SET_AREA")) {
2856: fprintf(out,"%c",CS_FILE_SET_AREA);
2857: continue; }
2858: if(!stricmp(p,"FILE_SET_LIBRARY")) {
2859: fprintf(out,"%c",CS_FILE_SET_LIBRARY);
2860: continue; }
2861: if(!stricmp(p,"FILE_SELECT_AREA")) {
2862: fprintf(out,"%c",CS_FILE_SELECT_AREA);
2863: continue; }
2864: if(!stricmp(p,"FILE_SHOW_LIBRARIES")) {
2865: fprintf(out,"%c",CS_FILE_SHOW_LIBRARIES);
2866: continue; }
2867: if(!stricmp(p,"FILE_SHOW_DIRECTORIES")) {
2868: fprintf(out,"%c",CS_FILE_SHOW_DIRECTORIES);
2869: continue; }
2870: if(!stricmp(p,"FILE_LIBRARY_UP")) {
2871: fprintf(out,"%c",CS_FILE_LIBRARY_UP);
2872: continue; }
2873: if(!stricmp(p,"FILE_LIBRARY_DOWN")) {
2874: fprintf(out,"%c",CS_FILE_LIBRARY_DOWN);
2875: continue; }
2876: if(!stricmp(p,"FILE_DIRECTORY_UP")) {
2877: fprintf(out,"%c",CS_FILE_DIRECTORY_UP);
2878: continue; }
2879: if(!stricmp(p,"FILE_DIRECTORY_DOWN")) {
2880: fprintf(out,"%c",CS_FILE_DIRECTORY_DOWN);
2881: continue; }
2882: if(!stricmp(p,"FILE_GET_DIR_NUM")) {
2883: fprintf(out,"%c",CS_FILE_GET_DIR_NUM);
2884: continue; }
2885: if(!stricmp(p,"FILE_GET_LIB_NUM")) {
2886: fprintf(out,"%c",CS_FILE_GET_LIB_NUM);
2887: continue; }
2888: if(!stricmp(p,"FILE_UPLOAD")) {
2889: fprintf(out,"%c",CS_FILE_UPLOAD);
2890: continue; }
2891: if(!stricmp(p,"FILE_UPLOAD_USER")) {
2892: fprintf(out,"%c",CS_FILE_UPLOAD_USER);
2893: continue; }
2894: if(!stricmp(p,"FILE_UPLOAD_BULK")) {
2895: fprintf(out,"%c",CS_FILE_UPLOAD_BULK);
2896: continue; }
2897: if(!stricmp(p,"FILE_UPLOAD_SYSOP")) {
2898: fprintf(out,"%c",CS_FILE_UPLOAD_SYSOP);
2899: continue; }
2900: if(!stricmp(p,"FILE_RESORT_DIRECTORY")) {
2901: fprintf(out,"%c",CS_FILE_RESORT_DIRECTORY);
2902: continue; }
2903: if(!stricmp(p,"FILE_SET_ALT_PATH")) {
2904: fprintf(out,"%c",CS_FILE_SET_ALT_PATH);
2905: continue; }
2906: if(!stricmp(p,"FILE_GET")) {
2907: fprintf(out,"%c",CS_FILE_GET);
2908: continue; }
2909: if(!stricmp(p,"FILE_SEND")) {
2910: fprintf(out,"%c",CS_FILE_SEND);
2911: continue; }
2912: if(!stricmp(p,"FILE_PUT")) {
2913: fprintf(out,"%c",CS_FILE_PUT);
2914: continue; }
2915: if(!stricmp(p,"FILE_FIND_OLD")) {
2916: fprintf(out,"%c",CS_FILE_FIND_OLD);
2917: continue; }
2918: if(!stricmp(p,"FILE_FIND_OPEN")) {
2919: fprintf(out,"%c",CS_FILE_FIND_OPEN);
2920: continue; }
2921: if(!stricmp(p,"FILE_FIND_OFFLINE")) {
2922: fprintf(out,"%c",CS_FILE_FIND_OFFLINE);
2923: continue; }
2924: if(!stricmp(p,"FILE_FIND_OLD_UPLOADS")) {
2925: fprintf(out,"%c",CS_FILE_FIND_OLD_UPLOADS);
2926: continue; }
2927: if(!stricmp(p,"FILE_DOWNLOAD")) {
2928: fprintf(out,"%c",CS_FILE_DOWNLOAD);
2929: continue; }
2930: if(!stricmp(p,"FILE_DOWNLOAD_USER")) {
2931: fprintf(out,"%c",CS_FILE_DOWNLOAD_USER);
2932: continue; }
2933: if(!stricmp(p,"FILE_DOWNLOAD_BATCH")) {
2934: fprintf(out,"%c",CS_FILE_DOWNLOAD_BATCH);
2935: continue; }
2936: if(!stricmp(p,"FILE_REMOVE")) {
2937: fprintf(out,"%c",CS_FILE_REMOVE);
2938: continue; }
2939: if(!stricmp(p,"FILE_LIST")) {
2940: fprintf(out,"%c",CS_FILE_LIST);
2941: continue; }
2942: if(!stricmp(p,"FILE_LIST_EXTENDED")) {
2943: fprintf(out,"%c",CS_FILE_LIST_EXTENDED);
2944: continue; }
2945: if(!stricmp(p,"FILE_VIEW")) {
2946: fprintf(out,"%c",CS_FILE_VIEW);
2947: continue; }
2948: if(!stricmp(p,"FILE_FIND_TEXT")) {
2949: fprintf(out,"%c",CS_FILE_FIND_TEXT);
2950: continue; }
2951: if(!stricmp(p,"FILE_FIND_TEXT_ALL")) {
2952: fprintf(out,"%c",CS_FILE_FIND_TEXT_ALL);
2953: continue; }
2954: if(!stricmp(p,"FILE_FIND_NAME")) {
2955: fprintf(out,"%c",CS_FILE_FIND_NAME);
2956: continue; }
2957: if(!stricmp(p,"FILE_FIND_NAME_ALL")) {
2958: fprintf(out,"%c",CS_FILE_FIND_NAME_ALL);
2959: continue; }
2960: if(!stricmp(p,"FILE_BATCH_SECTION")) {
2961: fprintf(out,"%c",CS_FILE_BATCH_SECTION);
2962: continue; }
2963: if(!stricmp(p,"FILE_TEMP_SECTION")) {
2964: fprintf(out,"%c",CS_FILE_TEMP_SECTION);
2965: continue; }
2966: if(!stricmp(p,"FILE_NEW_SCAN")) {
2967: fprintf(out,"%c",CS_FILE_NEW_SCAN);
2968: continue; }
2969: if(!stricmp(p,"FILE_NEW_SCAN_ALL")) {
2970: fprintf(out,"%c",CS_FILE_NEW_SCAN_ALL);
2971: continue; }
2972: if(!stricmp(p,"FILE_NEW_SCAN_CFG")) {
2973: fprintf(out,"%c",CS_FILE_NEW_SCAN_CFG);
2974: continue; }
2975: if(!stricmp(p,"FILE_PTRS_CFG")) {
2976: fprintf(out,"%c",CS_FILE_PTRS_CFG);
2977: continue; }
2978: if(!stricmp(p,"FILE_BATCH_ADD")) {
2979: fprintf(out,"%c",CS_FILE_BATCH_ADD);
2980: continue; }
2981: if(!stricmp(p,"FILE_BATCH_ADD_LIST")) {
2982: fprintf(out,"%c",CS_FILE_BATCH_ADD_LIST);
2983: continue; }
2984: if(!stricmp(p,"FILE_BATCH_CLEAR")) {
2985: fprintf(out,"%c",CS_FILE_BATCH_CLEAR);
2986: continue; }
2987:
2988: if(!stricmp(p,"INC_MAIN_CMDS")) {
2989: fprintf(out,"%c",CS_INC_MAIN_CMDS);
2990: continue; }
2991: if(!stricmp(p,"INC_FILE_CMDS")) {
2992: fprintf(out,"%c",CS_INC_FILE_CMDS);
2993: continue; }
2994:
2995: break; }
2996:
2997:
2998: if(!feof(in)) {
2999: printf("SYNTAX ERROR:\n");
3000: printf(linestr,src,line,save);
3001: exit(1); }
3002: fclose(in);
3003: }
3004:
3005: char *usage="\n"
3006: "usage: baja [/opts] file[.src]\n"
3007: "\n"
3008: " opts: /d display debug during compile\n"
3009: " /c case sensitive variables, labels, and macros\n"
3010: " /o set output directory (e.g. /o\\sbbs\\exec)\n"
3011: ;
3012: int main(int argc, char **argv)
3013: {
3014: uchar str[128],src[128]="",*p,outdir[128]="",outfname[128]="";
3015: int i,j;
3016:
3017: printf("\nBAJA v2.10 � Synchronet Shell/Module Compiler � "
3018: "Developed 1995-97 Rob Swindell\n");
3019:
3020: for(i=1;i<argc;i++)
3021: if(argv[i][0]=='/')
3022: switch(toupper(argv[i][1])) {
3023: case 'D':
3024: display=1;
3025: break;
3026: case 'C':
3027: case_sens=1;
3028: break;
3029: case 'O':
3030: strcpy(outdir,argv[i]+2);
3031: break;
3032: default:
3033: printf(usage);
3034: exit(1); }
3035: else
3036: strcpy(src,argv[i]);
3037:
3038: if(!src[0]) {
3039: printf(usage);
3040: exit(1); }
3041:
3042: strupr(src);
3043: strcpy(str,src);
3044: if(!strchr(str,'.'))
3045: sprintf(src,"%s.SRC",str);
3046:
3047: strcpy(str,src);
3048: p=strrchr(str,'.');
3049: if(p)
3050: *p=0;
3051: strcat(str,".BIN");
3052:
3053: if(outdir[0]) {
3054: p=strrchr(str,'\\');
3055: if(!p)
3056: p=strrchr(str,':');
3057: if(p)
3058: strcpy(outfname,p+1);
3059: else
3060: strcpy(outfname,str);
3061: if(outdir[strlen(outdir)-1]!='\\'
3062: && outdir[strlen(outdir)-1]!=':')
3063: strcat(outdir,"\\");
3064: sprintf(str,"%s%s",outdir,outfname); }
3065:
3066: if((out=fopen(str,"wb"))==NULL) {
3067: printf("error opening %s for write\n",str);
3068: exit(1); }
3069:
3070: atexit(bail);
3071:
3072: printf("\nCompiling %s...\n",src);
3073:
3074: compile(src);
3075:
3076: /****************************/
3077: /* Resolve GOTOS and CALLS */
3078: /****************************/
3079:
3080: printf("Resolving labels...\n");
3081:
3082: for(i=0;i<gotos;i++) {
3083: for(j=0;j<labels;j++)
3084: if(!stricmp(goto_label[i],label_name[j]))
3085: break;
3086: if(j>=labels) {
3087: printf("%s line %d: label (%s) not found.\n"
3088: ,goto_file[i],goto_line[i],goto_label[i]);
3089: exit(1); }
3090: fseek(out,(long)(goto_indx[i]+1),SEEK_SET);
3091: fwrite(&label_indx[j],2,1,out); }
3092:
3093: for(i=0;i<calls;i++) {
3094: for(j=0;j<labels;j++)
3095: if((!case_sens
3096: && !strnicmp(call_label[i],label_name[j],strlen(call_label[i])))
3097: || (case_sens
3098: && !strncmp(call_label[i],label_name[j],strlen(call_label[i]))))
3099: break;
3100: if(j>=labels) {
3101: printf("%s line %d: label (%s) not found.\n"
3102: ,call_file[i],call_line[i],call_label[i]);
3103: exit(1); }
3104: fseek(out,(long)(call_indx[i]+1),SEEK_SET);
3105: fwrite(&label_indx[j],2,1,out); }
3106:
3107: fclose(out);
3108: out=NULL; /* so bail() won't truncate */
3109:
3110: printf("\nDone.\n");
3111: return(0);
3112: }
3113:
3114:
3115:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.