|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ T m ┃
Length: 3497 (0xda9) Types: TextFile Names: »menusetup.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─ ⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z« └─⟦2109abc41⟧ └─ ⟦this⟧ »./X.V10R4/showimg/menusetup.c«
/* menu selection and setup */ #include <stdio.h> #include <X/Xlib.h> #include <X/XMenu.h> #include "shimg.h" /* This structure is mainly created to easily initialize and update the * menu panes and selections. The null elements indicate to the initializing * routine that that particular pane (and eventually the menu) are complete. * * When a menu selection is successful, it returns a pointer to the data * array in the particular element. The first element contains the pane * number in the upper word and the selection flag in the lower word. The * second element contains the inverse of the mask to be applied to the * corresponding flags location to remove the other panes' selection flags * that are orthogonal to this one. The program can then `or' in this * pane's selection flag (if desireable) and take the appropriate action. */ struct menupane { char *label; int active; int data[2]; }; struct menupane menuset[] = { /* View Ops pane */ { "View Ops", 1, VOP, 0 }, { "gray scale", 1, { VOP | VOP_GrayScale, VOP_RGB } }, { "rgb", 1, { VOP | VOP_RGB, VOP_GrayScale } }, { "normal", 1, { VOP | VOP_Normal, VOP_Inverse } }, { "inverse", 1, { VOP | VOP_Inverse, VOP_Normal } }, { "initialize", 1, { VOP | VOP_Initialize, 0 } }, { "EXIT", 1, { 0, 0 } }, { 0, 0, 0, 0 }, /* Cursor Ops pane */ { "Cursor Ops", 1, COP, 0 }, { "print", 1, { COP | COP_Print, COP_Pan|COP_Zoom2|COP_Zoom4 } }, { "pan", 1, { COP | COP_Pan, COP_Print|COP_Zoom2|COP_Zoom4 } }, { "zoom x2", 1, { COP | COP_Zoom2, COP_Print|COP_Pan|COP_Zoom4 } }, { "zoom x4", 1, { COP | COP_Zoom4, COP_Print|COP_Pan|COP_Zoom2 } }, /* { "set origin", 0, COP | COP_SetOrigin, 0 }, { "box", 0, COP | COP_Box, 0 }, */ { 0, 0, 0, 0 }, /* Scaling Ops pane */ { "Scaling", 1, SOP, 0 }, { "linear", 1, { SOP | SOP_Linear, SOP_Log|SOP_Sqrt|SOP_Histogram } }, { "sqrt", 1, { SOP | SOP_Sqrt, SOP_Linear|SOP_Sqrt|SOP_Histogram } }, /* { "log", 0, { SOP | SOP_Log, SOP_Linear|SOP_Log|SOP_Histogram } }, { "histogram", 0, { SOP | SOP_Histogram, SOP_Linear|SOP_Log|SOP_Sqrt } }, */ { 0, 0, 0, 0 }, /* File Ops pane */ /* { "I/O", 0, FOP, 0 }, { "read image", 0, FOP | FOP_Read, 0 }, { "flatfield", 0, FOP | FOP_Flatfield, 0 }, { "add image", 0, FOP | FOP_AddImage, 0 }, { 0, 0, 0, 0 }, */ { 0, 0, 0, 0 } }; XMenu *menusetup(program) char *program; { XMenu *menu, *XMenuCreate(); int XMenuAddPane(), XMenuAddSelection(), XMenuRecompute(); int pane = 0, sel; register struct menupane *imenu = &menuset[0]; if((menu = XMenuCreate(RootWindow,program)) == NULL) { fprintf(stderr,"Menu creation failed!\n"); exit(1); } /* insert the panes & selections into the menu structure */ while(imenu->label) { sel = 0; if((XMenuAddPane(menu,imenu->label,imenu->active)) == XM_FAILURE) { fprintf(stderr,"Can't add pane %d!\n",pane); exit(1); } ++imenu; while(imenu->label) { if((XMenuAddSelection(menu,pane,(char *)&imenu->data[0], imenu->label,imenu->active)) == XM_FAILURE) { fprintf(stderr,"Can't add selection %d to pane %d!\n", sel, pane); exit(1); } sel++; ++imenu; } pane++; ++imenu; } XMenuRecompute(menu); return(menu); }