Annotation of 43BSDReno/pgrm/indent/io.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1985 Sun Microsystems, Inc.
        !             3:  * Copyright (c) 1980 The Regents of the University of California.
        !             4:  * Copyright (c) 1976 Board of Trustees of the University of Illinois.
        !             5:  * All rights reserved.
        !             6:  *
        !             7:  * Redistribution and use in source and binary forms are permitted
        !             8:  * provided that: (1) source distributions retain this entire copyright
        !             9:  * notice and comment, and (2) distributions including binaries display
        !            10:  * the following acknowledgement:  ``This product includes software
        !            11:  * developed by the University of California, Berkeley and its contributors''
        !            12:  * in the documentation or other materials provided with the distribution
        !            13:  * and in all advertising materials mentioning features or use of this
        !            14:  * software. Neither the name of the University nor the names of its
        !            15:  * contributors may be used to endorse or promote products derived
        !            16:  * from this software without specific prior written permission.
        !            17:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
        !            18:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
        !            19:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        !            20:  */
        !            21: 
        !            22: #ifndef lint
        !            23: static char sccsid[] = "@(#)io.c       5.14 (Berkeley) 6/1/90";
        !            24: #endif /* not lint */
        !            25: 
        !            26: #include "indent_globs.h"
        !            27: #include <ctype.h>
        !            28: 
        !            29: 
        !            30: int         comment_open;
        !            31: static      paren_target;
        !            32: 
        !            33: dump_line()
        !            34: {                              /* dump_line is the routine that actually
        !            35:                                 * effects the printing of the new source. It
        !            36:                                 * prints the label section, followed by the
        !            37:                                 * code section with the appropriate nesting
        !            38:                                 * level, followed by any comments */
        !            39:     register int cur_col,
        !            40:                 target_col;
        !            41:     static      not_first_line;
        !            42: 
        !            43:     if (ps.procname[0]) {
        !            44:        if (troff) {
        !            45:            if (comment_open) {
        !            46:                comment_open = 0;
        !            47:                fprintf(output, ".*/\n");
        !            48:            }
        !            49:            fprintf(output, ".Pr \"%s\"\n", ps.procname);
        !            50:        }
        !            51:        ps.ind_level = 0;
        !            52:        ps.procname[0] = 0;
        !            53:     }
        !            54:     if (s_code == e_code && s_lab == e_lab && s_com == e_com) {
        !            55:        if (suppress_blanklines > 0)
        !            56:            suppress_blanklines--;
        !            57:        else {
        !            58:            ps.bl_line = true;
        !            59:            n_real_blanklines++;
        !            60:        }
        !            61:     }
        !            62:     else if (!inhibit_formatting) {
        !            63:        suppress_blanklines = 0;
        !            64:        ps.bl_line = false;
        !            65:        if (prefix_blankline_requested && not_first_line)
        !            66:            if (swallow_optional_blanklines) {
        !            67:                if (n_real_blanklines == 1)
        !            68:                    n_real_blanklines = 0;
        !            69:            }
        !            70:            else {
        !            71:                if (n_real_blanklines == 0)
        !            72:                    n_real_blanklines = 1;
        !            73:            }
        !            74:        while (--n_real_blanklines >= 0)
        !            75:            putc('\n', output);
        !            76:        n_real_blanklines = 0;
        !            77:        if (ps.ind_level == 0)
        !            78:            ps.ind_stmt = 0;    /* this is a class A kludge. dont do
        !            79:                                 * additional statement indentation if we are
        !            80:                                 * at bracket level 0 */
        !            81: 
        !            82:        if (e_lab != s_lab || e_code != s_code)
        !            83:            ++code_lines;       /* keep count of lines with code */
        !            84: 
        !            85: 
        !            86:        if (e_lab != s_lab) {   /* print lab, if any */
        !            87:            if (comment_open) {
        !            88:                comment_open = 0;
        !            89:                fprintf(output, ".*/\n");
        !            90:            }
        !            91:            while (e_lab > s_lab && (e_lab[-1] == ' ' || e_lab[-1] == '\t'))
        !            92:                e_lab--;
        !            93:            cur_col = pad_output(1, compute_label_target());
        !            94:            if (s_lab[0] == '#' && (strncmp(s_lab, "#else", 5) == 0
        !            95:                                    || strncmp(s_lab, "#endif", 6) == 0)) {
        !            96:                register char *s = s_lab;
        !            97:                if (e_lab[-1] == '\n') e_lab--;
        !            98:                do putc(*s++, output);
        !            99:                while (s < e_lab && 'a' <= *s && *s<='z');
        !           100:                while ((*s == ' ' || *s == '\t') && s < e_lab)
        !           101:                    s++;
        !           102:                if (s < e_lab)
        !           103:                    fprintf(output, s[0]=='/' && s[1]=='*' ? "\t%.*s" : "\t/* %.*s */",
        !           104:                            e_lab - s, s);
        !           105:            }
        !           106:            else fprintf(output, "%.*s", e_lab - s_lab, s_lab);
        !           107:            cur_col = count_spaces(cur_col, s_lab);
        !           108:        }
        !           109:        else
        !           110:            cur_col = 1;        /* there is no label section */
        !           111: 
        !           112:        ps.pcase = false;
        !           113: 
        !           114:        if (s_code != e_code) { /* print code section, if any */
        !           115:            register char *p;
        !           116: 
        !           117:            if (comment_open) {
        !           118:                comment_open = 0;
        !           119:                fprintf(output, ".*/\n");
        !           120:            }
        !           121:            target_col = compute_code_target();
        !           122:            {
        !           123:                register    i;
        !           124: 
        !           125:                for (i = 0; i < ps.p_l_follow; i++)
        !           126:                    if (ps.paren_indents[i] >= 0)
        !           127:                        ps.paren_indents[i] = -(ps.paren_indents[i] + target_col);
        !           128:            }
        !           129:            cur_col = pad_output(cur_col, target_col);
        !           130:            for (p = s_code; p < e_code; p++)
        !           131:                if (*p == (char) 0200)
        !           132:                    fprintf(output, "%d", target_col * 7);
        !           133:                else
        !           134:                    putc(*p, output);
        !           135:            cur_col = count_spaces(cur_col, s_code);
        !           136:        }
        !           137:        if (s_com != e_com)
        !           138:            if (troff) {
        !           139:                int         all_here = 0;
        !           140:                register char *p;
        !           141: 
        !           142:                if (e_com[-1] == '/' && e_com[-2] == '*')
        !           143:                    e_com -= 2, all_here++;
        !           144:                while (e_com > s_com && e_com[-1] == ' ')
        !           145:                    e_com--;
        !           146:                *e_com = 0;
        !           147:                p = s_com;
        !           148:                while (*p == ' ')
        !           149:                    p++;
        !           150:                if (p[0] == '/' && p[1] == '*')
        !           151:                    p += 2, all_here++;
        !           152:                else if (p[0] == '*')
        !           153:                    p += p[1] == '/' ? 2 : 1;
        !           154:                while (*p == ' ')
        !           155:                    p++;
        !           156:                if (*p == 0)
        !           157:                    goto inhibit_newline;
        !           158:                if (comment_open < 2 && ps.box_com) {
        !           159:                    comment_open = 0;
        !           160:                    fprintf(output, ".*/\n");
        !           161:                }
        !           162:                if (comment_open == 0) {
        !           163:                    if ('a' <= *p && *p <= 'z')
        !           164:                        *p = *p + 'A' - 'a';
        !           165:                    if (e_com - p < 50 && all_here == 2) {
        !           166:                        register char *follow = p;
        !           167:                        fprintf(output, "\n.nr C! \\w\1");
        !           168:                        while (follow < e_com) {
        !           169:                            switch (*follow) {
        !           170:                            case '\n':
        !           171:                                putc(' ', output);
        !           172:                            case 1:
        !           173:                                break;
        !           174:                            case '\\':
        !           175:                                putc('\\', output);
        !           176:                            default:
        !           177:                                putc(*follow, output);
        !           178:                            }
        !           179:                            follow++;
        !           180:                        }
        !           181:                        putc(1, output);
        !           182:                    }
        !           183:                    fprintf(output, "\n./* %dp %d %dp\n",
        !           184:                            ps.com_col * 7,
        !           185:                            (s_code != e_code || s_lab != e_lab) - ps.box_com,
        !           186:                            target_col * 7);
        !           187:                }
        !           188:                comment_open = 1 + ps.box_com;
        !           189:                while (*p) {
        !           190:                    if (*p == BACKSLASH)
        !           191:                        putc(BACKSLASH, output);
        !           192:                    putc(*p++, output);
        !           193:                }
        !           194:            }
        !           195:            else {              /* print comment, if any */
        !           196:                register    target = ps.com_col;
        !           197:                register char *com_st = s_com;
        !           198: 
        !           199:                target += ps.comment_delta;
        !           200:                while (*com_st == '\t')
        !           201:                    com_st++, target += 8;      /* ? */
        !           202:                while (target <= 0)
        !           203:                    if (*com_st == ' ')
        !           204:                        target++, com_st++;
        !           205:                    else if (*com_st == '\t')
        !           206:                        target = ((target - 1) & ~7) + 9, com_st++;
        !           207:                    else
        !           208:                        target = 1;
        !           209:                if (cur_col > target) { /* if comment cant fit on this line,
        !           210:                                         * put it on next line */
        !           211:                    putc('\n', output);
        !           212:                    cur_col = 1;
        !           213:                    ++ps.out_lines;
        !           214:                }
        !           215:                while (e_com > com_st && isspace(e_com[-1]))
        !           216:                    e_com--;
        !           217:                cur_col = pad_output(cur_col, target);
        !           218:                if (!ps.box_com) {
        !           219:                    if (star_comment_cont && (com_st[1] != '*' || e_com <= com_st + 1))
        !           220:                        if (com_st[1] == ' ' && com_st[0] == ' ' && e_com > com_st + 1)
        !           221:                            com_st[1] = '*';
        !           222:                        else
        !           223:                            fwrite(" * ", com_st[0] == '\t' ? 2 : com_st[0] == '*' ? 1 : 3, 1, output);
        !           224:                }
        !           225:                fwrite(com_st, e_com - com_st, 1, output);
        !           226:                ps.comment_delta = ps.n_comment_delta;
        !           227:                cur_col = count_spaces(cur_col, com_st);
        !           228:                ++ps.com_lines; /* count lines with comments */
        !           229:            }
        !           230:        if (ps.use_ff)
        !           231:            putc('\014', output);
        !           232:        else
        !           233:            putc('\n', output);
        !           234: inhibit_newline:
        !           235:        ++ps.out_lines;
        !           236:        if (ps.just_saw_decl == 1 && blanklines_after_declarations) {
        !           237:            prefix_blankline_requested = 1;
        !           238:            ps.just_saw_decl = 0;
        !           239:        }
        !           240:        else
        !           241:            prefix_blankline_requested = postfix_blankline_requested;
        !           242:        postfix_blankline_requested = 0;
        !           243:     }
        !           244:     ps.decl_on_line = ps.in_decl;      /* if we are in the middle of a
        !           245:                                         * declaration, remember that fact for
        !           246:                                         * proper comment indentation */
        !           247:     ps.ind_stmt = ps.in_stmt & ~ps.in_decl;    /* next line should be
        !           248:                                                 * indented if we have not
        !           249:                                                 * completed this stmt and if
        !           250:                                                 * we are not in the middle of
        !           251:                                                 * a declaration */
        !           252:     ps.use_ff = false;
        !           253:     ps.dumped_decl_indent = 0;
        !           254:     *(e_lab = s_lab) = '\0';   /* reset buffers */
        !           255:     *(e_code = s_code) = '\0';
        !           256:     *(e_com = s_com) = '\0';
        !           257:     ps.ind_level = ps.i_l_follow;
        !           258:     ps.paren_level = ps.p_l_follow;
        !           259:     paren_target = -ps.paren_indents[ps.paren_level - 1];
        !           260:     not_first_line = 1;
        !           261:     return;
        !           262: }
        !           263: 
        !           264: compute_code_target()
        !           265: {
        !           266:     register    target_col = ps.ind_size * ps.ind_level + 1;
        !           267: 
        !           268:     if (ps.paren_level)
        !           269:        if (!lineup_to_parens)
        !           270:            target_col += continuation_indent * ps.paren_level;
        !           271:        else {
        !           272:            register    w;
        !           273:            register    t = paren_target;
        !           274: 
        !           275:            if ((w = count_spaces(t, s_code) - max_col) > 0
        !           276:                    && count_spaces(target_col, s_code) <= max_col) {
        !           277:                t -= w + 1;
        !           278:                if (t > target_col)
        !           279:                    target_col = t;
        !           280:            }
        !           281:            else
        !           282:                target_col = t;
        !           283:        }
        !           284:     else if (ps.ind_stmt)
        !           285:        target_col += continuation_indent;
        !           286:     return target_col;
        !           287: }
        !           288: 
        !           289: compute_label_target()
        !           290: {
        !           291:     return
        !           292:        ps.pcase ? (int) (case_ind * ps.ind_size) + 1
        !           293:        : *s_lab == '#' ? 1
        !           294:        : ps.ind_size * (ps.ind_level - label_offset) + 1;
        !           295: }
        !           296: 
        !           297: 
        !           298: /*
        !           299:  * Copyright (C) 1976 by the Board of Trustees of the University of Illinois
        !           300:  * 
        !           301:  * All rights reserved
        !           302:  * 
        !           303:  * 
        !           304:  * NAME: fill_buffer
        !           305:  * 
        !           306:  * FUNCTION: Reads one block of input into input_buffer
        !           307:  * 
        !           308:  * HISTORY: initial coding     November 1976   D A Willcox of CAC 1/7/77 A
        !           309:  * Willcox of CAC      Added check for switch back to partly full input
        !           310:  * buffer from temporary buffer
        !           311:  * 
        !           312:  */
        !           313: int
        !           314: fill_buffer()
        !           315: {                              /* this routine reads stuff from the input */
        !           316:     register char *p;
        !           317:     register int i;
        !           318:     register FILE *f = input;
        !           319: 
        !           320:     if (bp_save != 0) {                /* there is a partly filled input buffer left */
        !           321:        buf_ptr = bp_save;      /* dont read anything, just switch buffers */
        !           322:        buf_end = be_save;
        !           323:        bp_save = be_save = 0;
        !           324:        if (buf_ptr < buf_end)
        !           325:            return;             /* only return if there is really something in
        !           326:                                 * this buffer */
        !           327:     }
        !           328:     for (p = in_buffer;;) {
        !           329:        if (p >= in_buffer_limit) {
        !           330:            register size = (in_buffer_limit - in_buffer) * 2 + 10;
        !           331:            register offset = p - in_buffer;
        !           332:            in_buffer = (char *) realloc(in_buffer, size);
        !           333:            if (in_buffer == 0)
        !           334:                err("input line too long");
        !           335:            p = in_buffer + offset;
        !           336:            in_buffer_limit = in_buffer + size - 2;
        !           337:        }
        !           338:        if ((i = getc(f)) == EOF) {
        !           339:                *p++ = ' ';
        !           340:                *p++ = '\n';
        !           341:                had_eof = true;
        !           342:                break;
        !           343:        }
        !           344:        *p++ = i;
        !           345:        if (i == '\n')
        !           346:                break;
        !           347:     }
        !           348:     buf_ptr = in_buffer;
        !           349:     buf_end = p;
        !           350:     if (p[-2] == '/' && p[-3] == '*') {
        !           351:        if (in_buffer[3] == 'I' && strncmp(in_buffer, "/**INDENT**", 11) == 0)
        !           352:            fill_buffer();      /* flush indent error message */
        !           353:        else {
        !           354:            int         com = 0;
        !           355: 
        !           356:            p = in_buffer;
        !           357:            while (*p == ' ' || *p == '\t')
        !           358:                p++;
        !           359:            if (*p == '/' && p[1] == '*') {
        !           360:                p += 2;
        !           361:                while (*p == ' ' || *p == '\t')
        !           362:                    p++;
        !           363:                if (p[0] == 'I' && p[1] == 'N' && p[2] == 'D' && p[3] == 'E'
        !           364:                        && p[4] == 'N' && p[5] == 'T') {
        !           365:                    p += 6;
        !           366:                    while (*p == ' ' || *p == '\t')
        !           367:                        p++;
        !           368:                    if (*p == '*')
        !           369:                        com = 1;
        !           370:                    else if (*p == 'O')
        !           371:                        if (*++p == 'N')
        !           372:                            p++, com = 1;
        !           373:                        else if (*p == 'F' && *++p == 'F')
        !           374:                            p++, com = 2;
        !           375:                    while (*p == ' ' || *p == '\t')
        !           376:                        p++;
        !           377:                    if (p[0] == '*' && p[1] == '/' && p[2] == '\n' && com) {
        !           378:                        if (s_com != e_com || s_lab != e_lab || s_code != e_code)
        !           379:                            dump_line();
        !           380:                        if (!(inhibit_formatting = com - 1)) {
        !           381:                            n_real_blanklines = 0;
        !           382:                            postfix_blankline_requested = 0;
        !           383:                            prefix_blankline_requested = 0;
        !           384:                            suppress_blanklines = 1;
        !           385:                        }
        !           386:                    }
        !           387:                }
        !           388:            }
        !           389:        }
        !           390:     }
        !           391:     if (inhibit_formatting) {
        !           392:        p = in_buffer;
        !           393:        do
        !           394:            putc(*p, output);
        !           395:        while (*p++ != '\n');
        !           396:     }
        !           397:     return;
        !           398: }
        !           399: 
        !           400: /*
        !           401:  * Copyright (C) 1976 by the Board of Trustees of the University of Illinois
        !           402:  * 
        !           403:  * All rights reserved
        !           404:  * 
        !           405:  * 
        !           406:  * NAME: pad_output
        !           407:  * 
        !           408:  * FUNCTION: Writes tabs and spaces to move the current column up to the desired
        !           409:  * position.
        !           410:  * 
        !           411:  * ALGORITHM: Put tabs and/or blanks into pobuf, then write pobuf.
        !           412:  * 
        !           413:  * PARAMETERS: current         integer         The current column target
        !           414:  * nteger              The desired column
        !           415:  * 
        !           416:  * RETURNS: Integer value of the new column.  (If current >= target, no action is
        !           417:  * taken, and current is returned.
        !           418:  * 
        !           419:  * GLOBALS: None
        !           420:  * 
        !           421:  * CALLS: write (sys)
        !           422:  * 
        !           423:  * CALLED BY: dump_line
        !           424:  * 
        !           425:  * HISTORY: initial coding     November 1976   D A Willcox of CAC
        !           426:  * 
        !           427:  */
        !           428: pad_output(current, target)    /* writes tabs and blanks (if necessary) to
        !           429:                                 * get the current output position up to the
        !           430:                                 * target column */
        !           431:     int         current;       /* the current column value */
        !           432:     int         target;                /* position we want it at */
        !           433: {
        !           434:     register int curr;         /* internal column pointer */
        !           435:     register int tcur;
        !           436: 
        !           437:     if (troff)
        !           438:        fprintf(output, "\\h'|%dp'", (target - 1) * 7);
        !           439:     else {
        !           440:        if (current >= target)
        !           441:            return (current);   /* line is already long enough */
        !           442:        curr = current;
        !           443:        while ((tcur = ((curr - 1) & tabmask) + tabsize + 1) <= target) {
        !           444:            putc('\t', output);
        !           445:            curr = tcur;
        !           446:        }
        !           447:        while (curr++ < target)
        !           448:            putc(' ', output);  /* pad with final blanks */
        !           449:     }
        !           450:     return (target);
        !           451: }
        !           452: 
        !           453: /*
        !           454:  * Copyright (C) 1976 by the Board of Trustees of the University of Illinois
        !           455:  * 
        !           456:  * All rights reserved
        !           457:  * 
        !           458:  * 
        !           459:  * NAME: count_spaces
        !           460:  * 
        !           461:  * FUNCTION: Find out where printing of a given string will leave the current
        !           462:  * character position on output.
        !           463:  * 
        !           464:  * ALGORITHM: Run thru input string and add appropriate values to current
        !           465:  * position.
        !           466:  * 
        !           467:  * RETURNS: Integer value of position after printing "buffer" starting in column
        !           468:  * "current".
        !           469:  * 
        !           470:  * HISTORY: initial coding     November 1976   D A Willcox of CAC
        !           471:  * 
        !           472:  */
        !           473: int
        !           474: count_spaces(current, buffer)
        !           475: /*
        !           476:  * this routine figures out where the character position will be after
        !           477:  * printing the text in buffer starting at column "current"
        !           478:  */
        !           479:     int         current;
        !           480:     char       *buffer;
        !           481: {
        !           482:     register char *buf;                /* used to look thru buffer */
        !           483:     register int cur;          /* current character counter */
        !           484: 
        !           485:     cur = current;
        !           486: 
        !           487:     for (buf = buffer; *buf != '\0'; ++buf) {
        !           488:        switch (*buf) {
        !           489: 
        !           490:        case '\n':
        !           491:        case 014:               /* form feed */
        !           492:            cur = 1;
        !           493:            break;
        !           494: 
        !           495:        case '\t':
        !           496:            cur = ((cur - 1) & tabmask) + tabsize + 1;
        !           497:            break;
        !           498: 
        !           499:        case 010:               /* backspace */
        !           500:            --cur;
        !           501:            break;
        !           502: 
        !           503:        default:
        !           504:            ++cur;
        !           505:            break;
        !           506:        }                       /* end of switch */
        !           507:     }                          /* end of for loop */
        !           508:     return (cur);
        !           509: }
        !           510: 
        !           511: int    found_err;
        !           512: /* VARARGS2 */
        !           513: diag(level, msg, a, b)
        !           514: {
        !           515:     if (level)
        !           516:        found_err = 1;
        !           517:     if (output == stdout) {
        !           518:        fprintf(stdout, "/**INDENT** %s@%d: ", level == 0 ? "Warning" : "Error", line_no);
        !           519:        fprintf(stdout, msg, a, b);
        !           520:        fprintf(stdout, " */\n");
        !           521:     }
        !           522:     else {
        !           523:        fprintf(stderr, "%s@%d: ", level == 0 ? "Warning" : "Error", line_no);
        !           524:        fprintf(stderr, msg, a, b);
        !           525:        fprintf(stderr, "\n");
        !           526:     }
        !           527: }
        !           528: 
        !           529: writefdef(f, nm)
        !           530:     register struct fstate *f;
        !           531: {
        !           532:     fprintf(output, ".ds f%c %s\n.nr s%c %d\n",
        !           533:            nm, f->font, nm, f->size);
        !           534: }
        !           535: 
        !           536: char       *
        !           537: chfont(of, nf, s)
        !           538:     register struct fstate *of,
        !           539:                *nf;
        !           540:     char       *s;
        !           541: {
        !           542:     if (of->font[0] != nf->font[0]
        !           543:            || of->font[1] != nf->font[1]) {
        !           544:        *s++ = '\\';
        !           545:        *s++ = 'f';
        !           546:        if (nf->font[1]) {
        !           547:            *s++ = '(';
        !           548:            *s++ = nf->font[0];
        !           549:            *s++ = nf->font[1];
        !           550:        }
        !           551:        else
        !           552:            *s++ = nf->font[0];
        !           553:     }
        !           554:     if (nf->size != of->size) {
        !           555:        *s++ = '\\';
        !           556:        *s++ = 's';
        !           557:        if (nf->size < of->size) {
        !           558:            *s++ = '-';
        !           559:            *s++ = '0' + of->size - nf->size;
        !           560:        }
        !           561:        else {
        !           562:            *s++ = '+';
        !           563:            *s++ = '0' + nf->size - of->size;
        !           564:        }
        !           565:     }
        !           566:     return s;
        !           567: }
        !           568: 
        !           569: 
        !           570: parsefont(f, s0)
        !           571:     register struct fstate *f;
        !           572:     char       *s0;
        !           573: {
        !           574:     register char *s = s0;
        !           575:     int         sizedelta = 0;
        !           576:     bzero(f, sizeof *f);
        !           577:     while (*s) {
        !           578:        if (isdigit(*s))
        !           579:            f->size = f->size * 10 + *s - '0';
        !           580:        else if (isupper(*s))
        !           581:            if (f->font[0])
        !           582:                f->font[1] = *s;
        !           583:            else
        !           584:                f->font[0] = *s;
        !           585:        else if (*s == 'c')
        !           586:            f->allcaps = 1;
        !           587:        else if (*s == '+')
        !           588:            sizedelta++;
        !           589:        else if (*s == '-')
        !           590:            sizedelta--;
        !           591:        else {
        !           592:            fprintf(stderr, "indent: bad font specification: %s\n", s0);
        !           593:            exit(1);
        !           594:        }
        !           595:        s++;
        !           596:     }
        !           597:     if (f->font[0] == 0)
        !           598:        f->font[0] = 'R';
        !           599:     if (bodyf.size == 0)
        !           600:        bodyf.size = 11;
        !           601:     if (f->size == 0)
        !           602:        f->size = bodyf.size + sizedelta;
        !           603:     else if (sizedelta > 0)
        !           604:        f->size += bodyf.size;
        !           605:     else
        !           606:        f->size = bodyf.size - f->size;
        !           607: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.