Annotation of 43BSDTahoe/new/dipress/src/bin/ipfe/ipfe.c, revision 1.1

1.1     ! root        1: /***  file = ipfe.c  ********************************************/
        !             2: 
        !             3: /*** start of specifications ************************************
        !             4:  *
        !             5:  * name = ipfe
        !             6:  * descriptive name = interpress file editor
        !             7:  * filename = ipfe.c
        !             8:  * module type = main
        !             9:  * subsystem name = interpress toolkit
        !            10:  * copyright = (c) 1985, 1986, xerox corporation
        !            11:  * author = mark l. rollins
        !            12:  * date written = 10/oct/85
        !            13:  *
        !            14:  * change activity =
        !            15:  *   07/18/86 r1.05 mlr wrc:   changed so Scale follows, rather than
        !            16:  *                               precedes, Rotate, BindingOffset, XOffset,
        !            17:  *                               and YOffset in output processing
        !            18:  *   06/16/86 r1.04 mlr wrc:   add Scale processing
        !            19:  *   05/19/86 r1.03 mlr wrc:   fixed bug in dsply of Y-offset values
        !            20:  *   04/22/86 r1.02 mlr wrc:   fixed bug in pagerange parsing that gave
        !            21:  *                               error on terminating "]";
        !            22:  *                             add vers display
        !            23:  *   03/14/86 r1.01 mlr wrc:   major enhancements
        !            24:  *   10/10/85 r1.00 mlr wrc:   original date
        !            25:  *
        !            26:  *   release = r1.05
        !            27:  *   date = 18/jul/86
        !            28:  *
        !            29:  * function = provide the following skeleton- and page-level functions
        !            30:  *             for editing interpress masters:
        !            31:  *             .  concatenate masters
        !            32:  *             .  merge pages from multiple masters into one master
        !            33:  *             .  overlay selected pages as a single page (may be
        !            34:  *                     combined with merge function)
        !            35:  *             .  chapterize a master into multiple masters
        !            36:  *             .  satisfy sequenceInsertFile & sequenceInsertMaster
        !            37:  *                     references
        !            38:  *             .  resolve alias and binding offset printing instructions
        !            39:  *             .  return information about the properties of a set of
        !            40:  *                     masters
        !            41:  *
        !            42:  * function description =
        !            43:  *
        !            44:  *     Usage:  ipfe [ options ] file [ pagerange] ... [ file [pagerange] ...]
        !            45:  *     Options: [-l logfile] [-dDiLqrRsS] [-a alias:actual [-a alias:actual]
        !            46:  *              ...] [-b offset:unit] [-c count:unit] [-o outfile]
        !            47:  *              [-p level:propfile] [-S factor] [-X offset:unit]
        !            48:  *              [-Y offset:unit]
        !            49:  *
        !            50:  *              -a alias:actual
        !            51:  *                             (alias). If the -s option is specified,
        !            52:  *                             replace any SIF matching the string "alias"
        !            53:  *                             with the string "actual" before attempting
        !            54:  *                             to satisfy the SIF. If "actual" cannot be
        !            55:  *                             opened or there is some error, the SIF
        !            56:  *                             "alias" is preserved, unless the -r option
        !            57:  *                             is also specified.
        !            58:  *              -b offset:unit (binding offset). Shift the image offset units
        !            59:  *                             in the x-direction, where unit may be: none
        !            60:  *                             (default centimeters), c (centimeters), i
        !            61:  *                             (inches), p (points), P (Picas). If the -L
        !            62:  *                             (Landscape) switch is set, the image offset
        !            63:  *                             is in the y-direction.
        !            64:  *              -c count:unit  (chapterize) every count units, where unit may
        !            65:  *                             be p (pages), k (kilobytes), or m (megabytes).
        !            66:  *              -d             (duplex). For resolving binding offset.
        !            67:  *              -D             (Debug). If the -p option is specified, also
        !            68:  *                             write to the properties file the offsets of
        !            69:  *                             each skeleton-level token encountered.
        !            70:  *              -i             (insert SIF for overlay). Insert (create) a
        !            71:  *                             SIF for any unresolvable overlays.
        !            72:  *              -l logfile     (log). Keep a running log.
        !            73:  *              -L             (Landscape). Rotate every page 90 degrees
        !            74:  *                             counterclockwise and preserve the upper left
        !            75:  *                             corner. Intended for printing text in
        !            76:  *                             landscape orientation.
        !            77:  *              -o outfile     (output). Where the output goes. If there is
        !            78:  *                             no -o and there is a -p, only the properties
        !            79:  *                             are written, else if there is no -o
        !            80:  *                             "infile.ip" is used if it doesn't already
        !            81:  *                             exist, else "infileN.ip" is used, where N
        !            82:  *                             is the lowest ordinal number such that
        !            83:  *                             "infileN.ip" does not already exist.
        !            84:  *              -p level:propfile
        !            85:  *                             (properties). Where the properties are
        !            86:  *                             written. Increasing levels provide increasing
        !            87:  *                             information details.
        !            88:  *              -q             (quiet). Don't write info & error msgs (to
        !            89:  *                             STDERR).
        !            90:  *              -r             (remove SIFS). If -s is also specified, it
        !            91:  *                             takes precedence and a SIF reference is
        !            92:  *                             removed only if it is unresolved or there is
        !            93:  *                             some other error.
        !            94:  *              -R             (Rotate). Rotate every page 90 degrees
        !            95:  *                             clockwise and preserve the center point.
        !            96:  *                             Intended for rotating an image created for
        !            97:  *                             a "landscape printer" to print in portrait
        !            98:  *                             orientation.
        !            99:  *              -s             (satisfy SIFS). Replace any SIF references
        !           100:  *                             tokens found in the referenced file. If the
        !           101:  *                             referenced file cannot be opened, the SIF
        !           102:  *                             reference is preserved unless -r is also
        !           103:  *                             specified.
        !           104:  *              -S factor      (scale). Scale the image by factor.
        !           105:  *              -X offset:unit (X-imageShift). Shift the image offset units
        !           106:  *                             in the x-direction, where unit may be: none
        !           107:  *                             (default centimeters), c (centimeters), i
        !           108:  *                             (inches), p (points), P (Picas). The shift
        !           109:  *                             is independent of the -L and -R switches
        !           110:  *                             (i.e., the x-direction is the same as the
        !           111:  *                             unrotated image).
        !           112:  *              -Y offset:unit (Y-imageShift). Shift the image offset units
        !           113:  *                             in the y-direction, where unit may be: none
        !           114:  *                             (default centimeters), c (centimeters), i
        !           115:  *                             (inches), p (points), P (Picas). The shift
        !           116:  *                             is independent of the -L and -R switches
        !           117:  *                             (i.e., the y-direction is the same as the
        !           118:  *                             unrotated image).
        !           119:  *              infile [pagerange]
        !           120:  *                             See the manual page for syntax details.
        !           121:  *               Example:
        !           122:  *                [1,4-6,9[pic1],10-11,12[pic2:2(2P,4P)][pic3(-4P,-2P)],15-]
        !           123:  *                             include page 1.
        !           124:  *                             skip pages 2-3.
        !           125:  *                             include pages 4-6.
        !           126:  *                             skip pages 7-8.
        !           127:  *                             include page 9, overlaying it with pic1.
        !           128:  *                             include pages 10-11.
        !           129:  *                             include pages 12, overlaying it with page 2 of
        !           130:  *                               pic2 at an offset of 2 Picas to the right
        !           131:  *                               and 4 Picas up, and pic3 at an offset of
        !           132:  *                               4 Picas to the left and 2 Picas down.
        !           133:  *                             skip pages 13-14.
        !           134:  *                             include pages 15 thru the end of the master.
        !           135:  *
        !           136:  * linkage =
        !           137:  *   entry = exec ipfe
        !           138:  *   input = see cmd line options above
        !           139:  *   output = interpress master(s), STDERR, log file, property file
        !           140:  *   exit = exit(exit_status)
        !           141:  *
        !           142:  * publics =
        !           143:  *
        !           144:  * dependencies =
        !           145:  *   src = iptokens.h, ipnames.h
        !           146:  *   obj =
        !           147:  *   lnk =
        !           148:  *
        !           149:  * environment =
        !           150:  *   runtime = vax/masscomp unix/4.23bsd
        !           151:  *   development = vax unix/4.23bsd
        !           152:  *   processor = cc
        !           153:  *   code = unix c mnemonics & linkages
        !           154:  *
        !           155:  *** end of specifications **************************************/
        !           156: 
        !           157: #ifdef vax11c
        !           158: # include stdio
        !           159: # include setjmp
        !           160: # include ctype
        !           161: #else
        !           162: # include <stdio.h>
        !           163: /***
        !           164: # include <sys/time.h>
        !           165: # include <sys/resource.h>
        !           166: ***/
        !           167: # include <setjmp.h>
        !           168: # include <ctype.h>
        !           169: #endif
        !           170: 
        !           171: #include "iptokens.h"
        !           172: #include "ipnames.h"
        !           173: 
        !           174: 
        !           175: #define        IPFE_VERS       "1.05"
        !           176: #define        IPFE_DATE       "18 JUL 86"
        !           177: 
        !           178: #define        FALSE           0
        !           179: #define        TRUE            1
        !           180: #define        FLAG_OFF        0
        !           181: #define        FLAG_ON         1
        !           182: 
        !           183: #define        CR              13
        !           184: #define        BEL             07
        !           185: #define        BS              08
        !           186: #define        TAB             09
        !           187: #define        LF              10
        !           188: #define        FF              12
        !           189: #define        TOF             12
        !           190: #define        SPC             32
        !           191: #define        ESC             27
        !           192: #define        DEL             127
        !           193: 
        !           194: #define        STDIN           stdin
        !           195: #define        STDOUT          stdout
        !           196: #define        STDERR          stderr
        !           197: #define        STDIN_DEV       0
        !           198: #define        STDOUT_DEV      1
        !           199: #define        STDERR_DEV      2
        !           200: #define        DEF_LOGFILENAME "ipfe.log"
        !           201: #define        DEF_OUTFILENAME "ipfe.ip"
        !           202: #define        DEF_PROPFILENAME "ipfe.prop"
        !           203: #define        DEF_WORKFILENAME "ipfe.wrk"
        !           204: #define        BUFSIZE         2048
        !           205: #define        OP_Mask         0xe0
        !           206: #define        OK              0
        !           207: #define        ERROR           (-1)
        !           208: #define        DONT_FORMAT     0
        !           209: #define        FORMAT          1
        !           210: #define        MX_NO_INFILES   64
        !           211: #define        MX_NO_OUTFILES  64
        !           212: #define        MX_NO_OVLY_FILES  64
        !           213: #define        IP_HDR_CHKLEN   17
        !           214: #define        IP_VERS_OFFSET  17
        !           215: #define        IP_HDR_MASTERLEN 21
        !           216: #define        MX_HDR_BUFLEN   255
        !           217: #define        MX_NO_ALIASES   128
        !           218: #define        MX_NO_MPG_ENTRIES 128
        !           219: #define        MX_BLOCK_DEPTH  8
        !           220: #define        MX_BODY_DEPTH   8
        !           221: #define        MX_BOP_DEPTH    16      /* max # of nested body_operators */
        !           222: #define        MX_SIF_DEPTH    8       /* max sif nesting depth */
        !           223: #define        INDENT_INCR     3       /* # cols to incr indent each nesting depth */
        !           224: 
        !           225: /*
        !           226:  *  defines for ipfe fn types
        !           227:  */
        !           228: #define        CONCAT          0
        !           229: #define        CHAPTERIZE      1
        !           230: #define        SATISFY_SIFS    2
        !           231: #define        REMOVE_SIFS     3
        !           232: #define        PROPERTIES      4
        !           233: #define        INSERT_OVLY     5
        !           234: #define        DEBUG           6
        !           235: #define        PROC_LOG        7
        !           236: #define        FORCE_STDOUT    8
        !           237: #define        BINDING_OFFSET  9
        !           238: #define        DUPLEX          10
        !           239: #define        QUIET           11
        !           240: #define        LANDSCAPE       12
        !           241: #define        ROTATE          13
        !           242: #define        SCALE           14
        !           243: #define        X_OFFSET        15
        !           244: #define        Y_OFFSET        16
        !           245: #define        NUM_FNS         17
        !           246: 
        !           247: /*
        !           248:  *  defines for chapterization type
        !           249:  */
        !           250: #define        CH_PAGES        1
        !           251: #define        CH_KBYTES       2
        !           252: #define        CH_MBYTES       3
        !           253: 
        !           254: #ifdef lcv2                    /* if Lattice C vers 2.15 or earlier */
        !           255: #define        void    int
        !           256: #endif
        !           257: 
        !           258: /*
        !           259:  *  lattice C defines for fopen file types (binary & text)
        !           260:  */
        !           261: #define        BINARY_FILE     0x8000
        !           262: #define        TEXT_FILE       0
        !           263: 
        !           264: FILE   *input;
        !           265: FILE   *output;
        !           266: FILE   *workfile;      /* work file for testing input file opens & storing
        !           267:                           hdr/preamble for chapterizing */
        !           268: FILE   *ovly_file;
        !           269: FILE   *sif_file[MX_SIF_DEPTH];
        !           270: FILE   *siffile;
        !           271: FILE   *logfile;
        !           272: FILE   *propfile;
        !           273: 
        !           274: jmp_buf        next_file;
        !           275: 
        !           276: extern int errno;
        !           277: 
        !           278: 
        !           279: int    _fmode = TEXT_FILE;     /* lattice C file_mode */
        !           280: int    abort_flag, debug_flag;
        !           281: int    terrno;
        !           282: int    exit_status;
        !           283: 
        !           284: long   pos, in_offset, out_offset;
        !           285: long   out_beg_offset[MX_BLOCK_DEPTH],
        !           286:        out_end_offset[MX_BLOCK_DEPTH];
        !           287: long   chap_val;
        !           288: long   boff_num, boff_den;     /* binding offset numerator, denominator */
        !           289: long   xoff_num, xoff_den;     /* xOffset numerator, denominator */
        !           290: long   yoff_num, yoff_den;     /* yOffset numerator, denominator */
        !           291: long   rxoff_num, rxoff_den,   /* rotation xOffset numerator, denominator */
        !           292:        ryoff_num, ryoff_den;   /*          yOffset numerator, denominator */
        !           293: long   scale_num, scale_den;   /* scale factor numerator, denominator */
        !           294: long   blk_num_bytes[MX_BLOCK_DEPTH];
        !           295: long   pg_num_bytes;
        !           296: 
        !           297: int    num_infiles, out_filnum;
        !           298: int    input_indx, output_indx, sif_indx;
        !           299: int    prop_level;
        !           300: 
        !           301: int    cur_indent, off_indent, cur_col;
        !           302: int    ovly_flag;
        !           303: int    proc_flag[NUM_FNS];
        !           304: int    chap_type;
        !           305: int    ipwrite_flag;
        !           306: int    rot_deg;                /* rotation degrees */
        !           307: int    num_aliases;
        !           308: int    alias_indx;
        !           309: 
        !           310: int    begBody_flag;
        !           311: int    preamble_expected, endpreamble_expected, frstpg_flag,
        !           312:        bop_preamble_expected[MX_BOP_DEPTH];
        !           313: /*
        !           314:  *  MERGE & OVERLAY ARRAYS
        !           315:  *    There are 2 second order arrays, one for merge pages and one for
        !           316:  *    overlay files. The 1st order of both is indexed by input_indx, and
        !           317:  *    the 2nd order by merge_indx. For overlay files, there are 3
        !           318:  *    additional arrays, one for an overlay pagenum, one for page offset
        !           319:  *    numerators, and one for page offset denominators. These 3 arrays
        !           320:  *    are indexed by ovly_indx (the 1st order indexing for the numerator
        !           321:  *    and denominator arrays is 0 for the x-offset and 1 for the y-offset).
        !           322:  *
        !           323:  *    Each 2nd order vector of the merge_pg[][] array is initialized to
        !           324:  *    (-1),0,0,... which indicates to include all pages, and each vector
        !           325:  *    of the ovly_pg[][] array is initialized to (-1),(-1),(-1),... which
        !           326:  *    indicates no overlay files.
        !           327:  *    As IPFE scans the command line, an entry is put into the merge_pg[][]
        !           328:  *    array for each pageNum specified in a pagerange for an infile (the
        !           329:  *    value put into the entry is pageNum). If there is an overlay file
        !           330:  *    specified for pageNum, the (-1) in the ovly_pg[][merge_indx] entry
        !           331:  *    is replaced with the current value of ovly_indx and ovly_indx is
        !           332:  *    incremented. If there is another overlay file specified for pageNum,
        !           333:  *    the value pageNum is repeated in the next merge_pg[][] entry and the
        !           334:  *    incremented ovly_indx is placed in the next ovly_pg[][] entry.
        !           335:  *      Example:
        !           336:  *        ipfe infile "[2,4-6,9[ovly1],12[ovly2][ovly3],15-]"
        !           337:  *      will yield the following merge_pg[input_indx][] & 
        !           338:  *      ovly_pg[input_indx][] vectors:
        !           339:  *                    0    1    2    3    4    5    6    7    8    9   10
        !           340:  *                  ----|----|----|----|----|----|----|----|----|----|----
        !           341:  *        merge_pg:   2 ,  4 ,(-1),  6 ,  9 , 12 , 12 , 15 ,(-1),  0 ,  0 ,...
        !           342:  *        ovly_pg:  (-1),(-1),(-1),(-1),  0 ,  1 ,  2 ,(-1),(-1),(-1),(-1),...
        !           343:  *
        !           344:  *    The algorithm used to decode the merge_pg vector for each infile is
        !           345:  *    as follows:
        !           346:  *      Initialize merge_indx to 0;
        !           347:  *      Loop:
        !           348:  *      Current_entry = merge_pg[input_indx][merge_indx];
        !           349:  *        If Current_entry = 0, we're all done with this infile;
        !           350:  *       Else if Current_entry = (-1), look at next merge_indx entry;
        !           351:  *          Next_entry = merge_pg[input_indx][merge_indx+1];
        !           352:  *            If Next_entry = 0, include all pages to the end of infile;
        !           353:  *           Else include all pages until the value of Next_entry is
        !           354:  *              reached in infile; when it is, increment merge_indx (making
        !           355:  *              Current_entry = Next_entry, and goto Loop;
        !           356:  *        Else exclude all pages until Current_entry is reached in infile
        !           357:  *          (it may already be reached); when it is, include that page and
        !           358:  *           check the ovly_pg[][] entry;
        !           359:  *          Ovly_entry = ovly_pg[input_indx][merge_indx];
        !           360:  *            If Ovly_entry != (-1) do overlay processing;
        !           361:  *          Increment merge_indx, and goto Loop;
        !           362:  */
        !           363: int    merge_indx, merge_pg[MX_NO_INFILES][MX_NO_MPG_ENTRIES];
        !           364: int    ovly_indx, ovly_pg[MX_NO_INFILES][MX_NO_MPG_ENTRIES];
        !           365: int    ovly_pgnum[MX_NO_OVLY_FILES];
        !           366: long   ovly_num[2][MX_NO_OVLY_FILES],
        !           367:        ovly_den[2][MX_NO_OVLY_FILES];
        !           368: 
        !           369: int    block_indx;
        !           370: int    block_flag;
        !           371: int    bproc_indx, bop_indx, bop_iindx[MX_BOP_DEPTH];
        !           372: int    bproc_flag, bop_flag;
        !           373: int    num_blocks, num_pages, num_sifs,
        !           374:        tnum_blocks, tnum_pages, tnum_sifs;
        !           375: int    out_numpages;
        !           376: 
        !           377: int    infile_flag[MX_NO_INFILES];
        !           378: 
        !           379: int    hdr_len;
        !           380: char   hdr_buf[MX_HDR_BUFLEN+1], hdr_workbuf[MX_HDR_BUFLEN+1];
        !           381: 
        !           382: char   input_name[MX_NO_INFILES][128], input_fnm[128], input_ext[128],
        !           383:        output_name[128], output_fnm[128], output_ext[128],
        !           384:        work_fname[128], sif_name[MX_SIF_DEPTH][128], prop_fname[128];
        !           385: char   ovly_fname[MX_NO_OVLY_FILES][128];
        !           386: char   alias_ref[MX_NO_ALIASES][128], alias_act[MX_NO_ALIASES][128];
        !           387: char   *inputname, *outputname, *sifname, *propfname;
        !           388: char   *logfilename = "ipfe.log";
        !           389: 
        !           390: char   *itostr(), lcase(), *op_name(), *strcat(), *strcpy();
        !           391: 
        !           392: /****************************************************************
        !           393:  *
        !           394:  *     main(argc, argv):       ipfe mainline:
        !           395:  *     main:                     interpress file editor
        !           396:  *
        !           397:  ****************************************************************/
        !           398: 
        !           399: main(argc, argv)
        !           400: 
        !           401:        int     argc;
        !           402:        char    *argv[];
        !           403: {
        !           404:        char    msg[128];
        !           405: 
        !           406: 
        !           407:        (void)sprintf(msg,
        !           408:                      "\nIPFE Version %s, %s -- Interpress File Editor\n",
        !           409:                      IPFE_VERS, IPFE_DATE);
        !           410:        pip_error(msg);
        !           411:        pip_error("Copyright (c) 1985,1986 Xerox Corporation\n\n");
        !           412:        init_ipfe();
        !           413:        get_cmd_args(argc, argv);
        !           414:        init1_ipfe();           /* initialization after getting cmd args */
        !           415: 
        !           416: 
        !           417:        for (input_indx=0; input_indx < num_infiles; input_indx++)
        !           418:        {
        !           419:            init_proc_file();
        !           420:            inputname = input_name[input_indx];
        !           421:            (void)sprintf(msg, "-- File:  %s--\n", inputname);
        !           422:            pip_error(msg);
        !           423:            pip_prop(msg);
        !           424: 
        !           425:            _fmode = BINARY_FILE;
        !           426:            input = fopen(inputname, "r");
        !           427:            if  (input == NULL)
        !           428:            {
        !           429:                (void)sprintf(msg, "\nError opening input file: %s\n",
        !           430:                                   inputname);
        !           431:                pip_error(msg);
        !           432:                pip_prop(msg);
        !           433:            }
        !           434:            else
        !           435:            {
        !           436:                proc_file();            /* do the real work */
        !           437:                (void)fclose(input);
        !           438:            }
        !           439:        }
        !           440: 
        !           441:        if  ((abort_flag == FLAG_OFF) &&
        !           442:             (proc_flag[CONCAT] == FLAG_ON))
        !           443:        {
        !           444:            ipwrite_flag = FLAG_ON;     /* in case it was turned off by
        !           445:                                           last file processed */
        !           446:            put_op(OP_endBlock);
        !           447:        }
        !           448: 
        !           449:        cleanup();
        !           450:        exit(exit_status);
        !           451: }
        !           452: 
        !           453: 
        !           454: /****************************************************************
        !           455:  *
        !           456:  *     cleanup:                housecleaning
        !           457:  *
        !           458:  ****************************************************************/
        !           459: 
        !           460: cleanup()
        !           461: {
        !           462:        char    msg[128];
        !           463: 
        !           464: 
        !           465:        if  (proc_flag[CONCAT] == FLAG_ON)
        !           466:        {
        !           467:            (void)sprintf(msg, "\n--Total Number of Blocks:%4d\n", tnum_blocks);
        !           468:            pip_prop(msg);
        !           469:            (void)sprintf(msg,   "--Total Number of Pages :%4d\n", tnum_pages);
        !           470:            pip_prop(msg);
        !           471:            (void)sprintf(msg,   "--Total Number of SIFs  :%4d\n", tnum_sifs);
        !           472:            pip_prop(msg);
        !           473:        }
        !           474:        mputc_prop('\n');
        !           475: 
        !           476:        (void)sprintf(msg, "\n-- Total Number of Input Pages :%4d\n",
        !           477:                        tnum_pages);
        !           478:        pip_error(msg);
        !           479:        if  ((output != NULL) || (out_numpages > 0))
        !           480:        {
        !           481:            (void)sprintf(msg, "-- Total Number of Output Pages:%4d\n",
        !           482:                            out_numpages);
        !           483:            pip_error(msg);
        !           484:        }
        !           485:        pip_error("\n");
        !           486: 
        !           487:        if  (logfile != NULL)
        !           488:            (void)fclose(logfile);
        !           489: 
        !           490:        if  (propfile != NULL)
        !           491:            (void)fclose(propfile);
        !           492: 
        !           493:        if  (output != NULL)
        !           494:            (void)fclose(output);
        !           495: 
        !           496: }
        !           497: 
        !           498: 
        !           499: /****************************************************************
        !           500:  *
        !           501:  *     int count_int_bytes(val):
        !           502:  *     int count_int_bytes:    return the number of bytes in the
        !           503:  *                             specified int val
        !           504:  *
        !           505:  ****************************************************************/
        !           506: 
        !           507: int count_int_bytes(val)
        !           508: 
        !           509:        long    val;
        !           510: {
        !           511:        long    mask;
        !           512:        int     i;
        !           513: 
        !           514: 
        !           515:        if  ((val == 0) || (val == (-1)))
        !           516:            i = 1;              /* avoid infinite looping */
        !           517:        else
        !           518:        {
        !           519:            if  (val < 0)
        !           520:                val = ~(val);   /* same # of bytes as one's complement */
        !           521: 
        !           522:            mask = 0xff800000;
        !           523:            for (i=4; ((val & mask) == 0); i--)
        !           524:                mask = mask >> 8;
        !           525: 
        !           526:        }
        !           527: 
        !           528: return(i);
        !           529: }
        !           530: 
        !           531: 
        !           532: /****************************************************************
        !           533:  *
        !           534:  *     create_SIF(fname):
        !           535:  *     create_SIF:             create a new SIF (for ovly handling)
        !           536:  *
        !           537:  ****************************************************************/
        !           538: 
        !           539: create_SIF(fname)
        !           540: 
        !           541:        char    *fname;
        !           542: {
        !           543:        int     not_created_flag;
        !           544:        char    msg[128];
        !           545: 
        !           546: 
        !           547:        not_created_flag = FLAG_OFF;
        !           548:        if  (proc_flag[INSERT_OVLY] == FLAG_ON)
        !           549:        {
        !           550:            if  (ovly_pgnum[ovly_indx] < 2)
        !           551:            {
        !           552:                (void)sprintf(msg,
        !           553:                        "                  --Creating SIF:  %s\n", fname);
        !           554:                pip_error(msg);
        !           555:                put_seq_type_len(sequenceInsertFile, (long)strlen(fname));
        !           556:                ip_puts(fname);
        !           557:            }
        !           558:            else
        !           559:            {
        !           560:                pip_error(
        !           561:     "                  --Cannot create SIF for overlay with pageNum > 1\n");
        !           562:                not_created_flag = FLAG_ON;
        !           563:            }
        !           564:        }
        !           565:        else
        !           566:        {
        !           567:            pip_error(
        !           568:     "                    -i switch (Insert SIF for overlay) not specified\n");
        !           569:            not_created_flag = FLAG_ON;
        !           570:        }
        !           571:        if  (not_created_flag == FLAG_ON)
        !           572:        {
        !           573:            (void)sprintf(msg,
        !           574:                          "                  --SIF Not Created for:  %s\n",
        !           575:                          fname);
        !           576:            pip_error(msg);
        !           577:        }
        !           578: 
        !           579: }
        !           580: 
        !           581: 
        !           582: /****************************************************************
        !           583:  *
        !           584:  *     get_cmd_args(argc, argv):
        !           585:  *     get_cmd_args:           get cmd_line arguments
        !           586:  *     gca:                    label for editing
        !           587:  *
        !           588:  ****************************************************************/
        !           589: 
        !           590: get_cmd_args(argc, argv)
        !           591: 
        !           592:        int     argc;
        !           593:        char    *argv[];
        !           594: {
        !           595:        long    val, val1, d;
        !           596:        int     arg, opt, opt_len, ch_ctr, neg_flag, sep_flag, retcd;
        !           597:        int     err_flag = FLAG_OFF;
        !           598:        char    ch, sep_char, msg[128];
        !           599: 
        !           600:        
        !           601:        for (arg=1; arg < argc; arg++)  /* look for cmd_arguments */
        !           602:        {
        !           603:            switch
        !           604:                (argv[arg][0])
        !           605:            {
        !           606:                case ('-'):
        !           607:                    opt_len = strlen(argv[arg]);  /* because arg can be */
        !           608:                                                  /*   modified below   */
        !           609:                    for (opt=1; opt < opt_len; opt++)
        !           610:                    {
        !           611:                        switch
        !           612:                            (argv[arg][opt])
        !           613:                        {
        !           614:                            case ('-'):
        !           615:                                opt = opt_len;  /* to handle '--' switch */
        !           616:                                break;
        !           617: 
        !           618:                            case ('a'):
        !           619:                                if  (strlen(&(argv[arg][opt])) > 1)
        !           620:                                    ++opt;
        !           621:                                else
        !           622:                                {
        !           623:                                    ++arg;
        !           624:                                    opt = 0;
        !           625:                                    opt_len = strlen(argv[arg]);
        !           626:                                }
        !           627:                                proc_alias(&(argv[arg][opt]));
        !           628:                                opt = opt_len;  /* to get out of loop */
        !           629:                                break;
        !           630: 
        !           631:                            case ('b'):
        !           632:                                if  (strlen(&(argv[arg][opt])) > 1)
        !           633:                                    ++opt;
        !           634:                                else
        !           635:                                {
        !           636:                                    ++arg;
        !           637:                                    opt = 0;
        !           638:                                    opt_len = strlen(argv[arg]);
        !           639:                                }
        !           640: /*
        !           641:  *  binding offset:unit
        !           642:  */
        !           643:                                val = val1 = d = ch_ctr = 0;
        !           644:                                neg_flag = FLAG_OFF;
        !           645:                                while
        !           646:                                    (opt < opt_len)
        !           647:                                {
        !           648:                                    ch = argv[arg][opt++];
        !           649:                                    if  ((ch == '-') && (ch_ctr == 0))
        !           650:                                        neg_flag = FLAG_ON;
        !           651:                                    else
        !           652:                                    if ((ch >= '0') && (ch <= '9'))
        !           653:                                    {
        !           654:                                        ch = ch - '0';
        !           655:                                        if  (d == 0)
        !           656:                                            val = (val * 10) + ch;
        !           657:                                        else
        !           658:                                        if  (d <= 1000)  /* prec = 10**(-3)
        !           659:                                                            truncated */
        !           660:                                        {
        !           661:                                            val1 = (val1 * 10) + ch;
        !           662:                                            d = d * 10;
        !           663:                                        }
        !           664:                                    }
        !           665:                                    else
        !           666:                                    if (ch == '.')
        !           667:                                        d = 1;
        !           668:                                    else
        !           669:                                    {
        !           670:                                        if  ((ch == ':') && (opt < opt_len))
        !           671:                                            ch = argv[arg][opt++];
        !           672:                                        break;          /* exit loop */
        !           673:                                    }
        !           674:                                    ++ch_ctr;
        !           675:                                }
        !           676: /*                             end while (opt < opt_len) */
        !           677: 
        !           678:                                if  (d == 0)
        !           679:                                    d = 1;
        !           680:                                else
        !           681:                                    val = (val * d) + val1;
        !           682: 
        !           683:                                if  (val != 0)
        !           684:                                {
        !           685:                                    if  (neg_flag == FLAG_ON)
        !           686:                                        val = -(val);
        !           687:                                    switch
        !           688:                                        (ch)
        !           689:                                    {
        !           690:                                        case ('c'):
        !           691:                                            d = d * 100;
        !           692:                                            break;
        !           693:                                        case ('i'):
        !           694:                                            val = val * 254;
        !           695:                                            d = d * 10000;
        !           696:                                            break;
        !           697:                                        case ('p'):
        !           698:                                            val = val * 254;
        !           699:                                            d = ((d * 720000) & 0x7fffffff);
        !           700:                                            break;
        !           701:                                        case ('P'):
        !           702:                                            val = val * 254;
        !           703:                                            d = ((d * 60000) & 0x7fffffff);
        !           704:                                            break;
        !           705:                                        default:
        !           706:                                            d = d * 100;  /* def=cm */
        !           707:                                            break;
        !           708:                                    }
        !           709: /*                                 end switch (ch) */
        !           710: 
        !           711:                                    if  (d != 0)  /* last chk for div
        !           712:                                                     by 0 just in case
        !           713:                                                     of ovflw */
        !           714:                                    {
        !           715:                                        boff_num = val;
        !           716:                                        boff_den = d;
        !           717:                                        proc_flag[BINDING_OFFSET] =
        !           718:                                                FLAG_ON;
        !           719:                                    }
        !           720:                                }
        !           721:                                else
        !           722:                                {
        !           723:                                    (void)sprintf(msg,
        !           724:                "--ipfe:  No binding offset value specified in (%s)\n",
        !           725:                                                  argv[arg]);
        !           726:                                    pip_error(msg);
        !           727:                                    err_flag = FLAG_ON;
        !           728:                                }
        !           729:                                --opt;  /* to parse cur ch at cmd line */
        !           730:                                break;
        !           731: 
        !           732:                            case ('c'):
        !           733:                                if  (strlen(&(argv[arg][opt])) > 1)
        !           734:                                    ++opt;
        !           735:                                else
        !           736:                                {
        !           737:                                    ++arg;
        !           738:                                    opt = 0;
        !           739:                                    opt_len = strlen(argv[arg]);
        !           740:                                }
        !           741:                                ch = val = 0;
        !           742:                                while
        !           743:                                    (opt < opt_len)
        !           744:                                {
        !           745:                                    ch = argv[arg][opt];
        !           746:                                    if  ((ch >= '0') && (ch <= '9'))
        !           747:                                    {
        !           748:                                        ch = ch - '0';
        !           749:                                        val = (val * 10) + ch;
        !           750:                                        ++opt;
        !           751:                                    }
        !           752:                                    else
        !           753:                                        break;
        !           754:                                }
        !           755:                                if  (val == 0)
        !           756:                                {
        !           757:                                    (void)sprintf(msg,
        !           758:                      "--ipfe:  No length specified for chapterize in %s\n",
        !           759:                                        argv[arg]);
        !           760:                                    pip_error(msg);
        !           761:                                    err_flag = FLAG_ON;
        !           762:                                }
        !           763:                                else
        !           764:                                {
        !           765:                                    if  ((ch == ':') && (opt < opt_len))
        !           766:                                        ch = argv[arg][++opt];
        !           767: 
        !           768:                                    switch
        !           769:                                        (ch)
        !           770:                                    {
        !           771:                                        case ('p'):
        !           772:                                            proc_flag[CHAPTERIZE] = FLAG_ON;
        !           773:                                            chap_type = CH_PAGES;
        !           774:                                            chap_val = val;
        !           775:                                            break;
        !           776:                                        case ('k'):
        !           777:                                            proc_flag[CHAPTERIZE] = FLAG_ON;
        !           778:                                            chap_type = CH_KBYTES;
        !           779:                                            chap_val = val * 1024;
        !           780:                                            break;
        !           781:                                        case ('m'):
        !           782:                                            proc_flag[CHAPTERIZE] = FLAG_ON;
        !           783:                                            chap_type = CH_MBYTES;
        !           784:                                            chap_val = ((val * 1048576) &
        !           785:                                                        0x7fffffff);
        !           786:                                            break;
        !           787:                                        default:
        !           788:                                            (void)sprintf(msg,
        !           789:                        "--ipfe:  No unit specified for chapterize in %s\n",
        !           790:                                                argv[arg]);
        !           791:                                            pip_error(msg);
        !           792:                                            err_flag = FLAG_ON;
        !           793:                                            --opt;      /* parse opt again */
        !           794:                                            break;
        !           795:                                    }
        !           796:                                }
        !           797:                                break;
        !           798: 
        !           799:                            case ('d'):
        !           800:                                proc_flag[DUPLEX] = FLAG_ON;
        !           801:                                break;
        !           802: 
        !           803:                            case ('D'):
        !           804:                                proc_flag[DEBUG] = FLAG_ON;
        !           805:                                break;
        !           806: 
        !           807:                            case ('i'):
        !           808:                                proc_flag[INSERT_OVLY] = FLAG_ON;
        !           809:                                break;
        !           810: 
        !           811:                            case ('l'):
        !           812:                                proc_flag[PROC_LOG] = FLAG_ON;
        !           813:                                if  (strlen(&(argv[arg][opt])) > 1)
        !           814:                                    ++opt;
        !           815:                                else
        !           816:                                {
        !           817:                                    ++arg;
        !           818:                                    opt = 0;
        !           819:                                    opt_len = strlen(argv[arg]);
        !           820:                                }
        !           821:                                ch = argv[arg][opt];
        !           822:                                if  ((ch != ':') && (ch != '-'))
        !           823:                                {
        !           824:                                    logfilename = &(argv[arg][opt]);
        !           825:                                    opt = opt_len;  /* to get out of lp */
        !           826:                                }
        !           827:                                open_logfile(argc, argv);
        !           828:                                break;
        !           829: 
        !           830:                            case ('L'):
        !           831:                                rot_deg = 90;
        !           832:                                rxoff_num = rxoff_den = 0;
        !           833:                                ryoff_num = -(2794);
        !           834:                                ryoff_den = 10000;
        !           835:                                proc_flag[LANDSCAPE] = FLAG_ON;
        !           836:                                break;
        !           837: 
        !           838:                            case ('o'):
        !           839:                                if  (strlen(&(argv[arg][opt])) > 1)
        !           840:                                    outputname = &(argv[arg][opt+1]);
        !           841:                                else
        !           842:                                    outputname = argv[++arg];
        !           843:                                opt = opt_len;    /* to get out of loop */
        !           844:                                break;
        !           845: 
        !           846:                            case ('p'):
        !           847:                                proc_flag[PROPERTIES] = FLAG_ON;
        !           848:                                if  (strlen(&(argv[arg][opt])) > 1)
        !           849:                                    ++opt;
        !           850:                                else
        !           851:                                {
        !           852:                                    ++arg;
        !           853:                                    opt = 0;
        !           854:                                    opt_len = strlen(argv[arg]);
        !           855:                                }
        !           856:                                ch = argv[arg][opt];
        !           857:                                if  ((ch != ':') && (ch != '-'))
        !           858:                                {
        !           859:                                    if  ((ch >= '0') && (ch <= '9'))
        !           860:                                    {
        !           861:                                        prop_level = ch - '0';
        !           862:                                        ++opt;
        !           863:                                        if  (argv[arg][opt] == ':')
        !           864:                                            ++opt;
        !           865:                                        if  (opt < opt_len)
        !           866:                                            propfname = &(argv[arg][opt]);
        !           867:                                        opt = opt_len;  /* to exit loop */
        !           868:                                    }
        !           869:                                    else
        !           870:                                    {
        !           871:                                        (void)sprintf(msg,
        !           872:            "--ipfe:  *** warning -- property level not specified in %s\n",
        !           873:                                                argv[arg]);
        !           874:                                        pip_error(msg);
        !           875:                                        err_flag = FLAG_ON;
        !           876:                                        propfname = &(argv[arg][opt]);
        !           877:                                        opt = opt_len;  /* to exit loop */
        !           878:                                    }
        !           879:                                }
        !           880:                                break;
        !           881: 
        !           882:                            case ('q'):
        !           883:                                proc_flag[QUIET] = FLAG_ON;
        !           884:                                break;
        !           885: 
        !           886:                            case ('r'):
        !           887:                                proc_flag[REMOVE_SIFS] = FLAG_ON;
        !           888:                                break;
        !           889: 
        !           890:                            case ('R'):
        !           891:                                rot_deg = -(90);
        !           892:                                rxoff_num = -(2477);    /* xOff = -(9 3/4") */
        !           893:                                ryoff_num = -(318);     /* yOff = -(1 1/4") */
        !           894:                                rxoff_den = ryoff_den = 10000;
        !           895:                                proc_flag[ROTATE] = FLAG_ON;
        !           896:                                break;
        !           897: 
        !           898:                            case ('s'):
        !           899:                                proc_flag[SATISFY_SIFS] = FLAG_ON;
        !           900:                                break;
        !           901: 
        !           902:                            case ('S'):
        !           903:                                if  (strlen(&(argv[arg][opt])) > 1)
        !           904:                                    ++opt;
        !           905:                                else
        !           906:                                {
        !           907:                                    ++arg;
        !           908:                                    opt = 0;
        !           909:                                    opt_len = strlen(argv[arg]);
        !           910:                                }
        !           911: /*
        !           912:  *  scale
        !           913:  */
        !           914:                                val = val1 = d = ch_ctr = 0;
        !           915:                                neg_flag = sep_flag = FLAG_OFF;
        !           916:                                while
        !           917:                                    (opt < opt_len)
        !           918:                                {
        !           919:                                    ch = argv[arg][opt++];
        !           920:                                    if  ((ch == '-') && (ch_ctr == 0))
        !           921:                                        neg_flag = FLAG_ON;
        !           922:                                    else
        !           923:                                    if ((ch >= '0') && (ch <= '9'))
        !           924:                                    {
        !           925:                                        ch = ch - '0';
        !           926:                                        if  (d == 0)
        !           927:                                            val = (val * 10) + ch;
        !           928:                                        else
        !           929:                                        if  (d <= 1000)  /* prec = 10**(-3)
        !           930:                                                            truncated */
        !           931:                                        {
        !           932:                                            val1 = (val1 * 10) + ch;
        !           933:                                            d = d * 10;
        !           934:                                        }
        !           935:                                    }
        !           936:                                    else
        !           937:                                    if ((ch == '.') || (ch == '/'))
        !           938:                                    {
        !           939:                                        if  (sep_flag == FLAG_OFF)
        !           940:                                        {
        !           941:                                            d = 1;
        !           942:                                            sep_char = ch;
        !           943:                                            sep_flag = FLAG_ON;
        !           944:                                        }
        !           945:                                        else
        !           946:                                        {
        !           947:                                            (void)sprintf(msg,
        !           948:        "--ipfe:  Scale factor cannot have BOTH a '.' AND a '/' in (%s)\n",
        !           949:                                                  argv[arg]);
        !           950:                                            pip_error(msg);
        !           951:                                            err_flag = FLAG_ON;
        !           952:                                            break;      /* exit loop */
        !           953:                                        }
        !           954:                                    }
        !           955:                                    else
        !           956:                                    {
        !           957:                                        if  ((ch == ':') && (opt < opt_len))
        !           958:                                            ch = argv[arg][opt++];
        !           959:                                        break;          /* exit loop */
        !           960:                                    }
        !           961:                                    ++ch_ctr;
        !           962:                                }
        !           963: /*                             end while (opt < opt_len) */
        !           964: 
        !           965:                                if  (d == 0)
        !           966:                                    d = 1;
        !           967:                                else
        !           968:                                if  (sep_char == '/')
        !           969:                                    d = val1;
        !           970:                                else
        !           971:                                    val = (val * d) + val1;
        !           972: 
        !           973:                                if  ((val != 0) && (err_flag == FLAG_OFF))
        !           974:                                {
        !           975:                                    if  (neg_flag == FLAG_ON)
        !           976:                                        val = -(val);
        !           977: 
        !           978:                                    if  (d != 0)  /* last chk for div
        !           979:                                                     by 0 just in case
        !           980:                                                     of ovflw */
        !           981:                                    {
        !           982:                                        scale_num = val;
        !           983:                                        scale_den = d;
        !           984:                                        proc_flag[SCALE] = FLAG_ON;
        !           985:                                    }
        !           986:                                }
        !           987:                                else
        !           988:                                {
        !           989:                                    (void)sprintf(msg,
        !           990:                "--ipfe:  No scale factor value specified in (%s)\n",
        !           991:                                                  argv[arg]);
        !           992:                                    pip_error(msg);
        !           993:                                    err_flag = FLAG_ON;
        !           994:                                }
        !           995:                                --opt;  /* to parse cur ch at cmd line */
        !           996:                                break;
        !           997: 
        !           998:                            case ('X'):
        !           999:                                if  (strlen(&(argv[arg][opt])) > 1)
        !          1000:                                    ++opt;
        !          1001:                                else
        !          1002:                                {
        !          1003:                                    ++arg;
        !          1004:                                    opt = 0;
        !          1005:                                    opt_len = strlen(argv[arg]);
        !          1006:                                }
        !          1007: /*
        !          1008:  *  xOffset:unit
        !          1009:  */
        !          1010:                                val = val1 = d = ch_ctr = 0;
        !          1011:                                neg_flag = FLAG_OFF;
        !          1012:                                while
        !          1013:                                    (opt < opt_len)
        !          1014:                                {
        !          1015:                                    ch = argv[arg][opt++];
        !          1016:                                    if  ((ch == '-') && (ch_ctr == 0))
        !          1017:                                        neg_flag = FLAG_ON;
        !          1018:                                    else
        !          1019:                                    if ((ch >= '0') && (ch <= '9'))
        !          1020:                                    {
        !          1021:                                        ch = ch - '0';
        !          1022:                                        if  (d == 0)
        !          1023:                                            val = (val * 10) + ch;
        !          1024:                                        else
        !          1025:                                        if  (d <= 1000)  /* prec = 10**(-3)
        !          1026:                                                            truncated */
        !          1027:                                        {
        !          1028:                                            val1 = (val1 * 10) + ch;
        !          1029:                                            d = d * 10;
        !          1030:                                        }
        !          1031:                                    }
        !          1032:                                    else
        !          1033:                                    if (ch == '.')
        !          1034:                                    {
        !          1035:                                        d = 1;
        !          1036:                                        val1 = 0;
        !          1037:                                    }
        !          1038:                                    else
        !          1039:                                    {
        !          1040:                                        if  ((ch == ':') && (opt < opt_len))
        !          1041:                                            ch = argv[arg][opt++];
        !          1042:                                        break;          /* exit loop */
        !          1043:                                    }
        !          1044:                                    ++ch_ctr;
        !          1045:                                }
        !          1046: /*                             end while (opt < opt_len) */
        !          1047: 
        !          1048:                                if  (d == 0)
        !          1049:                                    d = 1;
        !          1050:                                else
        !          1051:                                    val = (val * d) + val1;
        !          1052: 
        !          1053:                                if  (val != 0)
        !          1054:                                {
        !          1055:                                    if  (neg_flag == FLAG_ON)
        !          1056:                                        val = -(val);
        !          1057:                                    switch
        !          1058:                                        (ch)
        !          1059:                                    {
        !          1060:                                        case ('c'):
        !          1061:                                            d = d * 100;
        !          1062:                                            break;
        !          1063:                                        case ('i'):
        !          1064:                                            val = val * 254;
        !          1065:                                            d = d * 10000;
        !          1066:                                            break;
        !          1067:                                        case ('p'):
        !          1068:                                            val = val * 254;
        !          1069:                                            d = ((d * 720000) & 0x7fffffff);
        !          1070:                                            break;
        !          1071:                                        case ('P'):
        !          1072:                                            val = val * 254;
        !          1073:                                            d = ((d * 60000) & 0x7fffffff);
        !          1074:                                            break;
        !          1075:                                        default:
        !          1076:                                            d = d * 100;  /* def=cm */
        !          1077:                                            break;
        !          1078:                                    }
        !          1079: /*                                 end switch (ch) */
        !          1080: 
        !          1081:                                    if  (d != 0)  /* last chk for div
        !          1082:                                                     by 0 just in case
        !          1083:                                                     of ovflw */
        !          1084:                                    {
        !          1085:                                        xoff_num = val;
        !          1086:                                        xoff_den = d;
        !          1087:                                        proc_flag[X_OFFSET] = FLAG_ON;
        !          1088:                                    }
        !          1089:                                }
        !          1090:                                else
        !          1091:                                {
        !          1092:                                    (void)sprintf(msg,
        !          1093:                        "--ipfe:  No xOffset value specified in (%s)\n",
        !          1094:                                                  argv[arg]);
        !          1095:                                    pip_error(msg);
        !          1096:                                    err_flag = FLAG_ON;
        !          1097:                                }
        !          1098:                                --opt;  /* to parse cur ch at cmd line */
        !          1099:                                break;
        !          1100: 
        !          1101:                            case ('Y'):
        !          1102:                                if  (strlen(&(argv[arg][opt])) > 1)
        !          1103:                                    ++opt;
        !          1104:                                else
        !          1105:                                {
        !          1106:                                    ++arg;
        !          1107:                                    opt = 0;
        !          1108:                                    opt_len = strlen(argv[arg]);
        !          1109:                                }
        !          1110: /*
        !          1111:  *  yOffset:unit
        !          1112:  */
        !          1113:                                val = val1 = d = ch_ctr = 0;
        !          1114:                                neg_flag = FLAG_OFF;
        !          1115:                                while
        !          1116:                                    (opt < opt_len)
        !          1117:                                {
        !          1118:                                    ch = argv[arg][opt++];
        !          1119:                                    if  ((ch == '-') && (ch_ctr == 0))
        !          1120:                                        neg_flag = FLAG_ON;
        !          1121:                                    else
        !          1122:                                    if ((ch >= '0') && (ch <= '9'))
        !          1123:                                    {
        !          1124:                                        ch = ch - '0';
        !          1125:                                        if  (d == 0)
        !          1126:                                            val = (val * 10) + ch;
        !          1127:                                        else
        !          1128:                                        if  (d <= 1000)  /* prec = 10**(-3)
        !          1129:                                                            truncated */
        !          1130:                                        {
        !          1131:                                            val1 = (val1 * 10) + ch;
        !          1132:                                            d = d * 10;
        !          1133:                                        }
        !          1134:                                    }
        !          1135:                                    else
        !          1136:                                    if (ch == '.')
        !          1137:                                    {
        !          1138:                                        d = 1;
        !          1139:                                        val1 = 0;
        !          1140:                                    }
        !          1141:                                    else
        !          1142:                                    {
        !          1143:                                        if  ((ch == ':') && (opt < opt_len))
        !          1144:                                            ch = argv[arg][opt++];
        !          1145:                                        break;          /* exit loop */
        !          1146:                                    }
        !          1147:                                    ++ch_ctr;
        !          1148:                                }
        !          1149: /*                             end while (opt < opt_len) */
        !          1150: 
        !          1151:                                if  (d == 0)
        !          1152:                                    d = 1;
        !          1153:                                else
        !          1154:                                    val = (val * d) + val1;
        !          1155: 
        !          1156:                                if  (val != 0)
        !          1157:                                {
        !          1158:                                    if  (neg_flag == FLAG_ON)
        !          1159:                                        val = -(val);
        !          1160:                                    switch
        !          1161:                                        (ch)
        !          1162:                                    {
        !          1163:                                        case ('c'):
        !          1164:                                            d = d * 100;
        !          1165:                                            break;
        !          1166:                                        case ('i'):
        !          1167:                                            val = val * 254;
        !          1168:                                            d = d * 10000;
        !          1169:                                            break;
        !          1170:                                        case ('p'):
        !          1171:                                            val = val * 254;
        !          1172:                                            d = ((d * 720000) & 0x7fffffff);
        !          1173:                                            break;
        !          1174:                                        case ('P'):
        !          1175:                                            val = val * 254;
        !          1176:                                            d = ((d * 60000) & 0x7fffffff);
        !          1177:                                            break;
        !          1178:                                        default:
        !          1179:                                            d = d * 100;  /* def=cm */
        !          1180:                                            break;
        !          1181:                                    }
        !          1182: /*                                 end switch (ch) */
        !          1183: 
        !          1184:                                    if  (d != 0)  /* last chk for div
        !          1185:                                                     by 0 just in case
        !          1186:                                                     of ovflw */
        !          1187:                                    {
        !          1188:                                        yoff_num = val;
        !          1189:                                        yoff_den = d;
        !          1190:                                        proc_flag[Y_OFFSET] = FLAG_ON;
        !          1191:                                    }
        !          1192:                                }
        !          1193:                                else
        !          1194:                                {
        !          1195:                                    (void)sprintf(msg,
        !          1196:                        "--ipfe:  No yOffset value specified in (%s)\n",
        !          1197:                                                  argv[arg]);
        !          1198:                                    pip_error(msg);
        !          1199:                                    err_flag = FLAG_ON;
        !          1200:                                }
        !          1201:                                --opt;  /* to parse cur ch at cmd line */
        !          1202:                                break;
        !          1203: 
        !          1204:                            default:
        !          1205:                                (void)sprintf(msg,
        !          1206:                                    "--ipfe:  Invalid option in %s (%s)\n",
        !          1207:                                        argv[arg], &(argv[arg][opt]));
        !          1208:                                pip_error(msg);
        !          1209:                                err_flag = FLAG_ON;
        !          1210:                                break;
        !          1211:                        }
        !          1212:                    }
        !          1213:                    break;
        !          1214: 
        !          1215:                case ('['):
        !          1216:                    break;
        !          1217: 
        !          1218:                case ('>'):
        !          1219:                    break;
        !          1220: 
        !          1221:                default:
        !          1222: /*
        !          1223:  *  the current arg is an input file; try to open it
        !          1224:  */
        !          1225:                    if  (input_indx < MX_NO_INFILES)
        !          1226:                    {
        !          1227:                        _fmode = BINARY_FILE;
        !          1228:                        workfile = fopen(argv[arg], "r");
        !          1229:                        if  (workfile == NULL)
        !          1230:                        {
        !          1231:                            (void)sprintf(msg, 
        !          1232:                                    "--ipfe:  Error opening input file: %s\n",
        !          1233:                                    argv[arg]);
        !          1234:                            pip_error(msg);
        !          1235:                            err_flag = FLAG_ON;
        !          1236:                        }
        !          1237:                        else
        !          1238:                        {
        !          1239: /*
        !          1240:  *  check for valid hdr
        !          1241:  */
        !          1242:                            retcd = get_ip_hdr(workfile, argv[arg]);
        !          1243:                            if  (retcd == OK)
        !          1244:                            {
        !          1245:                                (void)strcpy(input_name[input_indx],
        !          1246:                                             argv[arg]);
        !          1247: /*
        !          1248:  *  check for page range
        !          1249:  */
        !          1250:                                if  (((arg + 1) < argc) &&
        !          1251:                                     ((argv[arg+1][0] == '[') ||
        !          1252:                                      (argv[arg+1][0] == '+') ||
        !          1253:                                      (argv[arg+1][0] == '#')))
        !          1254:                                {
        !          1255:                                    ++arg;
        !          1256:                                    get_pagerange(arg, argv);
        !          1257:                                }
        !          1258:                                else
        !          1259:                                    merge_pg[input_indx][0] = (-1);
        !          1260:                                infile_flag[input_indx] = FLAG_ON;
        !          1261:                                ++input_indx;
        !          1262:                                ++num_infiles;
        !          1263:                            }
        !          1264:                            else
        !          1265:                                err_flag = FLAG_ON;
        !          1266:                            (void)fclose(workfile);
        !          1267:                        }
        !          1268:                    }
        !          1269:                    else
        !          1270:                    {
        !          1271:                        (void)sprintf(msg,
        !          1272:        "--ipfe:  Maximum # of input files = %d; File:  %s not processed\n",
        !          1273:                                MX_NO_INFILES, argv[arg]);
        !          1274:                        pip_error(msg);
        !          1275:                        err_flag = FLAG_ON;
        !          1276:                    }
        !          1277:                    break;
        !          1278:            }
        !          1279: /*         end switch (argv[arg][0]) */
        !          1280:        }
        !          1281: /*     end for (arg=1; arg < argc; arg++) */
        !          1282:        if  (err_flag == FLAG_ON)
        !          1283:            pip_error("\n");
        !          1284: 
        !          1285: }
        !          1286: 
        !          1287: 
        !          1288: /****************************************************************
        !          1289:  *
        !          1290:  *     int get_ip_hdr(file, filename):
        !          1291:  *     int get_ip_hdr: get the ip_hdr from the specified
        !          1292:  *                             file into a work_buf & return a
        !          1293:  *                             ptr to the buf
        !          1294:  *
        !          1295:  ****************************************************************/
        !          1296: 
        !          1297: int get_ip_hdr(file, filename)
        !          1298: 
        !          1299:        FILE    *file;
        !          1300:        char    *filename;
        !          1301: {
        !          1302:        int     i, retcd, hdr_flag;
        !          1303:        int     c;              /* must be int for stdio EOF compare */
        !          1304:        char    *ptr, msg[128];
        !          1305: 
        !          1306: 
        !          1307:        retcd = OK;
        !          1308: /*
        !          1309:  *  get the header
        !          1310:  */
        !          1311:        ptr = hdr_workbuf;
        !          1312:        hdr_flag = FLAG_OFF;
        !          1313:        for (i=0; i < MX_HDR_BUFLEN; i++)
        !          1314:        {
        !          1315:            c = getc_testeof(file, filename);  /* get a char,          */
        !          1316:            *ptr++ = c;                 /*   & stick it in the buffer  */
        !          1317:            if  (c == ' ')              /* if c=ip_hdr_terminate_char, */
        !          1318:            {
        !          1319:                hdr_flag = FLAG_ON;     /*   set hdr_ok flag,          */
        !          1320:                break;                  /*   & exit the loop           */
        !          1321:            }
        !          1322:        }
        !          1323:        *ptr = '\0';
        !          1324: /*
        !          1325:  *  ... & check its validity
        !          1326:  */
        !          1327:        if  (hdr_flag == FLAG_OFF)
        !          1328:        {
        !          1329:            (void)sprintf(msg, "--ipfe:  Hdr length > %d chars in file: %s\n",
        !          1330:                    MX_HDR_BUFLEN, filename);
        !          1331:            pip_error(msg);
        !          1332:            retcd = ERROR;
        !          1333:        }
        !          1334:        if  (mstrncmp(hdr_workbuf, IP_Header, IP_HDR_CHKLEN) != 0)
        !          1335:        {
        !          1336:            (void)sprintf(msg, "--ipfe:  INVALID HEADER! in file: %s\n",
        !          1337:                          filename);
        !          1338:            pip_error(msg);
        !          1339:            retcd = ERROR;
        !          1340:        }
        !          1341: 
        !          1342: return(retcd);
        !          1343: }
        !          1344: 
        !          1345: 
        !          1346: /****************************************************************
        !          1347:  *
        !          1348:  *     get_pagerange(arg, argv):
        !          1349:  *     get_pagerange:  get cmd_line page range argument
        !          1350:  *                             for current input_indx from
        !          1351:  *                             specified argument
        !          1352:  *
        !          1353:  ****************************************************************/
        !          1354: 
        !          1355: get_pagerange(arg, argv)
        !          1356: 
        !          1357:        int     arg;
        !          1358:        char    *argv[];
        !          1359: {
        !          1360:        int     i, opt, opt_len, d, val, val1, lp_ctr, ch_ctr,
        !          1361:                prv_mpg_num, err_flag, neg_flag;
        !          1362:        char    ch, nc;
        !          1363:        char    msg[128], name_buf[128];
        !          1364: 
        !          1365: 
        !          1366:        merge_indx = val = 0;
        !          1367:        prv_mpg_num = 0;
        !          1368:        opt_len = strlen(argv[arg]);
        !          1369:        err_flag = FLAG_OFF;
        !          1370:        for (opt=1; ((opt < opt_len) && (err_flag == FLAG_OFF)); opt++)
        !          1371:        {
        !          1372:            switch
        !          1373:                (argv[arg][opt])
        !          1374:            {
        !          1375:                case ('-'):
        !          1376:                    merge_pg[input_indx][merge_indx] = (-1);
        !          1377:                    ++merge_indx;
        !          1378:                    break;
        !          1379: /*
        !          1380:  *  all of the following can just be ignored at this level
        !          1381:  */
        !          1382:                case (','):
        !          1383:                case (']'):
        !          1384:                case (')'):
        !          1385:                case (SPC):
        !          1386:                case ('\n'):
        !          1387:                    break;
        !          1388: 
        !          1389:                case ('['):
        !          1390:                case ('+'):
        !          1391: /*
        !          1392:  *  overlay filename
        !          1393:  */
        !          1394:                    if  (strlen(&(argv[arg][opt])) > 1)
        !          1395:                    {
        !          1396:                        ch = '\0';
        !          1397:                        i = 0;
        !          1398:                        ++opt;
        !          1399:                        while
        !          1400:                            (opt < opt_len)
        !          1401:                        {
        !          1402:                            ch = argv[arg][opt];
        !          1403:                            if  ((ch == ':') || (ch == '(') || (ch == '@') ||
        !          1404:                                 (ch == '+'))
        !          1405:                            {
        !          1406:                                --opt;      /* reparse opt at switch level */
        !          1407:                                break;
        !          1408:                            }
        !          1409:                            else
        !          1410:                            if  ((ch == ']') || (ch == ','))
        !          1411:                                break;      /* don't bother reparsing */
        !          1412:                            else
        !          1413:                            {
        !          1414:                                name_buf[i++] = ch;
        !          1415:                                ++opt;
        !          1416:                            }
        !          1417:                        }
        !          1418:                        name_buf[i] = '\0';
        !          1419:                        if  (i > 0)
        !          1420:                        {
        !          1421:                            if  (merge_indx == 0)
        !          1422:                            {
        !          1423:                                merge_pg[input_indx][0] = 1;
        !          1424:                                ++merge_indx;
        !          1425:                            }
        !          1426:                            if  (merge_pg[input_indx][(merge_indx-1)] > 0)
        !          1427:                            {
        !          1428:                                if  (ovly_pg[input_indx][(merge_indx-1)] !=
        !          1429:                                        (-1))
        !          1430:                                {
        !          1431:                                    merge_pg[input_indx][merge_indx] =
        !          1432:                                        merge_pg[input_indx][(merge_indx-1)];
        !          1433:                                    ++merge_indx;
        !          1434:                                }
        !          1435:                                ovly_pg[input_indx][(merge_indx-1)] =
        !          1436:                                    ovly_indx;
        !          1437:                                (void)strcpy(ovly_fname[ovly_indx], name_buf);
        !          1438:                                ++ovly_indx;
        !          1439:                            }
        !          1440:                            else
        !          1441:                                err_flag = FLAG_ON;
        !          1442:                        }
        !          1443:                        else
        !          1444:                            err_flag = FLAG_ON;
        !          1445:                    }
        !          1446:                    else
        !          1447:                        err_flag = FLAG_ON;
        !          1448:                    break;
        !          1449: 
        !          1450:                case (':'):
        !          1451: /*
        !          1452:  *  overlay pagenum
        !          1453:  */
        !          1454:                    if  ((ovly_indx == 0) ||
        !          1455:                         (ovly_pg[input_indx][merge_indx-1] == (-1)) ||
        !          1456:                         (ovly_pgnum[ovly_indx-1] != 0))
        !          1457:                        err_flag = FLAG_ON;
        !          1458:                    else
        !          1459:                    if  (strlen(&(argv[arg][opt])) > 1)
        !          1460:                    {
        !          1461:                        val = 0;
        !          1462:                        ++opt;
        !          1463:                        while
        !          1464:                            (opt < opt_len)
        !          1465:                        {
        !          1466:                            ch = argv[arg][opt];
        !          1467:                            if  ((ch >= '0') && (ch <= '9'))
        !          1468:                            {
        !          1469:                                ch = ch - '0';
        !          1470:                                val = (val * 10) + ch;
        !          1471:                                ++opt;
        !          1472:                            }
        !          1473:                            else
        !          1474:                            {
        !          1475:                                --opt;  /* reparse everything else at the
        !          1476:                                           switch level */
        !          1477:                                break;
        !          1478:                            }
        !          1479:                        }
        !          1480: /*
        !          1481:  *  if the pagenum is good, process it
        !          1482:  */
        !          1483:                        if  (val > 0)
        !          1484:                            ovly_pgnum[ovly_indx-1] = val;
        !          1485:                    }
        !          1486:                    else
        !          1487:                        err_flag = FLAG_ON;
        !          1488:                    break;
        !          1489: 
        !          1490:                case ('('):
        !          1491:                case ('@'):
        !          1492: /*
        !          1493:  *  overlay page offset
        !          1494:  */
        !          1495:                    if  ((ovly_indx == 0) ||
        !          1496:                         (ovly_pg[input_indx][merge_indx-1] == (-1)))
        !          1497:                        err_flag = FLAG_ON;
        !          1498:                    else
        !          1499:                    if  (strlen(&(argv[arg][opt])) > 1)
        !          1500:                    {
        !          1501:                        val = val1 = d = lp_ctr = ch_ctr = 0;
        !          1502:                        neg_flag = FLAG_OFF;
        !          1503:                        ++opt;
        !          1504:                        while
        !          1505:                            ((opt < opt_len) && (lp_ctr < 2))
        !          1506:                        {
        !          1507:                            ch = argv[arg][opt++];
        !          1508:                            if  ((ch == '-') && (ch_ctr == 0))
        !          1509:                                neg_flag = FLAG_ON;
        !          1510:                            else
        !          1511:                            if ((ch >= '0') && (ch <= '9'))
        !          1512:                            {
        !          1513:                                ch = ch - '0';
        !          1514:                                if  (d == 0)
        !          1515:                                    val = (val * 10) + ch;
        !          1516:                                else
        !          1517:                                if  (d <= 1000)  /* precision = 10**(-3)
        !          1518:                                                    truncated */
        !          1519:                                {
        !          1520:                                    val1 = (val1 * 10) + ch;
        !          1521:                                    d = d * 10;
        !          1522:                                }
        !          1523:                            }
        !          1524:                            else
        !          1525:                            if (ch == '.')
        !          1526:                            {
        !          1527:                                d = 1;
        !          1528:                                val1 = 0;
        !          1529:                            }
        !          1530:                            else
        !          1531:                            {
        !          1532:                                if  (d != 0)
        !          1533:                                    val = (val * d) + val1;
        !          1534:                                else
        !          1535:                                    d = 1;
        !          1536:                                if  (val != 0)
        !          1537:                                {
        !          1538:                                    if  (neg_flag == FLAG_ON)
        !          1539:                                        val = -(val);
        !          1540:                                    switch
        !          1541:                                        (ch)
        !          1542:                                    {
        !          1543:                                        case ('c'):
        !          1544:                                            d = d * 100;
        !          1545:                                            break;
        !          1546:                                        case ('i'):
        !          1547:                                            val = val * 254;
        !          1548:                                            d = d * 10000;
        !          1549:                                            break;
        !          1550:                                        case ('p'):
        !          1551:                                            val = val * 254;
        !          1552:                                            d = ((d * 720000) & 0x7fffffff);
        !          1553:                                            break;
        !          1554:                                        case ('P'):
        !          1555:                                            val = val * 254;
        !          1556:                                            d = ((d * 60000) & 0x7fffffff);
        !          1557:                                            break;
        !          1558:                                        default:
        !          1559:                                            d = d * 100;  /* assume cm */
        !          1560:                                            break;
        !          1561:                                    }
        !          1562:                                    if  (d != 0)  /* last chk for div by 0
        !          1563:                                                     just in case of ovflw */
        !          1564:                                    {
        !          1565:                                        ovly_num[lp_ctr][ovly_indx-1] = val;
        !          1566:                                        ovly_den[lp_ctr][ovly_indx-1] = d;
        !          1567:                                    }
        !          1568:                                    if  (lp_ctr == 0)
        !          1569:                                    {
        !          1570:                                        nc = argv[arg][opt];
        !          1571:                                        if  (((nc < '0') && (nc != '-')) ||
        !          1572:                                             (nc > '9'))
        !          1573:                                            ++opt; /* assume only 1 separator
        !          1574:                                                      after scale char */
        !          1575:                                    }
        !          1576:                                }
        !          1577:                                val = d = 0;
        !          1578:                                neg_flag = FLAG_OFF;
        !          1579:                                ++lp_ctr;
        !          1580:                                ch_ctr = (-1);
        !          1581:                                if  ((lp_ctr == 2) &&
        !          1582:                                     ((ch == '+') || (ch == '[') ||
        !          1583:                                      (ch == '-')))
        !          1584:                                    --opt;      /* reparse at switch level */
        !          1585:                            }
        !          1586:                            ++ch_ctr;
        !          1587:                        }
        !          1588:                        --opt;      /* to undo the automatic incr above */
        !          1589:                    }
        !          1590:                    else
        !          1591:                        err_flag = FLAG_ON;
        !          1592:                    break;
        !          1593: 
        !          1594:                default:
        !          1595: /*
        !          1596:  *  current opt should be a pageNum
        !          1597:  */
        !          1598:                    val = 0;
        !          1599:                    while
        !          1600:                        (opt < opt_len)
        !          1601:                    {
        !          1602:                        ch = argv[arg][opt];
        !          1603:                        if  ((ch >= '0') && (ch <= '9'))
        !          1604:                        {
        !          1605:                            ch = ch - '0';
        !          1606:                            val = (val * 10) + ch;
        !          1607:                            ++opt;
        !          1608:                        }
        !          1609:                        else
        !          1610:                        if  ((ch == '-') || (ch == ',') || (ch == '[') ||
        !          1611:                             (ch == ']') || (ch == '+'))
        !          1612:                        {
        !          1613:                            --opt;      /* reparse opt at switch level */
        !          1614:                            break;
        !          1615:                        }
        !          1616:                        else
        !          1617:                        if  ((ch == SPC) || (ch == '\n'))
        !          1618:                            break;      /* don't bother to reparse */
        !          1619:                        else
        !          1620:                        {
        !          1621:                            err_flag = FLAG_ON;
        !          1622:                            break;
        !          1623:                        }
        !          1624:                    }
        !          1625: /*
        !          1626:  *  if the val is good, process it
        !          1627:  */
        !          1628:                    if  (val > prv_mpg_num)
        !          1629:                    {
        !          1630:                        merge_pg[input_indx][merge_indx] = val;
        !          1631:                        prv_mpg_num = val;
        !          1632:                        ++merge_indx;
        !          1633:                    }
        !          1634:                    else
        !          1635:                        err_flag = FLAG_ON;
        !          1636:                    break;
        !          1637:            }
        !          1638: /*         end of switch (argv[arg][opt]) */
        !          1639: 
        !          1640:            if  (err_flag == FLAG_ON)
        !          1641:            {
        !          1642:                (void)sprintf(msg,
        !          1643:                    "--ipfe:  Invalid pagerange specification in %s (%s)\n",
        !          1644:                                argv[arg], &(argv[arg][opt]));
        !          1645:                pip_error(msg);
        !          1646:                exit_status = 5;
        !          1647:            }
        !          1648:        }
        !          1649: /*     end of for (opt=1; ((opt < opt_len) && (err_flag == FLAG_OFF));
        !          1650:                    ++ opt) */
        !          1651: 
        !          1652: }
        !          1653: 
        !          1654: 
        !          1655: /****************************************************************
        !          1656:  *
        !          1657:  *     int getc_testeof(file, filename):
        !          1658:  *     int getc_testeof:       get a char from input file;
        !          1659:  *                             if we get an EOF here,
        !          1660:  *                                 it's an error;
        !          1661:  *                             else,
        !          1662:  *                                 return the char as an int
        !          1663:  *
        !          1664:  ****************************************************************/
        !          1665: 
        !          1666: int getc_testeof(file, filename)
        !          1667: 
        !          1668:        FILE    *file;
        !          1669:        char    *filename;
        !          1670: {
        !          1671:        int     val;
        !          1672:        char    msg[128];
        !          1673: 
        !          1674: 
        !          1675:        val = mgetc(file);
        !          1676:        if  (feof(file))
        !          1677:        {
        !          1678:            (void)sprintf(msg, "\nUnexpected EOF! in file:  %s\n", filename);
        !          1679:            pip_error(msg);
        !          1680:            longjmp(next_file, 1);
        !          1681:        }
        !          1682: 
        !          1683: return(val);
        !          1684: }
        !          1685: 
        !          1686: 
        !          1687: /****************************************************************
        !          1688:  *
        !          1689:  *     indent(cnt, file):
        !          1690:  *     indent:         put <cnt> spcs to specified file
        !          1691:  *
        !          1692:  ****************************************************************/
        !          1693: 
        !          1694: indent(cnt, file)
        !          1695: 
        !          1696:        FILE    *file;
        !          1697:        int     cnt;
        !          1698: {
        !          1699:        if  (file != NULL)
        !          1700:        {
        !          1701:            if  ((file == propfile) && (cnt > 0))
        !          1702:                cur_col = cur_col + cnt;
        !          1703: 
        !          1704:            while
        !          1705:                (cnt-- > 0)
        !          1706:            {
        !          1707:                putc(' ', file);
        !          1708:            }
        !          1709:        }
        !          1710: }
        !          1711: 
        !          1712: 
        !          1713: /****************************************************************
        !          1714:  *
        !          1715:  *     init:
        !          1716:  *     init_ipfe:              initialization
        !          1717:  *
        !          1718:  ****************************************************************/
        !          1719: 
        !          1720: init_ipfe()
        !          1721: {
        !          1722:        int     i, j;
        !          1723: 
        !          1724: 
        !          1725:        abort_flag = debug_flag = FLAG_OFF;
        !          1726:        exit_status = 0;
        !          1727:        ovly_flag = FLAG_OFF;
        !          1728:        frstpg_flag = FLAG_OFF;
        !          1729:        num_infiles = out_filnum = 0;
        !          1730:        input_indx = output_indx = sif_indx = 0;
        !          1731:        num_aliases = 0;
        !          1732:        alias_indx = 0;
        !          1733:        prop_level = 0;
        !          1734:        hdr_len = 0;
        !          1735:        pos = in_offset = 0;
        !          1736:        block_indx = 0;
        !          1737:        block_flag = FLAG_OFF;
        !          1738:        out_beg_offset[block_indx] = 0;
        !          1739:        tnum_blocks = tnum_pages = tnum_sifs = 0;
        !          1740:        for (i=0; i < NUM_FNS; i++)
        !          1741:            proc_flag[i] = FLAG_OFF;
        !          1742:        chap_type = chap_val = 0;
        !          1743:        ipwrite_flag = FLAG_ON;
        !          1744:        merge_indx = ovly_indx = 0;
        !          1745: 
        !          1746:        for (i=0; i < MX_NO_INFILES; i++)
        !          1747:        {
        !          1748:            merge_pg[i][0] = (-1);      /* init to all pages */
        !          1749:            ovly_pg[i][0] = (-1);       /* init to no overlay */
        !          1750:            for (j=1; j < MX_NO_MPG_ENTRIES; j++)
        !          1751:            {
        !          1752:                merge_pg[i][j] = 0;
        !          1753:                ovly_pg[i][j] = (-1);
        !          1754:            }
        !          1755:        }
        !          1756: 
        !          1757:        for (i=0; i < MX_BLOCK_DEPTH; i++)
        !          1758:            blk_num_bytes[i] = 0;
        !          1759:        pg_num_bytes = 0;
        !          1760: 
        !          1761:        for (i=0; i < MX_NO_INFILES; i++)
        !          1762:            infile_flag[i] = 0;
        !          1763: 
        !          1764:        outputname = propfname = 0;
        !          1765: 
        !          1766: /*
        !          1767:  *  make the beginBlock & endBlock names upper case
        !          1768:  */
        !          1769:        op_names[OP_beginBlock] = "BEGIN";
        !          1770:        op_names[OP_endBlock] = "END";
        !          1771: 
        !          1772: }
        !          1773: 
        !          1774: 
        !          1775: /****************************************************************
        !          1776:  *
        !          1777:  *     init_proc_file: initialize proc_file() loop
        !          1778:  *
        !          1779:  ****************************************************************/
        !          1780: 
        !          1781: init_proc_file()
        !          1782: {
        !          1783: 
        !          1784:        sif_indx = 0;
        !          1785:        cur_indent = cur_col = 0;
        !          1786:        in_offset = 0;
        !          1787:        num_blocks = num_pages = num_sifs = 0;
        !          1788:        preamble_expected = FLAG_OFF;
        !          1789:        merge_indx = 0;
        !          1790:        bproc_indx = bop_indx = 0;
        !          1791:        bproc_flag = bop_flag = FLAG_OFF;
        !          1792:        ipwrite_flag = FLAG_ON;
        !          1793: 
        !          1794: }
        !          1795: 
        !          1796: 
        !          1797: /****************************************************************
        !          1798:  *
        !          1799:  *     init1:
        !          1800:  *     init1_ipfe:             initialization after getting cmd args
        !          1801:  *
        !          1802:  ****************************************************************/
        !          1803: 
        !          1804: init1_ipfe()
        !          1805: 
        !          1806: {
        !          1807:        int     i, tval, procflag, exit_flag;
        !          1808:        char    msg[128];
        !          1809: 
        !          1810: 
        !          1811:        if  (num_infiles == 0)  /* input_name req'd for now */
        !          1812:            Usage();
        !          1813:        else
        !          1814:        {
        !          1815: /*
        !          1816:  *  split the 1st input_name into input_fnm & input_ext
        !          1817:  */
        !          1818:                i = mrstrichr(input_name[0], '.');
        !          1819:                if  (i != (-1))
        !          1820:                {
        !          1821:                    (void)mstrncpy(input_fnm, input_name[0], i);
        !          1822:                    (void)strcpy(input_ext, (input_name[0] + i));
        !          1823:                }
        !          1824:                else
        !          1825:                    (void)strcpy(input_fnm, input_name[0]);
        !          1826: /*
        !          1827:  *  Open properties file
        !          1828:  */
        !          1829:            if  (proc_flag[PROPERTIES] == FLAG_ON)
        !          1830:                open_propfile();
        !          1831: /*
        !          1832:  *  Tell about rotate, xOffset, yOffset, binding offset, duplex, and scale
        !          1833:  */
        !          1834:            if  ((proc_flag[LANDSCAPE] == FLAG_ON) ||
        !          1835:                 (proc_flag[ROTATE] == FLAG_ON))
        !          1836:            {
        !          1837:                (void)sprintf(msg, "--ipfe:  Rotate %d degrees\n",
        !          1838:                                rot_deg);
        !          1839:                pip_error(msg);
        !          1840:            }
        !          1841:            if  (proc_flag[X_OFFSET] == FLAG_ON)
        !          1842:            {
        !          1843:                (void)sprintf(msg, "--ipfe:  xOffset = %ld/%ld meters\n",
        !          1844:                                xoff_num, xoff_den);
        !          1845:                pip_error(msg);
        !          1846:            }
        !          1847:            if  (proc_flag[Y_OFFSET] == FLAG_ON)
        !          1848:            {
        !          1849:                (void)sprintf(msg, "--ipfe:  yOffset = %ld/%ld meters\n",
        !          1850:                                yoff_num, yoff_den);
        !          1851:                pip_error(msg);
        !          1852:            }
        !          1853:            if  (proc_flag[BINDING_OFFSET] == FLAG_ON)
        !          1854:            {
        !          1855:                (void)sprintf(msg,
        !          1856:                        "--ipfe:  Binding offset = %ld/%ld meters\n",
        !          1857:                        boff_num, boff_den);
        !          1858:                pip_error(msg);
        !          1859:                if  (proc_flag[DUPLEX] == FLAG_ON)
        !          1860:                    pip_error("--ipfe:  Duplex processing set\n");
        !          1861:            }
        !          1862:            if  (proc_flag[SCALE] == FLAG_ON)
        !          1863:            {
        !          1864:                (void)sprintf(msg, "--ipfe:  Scale = %ld/%ld\n",
        !          1865:                                scale_num, scale_den);
        !          1866:                pip_error(msg);
        !          1867:            }
        !          1868: /*
        !          1869:  *  Tell about chapterizing
        !          1870:  */
        !          1871:            if  (proc_flag[CHAPTERIZE] == FLAG_ON)
        !          1872:            {
        !          1873:                (void)sprintf(msg, "--ipfe:  Chapterize every %d ", chap_val);
        !          1874:                pip_error(msg);
        !          1875:                switch
        !          1876:                    (chap_type)
        !          1877:                {
        !          1878:                    case (CH_PAGES):
        !          1879:                        pip_error("pages");
        !          1880:                        break;
        !          1881:                    case (CH_KBYTES):
        !          1882:                        (void)sprintf(msg, "bytes (%d kbytes)",
        !          1883:                                (chap_val / 1024));
        !          1884:                        pip_error(msg);
        !          1885:                        break;
        !          1886:                    case (CH_MBYTES):
        !          1887:                        (void)sprintf(msg, "bytes (%d mbytes)",
        !          1888:                                (chap_val / 1048576));
        !          1889:                        pip_error(msg);
        !          1890:                        break;
        !          1891:                }
        !          1892:                pip_error("\n");
        !          1893:            }
        !          1894: /*
        !          1895:  *  Show any aliases
        !          1896:  */
        !          1897:            for (i=0; i < num_aliases; i++)
        !          1898:            {
        !          1899:                if  (i == 0)
        !          1900:                    pip_error("--ipfe:  ");
        !          1901:                else
        !          1902:                    pip_error("--       ");
        !          1903:                (void)sprintf(msg, "Alias: %s=%s\n",
        !          1904:                              alias_ref[i], alias_act[i]);
        !          1905:                pip_error(msg);
        !          1906:            }
        !          1907: 
        !          1908:            if  (num_infiles > 1)
        !          1909:                proc_flag[CONCAT] = FLAG_ON;
        !          1910: 
        !          1911:            if  (proc_flag[DEBUG] == FLAG_ON)
        !          1912:                off_indent = 10;
        !          1913:            else
        !          1914:                off_indent = 0;
        !          1915: 
        !          1916: /*
        !          1917:  *  For now, IF the properties option flag is SET AND there is no output
        !          1918:  *  file specified,
        !          1919:  *  THEN set the environment for properties only (don't open output)
        !          1920:  */
        !          1921:            if  ((proc_flag[PROPERTIES] == FLAG_ON) &&
        !          1922:                 (outputname == 0))
        !          1923:                ;       /* process properties only; no output */
        !          1924:            else
        !          1925:            {
        !          1926: /*
        !          1927:  *  open the output file
        !          1928:  */
        !          1929:                if  (outputname == 0)
        !          1930:                {
        !          1931: /*
        !          1932:  *  construct a default output filename by concatenating ".ip" to the
        !          1933:  *    fnm component of the 1st input filename, making sure the resulting
        !          1934:  *    filename doesn't already exist; if it does exist, append "1" to
        !          1935:  *    the fnm, then "2" to the fnm, etc. until the filename doesn't exist
        !          1936:  */
        !          1937:                    tval = 0;
        !          1938:                    exit_flag = procflag = FLAG_OFF;
        !          1939:                    while
        !          1940:                        (exit_flag == FLAG_OFF)
        !          1941:                    {
        !          1942:                        (void)strcpy(work_fname, input_fnm);
        !          1943:                        if  (procflag == FLAG_ON)
        !          1944:                            (void)strcat(work_fname, itostr(tval));
        !          1945:                        (void)strcat(work_fname, ".ip");
        !          1946:                        _fmode = BINARY_FILE;
        !          1947:                        workfile = fopen(work_fname, "r");
        !          1948:                        if  (workfile == NULL)
        !          1949:                        {
        !          1950:                            outputname = work_fname;
        !          1951:                            exit_flag = FLAG_ON;
        !          1952:                        }
        !          1953:                        else
        !          1954:                        {
        !          1955:                            (void)fclose(workfile);
        !          1956:                            ++tval;
        !          1957:                            procflag = FLAG_ON;
        !          1958:                        }
        !          1959:                    }
        !          1960:                }
        !          1961: 
        !          1962:                (void)strcpy(output_name, outputname);
        !          1963:                outputname = output_name;
        !          1964:                i = mrstrichr(outputname, '.');
        !          1965:                if  (i != (-1))
        !          1966:                {
        !          1967:                    (void)mstrncpy(output_fnm, outputname, i);
        !          1968:                    (void)strcpy(output_ext, (outputname + i));
        !          1969:                }
        !          1970:                else
        !          1971:                    (void)strcpy(output_fnm, outputname);
        !          1972: 
        !          1973:                if  (proc_flag[CHAPTERIZE] == FLAG_ON)
        !          1974:                {
        !          1975:                    (void)strcpy(output_name, output_fnm);
        !          1976:                    out_filnum = 1;
        !          1977:                    (void)strcat(output_name, itostr(out_filnum));
        !          1978:                    (void)strcat(output_name, output_ext);
        !          1979:                }
        !          1980: 
        !          1981:                open_output();
        !          1982:            }
        !          1983:        }
        !          1984: 
        !          1985: }
        !          1986: 
        !          1987: 
        !          1988: /****************************************************************
        !          1989:  *
        !          1990:  *     iocopyn(length, file, filename):
        !          1991:  *     iocopyn:                copy <length> bytes from specified
        !          1992:  *                             file to output, checking for
        !          1993:  *                             unexpected EOF
        !          1994:  *
        !          1995:  ****************************************************************/
        !          1996: 
        !          1997: iocopyn(length, file, filename)
        !          1998: 
        !          1999:        FILE    *file;
        !          2000:        long    length;
        !          2001:        char    *filename;
        !          2002: {
        !          2003:     
        !          2004:        while
        !          2005:            (length-- > 0)
        !          2006:        {
        !          2007:            ip_putc(getc_testeof(file, filename));
        !          2008:        }
        !          2009: }
        !          2010: 
        !          2011: 
        !          2012: /****************************************************************
        !          2013:  *
        !          2014:  *     iogetn(length, file, filename, buf):
        !          2015:  *     iogetn:         read <length> bytes from specified
        !          2016:  *                             file into specified buf, checking
        !          2017:  *                             for unexpected EOF
        !          2018:  *                             -- throw the bytes away, for now
        !          2019:  *
        !          2020:  ****************************************************************/
        !          2021: 
        !          2022: iogetn(length, file, filename, buf)
        !          2023: 
        !          2024:        FILE    *file;
        !          2025:        long    length;
        !          2026:        char    *filename, *buf;
        !          2027: {
        !          2028:        while
        !          2029:            (length-- > 0)
        !          2030:        {
        !          2031:            *buf++ = getc_testeof(file, filename);
        !          2032:        }
        !          2033:        *buf = '\0';
        !          2034: }
        !          2035: 
        !          2036: 
        !          2037: /****************************************************************
        !          2038:  *
        !          2039:  *     ioputn(length, buf):
        !          2040:  *     ioputn:         put <length> bytes from specified
        !          2041:  *                             buf to output
        !          2042:  *
        !          2043:  ****************************************************************/
        !          2044: 
        !          2045: ioputn(length, buf)
        !          2046: 
        !          2047:        long    length;
        !          2048:        char    *buf;
        !          2049: {
        !          2050:        while
        !          2051:            (length-- > 0)
        !          2052:        {
        !          2053:            ip_putc(*buf++);
        !          2054:        }
        !          2055: }
        !          2056: 
        !          2057: 
        !          2058: /****************************************************************
        !          2059:  *
        !          2060:  *     ioreadn(length, file, filename):
        !          2061:  *     ioreadn:                read <length> bytes from specified
        !          2062:  *                             file, checking for unexpected EOF
        !          2063:  *                             -- throw the bytes away, for now
        !          2064:  *
        !          2065:  ****************************************************************/
        !          2066: 
        !          2067: ioreadn(length, file, filename)
        !          2068: 
        !          2069:        FILE    *file;
        !          2070:        long    length;
        !          2071:        char    *filename;
        !          2072: {
        !          2073:     
        !          2074:        while
        !          2075:            (length-- > 0)
        !          2076:        {
        !          2077:            (void)getc_testeof(file, filename); /* throw it away */
        !          2078:        }
        !          2079: }
        !          2080: 
        !          2081: 
        !          2082: /****************************************************************
        !          2083:  *
        !          2084:  *     ip_putc(ch):
        !          2085:  *     ip_putc:                put char to (interpress) output &
        !          2086:  *                             bump out_offset
        !          2087:  *
        !          2088:  ****************************************************************/
        !          2089: 
        !          2090: ip_putc(ch)
        !          2091: 
        !          2092:        char    ch;
        !          2093: {
        !          2094:        if  ((output != NULL) && (ipwrite_flag == FLAG_ON))
        !          2095:        {
        !          2096:            putc(ch, output);
        !          2097:            ++out_offset;
        !          2098:        }
        !          2099: }
        !          2100: 
        !          2101: 
        !          2102: 
        !          2103: /****************************************************************
        !          2104:  *
        !          2105:  *     ip_puts(string):
        !          2106:  *     ip_puts:                put string to (interpress) output
        !          2107:  *                             & add strlen(string) to out_offset
        !          2108:  *
        !          2109:  ****************************************************************/
        !          2110: 
        !          2111: ip_puts(string)
        !          2112: 
        !          2113:        char    *string;
        !          2114: {
        !          2115:        if  ((output != NULL) && (ipwrite_flag == FLAG_ON))
        !          2116:        {
        !          2117:            fprintf(output, string);
        !          2118:            out_offset = out_offset + strlen(string);
        !          2119:        }
        !          2120: 
        !          2121: }
        !          2122: 
        !          2123: 
        !          2124: /****************************************************************
        !          2125:  *
        !          2126:  *     char *itostr(ival):
        !          2127:  *     char *itostr:           cvt int to ascii string; return ptr
        !          2128:  *
        !          2129:  ****************************************************************/
        !          2130: 
        !          2131: char *itostr(ival)
        !          2132: 
        !          2133:        int     ival;
        !          2134: {
        !          2135:        int     i, digit, digit_flag;
        !          2136:        char    num_buf[17], *s;
        !          2137: 
        !          2138: 
        !          2139:        s = num_buf;
        !          2140:        digit_flag = FLAG_OFF;
        !          2141:        for (i=10000; i > 0; i=i/10)
        !          2142:        {
        !          2143:            digit = ival / i;
        !          2144:            if  ((digit == 0) && (digit_flag == FLAG_OFF) && (i > 1))
        !          2145:                ;       /* do nothing */
        !          2146:            else
        !          2147:            {
        !          2148:                *s = digit + '0';
        !          2149:                ++s;
        !          2150:                ival = ival - (digit * i);
        !          2151:                digit_flag = FLAG_ON;
        !          2152:            }
        !          2153:        }
        !          2154:        *s = '\0';
        !          2155: 
        !          2156: return(num_buf);
        !          2157: }
        !          2158: 
        !          2159: 
        !          2160: /****************************************************************
        !          2161:  *
        !          2162:  *     mgetc(file):
        !          2163:  *     mgetc:          get char from input & bump
        !          2164:  *                             appropriate counters
        !          2165:  *
        !          2166:  ****************************************************************/
        !          2167: 
        !          2168: int mgetc(file)
        !          2169: 
        !          2170:        FILE    *file;
        !          2171: {
        !          2172:        int     val;
        !          2173: 
        !          2174: 
        !          2175:        val = getc(file);
        !          2176:        if  (!(feof(file)))
        !          2177:        {
        !          2178:            val = val & 0xff;
        !          2179:            ++in_offset;
        !          2180:            ++blk_num_bytes[block_indx];
        !          2181:            ++pg_num_bytes;
        !          2182:        }
        !          2183: 
        !          2184: return(val);
        !          2185: }
        !          2186: 
        !          2187: 
        !          2188: /****************************************************************
        !          2189:  *
        !          2190:  *     mputc_prop(ch):
        !          2191:  *     mputc_prop:             put char to propfile
        !          2192:  *
        !          2193:  ****************************************************************/
        !          2194: 
        !          2195: mputc_prop(ch)
        !          2196: {
        !          2197:        if  ((propfile != NULL) && (ovly_flag == FLAG_OFF))
        !          2198:        {
        !          2199:            putc(ch, propfile);
        !          2200:            if  (ch == '\n')
        !          2201:                cur_col = 0;
        !          2202:        }
        !          2203: 
        !          2204: }
        !          2205: 
        !          2206: /****************************************************************
        !          2207:  *
        !          2208:  *     int mrstrichr(str, ch):
        !          2209:  *     int mrstrichr:  reverse srch for char in string;
        !          2210:  *                             if fnd,
        !          2211:  *                               return its pos (indexed from 0);
        !          2212:  *                             else
        !          2213:  *                               return (-1)
        !          2214:  *
        !          2215:  ****************************************************************/
        !          2216: 
        !          2217: int mrstrichr(str, ch)
        !          2218: 
        !          2219:        char    *str, ch;
        !          2220: {
        !          2221:        int     i, indx, retcd;
        !          2222: 
        !          2223: 
        !          2224:        retcd = (-1);
        !          2225:        indx = strlen(str) - 1;
        !          2226:        str = str + indx;
        !          2227:        for (i=indx; i >= 0; i--, str--)
        !          2228:        {
        !          2229:            if  (*str == ch)
        !          2230:            {
        !          2231:                retcd = i;
        !          2232:                break;
        !          2233:            }
        !          2234:        }
        !          2235: 
        !          2236: return(retcd);
        !          2237: }
        !          2238: 
        !          2239: 
        !          2240: /****************************************************************
        !          2241:  *
        !          2242:  *     int mstrncmp(s1, s2, len):
        !          2243:  *     int mstrncmp:           cmp s1 to s2 for max of len bytes
        !          2244:  *                             (byte-wise compare, left to right);
        !          2245:  *                             if *s1 != *s2,
        !          2246:  *                               return (int)(*s1 - *s2)
        !          2247:  *                               (i.e., <0 if s1<s2, >0 if s1>s2)
        !          2248:  *                             else
        !          2249:  *                               return 0
        !          2250:  *
        !          2251:  ****************************************************************/
        !          2252: 
        !          2253: int mstrncmp(s1, s2, len)
        !          2254: 
        !          2255:        int     len;
        !          2256:        char    *s1, *s2;
        !          2257: {
        !          2258:        int     i, retcd;
        !          2259: 
        !          2260: 
        !          2261:        retcd = 0;
        !          2262:        for (i=0; i < len; i++, s1++, s2++)
        !          2263:        {
        !          2264:            if  (*s1 != *s2)
        !          2265:            {
        !          2266:                retcd = (int)(*s1 - *s2);
        !          2267:                break;
        !          2268:            }
        !          2269:        }
        !          2270: 
        !          2271: return(retcd);
        !          2272: }
        !          2273: 
        !          2274: 
        !          2275: /****************************************************************
        !          2276:  *
        !          2277:  *     int mstrncpy(to, from, len):
        !          2278:  *     int mstrncpy:           copy from -> to for len; return
        !          2279:  *                             actual # bytes copied (will be
        !          2280:  *                             < len if <from> is null-terminated
        !          2281:  *                             shorter than len);
        !          2282:  *                             guarantees not overwriting allocated
        !          2283:  *                             space for <to> if sizeof(to) is at
        !          2284:  *                             least len + 1 (i.e., if len =
        !          2285:  *                             sizeof(to) - 1;
        !          2286:  *                             destination <to> is always null-
        !          2287:  *                             terminated
        !          2288:  *
        !          2289:  ****************************************************************/
        !          2290: 
        !          2291: int mstrncpy(to, from, len)
        !          2292: 
        !          2293:        int     len;
        !          2294:        char    *to, *from;
        !          2295: {
        !          2296:        int     cnt;
        !          2297: 
        !          2298: 
        !          2299:        cnt = 0;
        !          2300:        while
        !          2301:            ((len-- > 0) && (*from != '\0'))
        !          2302:        {
        !          2303:            *to++ = *from++;
        !          2304:            ++cnt;
        !          2305:        }
        !          2306:        *to = '\0';
        !          2307: 
        !          2308: return(cnt);
        !          2309: }
        !          2310: 
        !          2311: 
        !          2312: /****************************************************************
        !          2313:  *
        !          2314:  *     open_logfile(argc, argv):
        !          2315:  *     open_logfile:           open the logfile for processing
        !          2316:  *
        !          2317:  ****************************************************************/
        !          2318: 
        !          2319: open_logfile(argc, argv)
        !          2320: 
        !          2321:        int     argc;
        !          2322:        char    *argv[];
        !          2323: {
        !          2324:        int     i;
        !          2325: 
        !          2326: 
        !          2327:        _fmode = TEXT_FILE;
        !          2328:        logfile = fopen(logfilename, "w");
        !          2329:        if  (logfile == NULL)
        !          2330:        {
        !          2331:            fprintf(STDERR,
        !          2332:                    "--ipfe:  Can't open log file: %s\n", logfilename);
        !          2333:            *logfilename = '\0';
        !          2334:        }
        !          2335:        else
        !          2336:        {
        !          2337:            fprintf(STDERR, "--ipfe:  Log file: %s is open\n", logfilename);
        !          2338: 
        !          2339:            fprintf(logfile, "\n");
        !          2340:            for (i=0; i < argc; i++)
        !          2341:                fprintf(logfile, "%s ", argv[i]);
        !          2342:            fprintf(logfile, "\n\n");
        !          2343:        }
        !          2344: 
        !          2345: }
        !          2346: 
        !          2347: 
        !          2348: /****************************************************************
        !          2349:  *
        !          2350:  *     open_output:            open the output for processing
        !          2351:  *
        !          2352:  ****************************************************************/
        !          2353: 
        !          2354: open_output()
        !          2355: {
        !          2356:        char    msg[128];
        !          2357: 
        !          2358: 
        !          2359:        _fmode = BINARY_FILE;
        !          2360:        output = fopen(outputname, "w");
        !          2361:        if  (output == NULL)
        !          2362:        {
        !          2363:            terrno = errno;             /* save errno */
        !          2364:            (void)sprintf(msg,
        !          2365:                "--ipfe:  Error opening output file: %s, retcd=%d\n",
        !          2366:                outputname, errno);
        !          2367:            pip_error(msg);
        !          2368:            errno = terrno;
        !          2369:            exit(2);
        !          2370:        }
        !          2371: 
        !          2372: }
        !          2373: 
        !          2374: 
        !          2375: /****************************************************************
        !          2376:  *
        !          2377:  *     open_propfile:  open the properties file for processing
        !          2378:  *
        !          2379:  ****************************************************************/
        !          2380: 
        !          2381: open_propfile()
        !          2382: {
        !          2383:        char    msg[128];
        !          2384: 
        !          2385: 
        !          2386:        _fmode = TEXT_FILE;
        !          2387:        if  (propfname == 0)
        !          2388:        {
        !          2389:            (void)strcpy(prop_fname, input_fnm);
        !          2390:            (void)strcat(prop_fname, ".prop");
        !          2391:            propfname = prop_fname;
        !          2392: 
        !          2393:            (void)sprintf(msg,
        !          2394:            "--ipfe:  No properties filename specified. Using: %s\n",
        !          2395:                        propfname);
        !          2396:            pip_error(msg);
        !          2397:        }
        !          2398: 
        !          2399:        propfile = fopen(propfname, "w");
        !          2400:        if  (propfile == NULL)
        !          2401:        {
        !          2402:            (void)sprintf(msg,
        !          2403:                "--ipfe:  Can't open properties file: %s\n", propfname);
        !          2404:            pip_error(msg);
        !          2405:            *propfname = '\0';
        !          2406:        }
        !          2407:        else
        !          2408:        {
        !          2409:            (void)sprintf(msg,
        !          2410:                "--ipfe:  Properties file: %s is open\n", propfname);
        !          2411:            pip_error(msg);
        !          2412:        }
        !          2413: 
        !          2414: }
        !          2415: 
        !          2416: 
        !          2417: /****************************************************************
        !          2418:  *
        !          2419:  *     char *op_name(op):
        !          2420:  *     char *op_name:  check op_names[] table of op_code
        !          2421:  *                             name strings for non-null entry;
        !          2422:  *                             if non_null,
        !          2423:  *                               return ptr to the string,
        !          2424:  *                             else,
        !          2425:  *                               return ptr to string
        !          2426:  *                               "--Unknown op: <op>"
        !          2427:  *
        !          2428:  ****************************************************************/
        !          2429:     
        !          2430: char *op_name(op)
        !          2431: 
        !          2432:        int     op;
        !          2433: {
        !          2434:        char    buf[20];
        !          2435: 
        !          2436:        if  (op_names[op] == NULL)
        !          2437:        {
        !          2438:            (void)sprintf(buf, "--Unknown op: %d --", op);
        !          2439:            return(buf);
        !          2440:        }
        !          2441:        else
        !          2442:            return(op_names[op]);
        !          2443: }
        !          2444: 
        !          2445: 
        !          2446: /****************************************************************
        !          2447:  *
        !          2448:  *     pip_error(msg):
        !          2449:  *     pip_error:              put error msg to stdout & logfile
        !          2450:  *
        !          2451:  ****************************************************************/
        !          2452:     
        !          2453: pip_error(msg)
        !          2454: 
        !          2455:        char    *msg;
        !          2456: {
        !          2457:        if  (proc_flag[QUIET] != FLAG_ON)
        !          2458:            fprintf(STDERR, msg);
        !          2459:        if  (logfile != NULL)
        !          2460:            fprintf(logfile, msg);
        !          2461: }
        !          2462: 
        !          2463: 
        !          2464: 
        !          2465: /****************************************************************
        !          2466:  *
        !          2467:  *     pip_prop(msg):
        !          2468:  *     pip_prop:               put msg to propfile
        !          2469:  *
        !          2470:  ****************************************************************/
        !          2471:     
        !          2472: pip_prop(msg)
        !          2473: 
        !          2474:        char    *msg;
        !          2475: {
        !          2476:        if  ((propfile != NULL) && (ovly_flag == FLAG_OFF))
        !          2477:        {
        !          2478:            fprintf(propfile, msg);
        !          2479:            if  (*(msg + strlen(msg) - 1) == '\n')
        !          2480:                cur_col = 0;
        !          2481:            else
        !          2482:                cur_col = cur_col + strlen(msg);
        !          2483: 
        !          2484:        }
        !          2485: 
        !          2486: }
        !          2487: 
        !          2488: 
        !          2489: /****************************************************************
        !          2490:  *
        !          2491:  *     preserve_SIF_copy(type_byte, length, file, filename):
        !          2492:  *     preserve_SIF_copy:      preserve SIF reference by copying
        !          2493:  *                             from specified input file to output
        !          2494:  *
        !          2495:  ****************************************************************/
        !          2496:     
        !          2497: copy_preserve_SIF(type_byte, length, file, filename)
        !          2498: 
        !          2499:        FILE    *file;
        !          2500:        long    length;
        !          2501:        int     type_byte;
        !          2502:        char    *filename;
        !          2503: {
        !          2504:        put_seq_type_len(type_byte, length);
        !          2505:        iocopyn(length, file, filename);
        !          2506: }
        !          2507: 
        !          2508: 
        !          2509: 
        !          2510: /****************************************************************
        !          2511:  *
        !          2512:  *     preserve_SIF_put(type_byte, length, buf):
        !          2513:  *     preserve_SIF_put:       preserve SIF reference by copying
        !          2514:  *                             from specified buffer to output
        !          2515:  *
        !          2516:  ****************************************************************/
        !          2517:     
        !          2518: put_preserve_SIF(type_byte, length, buf)
        !          2519: 
        !          2520:        long    length;
        !          2521:        int     type_byte;
        !          2522:        char    *buf;
        !          2523: {
        !          2524:        put_seq_type_len(type_byte, length);
        !          2525:        ioputn(length, buf);
        !          2526: }
        !          2527: 
        !          2528: 
        !          2529: /****************************************************************
        !          2530:  *
        !          2531:  *     proc_alias(alias_string):
        !          2532:  *     proc_alias:             process alias argument
        !          2533:  *
        !          2534:  ****************************************************************/
        !          2535: 
        !          2536: proc_alias(alias_string)
        !          2537: 
        !          2538:        char    *alias_string;
        !          2539: {
        !          2540:        int     indx, len;
        !          2541:        char    msg[128];
        !          2542: 
        !          2543: 
        !          2544:        len = strlen(alias_string);
        !          2545:        indx = mrstrichr(alias_string, ':');
        !          2546:        if  ((indx > 0) && (indx < (len - 1)))  /* past beg & before end */
        !          2547:        {
        !          2548:            (void)mstrncpy(alias_ref[alias_indx], alias_string, indx);
        !          2549:            ++indx;
        !          2550:            (void)mstrncpy(alias_act[alias_indx], (alias_string + indx),
        !          2551:                           (len - indx));
        !          2552:            ++alias_indx;
        !          2553:            ++num_aliases;
        !          2554:        }
        !          2555:        else
        !          2556:        {
        !          2557:            (void)sprintf(msg,
        !          2558:                "--ipfe:  *** warning -- invalid alias specification (%s)\n",
        !          2559:                                alias_string);
        !          2560:            pip_error(msg);
        !          2561:            exit_status = 4;
        !          2562:        }
        !          2563: 
        !          2564: }
        !          2565: 
        !          2566: 
        !          2567: /****************************************************************
        !          2568:  *
        !          2569:  *     proc_chapterize:        test for & process chapterizing
        !          2570:  *
        !          2571:  ****************************************************************/
        !          2572:     
        !          2573: proc_chapterize()
        !          2574: {
        !          2575:        long    len, temp_end_offset;
        !          2576:        int     i, op, terrno, tblock_indx, proc_op_flag, eof_flag, proc_type;
        !          2577:        int     type_byte;              /* must be int for stdio EOF */
        !          2578:        char    msg[128];
        !          2579: 
        !          2580: 
        !          2581:        if  ((proc_flag[CHAPTERIZE] == FLAG_ON) &&
        !          2582:             (((chap_type == CH_PAGES) && (out_numpages == chap_val)) ||
        !          2583:              (((chap_type == CH_KBYTES) || (chap_type == CH_MBYTES)) &&
        !          2584:                    (out_offset >= chap_val))))
        !          2585:        {
        !          2586:            
        !          2587: /*
        !          2588:  *  Eventually, the next two lines should be rewritten to check to see
        !          2589:  *  if we might somehow be nested in a body before putting the
        !          2590:  *  OP_endblock(s)
        !          2591:  */
        !          2592:     
        !          2593:            for (i=0; i < block_indx; i++)
        !          2594:                put_op(OP_endBlock);
        !          2595:     
        !          2596:            (void)fclose(output);
        !          2597: 
        !          2598: /*
        !          2599:  *  Now, check for OP_endBlock(s) appearing immediately in the input
        !          2600:  *  file. If so, skip them: they were already put out above. In looking,
        !          2601:  *  if we get an EOF and there are no more input files, don't open a
        !          2602:  *  new output file.
        !          2603:  */
        !          2604: 
        !          2605:            proc_op_flag = eof_flag = FLAG_OFF;
        !          2606:            tblock_indx = block_indx;   /* because the actual block_indx can
        !          2607:                                             be dcr'd in the loop */
        !          2608:            for (i=0; i <= tblock_indx; i++)
        !          2609:            {
        !          2610:                type_byte = mgetc(input);
        !          2611:                if  (feof(input))
        !          2612:                {
        !          2613: /*
        !          2614:  *  set eof_flag only if there are no more input files
        !          2615:  */
        !          2616:                    if  (input_indx >= (num_infiles - 1))
        !          2617:                        eof_flag = FLAG_ON;
        !          2618:                    break;
        !          2619:                }
        !          2620:                else
        !          2621:                if  ((type_byte & OP_Mask) == (LONG_OP & OP_Mask))
        !          2622:                {
        !          2623:                    op = ((type_byte & 0x1f) << 8) +
        !          2624:                            getc_testeof(input, inputname);
        !          2625:                    if  ((op == OP_endBlock) && (i < block_indx))
        !          2626:                        --block_indx;
        !          2627:                    else
        !          2628:                    {
        !          2629:                        proc_op_flag = FLAG_ON; /* set flag for use below */
        !          2630:                        proc_type = LONG_OP;
        !          2631:                        break;
        !          2632:                    }
        !          2633:                }
        !          2634:                else
        !          2635:                {
        !          2636:                    proc_op_flag = FLAG_ON;     /* set flag for use below */
        !          2637:                    proc_type = ~(LONG_OP);
        !          2638:                    break;
        !          2639:                }
        !          2640:            }    
        !          2641:            if  (eof_flag == FLAG_OFF)
        !          2642:            {
        !          2643:                (void)strcpy(work_fname, outputname);
        !          2644:                workfile = fopen(work_fname, "r");
        !          2645:                if  (workfile == NULL)
        !          2646:                {
        !          2647:                    terrno = errno;             /* save errno */
        !          2648:                    pip_error(
        !          2649:                    "Chapterize error opening previous output file as input\n");
        !          2650:                    (void)sprintf(msg, "  file=%s, retcd=%d\n",
        !          2651:                                  outputname, errno);
        !          2652:                    pip_error(msg);
        !          2653:                    pip_error("  Can't complete chapterization --\n\n");
        !          2654:                    pip_error("  *** ABORTING ***\n");
        !          2655:                    errno = terrno;
        !          2656:                    exit(3);
        !          2657:                }
        !          2658:                else
        !          2659:                {
        !          2660:                    ++out_filnum;
        !          2661:                    (void)strcpy(output_name, output_fnm);
        !          2662:                    (void)strcat(output_name, itostr(out_filnum));
        !          2663:                    (void)strcat(output_name, output_ext);
        !          2664:                    (void)sprintf(msg,
        !          2665:                                  "--ipfe:  Processing output file: %s\n",
        !          2666:                                  outputname);
        !          2667:                    pip_error(msg);
        !          2668:     
        !          2669:                    _fmode = BINARY_FILE;
        !          2670:                    output = fopen(outputname, "w");
        !          2671:                    if  (output == NULL)
        !          2672:                    {
        !          2673:                        terrno = errno;         /* save errno */
        !          2674:                        (void)sprintf(msg,
        !          2675:                          "--ipfe:  Error opening output file=%s, retcd=%d\n",
        !          2676:                          outputname, errno);
        !          2677:                        pip_error(msg);
        !          2678:                        errno = terrno;
        !          2679:                        exit(4);
        !          2680:                    }
        !          2681:                    else
        !          2682:                    {
        !          2683: /*
        !          2684:  *  Then, copy Hdr & BEGIN/Preamble(s) to new output
        !          2685:  */
        !          2686:                        out_numpages = 0;
        !          2687:                        out_offset = 0;
        !          2688:                        for (i=0; i <= block_indx; i++)
        !          2689:                        {
        !          2690:                            len = out_end_offset[i] - out_beg_offset[i] + 1;
        !          2691:                            out_beg_offset[i] = out_offset;
        !          2692:                            iocopyn(len, workfile, work_fname);
        !          2693:                            temp_end_offset = out_end_offset[i];
        !          2694:                            out_end_offset[i] = out_offset - 1;
        !          2695:                            if  (i < block_indx)  /* if there is more to do */
        !          2696:                            {
        !          2697:                                len = out_beg_offset[i+1] -
        !          2698:                                                temp_end_offset - 1;
        !          2699:                                ioreadn(len, workfile, work_fname);
        !          2700:                            }
        !          2701:                        }
        !          2702:                    }
        !          2703:                    (void)fclose(workfile);
        !          2704: /*
        !          2705:  *  Finally, if a token other than OP_endBlock token was read above,
        !          2706:  *  process it
        !          2707:  */
        !          2708:                    if  (proc_op_flag == FLAG_ON)
        !          2709:                    {
        !          2710:                        if  (proc_type == LONG_OP)
        !          2711:                            proc_long_op(op);
        !          2712:                        else
        !          2713:                            proc_ip_token(type_byte, input, inputname);
        !          2714:                    }
        !          2715:                }
        !          2716:            }
        !          2717:        }
        !          2718: 
        !          2719: }
        !          2720: 
        !          2721: 
        !          2722: /****************************************************************
        !          2723:  *
        !          2724:  *     proc_file:              process the input file
        !          2725:  *
        !          2726:  ****************************************************************/
        !          2727:     
        !          2728: proc_file()
        !          2729:     
        !          2730: {
        !          2731:        long    offset;
        !          2732:        int     i, op, retcd, exit_flag;
        !          2733:        int     type_byte;              /* must be int for stdio EOF */
        !          2734:        char    msg[128];
        !          2735: 
        !          2736: 
        !          2737:        if  (setjmp(next_file) != 0)    /* for error recovery of */
        !          2738:        {                               /*   unexpected EOF      */
        !          2739:            return;
        !          2740:        }
        !          2741:     
        !          2742: 
        !          2743:        offset = in_offset;
        !          2744:        retcd = get_ip_hdr(input, inputname);   /* get the hdr */
        !          2745:        if  (retcd == OK)
        !          2746:        {
        !          2747:            (void)sprintf(msg, "-- Hdr :  %s--\n", hdr_workbuf);
        !          2748:            pip_error(msg);
        !          2749:            mputc_prop('\n');
        !          2750:            put_offset_msg_to_prop(offset, hdr_workbuf);
        !          2751:            pip_prop("--\n");
        !          2752: 
        !          2753:            if  (input_indx == 0)               /* if 1st file,   */
        !          2754:            {
        !          2755:                if  (proc_flag[CONCAT] == FLAG_ON)
        !          2756:                    (void)strcpy((hdr_workbuf+IP_VERS_OFFSET), "2.1 ");
        !          2757:                (void)strcpy(hdr_buf, hdr_workbuf);     /* save hdr */
        !          2758:                if  (output != NULL)
        !          2759:                {
        !          2760:                    (void)sprintf(msg, "\nProcessing output file: %s\n",
        !          2761:                        outputname);
        !          2762:                    pip_error(msg);
        !          2763:                    (void)sprintf(msg, "-- Output Hdr:  %s--\n", hdr_workbuf);
        !          2764:                    pip_error(msg);
        !          2765:                    ip_puts(hdr_workbuf);       /* copy hdr & add len to
        !          2766:                                                   out_offset */
        !          2767:                }
        !          2768: 
        !          2769: /*
        !          2770:  *  copy everything up to, but NOT including (will include later),
        !          2771:  *    OP_beginBlock
        !          2772:  */
        !          2773:                exit_flag = FLAG_OFF;
        !          2774:                while
        !          2775:                    (exit_flag == FLAG_OFF)
        !          2776:                {
        !          2777:                    type_byte = getc_testeof(input, inputname);
        !          2778:                    if  ((type_byte & OP_Mask) == (LONG_OP & OP_Mask))
        !          2779:                    {
        !          2780:                        op = ((type_byte & 0x1f) << 8) +
        !          2781:                              getc_testeof(input, inputname);
        !          2782:                        if  (op == OP_beginBlock)
        !          2783:                            exit_flag = FLAG_ON;
        !          2784:                        else
        !          2785:                        {
        !          2786:                            ip_putc(type_byte);
        !          2787:                            ip_putc(op);
        !          2788:                        }
        !          2789:                    }
        !          2790:                    else
        !          2791:                        proc_ip_token(type_byte, input, inputname);
        !          2792:                }
        !          2793:                out_end_offset[0] = out_offset - 1;
        !          2794: /*
        !          2795:  *  if concatenating, wrap a BEGIN empty_preamble END after the hdr &
        !          2796:  *    instructionsBody and around the rest of the output
        !          2797:  */
        !          2798:                if  (proc_flag[CONCAT] == FLAG_ON)
        !          2799:                {
        !          2800:                    ++block_indx;
        !          2801:                    out_beg_offset[block_indx] = out_offset;
        !          2802:                    put_op(OP_beginBlock);
        !          2803:                    put_op(OP_beginBody);
        !          2804:                    put_op(OP_endBody);
        !          2805:                    out_end_offset[block_indx] = out_offset - 1;
        !          2806:                }
        !          2807: /*
        !          2808:  *  NOW include the OP_beginBlock, & process the rest of the master
        !          2809:  */
        !          2810:                proc_long_op(OP_beginBlock);
        !          2811:            }
        !          2812:            prc_ip_tokens(input, inputname);
        !          2813: 
        !          2814:            mputc_prop('\n');
        !          2815:            indent(off_indent, propfile);
        !          2816:            (void)sprintf(msg, "--Number of Blocks:%4d\n", num_blocks);
        !          2817:            pip_prop(msg);
        !          2818:            indent(off_indent, propfile);
        !          2819:            (void)sprintf(msg, "--Number of Pages :%4d\n", num_pages);
        !          2820:            pip_prop(msg);
        !          2821:            indent(off_indent, propfile);
        !          2822:            (void)sprintf(msg, "--Number of SIFs  :%4d\n", num_sifs);
        !          2823:            pip_prop(msg);
        !          2824: 
        !          2825:            for (i=0; merge_pg[input_indx][i] != 0; i++)
        !          2826:            {
        !          2827:                if  (merge_pg[input_indx][i] > num_pages)
        !          2828:                {
        !          2829:                    (void)sprintf(msg,
        !          2830:                  "\n--ipfe:  *** Page %d selected > # of pages in %s (%d)\n",
        !          2831:                                  merge_pg[input_indx][i], inputname,
        !          2832:                                  num_pages);
        !          2833:                    pip_error(msg);
        !          2834:                    break;
        !          2835:                }
        !          2836:            }
        !          2837:        }
        !          2838: /***
        !          2839:        else
        !          2840:        {
        !          2841:            (void)sprintf(msg, "(***  PROCESSING ABORTED  ***)\n");
        !          2842:            pip_error(msg);
        !          2843:            input_indx = num_infiles;
        !          2844:            abort_flag = FLAG_ON;
        !          2845:        }
        !          2846: ***/
        !          2847: }
        !          2848: 
        !          2849: 
        !          2850: /****************************************************************
        !          2851:  *
        !          2852:  *     prc_IF_bof(ifile, ifilename):
        !          2853:  *     prc_IF_bof:             read specified Interpress file &
        !          2854:  *                             discard everything up to, and
        !          2855:  *                             including, first OP_beginBlock
        !          2856:  *
        !          2857:  ****************************************************************/
        !          2858: 
        !          2859: prc_IF_bof(ifile, ifilename)
        !          2860: 
        !          2861:        FILE    *ifile;
        !          2862:        char    *ifilename;
        !          2863: {
        !          2864:        int     op, exit_flag;
        !          2865:        int     type_byte;              /* must be int for stdio EOF */
        !          2866: 
        !          2867: 
        !          2868:        exit_flag = FLAG_OFF;
        !          2869:        while
        !          2870:            (exit_flag == FLAG_OFF)
        !          2871:        {
        !          2872:            type_byte = getc_testeof(ifile, ifilename);
        !          2873:            if  ((type_byte & OP_Mask) == (LONG_OP & OP_Mask))
        !          2874:            {
        !          2875:                op = ((type_byte & 0x1f) << 8) +
        !          2876:                      getc_testeof(ifile, ifilename);
        !          2877:                if  (op == OP_beginBlock)
        !          2878:                    exit_flag = FLAG_ON;                
        !          2879:            }
        !          2880:        }
        !          2881: }
        !          2882: 
        !          2883: 
        !          2884: /****************************************************************
        !          2885:  *
        !          2886:  *     prc_IF_fragment(ifile, ifilename):
        !          2887:  *     prc_IF_fragment:        process specified Interpress fragment
        !          2888:  *                             (i.e., skip everything up to, and
        !          2889:  *                              including the first OP_beginBlock;
        !          2890:  *                              then include everything up to, but
        !          2891:  *                              not including, the next OP_endBlock)
        !          2892:  *
        !          2893:  ****************************************************************/
        !          2894: 
        !          2895: prc_IF_fragment(ifile, ifilename)
        !          2896: 
        !          2897:        FILE    *ifile;
        !          2898:        char    *ifilename;
        !          2899: {
        !          2900:        int     op, exit_flag;
        !          2901:        int     type_byte;              /* must be int for stdio EOF */
        !          2902: 
        !          2903: 
        !          2904: /*
        !          2905:  *  read & discard everything up to, and including, OP_beginBlock
        !          2906:  */
        !          2907:        prc_IF_bof(ifile, ifilename);
        !          2908: 
        !          2909: /*
        !          2910:  *  read & copy everything up to, but NOT including OP_endBlock
        !          2911:  */
        !          2912:        exit_flag = FLAG_OFF;
        !          2913:        while
        !          2914:            (exit_flag == FLAG_OFF)
        !          2915:        {
        !          2916:            type_byte = getc_testeof(ifile, ifilename);
        !          2917:            if  ((type_byte & OP_Mask) == (LONG_OP & OP_Mask))
        !          2918:            {
        !          2919:                op = ((type_byte & 0x1f) << 8) +
        !          2920:                      getc_testeof(ifile, ifilename);
        !          2921:                if  (op == OP_endBlock)
        !          2922:                    exit_flag = FLAG_ON;                
        !          2923:                else
        !          2924:                    put_op(op);
        !          2925:            }       
        !          2926:            else
        !          2927:                proc_ip_token(type_byte, ifile, ifilename);
        !          2928:        }
        !          2929: }
        !          2930: 
        !          2931: 
        !          2932: /****************************************************************
        !          2933:  *
        !          2934:  *     prc_IF_master(ifile, ifilename, pg):
        !          2935:  *     prc_IF_master:  process specified page of the
        !          2936:  *                             specified Interpress master
        !          2937:  *                             (i.e., skip everything up to, and
        !          2938:  *                              including the first OP_beginBlock;
        !          2939:  *                              then include the contents of the
        !          2940:  *                              preamble and the specified page,
        !          2941:  *                              without including the body tokens)
        !          2942:  *
        !          2943:  ****************************************************************/
        !          2944: 
        !          2945: prc_IF_master(ifile, ifilename, pg)
        !          2946: 
        !          2947:        FILE    *ifile;
        !          2948:        int     pg;
        !          2949:        char    *ifilename;
        !          2950: {
        !          2951:        int     op, exit_flag, wrt_flag, blk_indx, pg_cnt;
        !          2952:        int     level[MX_BLOCK_DEPTH], ctr[MX_BLOCK_DEPTH];
        !          2953:        int     type_byte;              /* must be int for stdio EOF */
        !          2954: 
        !          2955: 
        !          2956: /*
        !          2957:  *  read & discard everything up to, and including, OP_beginBlock
        !          2958:  */
        !          2959:        prc_IF_bof(ifile, ifilename);
        !          2960: 
        !          2961: /*
        !          2962:  *  read & copy the contents of the preamble; then, copy only the
        !          2963:  *  contents of the specified page
        !          2964:  */
        !          2965:        blk_indx = pg_cnt = 0;
        !          2966:        level[blk_indx] = ctr[blk_indx] = 0;
        !          2967:        wrt_flag = FLAG_OFF;
        !          2968:        exit_flag = FLAG_OFF;
        !          2969:        while
        !          2970:            (exit_flag == FLAG_OFF)
        !          2971:        {
        !          2972:            type_byte = getc_testeof(ifile, ifilename);
        !          2973:            if  ((type_byte & OP_Mask) == (LONG_OP & OP_Mask))
        !          2974:            {
        !          2975:                op = ((type_byte & 0x1f) << 8) +
        !          2976:                      getc_testeof(ifile, ifilename);
        !          2977:                if  (op == OP_beginBlock)
        !          2978:                {
        !          2979:                    ++blk_indx;
        !          2980:                    level[blk_indx] = ctr[blk_indx] = 0;
        !          2981:                }
        !          2982:                else
        !          2983:                if  (op == OP_endBlock)
        !          2984:                {
        !          2985:                    if  (blk_indx > 0)
        !          2986:                        --blk_indx;
        !          2987:                    else
        !          2988:                        exit_flag = FLAG_ON;
        !          2989:                }
        !          2990:                else
        !          2991:                if  (op == OP_beginBody)
        !          2992:                {
        !          2993:                    if  (level[blk_indx] == 0)
        !          2994:                    {
        !          2995:                        if  (ctr[blk_indx] == 0)
        !          2996:                            wrt_flag = FLAG_ON;      /* processing preamble */
        !          2997:                        else
        !          2998:                        {
        !          2999:                            ++pg_cnt;
        !          3000:                            if  (pg == pg_cnt)
        !          3001:                                wrt_flag = FLAG_ON;     /* got the right pg */
        !          3002:                        }
        !          3003:                        ++ctr[blk_indx];
        !          3004:                    }
        !          3005:                    else
        !          3006:                    if  (wrt_flag == FLAG_ON)
        !          3007:                        put_op(op);
        !          3008:                    ++level[blk_indx];
        !          3009:                }
        !          3010:                else
        !          3011:                if  (op == OP_endBody)
        !          3012:                {
        !          3013:                    --level[blk_indx];
        !          3014:                    if  (level[blk_indx] == 0)
        !          3015:                    {
        !          3016:                        wrt_flag = FLAG_OFF;
        !          3017:                        if  (pg == pg_cnt)
        !          3018:                            exit_flag = FLAG_ON;
        !          3019:                    }
        !          3020:                    else
        !          3021:                    if  (wrt_flag == FLAG_ON)
        !          3022:                        put_op(op);
        !          3023:                }
        !          3024:                else
        !          3025:                if  (wrt_flag == FLAG_ON)
        !          3026:                    put_op(op);
        !          3027:            }       
        !          3028:            else
        !          3029:            if  (wrt_flag == FLAG_ON)
        !          3030:                proc_ip_token(type_byte, ifile, ifilename);
        !          3031:        }
        !          3032: }
        !          3033: 
        !          3034: 
        !          3035: /****************************************************************
        !          3036:  *
        !          3037:  *     proc_ip_token(type_byte, file, filename):
        !          3038:  *     proc_ip_token:  process interpress token of specified
        !          3039:  *                             type from specified file
        !          3040:  *
        !          3041:  ****************************************************************/
        !          3042: 
        !          3043: proc_ip_token(type_byte, file, filename)
        !          3044: 
        !          3045:        FILE    *file;
        !          3046:        int     type_byte;
        !          3047:        char    *filename;
        !          3048: {
        !          3049:        long    len;
        !          3050:        int     op;
        !          3051: 
        !          3052: 
        !          3053:        if  (type_byte != EOF)
        !          3054:        {
        !          3055:            if ((type_byte & 0x80) == 0)  /* token is a SHORT NUMBER */
        !          3056:            {
        !          3057:                ip_putc(type_byte);                     /* 2-byte token */
        !          3058:                ip_putc(getc_testeof(file, filename));
        !          3059:            }
        !          3060:            else                          /* token is something else */
        !          3061:            {
        !          3062:                switch
        !          3063:                    (type_byte & OP_Mask)
        !          3064:                {
        !          3065:                    case (SHORT_OP & OP_Mask):
        !          3066:                        ip_putc(type_byte);             /* 1-byte token */
        !          3067:                        break;
        !          3068:        
        !          3069:                    case (LONG_OP & OP_Mask):
        !          3070:                        op = ((type_byte & 0x1f) << 8) +
        !          3071:                              getc_testeof(file, filename); /* 2-byte token */
        !          3072:                        proc_long_op(op);
        !          3073:                        break;
        !          3074:        
        !          3075:                    case (SHORT_SEQUENCE & OP_Mask):
        !          3076:                        len = getc_testeof(file, filename);
        !          3077:                        proc_sequence(type_byte, len, file, filename);
        !          3078:                        break;
        !          3079:        
        !          3080:                    case (LONG_SEQUENCE & OP_Mask):
        !          3081:                        len = getc_testeof(file, filename) << 16;
        !          3082:                        len = len + (getc_testeof(file, filename) << 8);
        !          3083:                        len = len + getc_testeof(file, filename);
        !          3084:                        proc_sequence(type_byte, len, file, filename);
        !          3085:                        break;
        !          3086:                }
        !          3087:            }
        !          3088:        }
        !          3089: 
        !          3090: }
        !          3091: 
        !          3092: 
        !          3093: /****************************************************************
        !          3094:  *
        !          3095:  *     prc_ip_tokens(file, filename):
        !          3096:  *     prc_ip_tokens:  process interpress tokens
        !          3097:  *                             specified file
        !          3098:  *
        !          3099:  ****************************************************************/
        !          3100: 
        !          3101: prc_ip_tokens(file, filename)
        !          3102: 
        !          3103:        FILE    *file;
        !          3104:        char    *filename;
        !          3105: {
        !          3106:        int     type_byte;              /* must be int for stdio EOF */
        !          3107: 
        !          3108:     
        !          3109:        while
        !          3110:            ((type_byte = mgetc(file)) != EOF)
        !          3111:        {
        !          3112:            proc_ip_token(type_byte, file, filename);
        !          3113:        }
        !          3114: 
        !          3115: }
        !          3116: 
        !          3117: 
        !          3118: /****************************************************************
        !          3119:  *
        !          3120:  *     proc_long_op(op):
        !          3121:  *     proc_long_op:           process long_op
        !          3122:  *
        !          3123:  ****************************************************************/
        !          3124: 
        !          3125: proc_long_op(op)
        !          3126: 
        !          3127:        int     op;
        !          3128: {
        !          3129:        long    val;
        !          3130:        int     i, nesting_level;
        !          3131: 
        !          3132: 
        !          3133:        switch
        !          3134:            (op)
        !          3135:        {
        !          3136:            case (OP_beginBlock):
        !          3137:                put_op(op);
        !          3138:                ++num_blocks;
        !          3139:                ++tnum_blocks;
        !          3140:                if  (block_indx == 0)
        !          3141:                    out_end_offset[block_indx] = out_offset - 3;
        !          3142:                ++block_indx;
        !          3143:                out_beg_offset[block_indx] = out_offset - 2;
        !          3144:                blk_num_bytes[block_indx] = 2;
        !          3145:                put_opname_to_prop(op);
        !          3146:                preamble_expected = FLAG_ON;
        !          3147:                break;
        !          3148:            case (OP_endBlock):
        !          3149:                put_op(op);
        !          3150:                put_opname_to_prop(op);
        !          3151:                --block_indx;
        !          3152:                break;
        !          3153:            case (OP_beginBody):
        !          3154:                put_opname_to_prop(op);
        !          3155:                if  (preamble_expected == FLAG_ON)
        !          3156:                {
        !          3157:                    put_op(op);
        !          3158:                    preamble_expected = FLAG_OFF;
        !          3159:                    endpreamble_expected = FLAG_ON;
        !          3160:                }
        !          3161:                else
        !          3162:                if  (bop_flag == FLAG_ON)
        !          3163:                {
        !          3164:                    put_op(op);
        !          3165:                    if  (bop_iindx[bop_indx] == 0)
        !          3166:                        bop_preamble_expected[bop_indx] = FLAG_ON;
        !          3167:                    else
        !          3168:                    if  ((bop_iindx[bop_indx] == 1) &&
        !          3169:                         (bop_preamble_expected[bop_indx] == FLAG_ON))
        !          3170:                        bop_preamble_expected[bop_indx] = FLAG_OFF;
        !          3171: 
        !          3172:                    ++bop_iindx[bop_indx];
        !          3173:                }
        !          3174:                else            /* we have a righteous pageBody */
        !          3175:                {
        !          3176:                    ++num_pages;
        !          3177:                    ++tnum_pages;
        !          3178:                    frstpg_flag = FLAG_ON;
        !          3179:                    pg_num_bytes = 2;
        !          3180: 
        !          3181:                    if  ((merge_pg[input_indx][merge_indx] == 0) ||
        !          3182:                         (num_pages < merge_pg[input_indx][merge_indx]))
        !          3183:                        ipwrite_flag = FLAG_OFF;
        !          3184:                    else
        !          3185:                    {
        !          3186:                        ipwrite_flag = FLAG_ON; /* it should already be on */
        !          3187:                        put_op(op);
        !          3188:                        if  ((proc_flag[LANDSCAPE] == FLAG_ON) ||
        !          3189:                             (proc_flag[ROTATE] == FLAG_ON))
        !          3190:                        {
        !          3191:                            put_Integer((long)rot_deg);
        !          3192:                            put_op(OP_rotate);
        !          3193:                            put_op(OP_concatt);
        !          3194:                            if  ((rxoff_den == 0) || (rxoff_den == 1))
        !          3195:                                put_Integer(rxoff_num);
        !          3196:                            else
        !          3197:                                put_seqRational(rxoff_num, rxoff_den);
        !          3198:                            if  ((ryoff_den == 0) || (ryoff_den == 1))
        !          3199:                                put_Integer(ryoff_num);
        !          3200:                            else
        !          3201:                                put_seqRational(ryoff_num, ryoff_den);
        !          3202:                            put_op(OP_translate);
        !          3203:                            put_op(OP_concatt);
        !          3204:                        }
        !          3205:                        if  (proc_flag[BINDING_OFFSET] == FLAG_ON)
        !          3206:                        {
        !          3207:                            if  ((proc_flag[DUPLEX] == FLAG_ON) &&
        !          3208:                                 ((num_pages % 2) == 0))
        !          3209:                                val = -(boff_num);
        !          3210:                            else
        !          3211:                                val = boff_num;
        !          3212:                            if  (proc_flag[LANDSCAPE] == FLAG_ON)
        !          3213:                            {
        !          3214:                                put_Integer(0L);        /* no xShift */
        !          3215:                                if  ((boff_den == 0) || (boff_den == 1))
        !          3216:                                    put_Integer(-(val)); /* -(yShift) */
        !          3217:                                else
        !          3218:                                    put_seqRational(-(val), boff_den);
        !          3219:                            }
        !          3220:                            else
        !          3221:                            {
        !          3222:                                if  ((boff_den == 0) || (boff_den == 1))
        !          3223:                                    put_Integer(val);
        !          3224:                                else
        !          3225:                                    put_seqRational(val, boff_den);
        !          3226:                                put_Integer(0L);        /* no yShift */
        !          3227:                            }
        !          3228:                            put_op(OP_translate);
        !          3229:                            put_op(OP_concatt);
        !          3230:                        }
        !          3231:                        if  ((proc_flag[X_OFFSET] == FLAG_ON) ||
        !          3232:                             (proc_flag[Y_OFFSET] == FLAG_ON))
        !          3233:                        {
        !          3234:                            if  ((xoff_den == 0) || (xoff_den == 1))
        !          3235:                                put_Integer(xoff_num);
        !          3236:                            else
        !          3237:                                put_seqRational(xoff_num, xoff_den);
        !          3238: 
        !          3239:                            if  ((yoff_den == 0) || (yoff_den == 1))
        !          3240:                                put_Integer(yoff_num);
        !          3241:                            else
        !          3242:                                put_seqRational(yoff_num, yoff_den);
        !          3243:                            put_op(OP_translate);
        !          3244:                            put_op(OP_concatt);
        !          3245:                        }
        !          3246:                        if  (proc_flag[SCALE] == FLAG_ON)
        !          3247:                        {
        !          3248:                            if  ((scale_den == 0) | (scale_den == 1))
        !          3249:                                put_Integer(scale_num);
        !          3250:                            else
        !          3251:                                put_seqRational(scale_num, scale_den);
        !          3252:                            put_op(OP_scale);
        !          3253:                            put_op(OP_concatt);
        !          3254:                        }
        !          3255: 
        !          3256:                        if  ((merge_pg[input_indx][merge_indx] == (-1)) &&
        !          3257:                             (num_pages ==
        !          3258:                                merge_pg[input_indx][(merge_indx+1)]))
        !          3259:                            ++merge_indx;
        !          3260:                        if  ((num_pages ==
        !          3261:                                merge_pg[input_indx][merge_indx]) &&
        !          3262:                             (ovly_pg[input_indx][merge_indx] != (-1)))
        !          3263:                        {
        !          3264:                            put_op(OP_dosavesimplebody);
        !          3265:                            put_op(OP_beginBody);
        !          3266:                        }
        !          3267:                    }
        !          3268:                }
        !          3269:                begBody_flag = FLAG_ON;
        !          3270:                break;
        !          3271:            case (OP_endBody):
        !          3272:                put_opname_to_prop(op);
        !          3273:                if  (bop_flag == FLAG_ON)
        !          3274:                {
        !          3275:                    put_op(op);
        !          3276:                    --bop_iindx[bop_indx];
        !          3277:                    if  ((bop_iindx[bop_indx] == 0) && (bop_indx > 0))
        !          3278:                        --bop_indx;
        !          3279:                    if  ((bop_indx == 0) && (bop_iindx[bop_indx] == 0))
        !          3280:                        bop_flag = FLAG_OFF;
        !          3281:                }
        !          3282:                else    /* bop_flag == FLAG_OFF */
        !          3283:                {
        !          3284:                    if  (endpreamble_expected == FLAG_ON)
        !          3285:                    /*  then processing preamble -- can't chapterize */
        !          3286:                    {
        !          3287:                        put_op(op);
        !          3288:                        endpreamble_expected = FLAG_OFF;
        !          3289: /*
        !          3290:  *  this next code determines the length of each BEGIN/Preamble to copy
        !          3291:  *  for chapterizing as part of handling nested blocks
        !          3292:  */
        !          3293:                        out_end_offset[block_indx] = out_offset - 1;
        !          3294:                    }
        !          3295:                    else        /* we have a righteous endBody */
        !          3296:                    {
        !          3297:                        if  (ipwrite_flag == FLAG_ON)
        !          3298:                        {
        !          3299:                            put_op(op);
        !          3300:                            ++out_numpages;
        !          3301:                            ovly_flag = FLAG_OFF;
        !          3302:                            while
        !          3303:                                (num_pages ==
        !          3304:                                    merge_pg[input_indx][merge_indx])
        !          3305:                            {
        !          3306:                                if  (ovly_pg[input_indx][merge_indx] != (-1))
        !          3307:                                {
        !          3308:                                    ovly_flag = FLAG_ON;
        !          3309:                                    proc_overlay();
        !          3310:                                }
        !          3311:                                ++merge_indx;
        !          3312:                            }
        !          3313:                            if  (ovly_flag == FLAG_ON)
        !          3314:                            {
        !          3315:                                put_op(OP_endBody);
        !          3316:                                ovly_flag = FLAG_OFF;
        !          3317:                            }
        !          3318:                            proc_chapterize();
        !          3319:                        }
        !          3320:                        if  (merge_pg[input_indx][merge_indx] == 0)
        !          3321:                        {
        !          3322:                            if  (proc_flag[CONCAT] == FLAG_ON)
        !          3323:                                nesting_level = block_indx - 1;
        !          3324:                            else
        !          3325:                                nesting_level = block_indx;
        !          3326: 
        !          3327:                            for (i=0; i < nesting_level; i++)
        !          3328:                                put_op(OP_endBlock);
        !          3329:                            ipwrite_flag = FLAG_OFF;
        !          3330:                        }
        !          3331:                        else
        !          3332:                            ipwrite_flag = FLAG_ON;
        !          3333:                    }
        !          3334:                }
        !          3335:                break;
        !          3336:            case (OP_makesimpleco):
        !          3337:            case (OP_dosavesimplebody):
        !          3338:            case (OP_if):
        !          3339:            case (OP_ifelse):
        !          3340:            case (OP_ifcopy):
        !          3341:            case (OP_correct):
        !          3342:                put_op(op);
        !          3343:                put_opname_to_prop(op);
        !          3344:                if  (bop_flag == FLAG_OFF)
        !          3345:                {
        !          3346:                    bop_indx = 0;
        !          3347:                    bop_flag = FLAG_ON;
        !          3348:                }
        !          3349:                else
        !          3350:                    ++bop_indx;
        !          3351:                bop_iindx[bop_indx] = 0;
        !          3352:                bop_preamble_expected[bop_indx] = FLAG_OFF;
        !          3353:                break;
        !          3354:            default:
        !          3355:                put_op(op);
        !          3356:                break;
        !          3357:        }
        !          3358: }
        !          3359: 
        !          3360: 
        !          3361: /****************************************************************
        !          3362:  *
        !          3363:  *     proc_overlay:           process the current
        !          3364:  *                               ovly_pg[input_indx][merge_indx]
        !          3365:  *
        !          3366:  ****************************************************************/
        !          3367: 
        !          3368: proc_overlay()
        !          3369: {
        !          3370: 
        !          3371:        put_op(OP_dosavesimplebody);
        !          3372:        put_op(OP_beginBody);
        !          3373:        ovly_indx = ovly_pg[input_indx][merge_indx];
        !          3374:        if  ((ovly_den[0][ovly_indx] != 0) ||
        !          3375:             (ovly_den[1][ovly_indx] != 0))
        !          3376:        {
        !          3377:            if  ((ovly_den[0][ovly_indx] == 0) ||
        !          3378:                 (ovly_den[0][ovly_indx] == 1))
        !          3379:                put_Integer(ovly_num[0][ovly_indx]);
        !          3380:            else
        !          3381:                put_seqRational(ovly_num[0][ovly_indx],
        !          3382:                                ovly_den[0][ovly_indx]);
        !          3383:            if  ((ovly_den[1][ovly_indx] == 0) ||
        !          3384:                 (ovly_den[1][ovly_indx] == 1))
        !          3385:                put_Integer(ovly_num[1][ovly_indx]);
        !          3386:            else
        !          3387:                put_seqRational(ovly_num[1][ovly_indx],
        !          3388:                                ovly_den[1][ovly_indx]);
        !          3389:            put_op(OP_translate);
        !          3390:            put_op(OP_concatt);
        !          3391:        }
        !          3392:        proc_ovly_file(ovly_fname[ovly_indx]);
        !          3393:        put_op(OP_endBody);
        !          3394: 
        !          3395: }
        !          3396: 
        !          3397: 
        !          3398: /****************************************************************
        !          3399:  *
        !          3400:  *     prc_ovly_file(fname):
        !          3401:  *     proc_ovly_file: try to open specified filename;
        !          3402:  *                             if open_err,
        !          3403:  *                                 create a SIF reference
        !          3404:  *                             else,
        !          3405:  *                                 process as a SIF
        !          3406:  *
        !          3407:  ****************************************************************/
        !          3408: 
        !          3409: proc_ovly_file(fname)
        !          3410: 
        !          3411:        char    *fname;
        !          3412: {
        !          3413:        int     retcd, pgnum;
        !          3414:        char    msg[128];
        !          3415: 
        !          3416: 
        !          3417:        ovly_file = fopen(fname, "r");
        !          3418:        if  (ovly_file == NULL)
        !          3419:        {
        !          3420:            (void)sprintf(msg,
        !          3421:                "                  --Error opening overlay file:  %s\n",
        !          3422:                fname);
        !          3423:            pip_error(msg);
        !          3424:            create_SIF(fname);
        !          3425:        }
        !          3426:        else
        !          3427:        {
        !          3428:            retcd = get_ip_hdr(ovly_file, fname);
        !          3429:            if  (retcd == ERROR)
        !          3430:                create_SIF(fname);
        !          3431:            else
        !          3432:            {
        !          3433: /***
        !          3434:        The following assumes we're not already nested in a body_operator
        !          3435:        (i.e., that we were at a real endBody when invoked)
        !          3436: ***/
        !          3437:                bop_flag = FLAG_ON;
        !          3438:                bop_indx = 0;
        !          3439:                bop_iindx[0] = 0;
        !          3440:                bop_preamble_expected[0] = FLAG_ON;
        !          3441:                if  (strlen(hdr_workbuf) > IP_HDR_MASTERLEN)
        !          3442:                    prc_IF_fragment(ovly_file, fname);
        !          3443:                else
        !          3444:                {
        !          3445:                    if  (ovly_pgnum[ovly_indx] == 0)
        !          3446:                        pgnum = 1;
        !          3447:                    else
        !          3448:                        pgnum = ovly_pgnum[ovly_indx];
        !          3449:                    prc_IF_master(ovly_file, fname, pgnum);
        !          3450:                }
        !          3451:                bop_flag = FLAG_OFF;
        !          3452:            }
        !          3453:            (void)fclose(ovly_file);
        !          3454:        }
        !          3455: 
        !          3456: }
        !          3457: 
        !          3458: 
        !          3459: /****************************************************************
        !          3460:  *
        !          3461:  *     proc_sequence(type_byte, length, file, filename):
        !          3462:  *     proc_sequence:  process Interpress tokens of type
        !          3463:  *                             <sequence>
        !          3464:  *
        !          3465:  ****************************************************************/
        !          3466: 
        !          3467: proc_sequence(type_byte, length, file, filename)
        !          3468: 
        !          3469:        FILE    *file;
        !          3470:        long    length;
        !          3471:        int     type_byte;
        !          3472:        char    *filename;
        !          3473: {
        !          3474: 
        !          3475:        if  ((type_byte & 0x1f) == sequenceInsertFile)
        !          3476:            proc_SIF_token(type_byte, length, file, filename);
        !          3477:        else
        !          3478:        {
        !          3479:            put_seq_type_len(type_byte, length);
        !          3480:            iocopyn(length, file, filename);
        !          3481:        }
        !          3482: }
        !          3483: 
        !          3484: 
        !          3485: /****************************************************************
        !          3486:  *
        !          3487:  *     prc_SIF_file(sfile, sfilename):
        !          3488:  *     prc_SIF_file:           process sequenceInsertFile
        !          3489:  *
        !          3490:  ****************************************************************/
        !          3491: 
        !          3492: prc_SIF_file(sfile, sfilename)
        !          3493: 
        !          3494:        FILE    *sfile;
        !          3495:        char    *sfilename;
        !          3496: {
        !          3497: 
        !          3498: /*
        !          3499:  *  if the IP_HDR indicates the SIF is a fragment, process as such;
        !          3500:  *  else, for a regular SIF, just process the first page of a master
        !          3501:  */
        !          3502:        if  (strlen(hdr_workbuf) > IP_HDR_MASTERLEN)
        !          3503:            prc_IF_fragment(sfile, sfilename);
        !          3504:        else
        !          3505:            prc_IF_master(sfile, sfilename, 1);
        !          3506: }
        !          3507: 
        !          3508: 
        !          3509: /****************************************************************
        !          3510:  *
        !          3511:  *     proc_SIF_token(type, length, file, filename):
        !          3512:  *     proc_SIF_token: process sequenceInsertFile token
        !          3513:  *
        !          3514:  ****************************************************************/
        !          3515: 
        !          3516: proc_SIF_token(type_byte, length, file, filename)
        !          3517: 
        !          3518:        FILE    *file;
        !          3519:        long    length;
        !          3520:        int     type_byte;
        !          3521:        char    *filename;
        !          3522: {
        !          3523:        int     i, retcd;
        !          3524:        char    msg[128], buf[MX_HDR_BUFLEN], open_buf[MX_HDR_BUFLEN];
        !          3525:        static  char *preserve_msg =
        !          3526:                     "                  --(Preserving the SIF reference)\n",
        !          3527:                     *remove_msg =
        !          3528:                     "                  --(Removing the SIF reference)\n";
        !          3529: 
        !          3530: 
        !          3531:        ++num_sifs;
        !          3532:        ++tnum_sifs;
        !          3533:        test_newline();
        !          3534:        put_offset_msg_to_prop((in_offset-1), "--SIF:  ");
        !          3535: 
        !          3536:        if  ((length == 0) || (length > MX_HDR_BUFLEN))
        !          3537:        {
        !          3538:            (void)sprintf(msg,
        !          3539:                "--Warning:  sequenceInsertFile token encountered with\n");
        !          3540:            pip_error(msg);
        !          3541:            (void)sprintf(msg, "            descriptor length = %d\n",
        !          3542:                                length);
        !          3543:            pip_error(msg);
        !          3544:            (void)sprintf(msg, "(ERROR:  Descriptor length = %d)\n", length);
        !          3545:            pip_prop(msg);
        !          3546:            if  (proc_flag[REMOVE_SIFS] == FLAG_ON)
        !          3547:            {
        !          3548:                pip_error(remove_msg);
        !          3549:                ioreadn(length, file, filename);
        !          3550:            }
        !          3551:            else
        !          3552:            {
        !          3553:                pip_error(preserve_msg);
        !          3554: /*
        !          3555:  *  preserve the SIF reference
        !          3556:  */
        !          3557:                copy_preserve_SIF(type_byte, length, file, filename);
        !          3558:            }
        !          3559:        }
        !          3560:        else
        !          3561:        {
        !          3562:            iogetn(length, file, filename, buf);
        !          3563:            (void)strcpy(open_buf, buf);
        !          3564: 
        !          3565:            (void)sprintf(msg, "          --SIF:  %s  (nesting depth=%d)\n",
        !          3566:                    buf, sif_indx);
        !          3567:            pip_error(msg);
        !          3568:            (void)sprintf(msg, "%s\n", buf);
        !          3569:            pip_prop(msg);
        !          3570: /*
        !          3571:  *  Check for alias
        !          3572:  */
        !          3573:            for (i=0; i < num_aliases; i++)
        !          3574:            {
        !          3575:                if  (strcmp(buf, alias_ref[i]) == 0)
        !          3576:                {
        !          3577:                    (void)strcpy(open_buf, alias_act[i]);
        !          3578:                    (void)sprintf(msg, "                  --Alias: %s=%s\n",
        !          3579:                                  buf, open_buf);
        !          3580:                    pip_error(msg);
        !          3581:                    indent((off_indent + cur_indent + 8), propfile);
        !          3582:                    (void)sprintf(msg,"--Alias: %s=%s\n", buf, open_buf);
        !          3583:                    pip_prop(msg);
        !          3584:                    break;
        !          3585:                }
        !          3586:            }
        !          3587: 
        !          3588:            if  (proc_flag[SATISFY_SIFS] == FLAG_OFF)
        !          3589:            {
        !          3590:                if  (proc_flag[REMOVE_SIFS] == FLAG_ON)
        !          3591:                    pip_error(remove_msg);
        !          3592:                else
        !          3593:                {
        !          3594:                    pip_error(
        !          3595:        "                  -s switch (Satisfy SIFS option) not specified\n");
        !          3596:                    pip_error(preserve_msg);
        !          3597:                    put_preserve_SIF(type_byte, length, buf);
        !          3598:                }
        !          3599:            }
        !          3600:            else
        !          3601:            if  (sif_indx >= MX_SIF_DEPTH)
        !          3602:            {
        !          3603:                (void)sprintf(msg,
        !          3604:               "*** warning:  maximum SIF nesting depth allowed in IPFE=%d\n",
        !          3605:                        MX_SIF_DEPTH);
        !          3606:                pip_error(msg);
        !          3607:                if  (proc_flag[REMOVE_SIFS] == FLAG_ON)
        !          3608:                    pip_error(remove_msg);
        !          3609:                else
        !          3610:                {
        !          3611:                    pip_error(preserve_msg);
        !          3612: /*
        !          3613:  *  preserve the SIF reference
        !          3614:  */
        !          3615:                    put_preserve_SIF(type_byte, length, buf);
        !          3616:                }
        !          3617:            }
        !          3618:            else
        !          3619:            {
        !          3620:                sif_file[sif_indx] = fopen(open_buf, "r");
        !          3621:                if  (sif_file[sif_indx] == NULL)
        !          3622:                {
        !          3623:                    pip_error("                  ");
        !          3624:                    (void)sprintf(msg, "--Error opening SIF file: %s\n",
        !          3625:                                  open_buf);
        !          3626:                    pip_error(msg);
        !          3627:                    indent((off_indent + cur_indent + 8), propfile);
        !          3628:                    pip_prop(msg);
        !          3629:                    if  (proc_flag[REMOVE_SIFS] == FLAG_ON)
        !          3630:                        pip_error(remove_msg);
        !          3631:                    else
        !          3632:                    {
        !          3633:                        pip_error(preserve_msg);
        !          3634: /*
        !          3635:  *  preserve the SIF reference
        !          3636:  */
        !          3637:                        put_preserve_SIF(type_byte, length, buf);
        !          3638:                    }
        !          3639:                }
        !          3640:                else
        !          3641:                {
        !          3642: /*
        !          3643:  *  check the validity of the SIF hdr
        !          3644:  */
        !          3645:                    retcd = get_ip_hdr(sif_file[sif_indx], open_buf);
        !          3646:                    if  (retcd == ERROR)
        !          3647:                    {
        !          3648:                        if  (proc_flag[REMOVE_SIFS] == FLAG_ON)
        !          3649:                            pip_error(remove_msg);
        !          3650:                        else
        !          3651:                        {
        !          3652:                            pip_error(preserve_msg);
        !          3653: /*
        !          3654:  *  preserve the SIF reference
        !          3655:  */
        !          3656:                            put_preserve_SIF(type_byte, length, buf);
        !          3657:                        }
        !          3658:                    }
        !          3659:                    else
        !          3660:                    {
        !          3661:                        (void)strcpy(sif_name[sif_indx], open_buf);
        !          3662:                        sifname = sif_name[sif_indx];
        !          3663:                        siffile = sif_file[sif_indx];
        !          3664: 
        !          3665:                        pip_error(
        !          3666:                    "                  -- Processing SIF content --\n");
        !          3667: 
        !          3668:                        ++sif_indx;
        !          3669:                        prc_SIF_file(siffile, sifname);
        !          3670:                        --sif_indx;
        !          3671:                    }
        !          3672:                    (void)fclose(sif_file[sif_indx]);
        !          3673:                }
        !          3674:            }
        !          3675:        }
        !          3676: 
        !          3677: }
        !          3678: 
        !          3679: 
        !          3680: /****************************************************************
        !          3681:  *
        !          3682:  *     put_Integer(val):
        !          3683:  *     put_Integer:            if  ((val > INTEGER_MAX) ||
        !          3684:  *                                  (val < INTEGER_MIN))
        !          3685:  *                                 put val out as seqInteger
        !          3686:  *                             else
        !          3687:  *                                 put val out as Short Number
        !          3688:  *                                 token (biased by 4000 (0xfa0))
        !          3689:  *
        !          3690:  ****************************************************************/
        !          3691: 
        !          3692: put_Integer(val)
        !          3693: 
        !          3694:        long    val;
        !          3695: {
        !          3696:        int     len;
        !          3697: 
        !          3698: 
        !          3699:        if  ((val < INTEGER_MIN) || (val > INTEGER_MAX))
        !          3700:        {
        !          3701:            len = count_int_bytes(val);
        !          3702:            put_seq_type_len(sequenceInteger, (long)len);
        !          3703:            put_intn(val, len);
        !          3704:        }
        !          3705:        else
        !          3706:        {
        !          3707:            val = val + INTEGER_ZERO;   /* add bias */
        !          3708:            ip_putc((char)((val >> 8) & 0x7f));
        !          3709:            ip_putc((char)val);
        !          3710:        }
        !          3711: 
        !          3712: }
        !          3713: 
        !          3714: 
        !          3715: /****************************************************************
        !          3716:  *
        !          3717:  *     put_intn(val, len):
        !          3718:  *     put_intn:               put specified val out as len bytes
        !          3719:  *
        !          3720:  ****************************************************************/
        !          3721: 
        !          3722: put_intn(val, len)
        !          3723: 
        !          3724:        long    val;
        !          3725:        int     len;            /* measured in bytes */
        !          3726: {
        !          3727:        int     i;
        !          3728: 
        !          3729: 
        !          3730:        if  (len > 0)
        !          3731:        {
        !          3732:            --len;
        !          3733:            for (i=len*8; i >= 0; i=i-8)
        !          3734:                ip_putc((char)(val >> i));
        !          3735:        }
        !          3736: 
        !          3737: }
        !          3738: 
        !          3739: 
        !          3740: /****************************************************************
        !          3741:  *
        !          3742:  *     put_offset_msg_to_prop(off, msg):
        !          3743:  *     put_offset_msg_to_prop:  put specified in_offset (formatted)
        !          3744:  *                                + <:  > + <cur_indent> + msg
        !          3745:  *                                to propfile
        !          3746:  *
        !          3747:  ****************************************************************/
        !          3748: 
        !          3749: put_offset_msg_to_prop(off, msg)
        !          3750: 
        !          3751:        long    off;
        !          3752:        char    *msg;
        !          3753: {
        !          3754: 
        !          3755:        if  (cur_col == 0)
        !          3756:        {
        !          3757:            if  (proc_flag[DEBUG] == FLAG_ON)
        !          3758:                put_offp_to_prop(off);
        !          3759:            indent(cur_indent, propfile);
        !          3760:        }
        !          3761:        pip_prop(msg);
        !          3762: 
        !          3763: }
        !          3764: 
        !          3765: 
        !          3766: /****************************************************************
        !          3767:  *
        !          3768:  *     put_off_to_prop(off, format_flag):
        !          3769:  *     put_off_to_prop:        put specified in_offset (formatted)
        !          3770:  *                             to propfile
        !          3771:  *
        !          3772:  ****************************************************************/
        !          3773: 
        !          3774: put_off_to_prop(off, format_flag)
        !          3775: 
        !          3776:        long    off;
        !          3777:        int     format_flag;
        !          3778: {
        !          3779:        int     i, procflag;
        !          3780:        char    digit;
        !          3781: 
        !          3782: 
        !          3783:        if  (propfile != NULL)
        !          3784:        {
        !          3785:            procflag = FLAG_OFF;
        !          3786:            for (i=20; i >= 0; i=i-4)
        !          3787:            {
        !          3788:                digit = (off >> i) & 0x0f;
        !          3789:                if  ((digit == 0) && (procflag == FLAG_OFF) && (i > 4))
        !          3790:                {
        !          3791:                    if  (format_flag == FORMAT)
        !          3792:                        mputc_prop(SPC);
        !          3793:                }
        !          3794:                else
        !          3795:                {
        !          3796:                    if  (digit > 9)
        !          3797:                        digit = digit + 7;
        !          3798:                    mputc_prop(digit + 0x30);
        !          3799:                    procflag = FLAG_ON;
        !          3800:                }
        !          3801:                if  ((i == 16) &&
        !          3802:                     ((format_flag == FORMAT) || (procflag == FLAG_ON)))
        !          3803:                    mputc_prop(SPC);
        !          3804:            }
        !          3805:        }
        !          3806: 
        !          3807: }
        !          3808: 
        !          3809: 
        !          3810: /****************************************************************
        !          3811:  *
        !          3812:  *     put_offp_to_prop(off):
        !          3813:  *     put_offp_to_prop:       put specified in_offset (formatted
        !          3814:  *                             plus "+  " or ":  " to propfile
        !          3815:  *
        !          3816:  ****************************************************************/
        !          3817: 
        !          3818: put_offp_to_prop(off)
        !          3819: 
        !          3820:        long    off;
        !          3821: {
        !          3822:        put_off_to_prop(off, FORMAT);
        !          3823:        if  (off > 0xffffff)
        !          3824:            pip_prop("+  ");
        !          3825:        else
        !          3826:            pip_prop(":  ");
        !          3827: 
        !          3828: }
        !          3829: 
        !          3830: 
        !          3831: /****************************************************************
        !          3832:  *
        !          3833:  *     put_op(op):
        !          3834:  *     put_op:         put specified op to output
        !          3835:  *
        !          3836:  ****************************************************************/
        !          3837: 
        !          3838: put_op(op)
        !          3839: 
        !          3840:        int     op;
        !          3841: {
        !          3842:        if  (op <= SHORT_OP_LIMIT)
        !          3843:            ip_putc(op | SHORT_OP);
        !          3844:        else
        !          3845:        {
        !          3846:            ip_putc((op >> 8) | LONG_OP);
        !          3847:            ip_putc(op);
        !          3848:        }
        !          3849: }
        !          3850: 
        !          3851: 
        !          3852: /****************************************************************
        !          3853:  *
        !          3854:  *     put_opname_to_prop(op):
        !          3855:  *     put_opname_to_prop:     put specified op_name to propfile
        !          3856:  *
        !          3857:  ****************************************************************/
        !          3858: 
        !          3859: put_opname_to_prop(op)
        !          3860: 
        !          3861:        int     op;
        !          3862: {
        !          3863:        char    msg[128];
        !          3864: 
        !          3865: 
        !          3866:        if  (op != OP_endBody)
        !          3867:            test_begBody();
        !          3868:        begBody_flag = FLAG_OFF;        /* reset because we're ALWAYS putting
        !          3869:                                           SOMETHING to propfile here */
        !          3870: 
        !          3871:        switch
        !          3872:            (op)
        !          3873:        {
        !          3874:            case (OP_beginBlock):
        !          3875:                test_newline();
        !          3876:                (void)sprintf(msg, "%s\n", op_name(op));
        !          3877:                put_offset_msg_to_prop((in_offset-2), msg);
        !          3878:                cur_indent = cur_indent + INDENT_INCR;
        !          3879:                break;
        !          3880:            case (OP_endBlock):
        !          3881:                cur_indent = cur_indent - INDENT_INCR;
        !          3882:                test_newline();
        !          3883:                put_offset_msg_to_prop((in_offset-2), op_name(op));
        !          3884:                if  (proc_flag[DEBUG] == FLAG_ON)
        !          3885:                {
        !          3886:                    indent((INDENT_INCR - 1), propfile);
        !          3887:                    mputc_prop('(');
        !          3888:                    put_off_to_prop((in_offset-1), DONT_FORMAT);
        !          3889:                    mputc_prop(')');
        !          3890:                }
        !          3891:                mputc_prop('\n');
        !          3892:                break;
        !          3893:            case (OP_beginBody):
        !          3894:                put_offset_msg_to_prop((in_offset-2), op_name(op));
        !          3895:                indent((INDENT_INCR - 1), propfile);
        !          3896:                if  ((proc_flag[PROPERTIES] == FLAG_ON) && (prop_level > 0))
        !          3897:                {
        !          3898:                    if  ((preamble_expected == FLAG_OFF) &&
        !          3899:                         (endpreamble_expected == FLAG_OFF) &&
        !          3900:                         (bop_flag == FLAG_OFF))
        !          3901:                    {           /* we have a righteous pageBody */
        !          3902:                        (void)sprintf(msg, "Pg%d", (tnum_pages + 1));
        !          3903:                        pip_prop(msg);
        !          3904:                        indent((INDENT_INCR - 1), propfile);
        !          3905:                    }
        !          3906:                }
        !          3907:                cur_indent = cur_indent + INDENT_INCR;
        !          3908:                break;
        !          3909:            case (OP_endBody):
        !          3910:                cur_indent = cur_indent - INDENT_INCR;
        !          3911:                if  (cur_col == 0)
        !          3912:                    indent((cur_indent + off_indent), propfile);
        !          3913:                pip_prop(op_name(op));
        !          3914:                if  ((proc_flag[PROPERTIES] == FLAG_ON) && (prop_level > 0))
        !          3915:                {
        !          3916:                    if  ((endpreamble_expected == FLAG_OFF) &&
        !          3917:                         (bop_flag == FLAG_OFF))
        !          3918:                    {           /* we have a righteous endBody */
        !          3919:                        indent((INDENT_INCR - 1), propfile);
        !          3920:                        (void)sprintf(msg, "endPg%d", tnum_pages);
        !          3921:                        pip_prop(msg);
        !          3922:                    }
        !          3923:                }
        !          3924:                if  (proc_flag[DEBUG] == FLAG_ON)
        !          3925:                {
        !          3926:                    indent((INDENT_INCR - 1), propfile);
        !          3927:                    mputc_prop('(');
        !          3928:                    put_off_to_prop((in_offset-1), DONT_FORMAT);
        !          3929:                    mputc_prop(')');
        !          3930:                }
        !          3931:                if  (debug_flag == FLAG_ON)
        !          3932:                {
        !          3933:                    indent((INDENT_INCR - 1), propfile);
        !          3934:                    (void)sprintf(msg,"[%d %d %d %d]",
        !          3935:                                    bop_indx,
        !          3936:                                    bop_iindx[bop_indx],
        !          3937:                                    bop_iindx[0],
        !          3938:                                    endpreamble_expected);
        !          3939:                    pip_prop(msg);
        !          3940:                }
        !          3941:                mputc_prop('\n');
        !          3942:                break;
        !          3943:            case (OP_makesimpleco):
        !          3944:            case (OP_dosavesimplebody):
        !          3945:            case (OP_if):
        !          3946:            case (OP_ifelse):
        !          3947:            case (OP_ifcopy):
        !          3948:                put_offset_msg_to_prop((in_offset-2), op_name(op));
        !          3949:                mputc_prop('\n');
        !          3950:                break;
        !          3951:            case (OP_correct):
        !          3952: /*
        !          3953:  *  don't do all those nasty CORRECT's unless the user forces us to
        !          3954:  */
        !          3955:                if  (prop_level > 1)
        !          3956:                {
        !          3957:                    put_offset_msg_to_prop((in_offset-2), op_name(op));
        !          3958:                    mputc_prop('\n');
        !          3959:                }
        !          3960:                break;
        !          3961:            default:
        !          3962:                break;
        !          3963:        }
        !          3964: }
        !          3965: 
        !          3966: 
        !          3967: /****************************************************************
        !          3968:  *
        !          3969:  *     put_seqRational(num, den):
        !          3970:  *     put_seqRational:        put specified numerator & denominator
        !          3971:  *                             out as a sequenceRational
        !          3972:  *
        !          3973:  ****************************************************************/
        !          3974: 
        !          3975: put_seqRational(num, den)
        !          3976: 
        !          3977:        long    num, den;
        !          3978: {
        !          3979:        int     len, num_len, den_len;
        !          3980: 
        !          3981: 
        !          3982:        num_len = count_int_bytes(num);
        !          3983:        den_len = count_int_bytes(den);
        !          3984:        if  (num_len > den_len)
        !          3985:            len = num_len;
        !          3986:        else
        !          3987:            len = den_len;
        !          3988:        put_seq_type_len(sequenceRational, (long)(len * 2));
        !          3989:        put_intn(num, len);
        !          3990:        put_intn(den, len);
        !          3991: 
        !          3992: }
        !          3993: 
        !          3994: 
        !          3995: /****************************************************************
        !          3996:  *
        !          3997:  *     put_seq_type_len(type_byte, length):
        !          3998:  *     put_seq_type_len:       put specified type_byte & length
        !          3999:  *                             to output
        !          4000:  *
        !          4001:  ****************************************************************/
        !          4002: 
        !          4003: put_seq_type_len(type_byte, length)
        !          4004: 
        !          4005:        long    length;
        !          4006:        int     type_byte;
        !          4007: {
        !          4008:        if  (length > SHORT_SEQUENCE_LIMIT)
        !          4009:        {
        !          4010:            ip_putc((char)(LONG_SEQUENCE | (type_byte & 0x1f)));
        !          4011:            ip_putc((char)(length >> 16));
        !          4012:            ip_putc((char)(length >> 8));
        !          4013:            ip_putc((char)length);
        !          4014:        }
        !          4015:        else
        !          4016:        {
        !          4017:            ip_putc((char)(SHORT_SEQUENCE | (type_byte & 0x1f)));
        !          4018:            ip_putc((char)length);
        !          4019:        }
        !          4020: 
        !          4021: }
        !          4022: 
        !          4023: 
        !          4024: /****************************************************************
        !          4025:  *
        !          4026:  *     test_begBody:           if beBody flag is set,
        !          4027:  *                               put a newline to propfile
        !          4028:  *
        !          4029:  ****************************************************************/
        !          4030: 
        !          4031: test_begBody()
        !          4032: {
        !          4033:        if  (begBody_flag == FLAG_ON)
        !          4034:        {
        !          4035:            mputc_prop('\n');
        !          4036:            begBody_flag = FLAG_OFF;
        !          4037:        }
        !          4038: }
        !          4039: 
        !          4040: 
        !          4041: 
        !          4042: /****************************************************************
        !          4043:  *
        !          4044:  *     test_newline:           if cur_col != 0,
        !          4045:  *                               put a newline to propfile
        !          4046:  *
        !          4047:  ****************************************************************/
        !          4048: 
        !          4049: test_newline()
        !          4050: {
        !          4051:        if  (cur_col != 0)
        !          4052:            mputc_prop('\n');
        !          4053: 
        !          4054: }
        !          4055: 
        !          4056: 
        !          4057: /****************************************************************
        !          4058:  *
        !          4059:  *     usage:          dsply the cmd_line interface
        !          4060:  *
        !          4061:  ****************************************************************/
        !          4062: 
        !          4063: Usage()
        !          4064: {
        !          4065:   fprintf(STDERR,
        !          4066:   "Usage:\n");
        !          4067:   fprintf(STDERR,
        !          4068:   "        ipfe [ options ] file [pagerange ... [file [pagerange]...]\n");
        !          4069:   fprintf(STDERR,
        !          4070:   "Options:\n");
        !          4071:   fprintf(STDERR,
        !          4072:   "         [-l logfile] [-dDiLqrRs] [-a alias:actual [-a alias:actual]\n");
        !          4073:   fprintf(STDERR,
        !          4074:   "         ...] [-b offset:unit] [-c count:unit] [-o outfile]\n");
        !          4075:   fprintf(STDERR,
        !          4076:   "         [-p level:propfile] [-S factor] [-X offset:unit]\n");
        !          4077:   fprintf(STDERR,
        !          4078:   "         [-Y offset:unit]\n\n");
        !          4079: 
        !          4080:   fprintf(STDERR,
        !          4081:   "          -a alias:actual (alias). If the -s option is specified,\n");
        !          4082:   fprintf(STDERR,
        !          4083:   "                         replace any SIF matching the string \"alias\"\n");
        !          4084:   fprintf(STDERR,
        !          4085:   "                         with the string \"actual\" before attempting\n");
        !          4086:   fprintf(STDERR,
        !          4087:   "                         to satisfy the SIF. If \"actual\" cannot be\n");
        !          4088:   fprintf(STDERR,
        !          4089:   "                         opened or there is some error, the SIF\n");
        !          4090:   fprintf(STDERR,
        !          4091:   "                         \"alias\" is preserved, unless the -r option\n");
        !          4092:   fprintf(STDERR,
        !          4093:   "                         is also specified.\n");
        !          4094:   fprintf(STDERR,
        !          4095:  "          -b offset:unit (binding offset). Shift the image offset units\n");
        !          4096:   fprintf(STDERR,
        !          4097:   "                         in the x-direction, where unit may be: none\n");
        !          4098:   fprintf(STDERR,
        !          4099:   "                         (default centimeters), c (centimeters), i\n");
        !          4100:   fprintf(STDERR,
        !          4101:   "                         (inches), p (points), P (Picas). If the -L\n");
        !          4102:   fprintf(STDERR,
        !          4103:   "                         (Landscape) switch is set, the image shift\n");
        !          4104:   fprintf(STDERR,
        !          4105:   "                         is in the y-direction.\n");
        !          4106:   fprintf(STDERR,
        !          4107:   "          -c count:unit  (chapterize) every count units, where unit\n");
        !          4108:   fprintf(STDERR,
        !          4109:   "                         be: p (pages), k (kilobytes), m (megabytes).\n");
        !          4110:   fprintf(STDERR,
        !          4111:   "          -d             (duplex). For resolving binding offset.\n");
        !          4112:   fprintf(STDERR,
        !          4113:   "          -D             (debug). If the -p option is specified, also\n");
        !          4114:   fprintf(STDERR,
        !          4115:   "                         write to the properties file the offsets of\n");
        !          4116:   fprintf(STDERR,
        !          4117:   "                         each skeleton-level token encountered.\n");
        !          4118:   fprintf(STDERR,
        !          4119:   "          -i             (insert SIF for overlay). Insert (create) a\n");
        !          4120:   fprintf(STDERR,
        !          4121:   "                         SIF for any unresolvable overlays.\n");
        !          4122:   fprintf(STDERR,
        !          4123:   "          -l logfile     (log). Keep a running log.\n");
        !          4124:   fprintf(STDERR,
        !          4125:   "          -L             (Landscape). Rotate every page 90 degrees\n");
        !          4126:   fprintf(STDERR,
        !          4127:   "                         counterclockwise and preserve the upper left\n");
        !          4128:   fprintf(STDERR,
        !          4129:   "                         corner. Intended for printing text in\n");
        !          4130:   fprintf(STDERR,
        !          4131:   "                         landscape orientation.\n");
        !          4132:   fprintf(STDERR,
        !          4133:   "          -o outfile     (output). Where the output goes. If there is\n");
        !          4134:   fprintf(STDERR,
        !          4135:   "                         no -o and there is a -p, only the properties\n");
        !          4136:   fprintf(STDERR,
        !          4137:   "                         are written, else if there is no -o,\n");
        !          4138:   fprintf(STDERR,
        !          4139:   "                         \"infile.ip\" is used if it doesn't already\n");
        !          4140:   fprintf(STDERR,
        !          4141:   "                         exist, else \"infileN.ip\" is used, where N\n");
        !          4142:   fprintf(STDERR,
        !          4143:  "                         is the lowest integer such that \"infileN.ip\"\n");
        !          4144:   fprintf(STDERR,
        !          4145:   "                         does not already exist.\n");
        !          4146:   fprintf(STDERR,
        !          4147:   "          -p level:propfile\n");
        !          4148:   fprintf(STDERR,
        !          4149:   "                         (properties). Where the properties are\n");
        !          4150:   fprintf(STDERR,
        !          4151:   "                         written. Increasing levels provide increasing\n");
        !          4152:   fprintf(STDERR,
        !          4153:   "                         information details.\n");
        !          4154:   fprintf(STDERR,
        !          4155:   "          -q             (quiet). Don't write info and error msgs (to\n");
        !          4156:   fprintf(STDERR,
        !          4157:   "                         STDERR).\n");
        !          4158:   fprintf(STDERR,
        !          4159:   "          -r             (remove SIFS). If -s is also specified, it\n");
        !          4160:   fprintf(STDERR,
        !          4161:   "                         takes precedence and a SIF reference is\n");
        !          4162:   fprintf(STDERR,
        !          4163:   "                         removed only if it is unresolved or there is\n");
        !          4164:   fprintf(STDERR,
        !          4165:   "                         some other error.\n");
        !          4166:   fprintf(STDERR,
        !          4167:   "          -R             (Rotate). Rotate every page 90 degrees\n");
        !          4168:   fprintf(STDERR,
        !          4169:   "                         clockwise and preserve the center point.\n");
        !          4170:   fprintf(STDERR,
        !          4171:   "                         Intended for rotating an image created for a\n");
        !          4172:   fprintf(STDERR,
        !          4173:   "                         \"landscape printer\" to print in portrait\n");
        !          4174:   fprintf(STDERR,
        !          4175:   "                         orientation.\n");
        !          4176:   fprintf(STDERR,
        !          4177:   "          -s             (satisfy SIFS). Replace any SIF reference\n");
        !          4178:   fprintf(STDERR,
        !          4179:   "                         with the tokens found in the referenced file.\n");
        !          4180:   fprintf(STDERR,
        !          4181:   "                         If the referenced file cannot be opened, the\n");
        !          4182:   fprintf(STDERR,
        !          4183:   "                         SIF reference is preserved unless -r is also\n");
        !          4184:   fprintf(STDERR,
        !          4185:   "                         specified.\n");
        !          4186:   fprintf(STDERR,
        !          4187:   "          -S factor      (scale). Scale the image by factor.\n");
        !          4188:   fprintf(STDERR,
        !          4189:   "          -X offset:unit (X-imageShift). Shift the image offset units\n");
        !          4190:   fprintf(STDERR,
        !          4191:   "                         in the x-direction, where unit may be: none\n");
        !          4192:   fprintf(STDERR,
        !          4193:   "                         (default centimeters), c (centimeters), i\n");
        !          4194:   fprintf(STDERR,
        !          4195:   "                         (inches), p (points), P (Picas). The shift\n");
        !          4196:   fprintf(STDERR,
        !          4197:   "                         is independent of the -L and -R switches\n");
        !          4198:   fprintf(STDERR,
        !          4199:   "                         (i.e., the x-direction is the same as the\n");
        !          4200:   fprintf(STDERR,
        !          4201:   "                         unrotated image).\n");
        !          4202:   fprintf(STDERR,
        !          4203:   "          -Y offset:unit (Y-imageShift). Shift the image offset units\n");
        !          4204:   fprintf(STDERR,
        !          4205:   "                         in the y-direction, where unit may be: none\n");
        !          4206:   fprintf(STDERR,
        !          4207:   "                         (default centimeters), c (centimeters), i\n");
        !          4208:   fprintf(STDERR,
        !          4209:   "                         (inches), p (points), P (Picas). The shift\n");
        !          4210:   fprintf(STDERR,
        !          4211:   "                         is independent of the -L and -R switches\n");
        !          4212:   fprintf(STDERR,
        !          4213:   "                         (i.e., the y-direction is the same as the\n");
        !          4214:   fprintf(STDERR,
        !          4215:   "                         unrotated image).\n");
        !          4216:   fprintf(STDERR,
        !          4217:   "          infile [pagerange]\n");
        !          4218:   fprintf(STDERR,
        !          4219:   "                         See the manual page for syntax details.\n");
        !          4220:   fprintf(STDERR,
        !          4221:   "            Example:\n");
        !          4222:   fprintf(STDERR,
        !          4223:   "              [1,4-6,9[pic1],10-11,12[pic2:2(2P,4P)][pic3(-4P,-2P)],15-]\n\n");
        !          4224: 
        !          4225:   exit(1);
        !          4226: }
        !          4227: 
        !          4228: /***  end of file = IPFE.C  *************************************/

unix.superglobalmegacorp.com

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