--- freem/src/xecline.c 2025/03/27 03:27:35 1.10 +++ freem/src/xecline.c 2025/04/15 16:49:36 1.15 @@ -1,5 +1,5 @@ /* - * $Id: xecline.c,v 1.10 2025/03/27 03:27:35 snw Exp $ + * $Id: xecline.c,v 1.15 2025/04/15 16:49:36 snw Exp $ * freem interpreter proper * * @@ -24,6 +24,21 @@ * along with FreeM. If not, see . * * $Log: xecline.c,v $ + * Revision 1.15 2025/04/15 16:49:36 snw + * Make use of logprintf throughout codebase + * + * Revision 1.14 2025/04/13 04:22:43 snw + * Fix snprintf calls + * + * Revision 1.13 2025/04/10 01:24:39 snw + * Remove C++ style comments + * + * Revision 1.12 2025/04/09 19:52:02 snw + * Eliminate as many warnings as possible while building with -Wall + * + * 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 * @@ -522,14 +537,14 @@ next0: else if (tmp2[0] == '<') { /* call write output to %-array */ FILE *pipdes; - char key[STRLEN + 1 /*was 256 */ ]; - char data[STRLEN + 1 /*was 256 */ ]; + char key[STRLEN]; + char data[STRLEN]; char data_kill[256]; data_kill[255] = EOL; - for (i = 0; i < STRLEN + 1; i++) vn[i] = EOL; + for (i = 0; i < STRLEN - 1; i++) vn[i] = EOL; - snprintf (key, 255, "^$JOB\202%d\202PIPE_GLVN\201", pid); + snprintf (key, STRLEN - 1, "^$JOB\202%d\202PIPE_GLVN\201", pid); ssvn (get_sym, key, vn); if (vn[0] == '^') { @@ -547,7 +562,7 @@ next0: symtab (kill_sym, vn, data); } - snprintf (key, 255, "^$JOB\202%d\202PIPE_GLVN\201", pid); + snprintf (key, STRLEN - 1, "^$JOB\202%d\202PIPE_GLVN\201", pid); ssvn (get_sym, key, vn); data[0] = '0'; @@ -576,7 +591,7 @@ next0: int glvn_len = 0; while (fgets (data, STRLEN, pipdes)) { - snprintf (key, 255, "^$JOB\202%d\202PIPE_GLVN\201", pid); + snprintf (key, STRLEN - 1, "^$JOB\202%d\202PIPE_GLVN\201", pid); ssvn (get_sym, key, vn); glvn_len = stlen (vn); @@ -637,7 +652,7 @@ next0: for (i = 0; i < STRLEN + 1; i++) vn[i] = EOL; - snprintf (key, 255, "^$JOB\202%d\202PIPE_GLVN\201", pid); + snprintf (key, STRLEN - 1, "^$JOB\202%d\202PIPE_GLVN\201", pid); ssvn (get_sym, key, vn); if (vn[0] == '^') { @@ -666,7 +681,7 @@ next0: int glvn_len = 0; for (i = 1; i <= k; i++) { - snprintf (key, 255, "^$JOB\202%d\202PIPE_GLVN\201", pid); + snprintf (key, STRLEN - 1, "^$JOB\202%d\202PIPE_GLVN\201", pid); ssvn (get_sym, key, vn); glvn_len = stlen (vn); @@ -901,8 +916,7 @@ set0: if (isalpha (vn[0]) && *(codptr + 1) == ':') { char sc_string[255]; - register int sci; - + codptr += 2; expr (NAME); @@ -938,8 +952,7 @@ set0: if (*++codptr != '=') { -/* SET A++ or SET A-- equivalent to SET A+=1 SET A-=1 currently disabled */ -//#ifdef NEVER + /* unary ++/-- */ if ((ch == '+' || ch == '-') && ch == *codptr) { codptr++; setop = ch; @@ -948,7 +961,6 @@ set0: goto set2; } -//#endif /* NEVER */ merr_raise (ASSIGNER); break; @@ -1034,7 +1046,9 @@ set2: if (new_and_set == TRUE) new_and_set = FALSE; if (new_object == TRUE) new_object = FALSE; +/* set1: +*/ if (*codptr != ',') break; if (*++codptr == '@') goto again; @@ -1598,7 +1612,7 @@ set10: } if (stcat (tmp2, &tmp3[arg4]) == 0) { - merr_raise (M56); //JPW + merr_raise (M56); /* snw */ goto err; } @@ -2377,7 +2391,6 @@ s_end: #ifdef DEBUG_NEWSTACK printf ("EXTRINSIC\r\n"); #endif - //printf (" extr_types[%d] = '%d'\r\n", nstx, extr_types[nstx]); if (*codptr == EOL || *codptr == SP) { #ifdef DEBUG_NEWSTACK @@ -3982,6 +3995,7 @@ off3: if (merr () > OK) goto err; + /* TODO: check this snprintf for proper sizing */ snprintf (&tmp3[1], 255, "%s\201", &constructor[1]); goto private; @@ -4002,8 +4016,9 @@ off3: goto set2; } +/* post_new: - +*/ ch = nstx; while (nestc[ch] == FOR) ch--; /* FOR does not define a NEW level */ @@ -5092,15 +5107,11 @@ open_socket: #endif if (nestc[nstx] == BREAK) { -// printf ("nestc[nstx] was BREAK\r\n"); if (repQUIT) continue; merr_raise (OK - CTRLB); goto zgo; /*cont. single step */ } -// else { -// printf ("nestc[nstx] was _not_ BREAK\r\n"); -// } if (nestc[nstx] == FOR) { @@ -5676,9 +5687,6 @@ zgo: } case ZWRITE: - - -zwrite: { short k; char w_tmp[512]; @@ -5802,7 +5810,6 @@ zwritep: expr (NAME); - //if (varnam[0] == '^') merr_raise (GLOBER); if (merr () > OK) goto err; codptr++; @@ -6044,62 +6051,7 @@ zwritep: break; - case ZALLOCATE: - - /* 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 */ - - + /* user defined Z-COMMAND */ case PRIVATE: private: /* for in-MUMPS defined commands */ @@ -6638,15 +6590,15 @@ evthandler: /* for event hand /* run the next iteration of GTK's event loop */ - //TODO: replace with libXt event loop - //gtk_main_iteration_do (TRUE); + /* TODO: replace with libXt event loop */ + /* gtk_main_iteration_do (TRUE); */ /* dequeue any events */ evt_count = mwapi_dequeue_events (syn_handlers); if (evt_count) { /* write them out */ - //printf ("event handlers = '%s'\r\n", syn_handlers); + /* printf ("event handlers = '%s'\r\n", syn_handlers); */ syn_event_entry_nstx = nstx; @@ -6757,7 +6709,7 @@ err: stcnv_m2c (er_buf); #if !defined(MSDOS) - m_log (LOG_ERR, er_buf); + logprintf (FM_LOG_DEBUG, "xecline: interpreter error %d [%s]", ierr, er_buf); #endif } @@ -7091,7 +7043,7 @@ restart: DSW &= ~BIT0; /* enable ECHO */ - // print here + /* print here */ { char *t_rtn; char *t_nsn = (char *) malloc (STRLEN * sizeof (char)); @@ -7222,10 +7174,10 @@ direct_mode: if (quiet_mode == FALSE) { if (tp_level == 0) { - snprintf (fmrl_prompt, 255, "\r\n%s.%s> ", shm_env, nsname); + snprintf (fmrl_prompt, sizeof (fmrl_prompt) - 1, "\r\n%s.%s> ", shm_env, nsname); } else { - snprintf (fmrl_prompt, 255, "\r\nTL%d:%s.%s> ", tp_level, shm_env, nsname); + snprintf (fmrl_prompt, sizeof (fmrl_prompt) - 1 , "\r\nTL%d:%s.%s> ", tp_level, shm_env, nsname); } } set_io (UNIX); @@ -7250,10 +7202,10 @@ direct_mode: if (fmrl_buf[0] == '?') { char kb[20]; - char db[255]; + char db[STRLEN]; - snprintf (kb, 19, "%%SYS.HLP\201"); - snprintf (db, 19, "\201"); + snprintf (kb, sizeof (kb) - 1, "%%SYS.HLP\201"); + snprintf (db, STRLEN - 1, "\201"); symtab (kill_sym, kb, db); @@ -7263,7 +7215,7 @@ direct_mode: stcpy (code, "DO ^%ZHELP\201"); if (strlen (fmrl_buf) > 1) { - snprintf (db, 254, "%s\201", &fmrl_buf[1]); + snprintf (db, STRLEN - 1, "%s\201", &fmrl_buf[1]); symtab (set_sym, kb, db); } @@ -7332,7 +7284,7 @@ direct_mode: } else if (isdigit(fmrl_buf[0]) || (fmrl_buf[0] == '(') || (fmrl_buf[0] == '-') || (fmrl_buf[0] == '\'') || (fmrl_buf[0] == '+') || (fmrl_buf[0] == '$') || (fmrl_buf[0] == '^')) { - snprintf (code, 255, "W %s", fmrl_buf); + snprintf (code, STRLEN - 1, "W %s", fmrl_buf); stcnv_c2m (code); set_io (MUMPS); @@ -7414,10 +7366,10 @@ direct_mode: char fmrl_prompt[256]; if (tp_level == 0) { - snprintf (fmrl_prompt, 256, "\r\n%s> \201", nsname); + snprintf (fmrl_prompt, sizeof (fmrl_prompt) - 1, "\r\n%s> \201", nsname); } else { - snprintf (fmrl_prompt, 256, "\r\nTL%d:%s> \201", tp_level, nsname); + snprintf (fmrl_prompt, sizeof (fmrl_prompt) - 1, "\r\nTL%d:%s> \201", tp_level, nsname); } write_m (fmrl_prompt); @@ -7429,17 +7381,12 @@ direct_mode: #endif if (merr () > OK) goto err; - - - // printf ("zbflag = %d\r\n", zbflag); if (code[0] == EOL && zbflag && nestc[nstx] == BREAK) { - //printf ("cont single step\r\n"); debug_mode = TRUE; merr_raise (OK - CTRLB); - //printf ("ierr now '%d'\r\n", ierr); goto zgo; } /* single step */ } @@ -7505,7 +7452,7 @@ void rbuf_dump(void) for (i = 0; i < NO_OF_RBUF; i++) { - sprintf (flgs, ""); + flgs[0] = '\0'; if (ages[i] == 0) { sprintf (rnam, "---------");