Diff for /freem/src/xecline.c between versions 1.16 and 1.17

version 1.16, 2025/04/28 14:52:54 version 1.17, 2025/04/28 19:38:55
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.17  2025/04/28 19:38:55  snw
    *   Add trace mode
    *
  *   Revision 1.16  2025/04/28 14:52:54  snw   *   Revision 1.16  2025/04/28 14:52:54  snw
  *   Temporarily revert global handler refactor and fix reference regression in xecline   *   Temporarily revert global handler refactor and fix reference regression in xecline
  *   *
Line 172  int xecline(int typ) Line 175  int xecline(int typ)
     unsigned long jobtime;      unsigned long jobtime;
     char label[256], routine[256];      char label[256], routine[256];
   
       char tracestr[512];
       
     char *vn;      char *vn;
     char *an;      char *an;
     char *tmp;      char *tmp;
Line 854  again: Line 859  again:
         }          }
     }      }
   
       if (trace_mode) tracestr[0] = '\0';
   
     switch (mcmnd) {      switch (mcmnd) {
   
         case MAP:          case MAP:
Line 2367  s_end: Line 2374  s_end:
                           
         case QUIT:          case QUIT:
   
               if (trace_mode) {
                   fprintf (stderr, ">> TRACE:  $STACK = %d QUIT CMD = %c\r\n", nstx, nestc[nstx]);
               }
               
             if (tp_level > 0) {              if (tp_level > 0) {
                 merr_raise (M42);                  merr_raise (M42);
                 goto err;                  goto err;
Line 2396  s_end: Line 2407  s_end:
             if (nestc[nstx] == '$') {           /* extrinsic function/variable */              if (nestc[nstx] == '$') {           /* extrinsic function/variable */
   
   
                   if (trace_mode) {
                       fprintf (stderr, ">> TRACE:  QUIT FROM EXTRINSIC\r\n");
                   }
                   
 #ifdef DEBUG_NEWSTACK  #ifdef DEBUG_NEWSTACK
                 printf ("EXTRINSIC\r\n");                  printf ("EXTRINSIC\r\n");
 #endif  #endif
Line 2425  s_end: Line 2440  s_end:
                 else {                                      else {                    
                                           
                     expr (STRING);                      expr (STRING);
   
                       if (trace_mode) {
                           fprintf (stderr, ">> TRACE:  QUIT FROM SUBROUTINE\r\n");
                       }
                                           
                     if (ierr != OK - CTRLB && merr () != OK && merr () != INRPT) {                      if (ierr != OK - CTRLB && merr () != OK && merr () != INRPT) {
   
Line 3061  do_xecute: Line 3080  do_xecute:
   
 do_goto:  do_goto:
   
               if (trace_mode) {
                   char rn[256];
                   stcpy (rn, rou_name);
                   stcnv_m2c (rn);
                   
                   switch (mcmnd) {
                       case DO:
                           snprintf (tracestr, sizeof (tracestr) - 1, "rtn = %s $stack = %d do ", rn, nstx);
                           break;
                       case GOTO:
                           snprintf (tracestr, sizeof (tracestr) - 1, "rtn = %s $stack = %d goto ", rn, nstx);
                           break;
                   }
               }
               
             offset = 0;              offset = 0;
             label[0] = routine[0] = EOL;              label[0] = routine[0] = EOL;
             dofram0 = 0;              dofram0 = 0;
Line 3095  do_goto: Line 3129  do_goto:
   
                 stcpy (label, varnam);                  stcpy (label, varnam);
   
                   if (trace_mode) {
                       char ttt[256];
                       stcpy (ttt, label);
                       stcnv_m2c (ttt);
   
                       strcat (tracestr, ttt);
                   }
                   
                 ch = *++codptr;                  ch = *++codptr;
             }              }
   
Line 3110  do_goto: Line 3152  do_goto:
                                   
                 /* unless argument is numeric, expr returns wrong codptr */                  /* unless argument is numeric, expr returns wrong codptr */
                 if ((ch = *codptr) != SP && (ch != EOL) && (ch != ',') && (ch != '^')) ch = *++codptr;                  if ((ch = *codptr) != SP && (ch != EOL) && (ch != ',') && (ch != '^')) ch = *++codptr;
               
                   if (trace_mode) {
                       char ttt[256];
                       snprintf (ttt, 255, "+%d", offset);
                       strcat (tracestr, ttt);
                   }
             }              }
   
             if (ch == '^') {           /* parse routine */              if (ch == '^') {           /* parse routine */
Line 3120  do_goto: Line 3167  do_goto:
                 if (merr () > OK) goto err;                  if (merr () > OK) goto err;
                                   
                 stcpy (routine, varnam);                  stcpy (routine, varnam);
   
                   if (trace_mode) {
                       char ttt[256];
                       char ttx[256];
                       
                       stcpy (ttt, routine);
                       stcnv_m2c (ttt);
                       snprintf (ttx, 255, "^%s", ttt);
                       strcat (tracestr, ttx);
                   }
                                   
                 dosave[0] = EOL;                  dosave[0] = EOL;
                 ch = *++codptr;                  ch = *++codptr;
                 loadsw = TRUE;                  loadsw = TRUE;
             }              }
   
               if (trace_mode) {
                   fprintf (stderr, ">> TRACE:   %s\r\n", tracestr);
               }
               
             if (ch == '(' && mcmnd == DO) {           /* parse parameter */              if (ch == '(' && mcmnd == DO) {           /* parse parameter */
   
                 if (offset) {                  if (offset) {

Removed from v.1.16  
changed lines
  Added in v.1.17


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>