117289Sopcode /*
2*17650Sopcode * @(#)menu.c 1.2 01/03/85
317289Sopcode *
417289Sopcode * Menu subwindow routines for the SUN Gremlin picture editor.
517289Sopcode *
617289Sopcode * Mark Opperman (opcode@monet.BERKELEY)
717289Sopcode *
817289Sopcode */
917289Sopcode
1017289Sopcode #include <suntool/tool_hs.h>
1117289Sopcode #include <suntool/menu.h>
1217289Sopcode #include <errno.h>
1317289Sopcode #include "gremlin.h"
1417289Sopcode #include "icondata.h"
1517289Sopcode
1617289Sopcode /* imports from graphics.c */
1717289Sopcode
1817289Sopcode extern GRCurrentSetOn();
1917289Sopcode
2017289Sopcode /* imports from short.c */
2117289Sopcode
2217289Sopcode extern int adj[];
2317289Sopcode
2417289Sopcode /* imports from text.c */
2517289Sopcode
2617289Sopcode extern TxMsgOK();
2717289Sopcode
2817289Sopcode /* imports from sun.c */
2917289Sopcode
3017289Sopcode extern pw_box();
3117289Sopcode
3217289Sopcode /* imports from main.c */
3317289Sopcode
3417289Sopcode extern Artmode; /* type of point layed down */
3517289Sopcode extern Adjustment;
3617289Sopcode extern Alignment;
3717289Sopcode extern GravityOn;
3817289Sopcode extern menu_fd;
3917289Sopcode extern struct pixfont *text_pf;
4017289Sopcode extern struct rect menu_size;
4117289Sopcode extern ELT *MEN[];
4217289Sopcode extern SymbolicLines;
4317289Sopcode extern FLASH_READY;
4417289Sopcode
45*17650Sopcode extern (*lastcommand)(); /* previous command */
46*17650Sopcode extern lasttext; /* TRUE if previous cmd uses text input */
4717289Sopcode
48*17650Sopcode /* forward references */
49*17650Sopcode
50*17650Sopcode extern align_up();
51*17650Sopcode extern align_down();
52*17650Sopcode
53*17650Sopcode
5417289Sopcode #define M_CLEAR_POINTS (caddr_t) 1
5517289Sopcode #define M_SHOW_POINTS (caddr_t) 2
5617289Sopcode #define M_GRIPE (caddr_t) 3
5717289Sopcode #define M_POINT (caddr_t) 4
5817289Sopcode
5917289Sopcode struct menuitem misc_items[] = {
6017289Sopcode { MENU_IMAGESTRING, "Clear Points", M_CLEAR_POINTS},
6117289Sopcode { MENU_IMAGESTRING, "Show Points", M_SHOW_POINTS},
6217289Sopcode { MENU_IMAGESTRING, "Gripe", M_GRIPE},
6317289Sopcode { MENU_IMAGESTRING, "Point", M_POINT}
6417289Sopcode };
6517289Sopcode
6617289Sopcode struct menu misc_menu = {
6717289Sopcode MENU_IMAGESTRING, "Misc",
6817289Sopcode sizeof(misc_items) / sizeof(struct menuitem), misc_items, 0, 0
6917289Sopcode };
7017289Sopcode
7117289Sopcode struct menu *misc_menu_stack = &misc_menu;
7217289Sopcode
7317289Sopcode #define M_EDIT (caddr_t) 1
7417289Sopcode #define M_PATH (caddr_t) 2
7517289Sopcode #define M_READ (caddr_t) 3
7617289Sopcode #define M_SAVE_SET (caddr_t) 4
7717289Sopcode #define M_WRITE (caddr_t) 5
7817289Sopcode
7917289Sopcode struct menuitem file_items[] = {
8017289Sopcode { MENU_IMAGESTRING, "Edit", M_EDIT},
8117289Sopcode { MENU_IMAGESTRING, "Path", M_PATH},
8217289Sopcode { MENU_IMAGESTRING, "Read", M_READ},
8317289Sopcode { MENU_IMAGESTRING, "Save Set", M_SAVE_SET},
8417289Sopcode { MENU_IMAGESTRING, "Write", M_WRITE}
8517289Sopcode };
8617289Sopcode
8717289Sopcode struct menu file_menu = {
8817289Sopcode MENU_IMAGESTRING, "File",
8917289Sopcode sizeof(file_items) / sizeof(struct menuitem), file_items, 0, 0
9017289Sopcode };
9117289Sopcode
9217289Sopcode struct menu *file_menu_stack = &file_menu;
9317289Sopcode
9417289Sopcode int icon_x, icon_y; /* location of currently selected menu icon */
9517289Sopcode int icon_last = -1; /* menu index of currently selected menu icon */
9617289Sopcode int just_x, just_y; /* location of justify marker within justify icon */
9717289Sopcode int just_last = -1; /* justify index of currently selected mode */
9817289Sopcode struct pixrect *save_just_pr;
9917289Sopcode
10017289Sopcode #define MNReverseJustify() pw_write(menu_pw, just_x + 1, just_y, 5, 5, \
10117289Sopcode PIX_SRC ^ PIX_DST, &dot_pr, 0, 0)
10217289Sopcode
10317289Sopcode /* imports from main.c */
10417289Sopcode
10517289Sopcode extern struct pixwin *menu_pw;
10617289Sopcode extern struct toolsw *menu_sw;
10717289Sopcode extern CFONT;
10817289Sopcode extern CSIZE;
10917289Sopcode extern CJUST;
11017289Sopcode extern CBRUSH;
11117289Sopcode extern CSTIPPLE;
11217289Sopcode
11317289Sopcode /* imports from help.c */
11417289Sopcode
11517289Sopcode extern justify_help(), help(), horizontal_help(), vertical_help(),
11617289Sopcode size1_help(), size2_help(), size3_help(), size4_help(),
11717289Sopcode roman_help(), italics_help(), bold_help(), special_help(),
11817289Sopcode scale_help(), move_help(), hmirror_help(), vmirror_help(),
11917289Sopcode include_help(), linestyle_help(), align_help(), pan_help(),
12017289Sopcode polygon_help(), bpolygon_help(),
12117289Sopcode get1_help(), get2_help(), get3_help(), get4_help(),
12217289Sopcode put1_help(), put2_help(), put3_help(), put4_help(),
12317289Sopcode brush1_help(), brush2_help(), brush3_help(),
12417289Sopcode brush4_help(), brush5_help(), brush6_help(),
12517289Sopcode stipple1_help(), stipple2_help(), stipple3_help(), stipple4_help(),
12617289Sopcode stipple5_help(), stipple6_help(), stipple7_help(), stipple8_help(),
12717289Sopcode copy_help(), arrow_help(), text_help(), misc_help(), undo_help(),
12817289Sopcode erase_help(), movepoint_help(), rotate_help(), filecabinet_help(),
12917289Sopcode boxinc_help(), manhattan_help(), gravity_help(), arc_help(),
13017289Sopcode curve_help(), vector_help(), box_help(), grid_help(),
13117289Sopcode littlepoint_help(), menusw_help();
13217289Sopcode
13317289Sopcode /* imports from sunlong.c */
13417289Sopcode
13517289Sopcode extern LGBrush1(), LGBrush2(), LGBrush3(),
13617289Sopcode LGBrush4(), LGBrush5(), LGBrush6(),
137*17650Sopcode LGClearPoints(), LGPath(), LGEdit(),
13817289Sopcode LGFont1(), LGFont2(), LGFont3(), LGFont4(),
13917289Sopcode LGGet1(), LGGet2(), LGGet3(), LGGet4(),
14017289Sopcode LGGripe(), LGHMirror(),
14117289Sopcode LGHAdjust(), LGIncludeSet(), LGLineStyle(), LGLittlePoint(),
14217289Sopcode LGMBrush1(), LGMBrush2(), LGMBrush3(),
14317289Sopcode LGMBrush4(), LGMBrush5(), LGMBrush6(), LGMCurve(),
14417289Sopcode LGMFont1(), LGMFont2(), LGMFont3(), LGMFont4(),
14517289Sopcode LGMJustify(), LGMPan(),
14617289Sopcode LGMSize1(), LGMSize2(), LGMSize3(), LGMSize4(),
14717289Sopcode LGMStipple1(), LGMStipple2(), LGMStipple3(), LGMStipple4(),
14817289Sopcode LGMStipple5(), LGMStipple6(), LGMStipple7(), LGMStipple8(),
14917289Sopcode LGMText(), LGMPoint(), LGMVector(), nop(), LGPan(),
15017289Sopcode LGPolygon(), LGBPolygon(), LGMPolygon(), LGMBPolygon(),
15117289Sopcode LGOPoint(), LGRead(), LGSave(), LGShowPoints(),
15217289Sopcode LGSize1(), LGSize2(), LGSize3(), LGSize4(),
15317289Sopcode LGStipple1(), LGStipple2(), LGStipple3(), LGStipple4(),
15417289Sopcode LGStipple5(), LGStipple6(), LGStipple7(), LGStipple8(),
15517289Sopcode LGText(), LGUndo(), LGVAdjust(), LGVMirror(), LGWrite();
15617289Sopcode
15717289Sopcode
15817289Sopcode /* imports from short.c */
15917289Sopcode
16017289Sopcode extern SHArrow(), SHBox(), SHCopy(), SHDefineSet(), SHDrawArc(), SHDrawCurve(),
16117289Sopcode SHDrawVector(), SHErase(), SHGravity(), SHGrid(), SHMAdjust(),
16217289Sopcode SHSave1(), SHSave2(), SHSave3(), SHSave4(),
16317289Sopcode SHRotate(), SHScale(), SHSetArea(), SHMSetArea(), SHTranslate();
16417289Sopcode
16517289Sopcode /* imports from suntools */
16617289Sopcode
16717289Sopcode extern struct menuitem *menu_display();
16817289Sopcode
16917289Sopcode /* justify_mark marks the text handle positions for the JUSTIFY icon
17017289Sopcode relative to the icon's upper left corner */
17117289Sopcode
17217289Sopcode struct pr_pos justify_mark[9];
17317289Sopcode
17417289Sopcode /* just_to_indx maps the justification values (TOPLEFT, ..., BOTRIGHT)
17517289Sopcode to the corresponding index in the justify_mark array */
17617289Sopcode
17717289Sopcode int just_to_indx[] = { 6, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 5, 7 };
17817289Sopcode
17917289Sopcode /* indx_to_just maps the internal justification values (0, ..., 8)
18017289Sopcode to the gremlin justification values (TOPLEFT, ..., BOTRIGHT) */
18117289Sopcode
18217289Sopcode int indx_to_just[] = { TOPLEFT, TOPCENT, TOPRIGHT,
18317289Sopcode CENTLEFT, CENTCENT, CENTRIGHT,
18417289Sopcode BOTLEFT, BOTCENT, BOTRIGHT };
18517289Sopcode
18617289Sopcode struct _menu menu[] = {
18717289Sopcode #define M_SIZE1 0
18817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
18917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 1, &size1_pr,
19017289Sopcode LGSize1, LGMSize1, size1_help },
19117289Sopcode
19217289Sopcode #define M_ROMAN (M_SIZE1+1)
19317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
19417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 2, &roman_pr,
19517289Sopcode LGFont1, LGMFont1, roman_help },
19617289Sopcode
19717289Sopcode #define M_JUSTIFY (M_ROMAN+1)
19817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
19917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 1, &justify_pr,
20017289Sopcode nop, nop, nop },
20117289Sopcode
20217289Sopcode #define M_SCALE (M_JUSTIFY+1)
20317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
20417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 9, &scale_pr,
20517289Sopcode SHScale, nop, scale_help },
20617289Sopcode
20717289Sopcode #define M_TRANSLATE (M_SCALE+1)
20817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
20917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 8, &move_pr,
21017289Sopcode SHTranslate, nop, move_help },
21117289Sopcode
21217289Sopcode #define M_HMIRROR (M_TRANSLATE+1)
21317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
21417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 11, &hmirror_pr,
21517289Sopcode LGHMirror, nop, hmirror_help },
21617289Sopcode
21717289Sopcode #define M_VMIRROR (M_HMIRROR+1)
21817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
21917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 11, &vmirror_pr,
22017289Sopcode LGVMirror, nop, vmirror_help },
22117289Sopcode
22217289Sopcode #define M_DEFINE_SET (M_VMIRROR+1)
22317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
22417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 14, &include_pr,
22517289Sopcode SHDefineSet, LGIncludeSet, include_help },
22617289Sopcode
22717289Sopcode #define M_PUT1 (M_DEFINE_SET+1)
22817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
22917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 15, &put1_pr,
23017289Sopcode SHSave1, nop, put1_help },
23117289Sopcode
23217289Sopcode #define M_PUT3 (M_PUT1+1)
23317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
23417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 16, &put3_pr,
23517289Sopcode SHSave3, nop, put3_help },
23617289Sopcode
23717289Sopcode #define M_HORZ_ADJUST (M_PUT3+1)
23817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
23917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 17, &horizontal_pr,
24017289Sopcode LGHAdjust, nop, horizontal_help },
24117289Sopcode
24217289Sopcode #define M_VERT_ADJUST (M_HORZ_ADJUST+1)
24317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
24417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 18, &vertical_pr,
24517289Sopcode LGVAdjust, nop, vertical_help },
24617289Sopcode
24717289Sopcode #define M_STIPPLE1 (M_VERT_ADJUST+1)
24817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
24917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 3, &white_pr,
25017289Sopcode LGStipple1, LGMStipple1, stipple1_help },
25117289Sopcode
25217289Sopcode #define M_STIPPLE5 (M_STIPPLE1+1)
25317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
25417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 3, &stipple5_pr,
25517289Sopcode LGStipple5, LGMStipple5, stipple5_help },
25617289Sopcode
25717289Sopcode #define M_SIZE2 (M_STIPPLE5+1)
25817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
25917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 1, &size2_pr,
26017289Sopcode LGSize2, LGMSize2, size2_help },
26117289Sopcode
26217289Sopcode #define M_ITALICS (M_SIZE2+1)
26317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 3,
26417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 2, &italics_pr,
26517289Sopcode LGFont2, LGMFont2, italics_help },
26617289Sopcode
26717289Sopcode #define M_COPY (M_ITALICS+1)
26817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
26917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 8, ©_pr,
27017289Sopcode SHCopy, nop, copy_help },
27117289Sopcode
27217289Sopcode #define M_ERASE (M_COPY+1)
27317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
27417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 9, &erase_pr,
27517289Sopcode SHErase, nop, erase_help },
27617289Sopcode
27717289Sopcode #define M_MOVE_POINT (M_ERASE+1)
27817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
27917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 10, &movepoint_pr,
28017289Sopcode LGMPoint, nop, movepoint_help },
28117289Sopcode
28217289Sopcode #define M_ROTATE (M_MOVE_POINT+1)
28317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
28417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 10, &rotate_pr,
28517289Sopcode SHRotate, nop, rotate_help },
28617289Sopcode
28717289Sopcode #define M_FILE (M_ROTATE+1)
28817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
28917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 13, &filecabinet_pr,
29017289Sopcode nop, nop, filecabinet_help },
29117289Sopcode
29217289Sopcode #define M_PAN (M_FILE+1)
29317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
29417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 14, &pan_pr,
29517289Sopcode LGPan, LGMPan, pan_help },
29617289Sopcode
29717289Sopcode #define M_SET_AREA (M_PAN+1)
29817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 3,
29917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 14, &boxinc_pr,
30017289Sopcode SHSetArea, SHMSetArea, boxinc_help },
30117289Sopcode
30217289Sopcode #define M_PUT2 (M_SET_AREA+1)
30317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
30417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 15, &put2_pr,
30517289Sopcode SHSave2, nop, put2_help },
30617289Sopcode
30717289Sopcode #define M_PUT4 (M_PUT2+1)
30817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
30917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 16, &put4_pr,
31017289Sopcode SHSave4, nop, put4_help },
31117289Sopcode
31217289Sopcode #define M_MANHATTAN_ADJUST (M_PUT4+1)
31317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
31417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 17, &horvert_pr,
31517289Sopcode SHMAdjust, nop, manhattan_help },
31617289Sopcode
31717289Sopcode #define M_GRAVITY (M_MANHATTAN_ADJUST+1)
31817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
31917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 18, &gravity_pr,
32017289Sopcode SHGravity, nop, gravity_help },
32117289Sopcode
32217289Sopcode #define M_STIPPLE6 (M_GRAVITY+1)
32317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
32417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 4, &stipple6_pr,
32517289Sopcode LGStipple6, LGMStipple6, stipple6_help },
32617289Sopcode
32717289Sopcode #define M_STIPPLE2 (M_STIPPLE6+1)
32817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
32917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 4, &gray_pr,
33017289Sopcode LGStipple2, LGMStipple2, stipple2_help },
33117289Sopcode
33217289Sopcode #define M_SIZE3 (M_STIPPLE2+1)
33317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
33417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 2, &size3_pr,
33517289Sopcode LGSize3, LGMSize3, size3_help },
33617289Sopcode
33717289Sopcode #define M_BOLD (M_SIZE3+1)
33817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
33917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 3, &bold_pr,
34017289Sopcode LGFont3, LGMFont3, bold_help },
34117289Sopcode
34217289Sopcode #define M_BRUSH1 (M_BOLD+1)
34317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 3,
34417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 4, &dotted_pr,
34517289Sopcode LGBrush1, LGMBrush1, brush1_help },
34617289Sopcode
34717289Sopcode #define M_BRUSH2 (M_BRUSH1+1)
34817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 3,
34917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 6, &broken_pr,
35017289Sopcode LGBrush2, LGMBrush2, brush2_help },
35117289Sopcode
35217289Sopcode #define M_BRUSH3 (M_BRUSH2+1)
35317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
35417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 6, &thick_pr,
35517289Sopcode LGBrush3, LGMBrush3, brush3_help },
35617289Sopcode
35717289Sopcode #define M_TEXT (M_BRUSH3+1)
35817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
35917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 8, &text_pr,
36017289Sopcode LGText, LGMText, text_help },
36117289Sopcode
36217289Sopcode #define M_BPOLYGON (M_TEXT+1)
36317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
36417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 9, &bpolygon_pr,
36517289Sopcode LGBPolygon, LGMBPolygon, bpolygon_help },
36617289Sopcode
36717289Sopcode #define M_POLYGON (M_BPOLYGON+1)
36817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
36917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 10, &polygon_pr,
37017289Sopcode LGPolygon, LGMPolygon, polygon_help },
37117289Sopcode
37217289Sopcode #define M_ARROW (M_POLYGON+1)
37317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
37417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 11, &arrow_pr,
37517289Sopcode SHArrow, nop, arrow_help },
37617289Sopcode
37717289Sopcode #define M_HELP (M_ARROW+1)
37817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
37917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 13, &question_pr,
38017289Sopcode help, help, help },
38117289Sopcode
38217289Sopcode #define M_MISC (M_HELP+1)
38317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
38417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 14, &misc_pr,
38517289Sopcode nop, nop, misc_help },
38617289Sopcode
38717289Sopcode #define M_GET1 (M_MISC+1)
38817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
38917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 15, &get1_pr,
39017289Sopcode LGGet1, nop, get1_help },
39117289Sopcode
39217289Sopcode #define M_GET3 (M_GET1+1)
39317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
39417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 16, &get3_pr,
39517289Sopcode LGGet3, nop, get3_help },
39617289Sopcode
39717289Sopcode #define M_LINESTYLE (M_GET3+1)
39817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
39917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 13, &linestyle_pr,
40017289Sopcode LGLineStyle, nop, linestyle_help },
40117289Sopcode
40217289Sopcode #define M_ALIGN (M_LINESTYLE+1)
40317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
40417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 17, &align_pr,
40517289Sopcode nop, nop, align_help },
40617289Sopcode
40717289Sopcode #define M_STIPPLE3 (M_ALIGN+1)
40817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
40917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 5, &_50_pr,
41017289Sopcode LGStipple3, LGMStipple3, stipple3_help },
41117289Sopcode
41217289Sopcode #define M_STIPPLE7 (M_STIPPLE3+1)
41317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
41417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 5, &stipple7_pr,
41517289Sopcode LGStipple7, LGMStipple7, stipple7_help },
41617289Sopcode
41717289Sopcode #define M_STIPPLE8 (M_STIPPLE7+1)
41817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
41917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 6, &stipple8_pr,
42017289Sopcode LGStipple8, LGMStipple8, stipple8_help },
42117289Sopcode
42217289Sopcode #define M_STIPPLE4 (M_STIPPLE8+1)
42317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 0,
42417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 6, &black_pr,
42517289Sopcode LGStipple4, LGMStipple4, stipple4_help },
42617289Sopcode
42717289Sopcode #define M_SIZE4 (M_STIPPLE4+1)
42817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 1,
42917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 2, &size4_pr,
43017289Sopcode LGSize4, LGMSize4, size4_help },
43117289Sopcode
43217289Sopcode #define M_SPECIAL (M_SIZE4+1)
43317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 3,
43417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 3, &special_pr,
43517289Sopcode LGFont4 , LGMFont4, special_help },
43617289Sopcode
43717289Sopcode #define M_BRUSH4 (M_SPECIAL+1)
43817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 3,
43917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 5, &dashed_pr,
44017289Sopcode LGBrush4, LGMBrush4, brush4_help },
44117289Sopcode
44217289Sopcode #define M_BRUSH5 (M_BRUSH4+1)
44317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
44417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 4, &narrow_pr,
44517289Sopcode LGBrush5, LGMBrush5, brush5_help },
44617289Sopcode
44717289Sopcode #define M_BRUSH6 (M_BRUSH5+1)
44817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
44917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 5, &medium_pr,
45017289Sopcode LGBrush6, LGMBrush6, brush6_help },
45117289Sopcode
45217289Sopcode #define M_DRAW_ARC (M_BRUSH6+1)
45317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 3,
45417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 8, &arc_pr,
45517289Sopcode SHDrawArc, nop, arc_help },
45617289Sopcode
45717289Sopcode #define M_DRAW_CURVE (M_DRAW_ARC+1)
45817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 3,
45917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 9, &curve_pr,
46017289Sopcode SHDrawCurve, LGMCurve, curve_help },
46117289Sopcode
46217289Sopcode #define M_DRAW_VECTOR (M_DRAW_CURVE+1)
46317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 3,
46417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 10, &vector_pr,
46517289Sopcode SHDrawVector, LGMVector, vector_help },
46617289Sopcode
46717289Sopcode #define M_BOX (M_DRAW_VECTOR+1)
46817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 3,
46917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 11, &box_pr,
47017289Sopcode SHBox, nop, box_help },
47117289Sopcode
47217289Sopcode #define M_UNDO (M_BOX+1)
47317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 3,
47417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 13, &undo_pr,
47517289Sopcode LGUndo, nop, undo_help },
47617289Sopcode
47717289Sopcode #define M_GET2 (M_UNDO+1)
47817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 3,
47917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 15, &get2_pr,
48017289Sopcode LGGet2, nop, get2_help },
48117289Sopcode
48217289Sopcode #define M_GET4 (M_GET2+1)
48317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 3,
48417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 16, &get4_pr,
48517289Sopcode LGGet4, nop, get4_help },
48617289Sopcode
48717289Sopcode #define M_GRID (M_GET4+1)
48817289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 3,
48917289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 18, &grid_pr,
49017289Sopcode SHGrid, nop, grid_help },
49117289Sopcode
49217289Sopcode #define M_LITTLE_POINT (M_GRID+1)
49317289Sopcode { MENU_LEFT + ICON_BORDER + MENU_X * 2,
49417289Sopcode MENU_TOP + ICON_BORDER + MENU_Y * 18, &littlepoint_pr,
49517289Sopcode LGLittlePoint, nop, littlepoint_help },
49617289Sopcode
49717289Sopcode { -1, -1, (struct pixrect *)0, (int(*)())0 }
49817289Sopcode };
49917289Sopcode
50017289Sopcode
50117289Sopcode /*
50217289Sopcode * Following is a map of brushes and mode made available to the
50317289Sopcode * outside world for selection of these items for highlighting.
50417289Sopcode * The numbers indicate the items location in the menu.
50517289Sopcode */
50617289Sopcode
50717289Sopcode int HiBuffer[] = { M_PUT1, M_PUT2, M_PUT3, M_PUT4 }; /* user symbols */
50817289Sopcode int HiFont[] = { M_ROMAN, M_ITALICS, M_BOLD, M_SPECIAL };
50917289Sopcode int HiSize[] = { M_SIZE1, M_SIZE2, M_SIZE3, M_SIZE4 };
51017289Sopcode int HiBrush[] = { M_BRUSH1, M_BRUSH2, M_BRUSH3,
51117289Sopcode M_BRUSH4, M_BRUSH5, M_BRUSH6 }; /* brushes */
51217289Sopcode int HiMode[] = { M_HORZ_ADJUST, M_VERT_ADJUST, M_MANHATTAN_ADJUST,
51317289Sopcode M_GRAVITY }; /* horz, vert, man, grav. */
51417289Sopcode int HiStipple[] = { M_STIPPLE1, M_STIPPLE2, M_STIPPLE3, M_STIPPLE4,
51517289Sopcode M_STIPPLE5, M_STIPPLE6, M_STIPPLE7, M_STIPPLE8 };
51617289Sopcode int HiArtMode = M_LITTLE_POINT;
51717289Sopcode int HiLineStyle = M_LINESTYLE;
51817289Sopcode
51917289Sopcode
52017289Sopcode
52117289Sopcode /*
52217289Sopcode * This routine initializatizes the positioning of menu items -
52317289Sopcode * currently only necessary for the justify icon.
52417289Sopcode */
MNInitMenu()52517289Sopcode MNInitMenu()
52617289Sopcode {
52717289Sopcode int justify_x, justify_y;
52817289Sopcode int i;
52917289Sopcode
53017289Sopcode justify_x = menu[M_JUSTIFY].menu_x;
53117289Sopcode justify_y = menu[M_JUSTIFY].menu_y;
53217289Sopcode
53317289Sopcode for (i=0; i<9; i++) {
53417289Sopcode switch (i % 3) {
53517289Sopcode case 0: /* left */
53617289Sopcode justify_mark[i].x = justify_x - 1;
53717289Sopcode break;
53817289Sopcode case 1: /* center */
53917289Sopcode justify_mark[i].x = justify_x + 18;
54017289Sopcode break;
54117289Sopcode case 2: /* right */
54217289Sopcode justify_mark[i].x = justify_x + 35;
54317289Sopcode break;
54417289Sopcode }
54517289Sopcode
54617289Sopcode switch (i / 3) {
54717289Sopcode case 0: /* top */
54817289Sopcode justify_mark[i].y = justify_y - 2;
54917289Sopcode break;
55017289Sopcode case 1: /* center */
55117289Sopcode justify_mark[i].y = justify_y + 5;
55217289Sopcode break;
55317289Sopcode case 2: /* bottom */
55417289Sopcode justify_mark[i].y = justify_y + 12;
55517289Sopcode break;
55617289Sopcode }
55717289Sopcode }
55817289Sopcode
55917289Sopcode if ((save_just_pr = mem_create(6, 6, 1)) == NULL) {
56017289Sopcode printf("cannot create save_just_pr.\n");
56117289Sopcode exit(1);
56217289Sopcode }
56317289Sopcode } /* end MNInitMenu */
56417289Sopcode
56517289Sopcode
56617289Sopcode /*
56717289Sopcode * This routine displays the menu defined by initmenu
56817289Sopcode */
MNDisplayMenu()56917289Sopcode MNDisplayMenu()
57017289Sopcode {
57117289Sopcode register i;
57217289Sopcode register struct _menu *m;
57317289Sopcode char buf[4];
57417289Sopcode
57517289Sopcode pw_text(menu_pw, 28, menu[M_SIZE1].menu_y - MENU_Y + TEXT_BASELINE,
57617289Sopcode PIX_SRC | PIX_DST, text_pf, "styles");
57717289Sopcode pw_text(menu_pw, 24, menu[M_DRAW_ARC].menu_y - MENU_Y + TEXT_BASELINE,
57817289Sopcode PIX_SRC | PIX_DST, text_pf, "drawing");
57917289Sopcode pw_text(menu_pw, 32, menu[M_FILE].menu_y - MENU_Y + TEXT_BASELINE,
58017289Sopcode PIX_SRC | PIX_DST, text_pf, "other");
58117289Sopcode
58217289Sopcode pw_box(menu_pw, 2, 2,
58317289Sopcode MENUSW_WIDTH - 3, menu[M_BRUSH2].menu_y + ICON_SIZE + 3,
58417289Sopcode PIX_SRC | PIX_DST, 1);
58517289Sopcode pw_box(menu_pw, 2, menu[M_DRAW_ARC].menu_y - MENU_Y - 2,
58617289Sopcode MENUSW_WIDTH - 3, menu[M_BOX].menu_y + ICON_SIZE + 3,
58717289Sopcode PIX_SRC | PIX_DST, 1);
58817289Sopcode pw_box(menu_pw, 2, menu[M_FILE].menu_y - MENU_Y - 2,
58917289Sopcode MENUSW_WIDTH - 3, 509
59017289Sopcode /*menu[M_LITTLE_POINT].menu_y + ICON_SIZE + 3*/,
59117289Sopcode PIX_SRC | PIX_DST, 1);
59217289Sopcode
59317289Sopcode i = 0;
59417289Sopcode do {
59517289Sopcode m = &menu[i];
59617289Sopcode pw_write(menu_pw, m->menu_x, m->menu_y,
59717289Sopcode m->menu_icon->pr_width, m->menu_icon->pr_height,
59817289Sopcode PIX_SRC, m->menu_icon, 0, 0);
59917289Sopcode
60017289Sopcode if (is_stipple(m->menu_icon)) {
60117289Sopcode pw_write(menu_pw, m->menu_x, m->menu_y,
60217289Sopcode openbox_pr.pr_width, openbox_pr.pr_height,
60317289Sopcode PIX_SRC | PIX_DST, &openbox_pr, 0, 0);
60417289Sopcode }
60517289Sopcode } while (menu[++i].menu_x != -1);
60617289Sopcode
60717289Sopcode if (Adjustment != NOADJ)
60817289Sopcode MNHighLt(HiMode[adj[Adjustment]]);
60917289Sopcode
61017289Sopcode if (GravityOn)
61117289Sopcode MNHighLt(HiMode[3]);
61217289Sopcode
61317289Sopcode if (!SymbolicLines)
61417289Sopcode MNHighLt(HiLineStyle);
61517289Sopcode
61617289Sopcode if (!Artmode)
61717289Sopcode MNHighLt(HiArtMode);
61817289Sopcode
61917289Sopcode MNHighLt(HiFont[CFONT-1]);
62017289Sopcode MNHighLt(HiSize[CSIZE-1]);
62117289Sopcode MNHighLt(HiBrush[CBRUSH-1]);
62217289Sopcode MNHighLt(HiStipple[CSTIPPLE-1]);
62317289Sopcode
62417289Sopcode pw_read(save_just_pr, 0, 0, 6, 6, PIX_SRC, menu_pw,
62517289Sopcode justify_mark[just_to_indx[CJUST]].x,
62617289Sopcode justify_mark[just_to_indx[CJUST]].y);
62717289Sopcode
62817289Sopcode pw_write(menu_pw, justify_mark[just_to_indx[CJUST]].x + 1,
62917289Sopcode justify_mark[just_to_indx[CJUST]].y,
63017289Sopcode 5, 5, PIX_SRC, &dot_pr, 0, 0);
63117289Sopcode
63217289Sopcode for (i = 0; i<NUSER; ++i) {
63317289Sopcode if (!DBNullelt(MEN[i]))
63417289Sopcode MNHighLt(HiBuffer[i]);
63517289Sopcode }
63617289Sopcode
63717289Sopcode sprintf(buf, "%3d", Alignment);
63817289Sopcode pw_text(menu_pw, menu[M_ALIGN].menu_x + 16,
63917289Sopcode menu[M_ALIGN].menu_y + 12,
64017289Sopcode PIX_SRC ^ PIX_DST, text_pf, buf);
64117289Sopcode }
64217289Sopcode
64317289Sopcode
menu_left(ie)64417289Sopcode menu_left(ie)
64517289Sopcode register struct inputevent *ie;
64617289Sopcode {
64717289Sopcode register index;
64817289Sopcode
64917289Sopcode TxMsgOK();
650*17650Sopcode lasttext = FALSE;
65117289Sopcode
65217289Sopcode if ((index = icon_last) >= 0) {
65317289Sopcode if (index == M_ALIGN) {
654*17650Sopcode lastcommand = align_up;
655*17650Sopcode align_up();
65617289Sopcode return;
65717289Sopcode }
65817289Sopcode
65917289Sopcode /* current set on, un-highlight icon */
66017289Sopcode GRCurrentSetOn();
66117289Sopcode MNReverse(index);
66217289Sopcode icon_last = -1;
66317289Sopcode
66417289Sopcode if (index == M_FILE) {
66517289Sopcode menu_filer(ie);
66617289Sopcode return;
66717289Sopcode }
66817289Sopcode
66917289Sopcode if (index == M_MISC) {
67017289Sopcode menu_misc(ie);
67117289Sopcode return;
67217289Sopcode }
67317289Sopcode
674*17650Sopcode lastcommand = menu[index].menu_function;
675*17650Sopcode if (index == M_TEXT)
676*17650Sopcode lasttext = TRUE;
677*17650Sopcode (*lastcommand)();
678*17650Sopcode /* (*(menu[index].menu_function))(); */
67917289Sopcode FLASH_READY = 0; /* don't flash; it may have taken a while */
68017289Sopcode return;
68117289Sopcode }
68217289Sopcode
68317289Sopcode if (just_last >= 0) { /* in JUSTIFY icon */
68417289Sopcode /* un-highlight */
68517289Sopcode MNReverseJustify();
68617289Sopcode
68717289Sopcode /* update justification mode */
68817289Sopcode pw_write(menu_pw, justify_mark[just_to_indx[CJUST]].x,
68917289Sopcode justify_mark[just_to_indx[CJUST]].y,
69017289Sopcode 6, 6, PIX_SRC, save_just_pr, 0, 0);
69117289Sopcode
69217289Sopcode CJUST = indx_to_just[just_last];
69317289Sopcode
69417289Sopcode pw_read(save_just_pr, 0, 0, 6, 6, PIX_SRC, menu_pw,
69517289Sopcode justify_mark[just_to_indx[CJUST]].x,
69617289Sopcode justify_mark[just_to_indx[CJUST]].y);
69717289Sopcode
69817289Sopcode pw_write(menu_pw, justify_mark[just_to_indx[CJUST]].x + 1,
69917289Sopcode justify_mark[just_to_indx[CJUST]].y,
70017289Sopcode 5, 5, PIX_SRC, &dot_pr, 0, 0);
70117289Sopcode just_last = -1;
70217289Sopcode }
70317289Sopcode }
70417289Sopcode
70517289Sopcode
menu_middle(ie)70617289Sopcode menu_middle(ie)
70717289Sopcode register struct inputevent *ie;
70817289Sopcode {
70917289Sopcode register index;
71017289Sopcode
71117289Sopcode TxMsgOK();
712*17650Sopcode lasttext = FALSE;
71317289Sopcode
71417289Sopcode if ((index = icon_last) >= 0) {
71517289Sopcode if (index == M_ALIGN) {
716*17650Sopcode lastcommand = align_down;
717*17650Sopcode align_down();
71817289Sopcode return;
71917289Sopcode }
72017289Sopcode
72117289Sopcode /* current set on, un-highlight icon */
72217289Sopcode GRCurrentSetOn();
72317289Sopcode MNReverse(index);
72417289Sopcode icon_last = -1;
72517289Sopcode
726*17650Sopcode lastcommand = menu[index].menu_modify;
727*17650Sopcode (*lastcommand)();
728*17650Sopcode if (index == M_TEXT)
729*17650Sopcode lasttext = TRUE;
730*17650Sopcode /* (*(menu[index].menu_modify))(); */
73117289Sopcode FLASH_READY = 0; /* don't flash; it may have taken a while */
73217289Sopcode return;
73317289Sopcode }
73417289Sopcode
73517289Sopcode if ((index = just_last) >= 0) {
73617289Sopcode just_last = -1;
73717289Sopcode
73817289Sopcode /* current set on, un-highlight icon */
73917289Sopcode GRCurrentSetOn();
74017289Sopcode MNReverseJustify();
74117289Sopcode
74217289Sopcode LGMJustify(indx_to_just[index]);
74317289Sopcode }
74417289Sopcode }
74517289Sopcode
74617289Sopcode
menu_right(ie)74717289Sopcode menu_right(ie)
74817289Sopcode register struct inputevent *ie;
74917289Sopcode {
75017289Sopcode register index;
75117289Sopcode
75217289Sopcode TxMsgOK();
75317289Sopcode
75417289Sopcode if ((index = icon_last) >= 0) {
75517289Sopcode icon_last = -1;
75617289Sopcode
75717289Sopcode /* un-highlight icon */
75817289Sopcode MNReverse(index);
75917289Sopcode
76017289Sopcode (*(menu[index].menu_help))();
76117289Sopcode return;
76217289Sopcode }
76317289Sopcode
76417289Sopcode if ((index = just_last) >= 0) {
76517289Sopcode just_last = -1;
76617289Sopcode
76717289Sopcode /* un-highlight icon */
76817289Sopcode MNReverseJustify();
76917289Sopcode
77017289Sopcode justify_help();
77117289Sopcode return;
77217289Sopcode }
77317289Sopcode
77417289Sopcode menusw_help();
77517289Sopcode }
77617289Sopcode
77717289Sopcode
menu_winexit(ie)77817289Sopcode menu_winexit(ie)
77917289Sopcode register struct inputevent *ie;
78017289Sopcode {
78117289Sopcode if (icon_last >= 0) {
78217289Sopcode MNReverse(icon_last);
78317289Sopcode icon_last = -1;
78417289Sopcode }
78517289Sopcode else if (just_last >= 0) {
78617289Sopcode MNReverseJustify();
78717289Sopcode just_last = -1;
78817289Sopcode }
78917289Sopcode
79017289Sopcode /* check if leaving left or bottom edge of menu subwindow */
79117289Sopcode if ((ie->ie_locx < 0) || (ie->ie_locy >= menu_size.r_height))
79217289Sopcode GRCurrentSetOn();
79317289Sopcode }
79417289Sopcode
79517289Sopcode
796*17650Sopcode /*
797*17650Sopcode * Move align to next higher value.
798*17650Sopcode */
align_up()799*17650Sopcode align_up()
800*17650Sopcode {
801*17650Sopcode menu_align(TRUE);
802*17650Sopcode }
803*17650Sopcode
804*17650Sopcode
805*17650Sopcode /*
806*17650Sopcode * Move align to next lower value.
807*17650Sopcode */
align_down()808*17650Sopcode align_down()
809*17650Sopcode {
810*17650Sopcode menu_align(FALSE);
811*17650Sopcode }
812*17650Sopcode
813*17650Sopcode
81417289Sopcode #define ALIGNMAX 512
menu_align(up)81517289Sopcode menu_align(up)
81617289Sopcode int up;
81717289Sopcode {
81817289Sopcode char buf[4];
81917289Sopcode
82017289Sopcode
82117289Sopcode sprintf(buf, "%3d", Alignment);
82217289Sopcode pw_text(menu_pw, menu[M_ALIGN].menu_x + 16,
82317289Sopcode menu[M_ALIGN].menu_y + 12,
82417289Sopcode PIX_SRC ^ PIX_DST, text_pf, buf);
82517289Sopcode
82617289Sopcode if (up) {
82717289Sopcode if ((Alignment <<= 1) > ALIGNMAX)
82817289Sopcode Alignment = 1;
82917289Sopcode }
83017289Sopcode else {
83117289Sopcode if ((Alignment >>= 1) == 0)
83217289Sopcode Alignment = ALIGNMAX;
83317289Sopcode }
83417289Sopcode
83517289Sopcode sprintf(buf, "%3d", Alignment);
83617289Sopcode pw_text(menu_pw, menu[M_ALIGN].menu_x + 16,
83717289Sopcode menu[M_ALIGN].menu_y + 12,
83817289Sopcode PIX_SRC ^ PIX_DST, text_pf, buf);
83917289Sopcode }
84017289Sopcode
84117289Sopcode
menu_filer(ie)84217289Sopcode menu_filer(ie)
84317289Sopcode register struct inputevent *ie;
84417289Sopcode {
84517289Sopcode register struct menuitem *item;
84617289Sopcode
84717289Sopcode item = menu_display(&file_menu_stack, ie, menu_fd);
84817289Sopcode
84917289Sopcode if (item == (struct menuitem *) NULL)
85017289Sopcode return;
85117289Sopcode
85217289Sopcode switch (item->mi_data) {
85317289Sopcode case M_EDIT:
854*17650Sopcode lastcommand = LGEdit;
85517289Sopcode break;
85617289Sopcode case M_PATH:
857*17650Sopcode lastcommand = LGPath;
85817289Sopcode break;
85917289Sopcode case M_READ:
860*17650Sopcode lastcommand = LGRead;
86117289Sopcode break;
86217289Sopcode case M_SAVE_SET:
863*17650Sopcode lastcommand = LGSave;
86417289Sopcode break;
86517289Sopcode case M_WRITE:
866*17650Sopcode lastcommand = LGWrite;
86717289Sopcode break;
86817289Sopcode default:
869*17650Sopcode return;
87017289Sopcode }
871*17650Sopcode (*lastcommand)();
872*17650Sopcode lasttext = TRUE;
87317289Sopcode }
87417289Sopcode
87517289Sopcode
menu_misc(ie)87617289Sopcode menu_misc(ie)
87717289Sopcode register struct inputevent *ie;
87817289Sopcode {
87917289Sopcode register struct menuitem *item;
88017289Sopcode
88117289Sopcode item = menu_display(&misc_menu_stack, ie, menu_fd);
88217289Sopcode
88317289Sopcode if (item == (struct menuitem *) NULL)
88417289Sopcode return;
88517289Sopcode
88617289Sopcode switch (item->mi_data) {
88717289Sopcode case M_CLEAR_POINTS:
888*17650Sopcode lastcommand = LGClearPoints;
88917289Sopcode break;
89017289Sopcode case M_SHOW_POINTS:
891*17650Sopcode lastcommand = LGShowPoints;
89217289Sopcode break;
89317289Sopcode case M_GRIPE:
894*17650Sopcode lastcommand = LGGripe;
89517289Sopcode break;
89617289Sopcode case M_POINT:
897*17650Sopcode lastcommand = LGOPoint;
898*17650Sopcode lasttext = TRUE;
89917289Sopcode break;
90017289Sopcode default:
901*17650Sopcode return;
90217289Sopcode }
903*17650Sopcode (*lastcommand)();
90417289Sopcode }
90517289Sopcode
90617289Sopcode
90717289Sopcode /*
90817289Sopcode * find justification mode determined by (x, y) screen position
90917289Sopcode * return -1 if not in justify icon
91017289Sopcode */
just_index(x,y)91117289Sopcode just_index(x, y)
91217289Sopcode register x;
91317289Sopcode register y;
91417289Sopcode {
91517289Sopcode x -= menu[M_JUSTIFY].menu_x - 1;
91617289Sopcode y -= menu[M_JUSTIFY].menu_y - 2;
91717289Sopcode
91817289Sopcode if ((x > 41) || (x < 0) || (y > 19) || (y < 0))
91917289Sopcode return(-1);
92017289Sopcode else
92117289Sopcode return((y / 7) * 3 + (x / 14));
92217289Sopcode }
92317289Sopcode
92417289Sopcode
mouse_move(ie)92517289Sopcode mouse_move(ie)
92617289Sopcode register struct inputevent *ie;
92717289Sopcode {
92817289Sopcode register index, in_icon, in_xy;
92917289Sopcode
93017289Sopcode /* handle justify icon as a special case */
93117289Sopcode if ((index = just_index(ie->ie_locx, ie->ie_locy)) >= 0) {
93217289Sopcode if (icon_last >= 0) { /* erase last highlighted icon */
93317289Sopcode MNReverse(icon_last);
93417289Sopcode icon_last = -1;
93517289Sopcode }
93617289Sopcode
93717289Sopcode if (just_last >= 0) /* erase current justification marker */
93817289Sopcode MNReverseJustify();
93917289Sopcode
94017289Sopcode just_x = justify_mark[index].x;
94117289Sopcode just_y = justify_mark[index].y;
94217289Sopcode just_last = index;
94317289Sopcode MNReverseJustify();
94417289Sopcode return;
94517289Sopcode }
94617289Sopcode
94717289Sopcode
94817289Sopcode /* ... not currently in justify icon */
94917289Sopcode
95017289Sopcode if (just_last >= 0) { /* previously in justify icon */
95117289Sopcode MNReverseJustify();
95217289Sopcode just_last = -1;
95317289Sopcode }
95417289Sopcode
95517289Sopcode in_xy = ((index = MNFindMenuItem(ie->ie_locx, ie->ie_locy)) >= 0);
95617289Sopcode in_icon = (icon_last >= 0);
95717289Sopcode
95817289Sopcode switch ((in_xy << 1) | in_icon) {
95917289Sopcode case 0: /* was outside still outside */
96017289Sopcode break;
96117289Sopcode case 1: /* was inside now outside */
96217289Sopcode MNReverse(icon_last);
96317289Sopcode icon_last = -1;
96417289Sopcode break;
96517289Sopcode case 2: /* was outside now inside */
96617289Sopcode icon_x = menu[index].menu_x;
96717289Sopcode icon_y = menu[index].menu_y;
96817289Sopcode MNReverse(icon_last = index);
96917289Sopcode break;
97017289Sopcode case 3: /* was inside still inside */
97117289Sopcode if ((icon_y != menu[index].menu_y) ||
97217289Sopcode (icon_x != menu[index].menu_x)) {
97317289Sopcode MNReverse(icon_last);
97417289Sopcode icon_x = menu[index].menu_x;
97517289Sopcode icon_y = menu[index].menu_y;
97617289Sopcode MNReverse(icon_last = index);
97717289Sopcode }
97817289Sopcode break;
97917289Sopcode }
98017289Sopcode }
98117289Sopcode
98217289Sopcode
98317289Sopcode /*
98417289Sopcode * return index into menu[] for icon at (x, y)
98517289Sopcode */
MNFindMenuItem(x,y)98617289Sopcode MNFindMenuItem(x, y)
98717289Sopcode int x, y;
98817289Sopcode {
98917289Sopcode register struct _menu *m;
99017289Sopcode register mleft, mright, mtop, mbottom;
99117289Sopcode int i;
99217289Sopcode
99317289Sopcode i = 0;
99417289Sopcode
99517289Sopcode do {
99617289Sopcode m = &menu[i];
99717289Sopcode mleft = m->menu_x;
99817289Sopcode mtop = m->menu_y;
99917289Sopcode mright = mleft + m->menu_icon->pr_width - 1;
100017289Sopcode mbottom = mtop + m->menu_icon->pr_height - 1;
100117289Sopcode
100217289Sopcode if ((x <= mright) && (y <= mbottom) && (x >= mleft) && (y >= mtop))
1003*17650Sopcode return(i);
100417289Sopcode
100517289Sopcode } while (menu[++i].menu_x != -1);
100617289Sopcode
100717289Sopcode return(-1); /* not found */
100817289Sopcode
100917289Sopcode } /* end MNFindMenuItem */
101017289Sopcode
101117289Sopcode
101217289Sopcode /*
101317289Sopcode * Highlight menu item specified by menu array index.
101417289Sopcode */
MNHighLt(index)101517289Sopcode MNHighLt(index)
101617289Sopcode int index;
101717289Sopcode {
101817289Sopcode pw_write(menu_pw, menu[index].menu_x-2, menu[index].menu_y-2,
101917289Sopcode bigopenbox_pr.pr_width, bigopenbox_pr.pr_height,
102017289Sopcode PIX_SRC | PIX_DST, &bigopenbox_pr, 0, 0);
102117289Sopcode }
102217289Sopcode
102317289Sopcode
102417289Sopcode /*
102517289Sopcode * Un-highlight menu item specified by menu array index.
102617289Sopcode */
MNUnHighLt(index)102717289Sopcode MNUnHighLt(index)
102817289Sopcode int index;
102917289Sopcode {
103017289Sopcode pw_write(menu_pw, menu[index].menu_x - 2, menu[index].menu_y - 2,
103117289Sopcode bigopenbox_pr.pr_width, bigopenbox_pr.pr_height,
103217289Sopcode PIX_NOT(PIX_SRC) & PIX_DST, &bigopenbox_pr, 0, 0);
103317289Sopcode }
103417289Sopcode
103517289Sopcode
103617289Sopcode /*
103717289Sopcode * Reverse video menu item specified by menu array index.
103817289Sopcode */
MNReverse(index)103917289Sopcode MNReverse(index)
104017289Sopcode int index;
104117289Sopcode {
104217289Sopcode pw_write(menu_pw, menu[index].menu_x - 2, menu[index].menu_y - 2,
104317289Sopcode menu[index].menu_icon->pr_width + 4,
104417289Sopcode menu[index].menu_icon->pr_height + 4,
104517289Sopcode PIX_SRC ^ PIX_DST, &bigblack_pr, 0, 0);
104617289Sopcode }
1047