Annotation of 43BSDReno/pgrm/indent/indent_globs.h, 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:  *     @(#)indent_globs.h      5.10 (Berkeley) 6/1/90
        !            22:  */
        !            23: 
        !            24: #include <stdio.h>
        !            25: 
        !            26: #define BACKSLASH '\\'
        !            27: #define bufsize 200            /* size of internal buffers */
        !            28: #define sc_size 5000           /* size of save_com buffer */
        !            29: #define label_offset 2         /* number of levels a label is placed to left
        !            30:                                 * of code */
        !            31: 
        !            32: #define tabsize 8              /* the size of a tab */
        !            33: #define tabmask 0177770                /* mask used when figuring length of lines
        !            34:                                 * with tabs */
        !            35: 
        !            36: 
        !            37: #define false 0
        !            38: #define true  1
        !            39: 
        !            40: 
        !            41: FILE       *input;             /* the fid for the input file */
        !            42: FILE       *output;            /* the output file */
        !            43: 
        !            44: #define CHECK_SIZE_CODE \
        !            45:        if (e_code >= l_code) { \
        !            46:            register nsize = l_code-s_code+400; \
        !            47:            codebuf = (char *) realloc(codebuf, nsize); \
        !            48:            e_code = codebuf + (e_code-s_code) + 1; \
        !            49:            l_code = codebuf + nsize - 5; \
        !            50:            s_code = codebuf + 1; \
        !            51:        }
        !            52: #define CHECK_SIZE_COM \
        !            53:        if (e_com >= l_com) { \
        !            54:            register nsize = l_com-s_com+400; \
        !            55:            combuf = (char *) realloc(combuf, nsize); \
        !            56:            e_com = combuf + (e_com-s_com) + 1; \
        !            57:            l_com = combuf + nsize - 5; \
        !            58:            s_com = combuf + 1; \
        !            59:        }
        !            60: #define CHECK_SIZE_LAB \
        !            61:        if (e_lab >= l_lab) { \
        !            62:            register nsize = l_lab-s_lab+400; \
        !            63:            labbuf = (char *) realloc(labbuf, nsize); \
        !            64:            e_lab = labbuf + (e_lab-s_lab) + 1; \
        !            65:            l_lab = labbuf + nsize - 5; \
        !            66:            s_lab = labbuf + 1; \
        !            67:        }
        !            68: #define CHECK_SIZE_TOKEN \
        !            69:        if (e_token >= l_token) { \
        !            70:            register nsize = l_token-s_token+400; \
        !            71:            tokenbuf = (char *) realloc(tokenbuf, nsize); \
        !            72:            e_token = tokenbuf + (e_token-s_token) + 1; \
        !            73:            l_token = tokenbuf + nsize - 5; \
        !            74:            s_token = tokenbuf + 1; \
        !            75:        }
        !            76: 
        !            77: char       *labbuf;            /* buffer for label */
        !            78: char       *s_lab;             /* start ... */
        !            79: char       *e_lab;             /* .. and end of stored label */
        !            80: char       *l_lab;             /* limit of label buffer */
        !            81: 
        !            82: char       *codebuf;           /* buffer for code section */
        !            83: char       *s_code;            /* start ... */
        !            84: char       *e_code;            /* .. and end of stored code */
        !            85: char       *l_code;            /* limit of code section */
        !            86: 
        !            87: char       *combuf;            /* buffer for comments */
        !            88: char       *s_com;             /* start ... */
        !            89: char       *e_com;             /* ... and end of stored comments */
        !            90: char       *l_com;             /* limit of comment buffer */
        !            91: 
        !            92: #define token s_token
        !            93: char       *tokenbuf;          /* the last token scanned */
        !            94: char      *s_token;
        !            95: char       *e_token;
        !            96: char      *l_token;
        !            97: 
        !            98: char       *in_buffer;         /* input buffer */
        !            99: char      *in_buffer_limit;    /* the end of the input buffer */
        !           100: char       *buf_ptr;           /* ptr to next character to be taken from
        !           101:                                 * in_buffer */
        !           102: char       *buf_end;           /* ptr to first after last char in in_buffer */
        !           103: 
        !           104: char        save_com[sc_size]; /* input text is saved here when looking for
        !           105:                                 * the brace after an if, while, etc */
        !           106: char       *sc_end;            /* pointer into save_com buffer */
        !           107: 
        !           108: char       *bp_save;           /* saved value of buf_ptr when taking input
        !           109:                                 * from save_com */
        !           110: char       *be_save;           /* similarly saved value of buf_end */
        !           111: 
        !           112: 
        !           113: int         pointer_as_binop;
        !           114: int         blanklines_after_declarations;
        !           115: int         blanklines_before_blockcomments;
        !           116: int         blanklines_after_procs;
        !           117: int         blanklines_around_conditional_compilation;
        !           118: int         swallow_optional_blanklines;
        !           119: int         n_real_blanklines;
        !           120: int         prefix_blankline_requested;
        !           121: int         postfix_blankline_requested;
        !           122: int         break_comma;       /* when true and not in parens, break after a
        !           123:                                 * comma */
        !           124: int         btype_2;           /* when true, brace should be on same line as
        !           125:                                 * if, while, etc */
        !           126: float       case_ind;          /* indentation level to be used for a "case
        !           127:                                 * n:" */
        !           128: int         code_lines;                /* count of lines with code */
        !           129: int         had_eof;           /* set to true when input is exhausted */
        !           130: int         line_no;           /* the current line number. */
        !           131: int         max_col;           /* the maximum allowable line length */
        !           132: int         verbose;           /* when true, non-essential error messages are
        !           133:                                 * printed */
        !           134: int         cuddle_else;       /* true if else should cuddle up to '}' */
        !           135: int         star_comment_cont; /* true iff comment continuation lines should
        !           136:                                 * have stars at the beginning of each line. */
        !           137: int         comment_delimiter_on_blankline;
        !           138: int         troff;             /* true iff were generating troff input */
        !           139: int         procnames_start_line;      /* if true, the names of procedures
        !           140:                                         * being defined get placed in column
        !           141:                                         * 1 (ie. a newline is placed between
        !           142:                                         * the type of the procedure and its
        !           143:                                         * name) */
        !           144: int         proc_calls_space;  /* If true, procedure calls look like:
        !           145:                                 * foo(bar) rather than foo (bar) */
        !           146: int         format_col1_comments;      /* If comments which start in column 1
        !           147:                                         * are to be magically reformatted
        !           148:                                         * (just like comments that begin in
        !           149:                                         * later columns) */
        !           150: int         inhibit_formatting;        /* true if INDENT OFF is in effect */
        !           151: int         suppress_blanklines;/* set iff following blanklines should be
        !           152:                                 * suppressed */
        !           153: int         continuation_indent;/* set to the indentation between the edge of
        !           154:                                 * code and continuation lines */
        !           155: int         lineup_to_parens;  /* if true, continued code within parens will
        !           156:                                 * be lined up to the open paren */
        !           157: int         Bill_Shannon;      /* true iff a blank should always be inserted
        !           158:                                 * after sizeof */
        !           159: int         blanklines_after_declarations_at_proctop;  /* This is vaguely
        !           160:                                                         * similar to
        !           161:                                                         * blanklines_after_decla
        !           162:                                                         * rations except that
        !           163:                                                         * it only applies to
        !           164:                                                         * the first set of
        !           165:                                                         * declarations in a
        !           166:                                                         * procedure (just after
        !           167:                                                         * the first '{') and it
        !           168:                                                         * causes a blank line
        !           169:                                                         * to be generated even
        !           170:                                                         * if there are no
        !           171:                                                         * declarations */
        !           172: int         block_comment_max_col;
        !           173: int         extra_expression_indent;   /* True if continuation lines from the
        !           174:                                         * expression part of "if(e)",
        !           175:                                         * "while(e)", "for(e;e;e)" should be
        !           176:                                         * indented an extra tab stop so that
        !           177:                                         * they don't conflict with the code
        !           178:                                         * that follows */
        !           179: 
        !           180: /* -troff font state information */
        !           181: 
        !           182: struct fstate {
        !           183:     char        font[4];
        !           184:     char        size;
        !           185:     int         allcaps:1;
        !           186: };
        !           187: char       *chfont();
        !           188: 
        !           189: struct fstate
        !           190:             keywordf,          /* keyword font */
        !           191:             stringf,           /* string font */
        !           192:             boxcomf,           /* Box comment font */
        !           193:             blkcomf,           /* Block comment font */
        !           194:             scomf,             /* Same line comment font */
        !           195:             bodyf;             /* major body font */
        !           196: 
        !           197: 
        !           198: #define STACKSIZE 150
        !           199: 
        !           200: struct parser_state {
        !           201:     int         last_token;
        !           202:     struct fstate cfont;       /* Current font */
        !           203:     int         p_stack[STACKSIZE];    /* this is the parsers stack */
        !           204:     int         il[STACKSIZE]; /* this stack stores indentation levels */
        !           205:     float       cstk[STACKSIZE];/* used to store case stmt indentation levels */
        !           206:     int         box_com;       /* set to true when we are in a "boxed"
        !           207:                                 * comment. In that case, the first non-blank
        !           208:                                 * char should be lined up with the / in /* */
        !           209:     int         comment_delta,
        !           210:                 n_comment_delta;
        !           211:     int         cast_mask;     /* indicates which close parens close off
        !           212:                                 * casts */
        !           213:     int         sizeof_mask;   /* indicates which close parens close off
        !           214:                                 * sizeof''s */
        !           215:     int         block_init;    /* true iff inside a block initialization */
        !           216:     int         block_init_level;      /* The level of brace nesting in an
        !           217:                                         * initialization */
        !           218:     int         last_nl;       /* this is true if the last thing scanned was
        !           219:                                 * a newline */
        !           220:     int         in_or_st;      /* Will be true iff there has been a
        !           221:                                 * declarator (e.g. int or char) and no left
        !           222:                                 * paren since the last semicolon. When true,
        !           223:                                 * a '{' is starting a structure definition or
        !           224:                                 * an initialization list */
        !           225:     int         bl_line;       /* set to 1 by dump_line if the line is blank */
        !           226:     int         col_1;         /* set to true if the last token started in
        !           227:                                 * column 1 */
        !           228:     int         com_col;       /* this is the column in which the current
        !           229:                                 * coment should start */
        !           230:     int         com_ind;       /* the column in which comments to the right
        !           231:                                 * of code should start */
        !           232:     int         com_lines;     /* the number of lines with comments, set by
        !           233:                                 * dump_line */
        !           234:     int         dec_nest;      /* current nesting level for structure or init */
        !           235:     int         decl_com_ind;  /* the column in which comments after
        !           236:                                 * declarations should be put */
        !           237:     int         decl_on_line;  /* set to true if this line of code has part
        !           238:                                 * of a declaration on it */
        !           239:     int         i_l_follow;    /* the level to which ind_level should be set
        !           240:                                 * after the current line is printed */
        !           241:     int         in_decl;       /* set to true when we are in a declaration
        !           242:                                 * stmt.  The processing of braces is then
        !           243:                                 * slightly different */
        !           244:     int         in_stmt;       /* set to 1 while in a stmt */
        !           245:     int         ind_level;     /* the current indentation level */
        !           246:     int         ind_size;      /* the size of one indentation level */
        !           247:     int         ind_stmt;      /* set to 1 if next line should have an extra
        !           248:                                 * indentation level because we are in the
        !           249:                                 * middle of a stmt */
        !           250:     int         last_u_d;      /* set to true after scanning a token which
        !           251:                                 * forces a following operator to be unary */
        !           252:     int         leave_comma;   /* if true, never break declarations after
        !           253:                                 * commas */
        !           254:     int         ljust_decl;    /* true if declarations should be left
        !           255:                                 * justified */
        !           256:     int         out_coms;      /* the number of comments processed, set by
        !           257:                                 * pr_comment */
        !           258:     int         out_lines;     /* the number of lines written, set by
        !           259:                                 * dump_line */
        !           260:     int         p_l_follow;    /* used to remember how to indent following
        !           261:                                 * statement */
        !           262:     int         paren_level;   /* parenthesization level. used to indent
        !           263:                                 * within stmts */
        !           264:     short       paren_indents[20];     /* column positions of each paren */
        !           265:     int         pcase;         /* set to 1 if the current line label is a
        !           266:                                 * case.  It is printed differently from a
        !           267:                                 * regular label */
        !           268:     int         search_brace;  /* set to true by parse when it is necessary
        !           269:                                 * to buffer up all info up to the start of a
        !           270:                                 * stmt after an if, while, etc */
        !           271:     int         unindent_displace;     /* comments not to the right of code
        !           272:                                         * will be placed this many
        !           273:                                         * indentation levels to the left of
        !           274:                                         * code */
        !           275:     int         use_ff;                /* set to one if the current line should be
        !           276:                                 * terminated with a form feed */
        !           277:     int         want_blank;    /* set to true when the following token should
        !           278:                                 * be prefixed by a blank. (Said prefixing is
        !           279:                                 * ignored in some cases.) */
        !           280:     int         else_if;       /* True iff else if pairs should be handled
        !           281:                                 * specially */
        !           282:     int         decl_indent;   /* column to indent declared identifiers to */
        !           283:     int         its_a_keyword;
        !           284:     int         sizeof_keyword;
        !           285:     int         dumped_decl_indent;
        !           286:     float       case_indent;   /* The distance to indent case labels from the
        !           287:                                 * switch statement */
        !           288:     int         in_parameter_declaration;
        !           289:     int         indent_parameters;
        !           290:     int         tos;           /* pointer to top of stack */
        !           291:     char        procname[100]; /* The name of the current procedure */
        !           292:     int         just_saw_decl;
        !           293: }           ps;
        !           294: 
        !           295: int         ifdef_level;
        !           296: int        rparen_count;
        !           297: struct parser_state state_stack[5];
        !           298: struct parser_state match_state[5];

unix.superglobalmegacorp.com

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