ROVLib2
RISCOSC++applicationdevelopmentlibrary
wimp_messages.h
1 #pragma once
2 
3 #include "wimp_basics.h"
4 
5 #ifdef __cplusplus
6 extern "C"
7 {
8 #endif
9 
10  typedef enum
11  {
12  weNullReasonCode = 0,
13  weRedrawWindowRequest,
14  weOpenWindowRequest,
15  weCloseWindowRequest,
16  wePointerLeavingWindow,
17  wePointerEnteringWindow,
18  weMouseClick,
19  weUserDragBox,
20  weKeyPressed,
21  weMenuSelection,
22  weScrollRequest,
23  weLoseCaret,
24  weGainCaret,
25  wePollwordNonZero,
26  weUserMessage = 17,
27  weUserMessageRecorded,
28  weUserMessageAcknowledged
29  } eWimpEvent; // we
30 
31  typedef enum
32  {
33  wmaMessageQuit = 0,
34  wmaMessageDataSave,
35  wmaMessageDataSaveAck,
36  wmaMessageDataLoad,
37  wmaMessageDataLoadAck,
38  wmaMessageRun,
39  wmaMessageRamFetch,
40  wmaMessageRamTransmit,
41  wmaMessagePrequit,
42  wmaMessagePalette
43  } eWimpMessageAction; // wma
44 
45  typedef struct
46  {
47  unsigned adjust : 1;
48  unsigned menu : 1;
49  unsigned select : 1;
50  unsigned : 1;
51  unsigned adjust_drag : 1;
52  unsigned menu_drag : 1;
53  unsigned select_drag : 1;
54  unsigned : 1;
55  unsigned adjust_click : 1;
56  unsigned menu_click : 1;
57  unsigned select_click : 1;
58  unsigned : 1;
59  unsigned : 16;
60  } tButtonClick; // bc
61 
62  typedef struct
63  {
64  tWindowHandle whWindow;
65  tLocation lMinimum;
66  tLocation lMaximum;
67  tLocation lScroll;
68  tWindowHandle whBehind;
69  } tWindowOpenBlock; // wob
70 
71  typedef struct
72  {
73  tWindowHandle whWindow;
74  } tWindowOnlyBlock; // wob
75 
76  typedef struct
77  {
78  tLocation lMouse;
79  tButtonClick bcButtons;
80  tWindowHandle whWindow;
81  tIconHandle ihIcon;
82  } tMouseClickBlock; // mcb
83 
84  typedef struct
85  {
86  tLocation lMinimum;
87  tLocation lMaximum;
88  } tUserDrawBoxBlock; // udb
89 
90  typedef struct
91  {
92  tWindowHandle whWindow;
93  tIconHandle ihIcon;
94  tLocation lCaretOffset;
95  unsigned int uiCaretHeightFlags;
96  int iCaretIndex;
97  int iCharacterCode;
98  } tKeyPressedBlock; // kpb
99 
100  typedef struct
101  {
102  unsigned int iaSelectedItems[64];
103  } tMenuSelectionBlock; // msb
104 
105  typedef struct
106  {
107  tWindowHandle whWindow;
108  tLocation lMinimum;
109  tLocation lMaximum;
110  tLocation lScroll;
111  tWindowHandle whBehind;
112  tLocation lScrollDirection;
113  } tScrollRequestBlock; // srb
114 
115  typedef struct
116  {
117  tWindowHandle whWindow;
118  tIconHandle whIcon;
119  tLocation lCaretOffset;
120  unsigned int uiCaretHeightFlags;
121  int iCaretIndex;
122  } tLoseGainCaretBlock; // lgc
123 
124  typedef struct
125  {
126  int* piPollAddress;
127  int iPollword;
128  } tPollwordNonZeroBlock; // pnb
129 
130  typedef struct
131  {
132  int iBlockSize;
133  tTaskHandle thSender;
134  int iMyRef;
135  int iYourRef;
136  eWimpMessageAction wmaAction;
137  unsigned int uiaInt[59];
138  byte baByte[244];
139  } tUserMessageBlock; // umb
140 
141  typedef union
142  {
143  tWindowOnlyBlock wobRedrawRequest;
144  tWindowOpenBlock wobOpenRequest;
145  tWindowOnlyBlock wobCloseRequest;
146  tWindowOnlyBlock wobPointerLeaving;
147  tWindowOnlyBlock wobPointerEntering;
148  tMouseClickBlock mcbMouseClick;
149  tUserDrawBoxBlock udbUserDrag;
150  tKeyPressedBlock kpbKeyPressed;
151  tMenuSelectionBlock msbMenuSelection;
152  tScrollRequestBlock srbScrollRequest;
153  tPollwordNonZeroBlock pnbPollwordNonZero;
154  tLoseGainCaretBlock lgcLoseGainCaret;
155  tUserMessageBlock umbUserMessage;
156 
157  byte baBytes[256];
158  unsigned int uiaInt[64];
159  } tWimpBlock; // twb
160 
161  // Methods
162  eWimpEvent wimp_poll(void);
163 
164  void wimp_sendmessage(eWimpEvent weEventCode, const tUserMessageBlock* cumbpBlock);
165 
166  void wimp_getpointerinfo(tMouseClickBlock* pmcbPointerInfo);
167 
168  // Objects
169  extern tWimpBlock twbWimpPollBlock;
170 
171 #ifdef __cplusplus
172 }
173 #endif