home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 August / PCWorld_2000-08_cd.bin / Software / TemaCD / xbasic / xbpro.exe / xb / adata.x < prev    next >
Text File  |  1996-01-19  |  60KB  |  1,267 lines

  1. '
  2. ' ####################
  3. ' #####  PROLOG  #####
  4. ' ####################
  5. '
  6. PROGRAM    "adata"
  7. VERSION    "0.0000"
  8. '
  9. IMPORT    "xst"
  10. IMPORT    "xgr"
  11. IMPORT    "xui"
  12. '
  13. ' This is a short program that show ways to accomplish certain
  14. ' basic data entry techniques.  Most of this program was created
  15. ' from a blank slate by "File New GuiProgram" aka ".fn g".
  16. '
  17. ' First the simple "Employee" window was layed with components
  18. ' from the GuiDesigner toolkit.  Then "Window ToFunction" in the
  19. ' GuiDesigner toolkit menu created Employee() and EmployeeCode()
  20. ' functions and added them to this program.  Except for the EMPLOYEE
  21. ' type declaration below, the only programmer written code is some
  22. ' simple data diddling code in EmployeeCode().
  23. '
  24. ' All type declarations belong before the first function declaraction,
  25. ' so the EMPLOYEE type declaration is right below these comments.
  26. ' See EmployeeCode() for some sample code and more comments.
  27. '
  28. ' Before you can do much with this program, run it and enter two or
  29. ' three fairly complete sets of "employee" information in the window
  30. ' that appears and press "Save Employee" when you are done each.
  31. ' Once you have saved two or three employee entries, you can try
  32. ' out the "Load Employee" capability - enter the first/middle/last
  33. ' names in the appropriate places in the window, then select the
  34. ' "Load Employee" button.  The data for the employee should appear
  35. ' in the window.  If that works, just for fun, enter a correct
  36. ' first and last name, but an incorrect middle name and try again.
  37. '
  38. ' More notes about this program are in the EmployeeCode() function.
  39. '
  40. '
  41. TYPE EMPLOYEE
  42.     STRING*32            .firstName
  43.     STRING*32            .middleName
  44.   STRING*32            .lastName
  45.     STRING*32            .address1
  46.     STRING*32            .address2
  47.     STRING*32            .city
  48.     STRING*32            .state
  49.     STRING*32            .zip
  50.     STRING*32            .phone
  51.     STRING*32            .fax
  52.     STRING*32            .email
  53.     STRING*32            .web
  54.     STRING*32            .ssn
  55.     STRING*32            .expertise1
  56.     STRING*32            .expertise2
  57.     STRING*32            .expertise3
  58.     STRING*512        .comments
  59. END TYPE
  60. '
  61. INTERNAL FUNCTION  Entry         ()
  62. INTERNAL FUNCTION  InitGui       ()
  63. INTERNAL FUNCTION  InitProgram   ()
  64. INTERNAL FUNCTION  CreateWindows ()
  65. INTERNAL FUNCTION  InitWindows   ()
  66. INTERNAL FUNCTION  Employee      (grid, message, v0, v1, v2, v3, r0, ANY)
  67. INTERNAL FUNCTION  EmployeeCode  (grid, message, v0, v1, v2, v3, kid, ANY)
  68. '
  69. '
  70. ' ######################
  71. ' #####  Entry ()  #####
  72. ' ######################
  73. '
  74. FUNCTION  Entry ()
  75.     SHARED  terminateProgram
  76.     STATIC    entry
  77. '
  78.     IF entry THEN RETURN                    ' enter once
  79.     entry =  $$TRUE                                ' enter occured
  80. '
  81.     InitGui ()                                        ' initialize messages
  82.     InitProgram ()                                ' initialize this program
  83.     CreateWindows ()                            ' create main window and others
  84.     InitWindows ()                                ' initialize windows and grids
  85. '
  86.     IF LIBRARY(0) THEN RETURN            ' main program executes message loop
  87. '
  88.     DO                                                        ' the message loop
  89.         XgrProcessMessages (1)            ' process one message
  90.     LOOP UNTIL terminateProgram        ' and repeat until program is terminated
  91. END FUNCTION
  92. '
  93. '
  94. ' ########################
  95. ' #####  InitGui ()  #####
  96. ' ########################
  97. '
  98. FUNCTION  InitGui ()
  99. '
  100. ' ***************************************
  101. ' *****  Register Standard Cursors  *****
  102. ' ***************************************
  103. '
  104.     XgrRegisterCursor (@"default",      @#cursorDefault)
  105.     XgrRegisterCursor (@"arrow",        @#cursorArrow)
  106.     XgrRegisterCursor (@"n",            @#cursorN)
  107.     XgrRegisterCursor (@"s",            @#cursorS)
  108.     XgrRegisterCursor (@"e",            @#cursorE)
  109.     XgrRegisterCursor (@"w",            @#cursorW)
  110.     XgrRegisterCursor (@"ns",           @#cursorArrowsNS)
  111.     XgrRegisterCursor (@"ns",           @#cursorArrowsSN)
  112.     XgrRegisterCursor (@"ew",           @#cursorArrowsEW)
  113.     XgrRegisterCursor (@"ew",           @#cursorArrowsWE)
  114.     XgrRegisterCursor (@"nwse",         @#cursorArrowsNWSE)
  115.     XgrRegisterCursor (@"nesw",         @#cursorArrowsNESW)
  116.     XgrRegisterCursor (@"all",          @#cursorArrowsAll)
  117.     XgrRegisterCursor (@"plus",         @#cursorPlus)
  118.     XgrRegisterCursor (@"wait",         @#cursorWait)
  119.     XgrRegisterCursor (@"insert",       @#cursorInsert)
  120.     XgrRegisterCursor (@"crosshair",    @#cursorCrosshair)
  121.     XgrRegisterCursor (@"hourglass",    @#cursorHourglass)
  122. '
  123.     #defaultCursor = #cursorDefault
  124. '
  125. '
  126. ' ********************************************
  127. ' *****  Register Standard Window Icons  *****
  128. ' ********************************************
  129. '
  130.     XgrRegisterIcon (@"hand",                    @#iconHand)
  131.     XgrRegisterIcon (@"asterisk",            @#iconAsterisk)
  132.     XgrRegisterIcon (@"question",            @#iconQuestion)
  133.     XgrRegisterIcon (@"exclamation",    @#iconExclamation)
  134.     XgrRegisterIcon (@"application",    @#iconApplication)
  135. '
  136.     XgrRegisterIcon (@"hand",                    @#iconStop)                        ' alias
  137.     XgrRegisterIcon (@"asterisk",            @#iconInformation)        ' alias
  138.     XgrRegisterIcon (@"application",  @#iconBlank)                    ' alias
  139. '
  140.     XgrRegisterIcon (@"window",                @#iconWindow)                    ' custom
  141. '
  142. '
  143. ' ******************************
  144. ' *****  Register Messages *****  Create message numbers for message names
  145. ' ******************************
  146. '
  147.     XgrRegisterMessage (@"Blowback",                                        @#Blowback)
  148.     XgrRegisterMessage (@"Callback",                                        @#Callback)
  149.     XgrRegisterMessage (@"Cancel",                                            @#Cancel)
  150.     XgrRegisterMessage (@"Change",                                            @#Change)
  151.     XgrRegisterMessage (@"CloseWindow",                                    @#CloseWindow)
  152.     XgrRegisterMessage (@"ContextChange",                                @#ContextChange)
  153.     XgrRegisterMessage (@"Create",                                            @#Create)
  154.     XgrRegisterMessage (@"CreateValueArray",                        @#CreateValueArray)
  155.     XgrRegisterMessage (@"CreateWindow",                                @#CreateWindow)
  156.     XgrRegisterMessage (@"CursorH",                                            @#CursorH)
  157.     XgrRegisterMessage (@"CursorV",                                            @#CursorV)
  158.     XgrRegisterMessage (@"Deselected",                                    @#Deselected)
  159.     XgrRegisterMessage (@"Destroy",                                            @#Destroy)
  160.     XgrRegisterMessage (@"Destroyed",                                        @#Destroyed)
  161.     XgrRegisterMessage (@"DestroyWindow",                                @#DestroyWindow)
  162.     XgrRegisterMessage (@"Disable",                                            @#Disable)
  163.     XgrRegisterMessage (@"Disabled",                                        @#Disabled)
  164.     XgrRegisterMessage (@"Displayed",                                        @#Displayed)
  165.     XgrRegisterMessage (@"DisplayWindow",                                @#DisplayWindow)
  166.     XgrRegisterMessage (@"Enable",                                            @#Enable)
  167.     XgrRegisterMessage (@"Enabled",                                            @#Enabled)
  168.     XgrRegisterMessage (@"Enter",                                                @#Enter)
  169.     XgrRegisterMessage (@"ExitMessageLoop",                            @#ExitMessageLoop)
  170.     XgrRegisterMessage (@"Find",                                                @#Find)
  171.     XgrRegisterMessage (@"FindForward",                                    @#FindForward)
  172.     XgrRegisterMessage (@"FindReverse",                                    @#FindReverse)
  173.     XgrRegisterMessage (@"Forward",                                            @#Forward)
  174.     XgrRegisterMessage (@"GetAlign",                                        @#GetAlign)
  175.     XgrRegisterMessage (@"GetBorder",                                        @#GetBorder)
  176.     XgrRegisterMessage (@"GetBorderOffset",                            @#GetBorderOffset)
  177.     XgrRegisterMessage (@"GetCallback",                                    @#GetCallback)
  178.     XgrRegisterMessage (@"GetCallbackArgs",                            @#GetCallbackArgs)
  179.     XgrRegisterMessage (@"GetCan",                                            @#GetCan)
  180.     XgrRegisterMessage (@"GetCharacterMapArray",                @#GetCharacterMapArray)
  181.     XgrRegisterMessage (@"GetClipGrid",                                    @#GetClipGrid)
  182.     XgrRegisterMessage (@"GetColor",                                        @#GetColor)
  183.     XgrRegisterMessage (@"GetColorExtra",                                @#GetColorExtra)
  184.     XgrRegisterMessage (@"GetCursor",                                        @#GetCursor)
  185.     XgrRegisterMessage (@"GetCursorXY",                                    @#GetCursorXY)
  186.     XgrRegisterMessage (@"GetDisplay",                                    @#GetDisplay)
  187.     XgrRegisterMessage (@"GetEnclosedGrids",                        @#GetEnclosedGrids)
  188.     XgrRegisterMessage (@"GetEnclosingGrid",                        @#GetEnclosingGrid)
  189.     XgrRegisterMessage (@"GetFocusColor",                                @#GetFocusColor)
  190.     XgrRegisterMessage (@"GetFocusColorExtra",                    @#GetFocusColorExtra)
  191.     XgrRegisterMessage (@"GetFont",                                            @#GetFont)
  192.     XgrRegisterMessage (@"GetFontNumber",                                @#GetFontNumber)
  193.     XgrRegisterMessage (@"GetGridFunction",                            @#GetGridFunction)
  194.     XgrRegisterMessage (@"GetGridFunctionName",                    @#GetGridFunctionName)
  195.     XgrRegisterMessage (@"GetGridName",                                    @#GetGridName)
  196.     XgrRegisterMessage (@"GetGridNumber",                                @#GetGridNumber)
  197.     XgrRegisterMessage (@"GetGridType",                                    @#GetGridType)
  198.     XgrRegisterMessage (@"GetGridTypeName",                            @#GetGridTypeName)
  199.     XgrRegisterMessage (@"GetGroup",                                        @#GetGroup)
  200.     XgrRegisterMessage (@"GetHelp",                                            @#GetHelp)
  201.     XgrRegisterMessage (@"GetHelpFile",                                    @#GetHelpFile)
  202.     XgrRegisterMessage (@"GetHelpString",                                @#GetHelpString)
  203.     XgrRegisterMessage (@"GetHelpStrings",                            @#GetHelpStrings)
  204.     XgrRegisterMessage (@"GetHintString",                                @#GetHintString)
  205.     XgrRegisterMessage (@"GetImage",                                        @#GetImage)
  206.     XgrRegisterMessage (@"GetImageCoords",                            @#GetImageCoords)
  207.     XgrRegisterMessage (@"GetIndent",                                        @#GetIndent)
  208.     XgrRegisterMessage (@"GetInfo",                                            @#GetInfo)
  209.     XgrRegisterMessage (@"GetJustify",                                    @#GetJustify)
  210.     XgrRegisterMessage (@"GetKeyboardFocus",                        @#GetKeyboardFocus)
  211.     XgrRegisterMessage (@"GetKeyboardFocusGrid",                @#GetKeyboardFocusGrid)
  212.     XgrRegisterMessage (@"GetKidNumber",                                @#GetKidNumber)
  213.     XgrRegisterMessage (@"GetKids",                                            @#GetKids)
  214.     XgrRegisterMessage (@"GetKidArray",                                    @#GetKidArray)
  215.     XgrRegisterMessage (@"GetKind",                                            @#GetKind)
  216.     XgrRegisterMessage (@"GetMaxMinSize",                                @#GetMaxMinSize)
  217.     XgrRegisterMessage (@"GetMessageFunc",                            @#GetMessageFunc)
  218.     XgrRegisterMessage (@"GetMessageFuncArray",                    @#GetMessageFuncArray)
  219.     XgrRegisterMessage (@"GetMessageSub",                                @#GetMessageSub)
  220.     XgrRegisterMessage (@"GetMessageSubArray",                    @#GetMessageSubArray)
  221.     XgrRegisterMessage (@"GetModalInfo",                                @#GetModalInfo)
  222.     XgrRegisterMessage (@"GetModalWindow",                            @#GetModalWindow)
  223.     XgrRegisterMessage (@"GetParent",                                        @#GetParent)
  224.     XgrRegisterMessage (@"GetPosition",                                    @#GetPosition)
  225.     XgrRegisterMessage (@"GetProtoInfo",                                @#GetProtoInfo)
  226.     XgrRegisterMessage (@"GetRedrawFlags",                            @#GetRedrawFlags)
  227.     XgrRegisterMessage (@"GetSize",                                            @#GetSize)
  228.     XgrRegisterMessage (@"GetSmallestSize",                            @#GetSmallestSize)
  229.     XgrRegisterMessage (@"GetState",                                        @#GetState)
  230.     XgrRegisterMessage (@"GetStyle",                                        @#GetStyle)
  231.     XgrRegisterMessage (@"GetTabArray",                                    @#GetTabArray)
  232.     XgrRegisterMessage (@"GetTabWidth",                                    @#GetTabWidth)
  233.     XgrRegisterMessage (@"GetTextArray",                                @#GetTextArray)
  234.     XgrRegisterMessage (@"GetTextArrayBounds",                    @#GetTextArrayBounds)
  235.     XgrRegisterMessage (@"GetTextArrayLine",                        @#GetTextArrayLine)
  236.     XgrRegisterMessage (@"GetTextArrayLines",                        @#GetTextArrayLines)
  237.     XgrRegisterMessage (@"GetTextCursor",                                @#GetTextCursor)
  238.     XgrRegisterMessage (@"GetTextFilename",                            @#GetTextFilename)
  239.     XgrRegisterMessage (@"GetTextPosition",                            @#GetTextPosition)
  240.     XgrRegisterMessage (@"GetTextSelection",                        @#GetTextSelection)
  241.     XgrRegisterMessage (@"GetTextString",                                @#GetTextString)
  242.     XgrRegisterMessage (@"GetTextStrings",                            @#GetTextStrings)
  243.     XgrRegisterMessage (@"GetTexture",                                    @#GetTexture)
  244.     XgrRegisterMessage (@"GetTimer",                                        @#GetTimer)
  245.     XgrRegisterMessage (@"GetValue",                                        @#GetValue)
  246.     XgrRegisterMessage (@"GetValues",                                        @#GetValues)
  247.     XgrRegisterMessage (@"GetValueArray",                                @#GetValueArray)
  248.     XgrRegisterMessage (@"GetWindow",                                        @#GetWindow)
  249.     XgrRegisterMessage (@"GetWindowFunction",                        @#GetWindowFunction)
  250.     XgrRegisterMessage (@"GetWindowGrid",                                @#GetWindowGrid)
  251.     XgrRegisterMessage (@"GetWindowIcon",                                @#GetWindowIcon)
  252.     XgrRegisterMessage (@"GetWindowSize",                                @#GetWindowSize)
  253.     XgrRegisterMessage (@"GetWindowTitle",                            @#GetWindowTitle)
  254.     XgrRegisterMessage (@"GotKeyboardFocus",                        @#GotKeyboardFocus)
  255.     XgrRegisterMessage (@"GrabArray",                                        @#GrabArray)
  256.     XgrRegisterMessage (@"GrabTextArray",                                @#GrabTextArray)
  257.     XgrRegisterMessage (@"GrabTextString",                            @#GrabTextString)
  258.     XgrRegisterMessage (@"GrabValueArray",                            @#GrabValueArray)
  259.     XgrRegisterMessage (@"Help",                                                @#Help)
  260.     XgrRegisterMessage (@"Hidden",                                            @#Hidden)
  261.     XgrRegisterMessage (@"HideTextCursor",                            @#HideTextCursor)
  262.     XgrRegisterMessage (@"HideWindow",                                    @#HideWindow)
  263.     XgrRegisterMessage (@"Initialize",                                    @#Initialize)
  264.     XgrRegisterMessage (@"Initialized",                                    @#Initialized)
  265.     XgrRegisterMessage (@"Inline",                                            @#Inline)
  266.     XgrRegisterMessage (@"InquireText",                                    @#InquireText)
  267.     XgrRegisterMessage (@"KeyboardFocusBackward",                @#KeyboardFocusBackward)
  268.     XgrRegisterMessage (@"KeyboardFocusForward",                @#KeyboardFocusForward)
  269.     XgrRegisterMessage (@"KeyDown",                                            @#KeyDown)
  270.     XgrRegisterMessage (@"KeyUp",                                                @#KeyUp)
  271.     XgrRegisterMessage (@"LostKeyboardFocus",                        @#LostKeyboardFocus)
  272.     XgrRegisterMessage (@"LostTextSelection",                        @#LostTextSelection)
  273.     XgrRegisterMessage (@"Maximized",                                        @#Maximized)
  274.     XgrRegisterMessage (@"MaximizeWindow",                            @#MaximizeWindow)
  275.     XgrRegisterMessage (@"Maximum",                                            @#Maximum)
  276.     XgrRegisterMessage (@"Minimized",                                        @#Minimized)
  277.     XgrRegisterMessage (@"MinimizeWindow",                            @#MinimizeWindow)
  278.     XgrRegisterMessage (@"Minimum",                                            @#Minimum)
  279.     XgrRegisterMessage (@"MonitorContext",                            @#MonitorContext)
  280.     XgrRegisterMessage (@"MonitorHelp",                                    @#MonitorHelp)
  281.     XgrRegisterMessage (@"MonitorKeyboard",                            @#MonitorKeyboard)
  282.     XgrRegisterMessage (@"MonitorMouse",                                @#MonitorMouse)
  283.     XgrRegisterMessage (@"MouseDown",                                        @#MouseDown)
  284.     XgrRegisterMessage (@"MouseDrag",                                        @#MouseDrag)
  285.     XgrRegisterMessage (@"MouseEnter",                                    @#MouseEnter)
  286.     XgrRegisterMessage (@"MouseExit",                                        @#MouseExit)
  287.     XgrRegisterMessage (@"MouseMove",                                        @#MouseMove)
  288.     XgrRegisterMessage (@"MouseUp",                                            @#MouseUp)
  289.     XgrRegisterMessage (@"MuchLess",                                        @#MuchLess)
  290.     XgrRegisterMessage (@"MuchMore",                                        @#MuchMore)
  291.     XgrRegisterMessage (@"OneLess",                                            @#OneLess)
  292.     XgrRegisterMessage (@"OneMore",                                            @#OneMore)
  293.     XgrRegisterMessage (@"PokeArray",                                        @#PokeArray)
  294.     XgrRegisterMessage (@"PokeTextArray",                                @#PokeTextArray)
  295.     XgrRegisterMessage (@"PokeTextString",                            @#PokeTextString)
  296.     XgrRegisterMessage (@"PokeValueArray",                            @#PokeValueArray)
  297.     XgrRegisterMessage (@"Print",                                                @#Print)
  298.     XgrRegisterMessage (@"Redraw",                                            @#Redraw)
  299.     XgrRegisterMessage (@"RedrawGrid",                                    @#RedrawGrid)
  300.     XgrRegisterMessage (@"RedrawLines",                                    @#RedrawLines)
  301.     XgrRegisterMessage (@"RedrawText",                                    @#RedrawText)
  302.     XgrRegisterMessage (@"RedrawWindow",                                @#RedrawWindow)
  303.     XgrRegisterMessage (@"Replace",                                            @#Replace)
  304.     XgrRegisterMessage (@"ReplaceForward",                            @#ReplaceForward)
  305.     XgrRegisterMessage (@"ReplaceReverse",                            @#ReplaceReverse)
  306.     XgrRegisterMessage (@"Reset",                                                @#Reset)
  307.     XgrRegisterMessage (@"Resize",                                            @#Resize)
  308.     XgrRegisterMessage (@"Resized",                                            @#Resized)
  309.     XgrRegisterMessage (@"ResizeNot",                                        @#ResizeNot)
  310.     XgrRegisterMessage (@"ResizeWindow",                                @#ResizeWindow)
  311.     XgrRegisterMessage (@"ResizeWindowToGrid",                    @#ResizeWindowToGrid)
  312.     XgrRegisterMessage (@"Resized",                                            @#Resized)
  313.     XgrRegisterMessage (@"Reverse",                                            @#Reverse)
  314.     XgrRegisterMessage (@"ScrollH",                                            @#ScrollH)
  315.     XgrRegisterMessage (@"ScrollV",                                            @#ScrollV)
  316.     XgrRegisterMessage (@"Select",                                            @#Select)
  317.     XgrRegisterMessage (@"Selected",                                        @#Selected)
  318.     XgrRegisterMessage (@"Selection",                                        @#Selection)
  319.     XgrRegisterMessage (@"SelectWindow",                                @#SelectWindow)
  320.     XgrRegisterMessage (@"SetAlign",                                        @#SetAlign)
  321.     XgrRegisterMessage (@"SetBorder",                                        @#SetBorder)
  322.     XgrRegisterMessage (@"SetBorderOffset",                            @#SetBorderOffset)
  323.     XgrRegisterMessage (@"SetCallback",                                    @#SetCallback)
  324.     XgrRegisterMessage (@"SetCan",                                            @#SetCan)
  325.     XgrRegisterMessage (@"SetCharacterMapArray",                @#SetCharacterMapArray)
  326.     XgrRegisterMessage (@"SetClipGrid",                                    @#SetClipGrid)
  327.     XgrRegisterMessage (@"SetColor",                                        @#SetColor)
  328.     XgrRegisterMessage (@"SetColorAll",                                    @#SetColorAll)
  329.     XgrRegisterMessage (@"SetColorExtra",                                @#SetColorExtra)
  330.     XgrRegisterMessage (@"SetColorExtraAll",                        @#SetColorExtraAll)
  331.     XgrRegisterMessage (@"SetCursor",                                        @#SetCursor)
  332.     XgrRegisterMessage (@"SetCursorXY",                                    @#SetCursorXY)
  333.     XgrRegisterMessage (@"SetDisplay",                                    @#SetDisplay)
  334.     XgrRegisterMessage (@"SetFocusColor",                                @#SetFocusColor)
  335.     XgrRegisterMessage (@"SetFocusColorExtra",                    @#SetFocusColorExtra)
  336.     XgrRegisterMessage (@"SetFont",                                            @#SetFont)
  337.     XgrRegisterMessage (@"SetFontNumber",                                @#SetFontNumber)
  338.     XgrRegisterMessage (@"SetGridFunction",                            @#SetGridFunction)
  339.     XgrRegisterMessage (@"SetGridFunctionName",                    @#SetGridFunctionName)
  340.     XgrRegisterMessage (@"SetGridName",                                    @#SetGridName)
  341.     XgrRegisterMessage (@"SetGridType",                                    @#SetGridType)
  342.     XgrRegisterMessage (@"SetGridTypeName",                            @#SetGridTypeName)
  343.     XgrRegisterMessage (@"SetGroup",                                        @#SetGroup)
  344.     XgrRegisterMessage (@"SetHelp",                                            @#SetHelp)
  345.     XgrRegisterMessage (@"SetHelpFile",                                    @#SetHelpFile)
  346.     XgrRegisterMessage (@"SetHelpString",                                @#SetHelpString)
  347.     XgrRegisterMessage (@"SetHelpStrings",                            @#SetHelpStrings)
  348.     XgrRegisterMessage (@"SetHintString",                                @#SetHintString)
  349.     XgrRegisterMessage (@"SetImage",                                        @#SetImage)
  350.     XgrRegisterMessage (@"SetImageCoords",                            @#SetImageCoords)
  351.     XgrRegisterMessage (@"SetIndent",                                        @#SetIndent)
  352.     XgrRegisterMessage (@"SetInfo",                                            @#SetInfo)
  353.     XgrRegisterMessage (@"SetJustify",                                    @#SetJustify)
  354.     XgrRegisterMessage (@"SetKeyboardFocus",                        @#SetKeyboardFocus)
  355.     XgrRegisterMessage (@"SetKeyboardFocusGrid",                @#SetKeyboardFocusGrid)
  356.     XgrRegisterMessage (@"SetMaxMinSize",                                @#SetMaxMinSize)
  357.     XgrRegisterMessage (@"SetMessageFunc",                            @#SetMessageFunc)
  358.     XgrRegisterMessage (@"SetMessageFuncArray",                    @#SetMessageFuncArray)
  359.     XgrRegisterMessage (@"SetMessageSub",                                @#SetMessageSub)
  360.     XgrRegisterMessage (@"SetMessageSubArray",                    @#SetMessageSubArray)
  361.     XgrRegisterMessage (@"SetModalWindow",                            @#SetModalWindow)
  362.     XgrRegisterMessage (@"SetParent",                                        @#SetParent)
  363.     XgrRegisterMessage (@"SetPosition",                                    @#SetPosition)
  364.     XgrRegisterMessage (@"SetRedrawFlags",                            @#SetRedrawFlags)
  365.     XgrRegisterMessage (@"SetSize",                                            @#SetSize)
  366.     XgrRegisterMessage (@"SetState",                                        @#SetState)
  367.     XgrRegisterMessage (@"SetStyle",                                        @#SetStyle)
  368.     XgrRegisterMessage (@"SetTabArray",                                    @#SetTabArray)
  369.     XgrRegisterMessage (@"SetTabWidth",                                    @#SetTabWidth)
  370.     XgrRegisterMessage (@"SetTextArray",                                @#SetTextArray)
  371.     XgrRegisterMessage (@"SetTextArrayLine",                        @#SetTextArrayLine)
  372.     XgrRegisterMessage (@"SetTextArrayLines",                        @#SetTextArrayLines)
  373.     XgrRegisterMessage (@"SetTextCursor",                                @#SetTextCursor)
  374.     XgrRegisterMessage (@"SetTextFilename",                            @#SetTextFilename)
  375.     XgrRegisterMessage (@"SetTextSelection",                        @#SetTextSelection)
  376.     XgrRegisterMessage (@"SetTextString",                                @#SetTextString)
  377.     XgrRegisterMessage (@"SetTextStrings",                            @#SetTextStrings)
  378.     XgrRegisterMessage (@"SetTexture",                                    @#SetTexture)
  379.     XgrRegisterMessage (@"SetTimer",                                        @#SetTimer)
  380.     XgrRegisterMessage (@"SetValue",                                        @#SetValue)
  381.     XgrRegisterMessage (@"SetValues",                                        @#SetValues)
  382.     XgrRegisterMessage (@"SetValueArray",                                @#SetValueArray)
  383.     XgrRegisterMessage (@"SetWindowFunction",                        @#SetWindowFunction)
  384.     XgrRegisterMessage (@"SetWindowIcon",                                @#SetWindowIcon)
  385.     XgrRegisterMessage (@"SetWindowTitle",                            @#SetWindowTitle)
  386.     XgrRegisterMessage (@"ShowTextCursor",                            @#ShowTextCursor)
  387.     XgrRegisterMessage (@"ShowWindow",                                    @#ShowWindow)
  388.     XgrRegisterMessage (@"SomeLess",                                        @#SomeLess)
  389.     XgrRegisterMessage (@"SomeMore",                                        @#SomeMore)
  390.     XgrRegisterMessage (@"StartTimer",                                    @#StartTimer)
  391.     XgrRegisterMessage (@"SystemMessage",                                @#SystemMessage)
  392.     XgrRegisterMessage (@"TextDelete",                                    @#TextDelete)
  393.     XgrRegisterMessage (@"TextEvent",                                        @#TextEvent)
  394.     XgrRegisterMessage (@"TextInsert",                                    @#TextInsert)
  395.     XgrRegisterMessage (@"TextModified",                                @#TextModified)
  396.     XgrRegisterMessage (@"TextReplace",                                    @#TextReplace)
  397.     XgrRegisterMessage (@"TimeOut",                                            @#TimeOut)
  398.     XgrRegisterMessage (@"Update",                                            @#Update)
  399.     XgrRegisterMessage (@"WindowClose",                                    @#WindowClose)
  400.     XgrRegisterMessage (@"WindowCreate",                                @#WindowCreate)
  401.     XgrRegisterMessage (@"WindowDeselected",                        @#WindowDeselected)
  402.     XgrRegisterMessage (@"WindowDestroy",                                @#WindowDestroy)
  403.     XgrRegisterMessage (@"WindowDestroyed",                            @#WindowDestroyed)
  404.     XgrRegisterMessage (@"WindowDisplay",                                @#WindowDisplay)
  405.     XgrRegisterMessage (@"WindowDisplayed",                            @#WindowDisplayed)
  406.     XgrRegisterMessage (@"WindowGetDisplay",                        @#WindowGetDisplay)
  407.     XgrRegisterMessage (@"WindowGetFunction",                        @#WindowGetFunction)
  408.     XgrRegisterMessage (@"WindowGetIcon",                                @#WindowGetIcon)
  409.     XgrRegisterMessage (@"WindowGetKeyboardFocusGrid",    @#WindowGetKeyboardFocusGrid)
  410.     XgrRegisterMessage (@"WindowGetSelectedWindow",            @#WindowGetSelectedWindow)
  411.     XgrRegisterMessage (@"WindowGetSize",                                @#WindowGetSize)
  412.     XgrRegisterMessage (@"WindowGetTitle",                            @#WindowGetTitle)
  413.     XgrRegisterMessage (@"WindowHelp",                                    @#WindowHelp)
  414.     XgrRegisterMessage (@"WindowHide",                                    @#WindowHide)
  415.     XgrRegisterMessage (@"WindowHidden",                                @#WindowHidden)
  416.     XgrRegisterMessage (@"WindowKeyDown",                                @#WindowKeyDown)
  417.     XgrRegisterMessage (@"WindowKeyUp",                                    @#WindowKeyUp)
  418.     XgrRegisterMessage (@"WindowMaximize",                            @#WindowMaximize)
  419.     XgrRegisterMessage (@"WindowMaximized",                            @#WindowMaximized)
  420.     XgrRegisterMessage (@"WindowMinimize",                            @#WindowMinimize)
  421.     XgrRegisterMessage (@"WindowMinimized",                            @#WindowMinimized)
  422.     XgrRegisterMessage (@"WindowMonitorContext",                @#WindowMonitorContext)
  423.     XgrRegisterMessage (@"WindowMonitorHelp",                        @#WindowMonitorHelp)
  424.     XgrRegisterMessage (@"WindowMonitorKeyboard",                @#WindowMonitorKeyboard)
  425.     XgrRegisterMessage (@"WindowMonitorMouse",                    @#WindowMonitorMouse)
  426.     XgrRegisterMessage (@"WindowMouseDown",                            @#WindowMouseDown)
  427.     XgrRegisterMessage (@"WindowMouseDrag",                            @#WindowMouseDrag)
  428.     XgrRegisterMessage (@"WindowMouseEnter",                        @#WindowMouseEnter)
  429.     XgrRegisterMessage (@"WindowMouseExit",                            @#WindowMouseExit)
  430.     XgrRegisterMessage (@"WindowMouseMove",                            @#WindowMouseMove)
  431.     XgrRegisterMessage (@"WindowMouseUp",                                @#WindowMouseUp)
  432.     XgrRegisterMessage (@"WindowRedraw",                                @#WindowRedraw)
  433.     XgrRegisterMessage (@"WindowRegister",                            @#WindowRegister)
  434.     XgrRegisterMessage (@"WindowResize",                                @#WindowResize)
  435.     XgrRegisterMessage (@"WindowResized",                                @#WindowResized)
  436.     XgrRegisterMessage (@"WindowResizeToGrid",                    @#WindowResizeToGrid)
  437.     XgrRegisterMessage (@"WindowSelect",                                @#WindowSelect)
  438.     XgrRegisterMessage (@"WindowSelected",                            @#WindowSelected)
  439.     XgrRegisterMessage (@"WindowSetFunction",                        @#WindowSetFunction)
  440.     XgrRegisterMessage (@"WindowSetIcon",                                @#WindowSetIcon)
  441.     XgrRegisterMessage (@"WindowSetKeyboardFocusGrid",    @#WindowSetKeyboardFocusGrid)
  442.     XgrRegisterMessage (@"WindowSetTitle",                            @#WindowSetTitle)
  443.     XgrRegisterMessage (@"WindowShow",                                    @#WindowShow)
  444.     XgrRegisterMessage (@"WindowSystemMessage",                    @#WindowSystemMessage)
  445.     XgrRegisterMessage (@"LastMessage",                                    @#LastMessage)
  446. '
  447.     XgrGetDisplaySize ("", @#displayWidth, @#displayHeight, @#windowBorderWidth, @#windowTitleHeight)
  448. END FUNCTION
  449. '
  450. '
  451. ' ############################
  452. ' #####  InitProgram ()  #####
  453. ' ############################
  454. '
  455. FUNCTION  InitProgram ()
  456.  
  457. END FUNCTION
  458. '
  459. '
  460. ' ##############################
  461. ' #####  CreateWindows ()  #####
  462. ' ##############################
  463. '
  464. FUNCTION  CreateWindows ()
  465. '
  466.     IF LIBRARY(0) THEN RETURN
  467. '
  468.   Employee (@Employee, #CreateWindow, 0, 0, 0, 0, 0, 0)
  469.   XuiSendMessage (Employee, #SetCallback, Employee, &EmployeeCode(), -1, -1, -1, 0)
  470.   XuiSendMessage (Employee, #Initialize, 0, 0, 0, 0, 0, 0)
  471.   XuiSendMessage (Employee, #DisplayWindow, 0, 0, 0, 0, 0, 0)
  472. END FUNCTION
  473. '
  474. '
  475. ' ############################
  476. ' #####  InitWindows ()  #####
  477. ' ############################
  478. '
  479. FUNCTION  InitWindows ()
  480.  
  481. END FUNCTION
  482. '
  483. '
  484. '    #########################
  485. '    #####  Employee ()  #####
  486. '    #########################
  487. '
  488. FUNCTION  Employee (grid, message, v0, v1, v2, v3, r0, (r1, r1$, r1[], r1$[]))
  489.     STATIC  designX,  designY,  designWidth,  designHeight
  490.     STATIC  SUBADDR  sub[]
  491.     STATIC  upperMessage
  492.     STATIC  Employee
  493. '
  494.     $Employee          =   0  ' kid   0 grid type = Employee
  495.     $FirstNameLabel    =   1  ' kid   1 grid type = XuiLabel
  496.     $FirstNameText     =   2  ' kid   2 grid type = XuiTextLine
  497.     $MiddleNameLabel   =   3  ' kid   3 grid type = XuiLabel
  498.     $MiddleNameText    =   4  ' kid   4 grid type = XuiTextLine
  499.     $LastNameLabel     =   5  ' kid   5 grid type = XuiLabel
  500.     $LastNameText      =   6  ' kid   6 grid type = XuiTextLine
  501.     $Address1Label     =   7  ' kid   7 grid type = XuiLabel
  502.     $Address1Text      =   8  ' kid   8 grid type = XuiTextLine
  503.     $Address2Label     =   9  ' kid   9 grid type = XuiLabel
  504.     $Address2Text      =  10  ' kid  10 grid type = XuiTextLine
  505.     $CityLabel         =  11  ' kid  11 grid type = XuiLabel
  506.     $CityText          =  12  ' kid  12 grid type = XuiTextLine
  507.     $StateLabel        =  13  ' kid  13 grid type = XuiLabel
  508.     $StateText         =  14  ' kid  14 grid type = XuiTextLine
  509.     $ZipLabel          =  15  ' kid  15 grid type = XuiLabel
  510.     $ZipText           =  16  ' kid  16 grid type = XuiTextLine
  511.     $PhoneLabel        =  17  ' kid  17 grid type = XuiLabel
  512.     $PhoneText         =  18  ' kid  18 grid type = XuiTextLine
  513.     $FaxLabel          =  19  ' kid  19 grid type = XuiLabel
  514.     $FaxText           =  20  ' kid  20 grid type = XuiTextLine
  515.     $EmailLabel        =  21  ' kid  21 grid type = XuiLabel
  516.     $EmailText         =  22  ' kid  22 grid type = XuiTextLine
  517.     $WebLabel          =  23  ' kid  23 grid type = XuiLabel
  518.     $WebText           =  24  ' kid  24 grid type = XuiTextLine
  519.     $SSNLabel          =  25  ' kid  25 grid type = XuiLabel
  520.     $SSNText           =  26  ' kid  26 grid type = XuiTextLine
  521.     $Expertise1Label   =  27  ' kid  27 grid type = XuiLabel
  522.     $Expertise1Text    =  28  ' kid  28 grid type = XuiTextLine
  523.     $Expertise2Label   =  29  ' kid  29 grid type = XuiLabel
  524.     $Expertise2Text    =  30  ' kid  30 grid type = XuiTextLine
  525.     $Expertise3Label   =  31  ' kid  31 grid type = XuiLabel
  526.     $Expertise3Text    =  32  ' kid  32 grid type = XuiTextLine
  527.     $CommentsLabel     =  33  ' kid  33 grid type = XuiLabel
  528.     $CommentsTextArea  =  34  ' kid  34 grid type = XuiTextArea
  529.     $LoadButton        =  35  ' kid  35 grid type = XuiPushButton
  530.     $SaveButton        =  36  ' kid  36 grid type = XuiPushButton
  531.     $UpperKid          =  36  ' kid maximum
  532. '
  533. '
  534.     IFZ sub[] THEN GOSUB Initialize
  535. '    XuiReportMessage (grid, message, v0, v1, v2, v3, r0, r1)
  536.     IF XuiProcessMessage (grid, message, @v0, @v1, @v2, @v3, @r0, @r1, Employee) THEN RETURN
  537.     IF (message <= upperMessage) THEN GOSUB @sub[message]
  538.     RETURN
  539. '
  540. '
  541. ' *****  Callback  *****  message = Callback : r1 = original message
  542. '
  543. SUB Callback
  544.     message = r1
  545.     callback = message
  546.     IF (message <= upperMessage) THEN GOSUB @sub[message]
  547. END SUB
  548. '
  549. '
  550. ' *****  Create  *****  v0123 = xywh : r0 = window : r1 = parent
  551. '
  552. SUB Create
  553.     IF (v0 <= 0) THEN v0 = 0
  554.     IF (v1 <= 0) THEN v1 = 0
  555.     IF (v2 <= 0) THEN v2 = designWidth
  556.     IF (v3 <= 0) THEN v3 = designHeight
  557.     XuiCreateGrid  (@grid, Employee, @v0, @v1, @v2, @v3, r0, r1, &Employee())
  558.     XuiSendMessage ( grid, #SetGridName, 0, 0, 0, 0, 0, @"Employee")
  559.     XuiLabel       (@g, #Create, 4, 4, 100, 24, r0, grid)
  560.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"FirstNameLabel")
  561.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  562.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  563.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"First Name")
  564.     XuiTextLine    (@g, #Create, 104, 4, 288, 24, r0, grid)
  565.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $FirstNameText, grid)
  566.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"FirstNameText")
  567.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  568.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  569.     XuiLabel       (@g, #Create, 4, 28, 100, 24, r0, grid)
  570.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"MiddleNameLabel")
  571.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  572.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  573.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Middle Name")
  574.     XuiTextLine    (@g, #Create, 104, 28, 288, 24, r0, grid)
  575.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $MiddleNameText, grid)
  576.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"MiddleNameText")
  577.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  578.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  579.     XuiLabel       (@g, #Create, 4, 52, 100, 24, r0, grid)
  580.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"LastNameLabel")
  581.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  582.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  583.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Last Name")
  584.     XuiTextLine    (@g, #Create, 104, 52, 288, 24, r0, grid)
  585.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $LastNameText, grid)
  586.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"LastNameText")
  587.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  588.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  589.     XuiLabel       (@g, #Create, 4, 76, 100, 24, r0, grid)
  590.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Address1Label")
  591.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  592.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  593.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Address1")
  594.     XuiTextLine    (@g, #Create, 104, 76, 288, 24, r0, grid)
  595.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $Address1Text, grid)
  596.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Address1Text")
  597.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  598.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  599.     XuiLabel       (@g, #Create, 4, 100, 100, 24, r0, grid)
  600.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Address2Label")
  601.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  602.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  603.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Address2")
  604.     XuiTextLine    (@g, #Create, 104, 100, 288, 24, r0, grid)
  605.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $Address2Text, grid)
  606.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Address2Text")
  607.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  608.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  609.     XuiLabel       (@g, #Create, 4, 124, 100, 24, r0, grid)
  610.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"CityLabel")
  611.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  612.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  613.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"City")
  614.     XuiTextLine    (@g, #Create, 104, 124, 288, 24, r0, grid)
  615.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $CityText, grid)
  616.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"CityText")
  617.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  618.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  619.     XuiLabel       (@g, #Create, 4, 148, 100, 24, r0, grid)
  620.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"StateLabel")
  621.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  622.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  623.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"State")
  624.     XuiTextLine    (@g, #Create, 104, 148, 288, 24, r0, grid)
  625.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $StateText, grid)
  626.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"StateText")
  627.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  628.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  629.     XuiLabel       (@g, #Create, 4, 172, 100, 24, r0, grid)
  630.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"ZipLabel")
  631.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  632.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  633.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Zip")
  634.     XuiTextLine    (@g, #Create, 104, 172, 288, 24, r0, grid)
  635.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $ZipText, grid)
  636.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"ZipText")
  637.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  638.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  639.     XuiLabel       (@g, #Create, 4, 196, 100, 24, r0, grid)
  640.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"PhoneLabel")
  641.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  642.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  643.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Phone")
  644.     XuiTextLine    (@g, #Create, 104, 196, 288, 24, r0, grid)
  645.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $PhoneText, grid)
  646.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"PhoneText")
  647.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  648.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  649.     XuiLabel       (@g, #Create, 4, 220, 100, 24, r0, grid)
  650.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"FaxLabel")
  651.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  652.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  653.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Fax")
  654.     XuiTextLine    (@g, #Create, 104, 220, 288, 24, r0, grid)
  655.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $FaxText, grid)
  656.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"FaxText")
  657.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  658.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  659.     XuiLabel       (@g, #Create, 4, 244, 100, 24, r0, grid)
  660.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"EmailLabel")
  661.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  662.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  663.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Email")
  664.     XuiTextLine    (@g, #Create, 104, 244, 288, 24, r0, grid)
  665.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $EmailText, grid)
  666.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"EmailText")
  667.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  668.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  669.     XuiLabel       (@g, #Create, 4, 268, 100, 24, r0, grid)
  670.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"WebLabel")
  671.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  672.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  673.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Web")
  674.     XuiTextLine    (@g, #Create, 104, 268, 288, 24, r0, grid)
  675.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $WebText, grid)
  676.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"WebText")
  677.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  678.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  679.     XuiLabel       (@g, #Create, 4, 292, 100, 24, r0, grid)
  680.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"SSNLabel")
  681.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  682.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  683.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"SS#")
  684.     XuiTextLine    (@g, #Create, 104, 292, 288, 24, r0, grid)
  685.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $SSNText, grid)
  686.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"SSNText")
  687.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  688.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  689.     XuiLabel       (@g, #Create, 4, 316, 100, 24, r0, grid)
  690.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Expertise1Label")
  691.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  692.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  693.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Expertise 1")
  694.     XuiTextLine    (@g, #Create, 104, 316, 288, 24, r0, grid)
  695.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $Expertise1Text, grid)
  696.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Expertise1Text")
  697.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  698.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  699.     XuiLabel       (@g, #Create, 4, 340, 100, 24, r0, grid)
  700.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Expertise2Label")
  701.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  702.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  703.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Expertise 2")
  704.     XuiTextLine    (@g, #Create, 104, 340, 288, 24, r0, grid)
  705.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $Expertise2Text, grid)
  706.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Expertise2Text")
  707.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  708.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  709.     XuiLabel       (@g, #Create, 4, 364, 100, 24, r0, grid)
  710.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Expertise3Label")
  711.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  712.     XuiSendMessage ( g, #SetAlign, $$AlignMiddleRight, $$JustifyCenter, -1, -1, 0, 0)
  713.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Expertise 3")
  714.     XuiTextLine    (@g, #Create, 104, 364, 288, 24, r0, grid)
  715.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $Expertise3Text, grid)
  716.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"Expertise3Text")
  717.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  718.     XuiSendMessage ( g, #SetColorExtra, $$BrightGrey, $$LightYellow, $$Black, $$White, 1, 0)
  719.     XuiLabel       (@g, #Create, 4, 388, 388, 32, r0, grid)
  720.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"CommentsLabel")
  721.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  722.     XuiSendMessage ( g, #SetColor, $$BrightCyan, $$Black, $$Black, $$White, 0, 0)
  723.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"\x1F Our Comments : Employee Quicky Resume \x1F")
  724.     XuiTextArea    (@g, #Create, 4, 420, 388, 116, r0, grid)
  725.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $CommentsTextArea, grid)
  726.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"CommentsTextArea")
  727.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  728.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 1, @"Text")
  729.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 2, @"ScrollH")
  730.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 3, @"ScrollV")
  731.     XuiPushButton  (@g, #Create, 4, 536, 196, 32, r0, grid)
  732.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $LoadButton, grid)
  733.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"LoadButton")
  734.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  735.     XuiSendMessage ( g, #SetColor, 17, $$Black, $$Black, $$White, 0, 0)
  736.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Load Employee")
  737.     XuiPushButton  (@g, #Create, 200, 536, 192, 32, r0, grid)
  738.     XuiSendMessage ( g, #SetCallback, grid, &Employee(), -1, -1, $SaveButton, grid)
  739.     XuiSendMessage ( g, #SetGridName, 0, 0, 0, 0, 0, @"SaveButton")
  740.     XuiSendMessage ( g, #SetStyle, 0, 0, 0, 0, 0, 0)
  741.     XuiSendMessage ( g, #SetColor, $$BrightOrange, $$Black, $$Black, $$White, 0, 0)
  742.     XuiSendMessage ( g, #SetTextString, 0, 0, 0, 0, 0, @"Save Employee")
  743.     GOSUB Resize
  744. END SUB
  745. '
  746. '
  747. ' *****  CreateWindow  *****  v0123 = xywh : r0 = windowType : r1$ = display$
  748. '
  749. SUB CreateWindow
  750.     IF (v0  = 0) THEN v0 = designX
  751.     IF (v1  = 0) THEN v1 = designY
  752.     IF (v2 <= 0) THEN v2 = designWidth
  753.     IF (v3 <= 0) THEN v3 = designHeight
  754.     XuiWindow (@window, #WindowCreate, v0, v1, v2, v3, r0, @r1$)
  755.     v0 = 0 : v1 = 0 : r0 = window : ATTACH r1$ TO display$
  756.     GOSUB Create
  757.     r1 = 0 : ATTACH display$ TO r1$
  758.     XuiWindow (window, #WindowRegister, grid, -1, v2, v3, @r0, @"Employee")
  759. END SUB
  760. '
  761. '
  762. ' *****  GetSmallestSize  *****  See "Anatomy of Grid Functions"
  763. '
  764. SUB GetSmallestSize
  765. END SUB
  766. '
  767. '
  768. ' *****  Resize  *****  See "Anatomy of Grid Functions"
  769. '
  770. SUB Resize
  771. END SUB
  772. '
  773. '
  774. ' *****  Selection  *****  See "Anatomy of Grid Functions"
  775. '
  776. SUB Selection
  777. END SUB
  778. '
  779. '
  780. ' *****  Initialize  *****  ' see "Anatomy of Grid Functions"
  781. '
  782. SUB Initialize
  783.     XuiGetDefaultMessageFuncArray (@func[])
  784.     XgrMessageNameToNumber (@"LastMessage", @upperMessage)
  785. '
  786.     func[#Callback]           = &XuiCallback ()               ' disable to handle Callback messages internally
  787. ' func[#GetSmallestSize]    = 0                             ' enable to add internal GetSmallestSize routine
  788. ' func[#Resize]             = 0                             ' enable to add internal Resize routine
  789. '
  790.     DIM sub[upperMessage]
  791. ' sub[#Callback]            = SUBADDRESS (Callback)         ' enable to handle Callback messages internally
  792.     sub[#Create]              = SUBADDRESS (Create)           ' must be internal routine
  793.     sub[#CreateWindow]        = SUBADDRESS (CreateWindow)     ' must be internal routine
  794. ' sub[#GetSmallestSize]     = SUBADDRESS (GetSmallestSize)  ' enable to add internal GetSmallestSize routine
  795. ' sub[#Resize]              = SUBADDRESS (Resize)           ' enable to add internal Resize routine
  796.     sub[#Selection]           = SUBADDRESS (Selection)        ' routes Selection callbacks to subroutine
  797. '
  798.     IF sub[0] THEN PRINT "Employee() : Initialize : error ::: (undefined message)"
  799.     IF func[0] THEN PRINT "Employee() : Initialize : error ::: (undefined message)"
  800.     XuiRegisterGridType (@Employee, "Employee", &Employee(), @func[], @sub[])
  801. '
  802. ' Don't remove the following 4 lines, or WindowFromFunction/WindowToFunction will not work
  803. '
  804.     designX = 880
  805.     designY = 23
  806.     designWidth = 396
  807.     designHeight = 572
  808. '
  809.     gridType = Employee
  810.     XuiSetGridTypeValue (gridType, @"x",                designX)
  811.     XuiSetGridTypeValue (gridType, @"y",                designY)
  812.     XuiSetGridTypeValue (gridType, @"width",            designWidth)
  813.     XuiSetGridTypeValue (gridType, @"height",           designHeight)
  814.     XuiSetGridTypeValue (gridType, @"maxWidth",         designWidth)
  815.     XuiSetGridTypeValue (gridType, @"maxHeight",        designHeight)
  816.     XuiSetGridTypeValue (gridType, @"minWidth",         designWidth)
  817.     XuiSetGridTypeValue (gridType, @"minHeight",        designHeight)
  818.     XuiSetGridTypeValue (gridType, @"border",           $$BorderFrame)
  819.     XuiSetGridTypeValue (gridType, @"can",              $$Focus OR $$Respond OR $$Callback OR $$InputTextString OR $$TextSelection)
  820.     XuiSetGridTypeValue (gridType, @"focusKid",         $FirstNameText)
  821.     XuiSetGridTypeValue (gridType, @"inputTextArray",   $CommentsTextArea)
  822.     XuiSetGridTypeValue (gridType, @"inputTextString",  $FirstNameText)
  823.     IFZ message THEN RETURN
  824. END SUB
  825. END FUNCTION
  826. '
  827. '
  828. ' #############################
  829. ' #####  EmployeeCode ()  #####
  830. ' #############################
  831. '
  832. FUNCTION  EmployeeCode (grid, message, v0, v1, v2, v3, kid, r1)
  833.     EMPLOYEE  employee[]
  834.     EMPLOYEE  employee
  835. '
  836.     $Employee          =   0  ' kid   0 grid type = Employee
  837.     $FirstNameLabel    =   1  ' kid   1 grid type = XuiLabel
  838.     $FirstNameText     =   2  ' kid   2 grid type = XuiTextLine
  839.     $MiddleNameLabel   =   3  ' kid   3 grid type = XuiLabel
  840.     $MiddleNameText    =   4  ' kid   4 grid type = XuiTextLine
  841.     $LastNameLabel     =   5  ' kid   5 grid type = XuiLabel
  842.     $LastNameText      =   6  ' kid   6 grid type = XuiTextLine
  843.     $Address1Label     =   7  ' kid   7 grid type = XuiLabel
  844.     $Address1Text      =   8  ' kid   8 grid type = XuiTextLine
  845.     $Address2Label     =   9  ' kid   9 grid type = XuiLabel
  846.     $Address2Text      =  10  ' kid  10 grid type = XuiTextLine
  847.     $CityLabel         =  11  ' kid  11 grid type = XuiLabel
  848.     $CityText          =  12  ' kid  12 grid type = XuiTextLine
  849.     $StateLabel        =  13  ' kid  13 grid type = XuiLabel
  850.     $StateText         =  14  ' kid  14 grid type = XuiTextLine
  851.     $ZipLabel          =  15  ' kid  15 grid type = XuiLabel
  852.     $ZipText           =  16  ' kid  16 grid type = XuiTextLine
  853.     $PhoneLabel        =  17  ' kid  17 grid type = XuiLabel
  854.     $PhoneText         =  18  ' kid  18 grid type = XuiTextLine
  855.     $FaxLabel          =  19  ' kid  19 grid type = XuiLabel
  856.     $FaxText           =  20  ' kid  20 grid type = XuiTextLine
  857.     $EmailLabel        =  21  ' kid  21 grid type = XuiLabel
  858.     $EmailText         =  22  ' kid  22 grid type = XuiTextLine
  859.     $WebLabel          =  23  ' kid  23 grid type = XuiLabel
  860.     $WebText           =  24  ' kid  24 grid type = XuiTextLine
  861.     $SSNLabel          =  25  ' kid  25 grid type = XuiLabel
  862.     $SSNText           =  26  ' kid  26 grid type = XuiTextLine
  863.     $Expertise1Label   =  27  ' kid  27 grid type = XuiLabel
  864.     $Expertise1Text    =  28  ' kid  28 grid type = XuiTextLine
  865.     $Expertise2Label   =  29  ' kid  29 grid type = XuiLabel
  866.     $Expertise2Text    =  30  ' kid  30 grid type = XuiTextLine
  867.     $Expertise3Label   =  31  ' kid  31 grid type = XuiLabel
  868.     $Expertise3Text    =  32  ' kid  32 grid type = XuiTextLine
  869.     $CommentsLabel     =  33  ' kid  33 grid type = XuiLabel
  870.     $CommentsTextArea  =  34  ' kid  34 grid type = XuiTextArea
  871.     $LoadButton        =  35  ' kid  35 grid type = XuiPushButton
  872.     $SaveButton        =  36  ' kid  36 grid type = XuiPushButton
  873.     $UpperKid          =  36  ' kid maximum
  874. '
  875. ' enable the following line to see ALL messages this function receives
  876. '
  877. '    XuiReportMessage (grid, message, v0, v1, v2, v3, kid, r1)
  878. '
  879.     IF (message = #Callback) THEN message = r1
  880. '
  881. ' I added a #CloseWindow case below so I could minimize the
  882. ' window when the user closes the window from the system menu.
  883. ' I added a #TextEvent case below so I could move the keyboard
  884. ' focus directly to the "Load Employee" or "Save Employee"
  885. ' button in response to a Shift+Escape or Escape keystroke.
  886. '
  887.     SELECT CASE message
  888.         CASE #CloseWindow    : GOSUB CloseWindow    ' GOSUB CloseWindow
  889.         CASE #Selection        : GOSUB Selection   ' Common callback message
  890.         CASE #TextEvent        : GOSUB TextEvent   ' KeyDown in TextArea or TextLine
  891.     END SELECT
  892.     RETURN
  893. '
  894. '
  895. ' *****  CloseWindow  *****
  896. '
  897. SUB CloseWindow
  898.     XuiSendMessage (grid, #MinimizeWindow, 0, 0, 0, 0, 0, 0)
  899. END SUB
  900. '
  901. '
  902. ' *****  TextEvent  *****
  903. '
  904. ' Press Control+S to move keyboard focus directly to SaveButton
  905. ' Press Control+L to move keyboard focus directly to LoadButton
  906. ' Press Control+T to move keyboard focus directly to top = "first name"
  907. ' Press EscapeKey to move keyboard focus directly to SaveButton
  908. ' Press Shift+EscapeKey to move keyboard focus directly to LoadButton
  909. '
  910. ' 0x4C12000C = $$KeyL when $$KeyControl is down
  911. ' 0x53120013 = $$KeyS when $$KeyControl is down
  912. ' 0x54120014 = $$KeyT when $$KeyControl is down
  913. ' 0x1B01001B = $$KeyEscape
  914. ' 0x1B10001B = $$KeyEscape when $$KeyShift is down
  915. '
  916. SUB TextEvent
  917.     SELECT CASE v2
  918.         CASE 0x4C12000C    : XuiSendMessage (grid, #SetKeyboardFocus, 0, 0, 0, 0, $LoadButton, 0)
  919.         CASE 0x53120013    : XuiSendMessage (grid, #SetKeyboardFocus, 0, 0, 0, 0, $SaveButton, 0)
  920.         CASE 0x54120014    : XuiSendMessage (grid, #SetKeyboardFocus, 0, 0, 0, 0, $FirstNameText, 0)
  921.         CASE 0x1B01001B : XuiSendMessage (grid, #SetKeyboardFocus, 0, 0, 0, 0, $LoadButton, 0)
  922.         CASE 0x1B10001B    : XuiSendMessage (grid, #SetKeyboardFocus, 0, 0, 0, 0, $SaveButton, 0)
  923.     END SELECT
  924. END SUB
  925. '
  926. '
  927. ' *****  Selection  *****
  928. '
  929. ' I added the first three lines to perhaps do what you want.
  930. ' I added a short employee load and save subroutine at bottom.
  931. '
  932. ' When an Enter key is pressed, a selection callback is produced
  933. ' which calls this function and the Selection subroutine below.
  934. ' The code I added sends a #KeyboardFocusForward message to the
  935. ' grid that received the Enter keystroke, which moves the keyboard
  936. ' focus to the next grid.
  937. '
  938. ' Just for fun I added the second line below to see whether the
  939. ' Control key was down when the Enter keystroke occured.  If it
  940. ' was, I make the message #KeyboardFocusBackward.  This give the
  941. ' user a way to go backward almost as easily as forward.
  942. '
  943. ' In this example, also notice that an Enter keystroke does not
  944. ' produce a Selection callback in the multi-line XuiTextArea grid
  945. ' at the bottom.  That makes sense of course because the whole
  946. ' purpose of a multi-line text grid is to accept multiple lines
  947. ' separated by Enter keystrokes.  But then how does the user move
  948. ' out of the text area grid?  If the Shift key is down when an
  949. ' Enter key is pressed, the Enter key does not insert into the
  950. ' text, but a Selection callback message IS produced.  This also
  951. ' works in the single line text grids.
  952. '
  953. ' In summary, in all applications, the Alt+LeftArrow keystroke
  954. ' and Alt+RightArrow keystoke move to the previous and next
  955. ' selectable grid.  Get people to accept that convention and
  956. ' you need not write any code to deal with this functionality.
  957. ' The code below moves the keyboard focus to the next selectable
  958. ' grid when an Enter or Shift+Enter keystroke is entered in
  959. ' the single line text grids or a Shift+Enter keystroke is
  960. ' entered in the multi-line text grid.  The code below moves
  961. ' the keyboard focus to the previous selectable grid when a
  962. ' Control+Enter keystroke or Control+Shift+Enter keystroke is
  963. ' entered in the single line text grids or a Control+Shift+Enter
  964. ' keystroke is entered in the multi-line text grid.
  965. '
  966. '
  967. SUB Selection
  968.     mess = #KeyboardFocusForward
  969.     IF (v0 AND $$ControlBit) THEN mess = #KeyboardFocusBackward
  970.     XuiSendMessage (grid, mess, 0, 0, 0, 0, 0, 0)
  971.   SELECT CASE kid
  972.     CASE $Employee          :
  973.     CASE $FirstNameLabel    :
  974.     CASE $FirstNameText     :
  975.     CASE $MiddleNameLabel   :
  976.     CASE $MiddleNameText    :
  977.     CASE $LastNameLabel     :
  978.     CASE $LastNameText      :
  979.     CASE $Address1Label     :
  980.     CASE $Address1Text      :
  981.     CASE $Address2Label     :
  982.     CASE $Address2Text      :
  983.     CASE $CityLabel         :
  984.     CASE $CityText          :
  985.     CASE $StateLabel        :
  986.     CASE $StateText         :
  987.     CASE $ZipLabel          :
  988.     CASE $ZipText           :
  989.     CASE $PhoneLabel        :
  990.     CASE $PhoneText         :
  991.     CASE $FaxLabel          :
  992.     CASE $FaxText           :
  993.     CASE $EmailLabel        :
  994.     CASE $EmailText         :
  995.     CASE $WebLabel          :
  996.     CASE $WebText           :
  997.     CASE $SSNLabel          :
  998.     CASE $SSNText           :
  999.     CASE $Expertise1Label   :
  1000.     CASE $Expertise1Text    :
  1001.     CASE $Expertise2Label   :
  1002.     CASE $Expertise2Text    :
  1003.     CASE $Expertise3Label   :
  1004.     CASE $Expertise3Text    :
  1005.     CASE $CommentsLabel     :
  1006.     CASE $CommentsTextArea  :
  1007.     CASE $LoadButton        : GOSUB LoadButton
  1008.     CASE $SaveButton        : GOSUB SaveButton
  1009.     END SELECT
  1010. END SUB
  1011. '
  1012. '
  1013. ' *****  LoadButton  *****
  1014. '
  1015. ' Loads the data on an employee given only first, middle, last names.
  1016. ' It loads the employee data base, finds the name, and updates the
  1017. ' fields in the window.  If this routine doesn't get a match of all
  1018. ' three name components (first,middle,last), it reports the closest
  1019. ' match so you can correct your entry if you want.
  1020. '
  1021. SUB LoadButton
  1022.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $FirstNameText, @first$)
  1023.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $MiddleNameText, @middle$)
  1024.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $LastNameText, @last$)
  1025. '
  1026.     first$ = TRIM$(first$)
  1027.     middle$ = TRIM$(middle$)
  1028.     last$ = TRIM$(last$)
  1029.     ll$ = ""
  1030.     mm$ = ""
  1031.     ff$ = ""
  1032. '
  1033.     IFZ last$ THEN
  1034.         XuiSendMessage (grid, #SetKeyboardFocus, 0, 0, 0, 0, $FirstNameText, 0)
  1035.         message$ = "ERROR\n\nNeed At Least\n\nLast Name and First Name"
  1036.         XuiMessage (@message$)
  1037.         EXIT SUB
  1038.     END IF
  1039. '
  1040.     IFZ first$ THEN
  1041.         XuiSendMessage (grid, #SetKeyboardFocus, 0, 0, 0, 0, $FirstNameText, 0)
  1042.         message$ = "ERROR\n\nNeed At Least\n\nLast Name and First Name"
  1043.         XuiMessage (@message$)
  1044.         EXIT SUB
  1045.     END IF
  1046. '
  1047.     GOSUB LoadEmployees
  1048.     upper = UBOUND (employee[])
  1049. '
  1050.     quality = 0
  1051.     FOR i = 0 TO upper
  1052.         f$ = TRIM$(employee[i].firstName)
  1053.         m$ = TRIM$(employee[i].middleName)
  1054.         l$ = TRIM$(employee[i].lastName)
  1055.         found = $$FALSE
  1056.         IF (l$ = last$) THEN
  1057.             IF (f$ = first$) THEN
  1058.                 IF (m$ = middle$) THEN                            ' first, middle, last match
  1059.                     found = $$TRUE
  1060.                     employee = employee[i]
  1061.                     GOSUB LoadEmployee
  1062.                     quality = 4                                                ' full match
  1063.                     EXIT FOR
  1064.                 ELSE                                                                ' first, last match
  1065.                     IF (quality < 3) THEN
  1066.                         ll$ = l$ : mm$ = m$ : ff$ = f$
  1067.                         quality = 3
  1068.                     END IF
  1069.                 END IF
  1070.             ELSE                                                                    ' last matches
  1071.                 IF (quality < 2) THEN
  1072.                     ll$ = l$ : mm$ = m$ : ff$ = f$
  1073.                     quality = 2
  1074.                 END IF
  1075.             END IF
  1076.         ELSE
  1077.             IF (f$ = first$) THEN                                    ' first matches
  1078.                 IF (quality < 1) THEN
  1079.                     ll$ = l$ : mm$ = m$ : ff$ = f$
  1080.                     quality = 1
  1081.                 END IF
  1082.             END IF
  1083.         END IF
  1084.     NEXT i
  1085. '
  1086.     SELECT CASE quality
  1087.         CASE 4        :    employee = employee[i]
  1088.                                 GOSUB LoadEmployee
  1089.         CASE 3        :    name$ = "\"" + first$ + "\"  :  \"" + middle$ + "\"  :  \"" + last$ + "\""
  1090.                                 message$ = "ERROR\n\n" + name$ + "\n\n" + "Not Found\n\nBut The Following Name Is Close\n\n\"" + ff$ + "\"  :  \"" + mm$ + "\"  :  \"" + ll$ + "\""
  1091.                                 XuiMessage (@message$)
  1092.         CASE 2        :    name$ = "\"" + first$ + "\"  :  \"" + middle$ + "\"  :  \"" + last$ + "\""
  1093.                                 message$ = "ERROR\n\n" + name$ + "\n\n" + "Not Found\n\nBut The Following Last Name Matches\n\n\"" + ff$ + "\"  :  \"" + mm$ + "\"  :  \"" + ll$ + "\""
  1094.                                 XuiMessage (@message$)
  1095.         CASE 1        :    name$ = "\"" + first$ + "\"  :  \"" + middle$ + "\"  :  \"" + last$ + "\""
  1096.                                 message$ = "ERROR\n\n" + name$ + "\n\n" + "Not Found\n\nBut The Following First Name Matches\n\n\"" + ff$ + "\"  :  \"" + mm$ + "\"  :  \"" + ll$ + "\""
  1097.                                 XuiMessage (@message$)
  1098.         CASE ELSE    :    name$ = "\"" + first$ + "\"  :  \"" + middle$ + "\"  :  \"" + last$ + "\""
  1099.                                 message$ = "ERROR\n\n" + name$ + "\n\n" + "Not Found"
  1100.                                 XuiMessage (@message$)
  1101.     END SELECT
  1102. '
  1103.     XuiSendMessage (grid, #SetKeyboardFocus, 0, 0, 0, 0, $FirstNameText, 0)
  1104. END SUB
  1105. '
  1106. '
  1107. ' *****  SaveButton  *****
  1108. '
  1109. ' If the employee name in the window matches one of the employee names
  1110. ' in the employee[] array, update that entry in the employee[] array,
  1111. ' otherwise increase the size of the employee[] array by one element
  1112. ' and save the new employee name and information in that new element.
  1113. ' Then save the employee[] array to disk as file "employee.dat".
  1114. '
  1115. SUB SaveButton
  1116.     found = $$FALSE
  1117.     GOSUB GetEmployee
  1118.     GOSUB LoadEmployees
  1119.     upper = UBOUND (employee[])
  1120. '
  1121.     FOR i = 0 TO upper
  1122.         f$ = TRIM$(employee[i].firstName)
  1123.         m$ = TRIM$(employee[i].middleName)
  1124.         l$ = TRIM$(employee[i].lastName)
  1125.         IF (f$ = firstName$) THEN
  1126.             IF (m$ = middleName$) THEN
  1127.                 IF (l$ = lastName$) THEN
  1128.                     employee[i] = employee        ' update existing employee
  1129.                     found = $$TRUE
  1130.                 END IF
  1131.             END IF
  1132.         END IF
  1133.     NEXT i
  1134. '
  1135.     IFZ found THEN
  1136.         upper = upper + 1
  1137.         REDIM employee[upper]
  1138.         employee[upper] = employee            ' new entry
  1139.     END IF
  1140.     GOSUB SaveEmployees
  1141. END SUB
  1142. '
  1143. '
  1144. ' *****  LoadEmployee  *****
  1145. '
  1146. ' Put the contents of the employee variable into the approriate grids
  1147. ' in the window, then redraw the window so they become visible.
  1148. '
  1149. SUB LoadEmployee
  1150.     comments$ = TRIM$(employee.comments)
  1151.     XstStringToStringArray (@comments$, @comments$[])
  1152.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $FirstNameText, TRIM$(employee.firstName))
  1153.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $MiddleNameText, TRIM$(employee.middleName))
  1154.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $LastNameText, TRIM$(employee.lastName))
  1155.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $Address1Text, TRIM$(employee.address1))
  1156.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $Address2Text, TRIM$(employee.address2))
  1157.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $CityText, TRIM$(employee.city))
  1158.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $StateText, TRIM$(employee.state))
  1159.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $ZipText, TRIM$(employee.zip))
  1160.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $PhoneText, TRIM$(employee.phone))
  1161.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $FaxText, TRIM$(employee.fax))
  1162.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $EmailText, TRIM$(employee.email))
  1163.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $WebText, TRIM$(employee.web))
  1164.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $SSNText, TRIM$(employee.ssn))
  1165.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $Expertise1Text, TRIM$(employee.expertise1))
  1166.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $Expertise2Text, TRIM$(employee.expertise2))
  1167.     XuiSendMessage (grid, #SetTextString, 0, 0, 0, 0, $Expertise3Text, TRIM$(employee.expertise3))
  1168.     XuiSendMessage (grid, #SetTextArray, 0, 0, 0, 0, $CommentsTextArea, @comments$[])
  1169.     XuiSendMessage (grid, #Redraw, 0, 0, 0, 0, 0, 0)
  1170. END SUB
  1171. '
  1172. '
  1173. ' *****  GetEmployee  *****
  1174. '
  1175. ' Get the employee information from the appropriate grids
  1176. ' in the window and assign them to the employee variable.
  1177. '
  1178. SUB GetEmployee
  1179.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $FirstNameText, @firstName$)
  1180.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $MiddleNameText, @middleName$)
  1181.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $LastNameText, @lastName$)
  1182.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $Address1Text, @address1$)
  1183.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $Address2Text, @address2$)
  1184.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $CityText, @city$)
  1185.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $StateText, @state$)
  1186.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $ZipText, @zip$)
  1187.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $PhoneText, @phone$)
  1188.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $FaxText, @fax$)
  1189.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $EmailText, @email$)
  1190.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $WebText, @web$)
  1191.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $SSNText, @ssn$)
  1192.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $Expertise1Text, @expertise1$)
  1193.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $Expertise2Text, @expertise2$)
  1194.     XuiSendMessage (grid, #GetTextString, 0, 0, 0, 0, $Expertise3Text, @expertise3$)
  1195.     XuiSendMessage (grid, #GetTextArray, 0, 0, 0, 0, $CommentsTextArea, @comments$[])
  1196.     XstStringArrayToString (@comments$[], @comments$)
  1197.     employee.firstName = firstName$
  1198.     employee.middleName = middleName$
  1199.     employee.lastName = lastName$
  1200.     employee.address1 = address1$
  1201.     employee.address2 = address2$
  1202.     employee.city = city$
  1203.     employee.state = state$
  1204.     employee.zip = zip$
  1205.     employee.phone = phone$
  1206.     employee.fax = fax$
  1207.     employee.email = email$
  1208.     employee.web = web$
  1209.     employee.ssn = ssn$
  1210.     employee.expertise1 = expertise1$
  1211.     employee.expertise2 = expertise2$
  1212.     employee.expertise3 = expertise3$
  1213.     employee.comments = comments$
  1214. END SUB
  1215. '
  1216. '
  1217. ' *****  LoadEmployees  *****
  1218. '
  1219. ' Load the "database" of employees into the employee[] array.
  1220. '
  1221. SUB LoadEmployees
  1222.     ifile = OPEN ("employee.dat", $$RD)
  1223.     IF (ifile < 0) THEN
  1224.         message$ = "ERROR\n\nCould Not Find File\n\nemployee.dat"
  1225.         XuiMessage (@message$)
  1226.         EXIT SUB
  1227.     END IF
  1228. '
  1229.     length = LOF (ifile)
  1230.     size = SIZE (employee)
  1231.     count = length \ size
  1232.     check = count * size
  1233.     IF (check != length) THEN
  1234.         message$ = "ERROR\n\nLength of File\n\nemployee.dat\n\nNot A Multiple\nOf SIZE(employee)"
  1235.         XuiMessage (@message$)
  1236.         CLOSE (ifile)
  1237.         EXIT SUB
  1238.     END IF
  1239. '
  1240.     upper = count - 1
  1241.     DIM employee[upper]
  1242.     READ [ifile], employee[]
  1243.     CLOSE (ifile)
  1244. END SUB
  1245. '
  1246. '
  1247. ' *****  SaveEmployees  *****
  1248. '
  1249. ' Rename the existing "employee.dat" file to "employee.bak",
  1250. ' then save the employee[] array as file "employee.dat".
  1251. '
  1252. SUB SaveEmployees
  1253.     XstDeleteFile (@"\\xb\\employee.bak")
  1254.     XstRenameFile (@"\\xb\\employee.dat", @"\\xb\\employee.bak")
  1255. '
  1256.     ofile = OPEN ("employee.dat", $$WRNEW)
  1257.     IF (ofile < 3) THEN
  1258.         message$ = "ERROR\n\nCannot Open File\n\nemployee.dat"
  1259.         XuiMessage (@message$)
  1260.     ELSE
  1261.         WRITE [ofile], employee[]
  1262.         CLOSE (ofile)
  1263.     END IF
  1264. END SUB
  1265. END FUNCTION
  1266. END PROGRAM
  1267.