]> code.delx.au - gnu-emacs/blobdiff - src/tparam.c
(MAC_OBJ): Add macselect.o.
[gnu-emacs] / src / tparam.c
index 5a9809aab47f7f239de5c54c9b3f9e7d979d5059..ea20869216143b8b507033a13764245e0509ba0c 100644 (file)
@@ -107,6 +107,9 @@ tparam (string, outstring, len, arg0, arg1, arg2, arg3)
   return tparam1 (string, outstring, len, NULL, NULL, arg);
 }
 
+/* These are already defined in the System framework in Mac OS X and
+   cause prebinding to fail.  */
+#ifndef MAC_OSX
 char *BC;
 char *UP;
 
@@ -124,6 +127,7 @@ tgoto (cm, hpos, vpos)
   args[1] = hpos;
   return tparam1 (cm, tgoto_buf, 50, UP, BC, args);
 }
+#endif
 
 static char *
 tparam1 (string, outstring, len, up, left, argp)
@@ -140,7 +144,9 @@ tparam1 (string, outstring, len, up, left, argp)
   int outlen = 0;
 
   register int tem;
-  int *old_argp = argp;
+  int *old_argp = argp;                 /* can move */
+  int *fixed_argp = argp;               /* never moves */
+  int explicit_param_p = 0;             /* set by %p */
   int doleft = 0;
   int doup = 0;
 
@@ -165,7 +171,7 @@ tparam1 (string, outstring, len, up, left, argp)
              outlen *= 2;
              new = (char *) xrealloc (outstring, outlen);
            }
-         
+
          op = new + offset;
          outend = new + outlen;
          outstring = new;
@@ -176,7 +182,10 @@ tparam1 (string, outstring, len, up, left, argp)
       if (c == '%')
        {
          c = *p++;
-         tem = *argp;
+         if (explicit_param_p)
+           explicit_param_p = 0;
+         else
+           tem = *argp;
          switch (c)
            {
            case 'd':           /* %d means output in decimal.  */
@@ -199,7 +208,10 @@ tparam1 (string, outstring, len, up, left, argp)
              *op++ = tem % 10 + '0';
              argp++;
              break;
-
+            case 'p':           /* %pN means use param N for next subst.  */
+             tem = fixed_argp[(*p++) - '1'];
+             explicit_param_p = 1;
+             break;
            case 'C':
              /* For c-100: print quotient of value by 96, if nonzero,
                 then do like %+.  */
@@ -330,3 +342,6 @@ main (argc, argv)
 }
 
 #endif /* DEBUG */
+
+/* arch-tag: 83f7b5ac-a808-4f75-b87a-123de009b402
+   (do not change this comment) */