"SfR Fresh" - the SfR Freeware/Shareware Archive

Member "usr/xb-6.2.3/demo/abuffer.x" of archive xbasic-6.2.3-linux-i386.tar.gz:


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