version 1.6, 2025/03/22 03:05:19
|
version 1.11, 2025/03/30 01:36:58
|
Line 24
|
Line 24
|
* along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
* along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
* |
* |
* $Log$ |
* $Log$ |
|
* Revision 1.11 2025/03/30 01:36:58 snw |
|
* Make it easier to bring back fma_gedit, fix double-free in global handler, limit $CHAR to 7-bit ASCII |
|
* |
|
* Revision 1.10 2025/03/24 04:13:11 snw |
|
* Replace action macro dat with fra_dat to avoid symbol conflict on OS/2 |
|
* |
|
* Revision 1.9 2025/03/24 01:32:22 snw |
|
* Guard declaration of time function in expr.c for portability |
|
* |
|
* Revision 1.8 2025/03/22 04:47:18 snw |
|
* Silently truncate long names in STRING exprs when evaluates to an obsolete MDC standard |
|
* |
|
* Revision 1.7 2025/03/22 03:39:23 snw |
|
* Fix reverse query polyfill call-in from C side and make NAME exprs silently truncate long names in obsolete MDC dialects |
|
* |
* Revision 1.6 2025/03/22 03:05:19 snw |
* Revision 1.6 2025/03/22 03:05:19 snw |
* Comply with X11-96/13 portable length of names |
* Comply with X11-96/13 portable length of names |
* |
* |
Line 132
|
Line 147
|
#define GET 'Y' |
#define GET 'Y' |
#define GETX ':' |
#define GETX ':' |
|
|
#if !defined(__OpenBSD__) && !defined(_AIX) && !defined(__osf__) && !defined(MSDOS) && !defined(__vax__) |
#if !defined(__OpenBSD__) && !defined(_AIX) && !defined(__osf__) && !defined(MSDOS) && !defined(__vax__) && !defined(__OS2__) |
long time (); |
long time (); |
#endif |
#endif |
void cond_round (char *a, int digits); |
void cond_round (char *a, int digits); |
Line 218 void expr (short extyp)
|
Line 233 void expr (short extyp)
|
varnam[i++] = ch; |
varnam[i++] = ch; |
} |
} |
else { |
else { |
merr_raise (M56); |
if ((rtn_dialect () == D_M77) || |
return; |
(rtn_dialect () == D_M84) || |
|
(rtn_dialect () == D_M90) || |
|
(rtn_dialect () == D_M95)) { |
|
/* silently truncate... yeah, the standard is stupid af */ |
|
continue; |
|
} |
|
else { |
|
merr_raise (M56); |
|
return; |
|
} |
} |
} |
|
|
} |
} |
|
|
varnam[i] = EOL; |
varnam[i] = EOL; |
|
|
|
#if 0 |
|
{ |
|
char gooby[256]; |
|
stcpy (gooby, varnam); |
|
stcnv_m2c (gooby); |
|
printf ("name = '%s'\r\n", gooby); |
|
} |
|
#endif |
|
|
if (ch == '(') { /* it's an array */ |
if (ch == '(') { /* it's an array */ |
|
|
Line 345 scan_name:
|
Line 378 scan_name:
|
merr_raise (INVEXPR); |
merr_raise (INVEXPR); |
return; |
return; |
} |
} |
|
|
varnam[i++] = ch; |
if ((i + 1) <= max_namlen) { |
|
varnam[i++] = ch; |
|
} |
|
else { |
|
if ((rtn_dialect () == D_M77) || |
|
(rtn_dialect () == D_M84) || |
|
(rtn_dialect () == D_M90) || |
|
(rtn_dialect () == D_M95)) { |
|
/* silently truncate... yeah, the standard is stupid af */ |
|
continue; |
|
} |
|
else { |
|
merr_raise (M56); |
|
return; |
|
} |
|
} |
|
|
lastch = ch; |
lastch = ch; |
} |
} |
Line 362 scan_name:
|
Line 410 scan_name:
|
else { /* local variable name */ |
else { /* local variable name */ |
|
|
while (isalnum (ch = *++codptr)) { |
while (isalnum (ch = *++codptr)) { |
varnam[i++] = ch; |
|
|
if ((i + 1) <= max_namlen) { |
|
varnam[i++] = ch; |
|
} |
|
else { |
|
if ((rtn_dialect () == D_M77) || |
|
(rtn_dialect () == D_M84) || |
|
(rtn_dialect () == D_M90) || |
|
(rtn_dialect () == D_M95)) { |
|
/* silently truncate... yeah, the standard is stupid af */ |
|
continue; |
|
} |
|
else { |
|
merr_raise (M56); |
|
return; |
|
} |
|
} |
|
|
} |
} |
|
|
varnam[i] = EOL; |
varnam[i] = EOL; |
Line 502 var1:
|
Line 567 var1:
|
|
|
case 'd': /* $DATA */ |
case 'd': /* $DATA */ |
|
|
ch = dat; |
ch = fra_dat; |
|
|
glv_fcn: |
glv_fcn: |
|
|
Line 1616 uparrow:
|
Line 1681 uparrow:
|
|
|
case 'c': /* $CHARACTER */ |
case 'c': /* $CHARACTER */ |
|
|
{ |
{ |
|
char chrtmp[256]; |
|
long pnum; |
short l, l1, m, n; |
short l, l1, m, n; |
|
|
l1 = f; |
l1 = f; |
Line 1627 uparrow:
|
Line 1694 uparrow:
|
n = 1; |
n = 1; |
l = 0; |
l = 0; |
|
|
|
stcpy (chrtmp, a); |
|
stcnv_m2c (chrtmp); |
|
pnum = atol (chrtmp); |
|
|
|
if (pnum > 127) { |
|
merr_raise (MXNUM); |
|
return; |
|
} |
|
|
for (;;) { |
for (;;) { |
|
|
if ((ch = a[i++]) == EOL) { |
if ((ch = a[i++]) == EOL) { |
Line 2235 f20:
|
Line 2311 f20:
|
stcnv_c2m (qryarg_ext); |
stcnv_c2m (qryarg_ext); |
|
|
/* put the $QUERY argument into the local variable %INT.REVQ */ |
/* put the $QUERY argument into the local variable %INT.REVQ */ |
symtab (set_sym, "%INT.REVQ\201\201", qryarg_ext); |
symtab (set_sym, "%INTREVQ\201\201", qryarg_ext); |
|
|
/* set up for calling into polyfill wrapper */ |
/* set up for calling into polyfill wrapper */ |
code[0] = '\201'; |
code[0] = '\201'; |