X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/337b4e616e8f53ba06285b1645e1df9918ed5c16..33c79a630fd551004f3d6df6851aa9d0ac069e57:/sbr/fmt_scan.c diff --git a/sbr/fmt_scan.c b/sbr/fmt_scan.c index 08405da1..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. */ @@ -832,7 +837,7 @@ fmt_scan (struct format *format, charstring_t scanlp, int width, int *dat, value = -1; break; case FT_LV_DST: - value = fmt->f_comp->c_tws->tw_flags & TW_DST; + value = fmt->f_comp->c_tws->tw_flags & TW_DST ? 1 : 0; break; case FT_LS_822DATE: str = dasctime (fmt->f_comp->c_tws , TW_ZONE); @@ -1062,6 +1067,8 @@ fmt_scan (struct format *format, charstring_t scanlp, int width, int *dat, break; 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 @@ -1073,24 +1080,46 @@ fmt_scan (struct format *format, charstring_t scanlp, int width, int *dat, if ((sp = comp->c_text) && (sp = getname(sp)) && (mn = getm (sp, NULL, 0, NULL, 0))) { comp->c_mn = mn; - if (ismymbox(mn)) + if (ismymbox(mn)) { comp->c_flags |= CF_TRUE; - else + /* 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 */ ; if (comp->c_text == 0) comp->c_flags |= CF_TRUE; - else + 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_GETMYADDR)) { + /* Fool FT_LS_ADDR into not producing an address. */ + comp->c_mn = &fmt_mnull; comp->c_text = NULL; + } break; }