version 1.6, 2025/03/22 21:44:32
|
version 1.11, 2025/04/02 03:02:42
|
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/04/02 03:02:42 snw |
|
* Stop requiring users to pass -e to fmadm when -u or -g are passed |
|
* |
|
* Revision 1.10 2025/03/27 03:27:35 snw |
|
* Install init scripts to share/freem/examples/init and fix regression in method dispatch |
|
* |
|
* Revision 1.9 2025/03/24 04:13:12 snw |
|
* Replace action macro dat with fra_dat to avoid symbol conflict on OS/2 |
|
* |
|
* Revision 1.8 2025/03/24 04:05:36 snw |
|
* Replace crlf with frm_crlf to avoid symbol conflict with readline on OS/2 |
|
* |
|
* Revision 1.7 2025/03/22 22:52:24 snw |
|
* Add STRLEN_GBL macro to manage global string length |
|
* |
* Revision 1.6 2025/03/22 21:44:32 snw |
* Revision 1.6 2025/03/22 21:44:32 snw |
* Make the startup messages fewer and add environment name to direct-mode prompt |
* Make the startup messages fewer and add environment name to direct-mode prompt |
* |
* |
Line 1074 set:
|
Line 1089 set:
|
goto err; |
goto err; |
} |
} |
|
|
expr (STRING); |
expr (STRING); |
|
|
if (merr () > OK) goto err; |
if (merr () > OK) goto err; |
|
|
stcpy (tmp2, argptr); |
stcpy (tmp2, argptr); |
Line 3751 off3:
|
Line 3766 off3:
|
break; |
break; |
|
|
case KILL: |
case KILL: |
|
|
/* argumentless: KILL all local variables */ |
/* argumentless: KILL all local variables */ |
if (((ch = *codptr) == SP) || ch == EOL) { |
if (((ch = *codptr) == SP) || ch == EOL) { |
symtab (kill_all, "", ""); |
symtab (kill_all, "", ""); |
Line 3785 off3:
|
Line 3800 off3:
|
if (destructor_ct) { |
if (destructor_ct) { |
|
|
for (cd = 0; cd < destructor_ct; cd++) { |
for (cd = 0; cd < destructor_ct; cd++) { |
strcat (destc, destructors[cd]); |
if (strlen (destructors[cd]) > 0) { |
strcat (destc, ","); |
strcat (destc, destructors[cd]); |
|
strcat (destc, ","); |
|
} |
} |
} |
|
|
destructor_ct = 0; |
destructor_ct = 0; |
Line 3934 off3:
|
Line 3951 off3:
|
|
|
stcpy (objvar, vn); |
stcpy (objvar, vn); |
|
|
symtab (dat, objvar, datres); |
symtab (fra_dat, objvar, datres); |
dat_res = atoi (datres); |
dat_res = atoi (datres); |
|
|
if (dat_res > 0) { |
if (dat_res > 0) { |
Line 4318 use0: /* entry point for proces
|
Line 4335 use0: /* entry point for proces
|
break; |
break; |
|
|
case 2: |
case 2: |
crlf[io] = tvexpr (argptr); |
frm_crlf[io] = tvexpr (argptr); |
break; |
break; |
|
|
case 3: |
case 3: |
Line 4420 use_socket:
|
Line 4437 use_socket:
|
|
|
/* need to evaluate the following 6 lines carefully - smw 2023-10-15 */ |
/* need to evaluate the following 6 lines carefully - smw 2023-10-15 */ |
if (k != HOME) { |
if (k != HOME) { |
crlf[k] = FALSE; |
frm_crlf[k] = FALSE; |
fm_nodelay[k] = FALSE; |
fm_nodelay[k] = FALSE; |
xpos[k] = 0; |
xpos[k] = 0; |
ypos[k] = 0; |
ypos[k] = 0; |
Line 5536 zgo:
|
Line 5553 zgo:
|
|
|
for (; beg < end; beg += UNSIGN (*beg) + 2) { |
for (; beg < end; beg += UNSIGN (*beg) + 2) { |
|
|
if (crlf[io]) { |
if (frm_crlf[io]) { |
write_m ("\012\201"); |
write_m ("\012\201"); |
} |
} |
else { |
else { |
Line 5552 zgo:
|
Line 5569 zgo:
|
rouins = beg; |
rouins = beg; |
} |
} |
|
|
if (crlf[io]) { |
if (frm_crlf[io]) { |
write_m ("\012\201"); |
write_m ("\012\201"); |
} |
} |
else { |
else { |
Line 5821 zwritep:
|
Line 5838 zwritep:
|
} |
} |
|
|
if (varnam[0] != '^') { |
if (varnam[0] != '^') { |
symtab (dat, varnam, tmp2); |
symtab (fra_dat, varnam, tmp2); |
zwmode = 'L'; |
zwmode = 'L'; |
} |
} |
else { |
else { |
if (varnam[1] == '$') { |
if (varnam[1] == '$') { |
ssvn (dat, varnam, tmp2); |
ssvn (fra_dat, varnam, tmp2); |
zwmode = '$'; |
zwmode = '$'; |
} |
} |
else { |
else { |
global (dat, varnam, tmp2); |
global (fra_dat, varnam, tmp2); |
zwmode = '^'; |
zwmode = '^'; |
} |
} |
} |
} |
Line 5941 zwritep:
|
Line 5958 zwritep:
|
switch (zwmode) { |
switch (zwmode) { |
|
|
case 'L': |
case 'L': |
symtab (dat, tmp, tmp3); |
symtab (fra_dat, tmp, tmp3); |
symtab (get_sym, tmp, &w_tmp[1]); |
symtab (get_sym, tmp, &w_tmp[1]); |
|
|
break; |
break; |
|
|
|
|
case '$': |
case '$': |
ssvn (dat, tmp, tmp3); |
ssvn (fra_dat, tmp, tmp3); |
ssvn (get_sym, tmp, &w_tmp[1]); |
ssvn (get_sym, tmp, &w_tmp[1]); |
|
|
break; |
break; |
|
|
|
|
case '^': |
case '^': |
global (dat, tmp, tmp3); |
global (fra_dat, tmp, tmp3); |
global (get_sym, tmp, &w_tmp[1]); |
global (get_sym, tmp, &w_tmp[1]); |
|
|
break; |
break; |
Line 6030 zwritep:
|
Line 6047 zwritep:
|
break; |
break; |
|
|
|
|
case ZALLOCATE: |
/* user defined Z-COMMAND */ |
|
|
/* argumentless is not permitted */ |
|
if (*codptr == SP || *codptr == EOL) { |
|
merr_raise (ARGLIST); |
|
break; |
|
} |
|
|
|
expr (NAME); |
|
|
|
if (merr () > OK) goto err; |
|
|
|
tmp[0] = SP; |
|
stcpy (&tmp[1], varnam); |
|
stcat (tmp, "\001\201"); |
|
|
|
frm_timeout = (-1L); /* no timeout */ |
|
|
|
if (*++codptr == ':') { |
|
codptr++; |
|
|
|
expr (STRING); |
|
|
|
frm_timeout = intexpr (argptr); |
|
|
|
if (merr () > OK) goto err; |
|
if (frm_timeout < 0L) frm_timeout = 0L; |
|
} |
|
|
|
lock (tmp, frm_timeout, ZALLOCATE); |
|
break; |
|
|
|
|
|
case ZDEALLOCATE: |
|
|
|
tmp[0] = SP; |
|
|
|
if (*codptr == SP || *codptr == EOL) { |
|
tmp[1] = EOL; |
|
} |
|
else { |
|
expr (NAME); |
|
|
|
if (merr () > OK) goto err; |
|
|
|
stcpy (&tmp[1], varnam); |
|
|
|
codptr++; |
|
} |
|
|
|
lock (tmp, -1L, ZDEALLOCATE); /* -1: no timeout */ |
|
break; |
|
|
|
/* user defined Z-COMMAND */ |
|
|
|
|
|
case PRIVATE: |
case PRIVATE: |
|
|
private: /* for in-MUMPS defined commands */ |
private: /* for in-MUMPS defined commands */ |