- char prntstr[LNSIZ]; // String for PRINT directive
- char format[LNSIZ]; // Format for PRINT directive
- int formatting = 0; // Formatting on/off
- int wordlong = 0; // WORD = 0, LONG = 1
- int outtype = 0; // 0:hex, 1:decimal, 2:unsigned
-
- VALUE eval; // Expression value
- WORD eattr; // Expression attributes
- SYM *esym; // External symbol involved in expr.
- TOKEN r_expr[EXPRSIZE];
-
- while(*tok != EOL) {
- switch(*tok) {
- case STRING:
- sprintf(prntstr, "%s", (char*)tok[1]);
- printf("%s", prntstr);
- if(list_fd)
- write(list_fd, prntstr, (LONG)strlen(prntstr));
- tok+=2;
- break;
- case '/':
- formatting = 1;
- if(tok[1] != SYMBOL) goto token_err;
- strcpy(prntstr, (char*)tok[2]);
- switch(prntstr[0]) {
- case 'l': case 'L': wordlong = 1; break;
- case 'w': case 'W': wordlong = 0; break;
- case 'x': case 'X': outtype = 0; break;
- case 'd': case 'D': outtype = 1; break;
- case 'u': case 'U': outtype = 2; break;
- default:
- error("unknown print format flag");
- return(ERROR);
- }
- tok += 3;
- break;
- case ',':
- tok++;
- break;
- default:
- if(expr(r_expr, &eval, &eattr, &esym) != OK)
- goto token_err;
- else {
- switch(outtype) {
- case 0: strcpy(format, "%X"); break;
- case 1: strcpy(format, "%d" ); break;
- case 2: strcpy(format, "%u" ); break;
- }
- if(wordlong) sprintf(prntstr, format, eval);
- else sprintf(prntstr, format, eval & 0xFFFF);
- printf("%s", prntstr);
- if(list_fd)
- write(list_fd, prntstr, (LONG)strlen(prntstr));
- formatting = 0;
- wordlong = 0;
- outtype = 0;
- }
- break;
- }
- }
-
- printf("\n");
- println("\n");
-
- return(0);
-
- token_err:
- error("illegal print token");
- return(ERROR);
-}
+ char prntstr[LNSIZ]; // String for PRINT directive
+ char format[LNSIZ]; // Format for PRINT directive
+ int formatting = 0; // Formatting on/off
+ int wordlong = 0; // WORD = 0, LONG = 1
+ int outtype = 0; // 0:hex, 1:decimal, 2:unsigned
+
+ VALUE eval; // Expression value
+ WORD eattr; // Expression attributes
+ SYM * esym; // External symbol involved in expr.
+ TOKEN r_expr[EXPRSIZE];
+
+ while (*tok != EOL)
+ {
+ switch(*tok)
+ {
+ case STRING:
+ sprintf(prntstr, "%s", string[tok[1]]);
+ printf("%s", prntstr);
+
+ if (list_fd)
+ unused = write(list_fd, prntstr, (LONG)strlen(prntstr));
+
+ tok += 2;
+ break;
+ case '/':
+ formatting = 1;
+
+ if (tok[1] != SYMBOL)
+ goto token_err;
+
+// strcpy(prntstr, (char *)tok[2]);
+ strcpy(prntstr, string[tok[2]]);
+
+ switch(prntstr[0])
+ {
+ case 'l': case 'L': wordlong = 1; break;
+ case 'w': case 'W': wordlong = 0; break;
+ case 'x': case 'X': outtype = 0; break;
+ case 'd': case 'D': outtype = 1; break;
+ case 'u': case 'U': outtype = 2; break;
+ default:
+ error("unknown print format flag");
+ return ERROR;
+ }
+
+ tok += 3;
+ break;
+ case ',':
+ tok++;
+ break;
+ default:
+ if (expr(r_expr, &eval, &eattr, &esym) != OK)
+ goto token_err;
+ else
+ {
+ switch(outtype)
+ {
+ case 0: strcpy(format, "%X"); break;
+ case 1: strcpy(format, "%d" ); break;
+ case 2: strcpy(format, "%u" ); break;
+ }