"SfR Fresh" - the SfR Freeware/Shareware Archive 
As a special service "SfR Fresh" has tried to format the requested source page into HTML format using source code syntax highlighting with prefixed line numbers.
Alternatively you can here view or download the uninterpreted source code file.
That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
1 '
2 ' ####################
3 ' ##### PROLOG #####
4 ' ####################
5 '
6 PROGRAM "abuffer"
7 VERSION "0.0007"
8 '
9 IMPORT "xst" ' Standard
10 IMPORT "xma" ' Mathematics
11 IMPORT "xgr" ' GraphicsDesigner
12 IMPORT "xui" ' GuiDesigner
13 '
14 '
15 ' This program is the same as acircle.x except for a short marked section
16 ' of code added to the "SUB Resize" subroutine of grid function Circle().
17 ' The added code attaches an "image grid" to "buffer" the main drawing grid.
18 ' Once attached to the drawing grid, all graphics drawing on the drawing grid
19 ' is automatically drawn onto the "buffer grid" also. When the drawing grid
20 ' is covered then uncovered by another window, the drawn graphics in the
21 ' drawing grid are lost. But the attached buffer grid still contains the
22 ' drawn graphics and GraphicsDesigner automatically restores the graphics
23 ' to the drawing grid by copying the buffer grid onto the drawing grid.
24 ' Thus this program shows how a few lines of code on place in a program
25 ' can capture and automatically restore arbitrary graphics to any grid.
26 ' Again, the only difference between this program and acircle.x is the
27 ' short marked section in the Resize subroutine in grid function Circle().
28 ' This code also resizes the buffer grid when the drawing grid is resized.
29 '
30 ' To clearly see the difference the buffer grid makes, do the following
31 ' in acircle.x then in abuffer.x (this program).
32 '
33 ' 1. Run the program.
34 ' 2. Click "Pause" to freeze some drawn graphics on the drawing grid.
35 ' 3. Cover part of the graphics on the drawing grid with another window.
36 ' 4. Remove the window to uncover the drawing grid.
37 ' 5. Look at the graphics.
38 '
39 ' In acircle.x the drawn graphics is lost where the drawing grid was uncovered.
40 ' In abuffer.x the drawn graphics is automatically restored.
41 '
42 '
43 '
44 DECLARE FUNCTION Entry ()
45 INTERNAL FUNCTION InitGui ()
46 INTERNAL FUNCTION InitProgram ()
47 INTERNAL FUNCTION CreateWindows ()
48 INTERNAL FUNCTION Circle (grid, message, v0, v1, v2, v3, r0, ANY)
49 INTERNAL FUNCTION CircleCode (grid, message, v0, v1, v2, v3, r0, ANY)
50 '
51 '
52 ' ######################
53 ' ##### Entry () #####
54 ' ######################
55 '
56 FUNCTION Entry ()
57 SHARED terminateProgram
58 SHARED paused
59 '
60 InitGui () ' initialize messages
61 InitProgram () ' initialize this program
62 CreateWindows () ' create main window and others
63 '
64 ' This message loop is modified to draw the circle pattern continuously
65 ' when not paused, but still process messages whenever they occur.
66 '
67 DO ' the message loop
68 count = 1 ' wait for 1+ messages, then process 1
69 IFZ paused THEN ' if circle drawing not paused
70 CircleCode (0, #Redraw, 0, 0, 0, 0, 0, 0) ' draw a few circles
71 count = 0 ' avoid hang up in XgrProcessMessages()
72 END IF
73 XgrProcessMessages (count) ' process zero or one message
74 LOOP UNTIL terminateProgram ' and repeats until program is terminated
75 END FUNCTION
76 '
77 '
78 ' ########################
79 ' ##### InitGui () #####
80 ' ########################
81 '
82 ' InitGui() initializes cursor, icon, message, and display variables.
83 ' Programs can reference these variables, but must never change them.
84 '
85 FUNCTION InitGui ()
86 '
87 ' ***************************************
88 ' ***** Register Standard Cursors *****
89 ' ***************************************
90 '
91 XgrRegisterCursor (@"Arrow", @#cursorArrow)
92 XgrRegisterCursor (@"UpArrow", @#cursorArrowN)
93 XgrRegisterCursor (@"Arrow", @#cursorArrowNW)
94 XgrRegisterCursor (@"SizeNS", @#cursorArrowsNS)
95 XgrRegisterCursor (@"SizeWE", @#cursorArrowsWE)
96 XgrRegisterCursor (@"SizeNWSE", @#cursorArrowsNWSE)
97 XgrRegisterCursor (@"SizeNESW", @#cursorArrowsNESW)
98 XgrRegisterCursor (@"SizeAll", @#cursorArrowsAll)
99 XgrRegisterCursor (@"CrossHair", @#cursorCrosshair)
100 XgrRegisterCursor (@"Arrow", @#cursorDefault)
101 XgrRegisterCursor (@"Wait", @#cursorHourglass)
102 XgrRegisterCursor (@"Insert", @#cursorInsert)
103 XgrRegisterCursor (@"No", @#cursorNo)
104 XgrRegisterCursor (@"Arrow", @#defaultCursor)
105 '
106 '
107 ' ********************************************
108 ' ***** Register Standard Window Icons *****
109 ' ********************************************
110 '
111 XgrRegisterIcon (@"hand", @#iconHand)
112 XgrRegisterIcon (@"asterisk", @#iconAsterisk)
113 XgrRegisterIcon (@"question", @#iconQuestion)
114 XgrRegisterIcon (@"exclamation", @#iconExclamation)
115 XgrRegisterIcon (@"application", @#iconApplication)
116 '
117 XgrRegisterIcon (@"hand", @#iconStop) ' alias
118 XgrRegisterIcon (@"asterisk", @#iconInformation) ' alias
119 XgrRegisterIcon (@"application", @#iconBlank) ' alias
120 '
121 XgrRegisterIcon (@"window", @#iconWindow) ' custom
122 '
123 '
124 ' ******************************
125 ' ***** Register Messages ***** Create message numbers for message names
126 ' ******************************
127 '
128 XgrRegisterMessage (@"Blowback", @#Blowback)
129 XgrRegisterMessage (@"Callback", @#Callback)
130 XgrRegisterMessage (@"Cancel", @#Cancel)
131 XgrRegisterMessage (@"Change", @#Change)
132 XgrRegisterMessage (@"CloseWindow", @#CloseWindow)
133 XgrRegisterMessage (@"ContextChange", @#ContextChange)
134 XgrRegisterMessage (@"Create", @#Create)
135 XgrRegisterMessage (@"CreateValueArray", @#CreateValueArray)
136 XgrRegisterMessage (@"CreateWindow", @#CreateWindow)
137 XgrRegisterMessage (@"CursorH", @#CursorH)
138 XgrRegisterMessage (@"CursorV", @#CursorV)
139 XgrRegisterMessage (@"Deselected", @#Deselected)
140 XgrRegisterMessage (@"Destroy", @#Destroy)
141 XgrRegisterMessage (@"Destroyed", @#Destroyed)
142 XgrRegisterMessage (@"DestroyWindow", @#DestroyWindow)
143 XgrRegisterMessage (@"Disable", @#Disable)
144 XgrRegisterMessage (@"Disabled", @#Disabled)
145 XgrRegisterMessage (@"Displayed", @#Displayed)
146 XgrRegisterMessage (@"DisplayWindow", @#DisplayWindow)
147 XgrRegisterMessage (@"Enable", @#Enable)
148 XgrRegisterMessage (@"Enabled", @#Enabled)
149 XgrRegisterMessage (@"Enter", @#Enter)
150 XgrRegisterMessage (@"ExitMessageLoop", @#ExitMessageLoop)
151 XgrRegisterMessage (@"Find", @#Find)
152 XgrRegisterMessage (@"FindForward", @#FindForward)
153 XgrRegisterMessage (@"FindReverse", @#FindReverse)
154 XgrRegisterMessage (@"Forward", @#Forward)
155 XgrRegisterMessage (@"GetAlign", @#GetAlign)
156 XgrRegisterMessage (@"GetBorder", @#GetBorder)
157 XgrRegisterMessage (@"GetBorderOffset", @#GetBorderOffset)
158 XgrRegisterMessage (@"GetCallback", @#GetCallback)
159 XgrRegisterMessage (@"GetCallbackArgs", @#GetCallbackArgs)
160 XgrRegisterMessage (@"GetCan", @#GetCan)
161 XgrRegisterMessage (@"GetCharacterMapArray", @#GetCharacterMapArray)
162 XgrRegisterMessage (@"GetClipGrid", @#GetClipGrid)
163 XgrRegisterMessage (@"GetColor", @#GetColor)
164 XgrRegisterMessage (@"GetColorExtra", @#GetColorExtra)
165 XgrRegisterMessage (@"GetCursor", @#GetCursor)
166 XgrRegisterMessage (@"GetCursorXY", @#GetCursorXY)
167 XgrRegisterMessage (@"GetDisplay", @#GetDisplay)
168 XgrRegisterMessage (@"GetEnclosedGrids", @#GetEnclosedGrids)
169 XgrRegisterMessage (@"GetEnclosingGrid", @#GetEnclosingGrid)
170 XgrRegisterMessage (@"GetFocusColor", @#GetFocusColor)
171 XgrRegisterMessage (@"GetFocusColorExtra", @#GetFocusColorExtra)
172 XgrRegisterMessage (@"GetFont", @#GetFont)
173 XgrRegisterMessage (@"GetFontNumber", @#GetFontNumber)
174 XgrRegisterMessage (@"GetGridFunction", @#GetGridFunction)
175 XgrRegisterMessage (@"GetGridFunctionName", @#GetGridFunctionName)
176 XgrRegisterMessage (@"GetGridName", @#GetGridName)
177 XgrRegisterMessage (@"GetGridNumber", @#GetGridNumber)
178 XgrRegisterMessage (@"GetGridType", @#GetGridType)
179 XgrRegisterMessage (@"GetGridTypeName", @#GetGridTypeName)
180 XgrRegisterMessage (@"GetGroup", @#GetGroup)
181 XgrRegisterMessage (@"GetHelp", @#GetHelp)
182 XgrRegisterMessage (@"GetHelpFile", @#GetHelpFile)
183 XgrRegisterMessage (@"GetHelpString", @#GetHelpString)
184 XgrRegisterMessage (@"GetHelpStrings", @#GetHelpStrings)
185 XgrRegisterMessage (@"GetHintString", @#GetHintString)
186 XgrRegisterMessage (@"GetImage", @#GetImage)
187 XgrRegisterMessage (@"GetImageCoords", @#GetImageCoords)
188 XgrRegisterMessage (@"GetIndent", @#GetIndent)
189 XgrRegisterMessage (@"GetInfo", @#GetInfo)
190 XgrRegisterMessage (@"GetJustify", @#GetJustify)
191 XgrRegisterMessage (@"GetKeyboardFocus", @#GetKeyboardFocus)
192 XgrRegisterMessage (@"GetKeyboardFocusGrid", @#GetKeyboardFocusGrid)
193 XgrRegisterMessage (@"GetKidNumber", @#GetKidNumber)
194 XgrRegisterMessage (@"GetKids", @#GetKids)
195 XgrRegisterMessage (@"GetKidArray", @#GetKidArray)
196 XgrRegisterMessage (@"GetKind", @#GetKind)
197 XgrRegisterMessage (@"GetMaxMinSize", @#GetMaxMinSize)
198 XgrRegisterMessage (@"GetMessageFunc", @#GetMessageFunc)
199 XgrRegisterMessage (@"GetMessageFuncArray", @#GetMessageFuncArray)
200 XgrRegisterMessage (@"GetMessageSub", @#GetMessageSub)
201 XgrRegisterMessage (@"GetMessageSubArray", @#GetMessageSubArray)
202 XgrRegisterMessage (@"GetModalInfo", @#GetModalInfo)
203 XgrRegisterMessage (@"GetModalWindow", @#GetModalWindow)
204 XgrRegisterMessage (@"GetParent", @#GetParent)
205 XgrRegisterMessage (@"GetPosition", @#GetPosition)
206 XgrRegisterMessage (@"GetProtoInfo", @#GetProtoInfo)
207 XgrRegisterMessage (@"GetRedrawFlags", @#GetRedrawFlags)
208 XgrRegisterMessage (@"GetSize", @#GetSize)
209 XgrRegisterMessage (@"GetSmallestSize", @#GetSmallestSize)
210 XgrRegisterMessage (@"GetState", @#GetState)
211 XgrRegisterMessage (@"GetStyle", @#GetStyle)
212 XgrRegisterMessage (@"GetTabArray", @#GetTabArray)
213 XgrRegisterMessage (@"GetTabWidth", @#GetTabWidth)
214 XgrRegisterMessage (@"GetTextArray", @#GetTextArray)
215 XgrRegisterMessage (@"GetTextArrayBounds", @#GetTextArrayBounds)
216 XgrRegisterMessage (@"GetTextArrayLine", @#GetTextArrayLine)
217 XgrRegisterMessage (@"GetTextArrayLines", @#GetTextArrayLines)
218 XgrRegisterMessage (@"GetTextCursor", @#GetTextCursor)
219 XgrRegisterMessage (@"GetTextFilename", @#GetTextFilename)
220 XgrRegisterMessage (@"GetTextPosition", @#GetTextPosition)
221 XgrRegisterMessage (@"GetTextSelection", @#GetTextSelection)
222 XgrRegisterMessage (@"GetTextString", @#GetTextString)
223 XgrRegisterMessage (@"GetTextStrings", @#GetTextStrings)
224 XgrRegisterMessage (@"GetTexture", @#GetTexture)
225 XgrRegisterMessage (@"GetTimer", @#GetTimer)
226 XgrRegisterMessage (@"GetValue", @#GetValue)
227 XgrRegisterMessage (@"GetValues", @#GetValues)
228 XgrRegisterMessage (@"GetValueArray", @#GetValueArray)
229 XgrRegisterMessage (@"GetWindow", @#GetWindow)
230 XgrRegisterMessage (@"GetWindowFunction", @#GetWindowFunction)
231 XgrRegisterMessage (@"GetWindowGrid", @#GetWindowGrid)
232 XgrRegisterMessage (@"GetWindowIcon", @#GetWindowIcon)
233 XgrRegisterMessage (@"GetWindowSize", @#GetWindowSize)
234 XgrRegisterMessage (@"GetWindowTitle", @#GetWindowTitle)
235 XgrRegisterMessage (@"GotKeyboardFocus", @#GotKeyboardFocus)
236 XgrRegisterMessage (@"GrabArray", @#GrabArray)
237 XgrRegisterMessage (@"GrabTextArray", @#GrabTextArray)
238 XgrRegisterMessage (@"GrabTextString", @#GrabTextString)
239 XgrRegisterMessage (@"GrabValueArray", @#GrabValueArray)
240 XgrRegisterMessage (@"Help", @#Help)
241 XgrRegisterMessage (@"Hidden", @#Hidden)
242 XgrRegisterMessage (@"HideTextCursor", @#HideTextCursor)
243 XgrRegisterMessage (@"HideWindow", @#HideWindow)
244 XgrRegisterMessage (@"Initialize", @#Initialize)
245 XgrRegisterMessage (@"Initialized", @#Initialized)
246 XgrRegisterMessage (@"Inline", @#Inline)
247 XgrRegisterMessage (@"InquireText", @#InquireText)
248 XgrRegisterMessage (@"KeyboardFocusBackward", @#KeyboardFocusBackward)
249 XgrRegisterMessage (@"KeyboardFocusForward", @#KeyboardFocusForward)
250 XgrRegisterMessage (@"KeyDown", @#KeyDown)
251 XgrRegisterMessage (@"KeyUp", @#KeyUp)
252 XgrRegisterMessage (@"LostKeyboardFocus", @#LostKeyboardFocus)
253 XgrRegisterMessage (@"LostTextSelection", @#LostTextSelection)
254 XgrRegisterMessage (@"Maximized", @#Maximized)
255 XgrRegisterMessage (@"MaximizeWindow", @#MaximizeWindow)
256 XgrRegisterMessage (@"Maximum", @#Maximum)
257 XgrRegisterMessage (@"Minimized", @#Minimized)
258 XgrRegisterMessage (@"MinimizeWindow", @#MinimizeWindow)
259 XgrRegisterMessage (@"Minimum", @#Minimum)
260 XgrRegisterMessage (@"MonitorContext", @#MonitorContext)
261 XgrRegisterMessage (@"MonitorHelp", @#MonitorHelp)
262 XgrRegisterMessage (@"MonitorKeyboard", @#MonitorKeyboard)
263 XgrRegisterMessage (@"MonitorMouse", @#MonitorMouse)
264 XgrRegisterMessage (@"MouseDown", @#MouseDown)
265 XgrRegisterMessage (@"MouseDrag", @#MouseDrag)
266 XgrRegisterMessage (@"MouseEnter", @#MouseEnter)
267 XgrRegisterMessage (@"MouseExit", @#MouseExit)
268 XgrRegisterMessage (@"MouseMove", @#MouseMove)
269 XgrRegisterMessage (@"MouseUp", @#MouseUp)
270 XgrRegisterMessage (@"MuchLess", @#MuchLess)
271 XgrRegisterMessage (@"MuchMore", @#MuchMore)
272 XgrRegisterMessage (@"OneLess", @#OneLess)
273 XgrRegisterMessage (@"OneMore", @#OneMore)
274 XgrRegisterMessage (@"PokeArray", @#PokeArray)
275 XgrRegisterMessage (@"PokeTextArray", @#PokeTextArray)
276 XgrRegisterMessage (@"PokeTextString", @#PokeTextString)
277 XgrRegisterMessage (@"PokeValueArray", @#PokeValueArray)
278 XgrRegisterMessage (@"Print", @#Print)
279 XgrRegisterMessage (@"Redraw", @#Redraw)
280 XgrRegisterMessage (@"RedrawGrid", @#RedrawGrid)
281 XgrRegisterMessage (@"RedrawLines", @#RedrawLines)
282 XgrRegisterMessage (@"RedrawText", @#RedrawText)
283 XgrRegisterMessage (@"RedrawWindow", @#RedrawWindow)
284 XgrRegisterMessage (@"Replace", @#Replace)
285 XgrRegisterMessage (@"ReplaceForward", @#ReplaceForward)
286 XgrRegisterMessage (@"ReplaceReverse", @#ReplaceReverse)
287 XgrRegisterMessage (@"Reset", @#Reset)
288 XgrRegisterMessage (@"Resize", @#Resize)
289 XgrRegisterMessage (@"Resized", @#Resized)
290 XgrRegisterMessage (@"ResizeNot", @#ResizeNot)
291 XgrRegisterMessage (@"ResizeWindow", @#ResizeWindow)
292 XgrRegisterMessage (@"ResizeWindowToGrid", @#ResizeWindowToGrid)
293 XgrRegisterMessage (@"Resized", @#Resized)
294 XgrRegisterMessage (@"Reverse", @#Reverse)
295 XgrRegisterMessage (@"ScrollH", @#ScrollH)
296 XgrRegisterMessage (@"ScrollV", @#ScrollV)
297 XgrRegisterMessage (@"Select", @#Select)
298 XgrRegisterMessage (@"Selected", @#Selected)
299 XgrRegisterMessage (@"Selection", @#Selection)
300 XgrRegisterMessage (@"SelectWindow", @#SelectWindow)
301 XgrRegisterMessage (@"SetAlign", @#SetAlign)
302 XgrRegisterMessage (@"SetBorder", @#SetBorder)
303 XgrRegisterMessage (@"SetBorderOffset", @#SetBorderOffset)
304 XgrRegisterMessage (@"SetCallback", @#SetCallback)
305 XgrRegisterMessage (@"SetCan", @#SetCan)
306 XgrRegisterMessage (@"SetCharacterMapArray", @#SetCharacterMapArray)
307 XgrRegisterMessage (@"SetClipGrid", @#SetClipGrid)
308 XgrRegisterMessage (@"SetColor", @#SetColor)
309 XgrRegisterMessage (@"SetColorAll", @#SetColorAll)
310 XgrRegisterMessage (@"SetColorExtra", @#SetColorExtra)
311 XgrRegisterMessage (@"SetColorExtraAll", @#SetColorExtraAll)
312 XgrRegisterMessage (@"SetCursor", @#SetCursor)
313 XgrRegisterMessage (@"SetCursorXY", @#SetCursorXY)
314 XgrRegisterMessage (@"SetDisplay", @#SetDisplay)
315 XgrRegisterMessage (@"SetFocusColor", @#SetFocusColor)
316 XgrRegisterMessage (@"SetFocusColorExtra", @#SetFocusColorExtra)
317 XgrRegisterMessage (@"SetFont", @#SetFont)
318 XgrRegisterMessage (@"SetFontNumber", @#SetFontNumber)
319 XgrRegisterMessage (@"SetGridFunction", @#SetGridFunction)
320 XgrRegisterMessage (@"SetGridFunctionName", @#SetGridFunctionName)
321 XgrRegisterMessage (@"SetGridName", @#SetGridName)
322 XgrRegisterMessage (@"SetGridType", @#SetGridType)
323 XgrRegisterMessage (@"SetGridTypeName", @#SetGridTypeName)
324 XgrRegisterMessage (@"SetGroup", @#SetGroup)
325 XgrRegisterMessage (@"SetHelp", @#SetHelp)
326 XgrRegisterMessage (@"SetHelpFile", @#SetHelpFile)
327 XgrRegisterMessage (@"SetHelpString", @#SetHelpString)
328 XgrRegisterMessage (@"SetHelpStrings", @#SetHelpStrings)
329 XgrRegisterMessage (@"SetHintString", @#SetHintString)
330 XgrRegisterMessage (@"SetImage", @#SetImage)
331 XgrRegisterMessage (@"SetImageCoords", @#SetImageCoords)
332 XgrRegisterMessage (@"SetIndent", @#SetIndent)
333 XgrRegisterMessage (@"SetInfo", @#SetInfo)
334 XgrRegisterMessage (@"SetJustify", @#SetJustify)
335 XgrRegisterMessage (@"SetKeyboardFocus", @#SetKeyboardFocus)
336 XgrRegisterMessage (@"SetKeyboardFocusGrid", @#SetKeyboardFocusGrid)
337 XgrRegisterMessage (@"SetMaxMinSize", @#SetMaxMinSize)
338 XgrRegisterMessage (@"SetMessageFunc", @#SetMessageFunc)
339 XgrRegisterMessage (@"SetMessageFuncArray", @#SetMessageFuncArray)
340 XgrRegisterMessage (@"SetMessageSub", @#SetMessageSub)
341 XgrRegisterMessage (@"SetMessageSubArray", @#SetMessageSubArray)
342 XgrRegisterMessage (@"SetModalWindow", @#SetModalWindow)
343 XgrRegisterMessage (@"SetParent", @#SetParent)
344 XgrRegisterMessage (@"SetPosition", @#SetPosition)
345 XgrRegisterMessage (@"SetRedrawFlags", @#SetRedrawFlags)
346 XgrRegisterMessage (@"SetSize", @#SetSize)
347 XgrRegisterMessage (@"SetState", @#SetState)
348 XgrRegisterMessage (@"SetStyle", @#SetStyle)
349 XgrRegisterMessage (@"SetTabArray", @#SetTabArray)
350 XgrRegisterMessage (@"SetTabWidth", @#SetTabWidth)
351 XgrRegisterMessage (@"SetTextArray", @#SetTextArray)
352 XgrRegisterMessage (@"SetTextArrayLine", @#SetTextArrayLine)
353 XgrRegisterMessage (@"SetTextArrayLines", @#SetTextArrayLines)
354 XgrRegisterMessage (@"SetTextCursor", @#SetTextCursor)
355 XgrRegisterMessage (@"SetTextFilename", @#SetTextFilename)
356 XgrRegisterMessage (@"SetTextSelection", @#SetTextSelection)
357 XgrRegisterMessage (@"SetTextString", @#SetTextString)
358 XgrRegisterMessage (@"SetTextStrings", @#SetTextStrings)
359 XgrRegisterMessage (@"SetTexture", @#SetTexture)
360 XgrRegisterMessage (@"SetTimer", @#SetTimer)
361 XgrRegisterMessage (@"SetValue", @#SetValue)
362 XgrRegisterMessage (@"SetValues", @#SetValues)
363 XgrRegisterMessage (@"SetValueArray", @#SetValueArray)
364 XgrRegisterMessage (@"SetWindowFunction", @#SetWindowFunction)
365 XgrRegisterMessage (@"SetWindowIcon", @#SetWindowIcon)
366 XgrRegisterMessage (@"SetWindowTitle", @#SetWindowTitle)
367 XgrRegisterMessage (@"ShowTextCursor", @#ShowTextCursor)
368 XgrRegisterMessage (@"ShowWindow", @#ShowWindow)
369 XgrRegisterMessage (@"SomeLess", @#SomeLess)
370 XgrRegisterMessage (@"SomeMore", @#SomeMore)
371 XgrRegisterMessage (@"StartTimer", @#StartTimer)
372 XgrRegisterMessage (@"SystemMessage", @#SystemMessage)
373 XgrRegisterMessage (@"TextDelete", @#TextDelete)
374 XgrRegisterMessage (@"TextEvent", @#TextEvent)
375 XgrRegisterMessage (@"TextInsert", @#TextInsert)
376 XgrRegisterMessage (@"TextModified", @#TextModified)
377 XgrRegisterMessage (@"TextReplace", @#TextReplace)
378 XgrRegisterMessage (@"TimeOut", @#TimeOut)
379 XgrRegisterMessage (@"Update", @#Update)
380 XgrRegisterMessage (@"WindowClose", @#WindowClose)
381 XgrRegisterMessage (@"WindowCreate", @#WindowCreate)
382 XgrRegisterMessage (@"WindowDeselected", @#WindowDeselected)
383 XgrRegisterMessage (@"WindowDestroy", @#WindowDestroy)
384 XgrRegisterMessage (@"WindowDestroyed", @#WindowDestroyed)
385 XgrRegisterMessage (@"WindowDisplay", @#WindowDisplay)
386 XgrRegisterMessage (@"WindowDisplayed", @#WindowDisplayed)
387 XgrRegisterMessage (@"WindowGetDisplay", @#WindowGetDisplay)
388 XgrRegisterMessage (@"WindowGetFunction", @#WindowGetFunction)
389 XgrRegisterMessage (@"WindowGetIcon", @#WindowGetIcon)
390 XgrRegisterMessage (@"WindowGetKeyboardFocusGrid", @#WindowGetKeyboardFocusGrid)
391 XgrRegisterMessage (@"WindowGetSelectedWindow", @#WindowGetSelectedWindow)
392 XgrRegisterMessage (@"WindowGetSize", @#WindowGetSize)
393 XgrRegisterMessage (@"WindowGetTitle", @#WindowGetTitle)
394 XgrRegisterMessage (@"WindowHelp", @#WindowHelp)
395 XgrRegisterMessage (@"WindowHide", @#WindowHide)
396 XgrRegisterMessage (@"WindowHidden", @#WindowHidden)
397 XgrRegisterMessage (@"WindowKeyDown", @#WindowKeyDown)
398 XgrRegisterMessage (@"WindowKeyUp", @#WindowKeyUp)
399 XgrRegisterMessage (@"WindowMaximize", @#WindowMaximize)
400 XgrRegisterMessage (@"WindowMaximized", @#WindowMaximized)
401 XgrRegisterMessage (@"WindowMinimize", @#WindowMinimize)
402 XgrRegisterMessage (@"WindowMinimized", @#WindowMinimized)
403 XgrRegisterMessage (@"WindowMonitorContext", @#WindowMonitorContext)
404 XgrRegisterMessage (@"WindowMonitorHelp", @#WindowMonitorHelp)
405 XgrRegisterMessage (@"WindowMonitorKeyboard", @#WindowMonitorKeyboard)
406 XgrRegisterMessage (@"WindowMonitorMouse", @#WindowMonitorMouse)
407 XgrRegisterMessage (@"WindowMouseDown", @#WindowMouseDown)
408 XgrRegisterMessage (@"WindowMouseDrag", @#WindowMouseDrag)
409 XgrRegisterMessage (@"WindowMouseEnter", @#WindowMouseEnter)
410 XgrRegisterMessage (@"WindowMouseExit", @#WindowMouseExit)
411 XgrRegisterMessage (@"WindowMouseMove", @#WindowMouseMove)
412 XgrRegisterMessage (@"WindowMouseUp", @#WindowMouseUp)
413 XgrRegisterMessage (@"WindowRedraw", @#WindowRedraw)
414 XgrRegisterMessage (@"WindowRegister", @#WindowRegister)
415 XgrRegisterMessage (@"WindowResize", @#WindowResize)
416 XgrRegisterMessage (@"WindowResized", @#WindowResized)
417 XgrRegisterMessage (@"WindowResizeToGrid", @#WindowResizeToGrid)
418 XgrRegisterMessage (@"WindowSelect", @#WindowSelect)
419 XgrRegisterMessage (@"WindowSelected", @#WindowSelected)
420 XgrRegisterMessage (@"WindowSetFunction", @#WindowSetFunction)
421 XgrRegisterMessage (@"WindowSetIcon", @#WindowSetIcon)
422 XgrRegisterMessage (@"WindowSetKeyboardFocusGrid", @#WindowSetKeyboardFocusGrid)
423 XgrRegisterMessage (@"WindowSetTitle", @#WindowSetTitle)
424 XgrRegisterMessage (@"WindowShow", @#WindowShow)
425 XgrRegisterMessage (@"WindowSystemMessage", @#WindowSystemMessage)
426 XgrRegisterMessage (@"LastMessage", @#LastMessage)
427 '
428 XgrGetDisplaySize ("", @#displayWidth, @#displayHeight, @#windowBorderWidth, @#windowTitleHeight)
429 END FUNCTION
430 '
431 '
432 ' ############################
433 ' ##### InitProgram () #####
434 ' ############################
435 '
436 FUNCTION InitProgram ()
437 ' Initialize everything your program needs to initialize
438 END FUNCTION
439 '
440 '
441 ' ##############################
442 ' ##### CreateWindows () #####
443 ' ##############################
444 '
445 FUNCTION CreateWindows ()
446 SHARED Circle
447 '
448 wt = 0
449 ' wt = $$WindowTypeNoFrame
450 Circle (@Circle, #CreateWindow, 0, 0, 0, 0, wt, 0)
451 Circle ( Circle, #SetCallback, Circle, &CircleCode(), -1, -1, -1, -1)
452 XuiSendMessage (Circle, #DisplayWindow, 0, 0, 0, 0, 0, 0)
453 ' XuiSendMessage (Circle, #MaximizeWindow, 0, 0, 0, 0, 0, 0)
454 END FUNCTION
455 '
456 '
457 ' #######################
458 ' ##### Circle () #####
459 ' #######################
460 '
461 FUNCTION Circle (grid, message, v0, v1, v2, v3, r0, (r1, r1$, r1[], r1$[]))
462 STATIC designX, designY, designWidth, designHeight
463 STATIC SUBADDR sub[]
464 STATIC upperMessage
465 STATIC Circle
466 '
467 $Circle = 0 ' kid 0 grid type = Circle
468 $DrawingArea = 1 ' kid 1 grid type = XuiArea
469 $ClearButton = 2 ' kid 2 grid type = XuiPushButton
470 $PauseButton = 3 ' kid 3 grid type = XuiPushButton
471 $QuitButton = 4 ' kid 4 grid type = XuiPushButton
472 $UpperKid = 4 ' kid maximum
473 '
474 IFZ sub[] THEN GOSUB Initialize
475 ' XuiReportMessage (grid, message, v0, v1, v2, v3, r0, r1)
476 IF XuiProcessMessage (grid, message, @v0, @v1, @v2, @v3, @r0, @r1, Circle) THEN RETURN
477 IF (message <= upperMessage) THEN GOSUB @sub[message]
478 RETURN
479 '
480 '
481 ' ***** Callback ***** message = Callback : r1 = original message
482 '
483 SUB Callback
484 message = r1
485 IF (message <= upperMessage) THEN GOSUB @sub[message]
486 END SUB
487 '
488 '
489 ' ***** Create ***** v0123 = xywh : r0 = window : r1 = parent
490 '
491 SUB Create
492 IF (v0 <= 0) THEN v0 = 0
493 IF (v1 <= 0) THEN v1 = 0
494 IF (v2 <= 0) THEN v2 = designWidth
495 IF (v3 <= 0) THEN v3 = designHeight
496 XuiCreateGrid (@grid, Circle, @v0, @v1, @v2, @v3, r0, r1, &Circle())
497 XuiSendMessage ( grid, #SetGridName, 0, 0, 0, 0, 0, @"Circle")
498 XuiSendMessage ( grid, #SetBorder, 0, 0, 0, 0, 0, 0)
499 XuiArea (@g, #Create, 4, 4, 444, 444, r0, grid)
500 XuiSendMessage ( g, #SetCallback, grid, &Circle(), -1, -1, $DrawingArea, grid)
501 XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"DrawingArea")
502 XuiSendMessage ( g, #SetColor, $$Black, $$White, $$Black, $$White, 0, 0)
503 XuiPushButton (@g, #Create, 4, 448, 148, 20, r0, grid)
504 XuiSendMessage ( g, #SetCallback, grid, &Circle(), -1, -1, $ClearButton, grid)
505 XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"ClearButton")
506 XuiSendMessage ( g, #SetColor, $$BrightGreen, $$Black, $$Black, $$White, 0, 0)
507 XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @" Clear ")
508 XuiPushButton (@g, #Create, 152, 448, 148, 20, r0, grid)
509 XuiSendMessage ( g, #SetCallback, grid, &Circle(), -1, -1, $PauseButton, grid)
510 XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"PauseButton")
511 XuiSendMessage ( g, #SetColor, 110, $$Black, $$Black, $$White, 0, 0)
512 XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @" Pause ")
513 XuiPushButton (@g, #Create, 300, 448, 148, 20, r0, grid)
514 XuiSendMessage ( g, #SetCallback, grid, &Circle(), -1, -1, $QuitButton, grid)
515 XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"QuitButton")
516 XuiSendMessage ( g, #SetColor, 102, $$Black, $$Black, $$White, 0, 0)
517 XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @" Quit ")
518 GOSUB Resize
519 END SUB
520 '
521 '
522 ' ***** CreateWindow ***** v0123 = xywh : r0 = windowType : r1$ = display$
523 '
524 SUB CreateWindow
525 IF (v0 = 0) THEN v0 = designX
526 IF (v1 = 0) THEN v1 = designY
527 IF (v2 <= 0) THEN v2 = designWidth
528 IF (v3 <= 0) THEN v3 = designHeight
529 XuiWindow (@window, #WindowCreate, v0, v1, v2, v3, r0, @r1$)
530 v0 = 0 : v1 = 0 : r0 = window : ATTACH r1$ TO display$
531 GOSUB Create
532 r1 = 0 : ATTACH display$ TO r1$
533 XuiWindow (window, #WindowRegister, grid, -1, v2, v3, @r0, @"Circle")
534 END SUB
535 '
536 '
537 ' ***** GetSmallestSize *****
538 '
539 SUB GetSmallestSize
540 v2 = 100
541 v3 = 120
542 XuiGetBorder (grid, #GetBorder, 0, 0, 0, 0, 0, @bw)
543 FOR i = 2 TO 4
544 XuiSendMessage (grid, #GetSmallestSize, 0, 0, @ww, @hh, i, 0)
545 w = MAX (w, ww) : h = MAX (h, hh)
546 NEXT i
547 w = w + 4 AND -4
548 h = h + 4 AND -4
549 innerWidth = w + w + w
550 innerHeight = innerWidth + h
551 totalWidth = bw + bw + innerWidth
552 totalHeight = bw + bw + innerHeight
553 v2 = totalWidth
554 v3 = totalHeight
555 END SUB
556 '
557 '
558 ' ***** Resize *****
559 '
560 SUB Resize
561 v2Entry = v2
562 v3Entry = v3
563 GOSUB GetSmallestSize
564 v2 = MAX (v2, v2Entry)
565 v3 = MAX (v3, v3Entry)
566 '
567 XuiPositionGrid (grid, @v0, @v1, @v2, @v3)
568 '
569 innerWidth = v2 - bw - bw
570 innerHeight = v3 - bw - bw
571 gw = innerWidth
572 gh = innerHeight - h
573 bw0 = innerWidth / 3
574 bw1 = bw0
575 bw2 = innerWidth - bw1 - bw0
576 bx0 = bw
577 bx1 = bx0 + bw0
578 bx2 = bx1 + bw1
579 by = v3-h-bw
580 '
581 XuiSendMessage (grid, #Resize, bw, bw, gw, gh, 1, 0)
582 XuiSendMessage (grid, #Resize, bx0, by, bw0, h, 2, 0)
583 XuiSendMessage (grid, #Resize, bx1, by, bw1, h, 3, 0)
584 XuiSendMessage (grid, #Resize, bx2, by, bw2, h, 4, 0)
585 XuiResizeWindowToGrid (grid, #ResizeWindowToGrid, 0, 0, 0, 0, 0, 0)
586 '
587 ' start new code : create buffer grid first time through this subroutine
588 '
589 XuiGetValues (grid, #GetValues, @g, @i, 0, 0, 0, 0)
590 '
591 IFZ i THEN
592 XuiSendMessage (grid, #GetGridNumber, @g, 0, 0, 0, $DrawingArea, 0)
593 XgrCreateGrid (@i, 1, 0, 0, v2, v3, r0, g, 0)
594 XgrSetGridBuffer (g, i, 0, 0)
595 XgrClearGrid (g, 0)
596 XuiSetValues (grid, #SetValues, g, i, 0, 0, 0, 0)
597 END IF
598 '
599 XgrSetGridPositionAndSize (i, 0, 0, gw, gh)
600 '
601 ' end new code : buffer grid resized same as $DrawingArea kid grid
602 '
603 XuiGetSize (grid, #GetSize, 0, 0, @width, @height, 0, 0)
604 XuiCallback (grid, #Resized, 0, 0, width, height, 0, 0)
605 END SUB
606 '
607 '
608 ' ***** Initialize *****
609 '
610 SUB Initialize
611 XuiGetDefaultMessageFuncArray (@func[])
612 XgrMessageNameToNumber (@"LastMessage", @upperMessage)
613 '
614 func[#Callback] = &XuiCallback()
615 func[#Resize] = &XuiResizeNot()
616 func[#Selection] = &XuiCallback()
617 func[#GetSmallestSize] = 0
618 func[#Resize] = 0
619 '
620 DIM sub[upperMessage]
621 sub[#Create] = SUBADDRESS (Create)
622 sub[#CreateWindow] = SUBADDRESS (CreateWindow)
623 sub[#GetSmallestSize] = SUBADDRESS (GetSmallestSize)
624 sub[#Resize] = SUBADDRESS (Resize)
625 '
626 IF func[0] THEN PRINT "Circle(): Initialize: Error::: (Undefined Message)"
627 IF sub[0] THEN PRINT "Circle(): Initialize: Error::: (Undefined Message)"
628 XuiRegisterGridType (@Circle, "Circle", &Circle(), @func[], @sub[])
629 '
630 designX = 568
631 designY = 23
632 designWidth = 452
633 designHeight = 472
634 '
635 gridType = Circle
636 XuiSetGridTypeValue (gridType, @"x", designX)
637 XuiSetGridTypeValue (gridType, @"y", designY)
638 XuiSetGridTypeValue (gridType, @"width", designWidth)
639 XuiSetGridTypeValue (gridType, @"height", designHeight)
640 XuiSetGridTypeValue (gridType, @"border", $$BorderFrame)
641 XuiSetGridTypeValue (gridType, @"can", $$Focus OR $$Respond OR $$Callback)
642 IFZ message THEN RETURN
643 END SUB
644 END FUNCTION
645 '
646 '
647 ' ###########################
648 ' ##### CircleCode () #####
649 ' ###########################
650 '
651 FUNCTION CircleCode (grid, message, v0, v1, v2, v3, r0, r1)
652 SHARED Circle, CircleGrid
653 SHARED paused, circleWidth, circleHeight
654 STATIC entry, color, dx, dy, half, rad, jjj
655 STATIC s1#, s2#, a1#, a2#
656 '
657 $Circle = 0 ' kid 0 grid type = Circle
658 $DrawingArea = 1 ' kid 1 grid type = XuiArea
659 $ClearButton = 2 ' kid 2 grid type = XuiPushButton
660 $PauseButton = 3 ' kid 3 grid type = XuiPushButton
661 $QuitButton = 4 ' kid 4 grid type = XuiPushButton
662 $UpperKid = 4 ' kid maximum
663 '
664 IFZ entry THEN entry = $$TRUE : GOSUB Resized
665 ' XuiReportMessage (grid, message, v0, v1, v2, v3, r0, r1)
666 IF (message = #Callback) THEN message = r1
667 '
668 SELECT CASE message
669 ' CASE #Help: GOSUB Help
670 CASE #Redraw: GOSUB Redraw
671 CASE #Resized: GOSUB Resized
672 CASE #Selection: GOSUB Selection
673 END SELECT
674 RETURN
675 '
676 '
677 ' ***********************
678 ' ***** Selection ***** Callbacks from Circle() pushbuttons
679 ' ***********************
680 '
681 SUB Selection
682 SELECT CASE r0
683 CASE $ClearButton : XgrClearGrid (CircleGrid, -1)
684 CASE $PauseButton : paused = NOT paused
685 CASE $QuitButton : QUIT (0)
686 END SELECT
687 END SUB
688 '
689 '
690 ' *********************
691 ' ***** Resized ***** Callbacks from Circle() resize routine
692 ' *********************
693 '
694 SUB Resized
695 entry = $$TRUE
696 XuiSendMessage (Circle, #GetKidArray, 0, 0, 0, 0, 0, @kid[])
697 XuiSendMessage (Circle, #GetSize, 0, 0, @circleWidth, @circleHeight, 1, 0)
698 CircleGrid = kid[1]
699 s1# = $$PI / 256#
700 s2# = 4.9# * s1#
701 a1# = 0#
702 a2# = $$PI / 4#
703 dx = circleWidth >> 1
704 dy = circleHeight >> 1
705 rad = MIN (circleWidth, circleHeight) >> 1
706 rad = rad - 6
707 color = 0
708 XgrClearGrid (CircleGrid, -1)
709 END SUB
710 '
711 '
712 ' ********************
713 ' ***** Redraw ***** Messages from Entry ()
714 ' ********************
715 '
716 SUB Redraw
717 INC jjj
718 IF (jjj > 100) THEN jjj = 0
719 IF (jjj < 50) THEN XgrClearGrid (CircleGrid, -1) ' comment out or in for variety
720 FOR i = 0 TO 99
721 GOSUB Circle
722 NEXT i
723 INC color
724 END SUB
725 '
726 '
727 ' ********************
728 ' ***** Circle ***** Drawing subroutine
729 ' ********************
730 '
731 SUB Circle
732 IF (a1# >= $$TWOPI) THEN
733 a1# = a1# - $$TWOPI
734 color = (color + 3)
735 IF (color > 124) THEN color = color - 124
736 END IF
737 IF (a2# >= $$TWOPI) THEN
738 a2# = a2# - $$TWOPI
739 INC i
740 END IF
741 IFZ color THEN INC color
742 p1x = SIN (a1#) * rad + dx
743 p1y = COS (a1#) * rad + dy
744 p2x = SIN (a2#) * rad + dx
745 p2y = COS (a2#) * rad + dy
746 XgrDrawLine (CircleGrid, color, p1x, p1y, p2x, p2y)
747 a1# = a1# + s1#
748 a2# = a2# + s2#
749 s2# = 1.0002# * s2#
750 IF (s2# > $$TWOPI) THEN s2# = s2# - $$TWOPI
751 END SUB
752 END FUNCTION
753 END PROGRAM