OSDN Git Service

no bone
[nethackexpress/trunk.git] / include / winami.h
1 /*      SCCS Id: @(#)winami.h   3.4     1993/01/17      */
2 /* Copyright (c) Kenneth Lorber, Bethesda, Maryland, 1991. */
3 /* Copyright (c) Gregg Wonderly, Naperville, Illinois, 1992, 1993. */
4 /* NetHack may be freely redistributed.  See license for details. */
5
6 #ifndef WINAMI_H
7 #define WINAMI_H
8
9 #define MAXWINTAGS      5
10
11 /*
12  * Information specific to a menu window.  First a structure for each
13  * menu entry, then the structure for each menu window.
14  */
15 typedef struct amii_mi {
16     struct amii_mi *next;
17     anything identifier;        /* Opaque type to identify this selection */
18     long glyph;                 /* Glyph for menu item */
19     long count;                 /* Object count */
20     char selected;              /* Been selected? */
21     char selector;              /* Char used to select this entry. */
22     char gselector;             /* Group selector */
23     char canselect;             /* Can user select this entry. */
24     char attr;                  /* Attribute for the line. */
25     char *str;                  /* The text of the item. */
26 } amii_menu_item;
27
28 struct amii_menu
29 {
30     amii_menu_item *items;      /* Starting pointer for item list. */
31     amii_menu_item *last;       /* End pointer for item list. */
32     const char     *query;      /* Query string */
33     int             count;      /* Number of strings. */
34     char            chr;        /* Character to assign for accelerator */
35 };
36
37 /* descriptor for Amiga Intuition-based windows.  If we decide to cope with
38  * tty-style windows also, then things will need to change. */
39 /* per-window data */
40 struct amii_WinDesc {
41     xchar type;                 /* type of window */
42     struct amii_menu menu;
43     boolean active;             /* true if window is active */
44     boolean wasup;              /* true if menu/text window was already open */
45     short disprows;             /* Rows displayed so far (used for paging in message win) */
46     xchar offx, offy;           /* offset from topleft of display */
47     short vwx, vwy, vcx, vcy;   /* View cursor location */
48     short rows, cols;           /* dimensions */
49     short curx, cury;           /* current cursor position */
50     short maxrow, maxcol;       /* the maximum size used -- for INVEN wins */
51                                 /* maxcol is also used by WIN_MESSAGE for */
52                                 /* tracking the ^P command */
53     char **data;                /* window data [row][column] */
54     menu_item *mi;              /* Menu information */
55     char *resp;                 /* valid menu responses (for NHW_INVEN) */
56     char *canresp;              /* cancel responses; 1st is the return value */
57     char *morestr;              /* string to display instead of default */
58 /* amiga stuff */
59     struct Window *win;         /* Intuition window pointer */
60 #ifdef  INTUI_NEW_LOOK
61     struct ExtNewWindow *newwin;        /* NewWindow alloc'd */
62 #else
63     struct NewWindow *newwin;   /* ExtNewWindow alloc'd */
64 #endif
65 #ifdef  INTUI_NEW_LOOK
66     struct TagItem wintags[ MAXWINTAGS ];/* Tag items for this window */
67 #else
68     long wintags[ MAXWINTAGS*2 ];
69 #endif
70     void *hook;                 /* Hook structure pointer for tiles version */
71 #define FLMAP_INGLYPH   1       /* An NHW_MAP window is in glyph mode */
72 #define FLMAP_CURSUP    2       /* An NHW_MAP window has the cursor displayed */
73 #define FLMAP_SKIP      4
74 #define FLMSG_FIRST     1       /* First message in the NHW_MESSAGE window for this turn */
75     long wflags;
76     short cursx, cursy;         /* Where the cursor is displayed at */
77     short curs_apen,            /* Color cursor is displayed in */
78           curs_bpen;
79 };
80
81 /* descriptor for intuition-based displays -- all the per-display data */
82 /* this is a generic thing - think of it as Screen level */
83
84 struct amii_DisplayDesc {
85 /* we need this for Screen size (which will vary with display mode) */
86     uchar rows, cols;           /* width & height of display in text units */
87     short xpix, ypix;           /* width and height of display in pixels */
88     int toplin;                 /* flag for topl stuff */
89     int rawprint;               /* number of raw_printed lines since synch */
90     winid lastwin;              /* last window used for I/O */
91 };
92
93 typedef enum {
94     WEUNK, WEKEY, WEMOUSE, WEMENU,
95 } WETYPE;
96
97 typedef struct WEVENT
98 {
99     WETYPE type;
100     union {
101         int key;
102         struct {
103             int x, y;
104             int qual;
105         } mouse;
106         long menucode;
107     } un;
108 } WEVENT;
109
110 #define MAXWIN 20               /* maximum number of windows, cop-out */
111
112 /* port specific variable declarations */
113 extern winid WIN_BASE;
114 extern winid WIN_OVER;
115 #define NHW_BASE        6
116 #define NHW_OVER        7               /* overview window */
117
118
119 extern struct amii_WinDesc *amii_wins[MAXWIN + 1];
120
121 extern struct amii_DisplayDesc *amiIDisplay;    /* the Amiga Intuition descriptor */
122
123 extern char morc;               /* last character typed to xwaitforspace */
124 extern char defmorestr[];       /* default --more-- prompt */
125
126 #endif /* WINAMI_H */