Annotation of 43BSDTahoe/new/X/showimg/shgetopt.c, revision 1.1.1.1

1.1       root        1: 
                      2: /* collect and interpret runtime options for showimg,
                      3:  * 
                      4:  * 8/12/86  Bill Wyatt
                      5:  * 
                      6:  * Also opens the display, since to set up certain color
                      7:  * options, the display must be accessible.
                      8:  */
                      9: 
                     10: #include <stdio.h>
                     11: #include <X/Xlib.h>
                     12: 
                     13: #include "shimg.h"
                     14: #include "shopt.h"
                     15: 
                     16: short gray_bits[16] = {
                     17:     0xaaaa, 0x5555, 0xaaaa, 0x5555,
                     18:     0xaaaa, 0x5555, 0xaaaa, 0x5555,
                     19:     0xaaaa, 0x5555, 0xaaaa, 0x5555,
                     20:     0xaaaa, 0x5555, 0xaaaa, 0x5555};
                     21: 
                     22: shgetopt(argc, argv, maininfo, colorinfo, imageinfo)
                     23:      int argc;
                     24:      char *argv[];
                     25:      struct windmain *maininfo;
                     26:      struct colorwind *colorinfo;
                     27:      struct imagewind *imageinfo;
                     28: {
                     29:     Color cdef;
                     30:     char *option, *border_color, *back_color;
                     31:     int i, strcmp(), atoi();
                     32:     char *index();
                     33: 
                     34: 
                     35:     if ((option = XGetDefault(argv[0],"BorderWidth")) != NULL)
                     36:       maininfo->frame.bdrwidth = atoi(option);
                     37:     else maininfo->frame.bdrwidth = 0;
                     38: 
                     39:     if ((border_color = XGetDefault(argv[0],"Border")) == NULL)
                     40:       border_color = XGetDefault(argv[0],"BorderColor");
                     41: 
                     42:     back_color = XGetDefault(argv[0],"Background");
                     43: 
                     44: 
                     45:     for (i = 1; i < argc; i++) {
                     46:        if (argv[i][0] == '=') {
                     47:            maininfo->geometry = argv[i];
                     48:            continue;
                     49:        }
                     50:        if (index(argv[i], ':') != NULL) {        /* host:display */
                     51:            maininfo->display = argv[i];
                     52:            continue;
                     53:        }
                     54:        if (strcmp(argv[i], "-bw") == 0 ||
                     55:            strcmp(argv[i], "-border") == 0) {   /* border width */
                     56:                if (++i >= argc) usage(argv[0]);
                     57:                maininfo->frame.bdrwidth = atoi(argv[i]);
                     58:                continue;
                     59:            }
                     60:        if (strcmp(argv[i], "-bd") == 0 ||
                     61:            strcmp(argv[i], "-color") == 0) {    /* border color */
                     62:                if (++i >= argc) usage(argv[0]);
                     63:                border_color = argv[i];
                     64:                continue;
                     65:            }
                     66:        if(strcmp(argv[i], "-bg") == 0 ||
                     67:           strcmp(argv[i], "background") == 0) {  /* background color */
                     68:               if(++i >= argc) usage(argv[0]);
                     69:               back_color = argv[i];
                     70:               continue;
                     71:           }
                     72:        if (strcmp(argv[i], "-p") == 0 ||
                     73:            strcmp(argv[i], "-planes") == 0) {    /* # of planes */
                     74:                if (++i >= argc) usage(argv[0]);
                     75:                colorinfo->nplanes = 
                     76:                  (atoi(argv[i]) > 8) ? 8 : atoi(argv[i]);
                     77:                continue;
                     78:            }
                     79:        if (strcmp(argv[i],"-n") == 0 ||
                     80:            strcmp(argv[i],"-neg") == 0) {        /* negative map */
                     81:                imageinfo->VOP_Flags |= VOP_Inverse;
                     82:                continue;
                     83:            }
                     84:        if (strcmp(argv[i],"-rgb") == 0) {        /* manipulate RGB */
                     85:            /*   rgbmap++; */
                     86:            imageinfo->VOP_Flags &= ~(VOP_GrayScale);
                     87:            imageinfo->VOP_Flags |= VOP_RGB;
                     88:            continue;
                     89:        }
                     90:        if(strcmp(argv[i],"-skip") == 0 ||
                     91:           strcmp(argv[i],"-sk") == 0)    {       /* skip header */
                     92:               if(++i >= argc) usage(argv[0]);
                     93:               imageinfo->headskip = atoi(argv[i]);
                     94:               if(imageinfo->headskip < 0) usage(argv[0]);
                     95:               continue;
                     96:           }
                     97:        if(strcmp(argv[i],"-nrows") == 0 ||
                     98:           strcmp(argv[i],"-nr") == 0)   {       /* explicit set */
                     99:               if(++i >= argc) usage(argv[0]);
                    100:               imageinfo->nrows = atoi(argv[i]);
                    101:               if(imageinfo->nrows <= 0) usage(argv[0]);
                    102:               continue;
                    103:           }
                    104:        if(strcmp(argv[i],"-ncols") == 0 ||
                    105:           strcmp(argv[i],"-nc") == 0)   {        /* explicit set */
                    106:               if(++i >= argc) usage(argv[0]);
                    107:               imageinfo->ncols = atoi(argv[i]);
                    108:               if(imageinfo->ncols <= 0) usage(argv[0]);
                    109:               continue;
                    110:           }
                    111:        if(strcmp(argv[i],"-sqrt") == 0 ||
                    112:           strcmp(argv[i],"-sq") == 0) {          /* sqrt scaling */
                    113:               imageinfo->SOP_Flags = SOP_Sqrt;
                    114:               continue;
                    115:           }
                    116:        if(strcmp(argv[i],"-test") == 0 ||
                    117:           strcmp(argv[i],"-t") == 0) {          /* test gray scale*/
                    118:               imageinfo->calibration++;
                    119:               continue;
                    120:           }
                    121:        if(strcmp(argv[i],"-saturate") == 0 ||   /* set sat. lev.*/
                    122:           strcmp(argv[i],"-sat") == 0) {
                    123:               if(++i >= argc) usage(argv[0]);
                    124:               if((imageinfo->pmax = atoi(argv[i])) > 16383)
                    125:                 usage(argv[0]);
                    126:               continue;
                    127:           }
                    128:        if(strcmp(argv[i],"-threshold") == 0 ||  /* set thresh lev.*/
                    129:           strcmp(argv[i],"-thr") == 0) {
                    130:               if(++i >= argc) usage(argv[0]);
                    131:               if((imageinfo->pmin = atoi(argv[i])) < -16383)
                    132:                 usage(argv[0]);
                    133:               continue;
                    134:           }
                    135:        if(strcmp(argv[i],"-fits") == 0) { /* select fits file*/
                    136:            imageinfo->fitsflag = 1;
                    137:            continue;
                    138:        }
                    139:        if(strcmp(argv[i],"-dfits") == 0) { /* select disk fits file*/
                    140:            imageinfo->fitsflag = 2;
                    141:            continue;
                    142:        }
                    143: 
                    144: #ifdef XRAY
                    145:        /* added by egm */
                    146:        if(strcmp(argv[i],"-ein") ==0 ){
                    147:            if(++i >= argc) usage(argv[0]);
                    148:            imageinfo->iy = atoi(argv[i]);
                    149:            if(++i >= argc) usage(argv[0]);
                    150:            imageinfo->iz = atoi(argv[i]);
                    151:            if(++i >= argc) usage(argv[0]);
                    152:            imageinfo->zoom = atoi(argv[i]);
                    153:            if(++i >= argc) usage(argv[0]);
                    154:            imageinfo->energy = atoi(argv[i]);
                    155:            imageinfo->ein = 1;
                    156:            imageinfo->ncols = 512;
                    157:            imageinfo->nrows = 512;
                    158:            continue;
                    159:        }
                    160:        
                    161:        if(strcmp(argv[i],"-ros") ==0 ){
                    162:            if(++i >= argc) usage(argv[0]);
                    163:            imageinfo->iy = atoi(argv[i]);
                    164:            if(++i >= argc) usage(argv[0]);
                    165:            imageinfo->iz = atoi(argv[i]);
                    166:            if(++i >= argc) usage(argv[0]);
                    167:            imageinfo->zoom = atoi(argv[i]);
                    168:            imageinfo->ros = 1;
                    169:            imageinfo->ncols = 512;
                    170:            imageinfo->nrows = 512;
                    171:            continue;
                    172:        }
                    173:        /* end of egm code */
                    174: #endif
                    175:        
                    176:        if (argv[i][0] == '-') usage(argv[0]);
                    177:        imageinfo->filename = argv[i];
                    178:     }
                    179: 
                    180: 
                    181: /* do some consistency checks on selected options */
                    182:     if(imageinfo->headskip > 0 && 
                    183:        (imageinfo->nrows == 0 || imageinfo->ncols == 0)) usage(argv[0]);
                    184:     
                    185:     if((imageinfo->pmax == -3000 && imageinfo->pmin != 70000) ||
                    186:        (imageinfo->pmin == 70000 && imageinfo->pmax != -3000)) 
                    187:       usage(argv[0]);
                    188:     
                    189:     if(imageinfo->fitsflag != 0 && 
                    190:        (imageinfo->headskip > 0 || imageinfo->nrows != 0 || 
                    191:        imageinfo->ncols != 0))
                    192:       usage(argv[0]);
                    193:     
                    194:     if (!XOpenDisplay(maininfo->display)) {
                    195:        perror(argv[0]);
                    196:        exit(1);
                    197:     }
                    198: 
                    199:     if (border_color && DisplayCells() > 2 &&
                    200:        XParseColor(border_color, &cdef) && XGetHardwareColor(&cdef))
                    201:       maininfo->frame.border = XMakeTile(cdef.pixel);
                    202:     else if (border_color && strcmp(border_color, "black") == 0)
                    203:       maininfo->frame.border = BlackPixmap;
                    204:     else if (border_color && strcmp(border_color, "white") == 0)
                    205:       maininfo->frame.border = WhitePixmap;
                    206:     else
                    207:       maininfo->frame.border = XMakePixmap (XStoreBitmap (16, 16, gray_bits),
                    208:                                   BlackPixel, WhitePixel);
                    209: 
                    210:     if (back_color && DisplayCells() > 2 &&
                    211:        XParseColor(back_color, &cdef) && XGetHardwareColor(&cdef))
                    212:       maininfo->frame.background = XMakeTile(cdef.pixel);
                    213:     else if (back_color && strcmp(back_color, "white") == 0)
                    214:       maininfo->frame.background = WhitePixmap;
                    215:     else 
                    216:       maininfo->frame.background = BlackPixmap;
                    217:     
                    218:     return;
                    219: }
                    220: 
                    221: 
                    222: usage (program)
                    223:     char *program;
                    224: {
                    225:     fprintf(stderr,"usage: %s [ options ] filename\n",program);
                    226:     fprintf(stderr,"     where options are one or more of:\n");
                    227:     fprintf(stderr,"  [host:display] [=geom] [-bw] [-bd] [-bg]\n");
                    228:     fprintf(stderr,"  [-planes #] [-rgb] [-neg] [-sqrt]\n");
                    229:     fprintf(stderr,"  [-skip # -nrows # -ncols #]\n");
                    230:     fprintf(stderr,"  [-saturate # -threshold #]\n");
                    231:     fprintf(stderr,"  [-fits] [ -dfits ]\n");
                    232:     exit(1);
                    233: }

unix.superglobalmegacorp.com

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