Annotation of researchv9/jerq/sgs/strip/setflags.c, revision 1.1.1.1

1.1       root        1: /* UNIX HEADER */
                      2: #include       <stdio.h>
                      3: 
                      4: /* SGS SPECIFIC HEADER */
                      5: #include       "sgs.h"
                      6: 
                      7: /* STRIP HEADER */
                      8: #include       "defs.h"
                      9: 
                     10: /* EXTERNAL VARIABLES DEFINED */
                     11: int    lflag = OFF;
                     12: int    xflag = OFF;
                     13: int    bflag = OFF;
                     14: int    rflag = OFF;
                     15: int    sflag = OFF;
                     16: int    fflag = OFF;
                     17: 
                     18: 
                     19:     /*  setflags(flagc, flagv)
                     20:      *
                     21:      *  scans the command line for flags (arguments beginning with a '-')
                     22:      *  sets the appropriate flags and removes the flag arguments from the
                     23:      *  command line
                     24:      *
                     25:      *  defines:
                     26:      *      - lflag = OFF by default
                     27:      *             = ON if -l appears in the command line:  strip line nos only
                     28:      *      - xflag = OFF by default
                     29:      *             = ON if -x appears in command line:  strip local symbols and
                     30:      *               line numbers only
                     31:      *     - bflag = OFF by default
                     32:      *             = ON if -b appears in command line: strip all local symbols
                     33:      *               except beginning and end of block (.bb and .eb) and 
                     34:      *               beginning and end of function (.bf and .ef).
                     35:      *      - rflag = OFF by default
                     36:      *         = ON if -r appears in command line: strip all but static
                     37:      *           externs, .bf, and .ef
                     38:      *     - fflag = OFF by default
                     39:      *         = ON if -f appears in the command line, same as xflag plus
                     40:      *           strip relocation information for sections not of type
                     41:      *           type copy, for DMERT only
                     42:      *
                     43:      *  prints an error message if any unknown flag shows up
                     44:      *
                     45:      *  returns the number of arguments remaining in argv (they are repositioned
                     46:      *  in filev and are presumed to be object files).
                     47:      */
                     48: 
                     49: 
                     50: int
                     51: setflags(flagc, flagv)
                     52: 
                     53: int    flagc;
                     54: char   **flagv;
                     55: 
                     56: {
                     57:     /* UNIX FUNCTIONS CALLED */
                     58:     extern     fprintf( );
                     59: 
                     60:     /* EXTERNAL VARIABLES USED */
                     61:     extern int         lflag;
                     62:     extern int         xflag;
                     63:     extern int         bflag;
                     64:     extern int         rflag;
                     65:     extern int         sflag;
                     66: #if !UNIX
                     67:     extern int         fflag;
                     68: #endif
                     69: 
                     70:     /* LOCAL VARIABLES */
                     71:     int                filec;
                     72:     char       **filev;
                     73: 
                     74: 
                     75:     for (filec = 0, filev = flagv; flagc > 0; --flagc, ++flagv) {
                     76:        if (**flagv == '-') {
                     77:            while(*++*flagv != '\0') {
                     78:                switch(**flagv) {
                     79:                    case 'l':
                     80:                        lflag = ON;
                     81:                        break;
                     82: 
                     83:                    case 'x':
                     84:                        xflag = ON;
                     85:                        break;
                     86: 
                     87:                    case 'b':
                     88:                        bflag = ON;
                     89:                        break;
                     90: 
                     91:                    case 'r':
                     92:                        rflag = ON;
                     93:                        break;
                     94: #if !UNIX
                     95:                    case 's':
                     96:                        sflag = ON;
                     97:                        break;
                     98: #endif
                     99: 
                    100: #if !UNIX
                    101:                    case 'f':
                    102:                        fflag = ON;
                    103:                        rflag = ON;
                    104:                        break;
                    105: #endif
                    106:                    case 'V':
                    107:                        fprintf(stderr,"%s: strip -%s\n",SGSNAME,RELEASE);
                    108:                        break;
                    109: 
                    110:                    default:
                    111:                        fprintf(stderr,
                    112:                                "%sstrip:  unknown option \"%c\" ignored\n",
                    113:                                SGS, **flagv);
                    114:                        break;
                    115:                }
                    116:            }
                    117:        } else {
                    118:            *filev++ = *flagv;
                    119:            ++filec;
                    120:        }
                    121:     }
                    122: 
                    123: 
                    124:        if (lflag && sflag)
                    125:        {
                    126:                fprintf( stderr, "%sstrip: -l and -s are incompatible options\n", SGS );
                    127:                exit(1);
                    128:        }
                    129:        if ((xflag || bflag) && rflag)
                    130:        {
                    131:                fprintf( stderr, "%sstrip: -x and -r are incompatible options\n", SGS );
                    132:                exit(1);
                    133:        }
                    134:        if (lflag)
                    135:                xflag = bflag = rflag = fflag = sflag = OFF;
                    136: 
                    137:     return(filec);
                    138: }
                    139: /*
                    140:  *     @(#)setflags.c  1.6 11/11/83;
                    141:  */

unix.superglobalmegacorp.com

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