Diff for /freem/src/expr.c between versions 1.7 and 1.11

version 1.7, 2025/03/22 03:39:23 version 1.11, 2025/03/30 01:36:58
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/03/30 01:36:58  snw
    *   Make it easier to bring back fma_gedit, fix double-free in global handler, limit $CHAR to 7-bit ASCII
    *
    *   Revision 1.10  2025/03/24 04:13:11  snw
    *   Replace action macro dat with fra_dat to avoid symbol conflict on OS/2
    *
    *   Revision 1.9  2025/03/24 01:32:22  snw
    *   Guard declaration of time function in expr.c for portability
    *
    *   Revision 1.8  2025/03/22 04:47:18  snw
    *   Silently truncate long names in STRING exprs when  evaluates to an obsolete MDC standard
    *
  *   Revision 1.7  2025/03/22 03:39:23  snw   *   Revision 1.7  2025/03/22 03:39:23  snw
  *   Fix reverse query polyfill call-in from C side and make NAME exprs silently truncate long names in obsolete MDC dialects   *   Fix reverse query polyfill call-in from C side and make NAME exprs silently truncate long names in obsolete MDC dialects
  *   *
Line 135 Line 147
 #define GET               'Y'  #define GET               'Y'
 #define GETX              ':'  #define GETX              ':'
   
 #if !defined(__OpenBSD__) && !defined(_AIX) && !defined(__osf__) && !defined(MSDOS) && !defined(__vax__)  #if !defined(__OpenBSD__) && !defined(_AIX) && !defined(__osf__) && !defined(MSDOS) && !defined(__vax__) && !defined(__OS2__)
 long    time ();  long    time ();
 #endif  #endif
 void cond_round (char *a, int digits);  void cond_round (char *a, int digits);
Line 366  scan_name: Line 378  scan_name:
                     merr_raise (INVEXPR);                      merr_raise (INVEXPR);
                     return;                      return;
                 }                  }
                   
                 varnam[i++] = ch;                  if ((i + 1) <= max_namlen) {
                       varnam[i++] = ch;
                   }
                   else {
                       if ((rtn_dialect () == D_M77) ||
                           (rtn_dialect () == D_M84) ||
                           (rtn_dialect () == D_M90) ||
                           (rtn_dialect () == D_M95)) {
                           /* silently truncate... yeah, the standard is stupid af */
                           continue;
                       }
                       else {
                           merr_raise (M56);
                           return;
                       }
                   }                
   
                 lastch = ch;                  lastch = ch;
             }              }
Line 383  scan_name: Line 410  scan_name:
         else {          /* local variable name */          else {          /* local variable name */
   
             while (isalnum (ch = *++codptr)) {              while (isalnum (ch = *++codptr)) {
                 varnam[i++] = ch;                  
                   if ((i + 1) <= max_namlen) {
                       varnam[i++] = ch;
                   }
                   else {
                       if ((rtn_dialect () == D_M77) ||
                           (rtn_dialect () == D_M84) ||
                           (rtn_dialect () == D_M90) ||
                           (rtn_dialect () == D_M95)) {
                           /* silently truncate... yeah, the standard is stupid af */
                           continue;
                       }
                       else {
                           merr_raise (M56);
                           return;
                       }
                   }                
                   
             }              }
                   
             varnam[i] = EOL;              varnam[i] = EOL;
Line 523  var1: Line 567  var1:
   
                 case 'd':           /* $DATA */                  case 'd':           /* $DATA */
                                           
                     ch = dat;                      ch = fra_dat;
   
 glv_fcn:  glv_fcn:
   
Line 1637  uparrow: Line 1681  uparrow:
   
                 case 'c':           /* $CHARACTER */                  case 'c':           /* $CHARACTER */
   
                     {                      {                        
                           char chrtmp[256];
                           long pnum;
                         short l, l1, m, n;                          short l, l1, m, n;
   
                         l1 = f;                          l1 = f;
Line 1648  uparrow: Line 1694  uparrow:
                         n = 1;                          n = 1;
                         l = 0;                          l = 0;
   
                           stcpy (chrtmp, a);
                           stcnv_m2c (chrtmp);
                           pnum = atol (chrtmp);
   
                           if (pnum > 127) {
                               merr_raise (MXNUM);
                               return;
                           }
                           
                         for (;;) {                          for (;;) {
                                                           
                             if ((ch = a[i++]) == EOL) {                              if ((ch = a[i++]) == EOL) {

Removed from v.1.7  
changed lines
  Added in v.1.11


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