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 >
Wrap
Text File
|
2000-01-12
|
37KB
|
856 lines
'
' ####################
' ##### PROLOG #####
' ####################
'
PROGRAM "spread"
VERSION "0.0000"
'
IMPORT "xst"
IMPORT "xgr"
IMPORT "xui"
'
INTERNAL FUNCTION Entry ()
INTERNAL FUNCTION InitGui ()
INTERNAL FUNCTION InitProgram ()
INTERNAL FUNCTION CreateWindows ()
INTERNAL FUNCTION InitWindows ()
INTERNAL FUNCTION Spread (grid, message, v0, v1, v2, v3, r0, ANY)
INTERNAL FUNCTION SpreadCode (grid, message, v0, v1, v2, v3, kid, ANY)
'
'
' ######################
' ##### Entry () #####
' ######################
'
FUNCTION Entry ()
SHARED terminateProgram
STATIC entry
'
IF entry THEN RETURN ' enter once
entry = $$TRUE ' enter occured
'
InitGui () ' initialize messages
InitProgram () ' initialize this program
CreateWindows () ' create main window and others
InitWindows () ' initialize windows and grids
'
IF LIBRARY(0) THEN RETURN ' main program executes message loop
'
DO ' the message loop
XgrProcessMessages (1) ' process one message
LOOP UNTIL terminateProgram ' and repeat until program is terminated
END FUNCTION
'
'
' ########################
' ##### InitGui () #####
' ########################
'
' InitGui() initializes cursor, icon, message, and display variables.
' Programs can reference these variables, but must never change them.
'
FUNCTION InitGui ()
'
' need to set program name so grid properties
' can be set from the grid property database.
'
program$ = PROGRAM$(0)
XstSetProgramName (@program$)
'
' ***************************************
' ***** Register Standard Cursors *****
' ***************************************
'
XgrRegisterCursor (@"default", @#cursorDefault)
XgrRegisterCursor (@"arrow", @#cursorArrow)
XgrRegisterCursor (@"n", @#cursorN)
XgrRegisterCursor (@"s", @#cursorS)
XgrRegisterCursor (@"e", @#cursorE)
XgrRegisterCursor (@"w", @#cursorW)
XgrRegisterCursor (@"ns", @#cursorArrowsNS)
XgrRegisterCursor (@"ns", @#cursorArrowsSN)
XgrRegisterCursor (@"ew", @#cursorArrowsEW)
XgrRegisterCursor (@"ew", @#cursorArrowsWE)
XgrRegisterCursor (@"nwse", @#cursorArrowsNWSE)
XgrRegisterCursor (@"nesw", @#cursorArrowsNESW)
XgrRegisterCursor (@"all", @#cursorArrowsAll)
XgrRegisterCursor (@"plus", @#cursorPlus)
XgrRegisterCursor (@"wait", @#cursorWait)
XgrRegisterCursor (@"insert", @#cursorInsert)
XgrRegisterCursor (@"crosshair", @#cursorCrosshair)
XgrRegisterCursor (@"hourglass", @#cursorHourglass)
XgrRegisterCursor (@"hand", @#cursorHand)
XgrRegisterCursor (@"help", @#cursorHelp)
'
#defaultCursor = #cursorDefault
'
'
' ********************************************
' ***** Register Standard Window Icons *****
' ********************************************
'
XgrRegisterIcon (@"hand", @#iconHand)
XgrRegisterIcon (@"asterisk", @#iconAsterisk)
XgrRegisterIcon (@"question", @#iconQuestion)
XgrRegisterIcon (@"exclamation", @#iconExclamation)
XgrRegisterIcon (@"application", @#iconApplication)
'
XgrRegisterIcon (@"hand", @#iconStop) ' alias
XgrRegisterIcon (@"asterisk", @#iconInformation) ' alias
XgrRegisterIcon (@"application", @#iconBlank) ' alias
'
XgrRegisterIcon (@"window", @#iconWindow) ' custom
'
'
' ******************************
' ***** Register Messages ***** Create message numbers for message names
' ******************************
'
XgrRegisterMessage (@"Blowback", @#Blowback)
XgrRegisterMessage (@"Callback", @#Callback)
XgrRegisterMessage (@"Cancel", @#Cancel)
XgrRegisterMessage (@"Change", @#Change)
XgrRegisterMessage (@"CloseWindow", @#CloseWindow)
XgrRegisterMessage (@"ContextChange", @#ContextChange)
XgrRegisterMessage (@"Create", @#Create)
XgrRegisterMessage (@"CreateValueArray", @#CreateValueArray)
XgrRegisterMessage (@"CreateWindow", @#CreateWindow)
XgrRegisterMessage (@"CursorH", @#CursorH)
XgrRegisterMessage (@"CursorV", @#CursorV)
XgrRegisterMessage (@"Deselected", @#Deselected)
XgrRegisterMessage (@"Destroy", @#Destroy)
XgrRegisterMessage (@"Destroyed", @#Destroyed)
XgrRegisterMessage (@"DestroyWindow", @#DestroyWindow)
XgrRegisterMessage (@"Disable", @#Disable)
XgrRegisterMessage (@"Disabled", @#Disabled)
XgrRegisterMessage (@"Displayed", @#Displayed)
XgrRegisterMessage (@"DisplayWindow", @#DisplayWindow)
XgrRegisterMessage (@"Enable", @#Enable)
XgrRegisterMessage (@"Enabled", @#Enabled)
XgrRegisterMessage (@"Enter", @#Enter)
XgrRegisterMessage (@"ExitMessageLoop", @#ExitMessageLoop)
XgrRegisterMessage (@"Find", @#Find)
XgrRegisterMessage (@"FindForward", @#FindForward)
XgrRegisterMessage (@"FindReverse", @#FindReverse)
XgrRegisterMessage (@"Forward", @#Forward)
XgrRegisterMessage (@"GetAlign", @#GetAlign)
XgrRegisterMessage (@"GetBorder", @#GetBorder)
XgrRegisterMessage (@"GetBorderOffset", @#GetBorderOffset)
XgrRegisterMessage (@"GetCallback", @#GetCallback)
XgrRegisterMessage (@"GetCallbackArgs", @#GetCallbackArgs)
XgrRegisterMessage (@"GetCan", @#GetCan)
XgrRegisterMessage (@"GetCharacterMapArray", @#GetCharacterMapArray)
XgrRegisterMessage (@"GetCharacterMapEntry", @#GetCharacterMapEntry)
XgrRegisterMessage (@"GetClipGrid", @#GetClipGrid)
XgrRegisterMessage (@"GetColor", @#GetColor)
XgrRegisterMessage (@"GetColorExtra", @#GetColorExtra)
XgrRegisterMessage (@"GetCursor", @#GetCursor)
XgrRegisterMessage (@"GetCursorXY", @#GetCursorXY)
XgrRegisterMessage (@"GetDisplay", @#GetDisplay)
XgrRegisterMessage (@"GetEnclosedGrids", @#GetEnclosedGrids)
XgrRegisterMessage (@"GetEnclosingGrid", @#GetEnclosingGrid)
XgrRegisterMessage (@"GetFocusColor", @#GetFocusColor)
XgrRegisterMessage (@"GetFocusColorExtra", @#GetFocusColorExtra)
XgrRegisterMessage (@"GetFont", @#GetFont)
XgrRegisterMessage (@"GetFontMetrics", @#GetFontMetrics)
XgrRegisterMessage (@"GetFontNumber", @#GetFontNumber)
XgrRegisterMessage (@"GetGridFunction", @#GetGridFunction)
XgrRegisterMessage (@"GetGridFunctionName", @#GetGridFunctionName)
XgrRegisterMessage (@"GetGridName", @#GetGridName)
XgrRegisterMessage (@"GetGridNumber", @#GetGridNumber)
XgrRegisterMessage (@"GetGridProperties", @#GetGridProperties)
XgrRegisterMessage (@"GetGridType", @#GetGridType)
XgrRegisterMessage (@"GetGridTypeName", @#GetGridTypeName)
XgrRegisterMessage (@"GetGroup", @#GetGroup)
XgrRegisterMessage (@"GetHelp", @#GetHelp)
XgrRegisterMessage (@"GetHelpFile", @#GetHelpFile)
XgrRegisterMessage (@"GetHelpString", @#GetHelpString)
XgrRegisterMessage (@"GetHelpStrings", @#GetHelpStrings)
XgrRegisterMessage (@"GetHintString", @#GetHintString)
XgrRegisterMessage (@"GetImage", @#GetImage)
XgrRegisterMessage (@"GetImageCoords", @#GetImageCoords)
XgrRegisterMessage (@"GetIndent", @#GetIndent)
XgrRegisterMessage (@"GetInfo", @#GetInfo)
XgrRegisterMessage (@"GetJustify", @#GetJustify)
XgrRegisterMessage (@"GetKeyboardFocus", @#GetKeyboardFocus)
XgrRegisterMessage (@"GetKeyboardFocusGrid", @#GetKeyboardFocusGrid)
XgrRegisterMessage (@"GetKidArray", @#GetKidArray)
XgrRegisterMessage (@"GetKidNumber", @#GetKidNumber)
XgrRegisterMessage (@"GetKids", @#GetKids)
XgrRegisterMessage (@"GetKind", @#GetKind)
XgrRegisterMessage (@"GetMaxMinSize", @#GetMaxMinSize)
XgrRegisterMessage (@"GetMessageFunc", @#GetMessageFunc)
XgrRegisterMessage (@"GetMessageFuncArray", @#GetMessageFuncArray)
XgrRegisterMessage (@"GetMessageSub", @#GetMessageSub)
XgrRegisterMessage (@"GetMessageSubArray", @#GetMessageSubArray)
XgrRegisterMessage (@"GetModalInfo", @#GetModalInfo)
XgrRegisterMessage (@"GetModalWindow", @#GetModalWindow)
XgrRegisterMessage (@"GetParent", @#GetParent)
XgrRegisterMessage (@"GetPosition", @#GetPosition)
XgrRegisterMessage (@"GetProtoInfo", @#GetProtoInfo)
XgrRegisterMessage (@"GetRedrawFlags", @#GetRedrawFlags)
XgrRegisterMessage (@"GetSize", @#GetSize)
XgrRegisterMessage (@"GetSmallestSize", @#GetSmallestSize)
XgrRegisterMessage (@"GetState", @#GetState)
XgrRegisterMessage (@"GetStyle", @#GetStyle)
XgrRegisterMessage (@"GetTabArray", @#GetTabArray)
XgrRegisterMessage (@"GetTabWidth", @#GetTabWidth)
XgrRegisterMessage (@"GetTextArray", @#GetTextArray)
XgrRegisterMessage (@"GetTextArrayBounds", @#GetTextArrayBounds)
XgrRegisterMessage (@"GetTextArrayLine", @#GetTextArrayLine)
XgrRegisterMessage (@"GetTextArrayLines", @#GetTextArrayLines)
XgrRegisterMessage (@"GetTextCursor", @#GetTextCursor)
XgrRegisterMessage (@"GetTextFilename", @#GetTextFilename)
XgrRegisterMessage (@"GetTextPosition", @#GetTextPosition)
XgrRegisterMessage (@"GetTextSelection", @#GetTextSelection)
XgrRegisterMessage (@"GetTextSpacing", @#GetTextSpacing)
XgrRegisterMessage (@"GetTextString", @#GetTextString)
XgrRegisterMessage (@"GetTextStrings", @#GetTextStrings)
XgrRegisterMessage (@"GetTexture", @#GetTexture)
XgrRegisterMessage (@"GetTimer", @#GetTimer)
XgrRegisterMessage (@"GetValue", @#GetValue)
XgrRegisterMessage (@"GetValueArray", @#GetValueArray)
XgrRegisterMessage (@"GetValues", @#GetValues)
XgrRegisterMessage (@"GetWindow", @#GetWindow)
XgrRegisterMessage (@"GetWindowFunction", @#GetWindowFunction)
XgrRegisterMessage (@"GetWindowGrid", @#GetWindowGrid)
XgrRegisterMessage (@"GetWindowIcon", @#GetWindowIcon)
XgrRegisterMessage (@"GetWindowSize", @#GetWindowSize)
XgrRegisterMessage (@"GetWindowTitle", @#GetWindowTitle)
XgrRegisterMessage (@"GotKeyboardFocus", @#GotKeyboardFocus)
XgrRegisterMessage (@"GrabArray", @#GrabArray)
XgrRegisterMessage (@"GrabTextArray", @#GrabTextArray)
XgrRegisterMessage (@"GrabTextString", @#GrabTextString)
XgrRegisterMessage (@"GrabValueArray", @#GrabValueArray)
XgrRegisterMessage (@"Help", @#Help)
XgrRegisterMessage (@"Hidden", @#Hidden)
XgrRegisterMessage (@"HideTextCursor", @#HideTextCursor)
XgrRegisterMessage (@"HideWindow", @#HideWindow)
XgrRegisterMessage (@"Initialize", @#Initialize)
XgrRegisterMessage (@"Initialized", @#Initialized)
XgrRegisterMessage (@"Inline", @#Inline)
XgrRegisterMessage (@"InquireText", @#InquireText)
XgrRegisterMessage (@"KeyboardFocusBackward", @#KeyboardFocusBackward)
XgrRegisterMessage (@"KeyboardFocusForward", @#KeyboardFocusForward)
XgrRegisterMessage (@"KeyDown", @#KeyDown)
XgrRegisterMessage (@"KeyUp", @#KeyUp)
XgrRegisterMessage (@"LostKeyboardFocus", @#LostKeyboardFocus)
XgrRegisterMessage (@"LostTextSelection", @#LostTextSelection)
XgrRegisterMessage (@"Maximized", @#Maximized)
XgrRegisterMessage (@"MaximizeWindow", @#MaximizeWindow)
XgrRegisterMessage (@"Maximum", @#Maximum)
XgrRegisterMessage (@"Minimized", @#Minimized)
XgrRegisterMessage (@"MinimizeWindow", @#MinimizeWindow)
XgrRegisterMessage (@"Minimum", @#Minimum)
XgrRegisterMessage (@"MonitorContext", @#MonitorContext)
XgrRegisterMessage (@"MonitorHelp", @#MonitorHelp)
XgrRegisterMessage (@"MonitorKeyboard", @#MonitorKeyboard)
XgrRegisterMessage (@"MonitorMouse", @#MonitorMouse)
XgrRegisterMessage (@"MouseDown", @#MouseDown)
XgrRegisterMessage (@"MouseDrag", @#MouseDrag)
XgrRegisterMessage (@"MouseEnter", @#MouseEnter)
XgrRegisterMessage (@"MouseExit", @#MouseExit)
XgrRegisterMessage (@"MouseMove", @#MouseMove)
XgrRegisterMessage (@"MouseUp", @#MouseUp)
XgrRegisterMessage (@"MuchLess", @#MuchLess)
XgrRegisterMessage (@"MuchMore", @#MuchMore)
XgrRegisterMessage (@"Notify", @#Notify)
XgrRegisterMessage (@"OneLess", @#OneLess)
XgrRegisterMessage (@"OneMore", @#OneMore)
XgrRegisterMessage (@"PokeArray", @#PokeArray)
XgrRegisterMessage (@"PokeTextArray", @#PokeTextArray)
XgrRegisterMessage (@"PokeTextString", @#PokeTextString)
XgrRegisterMessage (@"PokeValueArray", @#PokeValueArray)
XgrRegisterMessage (@"Print", @#Print)
XgrRegisterMessage (@"Redraw", @#Redraw)
XgrRegisterMessage (@"RedrawGrid", @#RedrawGrid)
XgrRegisterMessage (@"RedrawLines", @#RedrawLines)
XgrRegisterMessage (@"RedrawText", @#RedrawText)
XgrRegisterMessage (@"RedrawWindow", @#RedrawWindow)
XgrRegisterMessage (@"Replace", @#Replace)
XgrRegisterMessage (@"ReplaceForward", @#ReplaceForward)
XgrRegisterMessage (@"ReplaceReverse", @#ReplaceReverse)
XgrRegisterMessage (@"Reset", @#Reset)
XgrRegisterMessage (@"Resize", @#Resize)
XgrRegisterMessage (@"Resized", @#Resized)
XgrRegisterMessage (@"ResizeNot", @#ResizeNot)
XgrRegisterMessage (@"ResizeWindow", @#ResizeWindow)
XgrRegisterMessage (@"ResizeWindowToGrid", @#ResizeWindowToGrid)
XgrRegisterMessage (@"Resized", @#Resized)
XgrRegisterMessage (@"Reverse", @#Reverse)
XgrRegisterMessage (@"ScrollH", @#ScrollH)
XgrRegisterMessage (@"ScrollV", @#ScrollV)
XgrRegisterMessage (@"Select", @#Select)
XgrRegisterMessage (@"Selected", @#Selected)
XgrRegisterMessage (@"Selection", @#Selection)
XgrRegisterMessage (@"SelectWindow", @#SelectWindow)
XgrRegisterMessage (@"SetAlign", @#SetAlign)
XgrRegisterMessage (@"SetBorder", @#SetBorder)
XgrRegisterMessage (@"SetBorderOffset", @#SetBorderOffset)
XgrRegisterMessage (@"SetCallback", @#SetCallback)
XgrRegisterMessage (@"SetCan", @#SetCan)
XgrRegisterMessage (@"SetCharacterMapArray", @#SetCharacterMapArray)
XgrRegisterMessage (@"SetCharacterMapEntry", @#SetCharacterMapEntry)
XgrRegisterMessage (@"SetClipGrid", @#SetClipGrid)
XgrRegisterMessage (@"SetColor", @#SetColor)
XgrRegisterMessage (@"SetColorAll", @#SetColorAll)
XgrRegisterMessage (@"SetColorExtra", @#SetColorExtra)
XgrRegisterMessage (@"SetColorExtraAll", @#SetColorExtraAll)
XgrRegisterMessage (@"SetCursor", @#SetCursor)
XgrRegisterMessage (@"SetCursorXY", @#SetCursorXY)
XgrRegisterMessage (@"SetDisplay", @#SetDisplay)
XgrRegisterMessage (@"SetFocusColor", @#SetFocusColor)
XgrRegisterMessage (@"SetFocusColorExtra", @#SetFocusColorExtra)
XgrRegisterMessage (@"SetFont", @#SetFont)
XgrRegisterMessage (@"SetFontNumber", @#SetFontNumber)
XgrRegisterMessage (@"SetGridFunction", @#SetGridFunction)
XgrRegisterMessage (@"SetGridFunctionName", @#SetGridFunctionName)
XgrRegisterMessage (@"SetGridName", @#SetGridName)
XgrRegisterMessage (@"SetGridProperties", @#SetGridProperties)
XgrRegisterMessage (@"SetGridType", @#SetGridType)
XgrRegisterMessage (@"SetGridTypeName", @#SetGridTypeName)
XgrRegisterMessage (@"SetGroup", @#SetGroup)
XgrRegisterMessage (@"SetHelp", @#SetHelp)
XgrRegisterMessage (@"SetHelpFile", @#SetHelpFile)
XgrRegisterMessage (@"SetHelpString", @#SetHelpString)
XgrRegisterMessage (@"SetHelpStrings", @#SetHelpStrings)
XgrRegisterMessage (@"SetHintString", @#SetHintString)
XgrRegisterMessage (@"SetImage", @#SetImage)
XgrRegisterMessage (@"SetImageCoords", @#SetImageCoords)
XgrRegisterMessage (@"SetIndent", @#SetIndent)
XgrRegisterMessage (@"SetInfo", @#SetInfo)
XgrRegisterMessage (@"SetJustify", @#SetJustify)
XgrRegisterMessage (@"SetKeyboardFocus", @#SetKeyboardFocus)
XgrRegisterMessage (@"SetKeyboardFocusGrid", @#SetKeyboardFocusGrid)
XgrRegisterMessage (@"SetMaxMinSize", @#SetMaxMinSize)
XgrRegisterMessage (@"SetMessageFunc", @#SetMessageFunc)
XgrRegisterMessage (@"SetMessageFuncArray", @#SetMessageFuncArray)
XgrRegisterMessage (@"SetMessageSub", @#SetMessageSub)
XgrRegisterMessage (@"SetMessageSubArray", @#SetMessageSubArray)
XgrRegisterMessage (@"SetModalWindow", @#SetModalWindow)
XgrRegisterMessage (@"SetParent", @#SetParent)
XgrRegisterMessage (@"SetPosition", @#SetPosition)
XgrRegisterMessage (@"SetRedrawFlags", @#SetRedrawFlags)
XgrRegisterMessage (@"SetSize", @#SetSize)
XgrRegisterMessage (@"SetState", @#SetState)
XgrRegisterMessage (@"SetStyle", @#SetStyle)
XgrRegisterMessage (@"SetTabArray", @#SetTabArray)
XgrRegisterMessage (@"SetTabWidth", @#SetTabWidth)
XgrRegisterMessage (@"SetTextArray", @#SetTextArray)
XgrRegisterMessage (@"SetTextArrayLine", @#SetTextArrayLine)
XgrRegisterMessage (@"SetTextArrayLines", @#SetTextArrayLines)
XgrRegisterMessage (@"SetTextCursor", @#SetTextCursor)
XgrRegisterMessage (@"SetTextFilename", @#SetTextFilename)
XgrRegisterMessage (@"SetTextSelection", @#SetTextSelection)
XgrRegisterMessage (@"SetTextSpacing", @#SetTextSpacing)
XgrRegisterMessage (@"SetTextString", @#SetTextString)
XgrRegisterMessage (@"SetTextStrings", @#SetTextStrings)
XgrRegisterMessage (@"SetTexture", @#SetTexture)
XgrRegisterMessage (@"SetTimer", @#SetTimer)
XgrRegisterMessage (@"SetValue", @#SetValue)
XgrRegisterMessage (@"SetValues", @#SetValues)
XgrRegisterMessage (@"SetValueArray", @#SetValueArray)
XgrRegisterMessage (@"SetWindowFunction", @#SetWindowFunction)
XgrRegisterMessage (@"SetWindowIcon", @#SetWindowIcon)
XgrRegisterMessage (@"SetWindowTitle", @#SetWindowTitle)
XgrRegisterMessage (@"ShowTextCursor", @#ShowTextCursor)
XgrRegisterMessage (@"ShowWindow", @#ShowWindow)
XgrRegisterMessage (@"SomeLess", @#SomeLess)
XgrRegisterMessage (@"SomeMore", @#SomeMore)
XgrRegisterMessage (@"StartTimer", @#StartTimer)
XgrRegisterMessage (@"SystemMessage", @#SystemMessage)
XgrRegisterMessage (@"TextDelete", @#TextDelete)
XgrRegisterMessage (@"TextEvent", @#TextEvent)
XgrRegisterMessage (@"TextInsert", @#TextInsert)
XgrRegisterMessage (@"TextModified", @#TextModified)
XgrRegisterMessage (@"TextReplace", @#TextReplace)
XgrRegisterMessage (@"TimeOut", @#TimeOut)
XgrRegisterMessage (@"Update", @#Update)
XgrRegisterMessage (@"WindowClose", @#WindowClose)
XgrRegisterMessage (@"WindowCreate", @#WindowCreate)
XgrRegisterMessage (@"WindowDeselected", @#WindowDeselected)
XgrRegisterMessage (@"WindowDestroy", @#WindowDestroy)
XgrRegisterMessage (@"WindowDestroyed", @#WindowDestroyed)
XgrRegisterMessage (@"WindowDisplay", @#WindowDisplay)
XgrRegisterMessage (@"WindowDisplayed", @#WindowDisplayed)
XgrRegisterMessage (@"WindowGetDisplay", @#WindowGetDisplay)
XgrRegisterMessage (@"WindowGetFunction", @#WindowGetFunction)
XgrRegisterMessage (@"WindowGetIcon", @#WindowGetIcon)
XgrRegisterMessage (@"WindowGetKeyboardFocusGrid", @#WindowGetKeyboardFocusGrid)
XgrRegisterMessage (@"WindowGetSelectedWindow", @#WindowGetSelectedWindow)
XgrRegisterMessage (@"WindowGetSize", @#WindowGetSize)
XgrRegisterMessage (@"WindowGetTitle", @#WindowGetTitle)
XgrRegisterMessage (@"WindowHelp", @#WindowHelp)
XgrRegisterMessage (@"WindowHide", @#WindowHide)
XgrRegisterMessage (@"WindowHidden", @#WindowHidden)
XgrRegisterMessage (@"WindowKeyDown", @#WindowKeyDown)
XgrRegisterMessage (@"WindowKeyUp", @#WindowKeyUp)
XgrRegisterMessage (@"WindowMaximize", @#WindowMaximize)
XgrRegisterMessage (@"WindowMaximized", @#WindowMaximized)
XgrRegisterMessage (@"WindowMinimize", @#WindowMinimize)
XgrRegisterMessage (@"WindowMinimized", @#WindowMinimized)
XgrRegisterMessage (@"WindowMonitorContext", @#WindowMonitorContext)
XgrRegisterMessage (@"WindowMonitorHelp", @#WindowMonitorHelp)
XgrRegisterMessage (@"WindowMonitorKeyboard", @#WindowMonitorKeyboard)
XgrRegisterMessage (@"WindowMonitorMouse", @#WindowMonitorMouse)
XgrRegisterMessage (@"WindowMouseDown", @#WindowMouseDown)
XgrRegisterMessage (@"WindowMouseDrag", @#WindowMouseDrag)
XgrRegisterMessage (@"WindowMouseEnter", @#WindowMouseEnter)
XgrRegisterMessage (@"WindowMouseExit", @#WindowMouseExit)
XgrRegisterMessage (@"WindowMouseMove", @#WindowMouseMove)
XgrRegisterMessage (@"WindowMouseUp", @#WindowMouseUp)
XgrRegisterMessage (@"WindowRedraw", @#WindowRedraw)
XgrRegisterMessage (@"WindowRegister", @#WindowRegister)
XgrRegisterMessage (@"WindowResize", @#WindowResize)
XgrRegisterMessage (@"WindowResized", @#WindowResized)
XgrRegisterMessage (@"WindowResizeToGrid", @#WindowResizeToGrid)
XgrRegisterMessage (@"WindowSelect", @#WindowSelect)
XgrRegisterMessage (@"WindowSelected", @#WindowSelected)
XgrRegisterMessage (@"WindowSetFunction", @#WindowSetFunction)
XgrRegisterMessage (@"WindowSetIcon", @#WindowSetIcon)
XgrRegisterMessage (@"WindowSetKeyboardFocusGrid", @#WindowSetKeyboardFocusGrid)
XgrRegisterMessage (@"WindowSetTitle", @#WindowSetTitle)
XgrRegisterMessage (@"WindowShow", @#WindowShow)
XgrRegisterMessage (@"WindowSystemMessage", @#WindowSystemMessage)
XgrRegisterMessage (@"LastMessage", @#LastMessage)
'
XgrGetDisplaySize ("", @#displayWidth, @#displayHeight, @#windowBorderWidth, @#windowTitleHeight)
END FUNCTION
'
'
' ############################
' ##### InitProgram () #####
' ############################
'
' Add code to this function to initialize anything your program needs
' to initialize before CreateWindows() creates your programs windows.
' For initialization after CreateWindows(), add code to InitWindows().
'
' Do not delete this function, leave it empty if not needed.
'
FUNCTION InitProgram ()
END FUNCTION
'
'
' ##############################
' ##### CreateWindows () #####
' ##############################
'
' GuiDesigner puts code in CreateWindows() to create, initialize, display
' every window you design graphically. Don't modify this function unless
' absolutely necessary - GuiDesigner needs to read and update it at times.
'
' CreateWindows() usually should not be executed when compiled as library.
' Start CreateWindows() with "IF LIBRARY(0) THEN RETURN" to assure this.
'
FUNCTION CreateWindows ()
'
IF LIBRARY(0) THEN RETURN
'
Spread (@Spread, #CreateWindow, 0, 0, 0, 0, 0, 0)
XuiSendMessage ( Spread, #SetCallback, Spread, &SpreadCode(), -1, -1, -1, 0)
XuiSendMessage ( Spread, #Initialize, 0, 0, 0, 0, 0, 0)
XuiSendMessage ( Spread, #DisplayWindow, 0, 0, 0, 0, 0, 0)
XuiSendMessage ( Spread, #SetGridProperties, -1, 0, 0, 0, 0, 0)
END FUNCTION
'
'
' ############################
' ##### InitWindows () #####
' ############################
'
' Add code to this function to initialize anything your program needs
' to initialize after CreateWindows() creates your programs windows.
' For initialization before CreateWindows(), add code to InitProgram().
'
' Do not delete this function, leave it empty if not needed.
'
FUNCTION InitWindows ()
END FUNCTION
'
'
' #######################
' ##### Spread () #####
' #######################
'
FUNCTION Spread (grid, message, v0, v1, v2, v3, r0, (r1, r1$, r1[], r1$[]))
STATIC designX, designY, designWidth, designHeight
STATIC SUBADDR sub[]
STATIC upperMessage
STATIC Spread
'
$Spread = 0 ' kid 0 grid type = Spread
$Label = 1 ' kid 1 grid type = XuiLabel
$InputText = 2 ' kid 2 grid type = XuiTextLine
$Button_00_00 = 3 ' kid 3 grid type = XuiPressButton
$UpperKid = 3 ' kid maximum
'
'
IFZ sub[] THEN GOSUB Initialize
' XuiReportMessage (grid, message, v0, v1, v2, v3, r0, r1)
IF XuiProcessMessage (grid, message, @v0, @v1, @v2, @v3, @r0, @r1, Spread) THEN RETURN
IF (message <= upperMessage) THEN GOSUB @sub[message]
RETURN
'
'
' ***** Callback ***** message = Callback : r1 = original message
'
SUB Callback
message = r1
callback = message
IF (message <= upperMessage) THEN GOSUB @sub[message]
END SUB
'
'
' ***** Create ***** v0123 = xywh : r0 = window : r1 = parent
'
SUB Create
IF (v0 <= 0) THEN v0 = 0
IF (v1 <= 0) THEN v1 = 0
IF (v2 <= 0) THEN v2 = designWidth
IF (v3 <= 0) THEN v3 = designHeight
XuiCreateGrid (@grid, Spread, @v0, @v1, @v2, @v3, r0, r1, &Spread())
XuiSendMessage ( grid, #SetGridName, 0, 0, 0, 0, 0, @"Spread")
XuiSendMessage ( grid, #SetGridName, 0, 0, 0, 0, 0, @"Spread")
XuiLabel (@g, #Create, 0, 0, 136, 24, r0, grid)
XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Label")
XuiSendMessage ( g, #SetColor, 92, $$Black, $$Black, $$White, 0, 0)
XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"input data ==>>")
XuiTextLine (@g, #Create, 136, 0, 656, 24, r0, grid)
XuiSendMessage ( g, #SetCallback, grid, &Spread(), -1, -1, $InputText, grid)
XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"InputText")
GOSUB Resize
END SUB
'
'
' ***** CreateWindow ***** v0123 = xywh : r0 = windowType : r1$ = display$
'
SUB CreateWindow
IF (v0 = 0) THEN v0 = designX
IF (v1 = 0) THEN v1 = designY
IF (v2 <= 0) THEN v2 = designWidth
IF (v3 <= 0) THEN v3 = designHeight
XuiWindow (@window, #WindowCreate, v0, v1, v2, v3, r0, @r1$)
v0 = 0 : v1 = 0 : r0 = window : ATTACH r1$ TO display$
GOSUB Create
r1 = 0 : ATTACH display$ TO r1$
XuiWindow (window, #WindowRegister, grid, -1, v2, v3, @r0, @"Spread")
END SUB
'
'
' ***** GetSmallestSize ***** See "Anatomy of Grid Functions"
'
SUB GetSmallestSize
'
' Write real code instead of the following cop-out.
' Send #GetSmallestSize messages to all button-kids
' to find the longest minimum button-width, then
' assume all button widths must be that width.
'
XuiSendMessage (grid, #GetBorder, 0, 0, 0, 0, 0, @bw)
XuiSendMessage (grid, #GetSmallestSize, @lx, @ly, @lw, @lh, $Label, 0)
XuiSendMessage (grid, #GetSmallestSize, @tx, @ty, @tw, @th, $InputText, 0)
'
minButtonWidth = 8
minButtonHeight = 8
'
FOR b = 0 TO 1599
kkk = b + 3
XuiSendMessage (grid, #GetSmallestSize, 0, 0, @ww, @hh, kkk, 0)
IF (hh > minButtonHeight) THEN minButtonHeight = hh
IF (ww > minButtonWidth) THEN minButtonWidth = ww
NEXT b
'
' minButtonWidth = 20 ' computed above
' minButtonHeight = 20 ' computed above
'
lw = lw + 8 ' some breathing room
lw = (lw + 4) AND -4 ' found width to MOD 4
lh = (lh + 4) AND -4 ' round height to MOD 4
th = (th + 4) AND -4 ' round height to MOD 4
'
IF (lh < 20) THEN lh = 20 ' set minimum height for label and text
IF (th < lh) THEN th = lh '
lh = th ' label-height must equal text-height
'
v2 = (minButtonWidth * 40) + bw + bw
v3 = (minButtonHeight * 40) + bw + bw + th
END SUB
'
'
' ***** Resize *****
'
' The first time the following routine is entered,
' the 40x40 array of XuiPressButton grids is created.
' All the buttons are created on top of each other in
' the same location, but that doesn't matter because
' the rest of the Resize subroutine places and sizes
' them appropriately.
'
SUB Resize
XuiSendMessage (grid, #GetSize, @xxx, @yyy, @www, @hhh, 0, 0)
'
' create a 40x40 array of buttons grids if they do not already exist
'
XuiGetKidArray (grid, #GetKidArray, 0, 0, 0, 0, 0, @kid[])
upper = UBOUND (kid[])
'
IF (upper < 40) THEN
font = 0
' IFZ font THEN XgrCreateFont (@font, @"Tw Cen MT", 160, 400, 0, 0) ' fits on 800x600
' IFZ font THEN XgrCreateFont (@font, @"Tw Cen MT", 240, 400, 0, 0)
' IFZ font THEN XgrCreateFont (@font, @"Comic Sans MS", 200, 400, 0, 0)
' IFZ font THEN XgrCreateFont (@font, @"MS San Serif", 200, 400, 0, 0)
' IFZ font THEN XgrCreateFont (@font, @"Tw Cen MT", 280, 400, 0, 0)
' IFZ font THEN XgrCreateFont (@font, @"Verdana", 200, 400, 0, 0)
IFZ font THEN XgrCreateFont (@font, @"Arial", 240, 400, 0, 0)
IFZ font THEN XgrCreateFont (@font, @"Arial", 200, 400, 0, 0)
IFZ font THEN XgrCreateFont (@font, @"helv", 240, 400, 0, 0)
'
kkk = $Button_00_00
'
FOR y = 0 TO 39
y$ = RIGHT$("0"+STRING$(y),2)
FOR x = 0 TO 39
x$ = RIGHT$("0"+STRING$(x),2)
text$ = x$
' text$ = x$ + "," + y$
text$ = CHR$ (((y*40+x) MOD 26) + 'a')
name$ = "Button_" + x$ + "_" + y$
XuiPressButton (@g, #Create, 0, 24, 24, 24, r0, grid)
XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @name$)
XuiSendMessage ( g, #GetKidNumber, @kid, 0, 0, 0, 0, 0)
XuiSendMessage ( g, #SetTextSpacing, 0, -4, 0, 0, 0, 0)
XuiSendMessage ( g, #SetFontNumber, font, 0, 0, 0, 0, 0)
XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @text$)
XuiSendMessage ( g, #SetTexture, $$TextureNone, 0, 0, 0, 0, 0)
XuiSendMessage ( g, #SetCallback, grid, &Spread(), -1, -1, kid, grid)
XuiSendMessage ( g, #SetColor, $$BrightSteel, $$Black, $$Black, $$White, 0, 0)
IF ((x == 0) AND (y == 0)) THEN firstkid = kid
' IFZ ((kid-3) MOD 16) THEN PRINT
' PRINT kid; kkk
INC kkk
NEXT x
NEXT y
XuiSendMessage (grid, #SetValue, firstkid, 0, 0, 0, 0, 0)
END IF
'
' make sure all the buttons are there
'
firstkid = 0
XuiGetKidArray (grid, #GetKidArray, 0, 0, 0, 0, 0, @kid[])
XuiSendMessage (grid, #GetValue, @firstkid, 0, 0, 0, 0, 0)
'
upper = UBOUND (kid[])
IFZ firstkid THEN PRINT "xxxxx" : EXIT SUB ' disaster
IF (upper < 1600) THEN PRINT "yyyyy" : EXIT SUB ' disaster
'
' don't resize below smallest acceptable size
' note: GetSmallestSize sets some variables we compute with below
'
vv2 = v2
vv3 = v3
GOSUB GetSmallestSize
IF (vv2 > v2) THEN v2 = vv2
IF (vv3 > v3) THEN v3 = vv3
'
' resize grid and all its kids
'
buttonWidth = (v2-bw-bw) \ 40
buttonHeight = (v3-th-bw-bw) \ 40
'
vv2 = (buttonWidth * 40) + bw + bw
vv3 = (buttonHeight * 40) + bw + bw + th
'
padwidth = v2 - vv2
padheight = v3 - vv3
'
' position main grid first
'
XuiPositionGrid (grid, @v0, @v1, @v2, @v3)
'
' position label-grid and text-input grid
'
tx = bw + lw
tw = v2 - bw - bw - lw
XuiSendToKid (grid, #Resize, bw, bw, lw, lh, $Label, 0)
XuiSendToKid (grid, #Resize, tx, bw, tw, th, $InputText, 0)
'
' position and size the 40x40 array of kid grids
'
kid = firstkid
FOR y = 0 TO 39
gy = (buttonHeight * y) + bw + th
FOR x = 0 TO 39
gx = (buttonWidth * x) + bw
width = buttonWidth
height = buttonHeight
IF (x == 39) THEN width = width + padwidth
IF (y == 39) THEN height = height + padheight
XuiSendToKid (grid, #Resize, gx, gy, width, height, kid, 0)
' IFZ ((kid-3) MOD 16) THEN PRINT
' PRINT kid;
INC kid
NEXT x
NEXT y
'
XuiResizeWindowToGrid (grid, #ResizeWindowToGrid, v0, v1, v2, v3, 0, 0)
END SUB
'
'
' ***** Selection ***** See "Anatomy of Grid Functions"
'
SUB Selection
END SUB
'
'
' ***** Initialize ***** ' see "Anatomy of Grid Functions"
'
SUB Initialize
XuiGetDefaultMessageFuncArray (@func[])
XgrMessageNameToNumber (@"LastMessage", @upperMessage)
'
func[#Callback] = &XuiCallback () ' disable to handle Callback messages internally
' func[#GetSmallestSize] = 0 ' enable to add internal GetSmallestSize routine
func[#Resize] = 0 ' enable to add internal Resize routine
'
DIM sub[upperMessage]
' sub[#Callback] = SUBADDRESS (Callback) ' enable to handle Callback messages internally
sub[#Create] = SUBADDRESS (Create) ' must be internal routine
sub[#CreateWindow] = SUBADDRESS (CreateWindow) ' must be internal routine
' sub[#GetSmallestSize] = SUBADDRESS (GetSmallestSize) ' enable to add internal GetSmallestSize routine
sub[#Resize] = SUBADDRESS (Resize) ' enable to add internal Resize routine
' sub[#Selection] = SUBADDRESS (Selection) ' routes Selection callbacks to subroutine
'
IF sub[0] THEN PRINT "Spread() : Initialize : error ::: (undefined message)"
IF func[0] THEN PRINT "Spread() : Initialize : error ::: (undefined message)"
XuiRegisterGridType (@Spread, "Spread", &Spread(), @func[], @sub[])
'
' Don't remove the following 4 lines, or WindowFromFunction/WindowToFunction will not work
'
designX = 4
designY = 23
designWidth = 256
designHeight = 256
'
gridType = Spread
XuiSetGridTypeProperty (gridType, @"x", designX)
XuiSetGridTypeProperty (gridType, @"y", designY)
XuiSetGridTypeProperty (gridType, @"width", designWidth)
XuiSetGridTypeProperty (gridType, @"height", designHeight)
' XuiSetGridTypeProperty (gridType, @"maxWidth", designWidth)
' XuiSetGridTypeProperty (gridType, @"maxHeight", designHeight)
' XuiSetGridTypeProperty (gridType, @"minWidth", designWidth)
' XuiSetGridTypeProperty (gridType, @"minHeight", designHeight)
XuiSetGridTypeProperty (gridType, @"can", $$Focus OR $$Respond OR $$Callback OR $$TextSelection)
XuiSetGridTypeProperty (gridType, @"focusKid", $InputText)
XuiSetGridTypeProperty (gridType, @"inputTextString", $InputText)
IFZ message THEN RETURN
END SUB
END FUNCTION
'
'
' ###########################
' ##### SpreadCode () #####
' ###########################
'
FUNCTION SpreadCode (grid, message, v0, v1, v2, v3, kid, r1)
STATIC selected
STATIC input$
'
$Spread = 0 ' kid 0 grid type = Spread
$Label = 1 ' kid 1 grid type = XuiLabel
$InputText = 2 ' kid 2 grid type = XuiTextLine
$Button_00_00 = 3 ' kid 3 grid type = XuiPressButton
$UpperKid = 3 ' kid maximum (except THIS specialty program has 1599 more)
'
' XuiReportMessage (grid, message, v0, v1, v2, v3, kid, r1)
IF (message = #Callback) THEN message = r1
'
SELECT CASE message
CASE #CloseWindow : QUIT (0)
CASE #Selection : GOSUB Selection ' Common callback message
CASE #TextEvent : GOSUB TextEvent ' KeyDown in TextArea or TextLine
END SELECT
RETURN
'
'
' ***** Selection *****
'
SUB Selection
SELECT CASE kid
CASE $Spread :
CASE $Label :
CASE $InputText : XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, kid, @input$)
PRINT "input text = \""; input$; "\""
character$ = LEFT$ (input$, 1)
IFZ character$ THEN character$ = "#"
IF selected THEN
XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, selected, @character$)
XuiSendMessage (grid, #Redraw, 0, 0, 0, 0, selected, 0)
END IF
CASE ELSE : y = (kid-3) \ 40
x = (kid-3) MOD 40
PRINT "callback from "; RIGHT$("0"+STRING$(x),2); ","; RIGHT$("0"+STRING$(y),2)
'
' change background color of previously selected grid back to normal
' then change background color of newly selected grid to special color
'
IF selected THEN
XuiSendMessage (grid, #SetColor, $$BrightSteel, -1, -1, -1, selected, 0)
XuiSendMessage (grid, #Redraw, 0, 0, 0, 0, selected, 0)
END IF
XuiSendMessage (grid, #SetColor, 112, -1, -1, -1, kid, 0)
XuiSendMessage (grid, #Redraw, 0, 0, 0, 0, kid, 0)
selected = kid
END SELECT
END SUB
'
'
' ***** TextEvent *****
'
SUB TextEvent
IF (kid == $InputText) THEN
SELECT CASE v2
CASE 0x1B10001B : IF selected THEN XuiSendMessage (grid, #SetKeyboardFocus, 0, 0, 0, 0, selected, 0)
END SELECT
EXIT SUB
END IF
'
move = $$FALSE
y = (selected-3) \ 40
x = (selected-3) MOD 40
'
SELECT CASE v2
CASE 0x1B10001B : XuiSendMessage (grid, #SetKeyboardFocus, 0, 0, 0, 0, $InputText, 0)
CASE 0x28000028 : IF (y != 39) THEN INC y ELSE y = 0 : INC x
IF (x > 39) THEN x = 0
move = $$TRUE
CASE 0x26000026 : IF (y != 0) THEN DEC y ELSE y = 39 : DEC x
IF (x < 0) THEN x = 39
move = $$TRUE
CASE 0x27000027 : IF (x != 39) THEN INC x ELSE x = 0 : INC y
IF (y > 39) THEN y = 0
move = $$TRUE
CASE 0x25000025 : IF (x != 0) THEN DEC x ELSE x = 39 : DEC y
IF (y < 0) THEN y = 39
move = $$TRUE
END SELECT
'
IF move THEN
IF (selected > 2) THEN
XuiSendMessage (grid, #SetColor, $$BrightSteel, -1, -1, -1, selected, 0)
XuiSendMessage (grid, #Redraw, 0, 0, 0, 0, selected, 0)
END IF
selected = (y * 40) + x + 3
XuiSendMessage (grid, #SetKeyboardFocus, 0, 0, 0, 0, selected, 0)
XuiSendMessage (grid, #SetColor, 112, -1, -1, -1, selected, 0)
XuiSendMessage (grid, #Redraw, 0, 0, 0, 0, selected, 0)
END IF
END SUB
END FUNCTION
END PROGRAM