version 1.9, 2025/04/09 19:52:02
|
version 1.15, 2025/05/18 18:15:38
|
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.15 2025/05/18 18:15:38 snw |
|
* Add ZEDIT command for editing routines |
|
* |
|
* Revision 1.14 2025/05/14 12:22:04 snw |
|
* Further work on shared memory |
|
* |
|
* Revision 1.13 2025/04/19 21:52:20 snw |
|
* Remove extraneous symbol table debugging message |
|
* |
|
* Revision 1.12 2025/04/14 19:56:27 snw |
|
* Working towards FreeBSD fix |
|
* |
|
* Revision 1.11 2025/04/13 04:22:43 snw |
|
* Fix snprintf calls |
|
* |
|
* Revision 1.10 2025/04/10 01:24:39 snw |
|
* Remove C++ style comments |
|
* |
* Revision 1.9 2025/04/09 19:52:02 snw |
* Revision 1.9 2025/04/09 19:52:02 snw |
* Eliminate as many warnings as possible while building with -Wall |
* Eliminate as many warnings as possible while building with -Wall |
* |
* |
Line 59
|
Line 77
|
#include "merr.h" |
#include "merr.h" |
#include "consttbl.h" |
#include "consttbl.h" |
#include "shmmgr.h" |
#include "shmmgr.h" |
|
#include "log.h" |
|
|
/* Turn this on to get tons of lovely debugging messages about |
/* Turn this on to get tons of lovely debugging messages about |
symbol-table calls */ |
symbol-table calls */ |
Line 125 void symtab_init (void)
|
Line 144 void symtab_init (void)
|
shm_config->hdr->argptr = mbpartition; |
shm_config->hdr->argptr = mbpartition; |
|
|
|
|
fprintf (stderr, "symtab_init: initializing memory-backed globals\r\n"); |
logprintf (FM_LOG_INFO, "symtab_init: initializing memory-backed globals"); |
|
|
semid_symtab = semget (symtab_sk, 1, 0666 | IPC_CREAT); |
semid_symtab = semget (symtab_sk, 1, 0666 | IPC_CREAT); |
if (semid_symtab == -1) { |
if (semid_symtab == -1) { |
fprintf (stderr, "symtab_init: failed to create symbol table semaphore\r\n"); |
logprintf (FM_LOG_FATAL, "symtab_init: failed to create symbol table semaphore"); |
exit (1); |
|
} |
} |
else { |
else { |
fprintf (stderr, "symtab_init: symbol table semaphore created with semid %d\r\n", semid_symtab); |
logprintf (FM_LOG_INFO, "symtab_init: symbol table semaphore created with semid %d", semid_symtab); |
} |
} |
|
|
#if defined(__sun__) |
#if defined(__sun__) |
fprintf (stderr, "symtab_init: falling back to global-backed structured system variables\r\n"); |
logprintf (FM_LOG_WARNING, "symtab_init: falling back to global-backed structured system variables"); |
shm_config->hdr->use_mb_globals = FALSE; |
shm_config->hdr->use_mb_globals = FALSE; |
return; |
return; |
#endif |
#endif |
Line 145 void symtab_init (void)
|
Line 163 void symtab_init (void)
|
|
|
arg.val = 1; |
arg.val = 1; |
if (semctl (semid_symtab, 0, SETVAL, arg) == -1) { |
if (semctl (semid_symtab, 0, SETVAL, arg) == -1) { |
fprintf (stderr, "symtab_init: failed to initialize symbol table semaphore\r\n"); |
logprintf (FM_LOG_FATAL, "symtab_init: failed to initialize symbol table semaphore"); |
exit (1); |
|
} |
} |
else { |
else { |
fprintf (stderr, "symtab_init: symbol table semaphore initialized\r\n"); |
logprintf (FM_LOG_INFO, "symtab_init: symbol table semaphore initialized"); |
} |
} |
|
|
fprintf (stderr, "symtab_init: allocating partition for memory-backed globals\r\n"); |
logprintf (FM_LOG_INFO, "symtab_init: allocating partition for memory-backed globals"); |
|
|
mbpartition = (char *) shm_alloc ((size_t) PSIZE + 2); |
mbpartition = (char *) shm_alloc ((size_t) PSIZE + 2); |
if (mbpartition != NULL) { |
if (mbpartition != NULL) { |
shm_config->hdr->use_mb_globals = TRUE; |
shm_config->hdr->use_mb_globals = TRUE; |
|
shm_config->hdr->partition = mbpartition; |
} |
} |
else { |
else { |
fprintf (stderr, "symtab_init: falling back to global-backed structured system variables\r\n"); |
logprintf (FM_LOG_WARNING, "symtab_init: falling back to global-backed structured system variables"); |
shm_config->hdr->use_mb_globals = FALSE; |
shm_config->hdr->use_mb_globals = FALSE; |
} |
} |
|
|
shm_config->hdr->partition = mbpartition; |
|
|
|
if (symtab_get_sem ()) { |
if (symtab_get_sem ()) { |
for (i = 0; i < 128; i++) shm_config->hdr->alphptr[i] = 0L; |
for (i = 0; i < 128; i++) shm_config->hdr->alphptr[i] = 0L; |
Line 175 void symtab_init (void)
|
Line 191 void symtab_init (void)
|
|
|
semid_symtab = semget (symtab_sk, 1, 0); |
semid_symtab = semget (symtab_sk, 1, 0); |
if (semid_symtab == -1) { |
if (semid_symtab == -1) { |
fprintf (stderr, "symtab_init: could not attach to symbol table semaphore\r\n"); |
logprintf (FM_LOG_FATAL, "symtab_init: could not attach to symbol table semaphore"); |
exit (1); |
exit (1); |
} |
} |
|
|
mbpartition = shm_config->hdr->partition; |
if (shm_config->hdr->use_mb_globals == TRUE) { |
|
mbpartition = SOA(shm_config->hdr->partition); |
|
} |
|
|
symtab_release_sem (); |
symtab_release_sem (); |
} |
} |
Line 207 short symtab_get_sem(void)
|
Line 225 short symtab_get_sem(void)
|
sleep (1); |
sleep (1); |
|
|
} |
} |
fprintf (stderr, "symtab_get_sem: fail\r\n"); |
logprintf (FM_LOG_ERROR, "symtab_get_sem: fail"); |
|
|
have_symtab_sem = FALSE; |
have_symtab_sem = FALSE; |
return FALSE; |
return FALSE; |
Line 233 void symtab_shm (short action, char *key
|
Line 251 void symtab_shm (short action, char *key
|
register int i; |
register int i; |
char *old_partition = partition; |
char *old_partition = partition; |
|
|
|
/* |
|
global (action, key, data); |
|
return; |
|
*/ |
|
|
if (shm_config->hdr->use_mb_globals == FALSE) { |
if (shm_config->hdr->use_mb_globals == FALSE) { |
symtab_bltin (action, key, data); |
symtab_bltin (action, key, data); |
return; |
return; |
Line 290 void symtab_shm (short action, char *key
|
Line 313 void symtab_shm (short action, char *key
|
|
|
} |
} |
else { |
else { |
fprintf (stderr, "symtab_shm: failed to acquire symbol table sempahore\r\n"); |
logprintf (FM_LOG_FATAL, "symtab_shm: failed to acquire symbol table sempahore"); |
} |
} |
|
|
writing_mb = FALSE; |
writing_mb = FALSE; |
Line 388 void symtab_bltin (short action, char *k
|
Line 411 void symtab_bltin (short action, char *k
|
stcnv_m2c (tt_with); |
stcnv_m2c (tt_with); |
stcnv_m2c (tt_key); |
stcnv_m2c (tt_key); |
|
|
snprintf (key, 100, "%s%s\201\201", tt_with, tt_key); |
sprintf (key, "%s%s\201\201", tt_with, tt_key); |
|
|
|
|
no_with: |
no_with: |
Line 594 no_with:
|
Line 617 no_with:
|
/* OLD get_sym routine */ |
/* OLD get_sym routine */ |
if ((i = alphptr[(int) key[0]])) { |
if ((i = alphptr[(int) key[0]])) { |
|
|
// printf ("alphptr match; writing_mb = %d\r\n", writing_mb); |
/* printf ("alphptr match; writing_mb = %d\r\n", writing_mb); */ |
|
|
k = 1; |
k = 1; |
j = i + 1; /* first char always matches! */ |
j = i + 1; /* first char always matches! */ |
Line 637 no_with:
|
Line 660 no_with:
|
|
|
} while (i < PSIZE); |
} while (i < PSIZE); |
} |
} |
else { |
|
printf ("alphptr not found\r\n"); |
|
} |
|
|
|
merr_raise (M6); |
merr_raise (M6); |
data[0] = EOL; |
data[0] = EOL; |
|
|
return; |
return; |
|
|
|
|
|
|
|
|
|
|
case set_sym: /* store/create variable */ |
case set_sym: /* store/create variable */ |
|
|
|
|
Line 1847 zinvend:
|
Line 1863 zinvend:
|
*newptr++ = k1; |
*newptr++ = k1; |
*newptr++ = set_sym; |
*newptr++ = set_sym; |
|
|
//if (mcmnd != ZNEW) test = FALSE; |
/*if (mcmnd != ZNEW) test = FALSE; */ |
|
|
return; |
return; |
|
|
Line 1914 zinvend:
|
Line 1930 zinvend:
|
|
|
char esbuf[256]; |
char esbuf[256]; |
|
|
snprintf (esbuf, 255, "%d\201", estack); |
snprintf (esbuf, sizeof (esbuf) - 1, "%d\201", estack); |
|
|
j = stcpy (newptr, esbuf); |
j = stcpy (newptr, esbuf); |
|
|