Annotation of 43BSDTahoe/new/X/showimg/menusetup.c, revision 1.1

1.1     ! root        1: /* menu selection and setup */
        !             2: 
        !             3: #include <stdio.h>
        !             4: #include <X/Xlib.h>
        !             5: #include <X/XMenu.h>
        !             6: 
        !             7: #include "shimg.h"
        !             8: 
        !             9: /* This structure is mainly created to easily initialize and update the
        !            10:  * menu panes and selections. The null elements indicate to the initializing
        !            11:  * routine that that particular pane (and eventually the menu) are complete.
        !            12:  *
        !            13:  * When a menu selection is successful, it returns a pointer to the data
        !            14:  * array in the particular element. The first element contains the pane
        !            15:  * number in the upper word and the selection flag in the lower word. The
        !            16:  * second element contains the inverse of the mask to be applied to the
        !            17:  * corresponding flags location to remove the other panes' selection flags
        !            18:  * that are orthogonal to this one. The program can then `or' in this
        !            19:  * pane's selection flag (if desireable) and take the appropriate action.
        !            20:  */
        !            21: 
        !            22: struct menupane {
        !            23:   char *label;
        !            24:   int active;
        !            25:   int data[2];
        !            26: };
        !            27: 
        !            28: struct menupane menuset[] = {
        !            29:     /* View Ops pane */
        !            30:     { "View Ops",   1, VOP, 0 },
        !            31:     { "gray scale", 1, { VOP | VOP_GrayScale, VOP_RGB }  },
        !            32:     { "rgb",        1, { VOP | VOP_RGB, VOP_GrayScale }  },
        !            33:     { "normal",     1, { VOP | VOP_Normal, VOP_Inverse } },
        !            34:     { "inverse",    1, { VOP | VOP_Inverse, VOP_Normal } },
        !            35:     { "initialize", 1, { VOP | VOP_Initialize, 0 }       },
        !            36:     { "EXIT",       1, { 0, 0 } },
        !            37:     { 0, 0, 0, 0 },
        !            38: 
        !            39:     /* Cursor Ops pane */
        !            40:     { "Cursor Ops", 1, COP, 0 },
        !            41:     { "print",      1, { COP | COP_Print, COP_Pan|COP_Zoom2|COP_Zoom4 } },
        !            42:     { "pan",        1, { COP | COP_Pan, COP_Print|COP_Zoom2|COP_Zoom4 } },
        !            43:     { "zoom x2",    1, { COP | COP_Zoom2, COP_Print|COP_Pan|COP_Zoom4 } },
        !            44:     { "zoom x4",    1, { COP | COP_Zoom4, COP_Print|COP_Pan|COP_Zoom2 } },
        !            45: /*  { "set origin", 0, COP | COP_SetOrigin, 0 },
        !            46:     { "box",        0, COP | COP_Box, 0       },
        !            47: */  { 0, 0, 0, 0 },
        !            48: 
        !            49:     /* Scaling Ops pane */
        !            50:     { "Scaling",   1, SOP, 0 },
        !            51:     { "linear",    1, { SOP | SOP_Linear, SOP_Log|SOP_Sqrt|SOP_Histogram }  },
        !            52:     { "sqrt",      1, { SOP | SOP_Sqrt, SOP_Linear|SOP_Sqrt|SOP_Histogram } },
        !            53: /*  { "log",       0, { SOP | SOP_Log, SOP_Linear|SOP_Log|SOP_Histogram }   },
        !            54:     { "histogram", 0, { SOP | SOP_Histogram, SOP_Linear|SOP_Log|SOP_Sqrt }  },
        !            55: */  { 0, 0, 0, 0 },
        !            56:     
        !            57:     /* File Ops pane */
        !            58: /*    { "I/O",        0, FOP, 0 },
        !            59:     { "read image", 0, FOP | FOP_Read, 0      },
        !            60:     { "flatfield",  0, FOP | FOP_Flatfield, 0 },
        !            61:     { "add image",  0, FOP | FOP_AddImage, 0  },
        !            62:     { 0, 0, 0, 0 },
        !            63: */  
        !            64:     { 0, 0, 0, 0 }
        !            65: };
        !            66: 
        !            67: XMenu *menusetup(program)
        !            68:      char *program;
        !            69: {
        !            70:      XMenu *menu, *XMenuCreate();
        !            71:      int XMenuAddPane(), XMenuAddSelection(), XMenuRecompute();
        !            72:      int pane = 0, sel;
        !            73: 
        !            74:      register struct menupane *imenu = &menuset[0];
        !            75: 
        !            76:      if((menu = XMenuCreate(RootWindow,program)) == NULL) {
        !            77:        fprintf(stderr,"Menu creation failed!\n");
        !            78:        exit(1);
        !            79:      }
        !            80:      /* insert the panes & selections into the menu structure */
        !            81:        
        !            82:      while(imenu->label) {
        !            83:        sel = 0;
        !            84:        if((XMenuAddPane(menu,imenu->label,imenu->active))
        !            85:           == XM_FAILURE) {
        !            86:                 fprintf(stderr,"Can't add pane %d!\n",pane);
        !            87:                exit(1);
        !            88:        }
        !            89:        ++imenu;
        !            90:        while(imenu->label) {
        !            91:         if((XMenuAddSelection(menu,pane,(char *)&imenu->data[0],
        !            92:               imenu->label,imenu->active)) == XM_FAILURE) {
        !            93:                fprintf(stderr,"Can't add selection %d to pane %d!\n",
        !            94:                        sel, pane);
        !            95:                exit(1);
        !            96:              }
        !            97:         sel++;
        !            98:         ++imenu;
        !            99:        }
        !           100:        pane++;
        !           101:        ++imenu;
        !           102:      }
        !           103:      XMenuRecompute(menu);
        !           104:      return(menu);
        !           105: }

unix.superglobalmegacorp.com

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