home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / inet / root.2 / usr / lib / scoadmin / aas / aasGUI / aasGUI~
Text File  |  1998-08-19  |  107KB  |  2,965 lines

  1. #!/bin/osavtcl
  2. # Copyright (c) 1992-1998 The Santa Cruz Operation, Inc.. All Rights Reserved. 
  3. #                                                                         
  4. #        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE               
  5. #                   SANTA CRUZ OPERATION INC.                             
  6. #                                                                         
  7. #   The copyright notice above does not evidence any actual or intended   
  8. #   publication of such source code.                                      
  9.  
  10. #******************************************************************************
  11. #
  12. #    Copyright (C) 1992-1998 The Santa Cruz Operation, Inc.
  13. #        All Rights Reserved.
  14. #
  15. #    The information in this file is provided for the exclusive use of
  16. #    the licensees of The Santa Cruz Operation, Inc.  Such users have the
  17. #    right to use, modify, and incorporate this code into other products
  18. #    for purposes authorized by the license agreement provided they include
  19. #    this notice and the associated copyright notice with any such product.
  20. #    The information in this file is provided "AS IS" without warranty.
  21. #
  22. #===============================================================================
  23. #@package: SCO_AAS_MSGS SCO_AAS_MSGS
  24. proc SCO_AAS_MSGS {} {}
  25. global SCO_AAS_MSGS
  26. set SCO_AAS_MSGS(@catalog@) {aas.cat@sa 1}
  27. set SCO_AAS_MSGS(MSG_APP_TITLE) {1 {Address Allocation Manager}}
  28. set SCO_AAS_MSGS(MSG_TITLE) {2 {Address Allocation Manager on %s}}
  29. set SCO_AAS_MSGS(MSG_VERSION) {3 {Address Allocation Manager %s}}
  30. set SCO_AAS_MSGS(MSG_WAIT) {4 {Please wait...}}
  31. set SCO_AAS_MSGS(MSG_HOST) {5 Host}
  32. set SCO_AAS_MSGS(MSG_HOST_MN) {6 t}
  33. set SCO_AAS_MSGS(MSG_OPEN_HOST) {7 {Open host...}}
  34. set SCO_AAS_MSGS(MSG_OPEN_HOST_MN) {8 O}
  35. set SCO_AAS_MSGS(MSG_OPEN_HOST_SH) {9 {Manage address allocation on another host}}
  36. set SCO_AAS_MSGS(MSG_EXIT) {10 Exit}
  37. set SCO_AAS_MSGS(MSG_EXIT_MN) {11 x}
  38. set SCO_AAS_MSGS(MSG_EXIT_SH) {12 {Exit Address Allocation Manager}}
  39. set SCO_AAS_MSGS(MSG_EDIT) {13 Pools}
  40. set SCO_AAS_MSGS(MSG_EDIT_MN) {14 P}
  41. set SCO_AAS_MSGS(MSG_ADD) {15 Add}
  42. set SCO_AAS_MSGS(MSG_ADD_INET) {16 Add...}
  43. set SCO_AAS_MSGS(MSG_ADD_INET_MN) {17 A}
  44. set SCO_AAS_MSGS(MSG_ADD_INET_SH) {18 {Add a new address pool}}
  45. set SCO_AAS_MSGS(MSG_MODIFY) {19 Modify...}
  46. set SCO_AAS_MSGS(MSG_MODIFY_MN) {20 M}
  47. set SCO_AAS_MSGS(MSG_MODIFY_SH) {21 {Modify the selected address pool}}
  48. set SCO_AAS_MSGS(MSG_DELETE) {22 Delete}
  49. set SCO_AAS_MSGS(MSG_DELETE_MN) {23 D}
  50. set SCO_AAS_MSGS(MSG_DELETE_SH) {24 {Delete the selected address pool}}
  51. set SCO_AAS_MSGS(MSG_RENAME) {25 Rename...}
  52. set SCO_AAS_MSGS(MSG_RENAME_MN) {26 R}
  53. set SCO_AAS_MSGS(MSG_RENAME_SH) {27 {Rename the selected address pool}}
  54. set SCO_AAS_MSGS(MSG_CONTROL) {28 Control...}
  55. set SCO_AAS_MSGS(MSG_CONTROL_MN) {29 C}
  56. set SCO_AAS_MSGS(MSG_CONTROL_SH) {30 {Control the status of the selected addresses}}
  57. set SCO_AAS_MSGS(MSG_VIEW) {31 View}
  58. set SCO_AAS_MSGS(MSG_VIEW_MN) {32 V}
  59. set SCO_AAS_MSGS(MSG_POOL_DEFINITION) {33 {Pool Definition}}
  60. set SCO_AAS_MSGS(MSG_POOL_DEFINITION_MN) {34 P}
  61. set SCO_AAS_MSGS(MSG_POOL_DEFINITION_SH) {35 {View the address pool definitions}}
  62. set SCO_AAS_MSGS(MSG_ADDRESS_ALLOCATION) {36 {Address Allocation}}
  63. set SCO_AAS_MSGS(MSG_ADDRESS_ALLOCATION_MN) {37 A}
  64. set SCO_AAS_MSGS(MSG_ADDRESS_ALLOCATION_SH) {38 {View current address allocation for the selected pool}}
  65. set SCO_AAS_MSGS(MSG_SERVICE_ALLOCATION) {39 {Service Allocation}}
  66. set SCO_AAS_MSGS(MSG_SERVICE_ALLOCATION_MN) {40 S}
  67. set SCO_AAS_MSGS(MSG_SERVICE_ALLOCATION_SH) {41 {View current service allocation for the selected pool}}
  68. set SCO_AAS_MSGS(MSG_SERVER) {42 Server}
  69. set SCO_AAS_MSGS(MSG_SERVER_MN) {43 S}
  70. set SCO_AAS_MSGS(MSG_SERVER_PARAM) {44 {Edit Server Parameters...}}
  71. set SCO_AAS_MSGS(MSG_SERVER_PARAM_MN) {45 E}
  72. set SCO_AAS_MSGS(MSG_SERVER_PARAM_SH) {46 {Configure address server parameters}}
  73. set SCO_AAS_MSGS(MSG_SERVER_START) {47 {Start Server}}
  74. set SCO_AAS_MSGS(MSG_SERVER_START_MN) {48 S}
  75. set SCO_AAS_MSGS(MSG_SERVER_START_SH) {49 {Start the address allocation server}}
  76. set SCO_AAS_MSGS(MSG_SERVER_STOP) {50 {Stop Server}}
  77. set SCO_AAS_MSGS(MSG_SERVER_STOP_MN) {51 p}
  78. set SCO_AAS_MSGS(MSG_SERVER_STOP_SH) {52 {Stop the address allocation server}}
  79. set SCO_AAS_MSGS(MSG_SERVER_RECONFIG) {53 Reconfigure}
  80. set SCO_AAS_MSGS(MSG_SERVER_RECONFIG_MN) {54 R}
  81. set SCO_AAS_MSGS(MSG_SERVER_RECONFIG_SH) {55 {Reconfigure the address allocation server}}
  82. set SCO_AAS_MSGS(MSG_DB) {56 Database}
  83. set SCO_AAS_MSGS(MSG_DB_MN) {57 D}
  84. set SCO_AAS_MSGS(MSG_DB_VIEWTRAN) {58 {View Transaction Database}}
  85. set SCO_AAS_MSGS(MSG_DB_VIEWTRAN_MN) {59 T}
  86. set SCO_AAS_MSGS(MSG_DB_VIEWTRAN_SH) {60 {View the transaction database file}}
  87. set SCO_AAS_MSGS(MSG_DB_VIEWCKPT) {61 {View Checkpoint Files...}}
  88. set SCO_AAS_MSGS(MSG_DB_VIEWCKPT_MN) {62 V}
  89. set SCO_AAS_MSGS(MSG_DB_VIEWCKPT_SH) {63 {View the checkpoint files}}
  90. set SCO_AAS_MSGS(MSG_DB_REMTRAN) {64 {Delete Transaction Database}}
  91. set SCO_AAS_MSGS(MSG_DB_REMTRAN_MN) {65 D}
  92. set SCO_AAS_MSGS(MSG_DB_REMTRAN_SH) {66 {Delete the transaction database file}}
  93. set SCO_AAS_MSGS(MSG_DB_REMCKPT) {67 {Delete Checkpoint File...}}
  94. set SCO_AAS_MSGS(MSG_DB_REMCKPT_MN) {68 C}
  95. set SCO_AAS_MSGS(MSG_DB_REMCKPT_SH) {69 {Delete a checkpoint file}}
  96. set SCO_AAS_MSGS(MSG_DB_REMALL) {70 {Delete All}}
  97. set SCO_AAS_MSGS(MSG_DB_REMALL_MN) {71 A}
  98. set SCO_AAS_MSGS(MSG_DB_REMALL_SH) {72 {Remove the transaction database and checkpoint files}}
  99. set SCO_AAS_MSGS(MSG_OPTIONS) {73 Options}
  100. set SCO_AAS_MSGS(MSG_OPTIONS_MN) {74 O}
  101. set SCO_AAS_MSGS(MSG_AUTO_REFRESH_SH) {75 {current view}}
  102. set SCO_AAS_MSGS(MSG_POOL_NAME) {76 {Pool name:}}
  103. set SCO_AAS_MSGS(MSG_POOL_NAME_SH) {77 {Name of the address pool}}
  104. set SCO_AAS_MSGS(MSG_ADDR_IN_POOL) {78 Addresses:}
  105. set SCO_AAS_MSGS(MSG_ADDR_IN_POOL_SH) {79 {List of all addresses in this pool}}
  106. set SCO_AAS_MSGS(MSG_IP_ADD) {80 Add...}
  107. set SCO_AAS_MSGS(MSG_IP_ADD_SH) {81 {Add an address or a range of addresses to the pool}}
  108. set SCO_AAS_MSGS(MSG_IP_MOD) {82 Modify...}
  109. set SCO_AAS_MSGS(MSG_IP_MOD_SH) {83 {Change the selected address or range of addresses}}
  110. set SCO_AAS_MSGS(MSG_IP_DEL) {84 Delete}
  111. set SCO_AAS_MSGS(MSG_IP_DEL_SH) {85 {Remove the selected addresses from the pool}}
  112. set SCO_AAS_MSGS(MSG_INET_POOL) {86 {Address Pool Configuration}}
  113. set SCO_AAS_MSGS(MSG_SELECT_AR) {87 Select:}
  114. set SCO_AAS_MSGS(MSG_SELECT_AR_SH) {88 {Select to enter an address or an address range}}
  115. set SCO_AAS_MSGS(MSG_SELECT_ADDR) {89 Address}
  116. set SCO_AAS_MSGS(MSG_SELECT_ADDR_SH) {90 {Define an address}}
  117. set SCO_AAS_MSGS(MSG_SELECT_RANGE) {91 Range}
  118. set SCO_AAS_MSGS(MSG_SELECT_RANGE_SH) {92 {Define an address range}}
  119. set SCO_AAS_MSGS(MSG_ADDR_RANGE) {93 {Address range:}}
  120. set SCO_AAS_MSGS(MSG_ADDR_RANGE_SH) {94 {Enter an address range or an address}}
  121. set SCO_AAS_MSGS(MSG_ADDR) {95 Address:}
  122. set SCO_AAS_MSGS(MSG_START_ADDR) {96 {Start address:}}
  123. set SCO_AAS_MSGS(MSG_END_ADDR) {97 {End address:}}
  124. set SCO_AAS_MSGS(MSG_IP_SH) {98 {IP address}}
  125. set SCO_AAS_MSGS(MSG_IP_START_SH) {99 {First IP address in range}}
  126. set SCO_AAS_MSGS(MSG_IP_END_SH) {100 {Last IP address in range}}
  127. set SCO_AAS_MSGS(MSG_ADD_ADDRESS) {101 {Add Address or Address Range}}
  128. set SCO_AAS_MSGS(MSG_MOD_ADDRESS) {102 {Modify Address or Address Range}}
  129. set SCO_AAS_MSGS(ERR_DELETE_POOL) {103 {Failed to delete address pool %s}}
  130. set SCO_AAS_MSGS(ERR_REPLACE_POOL) {104 {Failed to modify pool %s}}
  131. set SCO_AAS_MSGS(ERR_CREATE_POOL) {105 {Failed to create pool %s}}
  132. set SCO_AAS_MSGS(MSG_AYS_DEL) {106 {Are you sure you want to delete this pool entry?\n\n%s}}
  133. set SCO_AAS_MSGS(ERR_RENAME_POOL_NAME_EXISTS) {107 {Failed to rename %1$s to %2$s:\n%3$s already exists}}
  134. set SCO_AAS_MSGS(MSG_NEW_POOL_NAME) {108 {New pool name}}
  135. set SCO_AAS_MSGS(MSG_NEW_POOL_NAME_SH) {109 {New name of the address pool}}
  136. set SCO_AAS_MSGS(MSG_RENAME_POOL_TITLE) {110 {Rename Pool}}
  137. set SCO_AAS_MSGS(MSG_NOT_ALLOCATED) {111 UNUSED}
  138. set SCO_AAS_MSGS(MSG_ALLOCATED) {112 ALLOCATED}
  139. set SCO_AAS_MSGS(MSG_RELEASED) {113 RELEASED}
  140. set SCO_AAS_MSGS(MSG_EXPIRED) {114 EXPIRED}
  141. set SCO_AAS_MSGS(MSG_DISABLED) {115 DISABLED}
  142. set SCO_AAS_MSGS(MSG_TEMPORARY) {116 TEMPORARY}
  143. set SCO_AAS_MSGS(ERR_CONTROL_ACTION) {117 {Failed to modify the address status}}
  144. set SCO_AAS_MSGS(ERR_CONTROL_NO_CHANGE) {118 {The %s operation resulted in no changes\nbeing made to the selected addresses.}}
  145. set SCO_AAS_MSGS(MSG_ACTION) {119 Action:}
  146. set SCO_AAS_MSGS(MSG_CONTROL_ENABLE) {120 Enable}
  147. set SCO_AAS_MSGS(MSG_CONTROL_ENABLE_SH) {121 {Enable the selected addresses}}
  148. set SCO_AAS_MSGS(MSG_CONTROL_DISABLE) {122 Disable}
  149. set SCO_AAS_MSGS(MSG_CONTROL_DISABLE_SH) {123 {Disable the selected addresses after its current lease}}
  150. set SCO_AAS_MSGS(MSG_CONTROL_RELEASE) {124 Release}
  151. set SCO_AAS_MSGS(MSG_CONTROL_RELEASE_SH) {125 {Release the lease for the selected addresses}}
  152. set SCO_AAS_MSGS(MSG_CONTROL_NAME) {126 {Control Address Status}}
  153. set SCO_AAS_MSGS(ERR_DELETE_SERVER_ATTR) {127 {Failed to delete server attributes}}
  154. set SCO_AAS_MSGS(ERR_CREATE_SERVER_ATTR) {128 {Failed to create server attributes}}
  155. set SCO_AAS_MSGS(ERR_GET_SERVER_ATTR) {129 {Failed to read the server attributes}}
  156. set SCO_AAS_MSGS(MSG_PWD_ADD) {130 {Password will be added}}
  157. set SCO_AAS_MSGS(ERR_PWD_ADD_EXIST) {131 {Failed to add password, it already exists}}
  158. set SCO_AAS_MSGS(MSG_PWD_DEL) {132 {Password will be deleted}}
  159. set SCO_AAS_MSGS(ERR_PWD_DEL_EXIST) {133 {Failed to delete password, it does not exist}}
  160. set SCO_AAS_MSGS(ERR_PWD_VERIFY) {134 {Password verify failed, password does not exist}}
  161. set SCO_AAS_MSGS(MSG_PWD_VERIFY) {135 {Password verify passed, password exists}}
  162. set SCO_AAS_MSGS(ERR_PWD_BAD_ACTION) {136 {Password maintenance failure - invalid action %s}}
  163. set SCO_AAS_MSGS(MSG_DBASE) {137 {Database directory:}}
  164. set SCO_AAS_MSGS(MSG_DBASE_SH) {138 {Location of the transaction database file}}
  165. set SCO_AAS_MSGS(MSG_COMP_SIZE) {139 {Database compression size (bytes):}}
  166. set SCO_AAS_MSGS(MSG_COMP_SIZE_SH) {140 {Size of the transaction database at which it is compressed}}
  167. set SCO_AAS_MSGS(MSG_CHKP_DIR) {141 {Checkpoint directory:}}
  168. set SCO_AAS_MSGS(MSG_CHKP_DIR_SH) {142 {Location of the checkpoint files}}
  169. set SCO_AAS_MSGS(MSG_CHKP_INTVL) {143 {Checkpoint interval (seconds):}}
  170. set SCO_AAS_MSGS(MSG_CHKP_INTVL_SH) {144 {Number of seconds between checkpoints}}
  171. set SCO_AAS_MSGS(MSG_NUM_CHKP) {145 {Number of checkpoints:}}
  172. set SCO_AAS_MSGS(MSG_NUM_CHKP_SH) {146 {Number of checkpoint files retained by the server}}
  173. set SCO_AAS_MSGS(MSG_PASSWD) {147 Password:}
  174. set SCO_AAS_MSGS(MSG_PASSWD_SH) {148 {Password to authenticate services requesting addresses}}
  175. set SCO_AAS_MSGS(MSG_PASSWD_ADD) {149 {  Add  }}
  176. set SCO_AAS_MSGS(MSG_PASSWD_ADD_SH) {150 {Add this password to the list of passwords}}
  177. set SCO_AAS_MSGS(MSG_PASSWD_DEL) {151 Delete}
  178. set SCO_AAS_MSGS(MSG_PASSWD_DEL_SH) {152 {Delete this password from the list of passwords}}
  179. set SCO_AAS_MSGS(MSG_PASSWD_VER) {153 Verify}
  180. set SCO_AAS_MSGS(MSG_PASSWD_VER_SH) {154 {Verify if this password exists in the database}}
  181. set SCO_AAS_MSGS(MSG_SERV) {155 {Edit Server Parameters}}
  182. set SCO_AAS_MSGS(ERR_GET_SERVER_CONFIG) {156 {Failed to read server configuration}}
  183. set SCO_AAS_MSGS(ERR_START_SERVER) {157 {Failed to start the address allocation server}}
  184. set SCO_AAS_MSGS(ERR_STOP_SERVER) {158 {Failed to stop the address allocation server}}
  185. set SCO_AAS_MSGS(ERR_RESTART_SERVER) {159 {Failed to restart the address allocation server}}
  186. set SCO_AAS_MSGS(MSG_RECONFIG) {160 Restart}
  187. set SCO_AAS_MSGS(MSG_RECONFIG_INFO) {161 {You have changed the database directory.  This requires\na fresh start of the Address Allocation Server}}
  188. set SCO_AAS_MSGS(ERR_RECONFIG_SERVER) {162 {Failed to reconfigure the Address Allocation Server}}
  189. set SCO_AAS_MSGS(MSG_FILE_PATH) {163 {Path name:}}
  190. set SCO_AAS_MSGS(MSG_FILE_PATH_SH) {164 {Path name}}
  191. set SCO_AAS_MSGS(MSG_FILE_SIZE) {165 {File size:}}
  192. set SCO_AAS_MSGS(MSG_FILE_SIZE_SH) {166 {Size of the file}}
  193. set SCO_AAS_MSGS(MSG_FILE_MTIME) {167 {Modification time:}}
  194. set SCO_AAS_MSGS(MSG_FILE_MTIME_SH) {168 {Time the file was last modified}}
  195. set SCO_AAS_MSGS(MSG_FILE_ATIME) {169 {Access time:}}
  196. set SCO_AAS_MSGS(MSG_FILE_ATIME_SH) {170 {Time the file was last accessed}}
  197. set SCO_AAS_MSGS(ERR_GET_VIEW_TDB) {171 {Failed to get transaction database information}}
  198. set SCO_AAS_MSGS(MSG_TDB) {172 {View Transaction Database File Properties}}
  199. set SCO_AAS_MSGS(MSG_CKPT_NAME) {173 {File name}}
  200. set SCO_AAS_MSGS(MSG_CKPT_TIME) {174 {Creation time}}
  201. set SCO_AAS_MSGS(MSG_CKPT_FILES_SH) {175 {List of all checkpoint files}}
  202. set SCO_AAS_MSGS(MSG_CKPT_FILE) {176 {View Checkpoint File Properties}}
  203. set SCO_AAS_MSGS(ERR_CKPT_EMPTY) {177 {There are no checkpoint files}}
  204. set SCO_AAS_MSGS(ERR_CKPT_VIEW) {178 {Failed to get checkpoint file information}}
  205. set SCO_AAS_MSGS(MSG_CKPT_REMOVE) {179 {Delete Checkpoint File}}
  206. set SCO_AAS_MSGS(MSG_CKPT_VIEW) {180 {View Checkpoint File}}
  207. set SCO_AAS_MSGS(ERR_BAD_ATTR) {181 {Failed to perform remove operation.\n%s is not a valid attribute}}
  208. set SCO_AAS_MSGS(ERR_DELETE_DB) {182 {Remove database operation failed}}
  209. set SCO_AAS_MSGS(MSG_DELETE_TDB) {183 {Are you sure that you want to delete the transaction database ?\nIf you delete the transaction database, the current status of the\nAddress Allocation Server will be destroyed.}}
  210. set SCO_AAS_MSGS(MSG_DELETE_CKPT) {184 {Are you sure that you want to delete this checkpoint file ?\nIf you delete a checkpoint file, the current status of the Address Allocation Server\nmay be destroyed.}}
  211. set SCO_AAS_MSGS(MSG_DELETE_ALL) {185 {Are you sure that you want to delete the transaction database\nand the checkpoint files ?\nIf you do this, the current status of the Address Allocation server\nwill be destroyed.}}
  212. set SCO_AAS_MSGS(MSG_VIEW_TYPE) {186 Type}
  213. set SCO_AAS_MSGS(MSG_VIEW_ADDRESSES) {187 {Addresses in pool}}
  214. set SCO_AAS_MSGS(MSG_VIEW_POOL_NAME) {188 {Pool name}}
  215. set SCO_AAS_MSGS(MSG_VIEW_TOTAL) {189 Total}
  216. set SCO_AAS_MSGS(MSG_VIEW_USED) {190 Used}
  217. set SCO_AAS_MSGS(MSG_VIEW_ADDRESS) {191 Address}
  218. set SCO_AAS_MSGS(MSG_VIEW_STATUS) {192 Status}
  219. set SCO_AAS_MSGS(MSG_VIEW_SERVICE) {193 Service}
  220. set SCO_AAS_MSGS(MSG_VIEW_LEASE) {194 Lease}
  221. set SCO_AAS_MSGS(MSG_VIEW_AllOC_TIME) {195 Allocated}
  222. set SCO_AAS_MSGS(MSG_VIEW_RELEASE_TIME) {196 Released}
  223. set SCO_AAS_MSGS(MSG_VIEW_CLIENT_ID) {197 {Client ID}}
  224. set SCO_AAS_MSGS(ERR_POOL_INFO) {198 {Failed to read pool information}}
  225. set SCO_AAS_MSGS(ERR_INVALID_ADDRTYPE) {199 {Error reading pool information: invalid address type %s}}
  226. set SCO_AAS_MSGS(MSG_VIEW_POOL_DEF_LABEL) {200 {Pools defined on %s:}}
  227. set SCO_AAS_MSGS(MSG_VIEW_ADDR_ALLOC_LABEL) {201 {Address allocation by pool on %s:}}
  228. set SCO_AAS_MSGS(MSG_VIEW_SERV_ALLOC_LABEL) {202 {Address allocation by pool and service on %s:}}
  229. set SCO_AAS_MSGS(ERR_NO_INTERVAL) {203 {An interval must be specified}}
  230. set SCO_AAS_MSGS(MSG_AUTO_REFRESH_TITLE) {204 {Set auto refresh interval}}
  231. set SCO_AAS_MSGS(MSG_AUTO_REFRESH_LABEL) {205 {Refresh interval (minutes)}}
  232. set SCO_AAS_MSGS(MSG_EXPAND_ALL) {206 {Expand All}}
  233. set SCO_AAS_MSGS(MSG_EXPAND_ALL_SH) {207 {Expand all entries in the main list}}
  234. set SCO_AAS_MSGS(MSG_COLLAPSE_ALL) {208 {Collapse All}}
  235. set SCO_AAS_MSGS(MSG_COLLAPSE_ALL_SH) {209 {Collapse all entries in the main list}}
  236. set SCO_AAS_MSGS(MSG_EXPAND) {210 Expand}
  237. set SCO_AAS_MSGS(MSG_EXPAND_SH) {211 {Expand the selected entry in the main list}}
  238. set SCO_AAS_MSGS(MSG_COLLAPSE) {212 Collapse}
  239. set SCO_AAS_MSGS(MSG_COLLAPSE_SH) {213 {Collapse the selected entry in the main list}}
  240. #@package: browser \
  241.     browser:Init browser:MenuOpts browser:SetSensitivity \
  242.     browser:ExpandCollapseCB browser:SetStateCB \
  243.     browser:SetDisplayEntry browser:SetParent browser:SetChildren \
  244.     browser:RemDisplayEntry browser:RenameDisplayEntry browser:GetParent \
  245.     browser:GetChildren browser:GetParentPos browser:ShowDisplayEntry \
  246.     browser:HideDisplayEntry browser:ReDisplay browser:FindItemParent \
  247.     browser:FindItemParentPos browser:GetItemFromPos \
  248.     browser:RemoveEntryFromPos browser:RemoveSelectedEntry browser:Search \
  249.     browser:GetSelectedItem browser:GetSelectedItemPos \
  250.     browser:Highlight browser:IsParent browser:DeleteAll \
  251.     browser:GetParentDrawnList
  252. proc browser:Init {browserW {data {}}} {
  253.     global BROWSER BROWSER_DATA BROWSER_STATE
  254.     global BROWSER_NUM_COL_PARENT BROWSER_NUM_COL_CHILD
  255.     set BROWSER $browserW
  256.     if [lempty $data] {
  257.     set data { { {{ICON 1 1 5} {STRING 15} {STRING 50} {DATA} {DATA}}
  258.         {{ICON 1 1 1} {STRING 15} {STRING 40} {DATA} {DATA}} medBoldFont}
  259.       { {{ICON 2} {STRING 15 10 10} {STRING 38} {DATA} {DATA}}
  260.         {{ICON 1} {STRING 20 5 5} {STRING 40} {DATA} {DATA}} medNormalFont}
  261.     }
  262.     }
  263.     set i 0
  264.     foreach levelData $data {
  265.     incr i
  266.     set BROWSER_DATA(level_$i) $levelData
  267.     }
  268.     set col_desc_list [lindex $BROWSER_DATA(level_1) 0]
  269.     set col_desc [lindex $col_desc_list 0]
  270.     set BROWSER_NUM_COL_PARENT [llength [lindex $BROWSER_DATA(level_1) 0]] 
  271.     set BROWSER_NUM_COL_CHILD  [llength [lindex $BROWSER_DATA(level_2) 0]]
  272.     set BROWSER_STATE COLLAPSED
  273. } ;# browser:Init
  274. proc browser:MenuOpts {msgID pulldown dialog} {
  275.     set expandAll [VtPushButton $pulldown.exp_all \
  276.         -label [IntlLocalizeMsg ${msgID}_MSG_EXPAND_ALL] \
  277.         -shortHelpCallback SaShortHelpCB \
  278.         -shortHelpString [IntlLocalizeMsg ${msgID}_MSG_EXPAND_ALL_SH] \
  279.         -callback "browser:SetStateCB EXPANDED"]
  280.     set collapseAll [VtPushButton $pulldown.col_all \
  281.         -label [IntlLocalizeMsg ${msgID}_MSG_COLLAPSE_ALL] \
  282.         -shortHelpCallback SaShortHelpCB \
  283.         -shortHelpString [IntlLocalizeMsg ${msgID}_MSG_COLLAPSE_ALL_SH]\
  284.         -callback "browser:SetStateCB COLLAPSED"]
  285.     set expand [VtPushButton $pulldown.exp \
  286.         -label [IntlLocalizeMsg ${msgID}_MSG_EXPAND] \
  287.         -shortHelpCallback SaShortHelpCB \
  288.         -shortHelpString [IntlLocalizeMsg ${msgID}_MSG_EXPAND_SH] \
  289.         -autoLock browser:ExpandCollapseCB \
  290.         -callback browser:ExpandCollapseCB ]
  291.     set collapse [VtPushButton $pulldown.col \
  292.         -label [IntlLocalizeMsg ${msgID}_MSG_COLLAPSE] \
  293.         -shortHelpCallback SaShortHelpCB \
  294.         -shortHelpString [IntlLocalizeMsg ${msgID}_MSG_COLLAPSE_SH] \
  295.         -autoLock browser:ExpandCollapseCB \
  296.         -callback browser:ExpandCollapseCB ]
  297.     VxSetVar $dialog expandAll   $expandAll
  298.     VxSetVar $dialog collapseAll $collapseAll
  299.     VxSetVar $dialog expand      $expand
  300.     VxSetVar $dialog collapse    $collapse
  301. } ;# browser:MenuOpts
  302. proc browser:SetSensitivity {dialog} {
  303.     global BROWSER displayData
  304.     set expandAll   [VxGetVar $dialog expandAll]
  305.     set collapseAll [VxGetVar $dialog collapseAll]
  306.     set expand      [VxGetVar $dialog expand]
  307.     set collapse    [VxGetVar $dialog collapse]
  308.     set selected [VtDrawnListGetSelectedItem $BROWSER -byPositionList]
  309.     if {$selected == 0} {set selected {}}
  310.     if [lempty $selected] {
  311.     VtSetSensitive $expand 0
  312.     VtSetSensitive $collapse 0
  313.     VtSetSensitive $expandAll 0
  314.     VtSetSensitive $collapseAll 0
  315.     VtUnLock -once
  316.     return
  317.     } else {
  318.     VtSetSensitive $expandAll 1
  319.     VtSetSensitive $collapseAll 1
  320.     }
  321.     set selected [lindex [VtDrawnListGetSelectedItem $BROWSER -byRecordList] 0]
  322.     set type [browser:GetType $selected]
  323.     if [cequal CHILD $type] {
  324.     VtSetSensitive $expand 0
  325.     VtSetSensitive $collapse 0
  326.     VtUnLock -once
  327.     return
  328.     }
  329.     set parentId [browser:GetParentId $type $selected]
  330.     set ent $displayData($parentId)
  331.     keylget ent state state
  332.     if [cequal EXPANDED $state] {
  333.     VtSetSensitive $expand 0
  334.     VtSetSensitive $collapse 1
  335.     } else {
  336.     VtSetSensitive $expand 1
  337.     VtSetSensitive $collapse 0
  338.     }
  339. } ;# browser:SetSensitivity
  340. proc browser:ExpandCollapseCB {cbs} {
  341.     global displayData BROWSER BROWSER_DATA
  342.     if {[info exists displayData] == 0} {
  343.     VtUnLock
  344.     return
  345.     }
  346.     keylget cbs dialog dialog
  347.     set expand   [VxGetVar $dialog expand]
  348.     set collapse [VxGetVar $dialog collapse]
  349.     set pos [VtDrawnListGetSelectedItem $BROWSER -byPositionList]
  350.     set selected [lindex [VtDrawnListGetSelectedItem $BROWSER -byRecordList] 0]
  351.     set type [browser:GetType $selected]
  352.     if [cequal $type CHILD] {
  353.     if {![lempty [info commands SelectChildCB]] } {    ;#CALLOUT
  354.         SelectChildCB $cbs            ;# modify child
  355.     }
  356.     VtUnLock
  357.     return
  358.     }
  359.     set parentId [browser:GetParentId $type $selected]
  360.     set entity $displayData($parentId)
  361.     keylget entity state state
  362.     keylget entity children children
  363.     set numChildren [llength $children]
  364.     if {$numChildren == 0} {
  365.     VtUnLock -once
  366.     return
  367.     }
  368.     set levelData $BROWSER_DATA(level_2)
  369.     switch -- $state {
  370.     EXPANDED {        ;# collapse the browser
  371.         incr pos
  372.         loop i 0 $numChildren 1 {
  373.         VtDrawnListDeleteItem $BROWSER -position $pos
  374.         }
  375.         keylset entity state COLLAPSED
  376.         keylset entity displayed 1
  377.         set displayData($parentId) $entity
  378.     }
  379.     COLLAPSED {        ;# expand the browser
  380.         keylget entity children children
  381.         foreach child $children {
  382.         incr pos
  383.         VtDrawnListAddItem $BROWSER \
  384.             -position $pos \
  385.             -MOTIF_formatList [lindex $levelData 0]\
  386.             -CHARM_formatList [lindex $levelData 1]\
  387.             -overrideFont [lindex $levelData 2]\
  388.             -fieldList $child
  389.         }
  390.         keylset entity state EXPANDED
  391.         keylset entity displayed [expr $numChildren + 1]
  392.         set displayData($parentId) $entity
  393.     }
  394.     }
  395.     browser:SetSensitivity $dialog
  396.     VtUnLock -once
  397. }
  398. proc browser:SetStateCB {newState cbs} {
  399.     global displayData BROWSER_STATE
  400.     if {[info exists displayData] == 0} {
  401.     VtUnLock
  402.     return
  403.     }
  404.     set BROWSER_STATE $newState
  405.     for_array_keys parentId displayData {
  406.     set ent $displayData($parentId)
  407.     keylget ent state state
  408.     if [cequal $state $newState] {
  409.         continue
  410.     }
  411.     keylset ent state $newState
  412.     set displayData($parentId) $ent
  413.     }
  414.     browser:ReDisplay
  415.     browser:SetSensitivity [keylget cbs dialog]
  416.     VtUnLock 
  417. } ;# browser:SetStateCB
  418. proc browser:SetDisplayEntry {parentId parent subentries} {
  419.     global displayData BROWSER_STATE
  420.     set displayed 0
  421.     if {[info exists displayData] && \
  422.     ([lsearch [array names displayData] $parentId] != -1)} {
  423.     set oldEntry $displayData($parentId)
  424.     set state [keylget oldEntry state]
  425.     set displayed [keylget oldEntry displayed]
  426.     } elseif {[cequal $BROWSER_STATE EXPANDED]} {
  427.     set state EXPANDED
  428.     } else {
  429.     set state COLLAPSED
  430.     }
  431.     set children {}
  432.     foreach child $subentries {
  433.     lappend children [lappend child $parentId CHILD]
  434.     }
  435.     lappend parent $parentId PARENT
  436.     keylset newEntry data "$parent"
  437.     keylset newEntry children $children
  438.     keylset newEntry state $state
  439.     keylset newEntry displayed $displayed
  440.     set displayData($parentId) $newEntry
  441. } ;# browser:SetDisplayEntry 
  442. proc browser:SetParent {parentId data} {
  443.     global displayData
  444.     lappend data $parentId PARENT 
  445.     set entry $displayData($parentId)
  446.     keylset entry data $data
  447.     set displayData($parentId) $entry
  448. } ;# SetParent
  449. proc browser:SetChildren {parentId subentries} {
  450.     global displayData
  451.     set children {}
  452.     foreach child $subentries {
  453.     lappend children [lappend child $parentId CHILD]
  454.     }
  455.     set entry $displayData($parentId)
  456.     keylset entry children $children
  457.     set displayData($parentId) $entry
  458. } ;#SetChildren
  459. proc browser:RemDisplayEntry {parentId} {
  460.     global displayData
  461.     unset displayData($parentId)
  462. } ;# RemDisplayEntry
  463. proc browser:RenameDisplayEntry {oldParentId newParentId} {
  464.     global displayData
  465.     set entry $displayData($oldParentId)
  466.     keylget entry data data
  467.     lvarpop data end    ;# remove PARENT flag
  468.     lvarpop data end    ;# remove oldParentId 
  469.     lappend data $newParentId PARENT
  470.     keylset entry data "$data"
  471.     keylget entry children subentries 
  472.     set children {}
  473.     foreach child $subentries {
  474.         lvarpop child end    ;# remove PARENT flag
  475.         lvarpop child end    ;# remove oldParentId 
  476.     lappend children [lappend child $newParentId CHILD]
  477.     }
  478.     keylset entry children $children
  479.     set displayData($newParentId) $entry
  480.     unset displayData($oldParentId)
  481. } ;# RenameDisplayEntry
  482. proc browser:GetParent {parentId} {
  483.     global displayData
  484.     set entry $displayData($parentId) 
  485.     keylget entry data data
  486.     lvarpop data end    ;# remove PARENT flag
  487.     lvarpop data end    ;# remove parentId 
  488.     return $data
  489. } ;# GetParent
  490. proc browser:GetChildren {parentId} {
  491.     global displayData
  492.     set entry $displayData($parentId) 
  493.     keylget entry children children 
  494.     set childList {}
  495.     foreach item $children {
  496.         lvarpop item end    ;# remove CHILD flag
  497.         lvarpop item end    ;# remove parentId 
  498.     lappend childList $item 
  499.     }
  500.     return $childList
  501. } ;#GetChildren
  502. proc browser:GetParentPos {parentId} {
  503.     global displayData BROWSER BROWSER_DATA
  504.     if {! [lempty [info commands SortParentList]] } {    ;#CALLOUT
  505.     set parents [SortParentList [array names displayData]]
  506.     } else {
  507.     set parents [lsort -increasing [array names displayData]]
  508.     }
  509.     if {[lsearch $parents $parentId] == -1} {
  510.     return 0 ;# parentId is not in displayData
  511.     }
  512.     set pos 1    ;# DrawnList starts from 1
  513.     foreach parent $parents {
  514.     set entry $displayData($parent)
  515.     keylget entry displayed displayed
  516.     if {[cequal $parent $parentId]} {
  517.         break
  518.     }
  519.     if {$displayed} {
  520.         set pos [expr $pos + $displayed]
  521.     }
  522.     }
  523.     return $pos
  524. } ;# GetParentPos 
  525. proc browser:ShowDisplayEntry {parentId {highlight 0}} {
  526.     global displayData BROWSER BROWSER_DATA
  527.     set parentPos [browser:GetParentPos $parentId]
  528.     set entry $displayData($parentId)
  529.     keylget entry displayed displayed
  530.     keylget entry state state
  531.     keylget entry data data
  532.     if {$displayed} {
  533.     for {set cnt 0} {$cnt < $displayed} {incr cnt} {
  534.         VtDrawnListDeleteItem $BROWSER -position $parentPos
  535.     }
  536.     }
  537.     set levelData $BROWSER_DATA(level_1)
  538.     VtDrawnListAddItem $BROWSER -position $parentPos \
  539.     -fieldList $data \
  540.     -MOTIF_formatList [lindex $levelData 0]\
  541.     -CHARM_formatList [lindex $levelData 1]\
  542.     -overrideFont [lindex $levelData 2]
  543.     if [cequal EXPANDED $state] {
  544.         keylget entry children children
  545.     set pos $parentPos
  546.     set levelData $BROWSER_DATA(level_2)
  547.     foreach child $children {
  548.         incr pos
  549.         VtDrawnListAddItem $BROWSER \
  550.         -position $pos \
  551.         -MOTIF_formatList [lindex $levelData 0]\
  552.         -CHARM_formatList [lindex $levelData 1]\
  553.         -overrideFont [lindex $levelData 2]\
  554.         -fieldList $child
  555.     }
  556.     keylset entry displayed [expr [llength $children] + 1]
  557.     } else {
  558.     keylset entry displayed 1
  559.     }
  560.     set displayData($parentId) $entry
  561.     if {$highlight} {
  562.     browser:Highlight $parentPos
  563.     }
  564. } ;# browser:ShowDisplayEntry
  565. proc browser:HideDisplayEntry {parentId} {
  566.     global displayData BROWSER BROWSER_DATA
  567.     set parentPos [browser:GetParentPos $parentId]
  568.     set entry $displayData($parentId)
  569.     keylget entry displayed displayed
  570.     if {$displayed} {
  571.     for {set cnt 0} {$cnt < $displayed} {incr cnt} {
  572.         VtDrawnListDeleteItem $BROWSER -position $parentPos
  573.     }
  574.     keylset entry displayed 0
  575.         set displayData($parentId) $entry
  576.     }
  577. } ;# HideDisplayEntry
  578. proc browser:ReDisplay {{pos 1}} {
  579.     global displayData BROWSER BROWSER_DATA
  580.     set level1Data $BROWSER_DATA(level_1)
  581.     set level2Data $BROWSER_DATA(level_2)
  582.     VtDrawnListDeleteItem $BROWSER -all
  583.     if {[info exists displayData]} {
  584.     if {! [lempty [info commands SortParentList]] } {    ;#CALLOUT
  585.         set parentList [SortParentList [array names displayData]]
  586.     } else {
  587.         set parentList [lsort -increasing [array names displayData]]
  588.     }
  589.     } else {
  590.     set parentList {}
  591.     }
  592.     if {[lempty $parentList]} {
  593.     return 0
  594.     } else {
  595.     foreach parentId $parentList {
  596.         set ent $displayData($parentId)
  597.         keylget ent state state
  598.         keylget ent data data
  599.         VtDrawnListAddItem $BROWSER \
  600.         -position 0 \
  601.         -MOTIF_formatList [lindex $level1Data 0]\
  602.         -CHARM_formatList [lindex $level1Data 1]\
  603.         -overrideFont [lindex $level1Data 2]\
  604.         -fieldList $data
  605.         if [cequal EXPANDED $state] {
  606.         keylget ent children children
  607.         foreach child $children {
  608.             VtDrawnListAddItem $BROWSER \
  609.             -position 0 \
  610.             -MOTIF_formatList [lindex $level2Data 0]\
  611.             -CHARM_formatList [lindex $level2Data 1]\
  612.             -overrideFont [lindex $level2Data 2]\
  613.             -fieldList $child
  614.         }
  615.         keylset ent displayed [expr [llength $children] + 1]
  616.         } else {
  617.         keylset ent displayed 1
  618.         }
  619.         set displayData($parentId) $ent
  620.     }
  621.         browser:Highlight $pos
  622.     return 1
  623.     }
  624. } ;# browser:ReDisplay
  625. proc browser:FindItemParent {pos} {
  626.     global BROWSER displayData
  627.     set selected [lindex [VtDrawnListGetItem $BROWSER -position $pos] 0]
  628.     if {[lempty $selected]} {
  629.     return {}
  630.     }
  631.     set type [browser:GetType $selected]
  632.     set parentId [browser:GetParentId $type $selected]
  633.     keylget displayData($parentId) data data
  634.     lvarpop data end    ;# remove parentId 
  635.     lvarpop data end    ;# remove PARENT flag
  636.     return $data
  637. }
  638. proc browser:FindItemParentPos {pos} {
  639.     global BROWSER
  640.     set selected [lindex [VtDrawnListGetItem $BROWSER -position $pos] 0]
  641.     if {[lempty $selected]} {
  642.     return {}
  643.     }
  644.     set type [browser:GetType $selected]
  645.     if [cequal $type CHILD] {
  646.     set all [VtDrawnListGetItem $BROWSER -all]    ;# all items
  647.     if {! [lempty [info commands FindItemParent]] } { ;#CALLOUT
  648.         set parent [FindItemParent $selected $all]
  649.     } else {
  650.         set parent [VtDrawnListGetItem $BROWSER \
  651.         -field [browser:GetParentIdIndex $type] \
  652.                [browser:GetParentId $type $selected] \
  653.         -field [browser:GetTypeIndex $type] $type
  654.         set parent [lsearch $all [join $parent]]
  655.     }
  656.     set parent [expr {($parent == -1) ? 1 : $parent + 1}]
  657.     } else {
  658.     set parent $pos
  659.     }
  660.     return $parent
  661. }
  662. proc browser:GetItemFromPos {pos} {
  663.     global BROWSER
  664.     set selected [lindex [VtDrawnListGetItem $BROWSER -position $pos] 0]
  665.     lvarpop selected end    ;# remove parentId 
  666.     lvarpop selected end    ;# remove PARENT flag
  667.     return $selected
  668. } ;# browser:GetItemFromPos
  669. proc browser:RemoveEntryFromPos {pos} {
  670.     global displayData BROWSER
  671.     set selected [lindex [VtDrawnListGetItem $BROWSER -position $pos] 0]
  672.     set type [browser:GetType $selected]
  673.     set parentId [browser:GetParentId $type $selected] 
  674.     if [cequal CHILD $type] {
  675.         set compare [lrange $selected 0 end]
  676.     set ent $displayData($parentId)
  677.     keylget ent children children
  678.     set pop [lvarpop children [lsearch $children $compare]]
  679.     if [string match $pop $compare] {
  680.         VtDrawnListDeleteItem $BROWSER -position $pos
  681.         keylset ent children $children
  682.         keylset ent displayed [expr [llength $children] + 1]
  683.         set displayData($parentId) $ent
  684.         set ret 1
  685.     } else {
  686.         set ret -1        ;# failed to remove child item
  687.     }
  688.     return $ret
  689.     }
  690.     VtDrawnListDeleteItem $BROWSER -position $pos
  691.     set ent $displayData($parentId)
  692.     keylget ent state state
  693.     if [cequal EXPANDED $state ] {
  694.     keylget ent children children
  695.     foreach child $children {
  696.         VtDrawnListDeleteItem $BROWSER -position $pos
  697.     }
  698.     }
  699.     unset displayData($parentId)
  700.     return [browser:Highlight $pos]
  701. } ;# browser:RemoveEntryFromPos
  702. proc browser:RemoveSelectedEntry {} {
  703.     global BROWSER
  704.     set pos [VtDrawnListGetSelectedItem $BROWSER -byPositionList]
  705.     return [browser:RemoveEntryFromPos $pos]
  706. }
  707. proc browser:Search {search {highlight {}}} {
  708.     global BROWSER
  709.     set numEntries [llength [VtDrawnListGetItem $BROWSER -all]]
  710.     set found 0
  711.     loop i 1 $numEntries {
  712.     set entry [lindex [VtDrawnListGetItem $BROWSER -position $i] 0]
  713.     set type [GetType $entry]
  714.     if [cequal CHILD $type] {
  715.         continue    ;# skip sub entries
  716.     }
  717.     if {[string match $search [lindex $entry 1]] ||
  718.         [string match $search [lindex $entry 2]]} {
  719.         set found $i
  720.         break
  721.     }
  722.     }
  723.     if {![lempty $highlight] && $found > 0} {
  724.     browser:Highlight $found
  725.     }
  726.     return $found
  727. }
  728. proc browser:GetSelectedItem {} {
  729.     global BROWSER
  730.     set data [lindex [VtDrawnListGetSelectedItem $BROWSER -byRecordList] 0]
  731.     lvarpop data end    ;# remove parentId 
  732.     lvarpop data end    ;# remove PARENT flag
  733.     return $data 
  734. }
  735. proc browser:GetSelectedItemPos {} {
  736.     global BROWSER
  737.     return [lindex [VtDrawnListGetSelectedItem $BROWSER -byPositionList] 0]
  738. }
  739. proc browser:Highlight {{pos 1}} {
  740.     global BROWSER
  741.     set noItems [llength [VtDrawnListGetItem $BROWSER -all]]
  742.     if {$noItems > 0} {
  743.     if {$pos > $noItems} {
  744.         VtDrawnListSelectItem $BROWSER -position $noItems
  745.     } else {
  746.         VtDrawnListSelectItem $BROWSER -position $pos
  747.     }
  748.     SaDrawnListShowSelectedItem $BROWSER
  749.     return 1
  750.     } else {
  751.     return 0
  752.     }
  753. }
  754. proc browser:IsParent {pos} {
  755.     global BROWSER
  756.     set selected [lindex [VtDrawnListGetItem $BROWSER -position $pos] 0]
  757.     set type [browser:GetType $selected]
  758.     return [cequal $type PARENT]
  759. }
  760. proc browser:DeleteAll {} {
  761.     global displayData BROWSER
  762.     catch {unset displayData}
  763.     if [info exists BROWSER] {VtDrawnListDeleteItem $BROWSER -all}
  764. }
  765. proc browser:GetParentDrawnList {} {
  766.     global BROWSER
  767.     set displayedList [VtDrawnListGetItem $BROWSER -all]
  768.     set parentList {}
  769.     foreach entry $displayedList {
  770.         if {[cequal [browser:GetType $entry] PARENT]} {
  771.         lvarpop entry end    ;# remove PARENT flag
  772.             lvarpop entry end    ;# remove parentId 
  773.         lappend parentList $entry
  774.     }
  775.     }
  776.     return $parentList
  777. }
  778. proc browser:GetParentIdIndex {type} {
  779.     global BROWSER_NUM_COL_PARENT BROWSER_NUM_COL_CHILD
  780.     if {[cequal $type PARENT]} {
  781.     return [expr $BROWSER_NUM_COL_PARENT - 2]
  782.     } else {
  783.     return [expr $BROWSER_NUM_COL_CHILD - 2]
  784.     }
  785. }
  786. proc browser:GetTypeIndex {type} {
  787.     global BROWSER_NUM_COL_PARENT BROWSER_NUM_COL_CHILD
  788.     if {[cequal $type PARENT]} {
  789.     return [expr $BROWSER_NUM_COL_PARENT - 1]
  790.     } else {
  791.     return [expr $BROWSER_NUM_COL_CHILD - 1]
  792.     }
  793. }
  794. proc browser:GetParentId {type selected} {
  795.     return [lindex $selected [browser:GetParentIdIndex $type]]
  796. }
  797. proc browser:GetType {selected} {
  798.     return [lindex $selected end]
  799. }
  800. proc MakeCall {service object attrs {operation ObjectGet}} {
  801.     set result {}
  802.     set objcall [list $operation [list sco $service] \
  803.     [SetInstance $object] $attrs]
  804.     set bmipResponseList [SaMakeObjectCall $objcall]
  805.     foreach bmip $bmipResponseList {
  806.     if [BmipResponseErrorIsPresent bmip] {
  807.         set errorStack [BmipResponseErrorStack bmip]
  808.         ErrorThrow errorStack 
  809.     }
  810.     keylset item type [lindex [BmipResponseClass bmip] 1]
  811.     keylset item instance [BmipResponseObjectInstance bmip]
  812.     keylset item attrList [BmipResponseAttrValList bmip]
  813.     lappend result $item 
  814.     }
  815.     return $result
  816. }
  817. proc GetAllCall {service attrs} {
  818.     set result {}
  819.     set objcall [list ObjectGet -scope 1 [list sco $service] \
  820.     [SetInstance NULL] $attrs]
  821.     set bmipResponseList [SaMakeObjectCall $objcall]
  822.     foreach bmip $bmipResponseList {
  823.     if [BmipResponseErrorIsPresent bmip] {
  824.         set errorStack [BmipResponseErrorStack bmip]
  825.         ErrorThrow errorStack 
  826.     }
  827.     keylset item type [lindex [BmipResponseClass bmip] 1]
  828.     keylset item instance [BmipResponseObjectInstance bmip]
  829.     keylset item attrList [BmipResponseAttrValList bmip]
  830.     lappend result $item 
  831.     }
  832.     return $result
  833. }
  834. proc ActionCall {service object action {val {}}} {
  835.     set objcall [list ObjectAction [list sco $service] \
  836.         [SetInstance $object] [list $action] $val]
  837.     set bmipResponseList [SaMakeObjectCall $objcall]
  838.     foreach bmip $bmipResponseList {
  839.     if [BmipResponseErrorIsPresent bmip] {
  840.         set errorStack [BmipResponseErrorStack bmip]
  841.         ErrorThrow errorStack 
  842.     }
  843.     keylset item type [lindex [BmipResponseClass bmip] 1]
  844.     keylset item instance [BmipResponseObjectInstance bmip]
  845.     keylset item type [BmipResponseActionType bmip]
  846.     keylset item info [BmipResponseActionInfo bmip]
  847.     lappend result $item
  848.     }
  849.     return $result
  850. }
  851. proc BuildDefineInetPool {form action} {
  852.     set alformW [SaAlignedForm $form.alform [list \
  853.     [list SCO_AAS_MSG_POOL_NAME \
  854.         [list VtComboBox \
  855.         -callback "SaSetFocus next" \
  856.         -autoLock GetAddrListCB \
  857.         -valueChangedCallback GetAddrListCB \
  858.         -shortHelpCallback SaShortHelpCB \
  859.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_POOL_NAME_SH]]] \
  860.     [list SCO_AAS_MSG_ADDR_IN_POOL \
  861.         [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  862.     ]]
  863.     VtSetValues $alformW -rightSide FORM
  864.     VtSetValues $alformW -leftSide FORM
  865.     VtSetValues $alformW -topSide FORM
  866.     set poolNameW [VxGetVar $alformW widget1]
  867.     set poolNameF [VxGetVar $alformW form1]
  868.     VtSetValues $poolNameF -CHARM_topOffset 1 -MOTIF_topOffset 25
  869.     set addrsW [VxGetVar $alformW widget2]
  870.     set addrListW [VtDrawnList $addrsW.addrList \
  871.         -MOTIF_rows 7 \
  872.         -formatList { {STRING 31} } \
  873.         -selection BROWSE \
  874.         -shortHelpCallback SaShortHelpCB \
  875.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_ADDR_IN_POOL_SH]]
  876.     set addr_rc [VtRowColumn $addrsW.add_rc \
  877.     -vertical \
  878.     -CHARM_spacing 1 \
  879.     -MOTIF_spacing 10 \
  880.     -topSide FORM \
  881.     -leftSide $addrListW \
  882.     -rightSide FORM]
  883.     set addr_but_add [VtPushButton $addr_rc.addr_but_add \
  884.     -label [IntlLocalizeMsg SCO_AAS_MSG_IP_ADD] \
  885.     -labelCenter \
  886.     -autoLock IpAddrCB \
  887.     -callback {IpAddrCB "add"} \
  888.     -shortHelpCallback SaShortHelpCB \
  889.     -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_IP_ADD_SH]]
  890.     set addr_but_del [VtPushButton $addr_rc.addr_but_del \
  891.     -label [IntlLocalizeMsg SCO_AAS_MSG_IP_DEL] \
  892.     -labelCenter \
  893.     -autoLock DeleteAddrListCB \
  894.     -callback DeleteAddrListCB \
  895.     -shortHelpCallback SaShortHelpCB \
  896.     -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_IP_DEL_SH]]
  897.     set addr_but_mod [VtPushButton $addr_rc.addr_but_mod \
  898.     -label [IntlLocalizeMsg SCO_AAS_MSG_IP_MOD] \
  899.     -labelCenter \
  900.     -autoLock IpAddrCB \
  901.     -callback {IpAddrCB "modify"} \
  902.     -shortHelpCallback SaShortHelpCB \
  903.     -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_IP_MOD_SH]]
  904.     set status [SaStatusBar $form.status 0]
  905.     set sep [VtSeparator $form.sep1 -horizontal \
  906.     -leftSide FORM -rightSide FORM \
  907.     -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  908.     -topSide $alformW]
  909.     VxSetVar $form alformW $alformW
  910.     VxSetVar $form poolNameW $poolNameW
  911.     VxSetVar $form addrListW $addrListW
  912.     VxSetVar $form addr_but_add $addr_but_add
  913.     VxSetVar $form addr_but_del $addr_but_del
  914.     VxSetVar $form addr_but_mod $addr_but_mod
  915.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  916.     set focusList [list $poolNameW $addrListW $addr_but_add $addr_but_del \
  917.     $addr_but_mod]
  918.     lappend focusList [VtGetValues $form -ok]
  919.     SaSetTabGroups $form $focusList
  920.     SaSetFocusList $form $focusList
  921. }
  922. proc DefineInetPoolCB {action cbs} {
  923.     set dialog [keylget cbs dialog]    ;# dialog is Main(Dialog)
  924.     set form [VtFormDialog $dialog.poolDlog \
  925.     -title [IntlLocalizeMsg SCO_AAS_MSG_INET_POOL] \
  926.     -help \
  927.     -autoLock SaveInetPoolCB \
  928.     -okCallback SaveInetPoolCB \
  929.     -cancelButton CANCEL \
  930.     -cancelCallback VxEndFormCB]
  931.     BuildDefineInetPool $form $action
  932.     set poolNameW [VxGetVar $form poolNameW]
  933.     set addrListW [VxGetVar $form addrListW]
  934.     set drawnParentList [browser:GetParentDrawnList]
  935.     set drawnPoolList {}
  936.     foreach entry $drawnParentList {
  937.     lappend drawnPoolList [lindex $entry 0]
  938.     }
  939.     if {![lempty $drawnPoolList]} {
  940.     VtSetValues $poolNameW -itemList $drawnPoolList
  941.     }
  942.     if {[cequal $action modify]} {
  943.     set selpos [browser:GetSelectedItemPos]
  944.     set selItem [browser:FindItemParent $selpos]
  945.     set poolName [lindex $selItem 0]
  946.     } else {
  947.     set poolName {}
  948.     }
  949.     VtSetValues $poolNameW -value $poolName
  950.     VxSetVar $form parent $dialog
  951.     VtShow $form
  952.     VtUnLock
  953. }
  954. proc GetAddrListCB {cbs} {
  955.     keylget cbs dialog dialog
  956.     set poolNameW [VxGetVar $dialog poolNameW]
  957.     set addrListW [VxGetVar $dialog addrListW]
  958.     set addr_but_add [VxGetVar $dialog addr_but_add]
  959.     set addr_but_del [VxGetVar $dialog addr_but_del]
  960.     set addr_but_mod [VxGetVar $dialog addr_but_mod]
  961.     if {![lempty [VtDrawnListGetItem $addrListW -all]]} {
  962.         VtDrawnListDeleteItem $addrListW -all
  963.     }
  964.     set poolName [VtGetValues $poolNameW -value]
  965.     if {[string length $poolName] == 0} {
  966.     VtSetSensitive $addr_but_add 0
  967.     VtSetSensitive $addr_but_del 0
  968.     VtSetSensitive $addr_but_mod 0
  969.     } else {
  970.     set poolList [VtGetValues $poolNameW -itemList]
  971.     VtSetSensitive $addr_but_add 1
  972.     if {![lempty $poolList] && ([lsearch $poolList $poolName] != -1)} {
  973.         append parentId $poolName :INET
  974.         if {[ErrorCatch errStack 0 "MakeCall aasPool $parentId \
  975.         addressList" infoList] != 0} {
  976.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  977.         VtUnLock
  978.         return
  979.         }
  980.         set info [lindex $infoList 0]
  981.         keylget info attrList attrList 
  982.         keylget attrList addressList addrList
  983.         foreach addr $addrList {
  984.         VtDrawnListAddItem $addrListW -recordList $addr
  985.         }
  986.         VtDrawnListSelectItem $addrListW -position 1
  987.         VtSetSensitive $addr_but_del 1
  988.         VtSetSensitive $addr_but_mod 1
  989.     } else {
  990.         VtSetSensitive $addr_but_del 0
  991.         VtSetSensitive $addr_but_mod 0
  992.     }
  993.     }
  994.     VtUnLock
  995. }
  996. proc SelectTypeCB {cbs} {
  997.     keylget cbs value value
  998.     keylget cbs selectedWidget selectedW
  999.     keylget cbs dialog dialog
  1000.     set startAddrL [VxGetVar $dialog startAddrL]
  1001.     set startAddrW [VxGetVar $dialog startAddrW]
  1002.     set endAddrL [VxGetVar $dialog endAddrL]
  1003.     set endAddrW [VxGetVar $dialog endAddrW]
  1004.     set addrL [VxGetVar $dialog addrL]
  1005.     set addrW [VxGetVar $dialog addrW]
  1006.     set selectAddrW [VxGetVar $dialog selectAddrW]
  1007.     set selectRangeW [VxGetVar $dialog selectRangeW]
  1008.     set sW [VxGetShortName $selectedW] 
  1009.     set sAW [VxGetShortName $selectAddrW]
  1010.     set sRW [VxGetShortName $selectRangeW]
  1011.     if {$sW == $sAW} {
  1012.     VtSetSensitive $startAddrL 0
  1013.     VtSetSensitive $startAddrW 0
  1014.     VtSetSensitive $endAddrL 0
  1015.     VtSetSensitive $endAddrW 0
  1016.     VtSetSensitive $addrL 1
  1017.     VtSetSensitive $addrW 1
  1018.     } elseif {$sW == $sRW} {
  1019.     VtSetSensitive $startAddrL 1
  1020.     VtSetSensitive $startAddrW 1
  1021.     VtSetSensitive $endAddrL 1
  1022.     VtSetSensitive $endAddrW 1
  1023.     VtSetSensitive $addrL 0
  1024.     VtSetSensitive $addrW 0
  1025.     }
  1026.     SaSetFocus next $cbs
  1027.     VtUnLock
  1028. }
  1029. proc IpAddrBuild {form} {
  1030.     set alformW [SaAlignedForm $form.alform [list \
  1031.     [list SCO_AAS_MSG_POOL_NAME \
  1032.         [list VtText \
  1033.         -callback "SaSetFocus next" \
  1034.         -shortHelpCallback SaShortHelpCB \
  1035.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_POOL_NAME_SH]]] \
  1036.     [list SCO_AAS_MSG_SELECT_AR \
  1037.         [list VtRadioBox -horizontal \
  1038.             -autoLock SelectTypeCB \
  1039.         -callback SelectTypeCB \
  1040.         -shortHelpCallback SaShortHelpCB \
  1041.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_SELECT_AR_SH]]] \
  1042.     [list SCO_AAS_MSG_ADDR \
  1043.         [list VtForm -marginWidth 0 -marginHeight 0]] \
  1044.     [list SCO_AAS_MSG_START_ADDR \
  1045.         [list VtForm -marginWidth 0 -marginHeight 0]] \
  1046.     [list SCO_AAS_MSG_END_ADDR \
  1047.         [list VtForm -marginWidth 0 -marginHeight 0]] \
  1048.     ]]
  1049.     set poolNameW [VxGetVar $alformW widget1]
  1050.     set poolNameF [VxGetVar $alformW form1]
  1051.     VtSetValues $poolNameF -CHARM_topOffset 1 -MOTIF_topOffset 25
  1052.     set selectAddrCW [VxGetVar $alformW widget2]
  1053.     set selectAddrCL [VxGetVar $alformW label2]
  1054.     set addrW [VxGetVar $alformW widget3]
  1055.     set addrF [VxGetVar $alformW form3]
  1056.     set addrL [VxGetVar $alformW label3]
  1057.     set startAddrW [VxGetVar $alformW widget4]
  1058.     set startAddrF [VxGetVar $alformW form4]
  1059.     set startAddrL [VxGetVar $alformW label4]
  1060.     set endAddrW [VxGetVar $alformW widget5]
  1061.     set endAddrF [VxGetVar $alformW form5]
  1062.     set endAddrL [VxGetVar $alformW label5]
  1063.     set selectAddrW [VtToggleButton $selectAddrCW.addr \
  1064.     -label [IntlLocalizeMsg SCO_AAS_MSG_SELECT_ADDR] \
  1065.     -shortHelpCallback SaShortHelpCB \
  1066.     -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_SELECT_ADDR_SH]]
  1067.     set selectRangeW [VtToggleButton $selectAddrCW.range \
  1068.     -label [IntlLocalizeMsg SCO_AAS_MSG_SELECT_RANGE] \
  1069.     -shortHelpCallback SaShortHelpCB \
  1070.     -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_SELECT_RANGE_SH]]
  1071.     createIPwidget $addrW "" SCO_AAS_MSG_IP_SH
  1072.     createIPwidget $startAddrW "" SCO_AAS_MSG_IP_START_SH
  1073.     createIPwidget $endAddrW "" SCO_AAS_MSG_IP_END_SH
  1074.     set sep [VtSeparator $form.sep1 -horizontal \
  1075.     -leftSide FORM -rightSide FORM \
  1076.     -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  1077.     -topSide $alformW]
  1078.     set status [SaStatusBar $form.status 0]
  1079.     VtSetValues $poolNameW -rightSide NONE
  1080.     VtSetValues $selectAddrCW -rightSide NONE
  1081.     VtSetValues $addrW -rightSide NONE
  1082.     VtSetValues $startAddrW -rightSide NONE
  1083.     VtSetValues $endAddrW -rightSide NONE
  1084.     VxSetVar $form alformW $alformW
  1085.     VxSetVar $form poolNameW $poolNameW
  1086.     VxSetVar $form poolNameF $poolNameF
  1087.     VxSetVar $form selectAddrCL $selectAddrCL
  1088.     VxSetVar $form selectAddrW $selectAddrW
  1089.     VxSetVar $form selectRangeW $selectRangeW
  1090.     VxSetVar $form addrW $addrW
  1091.     VxSetVar $form addrL $addrL
  1092.     VxSetVar $form startAddrW $startAddrW
  1093.     VxSetVar $form startAddrL $startAddrL
  1094.     VxSetVar $form endAddrW $endAddrW
  1095.     VxSetVar $form endAddrL $endAddrL
  1096.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  1097.     set focusList [list $poolNameW $selectAddrW $selectRangeW \
  1098.     $addrW $startAddrW $endAddrW]
  1099.     lappend focusList [VtGetValues $form -ok]
  1100.     SaSetTabGroups $form $focusList
  1101.     SaSetFocusList $form $focusList
  1102. }
  1103. proc IpAddrCB { type cbs } {
  1104.     set dialog [keylget cbs dialog]
  1105.     set form [VtFormDialog $dialog.addaddr \
  1106.     -help \
  1107.     -autoLock AddAddrListCB \
  1108.     -okCallback [list AddAddrListCB $type] \
  1109.     -cancelButton CANCEL \
  1110.     -cancelCallback VxEndFormCB]
  1111.     IpAddrBuild $form
  1112.     set parentPoolNameW [VxGetVar $dialog poolNameW]
  1113.     set parentAddrListW [VxGetVar $dialog addrListW]
  1114.     set poolNameW [VxGetVar $form poolNameW]
  1115.     set startAddrL [VxGetVar $form startAddrL]
  1116.     set startAddrW [VxGetVar $form startAddrW]
  1117.     set endAddrL [VxGetVar $form endAddrL]
  1118.     set endAddrW [VxGetVar $form endAddrW]
  1119.     set addrL [VxGetVar $form addrL]
  1120.     set addrW [VxGetVar $form addrW]
  1121.     set selectAddrW [VxGetVar $form selectAddrW]
  1122.     set selectRangeW [VxGetVar $form selectRangeW]
  1123.     VtSetValues $poolNameW -value [VtGetValues $parentPoolNameW -value]
  1124.     if {[cequal $type add]} {
  1125.     VtSetValues $form -title [IntlLocalizeMsg SCO_AAS_MSG_ADD_ADDRESS]
  1126.     setIPwidgetValue $addrW "" 
  1127.     setIPwidgetValue $startAddrW ""
  1128.     setIPwidgetValue $endAddrW "" 
  1129.     VtSetValues $selectAddrW -value 1
  1130.     VtSetValues $selectRangeW -value 0
  1131.     VtSetSensitive $addrL 1
  1132.     VtSetSensitive $addrW 1
  1133.     VtSetSensitive $startAddrL 0
  1134.     VtSetSensitive $startAddrW 0
  1135.     VtSetSensitive $endAddrL 0
  1136.     VtSetSensitive $endAddrW 0
  1137.     } else {
  1138.     VtSetValues $form -title [IntlLocalizeMsg SCO_AAS_MSG_MOD_ADDRESS]
  1139.         set item [VtDrawnListGetSelectedItem $parentAddrListW -byRecordList]
  1140.     if {[regexp \
  1141.         {([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)-([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)}\
  1142.         $item range start end]} {
  1143.         setIPwidgetValue $addrW "" 
  1144.         setIPwidgetValue $startAddrW $start
  1145.         setIPwidgetValue $endAddrW $end
  1146.         VtSetValues $selectAddrW -value 0
  1147.         VtSetValues $selectRangeW -value 1
  1148.         VtSetSensitive $addrL 0
  1149.         VtSetSensitive $addrW 0
  1150.         VtSetSensitive $startAddrL 1
  1151.         VtSetSensitive $startAddrW 1
  1152.         VtSetSensitive $endAddrL 1
  1153.         VtSetSensitive $endAddrW 1
  1154.     } elseif {[regexp {[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+} $item addr]} {
  1155.         setIPwidgetValue $addrW $addr
  1156.         setIPwidgetValue $startAddrW "" 
  1157.         setIPwidgetValue $endAddrW "" 
  1158.         VtSetValues $selectAddrW -value 1
  1159.         VtSetValues $selectRangeW -value 0
  1160.         VtSetSensitive $addrL 1
  1161.         VtSetSensitive $addrW 1
  1162.         VtSetSensitive $startAddrL 0
  1163.         VtSetSensitive $startAddrW 0
  1164.         VtSetSensitive $endAddrL 0
  1165.         VtSetSensitive $endAddrW 0
  1166.     }
  1167.     }
  1168.     VxSetVar $form parent $dialog
  1169.     SaSetFocus next $cbs
  1170.     VtShow $form
  1171.     VtUnLock
  1172. }
  1173. proc AddAddrListCB { type cbs } {
  1174.     set dialog [keylget cbs dialog]
  1175.     set startAddrW [VxGetVar $dialog startAddrW]
  1176.     set endAddrW [VxGetVar $dialog endAddrW]
  1177.     set addrW [VxGetVar $dialog addrW]
  1178.     set selectAddrW [VxGetVar $dialog selectAddrW]
  1179.     set selectRangeW [VxGetVar $dialog selectRangeW]
  1180.     set parent [VxGetVar $dialog parent]
  1181.     set addrListW [VxGetVar $parent addrListW]
  1182.     if {[VtGetValues $selectAddrW -value]} {
  1183.     set item [getIPwidgetValue $addrW]
  1184.     if {![checkIPaddr $item]} {
  1185.         VxEndFormCB $cbs
  1186.         VtUnLock
  1187.         return
  1188.     }
  1189.     } elseif {[VtGetValues $selectRangeW -value]} {
  1190.     set startAddr [getIPwidgetValue $startAddrW]
  1191.     set endAddr [getIPwidgetValue $endAddrW]
  1192.     if {[checkIPaddr $startAddr] && [checkIPaddr $endAddr]} {
  1193.         set item [format "%s%s%s" $startAddr - $endAddr]
  1194.     } else {
  1195.         VxEndFormCB $cbs
  1196.         VtUnLock
  1197.         return
  1198.     }
  1199.     } else {
  1200.         VxEndFormCB $cbs
  1201.     VtUnLock
  1202.     return
  1203.    }
  1204.    if {[cequal $type add]} {
  1205.     VtDrawnListAddItem $addrListW -fieldList $item
  1206.     VtDrawnListSelectItem $addrListW -position 0
  1207.     set addr_but_del [VxGetVar $parent addr_but_del]
  1208.     set addr_but_mod [VxGetVar $parent addr_but_mod]
  1209.     VtSetSensitive $addr_but_del 1 
  1210.     VtSetSensitive $addr_but_mod 1 
  1211.    } elseif {[cequal $type modify]} {
  1212.     set pos [VtDrawnListGetSelectedItem $addrListW -byPositionList]
  1213.     VtDrawnListSetItem $addrListW -position $pos -fieldList $item
  1214.     VtDrawnListSelectItem $addrListW -position $pos 
  1215.    }
  1216.     VxEndFormCB $cbs
  1217.     VtUnLock
  1218. }
  1219. proc DeleteAddrListCB { cbs } {
  1220.     set dialog [keylget cbs dialog]
  1221.     set addrListW [VxGetVar $dialog addrListW]
  1222.     set pos [VtDrawnListGetSelectedItem $addrListW -byPositionList]
  1223.     if {$pos} {
  1224.     VtDrawnListDeleteItem $addrListW -position $pos
  1225.     }
  1226.     set numAddrs [llength [VtDrawnListGetItem $addrListW -all]]
  1227.     if {$numAddrs == 0} {
  1228.     set addr_but_del [VxGetVar $dialog addr_but_del]
  1229.     set addr_but_mod [VxGetVar $dialog addr_but_mod]
  1230.     VtSetSensitive addr_but_del 0
  1231.     VtSetSensitive addr_but_mod 0
  1232.     } elseif {$pos > $numAddrs} {
  1233.         VtDrawnListSelectItem $addrListW -position $numAddrs
  1234.     } else {
  1235.     VtDrawnListSelectItem $addrListW -position $pos
  1236.     }
  1237.     VtUnLock
  1238. }
  1239. proc SaveInetPoolCB { cbs } {
  1240.     set dialog [keylget cbs dialog]
  1241.     set parent [VxGetVar $dialog parent]
  1242.     set poolNameW [VxGetVar $dialog poolNameW]
  1243.     set addrListW [VxGetVar $dialog addrListW]
  1244.     set poolName [VtGetValues $poolNameW -value]
  1245.     if {[string length $poolName] == 0} {
  1246.     VxEndFormCB $cbs
  1247.     VtUnLock
  1248.     return
  1249.     }
  1250.     set addrList [VtDrawnListGetItem $addrListW -all]
  1251.     if {[lempty $addrList]} {
  1252.     VxEndFormCB $cbs
  1253.     VtUnLock
  1254.     return
  1255.     } else {
  1256.     keylset addressList addressList [list $addrList]
  1257.     }
  1258.     append parentId $poolName :INET
  1259.     set poolList [VtGetValues $poolNameW -itemList]
  1260.     if {![lempty $poolList] && ([lsearch $poolList $poolName] != -1)} {
  1261.     if {[lempty $addrList]} {
  1262.         if {[ErrorCatch errStack 0 "MakeCall aasPool $parentId {} \
  1263.         ObjectDelete" {} SCO_AAS_ERR_DELETE_POOL $poolName] != 0} {
  1264.             SaDisplayErrorStacks $parent.err [list $errStack] NOHELP
  1265.             VxEndFormCB $cbs
  1266.                 VtUnLock
  1267.                 return
  1268.             }    
  1269.         browser:HideDisplayEntry $parentId
  1270.         browser:RemDisplayEntry $parentId
  1271.     } else {
  1272.         if {[ErrorCatch errStack 0 "MakeCall aasPool $parentId \
  1273.         [list $addressList] ObjectReplace" {} SCO_AAS_ERR_REPLACE_POOL \
  1274.         $poolName] != 0} {
  1275.         SaDisplayErrorStacks $parent.err [list $errStack] NOHELP
  1276.         VxEndFormCB $cbs
  1277.         VtUnLock
  1278.         return
  1279.         }    
  1280.         set data [browser:GetParent $parentId]
  1281.         browser:SetDisplayEntry $parentId $data $addrList
  1282.         browser:ShowDisplayEntry $parentId 1
  1283.     }
  1284.     } else {
  1285.     if {[ErrorCatch errStack 0 "MakeCall aasPool $parentId \
  1286.         [list $addressList] ObjectCreate" {} SCO_AAS_ERR_CREATE_POOL \
  1287.         $poolName] != 0} {
  1288.         SaDisplayErrorStacks $parent.err [list $errStack] NOHELP
  1289.             VxEndFormCB $cbs
  1290.         VtUnLock
  1291.         return
  1292.     }    
  1293.     browser:SetDisplayEntry $parentId [list $poolName INET] $addrList
  1294.     browser:ShowDisplayEntry $parentId 1
  1295.     }
  1296.     SetMenuSensitivityCB [list [list dialog $parent]]
  1297.     ReconfigCB $cbs
  1298.     VxEndFormCB $cbs
  1299.     VtUnLock
  1300. }
  1301. proc DeleteEntryCB { cbs } {
  1302.     set dialog    [keylget cbs dialog]
  1303.     set parent    [VxGetVar $dialog parent]    ;# get parent dialog
  1304.     set item     [browser:GetSelectedItem]
  1305.     set poolName [lindex $item 0]
  1306.     append parentId $poolName :INET
  1307.     if {[ErrorCatch errStack 0 "MakeCall aasPool $parentId {} ObjectDelete" \
  1308.     {} SCO_AAS_ERR_DELETE_POOL $poolName] != 0} {
  1309.     SaDisplayErrorStacks $parent.err [list $errStack] NOHELP
  1310.     } else {
  1311.     browser:RemoveSelectedEntry
  1312.     SetMenuSensitivityCB [list [list dialog $parent]] 
  1313.     }
  1314.     VtUnLock
  1315. }
  1316. proc DeleteCB { cbs } {
  1317.     set dialog    [keylget cbs dialog]
  1318.     set item     [browser:GetSelectedItem]
  1319.     set poolName     [lindex $item 0]
  1320.     if {[string length $poolName]} {
  1321.     set form [VtQuestionDialog $dialog.delete \
  1322.         -okCallback DeleteEntryCB \
  1323.         -autoLock DeleteEntryCB \
  1324.         -message [IntlLocalizeMsg SCO_AAS_MSG_AYS_DEL "$poolName"]]
  1325.     VxSetVar $form parent $dialog    ;# pass parent dialog
  1326.     VtShow $form
  1327.     }
  1328.     VtUnLock
  1329. }
  1330. proc RenameSaveInetPoolCB { cbs } {
  1331.     set dialog [keylget cbs dialog]
  1332.     set poolNameW [VxGetVar $dialog poolNameW]
  1333.     set newPoolNameW [VxGetVar $dialog newPoolNameW]
  1334.     set poolName [VtGetValues $poolNameW -value]
  1335.     if {[string length $poolName] == 0} {
  1336.     VtUnLock
  1337.     return
  1338.     }
  1339.     append poolTag $poolName :INET
  1340.     set newPoolName [VtGetValues $newPoolNameW -value]
  1341.     if {[string length $newPoolName] == 0} {
  1342.     VtUnLock
  1343.     return
  1344.     }
  1345.     set poolNames [VtGetValues $poolNameW -itemList]
  1346.     if {[lsearch $poolNames $newPoolName] != -1} {
  1347.     ErrorPush errStack 0 SCO_AAS_ERR_RENAME_POOL_NAME_EXISTS "$poolName \
  1348.         $newPoolName $newPoolName"
  1349.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP VxEndFormCB
  1350.     VtUnLock
  1351.     return
  1352.     }
  1353.     append newPoolTag $newPoolName :INET
  1354.     if {[ErrorCatch errStack 0 "MakeCall aasPool $poolTag \
  1355.     addressList" infoList] != 0} {
  1356.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  1357.     VtUnLock
  1358.     return
  1359.     }
  1360.     set info [lindex $infoList 0]
  1361.     keylget info attrList addressList
  1362.     keylget addressList addressList addrList
  1363.     if {[lempty $addrList]} {
  1364.     VtUnLock
  1365.     return
  1366.     }
  1367.     if {[ErrorCatch errStack 0 "MakeCall aasPool $poolTag {} ObjectDelete" \
  1368.     {} SCO_AAS_ERR_DELETE_POOL $poolName] != 0} {
  1369.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  1370.         VtUnLock
  1371.         return
  1372.     }
  1373.     if {[ErrorCatch errStack 0 "MakeCall aasPool $newPoolTag \
  1374.     [list $addressList] ObjectCreate" {} SCO_AAS_ERR_CREATE_POOL \
  1375.     $newPoolName] != 0} {
  1376.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  1377.     VtUnLock
  1378.     return
  1379.     }    
  1380.     browser:HideDisplayEntry $poolTag
  1381.     browser:RenameDisplayEntry $poolTag $newPoolTag
  1382.     set data [browser:GetParent $newPoolTag]
  1383.     lvarpop data 0            ;# remove old pool name
  1384.     lvarpush data $newPoolName 0    ;# add new pool name
  1385.     browser:SetParent $newPoolTag $data
  1386.     browser:ShowDisplayEntry $newPoolTag 1
  1387.     ReconfigCB  $cbs
  1388.     VxEndFormCB $cbs
  1389.     VtUnLock
  1390. }
  1391. proc RenameBuild {form} {
  1392.     set alformW [SaAlignedForm $form.alform [list \
  1393.     [list SCO_AAS_MSG_POOL_NAME \
  1394.         [list VtComboBox \
  1395.         -callback "SaSetFocus next" \
  1396.         -columns 20 \
  1397.         -readOnly \
  1398.         -shortHelpCallback SaShortHelpCB \
  1399.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_POOL_NAME_SH]]] \
  1400.     [list SCO_AAS_MSG_NEW_POOL_NAME \
  1401.         [list VtText \
  1402.         -callback "SaSetFocus next" \
  1403.         -shortHelpCallback SaShortHelpCB \
  1404.         -shortHelpString \
  1405.             [IntlLocalizeMsg SCO_AAS_MSG_NEW_POOL_NAME_SH]]] \
  1406.     ]]
  1407.     set poolNameW [VxGetVar $alformW widget1]
  1408.     set poolNameF [VxGetVar $alformW form1]
  1409.     set newPoolNameW [VxGetVar $alformW widget2]
  1410.     VtSetValues $poolNameF -CHARM_topOffset 1 -MOTIF_topOffset 25
  1411.     VtSetValues $poolNameW -rightSide NONE
  1412.     VtSetValues $newPoolNameW -rightSide NONE
  1413.     VxSetVar $form poolNameW $poolNameW
  1414.     VxSetVar $form poolNameF $poolNameF
  1415.     VxSetVar $form newPoolNameW $newPoolNameW
  1416.     set sep [VtSeparator $form.sep1 -horizontal \
  1417.     -leftSide FORM -rightSide FORM \
  1418.     -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  1419.     -topSide $alformW]
  1420.     set status [SaStatusBar $form.status 0]
  1421.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  1422.     set focusList [list $poolNameW $newPoolNameW]
  1423.     lappend focusList [VtGetValues $form -ok]
  1424.     SaSetTabGroups $form $focusList
  1425.     SaSetFocusList $form $focusList
  1426. }
  1427. proc RenameCB {cbs} {
  1428.     set parent [keylget cbs dialog]    ;# parent is Main(Dialog)
  1429.     set form [VtFormDialog $parent.rename \
  1430.     -title [IntlLocalizeMsg SCO_AAS_MSG_RENAME_POOL_TITLE] \
  1431.     -help \
  1432.     -autoLock RenameSaveInetPoolCB \
  1433.     -okCallback RenameSaveInetPoolCB \
  1434.     -cancelButton CANCEL \
  1435.     -cancelCallback VxEndFormCB]
  1436.     RenameBuild $form
  1437.     set poolNameW [VxGetVar $form poolNameW]
  1438.     set newPoolNameW [VxGetVar $form newPoolNameW]
  1439.     set drawnParentList [browser:GetParentDrawnList]
  1440.     if {[lempty $drawnParentList]} {
  1441.     VtDestroyDialog $form
  1442.     VtUnLock
  1443.     return
  1444.     }
  1445.     foreach entry $drawnParentList {
  1446.     lappend drawnPoolList [lindex $entry 0]
  1447.     }
  1448.     if {![lempty $drawnPoolList]} {
  1449.     VtSetValues $poolNameW -itemList $drawnPoolList
  1450.     }
  1451.     set selpos [browser:GetSelectedItemPos]
  1452.     set selItem [browser:FindItemParent $selpos]
  1453.     set poolName [lindex $selItem 0]
  1454.     VtSetValues $poolNameW -value $poolName
  1455.     VtShow $form
  1456.     VtUnLock
  1457. }
  1458. proc ControlGetAddrListCB {cbs} {
  1459.     keylget cbs dialog dialog
  1460.     keylget cbs value poolName 
  1461.     if {[string length $poolName] == 0} {
  1462.     VtUnLock
  1463.     return
  1464.     }
  1465.     set selPool [VxGetVar $dialog selPool]
  1466.     set selAddr [VxGetVar $dialog selAddr]
  1467.     set poolNameW [VxGetVar $dialog poolNameW]
  1468.     set addrListW [VxGetVar $dialog addrListW]
  1469.     set selRange [regexp {([0-9]+\.[0-9]+\.[0-9]+\.([0-9]+))-([0-9]+\.[0-9]+\.[0-9]+\.([0-9]+))} $selAddr range start start4 end end4]
  1470.     if {![lempty [VtDrawnListGetItem $addrListW -all]]} {
  1471.         VtDrawnListDeleteItem $addrListW -all
  1472.     }
  1473.     set poolList [VtGetValues $poolNameW -itemList]
  1474.     if {![lempty $poolList] && ([lsearch $poolList $poolName] != -1)} {
  1475.     append parentId $poolName :INET
  1476.     if {[ErrorCatch errStack 0 "MakeCall aasPool $parentId \
  1477.         addressInfoList" infoList] != 0} {
  1478.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  1479.         VtUnLock
  1480.         return
  1481.     }
  1482.     set info [lindex $infoList 0]
  1483.     keylget info attrList attrList 
  1484.     keylget attrList addressInfoList addrList
  1485.     set pos 0
  1486.     set posList {}
  1487.     set selPos 1
  1488.     foreach item $addrList {
  1489.         set addr [lindex $item 0]
  1490.         set icon [lindex $item 1]
  1491.         set status [lindex $item 2]
  1492.         set statusList {}
  1493.         incr pos
  1494.         set data [concat $addr $icon $status [list $item]]
  1495.         VtDrawnListAddItem $addrListW -recordList [list $data]
  1496.         if {[cequal $poolName $selPool]} {
  1497.         if {($selRange && [cequal $addr $start]) ||
  1498.            (!$selRange && [cequal $addr $selAddr])} {
  1499.             set selPos $pos
  1500.         }
  1501.         }
  1502.     }
  1503.     if {[cequal $poolName $selPool]} {
  1504.         if {$selRange} {
  1505.         set pos $selPos
  1506.         for {set i $start4} {$i <= $end4} {incr i} {
  1507.             lappend posList $pos
  1508.             incr pos    
  1509.         }    
  1510.         } else {
  1511.         lappend posList $selPos
  1512.         }
  1513.         VtDrawnListSelectItem $addrListW -positionList $posList
  1514.     }
  1515.     }
  1516.     VtUnLock
  1517. }
  1518. proc ControlActionCB {cbs} {
  1519.     keylget cbs dialog dialog
  1520.     set poolNameW [VxGetVar $dialog poolNameW]
  1521.     set addrListW [VxGetVar $dialog addrListW]
  1522.     set controlEnableW [VxGetVar $dialog controlEnableW]
  1523.     set controlDisableW [VxGetVar $dialog controlDisableW]
  1524.     set controlReleaseW [VxGetVar $dialog controlReleaseW]
  1525.     set parent [VxGetVar $dialog parent]
  1526.     set selDrawnList [VtDrawnListGetSelectedItem $addrListW -byRecordList]
  1527.     set poolName [VtGetValues $poolNameW -value]
  1528.     set enable [VtGetValues $controlEnableW -value]
  1529.     set disable [VtGetValues $controlDisableW -value]
  1530.     set release [VtGetValues $controlReleaseW -value]
  1531.     if {$enable} {
  1532.     set type enable
  1533.     } elseif {$disable} {
  1534.     set type disable
  1535.     } elseif {$release} {
  1536.     set type release
  1537.     }
  1538.     append parentId $poolName :INET
  1539.     set noChange 1
  1540.     foreach item $selDrawnList {
  1541.     set addr   [lindex $item 0]
  1542.     set icon   [lindex $item 1]
  1543.     set status [lindex $item 2]
  1544.     set data   [lindex $item 3]
  1545.     set action 0
  1546.     switch $type {
  1547.         enable {
  1548.         if {$icon == 1} {
  1549.             set action 1
  1550.         }
  1551.         }
  1552.         disable {
  1553.         if {$icon != 1} {
  1554.             set action 1
  1555.         }
  1556.         }
  1557.         release {
  1558.         if {[cequal [IntlLocalizeMsg SCO_AAS_MSG_ALLOCATED] $status]} {
  1559.             set action 1
  1560.         }
  1561.         }
  1562.         default {
  1563.         VtUnLock
  1564.         return
  1565.         }
  1566.     }
  1567.     if {$action} {        
  1568.         set noChange 0
  1569.         if {[ErrorCatch errStack 0 "ActionCall aasPool $parentId $type \
  1570.         [list $data]" {} SCO_AAS_ERR_CONTROL_ACTION] \
  1571.             != 0} {
  1572.         break
  1573.         }
  1574.     }
  1575.     }
  1576.     if {$noChange} {
  1577.     ErrorPush errStack 0 SCO_AAS_ERR_CONTROL_NO_CHANGE $type
  1578.     }
  1579.     if {[info exists errStack] && [llength $errStack]} {
  1580.     SaDisplayErrorStacks $parent.action_err [list $errStack] NOHELP
  1581.     }
  1582.     RefreshDisplayCB $cbs
  1583.     VxEndFormCB $cbs
  1584.     VtUnLock
  1585. }
  1586. proc BuildControl {form} {
  1587.     global ICON_PATH
  1588.     set alformW [SaAlignedForm $form.alform [list \
  1589.     [list SCO_AAS_MSG_POOL_NAME \
  1590.         [list VtComboBox \
  1591.         -callback "SaSetFocus next" \
  1592.         -columns 20 \
  1593.         -readOnly \
  1594.         -autoLock ControlGetAddrListCB \
  1595.         -valueChangedCallback ControlGetAddrListCB \
  1596.         -shortHelpCallback SaShortHelpCB \
  1597.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_POOL_NAME_SH]] \
  1598.     ] \
  1599.     [list SCO_AAS_MSG_ADDR_IN_POOL \
  1600.            [list VtDrawnList \
  1601.         -horizontalScrollBar 1 \
  1602.         -MOTIF_rows 7 \
  1603.         -columns 65 \
  1604.         -formatList {{STRING 20 0 1} {ICON 2} {STRING 15 1 0} {DATA}} \
  1605.         -selection MULTIPLE \
  1606.         -CHARM_iconList [list " " "D" "T"] \
  1607.         -MOTIF_iconList [list "$ICON_PATH/blank.px" \
  1608.         "$ICON_PATH/disable.px" \
  1609.         "$ICON_PATH/blank.px"] \
  1610.         -font monoNormalFont \
  1611.         -shortHelpCallback SaShortHelpCB \
  1612.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_ADDR_IN_POOL_SH]]\
  1613.     ] \
  1614.     [list SCO_AAS_MSG_ACTION \
  1615.         [list VtRadioBox \
  1616.         -horizontal] \
  1617.     ] \
  1618.     ]]
  1619.     set poolNameW [VxGetVar $alformW widget1]
  1620.     set poolNameF [VxGetVar $alformW form1]
  1621.     set addrListL [VxGetVar $alformW label2]
  1622.     set addrListW [VxGetVar $alformW widget2]
  1623.     set actionRbL [VxGetVar $alformW label3]
  1624.     set actionRbW [VxGetVar $alformW widget3]
  1625.     VtSetValues $poolNameF -CHARM_topOffset 1 -MOTIF_topOffset 25
  1626.     VtSetValues $poolNameW -rightSide NONE
  1627.     VtSetValues $addrListW -rightSide NONE
  1628.     VtSetValues $actionRbW -rightSide NONE
  1629.     set controlEnableW [VtToggleButton $actionRbW.controlEnable \
  1630.     -label [IntlLocalizeMsg SCO_AAS_MSG_CONTROL_ENABLE] \
  1631.     -labelCenter \
  1632.     -shortHelpCallback SaShortHelpCB \
  1633.     -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_CONTROL_ENABLE_SH]]
  1634.     set controlDisableW [VtToggleButton $actionRbW.controlDisable \
  1635.     -label [IntlLocalizeMsg SCO_AAS_MSG_CONTROL_DISABLE] \
  1636.     -labelCenter \
  1637.     -shortHelpCallback SaShortHelpCB \
  1638.     -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_CONTROL_DISABLE_SH]]
  1639.     set controlReleaseW [VtToggleButton $actionRbW.range \
  1640.     -label [IntlLocalizeMsg SCO_AAS_MSG_CONTROL_RELEASE] \
  1641.     -labelCenter \
  1642.     -shortHelpCallback SaShortHelpCB \
  1643.     -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_CONTROL_RELEASE_SH]]
  1644.     set sep [VtSeparator $form.sep1 -horizontal \
  1645.     -leftSide FORM -rightSide FORM \
  1646.     -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  1647.     -topSide $alformW]
  1648.     set status [SaStatusBar $form.status 0]
  1649.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  1650.     VxSetVar $form alformW $alformW
  1651.     VxSetVar $form poolNameW $poolNameW
  1652.     VxSetVar $form poolNameF $poolNameF
  1653.     VxSetVar $form addrListW $addrListW
  1654.     VxSetVar $form actionRbW $actionRbW
  1655.     VxSetVar $form controlEnableW $controlEnableW
  1656.     VxSetVar $form controlDisableW $controlDisableW
  1657.     VxSetVar $form controlReleaseW $controlReleaseW
  1658.     set focusList [list $poolNameW $addrListW $controlEnableW \
  1659.     $controlDisableW $controlReleaseW]
  1660.     lappend focusList [VtGetValues $form -ok]
  1661.     SaSetTabGroups $form $focusList
  1662.     SaSetFocusList $form $focusList
  1663. }
  1664. proc ControlCB {cbs} {
  1665.     set dialog [keylget cbs dialog]    ;# dialog is Main(Dialog)
  1666.     set form [VtFormDialog $dialog.poolDlog \
  1667.     -title [IntlLocalizeMsg SCO_AAS_MSG_CONTROL_NAME] \
  1668.     -help \
  1669.     -autoLock ControlActionCB \
  1670.     -okCallback ControlActionCB \
  1671.     -cancelButton CANCEL \
  1672.     -cancelCallback VxEndFormCB]
  1673.     BuildControl $form
  1674.     set poolNameW [VxGetVar $form poolNameW]
  1675.     set addrListW [VxGetVar $form addrListW]
  1676.     set controlEnableW [VxGetVar $form controlEnableW]
  1677.     set drawnParentList [browser:GetParentDrawnList]
  1678.     set drawnPoolList {}
  1679.     foreach entry $drawnParentList {
  1680.     lappend drawnPoolList [lindex $entry 0]
  1681.     }
  1682.     if {[lempty $drawnPoolList]} {
  1683.     VtDestroyDialog $form
  1684.     VtUnLock 
  1685.     return
  1686.     }
  1687.     set pos [browser:GetSelectedItemPos]
  1688.     set item [browser:GetSelectedItem]
  1689.     if {[browser:IsParent $pos]} {
  1690.         set poolName [lindex $item 0]
  1691.     set selAddr {}
  1692.     } else {
  1693.     set parent [browser:FindItemParent $pos]
  1694.         set poolName [lindex $parent 0]
  1695.     set selAddr [lindex $item 0] 
  1696.     }
  1697.     set poolIndex [lsearch $drawnPoolList $poolName]
  1698.     lvarpop drawnPoolList $poolIndex 
  1699.     lvarpush drawnPoolList $poolName 0 
  1700.     VtSetValues $poolNameW -itemList $drawnPoolList
  1701.     VxSetVar $form selPool $poolName    ;# pass selected pool name 
  1702.     VxSetVar $form selAddr $selAddr    ;# pass selected address
  1703.     VxSetVar $form parent $dialog    ;# pass parent dialog
  1704.     VtSetValues $controlEnableW -value 1 
  1705.     VtShow $form
  1706.     VtUnLock
  1707. }
  1708. proc SelectChildCB {cbs} {
  1709.     ControlCB $cbs
  1710. }
  1711. proc SaveServerCB { cbs } {
  1712.     global pwdList
  1713.     keylget cbs dialog dialog
  1714.     set db_dirW   [VxGetVar $dialog db_dir]
  1715.     set db_sizeW  [VxGetVar $dialog db_size]
  1716.     set cp_dirW   [VxGetVar $dialog cp_dir]
  1717.     set cp_intvlW [VxGetVar $dialog cp_intvl]
  1718.     set cp_numW   [VxGetVar $dialog cp_num]
  1719.     set parent    [VxGetVar $dialog parent]
  1720.     set db_dir   [VtGetValues $db_dirW -value]
  1721.     set db_size  [VtGetValues $db_sizeW -value]
  1722.     set cp_dir   [VtGetValues $cp_dirW -value]
  1723.     set cp_intvl [VtGetValues $cp_intvlW -value]
  1724.     set cp_num   [VtGetValues $cp_numW -value]
  1725.     if {[string length $db_dir]} {
  1726.     keylset serverInfo database_dir $db_dir
  1727.     }
  1728.     if {[string length $db_size]} {
  1729.     keylset serverInfo max_db_size $db_size
  1730.     }
  1731.     if {[string length $cp_dir]} {
  1732.     keylset serverInfo checkpoint_dir $cp_dir
  1733.     }
  1734.     if {[string length $cp_intvl]} {
  1735.     keylset serverInfo checkpoint_intvl $cp_intvl
  1736.     }
  1737.     if {[string length $cp_num]} {
  1738.     keylset serverInfo num_checkpoints $cp_num
  1739.     }
  1740.     if {[info exists pwdList] && [llength $pwdList]} {
  1741.     keylset serverInfo passwordList $pwdList
  1742.     }
  1743.     if {[ErrorCatch errStack 0 "MakeCall aasServer NULL {} ObjectDelete" \
  1744.     {} SCO_AAS_ERR_DELETE_SERVER_ATTR] != 0} {
  1745.     SaDisplayErrorStacks $parent.err [list $errStack] NOHELP
  1746.     VxEndFormCB $cbs
  1747.     VtUnLock
  1748.     return
  1749.     }    
  1750.     if {[info exists serverInfo]} {
  1751.     if {[ErrorCatch errStack 0 "MakeCall aasServer NULL [list $serverInfo] \
  1752.         ObjectCreate" {} SCO_AAS_ERR_CREATE_SERVER_ATTR] != 0} {
  1753.         SaDisplayErrorStacks $parent.err [list $errStack] NOHELP
  1754.             VxEndFormCB $cbs
  1755.         VtUnLock
  1756.         return
  1757.     }    
  1758.     }
  1759.     ReconfigCB    $cbs
  1760.     VxEndFormCB $cbs
  1761.     VtUnLock
  1762. }
  1763. proc GetServerConfig { dialog } {
  1764.     global pwdList startDbDir
  1765.     set db_dirW   [VxGetVar $dialog db_dir]
  1766.     set db_sizeW  [VxGetVar $dialog db_size]
  1767.     set cp_dirW   [VxGetVar $dialog cp_dir]
  1768.     set cp_intvlW [VxGetVar $dialog cp_intvl]
  1769.     set cp_numW   [VxGetVar $dialog cp_num]
  1770.     set pwdListW   [VxGetVar $dialog pwdList]
  1771.     if {[ErrorCatch {} 1 "MakeCall aasServer NULL {}" \
  1772.     infoList SCO_AAS_ERR_GET_SERVER_ATTR] != 0} {
  1773.     return 1
  1774.     }    
  1775.     set info [lindex $infoList 0]
  1776.     keylget info attrList serverInfo 
  1777.     set keys [keylkeys serverInfo]
  1778.     if {[lsearch $keys database_dir] != -1} {
  1779.         keylget serverInfo database_dir db_dir
  1780.         VtSetValues $db_dirW -value $db_dir 
  1781.     }
  1782.     if {![info exists startDbDir]} {
  1783.     if {[info exists db_dir]} {
  1784.         set startDbDir $db_dir
  1785.     } else {
  1786.         set startDbDir ""
  1787.     }
  1788.     }
  1789.     if {[lsearch $keys max_db_size] != -1} {
  1790.         VtSetValues $db_sizeW -value [keylget serverInfo max_db_size]
  1791.     }
  1792.     if {[lsearch $keys checkpoint_dir] != -1} {
  1793.     VtSetValues $cp_dirW -value [keylget serverInfo checkpoint_dir]
  1794.     }
  1795.     if {[lsearch $keys checkpoint_intvl] != -1} {
  1796.     VtSetValues $cp_intvlW -value [keylget serverInfo checkpoint_intvl]
  1797.     }
  1798.     if {[lsearch $keys num_checkpoints] != -1} {
  1799.     VtSetValues $cp_numW -value [keylget serverInfo num_checkpoints]
  1800.     }
  1801.     if {[lsearch $keys passwordList] != -1} {
  1802.     keylget serverInfo passwordList pwdList
  1803.     } else {
  1804.     set pwdList {}
  1805.     }
  1806.     return 0
  1807. }
  1808. proc DoPwdCB { action cbs } {
  1809.     global pwdList
  1810.     set dialog [keylget cbs dialog]
  1811.     set pwdW   [VxGetVar $dialog pwdList]
  1812.     set password [VtGetValues $pwdW -value]
  1813.     if {![string length $password]} {
  1814.     VtUnLock
  1815.     return
  1816.     } else {
  1817.     VtSetValues $pwdW -value ""
  1818.     }
  1819.     switch $action {
  1820.     add {
  1821.         if {[lsearch $pwdList $password] == -1} {
  1822.         lappend pwdList $password
  1823.         set passMsg [IntlLocalizeMsg SCO_AAS_MSG_PWD_ADD]
  1824.         } else {
  1825.         ErrorPush errStack 0 SCO_AAS_ERR_PWD_ADD_EXIST
  1826.         }    
  1827.     }
  1828.     delete {
  1829.         set index [lsearch $pwdList $password]
  1830.         if {$index == -1} {
  1831.         ErrorPush errStack 0 SCO_AAS_ERR_PWD_DEL_EXIST
  1832.         } else {
  1833.         lvarpop pwdList $index
  1834.         set passMsg [IntlLocalizeMsg SCO_AAS_MSG_PWD_DEL]
  1835.         } 
  1836.     }
  1837.     verify {
  1838.         if {[lsearch $pwdList $password] == -1} {
  1839.         ErrorPush errStack 0 SCO_AAS_ERR_PWD_VERIFY
  1840.         } else {    
  1841.         set passMsg [IntlLocalizeMsg SCO_AAS_MSG_PWD_VERIFY]
  1842.         }
  1843.     }
  1844.     default {
  1845.         ErrorPush errStack 0 SCO_AAS_ERR_PWD_BAD_ACTION $action
  1846.     }
  1847.     }
  1848.     if {[info exists errStack] && [llength $errStack]} {
  1849.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  1850.     } elseif {[info exists passMsg]} {
  1851.     set pwdMsg [VtMessageDialog $dialog.pass \
  1852.         -message $passMsg \
  1853.         -ok]
  1854.     VtShow $pwdMsg
  1855.     }
  1856.     VtUnLock
  1857. }
  1858. proc BuildServer { form } {
  1859.     set alform [SaAlignedForm $form.align [list \
  1860.             [list SCO_AAS_MSG_DBASE \
  1861.                 [list VtText  \
  1862.                 -columns 20 \
  1863.                 -callback "SaSetFocus next" \
  1864.                 -shortHelpCallback SaShortHelpCB \
  1865.                 -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_DBASE_SH]] \
  1866.             ] \
  1867.             [list SCO_AAS_MSG_COMP_SIZE \
  1868.                 [list VtText \
  1869.                 -columns 20 \
  1870.                 -callback "SaSetFocus next" \
  1871.                 -shortHelpCallback SaShortHelpCB \
  1872.                 -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_COMP_SIZE_SH]] \
  1873.             ] \
  1874.             [list SCO_AAS_MSG_CHKP_DIR \
  1875.                 [list VtText \
  1876.                 -columns 20 \
  1877.                 -callback "SaSetFocus next" \
  1878.                 -shortHelpCallback SaShortHelpCB \
  1879.                 -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_CHKP_DIR_SH]] \
  1880.             ] \
  1881.             [list SCO_AAS_MSG_CHKP_INTVL \
  1882.                 [list VtText \
  1883.                 -columns 20 \
  1884.                 -callback "SaSetFocus next" \
  1885.                 -shortHelpCallback SaShortHelpCB \
  1886.                 -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_CHKP_INTVL_SH]] \
  1887.             ] \
  1888.             [list SCO_AAS_MSG_NUM_CHKP \
  1889.                 [list VtText \
  1890.                 -columns 20 \
  1891.                 -callback "SaSetFocus next" \
  1892.                 -shortHelpCallback SaShortHelpCB \
  1893.                 -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_NUM_CHKP_SH]] \
  1894.             ] \
  1895.             [list SCO_AAS_MSG_PASSWD \
  1896.                 [list VtText \
  1897.                 -callback "SaSetFocus next" \
  1898.                 -columns 20 \
  1899.                 -noEcho \
  1900.                 -shortHelpCallback SaShortHelpCB \
  1901.                 -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_PASSWD_SH]] \
  1902.             ] ] ]
  1903.         VtSetValues [VxGetVar $alform form1] -CHARM_topOffset 1
  1904.         VtSetValues [VxGetVar $alform form6] -CHARM_topOffset 1 -MOTIF_topOffset 12
  1905.          set cntrl_rc [VtRowColumn $alform.cntrl_rc \
  1906.                                 -CHARM_spacing 1 -horizontal \
  1907.                                 -MOTIF_spacing 10 \
  1908.                                 -CHARM_topOffset 1 \
  1909.                                 -leftSide NONE \
  1910.                 -rightSide FORM \
  1911.                                 -bottomSide NONE]
  1912.                  set addPwd [VtPushButton $cntrl_rc.addPwd \
  1913.                                 -label [IntlLocalizeMsg SCO_AAS_MSG_PASSWD_ADD] \
  1914.                                 -labelCenter \
  1915.                                 -callback { DoPwdCB add } \
  1916.                                 -shortHelpCallback SaShortHelpCB \
  1917.                                 -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_PASSWD_ADD_SH]]
  1918.                  set delPwd [VtPushButton $cntrl_rc.delPwd \
  1919.                                 -label [IntlLocalizeMsg SCO_AAS_MSG_PASSWD_DEL] \
  1920.                                 -CHARM_leftOffset 2 \
  1921.                                 -labelCenter \
  1922.                                 -callback { DoPwdCB delete } \
  1923.                                 -shortHelpCallback SaShortHelpCB \
  1924.                                 -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_PASSWD_DEL_SH]]
  1925.                  set verPwd [VtPushButton $cntrl_rc.verPwd \
  1926.                                 -label [IntlLocalizeMsg SCO_AAS_MSG_PASSWD_VER] \
  1927.                                 -CHARM_leftOffset 2 \
  1928.                                 -labelCenter \
  1929.                                 -callback { DoPwdCB verify } \
  1930.                                 -shortHelpCallback SaShortHelpCB \
  1931.                                 -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_PASSWD_VER_SH]]
  1932.      set sep [VtSeparator $form.sep1 -horizontal \
  1933.             -leftSide FORM -rightSide FORM \
  1934.             -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  1935.             -topSide $alform]
  1936.         set status [SaStatusBar $form.status 0]
  1937.         VtSetValues $sep -bottomSide $status -bottomOffset 0
  1938.         VtSetValues [VxGetVar $alform widget1] -rightSide NONE
  1939.     VxSetVar $form db_dir     [VxGetVar $alform widget1]
  1940.     VxSetVar $form db_size     [VxGetVar $alform widget2]
  1941.     VxSetVar $form cp_dir      [VxGetVar $alform widget3]
  1942.     VxSetVar $form cp_intvl    [VxGetVar $alform widget4]
  1943.     VxSetVar $form cp_num      [VxGetVar $alform widget5]
  1944.     VxSetVar $form pwdList     [VxGetVar $alform widget6]
  1945.     VtSetFocus [VxGetVar $alform widget1]
  1946. }
  1947. proc ServerConfigCB { cbs } {
  1948.     set dialog [keylget cbs dialog]
  1949.     set form [VtFormDialog $dialog.serverDlog \
  1950.     -title [IntlLocalizeMsg SCO_AAS_MSG_SERV] \
  1951.     -okCallback SaveServerCB \
  1952.     -autoLock SaveServerCB \
  1953.     -cancelButton CANCEL \
  1954.     -cancelCallback VxEndFormCB \
  1955.     -help ]
  1956.     BuildServer $form
  1957.     if {[ErrorCatch errStack 0 "GetServerConfig $form" {} \
  1958.     SCO_AAS_ERR_GET_SERVER_CONFIG] != 0} {
  1959.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  1960.     VtUnLock
  1961.     return
  1962.     }    
  1963.     VxSetVar $form parent $dialog
  1964.     VtShow $form
  1965.     VtUnLock
  1966. }
  1967. proc StartCB { cbs } {
  1968.     keylget cbs dialog dialog 
  1969.     if {[ErrorCatch errStack 0 "ActionCall aasServer NULL start" {} \
  1970.     SCO_AAS_ERR_START_SERVER] != 0} {
  1971.     SaDisplayErrorStacks $dialog.startErr [list $errStack] NOHELP
  1972.     }
  1973.     VtUnLock
  1974.     return
  1975. }
  1976. proc StopCB { cbs } {
  1977.     keylget cbs dialog dialog 
  1978.     if {[ErrorCatch errStack 0 "ActionCall aasServer NULL stop" {} \
  1979.     SCO_AAS_ERR_STOP_SERVER] != 0} {
  1980.     SaDisplayErrorStacks $dialog.stopErr [list $errStack] NOHELP
  1981.     }
  1982.     VtUnLock
  1983.     return
  1984. }
  1985. proc RestartCB { parent cbs } {
  1986.     global startDbDir
  1987.     if {[ErrorCatch errStack 0 "ActionCall aasServer NULL restart" {} \
  1988.     SCO_AAS_ERR_RESTART_SERVER] != 0} {
  1989.     SaDisplayErrorStacks $parent.restart_err [list $errStack] NOHELP
  1990.     } else {
  1991.     unset startDbDir
  1992.     }    
  1993.     VtUnLock
  1994.     return
  1995. }
  1996. proc ReconfigCB { cbs } {
  1997.     global startDbDir 
  1998.     keylget cbs dialog dialog 
  1999.     if {[info exists startDbDir]} {
  2000.     if {[ErrorCatch errStack 0 "MakeCall aasServer NULL {}" \
  2001.         infoList SCO_AAS_ERR_GET_SERVER_ATTR] != 0} {
  2002.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2003.             VtUnLock
  2004.             return
  2005.     }
  2006.     set info [lindex $infoList 0]
  2007.         keylget info attrList serverInfo 
  2008.     set keys [keylkeys serverInfo]
  2009.     if {[lsearch $keys database_dir] != -1} {
  2010.         keylget serverInfo database_dir db_dir
  2011.     } else {
  2012.         set db_dir ""
  2013.     }
  2014.     if {![cequal $startDbDir $db_dir]} {
  2015.         VtShow [VtQuestionDialog $dialog.restart \
  2016.         -okLabel [IntlLocalizeMsg SCO_AAS_MSG_RECONFIG] \
  2017.         -autoLock RestartCB \
  2018.         -okCallback "RestartCB $dialog" \
  2019.         -cancel \
  2020.         -cancelButton CANCEL \
  2021.         -message [IntlLocalizeMsg SCO_AAS_MSG_RECONFIG_INFO]]
  2022.         VtUnLock
  2023.         return
  2024.     }
  2025.     }
  2026.     if {[ErrorCatch errStack 0 "ActionCall aasServer NULL reconfig" {} \
  2027.     SCO_AAS_ERR_RECONFIG_SERVER] != 0} {
  2028.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2029.     }    
  2030.     VtUnLock
  2031.     return
  2032. }
  2033. proc BuildFile {form} {
  2034.     set alform [SaAlignedForm $form.align [list \
  2035.     [list SCO_AAS_MSG_FILE_PATH \
  2036.         [list VtText  \
  2037.         -columns 30 \
  2038.         -callback "SaSetFocus next" \
  2039.         -readOnly \
  2040.         -shortHelpCallback SaShortHelpCB \
  2041.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_FILE_PATH_SH]] \
  2042.     ] \
  2043.     [list SCO_AAS_MSG_FILE_SIZE \
  2044.         [list VtText \
  2045.         -columns 30 \
  2046.         -callback "SaSetFocus next" \
  2047.         -readOnly \
  2048.         -shortHelpCallback SaShortHelpCB \
  2049.         -shortHelpString [IntlLocalizeMsg \
  2050.             SCO_AAS_MSG_FILE_SIZE_SH]] \
  2051.     ] \
  2052.     [list SCO_AAS_MSG_FILE_MTIME \
  2053.         [list VtText \
  2054.         -columns 30 \
  2055.         -callback "SaSetFocus next" \
  2056.         -readOnly \
  2057.         -shortHelpCallback SaShortHelpCB \
  2058.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_FILE_MTIME_SH]] \
  2059.     ] \
  2060.     [list SCO_AAS_MSG_FILE_ATIME \
  2061.         [list VtText \
  2062.         -columns 30 \
  2063.         -callback "SaSetFocus next" \
  2064.         -readOnly \
  2065.         -shortHelpCallback SaShortHelpCB \
  2066.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_FILE_ATIME_SH]] \
  2067.     ] \
  2068.     ]]
  2069.     VtSetValues [VxGetVar $alform form1] -CHARM_topOffset 1
  2070.     VtSetValues [VxGetVar $alform form4] -CHARM_topOffset 1 -MOTIF_topOffset 12
  2071.     set sep [VtSeparator $form.sep1 -horizontal \
  2072.     -leftSide FORM -rightSide FORM \
  2073.     -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  2074.     -topSide $alform]
  2075.     set status [SaStatusBar $form.status 0]
  2076.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  2077.     VtSetValues [VxGetVar $alform widget1] -rightSide NONE
  2078.     VxSetVar $form name     [VxGetVar $alform widget1]
  2079.     VxSetVar $form size     [VxGetVar $alform widget2]
  2080.     VxSetVar $form mtime      [VxGetVar $alform widget3]
  2081.     VxSetVar $form atime    [VxGetVar $alform widget4]
  2082.     VtSetFocus [VxGetVar $alform widget1]
  2083. }
  2084. proc SetFileInfo { item dialog } {
  2085.     set nameW    [VxGetVar $dialog name]
  2086.     set sizeW    [VxGetVar $dialog size]
  2087.     set mtimeW    [VxGetVar $dialog mtime]
  2088.     set atimeW    [VxGetVar $dialog atime]
  2089.     VtSetValues $nameW  -value [format "%s/%s" [keylget item path] \
  2090.     [keylget item name]]
  2091.     VtSetValues $sizeW  -value [keylget item size]
  2092.     VtSetValues $mtimeW -value [fmtclock [keylget item mtime] "%T %D"]
  2093.     VtSetValues $atimeW -value [fmtclock [keylget item atime] "%T %D"]
  2094.     return 0
  2095. }
  2096. proc ViewTranDbCB {cbs} {
  2097.     set dialog [keylget cbs dialog]
  2098.     if {[ErrorCatch errStack 0 "MakeCall aasDatabase NULL transactionList" \
  2099.     infoList SCO_AAS_ERR_GET_VIEW_TDB] != 0} {
  2100.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2101.     VtUnLock
  2102.     return
  2103.     }    
  2104.     set info [lindex $infoList 0]
  2105.     keylget info attrList attrList 
  2106.     keylget attrList transactionList transactionList 
  2107.     set form [VtFormDialog $dialog.viewTranDb \
  2108.     -title [IntlLocalizeMsg SCO_AAS_MSG_TDB] \
  2109.     -ok \
  2110.     -okCallback VxEndFormCB ] 
  2111.     BuildFile $form
  2112.     SetFileInfo $transactionList $form
  2113.     VtShow $form
  2114.     VtUnLock
  2115. }
  2116. proc SelectFileCB {type cbs} {
  2117.     if {[cequal remove $type]} {
  2118.     RemoveDbFileCB checkpoint $cbs
  2119.     } else {
  2120.     ViewFileCB $cbs
  2121.     }
  2122. }
  2123. proc BuildFileList {type form} {
  2124.    set fileListW [VtDrawnList $form.fileList \
  2125.     -MOTIF_rows 7 \
  2126.     -labelFormatList [list {STRING 15} {STRING 20}] \
  2127.     -labelList [list [IntlLocalizeMsg SCO_AAS_MSG_CKPT_NAME] \
  2128.         [IntlLocalizeMsg SCO_AAS_MSG_CKPT_TIME]] \
  2129.     -formatList {{STRING 15} {STRING 9} {STRING 11} {DATA}} \
  2130.     -autoLock SelectFileCB \
  2131.     -defaultCallback [list SelectFileCB $type] \
  2132.     -selection SINGLE \
  2133.     -topSide FORM \
  2134.     -leftSide FORM \
  2135.     -rightSide FORM \
  2136.     -shortHelpCallback SaShortHelpCB \
  2137.     -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_CKPT_FILES_SH]]
  2138.     set sep [VtSeparator $form.sep1 -horizontal \
  2139.     -leftSide FORM -rightSide FORM \
  2140.     -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  2141.     -topSide $fileListW]
  2142.     set status [SaStatusBar $form.status 0]
  2143.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  2144.     VxSetVar $form fileListW $fileListW
  2145. }
  2146. proc ViewFileCB {cbs} {
  2147.     set dialog [keylget cbs dialog]
  2148.     set fileListW [VxGetVar $dialog fileListW]
  2149.     set selected [lindex \
  2150.     [VtDrawnListGetSelectedItem $fileListW -byRecordList] 0]
  2151.     set item [lindex $selected 3]
  2152.     set form [VtFormDialog $dialog.viewFile \
  2153.     -title [IntlLocalizeMsg SCO_AAS_MSG_CKPT_FILE] \
  2154.     -ok \
  2155.     -okCallback VxEndFormCB ] 
  2156.     BuildFile $form
  2157.     SetFileInfo $item $form
  2158.     VtShow $form
  2159.     VtUnLock
  2160. }
  2161. proc CheckpointCB {type cbs} {
  2162.     set dialog [keylget cbs dialog]
  2163.     if {[ErrorCatch errStack 0 "MakeCall aasDatabase NULL checkpointList" \
  2164.     infoList SCO_AAS_ERR_CKPT_VIEW] != 0} {
  2165.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2166.     VtUnLock
  2167.     return
  2168.     }    
  2169.     set info [lindex $infoList 0]
  2170.     keylget info attrList attrList 
  2171.     keylget attrList checkpointList checkpointList 
  2172.     if {[llength $checkpointList] == 0} {
  2173.     ErrorPush errStack 0 SCO_AAS_ERR_CKPT_EMPTY
  2174.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2175.     VtUnLock
  2176.     return
  2177.     }
  2178.     set form [VtFormDialog $dialog.checkpt \
  2179.     -ok \
  2180.     -autoLock selectFileCB \
  2181.     -okCallback [list SelectFileCB $type] \
  2182.     -cancel \
  2183.     -cancelCallback VxEndFormCB ] 
  2184.     if {[cequal remove $type]} {
  2185.     VtSetValues $form -title [IntlLocalizeMsg SCO_AAS_MSG_CKPT_REMOVE]
  2186.     } else {
  2187.     VtSetValues $form -title [IntlLocalizeMsg SCO_AAS_MSG_CKPT_VIEW]
  2188.     } 
  2189.     BuildFileList $type $form
  2190.     set fileListW [VxGetVar $form fileListW]
  2191.     if {[llength $checkpointList] != 0} {
  2192.     foreach item $checkpointList {
  2193.         VtDrawnListAddItem $fileListW -recordList [list [list \
  2194.         [keylget item name] [keylget item time] [keylget item date] \
  2195.         $item]]
  2196.     }
  2197.     VtDrawnListSelectItem $fileListW -position 1
  2198.     }
  2199.     VtShow $form
  2200.     VtUnLock
  2201. }
  2202. proc RemoveFileCB { type cbs } {
  2203.     set dialog [keylget cbs dialog]
  2204.     set parent    [VxGetVar $dialog parent]    ;# get parent dialog
  2205.     if {[cequal $type transaction]} {
  2206.     keylset attr transactionList {}
  2207.     } elseif {[cequal $type checkpoint]} {
  2208.     set fileListW [VxGetVar $parent fileListW]
  2209.     set pos [lindex \
  2210.         [VtDrawnListGetSelectedItem $fileListW -byPositionList] 0]
  2211.         set selected [lindex \
  2212.         [VtDrawnListGetSelectedItem $fileListW -byRecordList] 0]
  2213.     set item [lindex $selected 3]
  2214.     keylset attr checkpointList [list $item]
  2215.     } else {
  2216.     ErrorThrow errstack 0 SCO_AAS_ERR_BAD_ATTR $type
  2217.     SaDisplayErrorStacks $parent.err [list $errStack] NOHELP
  2218.     VtUnLock
  2219.     return
  2220.     }
  2221.     if {[ErrorCatch errStack 0 "MakeCall aasDatabase NULL \
  2222.      [list $attr] ObjectRemove" {} SCO_AAS_ERR_DELETE_DB] != 0} {
  2223.     SaDisplayErrorStacks $parent.err [list $errStack] NOHELP
  2224.     } elseif {[cequal $type checkpoint]} {
  2225.     VtDrawnListDeleteItem $fileListW -position $pos 
  2226.     set noFiles [llength \
  2227.         [VtDrawnListGetItem $fileListW -all]]
  2228.     if {$noFiles > 0} {
  2229.         if {$pos > $noFiles} {
  2230.         VtDrawnListSelectItem $fileListW -position $noFiles
  2231.         } else {
  2232.         VtDrawnListSelectItem $fileListW -position $pos
  2233.         }
  2234.     } else {
  2235.         VxEndFormCB [list [list dialog $parent]]
  2236.     }
  2237.     }
  2238.     VtUnLock
  2239. }
  2240. proc RemoveDbFileCB {type cbs} {
  2241.     set dialog [keylget cbs dialog]
  2242.     set form [VtQuestionDialog $dialog.removeDbFile \
  2243.     -autoLock RemoveFileCB \
  2244.     -ok \
  2245.     -okCallback [list RemoveFileCB $type] \
  2246.     -cancel]
  2247.     VxSetVar $form parent $dialog    ;# pass parent dialog
  2248.     if {[cequal $type transaction]} {
  2249.     VtSetValues $form -message [IntlLocalizeMsg SCO_AAS_MSG_DELETE_TDB]
  2250.     } elseif {[cequal $type checkpoint]} {
  2251.     VtSetValues $form -message [IntlLocalizeMsg SCO_AAS_MSG_DELETE_CKPT]
  2252.     } else {
  2253.     ErrorThrow errstack 0 SCO_AAS_ERR_BAD_ATTR $type
  2254.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2255.     VtUnLock
  2256.     return
  2257.     }
  2258.     VtShow $form
  2259.     VtUnLock
  2260. }
  2261. proc RemoveAllCB {cbs} {
  2262.     set dialog [keylget cbs dialog]
  2263.     set parent    [VxGetVar $dialog parent]    ;# get parent dialog
  2264.     keylset attr transactionList {}
  2265.     if {[ErrorCatch errStack 0 "MakeCall aasDatabase NULL \
  2266.      [list $attr] ObjectRemove" {} SCO_AAS_ERR_DELETE_DB] != 0} {
  2267.     }
  2268.     if {[ErrorCatch errStack 0 "MakeCall aasDatabase NULL checkpointList" \
  2269.     infoList SCO_AAS_ERR_CKPT_VIEW] != 0} {
  2270.     SaDisplayErrorStacks $parent.err [list $errStack] NOHELP
  2271.     VtUnLock
  2272.     return
  2273.     }    
  2274.     set info [lindex $infoList 0]
  2275.     keylget info attrList attrList 
  2276.     if {[ErrorCatch errStack 0 "MakeCall aasDatabase NULL \
  2277.      [list $attrList] ObjectRemove" {} SCO_AAS_ERR_DELETE_DB] != 0} {
  2278.     }
  2279.     VtUnLock
  2280. }
  2281. proc RemoveDbAllCB {cbs} {
  2282.     set dialog [keylget cbs dialog]
  2283.     set form [VtQuestionDialog $dialog.removeAll \
  2284.     -message [IntlLocalizeMsg SCO_AAS_MSG_DELETE_ALL] \
  2285.     -autoLock RemoveAllCB \
  2286.     -ok \
  2287.     -okCallback RemoveAllCB \
  2288.     -cancel]
  2289.     VxSetVar $form parent $dialog    ;# pass parent dialog
  2290.     VtShow $form
  2291.     VtUnLock
  2292. }
  2293. proc SetMenuSensitivityCB {cbs} {
  2294.     global VIEW
  2295.     keylget cbs dialog dialog    ;# dialog is Main(Dialog)
  2296.     set add     [VxGetVar $dialog add]
  2297.     set modify    [VxGetVar $dialog modify]
  2298.     set delete    [VxGetVar $dialog delete]
  2299.     set rename  [VxGetVar $dialog rename]
  2300.     set control    [VxGetVar $dialog control]
  2301.     set pos [browser:GetSelectedItemPos]
  2302.     if {[cequal $VIEW GetPoolDef]} {
  2303.     set addSen 1
  2304.     if {$pos == 0} {
  2305.         set modifySen 0
  2306.         set deleteSen 0
  2307.         set renameSen 0
  2308.     } else {
  2309.         set parent [browser:IsParent $pos]
  2310.         if {$parent} {
  2311.         set modifySen 1
  2312.         set deleteSen 1
  2313.         set renameSen 1
  2314.         } else {
  2315.         set modifySen 0
  2316.         set deleteSen 0
  2317.         set renameSen 0
  2318.         }
  2319.     }
  2320.     } else {
  2321.     set addSen 0
  2322.     set modifySen 0
  2323.     set deleteSen 0
  2324.     set renameSen 0
  2325.     }
  2326.     if {$pos == 0} {
  2327.     set controlSen 0
  2328.     } else {
  2329.     set controlSen 1
  2330.     }
  2331.     VtSetSensitive $add $addSen
  2332.     VtSetSensitive $modify $modifySen
  2333.     VtSetSensitive $delete $deleteSen
  2334.     VtSetSensitive $rename $renameSen
  2335.     VtSetSensitive $control $controlSen
  2336.     browser:SetSensitivity $dialog
  2337.     SetViewLabelCB $cbs
  2338.     VtUnLock -once
  2339. } ;# SetMenuSensitivityCB
  2340. proc SetViewLabelCB {cbs} {
  2341.     global VIEW
  2342.     keylget cbs dialog dialog    ;# dialog is Main(dialog)
  2343.     set mainlist [VxGetVar $dialog mainlist]
  2344.     set pos [browser:GetSelectedItemPos]
  2345.     if {$pos == 0} {
  2346.     set parent 1
  2347.     } else {
  2348.     set parent [browser:IsParent $pos]
  2349.     }
  2350.     switch $VIEW {
  2351.     GetPoolDef {
  2352.         if {$parent} {
  2353.         VtSetValues $mainlist \
  2354.             -labelFormatList [list {STRING 30} {STRING 30}] 
  2355.         VtSetValues $mainlist \
  2356.             -labelList [list [IntlLocalizeMsg \
  2357.             SCO_AAS_MSG_VIEW_POOL_NAME] \
  2358.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_TYPE]]
  2359.         } else {
  2360.         VtSetValues $mainlist \
  2361.             -labelFormatList [list {STRING 31 60}]
  2362.         VtSetValues $mainlist \
  2363.             -labelList [list [IntlLocalizeMsg \
  2364.             SCO_AAS_MSG_VIEW_ADDRESSES]]
  2365.        }
  2366.     }
  2367.     GetAddrAlloc {
  2368.         if {$parent} {
  2369.         VtSetValues $mainlist \
  2370.             -labelFormatList [list {STRING 30} {STRING 10} \
  2371.             {STRING 10} {STRING 10}] 
  2372.         VtSetValues $mainlist \
  2373.             -labelList [list \
  2374.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_POOL_NAME] \
  2375.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_TYPE] \
  2376.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_TOTAL] \
  2377.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_USED]] 
  2378.         } else {
  2379.         VtSetValues $mainlist \
  2380.             -labelFormatList [list {STRING 20} {STRING 10} \
  2381.             {STRING 10} {STRING 10} {STRING 15} {STRING 15} \
  2382.             {STRING 30}] 
  2383.         VtSetValues $mainlist \
  2384.             -labelList [list \
  2385.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_ADDRESS] \
  2386.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_STATUS] \
  2387.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_SERVICE] \
  2388.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_LEASE] \
  2389.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_AllOC_TIME] \
  2390.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_RELEASE_TIME] \
  2391.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_CLIENT_ID]]
  2392.        }
  2393.     }    
  2394.     GetServAlloc {
  2395.         if {$parent} {
  2396.         VtSetValues $mainlist \
  2397.             -labelFormatList [list {STRING 30} {STRING 10} \
  2398.             {STRING 20}] 
  2399.         VtSetValues $mainlist \
  2400.             -labelList [list [IntlLocalizeMsg \
  2401.             SCO_AAS_MSG_VIEW_POOL_NAME] \
  2402.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_TYPE] \
  2403.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_SERVICE]]
  2404.         } else {
  2405.         VtSetValues $mainlist \
  2406.             -labelFormatList [list {STRING 20} {STRING 10} \
  2407.             {STRING 10} {STRING 15} {STRING 15} {STRING 30}]
  2408.         VtSetValues $mainlist \
  2409.             -labelList [list \
  2410.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_ADDRESS] \
  2411.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_STATUS] \
  2412.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_LEASE] \
  2413.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_AllOC_TIME] \
  2414.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_RELEASE_TIME] \
  2415.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_CLIENT_ID]]
  2416.         }
  2417.     } 
  2418.     }
  2419. } ;# SetViewLabelCB
  2420. proc SetDisplayData {type} {
  2421.     switch $type {
  2422.     GetPoolDef { 
  2423.         set attrs addressList
  2424.     }
  2425.     GetAddrAlloc {
  2426.         set attrs [list poolInfo addressInfoList]
  2427.     }
  2428.     GetServAlloc {
  2429.         set attrs [list poolInfo serviceInfoList]
  2430.     }
  2431.     default {
  2432.         return 0
  2433.     }
  2434.     }
  2435.     if {[ErrorCatch {} 1 "GetAllCall aasPool [list $attrs]" \
  2436.     infoList SCO_AAS_ERR_POOL_INFO] != 0} {
  2437.     return 1
  2438.     }
  2439.     switch $type {
  2440.     GetPoolDef { 
  2441.         foreach info $infoList {
  2442.         keylget info instance poolTag
  2443.         keylget info attrList attrList
  2444.         keylget attrList addressList addressList
  2445.         if {![regexp -nocase {(.*):(INET)} $poolTag tmp poolName \
  2446.             addrType]} {
  2447.             ErrorPush {} 1 SCO_AAS_ERR_INVALID_ADDRTYPE "$addrType"
  2448.             return 1
  2449.         }
  2450.         browser:SetDisplayEntry $poolTag \
  2451.             [list $poolName $addrType] $addressList
  2452.         }
  2453.         }
  2454.     GetAddrAlloc {
  2455.         foreach info $infoList {
  2456.         keylget info instance poolTag
  2457.         keylget info attrList attrList
  2458.         keylget attrList poolInfo poolInfo
  2459.         keylget attrList addressInfoList addressInfoList
  2460.         if {![regexp -nocase {(.*):(INET)} $poolTag tmp poolName \
  2461.             addrType]} {
  2462.             ErrorPush {} 1 SCO_AAS_ERR_INVALID_ADDRTYPE "$addrType"
  2463.             return 1
  2464.         }
  2465.         browser:SetDisplayEntry $poolTag \
  2466.             [list $poolName $addrType [lindex $poolInfo 0] \
  2467.             [lindex $poolInfo 1]] $addressInfoList
  2468.         }
  2469.         }
  2470.     GetServAlloc {
  2471.         foreach info $infoList {
  2472.         keylget info instance poolTag
  2473.         keylget info attrList attrList
  2474.         keylget attrList serviceInfoList serviceInfoList
  2475.         if {[llength $serviceInfoList] == 0} {
  2476.             continue
  2477.         }
  2478.         if {![regexp -nocase {(.*):(INET)} $poolTag tmp poolName \
  2479.             addrType]} {
  2480.             ErrorPush {} 1 SCO_AAS_ERR_INVALID_ADDRTYPE "$addrType"
  2481.             return 1
  2482.         }
  2483.         set serviceList [lsort -increasing [keylkeys serviceInfoList]]
  2484.         foreach service $serviceList {
  2485.             set newTag [format "%s%s%s%s" $poolName $service \
  2486.             ":" $addrType] 
  2487.             keylget serviceInfoList $service addressInfoList
  2488.             browser:SetDisplayEntry $newTag \
  2489.                 [list $poolName $addrType $service] $addressInfoList
  2490.         }
  2491.         }
  2492.         }
  2493.     }
  2494.     return 0
  2495. } ;# SetDisplayData
  2496. proc ViewCB { type cbs } {
  2497.     global Main managedHost VIEW
  2498.     keylget cbs dialog dialog    ;# dialog is Main(Dialog)
  2499.     set mainlist    [VxGetVar $dialog mainlist]
  2500.     set view(poolDef)    [VxGetVar $dialog poolDef]
  2501.     set view(addrAlloc) [VxGetVar $dialog addrAlloc]
  2502.     set view(servAlloc) [VxGetVar $dialog servAlloc]
  2503.     set modeWidget    [VxGetVar $dialog modeWidget]
  2504.     set VIEW $type
  2505.     switch $type {
  2506.     GetPoolDef { 
  2507.         VtSetValues $view(poolDef) -set 1
  2508.         VtSetValues $view(addrAlloc) -set 0
  2509.         VtSetValues $view(servAlloc) -set 0
  2510.         VtSetValues $mainlist \
  2511.         -labelFormatList [list {STRING 30} {STRING 30}] 
  2512.         VtSetValues $mainlist \
  2513.         -labelList [list [IntlLocalizeMsg SCO_AAS_MSG_VIEW_POOL_NAME] \
  2514.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_TYPE]]
  2515.         VtSetValues $modeWidget -label \
  2516.         [IntlLocalizeMsg SCO_AAS_MSG_VIEW_POOL_DEF_LABEL $managedHost]
  2517.         set data { 
  2518.         {
  2519.             {{STRING 30} {STRING 30} {DATA} {DATA}} 
  2520.             {{STRING 30} {STRING 30} {DATA} {DATA}} 
  2521.             monoBoldFont 
  2522.         }
  2523.         {
  2524.             {{STRING 31 60} {DATA} {DATA}}
  2525.             {{STRING 31 60} {DATA} {DATA}}
  2526.             monoNormalFont
  2527.         }
  2528.         }
  2529.     }
  2530.     GetAddrAlloc {
  2531.         VtSetValues $view(poolDef) -set 0
  2532.         VtSetValues $view(addrAlloc) -set 1
  2533.         VtSetValues $view(servAlloc) -set 0
  2534.         VtSetValues $mainlist \
  2535.         -labelFormatList [list {STRING 30} {STRING 10} \
  2536.             {STRING 10} {STRING 10}] 
  2537.         VtSetValues $mainlist \
  2538.         -labelList [list [IntlLocalizeMsg SCO_AAS_MSG_VIEW_POOL_NAME] \
  2539.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_TYPE] \
  2540.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_TOTAL] \
  2541.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_USED]] 
  2542.         VtSetValues $modeWidget -label \
  2543.         [IntlLocalizeMsg SCO_AAS_MSG_VIEW_ADDR_ALLOC_LABEL $managedHost]
  2544.         set data {
  2545.         {
  2546.             {{STRING 30} {STRING 10} {STRING 10} {STRING 10} \
  2547.              {DATA} {DATA}} 
  2548.             {{STRING 30} {STRING 10} {STRING 10} {STRING 10} \
  2549.              {DATA} {DATA}} 
  2550.             monoBoldFont 
  2551.         }
  2552.         {
  2553.             {{STRING 15} {ICON 2} {STRING 10} {STRING 10} {STRING 10} \
  2554.             {STRING 6} {STRING 9} {STRING 6} {STRING 9} {STRING 30} \
  2555.             {DATA} {DATA}} 
  2556.             {{STRING 15} {ICON 2} {STRING 10} {STRING 10} {STRING 10} \
  2557.              {STRING 6} {STRING 9} {STRING 6} {STRING 9} {STRING 30} \
  2558.              {DATA} {DATA}}
  2559.             monoNormalFont
  2560.         }
  2561.         }
  2562.     }
  2563.     GetServAlloc {
  2564.         VtSetValues $view(poolDef) -set 0
  2565.         VtSetValues $view(addrAlloc) -set 0
  2566.         VtSetValues $view(servAlloc) -set 1
  2567.         VtSetValues $mainlist \
  2568.         -labelFormatList [list {STRING 30} {STRING 10} \
  2569.             {STRING 20}] 
  2570.         VtSetValues $mainlist \
  2571.         -labelList [list [IntlLocalizeMsg SCO_AAS_MSG_VIEW_POOL_NAME] \
  2572.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_TYPE] \
  2573.             [IntlLocalizeMsg SCO_AAS_MSG_VIEW_SERVICE]]
  2574.         VtSetValues $modeWidget -label \
  2575.         [IntlLocalizeMsg SCO_AAS_MSG_VIEW_SERV_ALLOC_LABEL $managedHost]
  2576.         set data {
  2577.         {
  2578.             {{STRING 30} {STRING 10} {STRING 20} \
  2579.              {DATA} {DATA}} 
  2580.             {{STRING 30} {STRING 10} {STRING 20} \
  2581.              {DATA} {DATA}} 
  2582.             monoBoldFont 
  2583.         }
  2584.         {
  2585.             {{STRING 15} {ICON 2} {STRING 10} {STRING 10} {STRING 6} \
  2586.              {STRING 9} {STRING 6} {STRING 9} {STRING 30} \
  2587.              {DATA} {DATA}} 
  2588.             {{STRING 15} {ICON 2} {STRING 10} {STRING 10} {STRING 6} \
  2589.              {STRING 9} {STRING 6} {STRING 9} {STRING 30} \
  2590.              {DATA} {DATA}} 
  2591.             monoNormalFont
  2592.         }
  2593.         }
  2594.     }
  2595.     default {
  2596.         VtUnLock
  2597.         return
  2598.     }
  2599.     }
  2600.     browser:DeleteAll
  2601.     browser:Init $mainlist $data
  2602.     if {[ErrorCatch errStack 0 "SetDisplayData $type" {}] != 0} {
  2603.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2604.             VtUnLock
  2605.             return
  2606.     }
  2607.     browser:ReDisplay
  2608.     SetMenuSensitivityCB $cbs
  2609.     VtUnLock
  2610. } ;# ViewCB
  2611. proc SetAutoRefreshIntervalCB {cbs} {
  2612.     set dialog      [keylget cbs dialog]
  2613.     set interval    [VxGetVar $dialog interval]
  2614.     set newInterval [VtGetValues [VxGetVar $interval text] -value]
  2615.     if [lempty $newInterval] {
  2616.     ErrorPush errStack 0 SCO_AAS_ERR_NO_INTERVAL
  2617.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2618.     VtUnLock
  2619.     return
  2620.     }
  2621.     SaAutoRefreshSetInterval [expr {$newInterval * 60}]
  2622.     VxEndFormCB $cbs
  2623. }
  2624. proc GetAutoRefreshIntervalCB {cbs} {
  2625.     keylget cbs dialog parent
  2626.     set dialog [VtFormDialog $parent.getInterval \
  2627.                 -title [IntlLocalizeMsg SCO_AAS_MSG_AUTO_REFRESH_TITLE] \
  2628.                 -ok -okCallback SetAutoRefreshIntervalCB \
  2629.                 -cancelButton CANCEL \
  2630.                 -cancel -cancelCallback VxEndFormCB]
  2631.     set interval [expr {[SaAutoRefreshGetInterval] / 60}]
  2632.     set alform [SaAlignedForm $dialog.interval [list \
  2633.                 [list SCO_AAS_MSG_AUTO_REFRESH_LABEL \
  2634.                       [list VxSpinButton 8 1 {} 30 {} 1 $interval \
  2635.                             {} {}]] \
  2636.                 ]]
  2637.     VtSetValues $alform -topSide FORM -bottomSide FORM -rightSide FORM
  2638.     set intervalL [VxGetVar $alform label1]
  2639.     VtSetValues $intervalL -font medNormalFont
  2640.     VxSetVar $dialog interval [VxGetVar $alform widget1]
  2641.     VtShow $dialog
  2642.     VtUnLock
  2643. }
  2644. proc RefreshDisplayCB { cbs } {
  2645.     global Main VIEW
  2646.     if {[ErrorCatch errStack 0 "SetDisplayData $VIEW" {}] != 0} {
  2647.         SaDisplayErrorStacks $Main(Dialog).err [list $errStack] NOHELP
  2648.             VtUnLock
  2649.             return
  2650.     }
  2651.     browser:ReDisplay [browser:GetSelectedItemPos]
  2652.     VtUnLock
  2653. }
  2654. proc BuildMenu {} {
  2655.     global Main
  2656.     set UpperMenu [VtMenuBar $Main(Dialog).uppermenu \
  2657.                -helpMenuItemList [SaHelpGetOptionsList] \
  2658.               ]
  2659.     set hostMenu [VtPulldown $UpperMenu.hostMenu \
  2660.                 -label [IntlLocalizeMsg SCO_AAS_MSG_HOST] \
  2661.                 -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_HOST_MN]]
  2662.     if {! [info exists Main(NO_OPEN)]} {
  2663.     VtPushButton $hostMenu.openHost \
  2664.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_OPEN_HOST_MN] \
  2665.         -label [IntlLocalizeMsg SCO_AAS_MSG_OPEN_HOST] \
  2666.         -shortHelpString  [IntlLocalizeMsg SCO_AAS_MSG_OPEN_HOST_SH] \
  2667.         -shortHelpCallback SaShortHelpCB \
  2668.         -callback SaOpenHostCB -autoLock SaOpenHostCB
  2669.     VtSeparator $hostMenu.separator
  2670.     }
  2671.     if {[info exists Main(exitLabel)]} {
  2672.     set label $Main(exitLabel)
  2673.     } else {
  2674.     set label [IntlLocalizeMsg SCO_AAS_MSG_EXIT]
  2675.     }
  2676.     if {[info exists Main(exitMN)]} {
  2677.     set mnemonic $Main(exitMN)
  2678.     } else {
  2679.     set mnemonic [IntlLocalizeMsg SCO_AAS_MSG_EXIT_MN]
  2680.     }
  2681.     if {[info exists Main(exitSH)]} {
  2682.     set shortHelp $Main(exitSH)
  2683.     } else {
  2684.     set shortHelp [IntlLocalizeMsg SCO_AAS_MSG_EXIT_SH]
  2685.     }
  2686.     VtPushButton $hostMenu.exit \
  2687.     -label $label \
  2688.     -mnemonic $mnemonic \
  2689.     -shortHelpCallback SaShortHelpCB \
  2690.     -shortHelpString $shortHelp \
  2691.     -callback ClosePrgCB
  2692.     set editMenu [VtPulldown $UpperMenu.objMenu \
  2693.         -label [IntlLocalizeMsg SCO_AAS_MSG_EDIT] \
  2694.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_EDIT_MN]]
  2695.     set editAdd [VtPushButton $editMenu.add \
  2696.         -label [IntlLocalizeMsg SCO_AAS_MSG_ADD_INET] \
  2697.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_ADD_INET_MN] \
  2698.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_ADD_INET_SH] \
  2699.         -shortHelpCallback SaShortHelpCB \
  2700.         -callback { DefineInetPoolCB "add" } \
  2701.         -autoLock DefineInetPool ]
  2702.     set editModify [VtPushButton $editMenu.modify \
  2703.         -label [IntlLocalizeMsg SCO_AAS_MSG_MODIFY] \
  2704.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_MODIFY_MN] \
  2705.         -shortHelpCallback SaShortHelpCB \
  2706.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_MODIFY_SH] \
  2707.         -callback { DefineInetPoolCB "modify" } \
  2708.         -autoLock DefineInetPoolCB ]
  2709.     set editDelete [VtPushButton $editMenu.delete \
  2710.         -label [IntlLocalizeMsg SCO_AAS_MSG_DELETE] \
  2711.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_DELETE_MN] \
  2712.         -shortHelpCallback SaShortHelpCB \
  2713.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_DELETE_SH] \
  2714.         -callback DeleteCB \
  2715.         -autoLock DeleteCB ]
  2716.     set editRename [VtPushButton $editMenu.rename \
  2717.         -label [IntlLocalizeMsg SCO_AAS_MSG_RENAME] \
  2718.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_RENAME_MN] \
  2719.         -shortHelpCallback SaShortHelpCB \
  2720.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_RENAME_SH] \
  2721.         -callback RenameCB \
  2722.         -autoLock RenameCB ]
  2723.     VtSeparator $editMenu.sep1
  2724.     set editControl [VtPushButton $editMenu.control \
  2725.         -label [IntlLocalizeMsg SCO_AAS_MSG_CONTROL] \
  2726.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_CONTROL_MN] \
  2727.         -shortHelpCallback SaShortHelpCB \
  2728.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_CONTROL_SH] \
  2729.         -callback ControlCB \
  2730.         -autoLock ControlCB ]
  2731.     set viewMenu [VtPulldown $UpperMenu.viewMenu \
  2732.         -label [IntlLocalizeMsg SCO_AAS_MSG_VIEW] \
  2733.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_VIEW_MN]]
  2734.     set viewPoolDef [VtToggleButton $viewMenu.poolDef \
  2735.         -label [IntlLocalizeMsg SCO_AAS_MSG_POOL_DEFINITION] \
  2736.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_POOL_DEFINITION_MN] \
  2737.         -shortHelpString [IntlLocalizeMsg \
  2738.             SCO_AAS_MSG_POOL_DEFINITION_SH] \
  2739.         -shortHelpCallback SaShortHelpCB \
  2740.         -autoLock ViewCB \
  2741.         -callback { ViewCB GetPoolDef } \
  2742.         -set 1 ] 
  2743.     set viewAddrAlloc [VtToggleButton $viewMenu.addrAlloc \
  2744.         -label [IntlLocalizeMsg SCO_AAS_MSG_ADDRESS_ALLOCATION] \
  2745.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_ADDRESS_ALLOCATION_MN] \
  2746.         -shortHelpString [IntlLocalizeMsg \
  2747.             SCO_AAS_MSG_ADDRESS_ALLOCATION_SH] \
  2748.         -shortHelpCallback SaShortHelpCB \
  2749.         -autoLock ViewCB \
  2750.         -callback { ViewCB GetAddrAlloc }]
  2751.     set viewServAlloc [VtToggleButton $viewMenu.servAlloc \
  2752.         -label [IntlLocalizeMsg SCO_AAS_MSG_SERVICE_ALLOCATION] \
  2753.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_SERVICE_ALLOCATION_MN] \
  2754.         -shortHelpString [IntlLocalizeMsg \
  2755.             SCO_AAS_MSG_SERVICE_ALLOCATION_SH] \
  2756.         -shortHelpCallback SaShortHelpCB \
  2757.         -autoLock ViewCB \
  2758.         -callback { ViewCB GetServAlloc }]
  2759.     VtSeparator $viewMenu.sep1
  2760.     browser:MenuOpts "SCO_AAS" $viewMenu $Main(Dialog)
  2761.     set serverMenu [VtPulldown $UpperMenu.serverMenu \
  2762.         -label [IntlLocalizeMsg SCO_AAS_MSG_SERVER] \
  2763.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_SERVER_MN]]
  2764.     set serverParam [VtPushButton $serverMenu.parameters \
  2765.         -label [IntlLocalizeMsg SCO_AAS_MSG_SERVER_PARAM] \
  2766.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_SERVER_PARAM_MN] \
  2767.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_SERVER_PARAM_SH] \
  2768.         -shortHelpCallback SaShortHelpCB \
  2769.         -autoLock ServerConfigCB \
  2770.         -callback ServerConfigCB ]
  2771.     VtSeparator $serverMenu.sep1
  2772.     set serverStart [VtPushButton $serverMenu.start \
  2773.         -label [IntlLocalizeMsg SCO_AAS_MSG_SERVER_START] \
  2774.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_SERVER_START_MN] \
  2775.         -shortHelpCallback SaShortHelpCB \
  2776.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_SERVER_START_SH] \
  2777.          -autoLock StartCB \
  2778.          -callback StartCB ]
  2779.     set serverStop [VtPushButton $serverMenu.stop \
  2780.         -label [IntlLocalizeMsg SCO_AAS_MSG_SERVER_STOP] \
  2781.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_SERVER_STOP_MN] \
  2782.         -shortHelpCallback SaShortHelpCB \
  2783.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_SERVER_STOP_SH] \
  2784.          -autoLock StopCB \
  2785.          -callback StopCB ]
  2786.     set serverReconfig [VtPushButton $serverMenu.reconfig \
  2787.         -label [IntlLocalizeMsg SCO_AAS_MSG_SERVER_RECONFIG] \
  2788.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_SERVER_RECONFIG_MN] \
  2789.         -shortHelpCallback SaShortHelpCB \
  2790.         -shortHelpString [IntlLocalizeMsg \
  2791.             SCO_AAS_MSG_SERVER_RECONFIG_SH] \
  2792.          -autoLock ReconfigCB \
  2793.          -callback ReconfigCB ]
  2794.     VtSeparator $serverMenu.sep2
  2795.     set dbMenu [VtPulldown $UpperMenu.dbMenu \
  2796.         -label [IntlLocalizeMsg SCO_AAS_MSG_DB] \
  2797.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_DB_MN]]
  2798.     set dbViewTran [VtPushButton $dbMenu.viewTran \
  2799.         -label [IntlLocalizeMsg SCO_AAS_MSG_DB_VIEWTRAN] \
  2800.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_DB_VIEWTRAN_MN] \
  2801.         -shortHelpCallback SaShortHelpCB \
  2802.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_DB_VIEWTRAN_SH] \
  2803.          -autoLock ViewTranDbCB \
  2804.          -callback ViewTranDbCB ]
  2805.     set dbViewCkpt [VtPushButton $dbMenu.viewCkpt \
  2806.         -label [IntlLocalizeMsg SCO_AAS_MSG_DB_VIEWCKPT] \
  2807.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_DB_VIEWCKPT_MN] \
  2808.         -shortHelpCallback SaShortHelpCB \
  2809.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_DB_VIEWCKPT_SH] \
  2810.          -autoLock CheckpointCB \
  2811.          -callback [list CheckpointCB view]]
  2812.     VtSeparator $dbMenu.sep1
  2813.     set dbRemoveTran [VtPushButton $dbMenu.removeTran \
  2814.         -label [IntlLocalizeMsg SCO_AAS_MSG_DB_REMTRAN] \
  2815.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_DB_REMTRAN_MN] \
  2816.         -shortHelpCallback SaShortHelpCB \
  2817.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_DB_REMTRAN_SH] \
  2818.          -autoLock RemoveDbFileCB \
  2819.          -callback [list RemoveDbFileCB transaction]]
  2820.     set dbRemoveCkpt [VtPushButton $dbMenu.removeCkpt \
  2821.         -label [IntlLocalizeMsg SCO_AAS_MSG_DB_REMCKPT] \
  2822.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_DB_REMCKPT_MN] \
  2823.         -shortHelpCallback SaShortHelpCB \
  2824.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_DB_REMCKPT_SH] \
  2825.          -autoLock CheckpointCB \
  2826.          -callback [list CheckpointCB remove]]
  2827.     set dbRemoveAll [VtPushButton $dbMenu.removeAll \
  2828.         -label [IntlLocalizeMsg SCO_AAS_MSG_DB_REMALL] \
  2829.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_DB_REMALL_MN] \
  2830.         -shortHelpCallback SaShortHelpCB \
  2831.         -shortHelpString [IntlLocalizeMsg SCO_AAS_MSG_DB_REMALL_SH] \
  2832.          -autoLock RemoveDbAllCB \
  2833.          -callback RemoveDbAllCB ]
  2834.     set optionsMenu [VtPulldown $UpperMenu.optionsMenu \
  2835.         -label [IntlLocalizeMsg SCO_AAS_MSG_OPTIONS] \
  2836.         -mnemonic [IntlLocalizeMsg SCO_AAS_MSG_OPTIONS_MN]]
  2837.     set optRefresh [SaAutoRefresh RefreshDisplayCB \
  2838.         $optionsMenu \
  2839.         [IntlLocalizeMsg SCO_AAS_MSG_AUTO_REFRESH_SH ] \
  2840.         SaShortHelpCB \
  2841.         GetAutoRefreshIntervalCB]
  2842.     VtSeparator $optionsMenu.sep1
  2843.     SaShortHelpMenuOptions $optionsMenu
  2844.     set modeWidget [VtLabel $Main(Dialog).mode \
  2845.     -MOTIF_leftOffset 4 -MOTIF_topOffset 20 \
  2846.     -label [IntlLocalizeMsg SCO_AAS_MSG_WAIT]]
  2847.     VxSetVar $Main(Dialog) add        $editAdd
  2848.     VxSetVar $Main(Dialog) modify    $editModify
  2849.     VxSetVar $Main(Dialog) delete    $editDelete
  2850.     VxSetVar $Main(Dialog) rename    $editRename
  2851.     VxSetVar $Main(Dialog) control    $editControl
  2852.     VxSetVar $Main(Dialog) poolDef    $viewPoolDef
  2853.     VxSetVar $Main(Dialog) addrAlloc    $viewAddrAlloc
  2854.     VxSetVar $Main(Dialog) servAlloc    $viewServAlloc
  2855.     VxSetVar $Main(Dialog) serverParam    $serverParam
  2856.     VxSetVar $Main(Dialog) reconfig    $serverReconfig
  2857.     VxSetVar $Main(Dialog) optionsMenu    $optionsMenu
  2858.     VxSetVar $Main(Dialog) refresh    $optRefresh
  2859.     VxSetVar $Main(Dialog) modeWidget    $modeWidget
  2860. }
  2861. proc BuildMainList {} {
  2862.     global Main ICON_PATH
  2863.     set mainlist [VtDrawnList $Main(Dialog).list \
  2864.     -horizontalScrollBar TRUE \
  2865.     -rows 13 \
  2866.     -selection SINGLE \
  2867.     -MOTIF_leftOffset 4 -MOTIF_rightOffset 4 \
  2868.     -CHARM_rows 12 \
  2869.     -formatList [list {STRING 30} {STRING 45} {DATA} {DATA}] \
  2870.     -labelFormatList [list {STRING 30} {STRING 45}] \
  2871.     -CHARM_iconList [list " " "D" "T"] \
  2872.     -MOTIF_iconList [list "$ICON_PATH/blank.px" \
  2873.         "$ICON_PATH/disable.px" \
  2874.         "$ICON_PATH/blank.px"] \
  2875.     -callback SetMenuSensitivityCB \
  2876.     -defaultCallback browser:ExpandCollapseCB \
  2877.     -autoLock {SetMenuSensitivityCB browser:ExpandCollapseCB} \
  2878.     -leftSide FORM -rightSide FORM ]
  2879.     VxSetVar $Main(Dialog) mainlist $mainlist
  2880.     set status [SaStatusBar $Main(Dialog).status 1]
  2881.     VtSetValues $mainlist -bottomSide $status
  2882. }
  2883. proc ClosePrgCB {cbs} {
  2884.     global Main
  2885.     if {[info exists Main(exitStr)] && $Main(exitStr)} {
  2886.     set selpos [browser:GetSelectedItemPos]
  2887.     set selItem [browser:FindItemParent $selpos]
  2888.     set poolName [lindex $selItem 0]
  2889.     puts "exit"
  2890.     puts "$poolName"
  2891.     }
  2892.     VtUnLock
  2893.     VtClose
  2894.     exit 0
  2895. }
  2896. proc aasGUI {} {
  2897.     global Main managedHost versionNumber
  2898.     set aasConf [VtOpen aasConf aasGUI]
  2899.     VtSetAppValues $aasConf \
  2900.      -versionString [IntlLocalizeMsg SCO_AAS_MSG_VERSION $versionNumber]
  2901.     set shortHostname [SaHostExtractSystemName $managedHost]
  2902.     set Main(Dialog) [VtFormDialog $aasConf.mainD \
  2903.         -title [IntlLocalizeMsg SCO_AAS_MSG_TITLE "$shortHostname"] \
  2904.         -wmShadowThickness 0 \
  2905.         -wmCloseCallback ClosePrgCB \
  2906.         -marginHeight 0 -marginWidth 0 ]
  2907.     VtLock
  2908.     BuildMenu
  2909.     BuildMainList
  2910.     SaCharmSetMaxFormDimensions $Main(Dialog)
  2911.     VtShow $Main(Dialog)
  2912.     if {[id userid] != 0 && !([isOwner] && [isOwner -host $managedHost])} then {
  2913.         SaDisplayNoAuths $Main(Dialog).noAuthBox \
  2914.            [IntlLocalizeMsg SCO_AAS_MSG_APP_TITLE] \
  2915.            ClosePrgCB $managedHost
  2916.     }
  2917.     ViewCB GetPoolDef [list [list dialog $Main(Dialog)]]
  2918.     if [info exists Main(tag)] {
  2919.         append parentId $Main(tag) :INET
  2920.     set pos [browser:GetParentPos $parentId]
  2921.     if {$pos} {
  2922.         browser:Highlight $pos
  2923.     }
  2924.     }
  2925.     VtUnLock
  2926. } ;# aasGUI
  2927. while {! [lempty $argv]} {
  2928.     set arg [lvarpop argv]
  2929.     if {! [lempty $arg]} {
  2930.         switch -- $arg {
  2931.         -h    { set Main(exitSH) [lvarpop argv] }
  2932.         -l    { set Main(exitLabel) [lvarpop argv] }
  2933.         -m    { set Main(exitMN) [lvarpop argv] }
  2934.         -n    { set Main(NO_OPEN) 1 }
  2935.         -o    { set Main(exitStr) 1 }
  2936.         -t    { set Main(tag) [lvarpop argv] }
  2937.         default    { lvarpush argv $arg
  2938.               break
  2939.                         }
  2940.         }
  2941.     }
  2942. }
  2943. if {[catch {exec /bin/uname -r} OS]} {
  2944.     set OS 4
  2945. }
  2946. switch -exact $OS {
  2947.     3.2 {
  2948.     set SA_LIB_DIR /etc/sysadm.d/lib
  2949.     set patchArea {__SSO_ID_ST@SCO:Unix:5.0.4Eb            @SSO_ID_END__}
  2950.     set NETROOT [SSO_GetSegmentRootPath SHARED $patchArea]
  2951.     set ICON_PATH ${NETROOT}/sa/aas 
  2952.     }
  2953.     default {
  2954.     set SA_LIB_DIR /usr/lib
  2955.     set patchArea {}
  2956.     set NETROOT /usr/lib/scoadmin
  2957.     set ICON_PATH ${NETROOT}/neticons
  2958.     }
  2959. loadlibindex ${SA_LIB_DIR}/sysadm.tlib
  2960. set versionNumber [SaGetSSOVersion $patchArea] 
  2961. set managedHost [GetManagedHost]
  2962. ErrorTopLevelCatch aasGUI [IntlLocalizeMsg SCO_AAS_MSG_APP_TITLE]
  2963. VtMainLoop
  2964.