]> diplodocus.org Git - nmh/blobdiff - sbr/fmt_scan.c
Rearranged the variable settings at the top of test/common.sh.in.
[nmh] / sbr / fmt_scan.c
index 692d564c356155ea5d0b3dbf67c55f210c2a86ba..97a4a05a83a78c370eb7b0925f1a0cc0fb6294a3 100644 (file)
@@ -93,13 +93,18 @@ cpnumber(charstring_t dest, int num, unsigned int wid, char fill, size_t max) {
            charstring_push_back (rev, '?');
        } else if (num < 0  &&  wid > 0) {
            /* Shouldn't need the wid > 0 check, that's why the condition
-               at the top checks wid < max-1 when num < 0. */
-           charstring_push_back (rev, '-');
+              at the top checks wid < max-1 when num < 0. */
            --wid;
+           if (fill == ' ') {
+               charstring_push_back (rev, '-');
+           }
        }
        while (wid-- > 0  &&  fill != 0) {
            charstring_push_back (rev, fill);
        }
+       if (num < 0  &&  fill == '0') {
+           charstring_push_back (rev, '-');
+       }
 
        {
            /* Output the string in reverse. */
@@ -1077,10 +1082,10 @@ fmt_scan (struct format *format, charstring_t scanlp, int width, int *dat,
                comp->c_mn = mn;
                if (ismymbox(mn)) {
                    comp->c_flags |= CF_TRUE;
-                   /* Set str for use with FT_GETMYMBOX and
-                      FT_GETMYADDR.  With FT_GETMYADDR, it will be
-                      run through FT_LS_ADDR, which will strip off
-                      any pers name. */
+                   /* Set str for use with FT_GETMYMBOX.  With
+                      FT_GETMYADDR, comp->c_mn will be run through
+                      FT_LS_ADDR, which will strip off any pers
+                      name. */
                    str = mn->m_text;
                } else {
                    comp->c_flags &= ~CF_TRUE;
@@ -1088,8 +1093,17 @@ fmt_scan (struct format *format, charstring_t scanlp, int width, int *dat,
                while ((sp = getname(sp)))
                    if ((comp->c_flags & CF_TRUE) == 0 &&
                        (mn = getm (sp, NULL, 0, NULL, 0)))
-                       if (ismymbox(mn))
+                       if (ismymbox(mn)) {
                            comp->c_flags |= CF_TRUE;
+                           /* Set str and comp->c_text for use with
+                              FT_GETMYMBOX.  With FT_GETMYADDR,
+                              comp->c_mn will be run through
+                              FT_LS_ADDR, which will strip off any
+                              pers name. */
+                           free (comp->c_text);
+                           comp->c_text = str = strdup (mn->m_text);
+                           comp->c_mn = mn;
+                       }
                comp->c_flags |= CF_PARSED;
            } else {
                while (getname(""))             /* XXX */