X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/bf982b40ca8495e7a8d14513aedcc2fe15f09a93..33c79a630fd551004f3d6df6851aa9d0ac069e57:/sbr/fmt_scan.c diff --git a/sbr/fmt_scan.c b/sbr/fmt_scan.c index 759a81f9..97a4a05a 100644 --- a/sbr/fmt_scan.c +++ b/sbr/fmt_scan.c @@ -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. */ @@ -1063,6 +1068,7 @@ fmt_scan (struct format *format, charstring_t scanlp, int width, int *dat, case FT_MYMBOX: case FT_GETMYMBOX: + case FT_GETMYADDR: /* * if there's no component, we say true. Otherwise we * say "true" only if we can parse the address and it @@ -1076,18 +1082,28 @@ 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. It will be - run through FT_LS_ADDR, which will strip off - any pers name. */ - str = mn->m_text; + /* 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; - } + } 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 */ @@ -1096,11 +1112,11 @@ fmt_scan (struct format *format, charstring_t scanlp, int width, int *dat, comp->c_flags |= CF_TRUE; else { comp->c_flags &= ~CF_TRUE; - } + } comp->c_mn = &fmt_mnull; } if ((comp->c_flags & CF_TRUE) == 0 && - fmt->f_type == FT_GETMYMBOX) { + (fmt->f_type == FT_GETMYMBOX || fmt->f_type == FT_GETMYADDR)) { /* Fool FT_LS_ADDR into not producing an address. */ comp->c_mn = &fmt_mnull; comp->c_text = NULL; }