Diff for /freem/src/routine.c between versions 1.5 and 1.8

version 1.5, 2025/04/09 19:52:02 version 1.8, 2025/04/30 17:19:16
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.8  2025/04/30 17:19:16  snw
    *   Improve backtraces in debugger
    *
    *   Revision 1.7  2025/04/30 14:41:03  snw
    *   Further debugger work
    *
    *   Revision 1.6  2025/04/13 04:22:43  snw
    *   Fix snprintf calls
    *
  *   Revision 1.5  2025/04/09 19:52:02  snw   *   Revision 1.5  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 259  short rtn_get_path(char *rou, char *buf) Line 268  short rtn_get_path(char *rou, char *buf)
         stcnv_m2c (pth);          stcnv_m2c (pth);
     }      }
           
     snprintf (buf, PATHLEN, "%s/%s.m", pth, rou);      snprintf (buf, PATHLEN - 1, "%s/%s.m", pth, rou);
           
     if ((fp = fopen (buf, "r")) != NULL) {      if ((fp = fopen (buf, "r")) != NULL) {
         (void) fclose (fp);          (void) fclose (fp);
Line 1141  void lineref (char **adrr) Line 1150  void lineref (char **adrr)
           
     return;      return;
 }                                       /* end of lineref() */  }                                       /* end of lineref() */
   
   char *m_text(char *lref, char *buf)
   {
       char *old_codptr;
       char old_code[STRLEN];
       
       old_codptr = codptr;
       stcpy (old_code, code);
       
       sprintf (code, "$TEXT(%s)\201", lref);
       codptr = code;
       
       expr (STRING);
   
       if (merr () != OK) {
           stcpy (code, old_code);
           codptr = old_codptr;
           return (char *) NULL;
       }
   
       stcpy (buf, argptr);
       stcpy (code, old_code);
       codptr = old_codptr;
   
       return buf;
   }
       
   
   #if 0
   char *routine_get_line(char *lref, char *buf)
   {
       char tmp[STRLEN];
       char a[STRLEN];
       long l1, rouoldc;
       short reload = FALSE;
       int f = 3;
       register int i;
       register int j;
       
       i = 0;
                           
       if (f > 1) {
           stcpy (tmp, lref[arg + 1]);
           i = intexpr (tmp);
       }
   
       if (a[0] == EOL) {
   
           if (i < 0) {
               return (char *) NULL;
           }
   
           /* $T(+0) returns routine name */
           if (i == 0) {
   
               if (f != 3) {
                   stcpy (a, rou_name);
               } 
               else {
                   stcpy (a, argstck[arg + 2]);
               }                                
   
               goto nxt_operator;
   
           }
   
       }
   
       if (f == 3) {
   
           reload = TRUE;  /* load routine; */
           f = mcmnd;
           mcmnd = 'd';    /* make load use standard-path */
                               
           stcpy (tmp, argstck[arg + 2]);
                               
           rouoldc = roucur - rouptr;
                               
           zload (tmp);
                               
           mcmnd = f;
                               
           if (merr () > OK) {
   
               zload (rou_name);
                                   
               if (merr () == NOPGM) {
                   ierr -= NOPGM; /* smw 15 nov 2023 TODO HUH?? */
                   *a = EOL;
   
                   goto nxt_operator;
               }
   
               return;
   
           }
   
       }
   
       j = 0;
       f = 1;
                           
       if (a[0] != EOL) {  /* 1st arg == label */
   
           for (;;) {
                           
               if (j >= (rouend - rouptr)) {
                   a[0] = EOL;
                   goto t_end;
               }
   
               l1 = j;
               f = 0;
                                   
               while (*(rouptr + (++l1)) == a[f++]);
                                   
               if (a[--f] == EOL && (*(rouptr + l1) == TAB || *(rouptr + l1) == SP || *(rouptr + l1) == '(')) break;
   
               j += (UNSIGN (*(rouptr + j)) + 2);  /* skip line */
   
           }
   
           f = 0;
   
       }
   
       if (i > 0) {
   
           while (f < i) {
   
               if ((j = j + (UNSIGN (*(rouptr + j))) + 2) >= (rouend - rouptr)) {
                   a[0] = EOL;
                   goto t_end;
               }
                                   
               f++;
   
           }
   
       }
   
       if (i < 0) {
   
           j--;
                               
           while (f != i) {
   
               while (*(rouptr + (--j)) != EOL && j >= 0);
                                   
               if (--f != i && j < 1) {
                   a[0] = EOL;
                   goto t_end;
               }
   
           }
   
           j++;
   
       }
   
       f = (-1);
       j++;
   
       while ((a[++f] = (*(rouptr + (j++)))) != EOL) {
           if (a[f] == TAB || a[f] == SP)
               break;
       }
   
       if (j >= (rouend - rouptr - 1)) {
           a[0] = EOL;
       } 
       else {
   
           a[f] = SP;
                               
           while ((*(rouptr + j)) == TAB || (*(rouptr + j)) == SP) {
               j++;
               a[++f] = SP;
           }
   
           stcpy (&a[++f], rouptr + j);
   
       }
   
   t_end:
       if (reload) {
           zload (rou_name);
           roucur = rouptr + rouoldc;
       }           /* reload routine; */
   
   
   }
   #endif

Removed from v.1.5  
changed lines
  Added in v.1.8


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