home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 August / PCWorld_2000-08_cd.bin / Software / TemaCD / xbasic / xbpro.exe / xb / aspread.x < prev    next >
Text File  |  2000-01-12  |  37KB  |  856 lines

  1. '
  2. ' ####################
  3. ' #####  PROLOG  #####
  4. ' ####################
  5. '
  6. PROGRAM    "spread"
  7. VERSION    "0.0000"
  8. '
  9. IMPORT    "xst"
  10. IMPORT    "xgr"
  11. IMPORT    "xui"
  12. '
  13. INTERNAL FUNCTION  Entry         ()
  14. INTERNAL FUNCTION  InitGui       ()
  15. INTERNAL FUNCTION  InitProgram   ()
  16. INTERNAL FUNCTION  CreateWindows ()
  17. INTERNAL FUNCTION  InitWindows   ()
  18. INTERNAL FUNCTION  Spread        (grid, message, v0, v1, v2, v3, r0, ANY)
  19. INTERNAL FUNCTION  SpreadCode    (grid, message, v0, v1, v2, v3, kid, ANY)
  20. '
  21. '
  22. ' ######################
  23. ' #####  Entry ()  #####
  24. ' ######################
  25. '
  26. FUNCTION  Entry ()
  27.     SHARED  terminateProgram
  28.     STATIC    entry
  29. '
  30.     IF entry THEN RETURN                    ' enter once
  31.     entry =  $$TRUE                                ' enter occured
  32. '
  33.     InitGui ()                                        ' initialize messages
  34.     InitProgram ()                                ' initialize this program
  35.     CreateWindows ()                            ' create main window and others
  36.     InitWindows ()                                ' initialize windows and grids
  37. '
  38.     IF LIBRARY(0) THEN RETURN            ' main program executes message loop
  39. '
  40.     DO                                                        ' the message loop
  41.         XgrProcessMessages (1)            ' process one message
  42.     LOOP UNTIL terminateProgram        ' and repeat until program is terminated
  43. END FUNCTION
  44. '
  45. '
  46. ' ########################
  47. ' #####  InitGui ()  #####
  48. ' ########################
  49. '
  50. ' InitGui() initializes cursor, icon, message, and display variables.
  51. ' Programs can reference these variables, but must never change them.
  52. '
  53. FUNCTION  InitGui ()
  54. '
  55. ' need to set program name so grid properties
  56. ' can be set from the grid property database.
  57. '
  58.     program$ = PROGRAM$(0)
  59.     XstSetProgramName (@program$)
  60. '
  61. ' ***************************************
  62. ' *****  Register Standard Cursors  *****
  63. ' ***************************************
  64. '
  65.     XgrRegisterCursor (@"default",      @#cursorDefault)
  66.     XgrRegisterCursor (@"arrow",        @#cursorArrow)
  67.     XgrRegisterCursor (@"n",            @#cursorN)
  68.     XgrRegisterCursor (@"s",            @#cursorS)
  69.     XgrRegisterCursor (@"e",            @#cursorE)
  70.     XgrRegisterCursor (@"w",            @#cursorW)
  71.     XgrRegisterCursor (@"ns",           @#cursorArrowsNS)
  72.     XgrRegisterCursor (@"ns",           @#cursorArrowsSN)
  73.     XgrRegisterCursor (@"ew",           @#cursorArrowsEW)
  74.     XgrRegisterCursor (@"ew",           @#cursorArrowsWE)
  75.     XgrRegisterCursor (@"nwse",         @#cursorArrowsNWSE)
  76.     XgrRegisterCursor (@"nesw",         @#cursorArrowsNESW)
  77.     XgrRegisterCursor (@"all",          @#cursorArrowsAll)
  78.     XgrRegisterCursor (@"plus",         @#cursorPlus)
  79.     XgrRegisterCursor (@"wait",         @#cursorWait)
  80.     XgrRegisterCursor (@"insert",       @#cursorInsert)
  81.     XgrRegisterCursor (@"crosshair",    @#cursorCrosshair)
  82.     XgrRegisterCursor (@"hourglass",    @#cursorHourglass)
  83.     XgrRegisterCursor (@"hand",         @#cursorHand)
  84.     XgrRegisterCursor (@"help",         @#cursorHelp)
  85. '
  86.     #defaultCursor = #cursorDefault
  87. '
  88. '
  89. ' ********************************************
  90. ' *****  Register Standard Window Icons  *****
  91. ' ********************************************
  92. '
  93.     XgrRegisterIcon (@"hand",                    @#iconHand)
  94.     XgrRegisterIcon (@"asterisk",            @#iconAsterisk)
  95.     XgrRegisterIcon (@"question",            @#iconQuestion)
  96.     XgrRegisterIcon (@"exclamation",    @#iconExclamation)
  97.     XgrRegisterIcon (@"application",    @#iconApplication)
  98. '
  99.     XgrRegisterIcon (@"hand",                    @#iconStop)                        ' alias
  100.     XgrRegisterIcon (@"asterisk",            @#iconInformation)        ' alias
  101.     XgrRegisterIcon (@"application",  @#iconBlank)                    ' alias
  102. '
  103.     XgrRegisterIcon (@"window",                @#iconWindow)                    ' custom
  104. '
  105. '
  106. ' ******************************
  107. ' *****  Register Messages *****  Create message numbers for message names
  108. ' ******************************
  109. '
  110.     XgrRegisterMessage (@"Blowback",                                        @#Blowback)
  111.     XgrRegisterMessage (@"Callback",                                        @#Callback)
  112.     XgrRegisterMessage (@"Cancel",                                            @#Cancel)
  113.     XgrRegisterMessage (@"Change",                                            @#Change)
  114.     XgrRegisterMessage (@"CloseWindow",                                    @#CloseWindow)
  115.     XgrRegisterMessage (@"ContextChange",                                @#ContextChange)
  116.     XgrRegisterMessage (@"Create",                                            @#Create)
  117.     XgrRegisterMessage (@"CreateValueArray",                        @#CreateValueArray)
  118.     XgrRegisterMessage (@"CreateWindow",                                @#CreateWindow)
  119.     XgrRegisterMessage (@"CursorH",                                            @#CursorH)
  120.     XgrRegisterMessage (@"CursorV",                                            @#CursorV)
  121.     XgrRegisterMessage (@"Deselected",                                    @#Deselected)
  122.     XgrRegisterMessage (@"Destroy",                                            @#Destroy)
  123.     XgrRegisterMessage (@"Destroyed",                                        @#Destroyed)
  124.     XgrRegisterMessage (@"DestroyWindow",                                @#DestroyWindow)
  125.     XgrRegisterMessage (@"Disable",                                            @#Disable)
  126.     XgrRegisterMessage (@"Disabled",                                        @#Disabled)
  127.     XgrRegisterMessage (@"Displayed",                                        @#Displayed)
  128.     XgrRegisterMessage (@"DisplayWindow",                                @#DisplayWindow)
  129.     XgrRegisterMessage (@"Enable",                                            @#Enable)
  130.     XgrRegisterMessage (@"Enabled",                                            @#Enabled)
  131.     XgrRegisterMessage (@"Enter",                                                @#Enter)
  132.     XgrRegisterMessage (@"ExitMessageLoop",                            @#ExitMessageLoop)
  133.     XgrRegisterMessage (@"Find",                                                @#Find)
  134.     XgrRegisterMessage (@"FindForward",                                    @#FindForward)
  135.     XgrRegisterMessage (@"FindReverse",                                    @#FindReverse)
  136.     XgrRegisterMessage (@"Forward",                                            @#Forward)
  137.     XgrRegisterMessage (@"GetAlign",                                        @#GetAlign)
  138.     XgrRegisterMessage (@"GetBorder",                                        @#GetBorder)
  139.     XgrRegisterMessage (@"GetBorderOffset",                            @#GetBorderOffset)
  140.     XgrRegisterMessage (@"GetCallback",                                    @#GetCallback)
  141.     XgrRegisterMessage (@"GetCallbackArgs",                            @#GetCallbackArgs)
  142.     XgrRegisterMessage (@"GetCan",                                            @#GetCan)
  143.     XgrRegisterMessage (@"GetCharacterMapArray",                @#GetCharacterMapArray)
  144.     XgrRegisterMessage (@"GetCharacterMapEntry",                @#GetCharacterMapEntry)
  145.     XgrRegisterMessage (@"GetClipGrid",                                    @#GetClipGrid)
  146.     XgrRegisterMessage (@"GetColor",                                        @#GetColor)
  147.     XgrRegisterMessage (@"GetColorExtra",                                @#GetColorExtra)
  148.     XgrRegisterMessage (@"GetCursor",                                        @#GetCursor)
  149.     XgrRegisterMessage (@"GetCursorXY",                                    @#GetCursorXY)
  150.     XgrRegisterMessage (@"GetDisplay",                                    @#GetDisplay)
  151.     XgrRegisterMessage (@"GetEnclosedGrids",                        @#GetEnclosedGrids)
  152.     XgrRegisterMessage (@"GetEnclosingGrid",                        @#GetEnclosingGrid)
  153.     XgrRegisterMessage (@"GetFocusColor",                                @#GetFocusColor)
  154.     XgrRegisterMessage (@"GetFocusColorExtra",                    @#GetFocusColorExtra)
  155.     XgrRegisterMessage (@"GetFont",                                            @#GetFont)
  156.     XgrRegisterMessage (@"GetFontMetrics",                            @#GetFontMetrics)
  157.     XgrRegisterMessage (@"GetFontNumber",                                @#GetFontNumber)
  158.     XgrRegisterMessage (@"GetGridFunction",                            @#GetGridFunction)
  159.     XgrRegisterMessage (@"GetGridFunctionName",                    @#GetGridFunctionName)
  160.     XgrRegisterMessage (@"GetGridName",                                    @#GetGridName)
  161.     XgrRegisterMessage (@"GetGridNumber",                                @#GetGridNumber)
  162.     XgrRegisterMessage (@"GetGridProperties",                        @#GetGridProperties)
  163.     XgrRegisterMessage (@"GetGridType",                                    @#GetGridType)
  164.     XgrRegisterMessage (@"GetGridTypeName",                            @#GetGridTypeName)
  165.     XgrRegisterMessage (@"GetGroup",                                        @#GetGroup)
  166.     XgrRegisterMessage (@"GetHelp",                                            @#GetHelp)
  167.     XgrRegisterMessage (@"GetHelpFile",                                    @#GetHelpFile)
  168.     XgrRegisterMessage (@"GetHelpString",                                @#GetHelpString)
  169.     XgrRegisterMessage (@"GetHelpStrings",                            @#GetHelpStrings)
  170.     XgrRegisterMessage (@"GetHintString",                                @#GetHintString)
  171.     XgrRegisterMessage (@"GetImage",                                        @#GetImage)
  172.     XgrRegisterMessage (@"GetImageCoords",                            @#GetImageCoords)
  173.     XgrRegisterMessage (@"GetIndent",                                        @#GetIndent)
  174.     XgrRegisterMessage (@"GetInfo",                                            @#GetInfo)
  175.     XgrRegisterMessage (@"GetJustify",                                    @#GetJustify)
  176.     XgrRegisterMessage (@"GetKeyboardFocus",                        @#GetKeyboardFocus)
  177.     XgrRegisterMessage (@"GetKeyboardFocusGrid",                @#GetKeyboardFocusGrid)
  178.     XgrRegisterMessage (@"GetKidArray",                                    @#GetKidArray)
  179.     XgrRegisterMessage (@"GetKidNumber",                                @#GetKidNumber)
  180.     XgrRegisterMessage (@"GetKids",                                            @#GetKids)
  181.     XgrRegisterMessage (@"GetKind",                                            @#GetKind)
  182.     XgrRegisterMessage (@"GetMaxMinSize",                                @#GetMaxMinSize)
  183.     XgrRegisterMessage (@"GetMessageFunc",                            @#GetMessageFunc)
  184.     XgrRegisterMessage (@"GetMessageFuncArray",                    @#GetMessageFuncArray)
  185.     XgrRegisterMessage (@"GetMessageSub",                                @#GetMessageSub)
  186.     XgrRegisterMessage (@"GetMessageSubArray",                    @#GetMessageSubArray)
  187.     XgrRegisterMessage (@"GetModalInfo",                                @#GetModalInfo)
  188.     XgrRegisterMessage (@"GetModalWindow",                            @#GetModalWindow)
  189.     XgrRegisterMessage (@"GetParent",                                        @#GetParent)
  190.     XgrRegisterMessage (@"GetPosition",                                    @#GetPosition)
  191.     XgrRegisterMessage (@"GetProtoInfo",                                @#GetProtoInfo)
  192.     XgrRegisterMessage (@"GetRedrawFlags",                            @#GetRedrawFlags)
  193.     XgrRegisterMessage (@"GetSize",                                            @#GetSize)
  194.     XgrRegisterMessage (@"GetSmallestSize",                            @#GetSmallestSize)
  195.     XgrRegisterMessage (@"GetState",                                        @#GetState)
  196.     XgrRegisterMessage (@"GetStyle",                                        @#GetStyle)
  197.     XgrRegisterMessage (@"GetTabArray",                                    @#GetTabArray)
  198.     XgrRegisterMessage (@"GetTabWidth",                                    @#GetTabWidth)
  199.     XgrRegisterMessage (@"GetTextArray",                                @#GetTextArray)
  200.     XgrRegisterMessage (@"GetTextArrayBounds",                    @#GetTextArrayBounds)
  201.     XgrRegisterMessage (@"GetTextArrayLine",                        @#GetTextArrayLine)
  202.     XgrRegisterMessage (@"GetTextArrayLines",                        @#GetTextArrayLines)
  203.     XgrRegisterMessage (@"GetTextCursor",                                @#GetTextCursor)
  204.     XgrRegisterMessage (@"GetTextFilename",                            @#GetTextFilename)
  205.     XgrRegisterMessage (@"GetTextPosition",                            @#GetTextPosition)
  206.     XgrRegisterMessage (@"GetTextSelection",                        @#GetTextSelection)
  207.     XgrRegisterMessage (@"GetTextSpacing",                            @#GetTextSpacing)
  208.     XgrRegisterMessage (@"GetTextString",                                @#GetTextString)
  209.     XgrRegisterMessage (@"GetTextStrings",                            @#GetTextStrings)
  210.     XgrRegisterMessage (@"GetTexture",                                    @#GetTexture)
  211.     XgrRegisterMessage (@"GetTimer",                                        @#GetTimer)
  212.     XgrRegisterMessage (@"GetValue",                                        @#GetValue)
  213.     XgrRegisterMessage (@"GetValueArray",                                @#GetValueArray)
  214.     XgrRegisterMessage (@"GetValues",                                        @#GetValues)
  215.     XgrRegisterMessage (@"GetWindow",                                        @#GetWindow)
  216.     XgrRegisterMessage (@"GetWindowFunction",                        @#GetWindowFunction)
  217.     XgrRegisterMessage (@"GetWindowGrid",                                @#GetWindowGrid)
  218.     XgrRegisterMessage (@"GetWindowIcon",                                @#GetWindowIcon)
  219.     XgrRegisterMessage (@"GetWindowSize",                                @#GetWindowSize)
  220.     XgrRegisterMessage (@"GetWindowTitle",                            @#GetWindowTitle)
  221.     XgrRegisterMessage (@"GotKeyboardFocus",                        @#GotKeyboardFocus)
  222.     XgrRegisterMessage (@"GrabArray",                                        @#GrabArray)
  223.     XgrRegisterMessage (@"GrabTextArray",                                @#GrabTextArray)
  224.     XgrRegisterMessage (@"GrabTextString",                            @#GrabTextString)
  225.     XgrRegisterMessage (@"GrabValueArray",                            @#GrabValueArray)
  226.     XgrRegisterMessage (@"Help",                                                @#Help)
  227.     XgrRegisterMessage (@"Hidden",                                            @#Hidden)
  228.     XgrRegisterMessage (@"HideTextCursor",                            @#HideTextCursor)
  229.     XgrRegisterMessage (@"HideWindow",                                    @#HideWindow)
  230.     XgrRegisterMessage (@"Initialize",                                    @#Initialize)
  231.     XgrRegisterMessage (@"Initialized",                                    @#Initialized)
  232.     XgrRegisterMessage (@"Inline",                                            @#Inline)
  233.     XgrRegisterMessage (@"InquireText",                                    @#InquireText)
  234.     XgrRegisterMessage (@"KeyboardFocusBackward",                @#KeyboardFocusBackward)
  235.     XgrRegisterMessage (@"KeyboardFocusForward",                @#KeyboardFocusForward)
  236.     XgrRegisterMessage (@"KeyDown",                                            @#KeyDown)
  237.     XgrRegisterMessage (@"KeyUp",                                                @#KeyUp)
  238.     XgrRegisterMessage (@"LostKeyboardFocus",                        @#LostKeyboardFocus)
  239.     XgrRegisterMessage (@"LostTextSelection",                        @#LostTextSelection)
  240.     XgrRegisterMessage (@"Maximized",                                        @#Maximized)
  241.     XgrRegisterMessage (@"MaximizeWindow",                            @#MaximizeWindow)
  242.     XgrRegisterMessage (@"Maximum",                                            @#Maximum)
  243.     XgrRegisterMessage (@"Minimized",                                        @#Minimized)
  244.     XgrRegisterMessage (@"MinimizeWindow",                            @#MinimizeWindow)
  245.     XgrRegisterMessage (@"Minimum",                                            @#Minimum)
  246.     XgrRegisterMessage (@"MonitorContext",                            @#MonitorContext)
  247.     XgrRegisterMessage (@"MonitorHelp",                                    @#MonitorHelp)
  248.     XgrRegisterMessage (@"MonitorKeyboard",                            @#MonitorKeyboard)
  249.     XgrRegisterMessage (@"MonitorMouse",                                @#MonitorMouse)
  250.     XgrRegisterMessage (@"MouseDown",                                        @#MouseDown)
  251.     XgrRegisterMessage (@"MouseDrag",                                        @#MouseDrag)
  252.     XgrRegisterMessage (@"MouseEnter",                                    @#MouseEnter)
  253.     XgrRegisterMessage (@"MouseExit",                                        @#MouseExit)
  254.     XgrRegisterMessage (@"MouseMove",                                        @#MouseMove)
  255.     XgrRegisterMessage (@"MouseUp",                                            @#MouseUp)
  256.     XgrRegisterMessage (@"MuchLess",                                        @#MuchLess)
  257.     XgrRegisterMessage (@"MuchMore",                                        @#MuchMore)
  258.     XgrRegisterMessage (@"Notify",                                            @#Notify)
  259.     XgrRegisterMessage (@"OneLess",                                            @#OneLess)
  260.     XgrRegisterMessage (@"OneMore",                                            @#OneMore)
  261.     XgrRegisterMessage (@"PokeArray",                                        @#PokeArray)
  262.     XgrRegisterMessage (@"PokeTextArray",                                @#PokeTextArray)
  263.     XgrRegisterMessage (@"PokeTextString",                            @#PokeTextString)
  264.     XgrRegisterMessage (@"PokeValueArray",                            @#PokeValueArray)
  265.     XgrRegisterMessage (@"Print",                                                @#Print)
  266.     XgrRegisterMessage (@"Redraw",                                            @#Redraw)
  267.     XgrRegisterMessage (@"RedrawGrid",                                    @#RedrawGrid)
  268.     XgrRegisterMessage (@"RedrawLines",                                    @#RedrawLines)
  269.     XgrRegisterMessage (@"RedrawText",                                    @#RedrawText)
  270.     XgrRegisterMessage (@"RedrawWindow",                                @#RedrawWindow)
  271.     XgrRegisterMessage (@"Replace",                                            @#Replace)
  272.     XgrRegisterMessage (@"ReplaceForward",                            @#ReplaceForward)
  273.     XgrRegisterMessage (@"ReplaceReverse",                            @#ReplaceReverse)
  274.     XgrRegisterMessage (@"Reset",                                                @#Reset)
  275.     XgrRegisterMessage (@"Resize",                                            @#Resize)
  276.     XgrRegisterMessage (@"Resized",                                            @#Resized)
  277.     XgrRegisterMessage (@"ResizeNot",                                        @#ResizeNot)
  278.     XgrRegisterMessage (@"ResizeWindow",                                @#ResizeWindow)
  279.     XgrRegisterMessage (@"ResizeWindowToGrid",                    @#ResizeWindowToGrid)
  280.     XgrRegisterMessage (@"Resized",                                            @#Resized)
  281.     XgrRegisterMessage (@"Reverse",                                            @#Reverse)
  282.     XgrRegisterMessage (@"ScrollH",                                            @#ScrollH)
  283.     XgrRegisterMessage (@"ScrollV",                                            @#ScrollV)
  284.     XgrRegisterMessage (@"Select",                                            @#Select)
  285.     XgrRegisterMessage (@"Selected",                                        @#Selected)
  286.     XgrRegisterMessage (@"Selection",                                        @#Selection)
  287.     XgrRegisterMessage (@"SelectWindow",                                @#SelectWindow)
  288.     XgrRegisterMessage (@"SetAlign",                                        @#SetAlign)
  289.     XgrRegisterMessage (@"SetBorder",                                        @#SetBorder)
  290.     XgrRegisterMessage (@"SetBorderOffset",                            @#SetBorderOffset)
  291.     XgrRegisterMessage (@"SetCallback",                                    @#SetCallback)
  292.     XgrRegisterMessage (@"SetCan",                                            @#SetCan)
  293.     XgrRegisterMessage (@"SetCharacterMapArray",                @#SetCharacterMapArray)
  294.     XgrRegisterMessage (@"SetCharacterMapEntry",                @#SetCharacterMapEntry)
  295.     XgrRegisterMessage (@"SetClipGrid",                                    @#SetClipGrid)
  296.     XgrRegisterMessage (@"SetColor",                                        @#SetColor)
  297.     XgrRegisterMessage (@"SetColorAll",                                    @#SetColorAll)
  298.     XgrRegisterMessage (@"SetColorExtra",                                @#SetColorExtra)
  299.     XgrRegisterMessage (@"SetColorExtraAll",                        @#SetColorExtraAll)
  300.     XgrRegisterMessage (@"SetCursor",                                        @#SetCursor)
  301.     XgrRegisterMessage (@"SetCursorXY",                                    @#SetCursorXY)
  302.     XgrRegisterMessage (@"SetDisplay",                                    @#SetDisplay)
  303.     XgrRegisterMessage (@"SetFocusColor",                                @#SetFocusColor)
  304.     XgrRegisterMessage (@"SetFocusColorExtra",                    @#SetFocusColorExtra)
  305.     XgrRegisterMessage (@"SetFont",                                            @#SetFont)
  306.     XgrRegisterMessage (@"SetFontNumber",                                @#SetFontNumber)
  307.     XgrRegisterMessage (@"SetGridFunction",                            @#SetGridFunction)
  308.     XgrRegisterMessage (@"SetGridFunctionName",                    @#SetGridFunctionName)
  309.     XgrRegisterMessage (@"SetGridName",                                    @#SetGridName)
  310.     XgrRegisterMessage (@"SetGridProperties",                        @#SetGridProperties)
  311.     XgrRegisterMessage (@"SetGridType",                                    @#SetGridType)
  312.     XgrRegisterMessage (@"SetGridTypeName",                            @#SetGridTypeName)
  313.     XgrRegisterMessage (@"SetGroup",                                        @#SetGroup)
  314.     XgrRegisterMessage (@"SetHelp",                                            @#SetHelp)
  315.     XgrRegisterMessage (@"SetHelpFile",                                    @#SetHelpFile)
  316.     XgrRegisterMessage (@"SetHelpString",                                @#SetHelpString)
  317.     XgrRegisterMessage (@"SetHelpStrings",                            @#SetHelpStrings)
  318.     XgrRegisterMessage (@"SetHintString",                                @#SetHintString)
  319.     XgrRegisterMessage (@"SetImage",                                        @#SetImage)
  320.     XgrRegisterMessage (@"SetImageCoords",                            @#SetImageCoords)
  321.     XgrRegisterMessage (@"SetIndent",                                        @#SetIndent)
  322.     XgrRegisterMessage (@"SetInfo",                                            @#SetInfo)
  323.     XgrRegisterMessage (@"SetJustify",                                    @#SetJustify)
  324.     XgrRegisterMessage (@"SetKeyboardFocus",                        @#SetKeyboardFocus)
  325.     XgrRegisterMessage (@"SetKeyboardFocusGrid",                @#SetKeyboardFocusGrid)
  326.     XgrRegisterMessage (@"SetMaxMinSize",                                @#SetMaxMinSize)
  327.     XgrRegisterMessage (@"SetMessageFunc",                            @#SetMessageFunc)
  328.     XgrRegisterMessage (@"SetMessageFuncArray",                    @#SetMessageFuncArray)
  329.     XgrRegisterMessage (@"SetMessageSub",                                @#SetMessageSub)
  330.     XgrRegisterMessage (@"SetMessageSubArray",                    @#SetMessageSubArray)
  331.     XgrRegisterMessage (@"SetModalWindow",                            @#SetModalWindow)
  332.     XgrRegisterMessage (@"SetParent",                                        @#SetParent)
  333.     XgrRegisterMessage (@"SetPosition",                                    @#SetPosition)
  334.     XgrRegisterMessage (@"SetRedrawFlags",                            @#SetRedrawFlags)
  335.     XgrRegisterMessage (@"SetSize",                                            @#SetSize)
  336.     XgrRegisterMessage (@"SetState",                                        @#SetState)
  337.     XgrRegisterMessage (@"SetStyle",                                        @#SetStyle)
  338.     XgrRegisterMessage (@"SetTabArray",                                    @#SetTabArray)
  339.     XgrRegisterMessage (@"SetTabWidth",                                    @#SetTabWidth)
  340.     XgrRegisterMessage (@"SetTextArray",                                @#SetTextArray)
  341.     XgrRegisterMessage (@"SetTextArrayLine",                        @#SetTextArrayLine)
  342.     XgrRegisterMessage (@"SetTextArrayLines",                        @#SetTextArrayLines)
  343.     XgrRegisterMessage (@"SetTextCursor",                                @#SetTextCursor)
  344.     XgrRegisterMessage (@"SetTextFilename",                            @#SetTextFilename)
  345.     XgrRegisterMessage (@"SetTextSelection",                        @#SetTextSelection)
  346.     XgrRegisterMessage (@"SetTextSpacing",                            @#SetTextSpacing)
  347.     XgrRegisterMessage (@"SetTextString",                                @#SetTextString)
  348.     XgrRegisterMessage (@"SetTextStrings",                            @#SetTextStrings)
  349.     XgrRegisterMessage (@"SetTexture",                                    @#SetTexture)
  350.     XgrRegisterMessage (@"SetTimer",                                        @#SetTimer)
  351.     XgrRegisterMessage (@"SetValue",                                        @#SetValue)
  352.     XgrRegisterMessage (@"SetValues",                                        @#SetValues)
  353.     XgrRegisterMessage (@"SetValueArray",                                @#SetValueArray)
  354.     XgrRegisterMessage (@"SetWindowFunction",                        @#SetWindowFunction)
  355.     XgrRegisterMessage (@"SetWindowIcon",                                @#SetWindowIcon)
  356.     XgrRegisterMessage (@"SetWindowTitle",                            @#SetWindowTitle)
  357.     XgrRegisterMessage (@"ShowTextCursor",                            @#ShowTextCursor)
  358.     XgrRegisterMessage (@"ShowWindow",                                    @#ShowWindow)
  359.     XgrRegisterMessage (@"SomeLess",                                        @#SomeLess)
  360.     XgrRegisterMessage (@"SomeMore",                                        @#SomeMore)
  361.     XgrRegisterMessage (@"StartTimer",                                    @#StartTimer)
  362.     XgrRegisterMessage (@"SystemMessage",                                @#SystemMessage)
  363.     XgrRegisterMessage (@"TextDelete",                                    @#TextDelete)
  364.     XgrRegisterMessage (@"TextEvent",                                        @#TextEvent)
  365.     XgrRegisterMessage (@"TextInsert",                                    @#TextInsert)
  366.     XgrRegisterMessage (@"TextModified",                                @#TextModified)
  367.     XgrRegisterMessage (@"TextReplace",                                    @#TextReplace)
  368.     XgrRegisterMessage (@"TimeOut",                                            @#TimeOut)
  369.     XgrRegisterMessage (@"Update",                                            @#Update)
  370.     XgrRegisterMessage (@"WindowClose",                                    @#WindowClose)
  371.     XgrRegisterMessage (@"WindowCreate",                                @#WindowCreate)
  372.     XgrRegisterMessage (@"WindowDeselected",                        @#WindowDeselected)
  373.     XgrRegisterMessage (@"WindowDestroy",                                @#WindowDestroy)
  374.     XgrRegisterMessage (@"WindowDestroyed",                            @#WindowDestroyed)
  375.     XgrRegisterMessage (@"WindowDisplay",                                @#WindowDisplay)
  376.     XgrRegisterMessage (@"WindowDisplayed",                            @#WindowDisplayed)
  377.     XgrRegisterMessage (@"WindowGetDisplay",                        @#WindowGetDisplay)
  378.     XgrRegisterMessage (@"WindowGetFunction",                        @#WindowGetFunction)
  379.     XgrRegisterMessage (@"WindowGetIcon",                                @#WindowGetIcon)
  380.     XgrRegisterMessage (@"WindowGetKeyboardFocusGrid",    @#WindowGetKeyboardFocusGrid)
  381.     XgrRegisterMessage (@"WindowGetSelectedWindow",            @#WindowGetSelectedWindow)
  382.     XgrRegisterMessage (@"WindowGetSize",                                @#WindowGetSize)
  383.     XgrRegisterMessage (@"WindowGetTitle",                            @#WindowGetTitle)
  384.     XgrRegisterMessage (@"WindowHelp",                                    @#WindowHelp)
  385.     XgrRegisterMessage (@"WindowHide",                                    @#WindowHide)
  386.     XgrRegisterMessage (@"WindowHidden",                                @#WindowHidden)
  387.     XgrRegisterMessage (@"WindowKeyDown",                                @#WindowKeyDown)
  388.     XgrRegisterMessage (@"WindowKeyUp",                                    @#WindowKeyUp)
  389.     XgrRegisterMessage (@"WindowMaximize",                            @#WindowMaximize)
  390.     XgrRegisterMessage (@"WindowMaximized",                            @#WindowMaximized)
  391.     XgrRegisterMessage (@"WindowMinimize",                            @#WindowMinimize)
  392.     XgrRegisterMessage (@"WindowMinimized",                            @#WindowMinimized)
  393.     XgrRegisterMessage (@"WindowMonitorContext",                @#WindowMonitorContext)
  394.     XgrRegisterMessage (@"WindowMonitorHelp",                        @#WindowMonitorHelp)
  395.     XgrRegisterMessage (@"WindowMonitorKeyboard",                @#WindowMonitorKeyboard)
  396.     XgrRegisterMessage (@"WindowMonitorMouse",                    @#WindowMonitorMouse)
  397.     XgrRegisterMessage (@"WindowMouseDown",                            @#WindowMouseDown)
  398.     XgrRegisterMessage (@"WindowMouseDrag",                            @#WindowMouseDrag)
  399.     XgrRegisterMessage (@"WindowMouseEnter",                        @#WindowMouseEnter)
  400.     XgrRegisterMessage (@"WindowMouseExit",                            @#WindowMouseExit)
  401.     XgrRegisterMessage (@"WindowMouseMove",                            @#WindowMouseMove)
  402.     XgrRegisterMessage (@"WindowMouseUp",                                @#WindowMouseUp)
  403.     XgrRegisterMessage (@"WindowRedraw",                                @#WindowRedraw)
  404.     XgrRegisterMessage (@"WindowRegister",                            @#WindowRegister)
  405.     XgrRegisterMessage (@"WindowResize",                                @#WindowResize)
  406.     XgrRegisterMessage (@"WindowResized",                                @#WindowResized)
  407.     XgrRegisterMessage (@"WindowResizeToGrid",                    @#WindowResizeToGrid)
  408.     XgrRegisterMessage (@"WindowSelect",                                @#WindowSelect)
  409.     XgrRegisterMessage (@"WindowSelected",                            @#WindowSelected)
  410.     XgrRegisterMessage (@"WindowSetFunction",                        @#WindowSetFunction)
  411.     XgrRegisterMessage (@"WindowSetIcon",                                @#WindowSetIcon)
  412.     XgrRegisterMessage (@"WindowSetKeyboardFocusGrid",    @#WindowSetKeyboardFocusGrid)
  413.     XgrRegisterMessage (@"WindowSetTitle",                            @#WindowSetTitle)
  414.     XgrRegisterMessage (@"WindowShow",                                    @#WindowShow)
  415.     XgrRegisterMessage (@"WindowSystemMessage",                    @#WindowSystemMessage)
  416.     XgrRegisterMessage (@"LastMessage",                                    @#LastMessage)
  417. '
  418.     XgrGetDisplaySize ("", @#displayWidth, @#displayHeight, @#windowBorderWidth, @#windowTitleHeight)
  419. END FUNCTION
  420. '
  421. '
  422. ' ############################
  423. ' #####  InitProgram ()  #####
  424. ' ############################
  425. '
  426. ' Add code to this function to initialize anything your program needs
  427. ' to initialize before CreateWindows() creates your programs windows.
  428. ' For initialization after CreateWindows(), add code to InitWindows().
  429. '
  430. ' Do not delete this function, leave it empty if not needed.
  431. '
  432. FUNCTION  InitProgram ()
  433.  
  434. END FUNCTION
  435. '
  436. '
  437. ' ##############################
  438. ' #####  CreateWindows ()  #####
  439. ' ##############################
  440. '
  441. ' GuiDesigner puts code in CreateWindows() to create, initialize, display
  442. ' every window you design graphically.  Don't modify this function unless
  443. ' absolutely necessary - GuiDesigner needs to read and update it at times.
  444. '
  445. ' CreateWindows() usually should not be executed when compiled as library.
  446. ' Start CreateWindows() with "IF LIBRARY(0) THEN RETURN" to assure this.
  447. '
  448. FUNCTION  CreateWindows ()
  449. '
  450.     IF LIBRARY(0) THEN RETURN
  451. '
  452.     Spread         (@Spread, #CreateWindow, 0, 0, 0, 0, 0, 0)
  453.     XuiSendMessage ( Spread, #SetCallback, Spread, &SpreadCode(), -1, -1, -1, 0)
  454.     XuiSendMessage ( Spread, #Initialize, 0, 0, 0, 0, 0, 0)
  455.     XuiSendMessage ( Spread, #DisplayWindow, 0, 0, 0, 0, 0, 0)
  456.     XuiSendMessage ( Spread, #SetGridProperties, -1, 0, 0, 0, 0, 0)
  457. END FUNCTION
  458. '
  459. '
  460. ' ############################
  461. ' #####  InitWindows ()  #####
  462. ' ############################
  463. '
  464. ' Add code to this function to initialize anything your program needs
  465. ' to initialize after CreateWindows() creates your programs windows.
  466. ' For initialization before CreateWindows(), add code to InitProgram().
  467. '
  468. ' Do not delete this function, leave it empty if not needed.
  469. '
  470. FUNCTION  InitWindows ()
  471.  
  472. END FUNCTION
  473. '
  474. '
  475. '    #######################
  476. '    #####  Spread ()  #####
  477. '    #######################
  478. '
  479. FUNCTION  Spread (grid, message, v0, v1, v2, v3, r0, (r1, r1$, r1[], r1$[]))
  480.     STATIC  designX,  designY,  designWidth,  designHeight
  481.     STATIC  SUBADDR  sub[]
  482.     STATIC  upperMessage
  483.     STATIC  Spread
  484. '
  485.     $Spread        =   0  ' kid   0 grid type = Spread
  486.     $Label         =   1  ' kid   1 grid type = XuiLabel
  487.     $InputText     =   2  ' kid   2 grid type = XuiTextLine
  488.     $Button_00_00  =   3  ' kid   3 grid type = XuiPressButton
  489.     $UpperKid      =   3  ' kid maximum
  490. '
  491. '
  492.     IFZ sub[] THEN GOSUB Initialize
  493. '    XuiReportMessage (grid, message, v0, v1, v2, v3, r0, r1)
  494.     IF XuiProcessMessage (grid, message, @v0, @v1, @v2, @v3, @r0, @r1, Spread) THEN RETURN
  495.     IF (message <= upperMessage) THEN GOSUB @sub[message]
  496.     RETURN
  497. '
  498. '
  499. ' *****  Callback  *****  message = Callback : r1 = original message
  500. '
  501. SUB Callback
  502.     message = r1
  503.     callback = message
  504.     IF (message <= upperMessage) THEN GOSUB @sub[message]
  505. END SUB
  506. '
  507. '
  508. ' *****  Create  *****  v0123 = xywh : r0 = window : r1 = parent
  509. '
  510. SUB Create
  511.     IF (v0 <= 0) THEN v0 = 0
  512.     IF (v1 <= 0) THEN v1 = 0
  513.     IF (v2 <= 0) THEN v2 = designWidth
  514.     IF (v3 <= 0) THEN v3 = designHeight
  515.     XuiCreateGrid  (@grid, Spread, @v0, @v1, @v2, @v3, r0, r1, &Spread())
  516.     XuiSendMessage ( grid, #SetGridName, 0, 0, 0, 0, 0, @"Spread")
  517.     XuiSendMessage ( grid, #SetGridName, 0, 0, 0, 0, 0, @"Spread")
  518.     XuiLabel       (@g, #Create, 0, 0, 136, 24, r0, grid)
  519.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Label")
  520.     XuiSendMessage ( g, #SetColor, 92, $$Black, $$Black, $$White, 0, 0)
  521.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"input data ==>>")
  522.     XuiTextLine    (@g, #Create, 136, 0, 656, 24, r0, grid)
  523.     XuiSendMessage ( g, #SetCallback, grid, &Spread(), -1, -1, $InputText, grid)
  524.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"InputText")
  525.     GOSUB Resize
  526. END SUB
  527. '
  528. '
  529. ' *****  CreateWindow  *****  v0123 = xywh : r0 = windowType : r1$ = display$
  530. '
  531. SUB CreateWindow
  532.     IF (v0  = 0) THEN v0 = designX
  533.     IF (v1  = 0) THEN v1 = designY
  534.     IF (v2 <= 0) THEN v2 = designWidth
  535.     IF (v3 <= 0) THEN v3 = designHeight
  536.     XuiWindow (@window, #WindowCreate, v0, v1, v2, v3, r0, @r1$)
  537.     v0 = 0 : v1 = 0 : r0 = window : ATTACH r1$ TO display$
  538.     GOSUB Create
  539.     r1 = 0 : ATTACH display$ TO r1$
  540.     XuiWindow (window, #WindowRegister, grid, -1, v2, v3, @r0, @"Spread")
  541. END SUB
  542. '
  543. '
  544. ' *****  GetSmallestSize  *****  See "Anatomy of Grid Functions"
  545. '
  546. SUB GetSmallestSize
  547. '
  548. ' Write real code instead of the following cop-out.
  549. ' Send #GetSmallestSize messages to all button-kids
  550. ' to find the longest minimum button-width, then
  551. ' assume all button widths must be that width.
  552. '
  553.     XuiSendMessage (grid, #GetBorder, 0, 0, 0, 0, 0, @bw)
  554.     XuiSendMessage (grid, #GetSmallestSize, @lx, @ly, @lw, @lh, $Label, 0)
  555.     XuiSendMessage (grid, #GetSmallestSize, @tx, @ty, @tw, @th, $InputText, 0)
  556. '
  557.     minButtonWidth = 8
  558.     minButtonHeight = 8
  559. '
  560.     FOR b = 0 TO 1599
  561.         kkk = b + 3
  562.         XuiSendMessage (grid, #GetSmallestSize, 0, 0, @ww, @hh, kkk, 0)
  563.         IF (hh > minButtonHeight) THEN minButtonHeight = hh
  564.         IF (ww > minButtonWidth) THEN minButtonWidth = ww
  565.     NEXT b
  566. '
  567. '    minButtonWidth = 20                    ' computed above
  568. '    minButtonHeight = 20                ' computed above
  569. '
  570.     lw = lw + 8                                    ' some breathing room
  571.     lw = (lw + 4) AND -4                ' found width to MOD 4
  572.     lh = (lh + 4) AND -4                ' round height to MOD 4
  573.     th = (th + 4) AND -4                ' round height to MOD 4
  574. '
  575.     IF (lh < 20) THEN lh = 20        ' set minimum height for label and text
  576.     IF (th < lh) THEN th = lh        '
  577.     lh = th                                            ' label-height must equal text-height
  578. '
  579.     v2 = (minButtonWidth * 40) + bw + bw
  580.     v3 = (minButtonHeight * 40) + bw + bw + th
  581. END SUB
  582. '
  583. '
  584. ' *****  Resize  *****
  585. '
  586. ' The first time the following routine is entered,
  587. ' the 40x40 array of XuiPressButton grids is created.
  588. ' All the buttons are created on top of each other in
  589. ' the same location, but that doesn't matter because
  590. ' the rest of the Resize subroutine places and sizes
  591. ' them appropriately.
  592. '
  593. SUB Resize
  594.     XuiSendMessage (grid, #GetSize, @xxx, @yyy, @www, @hhh, 0, 0)
  595. '
  596. ' create a 40x40 array of buttons grids if they do not already exist
  597. '
  598.     XuiGetKidArray (grid, #GetKidArray, 0, 0, 0, 0, 0, @kid[])
  599.     upper = UBOUND (kid[])
  600. '
  601.     IF (upper < 40) THEN
  602.         font = 0
  603. '        IFZ font THEN XgrCreateFont (@font, @"Tw Cen MT", 160, 400, 0, 0)                ' fits on 800x600
  604. '        IFZ font THEN XgrCreateFont (@font, @"Tw Cen MT", 240, 400, 0, 0)
  605. '        IFZ font THEN XgrCreateFont (@font, @"Comic Sans MS", 200, 400, 0, 0)
  606. '        IFZ font THEN XgrCreateFont (@font, @"MS San Serif", 200, 400, 0, 0)
  607. '        IFZ font THEN XgrCreateFont (@font, @"Tw Cen MT", 280, 400, 0, 0)
  608. '        IFZ font THEN XgrCreateFont (@font, @"Verdana", 200, 400, 0, 0)
  609.         IFZ font THEN XgrCreateFont (@font, @"Arial", 240, 400, 0, 0)
  610.         IFZ font THEN XgrCreateFont (@font, @"Arial", 200, 400, 0, 0)
  611.         IFZ font THEN XgrCreateFont (@font, @"helv", 240, 400, 0, 0)
  612. '
  613.         kkk = $Button_00_00
  614. '
  615.         FOR y = 0 TO 39
  616.             y$ = RIGHT$("0"+STRING$(y),2)
  617.             FOR x = 0 TO 39
  618.                 x$ = RIGHT$("0"+STRING$(x),2)
  619.                 text$ = x$
  620. '                text$ = x$ + "," + y$
  621.                 text$ = CHR$ (((y*40+x) MOD 26) + 'a')
  622.                 name$ = "Button_" + x$ + "_" + y$
  623.                 XuiPressButton (@g, #Create, 0, 24, 24, 24, r0, grid)
  624.                 XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @name$)
  625.                 XuiSendMessage ( g, #GetKidNumber, @kid, 0, 0, 0, 0, 0)
  626.                 XuiSendMessage ( g, #SetTextSpacing, 0, -4, 0, 0, 0, 0)
  627.                 XuiSendMessage ( g, #SetFontNumber, font, 0, 0, 0, 0, 0)
  628.                 XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @text$)
  629.                 XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
  630.                 XuiSendMessage ( g, #SetCallback, grid, &Spread(), -1, -1, kid, grid)
  631.                 XuiSendMessage ( g, #SetColor, $$BrightSteel, $$Black, $$Black, $$White, 0, 0)
  632.                 IF ((x == 0) AND (y == 0)) THEN firstkid = kid
  633. '                IFZ ((kid-3) MOD 16) THEN PRINT
  634. '                PRINT kid; kkk
  635.                 INC kkk
  636.             NEXT x
  637.         NEXT y
  638.         XuiSendMessage (grid, #SetValue, firstkid, 0, 0, 0, 0, 0)
  639.     END IF
  640. '
  641. ' make sure all the buttons are there
  642. '
  643.     firstkid = 0
  644.     XuiGetKidArray (grid, #GetKidArray, 0, 0, 0, 0, 0, @kid[])
  645.     XuiSendMessage (grid, #GetValue, @firstkid, 0, 0, 0, 0, 0)
  646. '
  647.     upper = UBOUND (kid[])
  648.     IFZ firstkid THEN PRINT "xxxxx" : EXIT SUB                ' disaster
  649.     IF (upper < 1600) THEN PRINT "yyyyy" : EXIT SUB        ' disaster
  650. '
  651. ' don't resize below smallest acceptable size
  652. ' note: GetSmallestSize sets some variables we compute with below
  653. '
  654.     vv2 = v2
  655.     vv3 = v3
  656.     GOSUB GetSmallestSize
  657.     IF (vv2 > v2) THEN v2 = vv2
  658.     IF (vv3 > v3) THEN v3 = vv3
  659. '
  660. ' resize grid and all its kids
  661. '
  662.     buttonWidth = (v2-bw-bw) \ 40
  663.     buttonHeight = (v3-th-bw-bw) \ 40
  664. '
  665.     vv2 = (buttonWidth * 40) + bw + bw
  666.     vv3 = (buttonHeight * 40) + bw + bw + th
  667. '
  668.     padwidth = v2 - vv2
  669.     padheight = v3 - vv3
  670. '
  671. ' position main grid first
  672. '
  673.     XuiPositionGrid (grid, @v0, @v1, @v2, @v3)
  674. '
  675. ' position label-grid and text-input grid
  676. '
  677.     tx = bw + lw
  678.     tw = v2 - bw - bw - lw
  679.     XuiSendToKid (grid, #Resize, bw, bw, lw, lh, $Label, 0)
  680.     XuiSendToKid (grid, #Resize, tx, bw, tw, th, $InputText, 0)
  681. '
  682. ' position and size the 40x40 array of kid grids
  683. '
  684.     kid = firstkid
  685.     FOR y = 0 TO 39
  686.         gy = (buttonHeight * y) + bw + th
  687.         FOR x = 0 TO 39
  688.             gx = (buttonWidth * x) + bw
  689.             width = buttonWidth
  690.             height = buttonHeight
  691.             IF (x == 39) THEN width = width + padwidth
  692.             IF (y == 39) THEN height = height + padheight
  693.             XuiSendToKid (grid, #Resize, gx, gy, width, height, kid, 0)
  694. '            IFZ ((kid-3) MOD 16) THEN PRINT
  695. '            PRINT kid;
  696.             INC kid
  697.         NEXT x
  698.     NEXT y
  699. '
  700.     XuiResizeWindowToGrid (grid, #ResizeWindowToGrid, v0, v1, v2, v3, 0, 0)
  701. END SUB
  702. '
  703. '
  704. ' *****  Selection  *****  See "Anatomy of Grid Functions"
  705. '
  706. SUB Selection
  707. END SUB
  708. '
  709. '
  710. ' *****  Initialize  *****  ' see "Anatomy of Grid Functions"
  711. '
  712. SUB Initialize
  713.     XuiGetDefaultMessageFuncArray (@func[])
  714.     XgrMessageNameToNumber (@"LastMessage", @upperMessage)
  715. '
  716.     func[#Callback]           = &XuiCallback ()               ' disable to handle Callback messages internally
  717. ' func[#GetSmallestSize]    = 0                             ' enable to add internal GetSmallestSize routine
  718.   func[#Resize]             = 0                             ' enable to add internal Resize routine
  719. '
  720.     DIM sub[upperMessage]
  721. '    sub[#Callback]            = SUBADDRESS (Callback)         ' enable to handle Callback messages internally
  722.     sub[#Create]              = SUBADDRESS (Create)           ' must be internal routine
  723.     sub[#CreateWindow]        = SUBADDRESS (CreateWindow)     ' must be internal routine
  724. '    sub[#GetSmallestSize]     = SUBADDRESS (GetSmallestSize)  ' enable to add internal GetSmallestSize routine
  725.     sub[#Resize]              = SUBADDRESS (Resize)           ' enable to add internal Resize routine
  726. '    sub[#Selection]           = SUBADDRESS (Selection)        ' routes Selection callbacks to subroutine
  727. '
  728.     IF sub[0] THEN PRINT "Spread() : Initialize : error ::: (undefined message)"
  729.     IF func[0] THEN PRINT "Spread() : Initialize : error ::: (undefined message)"
  730.     XuiRegisterGridType (@Spread, "Spread", &Spread(), @func[], @sub[])
  731. '
  732. ' Don't remove the following 4 lines, or WindowFromFunction/WindowToFunction will not work
  733. '
  734.     designX = 4
  735.     designY = 23
  736.     designWidth = 256
  737.     designHeight = 256
  738. '
  739.     gridType = Spread
  740.     XuiSetGridTypeProperty (gridType, @"x",                designX)
  741.     XuiSetGridTypeProperty (gridType, @"y",                designY)
  742.     XuiSetGridTypeProperty (gridType, @"width",            designWidth)
  743.     XuiSetGridTypeProperty (gridType, @"height",           designHeight)
  744. '    XuiSetGridTypeProperty (gridType, @"maxWidth",         designWidth)
  745. '    XuiSetGridTypeProperty (gridType, @"maxHeight",        designHeight)
  746. '    XuiSetGridTypeProperty (gridType, @"minWidth",         designWidth)
  747. '    XuiSetGridTypeProperty (gridType, @"minHeight",        designHeight)
  748.     XuiSetGridTypeProperty (gridType, @"can",              $$Focus OR $$Respond OR $$Callback OR $$TextSelection)
  749.     XuiSetGridTypeProperty (gridType, @"focusKid",         $InputText)
  750.     XuiSetGridTypeProperty (gridType, @"inputTextString",  $InputText)
  751.     IFZ message THEN RETURN
  752. END SUB
  753. END FUNCTION
  754. '
  755. '
  756. ' ###########################
  757. ' #####  SpreadCode ()  #####
  758. ' ###########################
  759. '
  760. FUNCTION  SpreadCode (grid, message, v0, v1, v2, v3, kid, r1)
  761.     STATIC  selected
  762.     STATIC  input$
  763. '
  764.     $Spread        =   0  ' kid   0 grid type = Spread
  765.     $Label         =   1  ' kid   1 grid type = XuiLabel
  766.     $InputText     =   2  ' kid   2 grid type = XuiTextLine
  767.     $Button_00_00  =   3  ' kid   3 grid type = XuiPressButton
  768.     $UpperKid      =   3  ' kid maximum (except THIS specialty program has 1599 more)
  769. '
  770. '    XuiReportMessage (grid, message, v0, v1, v2, v3, kid, r1)
  771.     IF (message = #Callback) THEN message = r1
  772. '
  773.     SELECT CASE message
  774.         CASE #CloseWindow    : QUIT (0)
  775.         CASE #Selection        : GOSUB Selection   ' Common callback message
  776.         CASE #TextEvent        : GOSUB TextEvent   ' KeyDown in TextArea or TextLine
  777.     END SELECT
  778.     RETURN
  779. '
  780. '
  781. ' *****  Selection  *****
  782. '
  783. SUB Selection
  784.     SELECT CASE kid
  785.         CASE $Spread        :
  786.         CASE $Label         :
  787.         CASE $InputText     : XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, kid, @input$)
  788.                                                     PRINT "input text = \""; input$; "\""
  789.                                                     character$ = LEFT$ (input$, 1)
  790.                                                     IFZ character$ THEN character$ = "#"
  791.                                                     IF selected THEN
  792.                                                         XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, selected, @character$)
  793.                                                         XuiSendMessage (grid, #Redraw, 0, 0, 0, 0, selected, 0)
  794.                                                     END IF
  795.         CASE ELSE                        : y = (kid-3) \ 40
  796.                                                     x = (kid-3) MOD 40
  797.                                                     PRINT "callback from "; RIGHT$("0"+STRING$(x),2); ","; RIGHT$("0"+STRING$(y),2)
  798. '
  799. ' change background color of previously selected grid back to normal
  800. ' then change background color of newly selected grid to special color
  801. '
  802.                                                     IF selected THEN
  803.                                                         XuiSendMessage (grid, #SetColor, $$BrightSteel, -1, -1, -1, selected, 0)
  804.                                                         XuiSendMessage (grid, #Redraw, 0, 0, 0, 0, selected, 0)
  805.                                                     END IF
  806.                                                     XuiSendMessage (grid, #SetColor, 112, -1, -1, -1, kid, 0)
  807.                                                     XuiSendMessage (grid, #Redraw, 0, 0, 0, 0, kid, 0)
  808.                                                     selected = kid
  809.     END SELECT
  810. END SUB
  811. '
  812. '
  813. ' *****  TextEvent  *****
  814. '
  815. SUB TextEvent
  816.     IF (kid == $InputText) THEN
  817.         SELECT CASE v2
  818.             CASE 0x1B10001B    : IF selected THEN XuiSendMessage (grid, #SetKeyboardFocus, 0, 0, 0, 0, selected, 0)
  819.         END SELECT
  820.         EXIT SUB
  821.     END IF
  822. '
  823.     move = $$FALSE
  824.     y = (selected-3) \ 40
  825.     x = (selected-3) MOD 40
  826. '
  827.     SELECT CASE v2
  828.         CASE 0x1B10001B    : XuiSendMessage (grid, #SetKeyboardFocus, 0, 0, 0, 0, $InputText, 0)
  829.         CASE 0x28000028    : IF (y != 39) THEN INC y ELSE y = 0 : INC x
  830.                                             IF (x > 39) THEN x = 0
  831.                                             move = $$TRUE
  832.         CASE 0x26000026    : IF (y != 0) THEN DEC y ELSE y = 39 : DEC x
  833.                                             IF (x < 0) THEN x = 39
  834.                                             move = $$TRUE
  835.         CASE 0x27000027    : IF (x != 39) THEN INC x ELSE x = 0 : INC y
  836.                                             IF (y > 39) THEN y = 0
  837.                                             move = $$TRUE
  838.         CASE 0x25000025    : IF (x != 0) THEN DEC x ELSE x = 39 : DEC y
  839.                                             IF (y < 0) THEN y = 39
  840.                                             move = $$TRUE
  841.     END SELECT
  842. '
  843.     IF move THEN
  844.         IF (selected > 2) THEN
  845.             XuiSendMessage (grid, #SetColor, $$BrightSteel, -1, -1, -1, selected, 0)
  846.             XuiSendMessage (grid, #Redraw, 0, 0, 0, 0, selected, 0)
  847.         END IF
  848.         selected = (y * 40) + x + 3
  849.         XuiSendMessage (grid, #SetKeyboardFocus, 0, 0, 0, 0, selected, 0)
  850.         XuiSendMessage (grid, #SetColor, 112, -1, -1, -1, selected, 0)
  851.         XuiSendMessage (grid, #Redraw, 0, 0, 0, 0, selected, 0)
  852.     END IF
  853. END SUB
  854. END FUNCTION
  855. END PROGRAM
  856.