Annotation of researchv10no/cmd/postscript/common/request.c, revision 1.1

1.1     ! root        1: /*
        !             2:  *
        !             3:  * Things used to handle special requests (eg. manual feed) globally or on a per
        !             4:  * page basis. Requests are passed through to the translator using the -R option.
        !             5:  * The argument to -R can be "request", "request:page", or "request:page:file".
        !             6:  * If page is omitted (as in the first form) or set to 0 request will be applied
        !             7:  * to the global environment. In all other cases it applies only to the selected
        !             8:  * page. If a file is given, page must be supplied, and the lookup is in that file
        !             9:  * rather than *requestfile.
        !            10:  *
        !            11:  */
        !            12: 
        !            13: #include <stdio.h>
        !            14: 
        !            15: #include "gen.h"                       /* general purpose definitions */
        !            16: #include "request.h"                   /* a few special definitions */
        !            17: #include "path.h"                      /* for the default request file */
        !            18: 
        !            19: Request        request[MAXREQUEST];            /* next page or global request */
        !            20: int    nextreq = 0;                    /* goes in request[nextreq] */
        !            21: char   *requestfile = REQUESTFILE;     /* default lookup file */
        !            22: 
        !            23: /*****************************************************************************/
        !            24: 
        !            25: saverequest(want)
        !            26: 
        !            27:     char       *want;                  /* grab code for this stuff */
        !            28: 
        !            29: {
        !            30: 
        !            31:     char       *page;                  /* and save it for this page */
        !            32:     char       *strtok();
        !            33: 
        !            34: /*
        !            35:  *
        !            36:  * Save the request until we get to appropriate page - don't even bother with
        !            37:  * the lookup right now. Format of *want string is "request", "request:page", or
        !            38:  * "request:page:file", and we assume we can change the string here as needed.
        !            39:  * If page is omitted or given as 0 the request will be done globally. If *want
        !            40:  * includes a file, request and page must also be given, and in that case *file
        !            41:  * will be used for the lookup.
        !            42:  *
        !            43:  */
        !            44: 
        !            45:     if ( nextreq < MAXREQUEST )  {
        !            46:        request[nextreq].want = strtok(want, ": ");
        !            47:        if ( (page = strtok(NULL, ": ")) == NULL )
        !            48:            request[nextreq].page = 0;
        !            49:        else request[nextreq].page = atoi(page);
        !            50:        if ( (request[nextreq].file = strtok(NULL, ": ")) == NULL )
        !            51:            request[nextreq].file = requestfile;
        !            52:        nextreq++;
        !            53:     } else error(NON_FATAL, "too many requests - ignoring %s", want);
        !            54: 
        !            55: }   /* End of saverequest */
        !            56: 
        !            57: /*****************************************************************************/
        !            58: 
        !            59: writerequest(page, fp_out)
        !            60: 
        !            61:     int                page;                   /* write everything for this page */
        !            62:     FILE       *fp_out;                /* to this file */
        !            63: 
        !            64: {
        !            65: 
        !            66:     int                i;                      /* loop index */
        !            67: 
        !            68: /*
        !            69:  *
        !            70:  * Writes out all the requests that have been saved for page. Page 0 refers to
        !            71:  * the global environment and is done during initial setup.
        !            72:  *
        !            73:  */
        !            74: 
        !            75:     for ( i = 0; i < nextreq; i++ )
        !            76:        if ( request[i].page == page )
        !            77:            dumprequest(request[i].want, request[i].file, fp_out);
        !            78: 
        !            79: }   /* End of writerequest */
        !            80: 
        !            81: /*****************************************************************************/
        !            82: 
        !            83: dumprequest(want, file, fp_out)
        !            84: 
        !            85:     char       *want;                  /* look for this string */
        !            86:     char       *file;                  /* in this file */
        !            87:     FILE       *fp_out;                /* and write the value out here */
        !            88: 
        !            89: {
        !            90: 
        !            91:     char       buf[100];               /* line buffer for reading *file */
        !            92:     FILE       *fp_in;
        !            93: 
        !            94: /*
        !            95:  *
        !            96:  * Looks for *want in the request file and if it's found the associated value
        !            97:  * is copied to the output file. Keywords (ie. the *want strings) begin an @ in
        !            98:  * the first column of file, while the values (ie. the stuff that's copied to
        !            99:  * the output file) starts on the next line and extends to the next keyword or
        !           100:  * to the end of file.
        !           101:  *
        !           102:  */
        !           103: 
        !           104:     if ( (fp_in = fopen(file, "r")) != NULL )  {
        !           105:        while ( fgets(buf, sizeof(buf), fp_in) != NULL )
        !           106:            if ( buf[0] == '@' && strncmp(want, &buf[1], strlen(want)) == 0 )
        !           107:                while ( fgets(buf, sizeof(buf), fp_in) != NULL )
        !           108:                    if ( buf[0] == '#' || buf[0] == '%' )
        !           109:                        continue;
        !           110:                    else if ( buf[0] != '@' )
        !           111:                        fprintf(fp_out, "%s", buf);
        !           112:                    else break;
        !           113:        fclose(fp_in);
        !           114:     }  /* End if */
        !           115: 
        !           116: }   /* End of dumprequest */
        !           117: 
        !           118: /*****************************************************************************/
        !           119: 

unix.superglobalmegacorp.com

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