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