Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

417 lines
14 KiB

  1. /********************************************************************/
  2. /** Microsoft LAN Manager **/
  3. /** Copyright(c) Microsoft Corp., 1987-1990 **/
  4. /********************************************************************/
  5. #define INCL_NOCOMMON
  6. #include <os2.h>
  7. #include "netcmds.h"
  8. #include "nettext.h"
  9. /***
  10. * READ THIS READ THIS READ THIS
  11. *
  12. * If this file is changed, swtchtbl.h must be regenerated via the following
  13. * command:
  14. *
  15. * sed -n -f text.sed swtchtbl.c > swtchtbl.h
  16. *
  17. * This is just until there is a sed supported on NT
  18. *
  19. ***
  20. *
  21. * This list of valid switches for each command is made up of
  22. * ordered triples. The first in each triple is what is acceptable
  23. * from the command line. The second in the triple is
  24. * what the switch get TRANSLATED into! If the second is NULL,
  25. * no translation is performed. The translation is done by
  26. * ValidateSwitches(), which should be called as the first
  27. * condition in the grammar (for each token). The third value
  28. * in the triple specifies whether an arguement is allowed following
  29. * the switch. Values for the third element are NO_ARG, ARG_OPT,
  30. * and ARG_REQ.
  31. *
  32. * A small example:
  33. * static SWITCHTAB *foo_switches[] = {
  34. * "/BAR", "/BELL", ARG_REQ,
  35. * "/JACKIE", NULL, NO_ARG,
  36. * NULL, NULL, NO_ARG };
  37. *
  38. * user types: net foo /bar:12 /jackie
  39. *
  40. * After ValidateSwitches is called, the SwitchList will contain:
  41. * /BELL:12, and /JACKIE. Simple enough!
  42. *
  43. * This translation ability can be used for internationalization,
  44. * customization, and backwards compatibility.
  45. *
  46. * To prevent folding to upper case of the switch ARGUMENT (switches
  47. * are always folded), add the English language form to the no_fold
  48. * array. (The english form is the 2nd element in the truple if there
  49. * is a second element; o/w it is the first element.)
  50. */
  51. /* It should not be necessary to change this. Provided only for future. */
  52. SWITCHTAB no_switches[] = {
  53. NULL, NULL, NO_ARG };
  54. SWITCHTAB add_only_switches[] = {
  55. swtxt_SW_ADD, NULL, NO_ARG,
  56. NULL, NULL, NO_ARG };
  57. SWITCHTAB del_only_switches[] = {
  58. swtxt_SW_DELETE, NULL, NO_ARG,
  59. NULL, NULL, NO_ARG };
  60. SWITCHTAB domain_only_switches[] = {
  61. swtxt_SW_DOMAIN, NULL, ARG_REQ,
  62. NULL, NULL, NO_ARG };
  63. SWITCHTAB add_del_switches[] = {
  64. swtxt_SW_ADD, NULL, NO_ARG,
  65. swtxt_SW_DELETE, NULL, NO_ARG,
  66. NULL, NULL, NO_ARG };
  67. SWITCHTAB accounts_switches[] = {
  68. swtxt_SW_ACCOUNTS_FORCELOGOFF, NULL, ARG_REQ,
  69. swtxt_SW_ACCOUNTS_UNIQUEPW, NULL, ARG_REQ,
  70. swtxt_SW_ACCOUNTS_MINPWLEN, NULL, ARG_REQ,
  71. swtxt_SW_ACCOUNTS_MINPWAGE, NULL, ARG_REQ,
  72. swtxt_SW_ACCOUNTS_MAXPWAGE, NULL, ARG_REQ,
  73. swtxt_SW_ACCOUNTS_SYNCH, NULL, NO_ARG,
  74. swtxt_SW_DOMAIN, NULL, NO_ARG,
  75. swtxt_SW_ACCOUNTS_LOCKOUT_THRESHOLD,NULL, ARG_REQ,
  76. swtxt_SW_ACCOUNTS_LOCKOUT_DURATION, NULL, ARG_REQ,
  77. swtxt_SW_ACCOUNTS_LOCKOUT_WINDOW, NULL, ARG_REQ,
  78. NULL, NULL, NO_ARG };
  79. SWITCHTAB computer_switches[] = {
  80. swtxt_SW_ADD, NULL, NO_ARG,
  81. swtxt_SW_DELETE, NULL, NO_ARG,
  82. swtxt_SW_COMPUTER_JOIN, NULL, NO_ARG,
  83. swtxt_SW_COMPUTER_LEAVE,NULL, NO_ARG,
  84. NULL, NULL, NO_ARG };
  85. SWITCHTAB config_wksta_switches[] = {
  86. swtxt_SW_WKSTA_CHARWAIT, NULL, ARG_REQ,
  87. swtxt_SW_WKSTA_CHARTIME, NULL, ARG_REQ,
  88. swtxt_SW_WKSTA_CHARCOUNT, NULL, ARG_REQ,
  89. #ifndef NTENV
  90. swtxt_SW_WKSTA_OTHDOMAINS, NULL, ARG_OPT,
  91. swtxt_SW_WKSTA_PRINTBUFTIME, NULL, ARG_REQ,
  92. swtxt_SW_WKSTA_MAXERRORLOG, NULL, ARG_REQ,
  93. #endif /* !NTENV */
  94. NULL, NULL, NO_ARG };
  95. #ifdef NTENV
  96. SWITCHTAB config_server_switches[] = {
  97. swtxt_SW_SRV_SRVCOMMENT, NULL, ARG_REQ,
  98. swtxt_SW_SRV_AUTODISCONNECT, NULL, ARG_REQ,
  99. swtxt_SW_SRV_SRVHIDDEN, NULL, ARG_OPT,
  100. NULL, NULL, NO_ARG };
  101. #else /* !NTENV */
  102. SWITCHTAB config_server_switches[] = {
  103. swtxt_SW_SRV_SRVCOMMENT, NULL, ARG_REQ,
  104. swtxt_SW_SRV_AUTODISCONNECT, NULL, ARG_REQ,
  105. swtxt_SW_SRV_DISKALERT, NULL, ARG_REQ,
  106. swtxt_SW_SRV_ERRORALERT, NULL, ARG_REQ,
  107. swtxt_SW_SRV_LOGONALERT, NULL, ARG_REQ,
  108. swtxt_SW_SRV_MAXAUDITLOG, NULL, ARG_REQ,
  109. swtxt_SW_SRV_NETIOALERT, NULL, ARG_REQ,
  110. swtxt_SW_SRV_SRVHIDDEN, NULL, ARG_OPT,
  111. swtxt_SW_SRV_ACCESSALERT, NULL, ARG_REQ,
  112. swtxt_SW_SRV_ALERTNAMES, NULL, ARG_REQ,
  113. swtxt_SW_SRV_ALERTSCHED, NULL, ARG_REQ,
  114. NULL, NULL, NO_ARG };
  115. #endif /* !NTENV */
  116. SWITCHTAB file_switches[] = {
  117. TEXT("/CLOSE"), NULL, NO_ARG,
  118. NULL, NULL, NO_ARG };
  119. SWITCHTAB help_switches[] = {
  120. swtxt_SW_OPTIONS, NULL, NO_ARG,
  121. NULL, NULL, NO_ARG };
  122. SWITCHTAB print_switches[] = {
  123. swtxt_SW_DELETE, NULL, NO_ARG,
  124. swtxt_SW_PRINT_HOLD, NULL, NO_ARG,
  125. swtxt_SW_PRINT_RELEASE, NULL, NO_ARG,
  126. #ifndef NTENV
  127. swtxt_SW_OPTIONS, NULL, NO_ARG,
  128. swtxt_SW_PRIORITY, NULL, ARG_REQ,
  129. swtxt_SW_REMARK, NULL, ARG_REQ,
  130. swtxt_SW_ROUTE, NULL, ARG_REQ,
  131. swtxt_SW_PRINT_AFTER, NULL, ARG_REQ,
  132. swtxt_SW_PRINT_FIRST, NULL, NO_ARG,
  133. swtxt_SW_PRINT_LAST, NULL, NO_ARG,
  134. swtxt_SW_PRINT_PARMS, NULL, ARG_REQ,
  135. swtxt_SW_PRINT_PROCESSOR, NULL, ARG_REQ,
  136. swtxt_SW_PRINT_PURGE, NULL, NO_ARG,
  137. swtxt_SW_PRINT_SEPARATOR, NULL, ARG_REQ,
  138. swtxt_SW_PRINT_UNTIL, NULL, ARG_REQ,
  139. swtxt_SW_PRINT_DRIVER, NULL, ARG_REQ,
  140. #endif /* !NTENV */
  141. NULL, NULL, NO_ARG };
  142. SWITCHTAB send_switches[] = {
  143. swtxt_SW_MESSAGE_BROADCAST, NULL, NO_ARG,
  144. swtxt_SW_DOMAIN, NULL, ARG_OPT,
  145. TEXT("/USERS"), NULL, NO_ARG,
  146. NULL, NULL, NO_ARG };
  147. SWITCHTAB share_switches[] = {
  148. swtxt_SW_DELETE, NULL, NO_ARG,
  149. swtxt_SW_REMARK, NULL, ARG_REQ,
  150. #ifndef NTENV
  151. swtxt_SW_SHARE_COMM, NULL, NO_ARG,
  152. #endif /* !NTENV */
  153. swtxt_SW_SHARE_UNLIMITED, NULL, NO_ARG,
  154. swtxt_SW_SHARE_USERS, NULL, ARG_REQ,
  155. swtxt_SW_CACHE, NULL, ARG_OPT,
  156. NULL, NULL, NO_ARG };
  157. SWITCHTAB start_alerter_switches[] = {
  158. swtxt_SW_ALERTER_SIZALERTBUF, NULL, ARG_REQ,
  159. NULL, NULL, NO_ARG };
  160. SWITCHTAB start_netlogon_switches[] = {
  161. swtxt_SW_NETLOGON_CENTRALIZED, NULL, ARG_REQ,
  162. swtxt_SW_NETLOGON_PULSE, NULL, ARG_REQ,
  163. swtxt_SW_NETLOGON_RANDOMIZE, NULL, ARG_REQ,
  164. swtxt_SW_NETLOGON_SYNCHRONIZE, NULL, ARG_OPT,
  165. swtxt_SW_NETLOGON_SCRIPTS, NULL, ARG_REQ,
  166. NULL, NULL, NO_ARG };
  167. /* Switches swallowed by netcmd. Not static, used in start.c */
  168. SWITCHTAB start_netlogon_ignore_switches[] = {
  169. swtxt_SW_NETLOGON_CENTRALIZED, NULL, ARG_REQ,
  170. NULL, NULL, NO_ARG };
  171. SWITCHTAB start_repl_switches[] = {
  172. swtxt_SW_REPL_REPL, NULL, ARG_OPT,
  173. swtxt_SW_REPL_EXPPATH, NULL, ARG_REQ,
  174. swtxt_SW_REPL_EXPLIST, NULL, ARG_REQ,
  175. swtxt_SW_REPL_IMPPATH, NULL, ARG_REQ,
  176. swtxt_SW_REPL_IMPLIST, NULL, ARG_REQ,
  177. swtxt_SW_REPL_TRYUSER, NULL, ARG_OPT,
  178. swtxt_SW_REPL_LOGON, NULL, ARG_REQ,
  179. swtxt_SW_REPL_PASSWD, NULL, ARG_REQ,
  180. swtxt_SW_REPL_SYNCH, NULL, ARG_REQ,
  181. swtxt_SW_REPL_PULSE, NULL, ARG_REQ,
  182. swtxt_SW_REPL_GUARD, NULL, ARG_REQ,
  183. swtxt_SW_REPL_RANDOM, NULL, ARG_REQ,
  184. NULL, NULL, NO_ARG };
  185. /* start_rdr_switches MANIFEST! used three places */
  186. #define WORKSTATION_SWITCHES_TWO /* first half of switches */ \
  187. swtxt_SW_WKSTA_CHARCOUNT, NULL, ARG_REQ, \
  188. swtxt_SW_WKSTA_CHARTIME, NULL, ARG_REQ, \
  189. swtxt_SW_WKSTA_CHARWAIT, NULL, ARG_REQ, \
  190. swtxt_SW_WKSTA_COMPUTERNAME, NULL, ARG_REQ, \
  191. swtxt_SW_WKSTA_KEEPCONN, NULL, ARG_REQ, \
  192. swtxt_SW_WKSTA_KEEPSEARCH, NULL, ARG_REQ, \
  193. swtxt_SW_WKSTA_LOGONSERVER, NULL, ARG_REQ, \
  194. swtxt_SW_WKSTA_MAILSLOTS, NULL, ARG_REQ, \
  195. swtxt_SW_WKSTA_NUMCHARBUF, NULL, ARG_REQ, \
  196. swtxt_SW_WKSTA_NUMDGRAMBUF, NULL, ARG_REQ, \
  197. swtxt_SW_WKSTA_NUMWORKBUF, NULL, ARG_REQ, \
  198. swtxt_SW_WKSTA_OTHDOMAINS, NULL, ARG_OPT, \
  199. swtxt_SW_WKSTA_PRIMARYDOMAIN, NULL, ARG_REQ, \
  200. swtxt_SW_WKSTA_SIZCHARBUF, NULL, ARG_REQ, \
  201. swtxt_SW_WKSTA_SIZWORKBUF, NULL, ARG_REQ, \
  202. swtxt_SW_WKSTA_WRKHEURISTICS, NULL, ARG_REQ, \
  203. swtxt_SW_WKSTA_WRKNETS, NULL, ARG_REQ, \
  204. swtxt_SW_WKSTA_NUMSERVICES, NULL, ARG_REQ, \
  205. swtxt_SW_WKSTA_WRKSERVICES, NULL, ARG_REQ
  206. /* WORKSTATION_SWITCHES_THREE are the switches that are different
  207. * between MS-DOS and OS/2
  208. */
  209. #define WORKSTATION_SWITCHES_THREE /* second half of switches */ \
  210. swtxt_SW_WKSTA_MAXERRORLOG, NULL, ARG_REQ, \
  211. swtxt_SW_WKSTA_MAXWRKCACHE, NULL, ARG_REQ, \
  212. swtxt_SW_WKSTA_NUMALERTS, NULL, ARG_REQ, \
  213. swtxt_SW_WKSTA_PRINTBUFTIME, NULL, ARG_REQ, \
  214. swtxt_SW_WKSTA_SESSTIMEOUT, NULL, ARG_REQ, \
  215. swtxt_SW_WKSTA_SIZERROR, NULL, ARG_REQ
  216. /* start_rdr_switches not static! used in start.c */
  217. SWITCHTAB start_rdr_switches[] = {
  218. // WORKSTATION_SWITCHES_ONE, (no longer used)
  219. WORKSTATION_SWITCHES_TWO,
  220. WORKSTATION_SWITCHES_THREE,
  221. NULL, NULL, NO_ARG };
  222. SWITCHTAB start_rdr_ignore_switches[] = {
  223. swtxt_SW_WKSTA_LOGONSERVER, NULL, ARG_REQ,
  224. NULL, NULL, NO_ARG };
  225. SWITCHTAB start_msg_switches[] = {
  226. // WORKSTATION_SWITCHES_ONE, (no longer used)
  227. WORKSTATION_SWITCHES_TWO,
  228. WORKSTATION_SWITCHES_THREE,
  229. TEXT("/SIZMESSBUF"), NULL, ARG_REQ,
  230. TEXT("/MBI"), TEXT("/SIZMESSBUF"), ARG_REQ,
  231. TEXT("/LOGFILE"), NULL, ARG_REQ,
  232. #ifdef DOS3
  233. TEXT("/NMSG"), TEXT("/NUMMSGNAMES"), ARG_REQ,
  234. TEXT("/NUMMSGNAMES"), NULL, ARG_REQ,
  235. #endif
  236. NULL, NULL, NO_ARG };
  237. #ifndef NTENV
  238. SWITCHTAB start_srv_switches[] = {
  239. WORKSTATION_SWITCHES_ONE,
  240. WORKSTATION_SWITCHES_TWO,
  241. WORKSTATION_SWITCHES_THREE,
  242. TEXT("/N"), swtxt_SW_SRV_MAXUSERS, ARG_REQ,
  243. TEXT("/RDR"), swtxt_SW_SRV_MAXUSERS, ARG_REQ,
  244. TEXT("/MB"), swtxt_SW_SRV_SIZREQBUF, ARG_REQ,
  245. TEXT("/RQB"), swtxt_SW_SRV_SIZREQBUF, ARG_REQ,
  246. TEXT("/NB"), swtxt_SW_SRV_NUMREQBUF, ARG_REQ,
  247. TEXT("/REQ"), swtxt_SW_SRV_NUMREQBUF, ARG_REQ,
  248. TEXT("/O"), swtxt_SW_SRV_MAXSHARES, ARG_REQ,
  249. TEXT("/SHR"), swtxt_SW_SRV_MAXSHARES, ARG_REQ,
  250. TEXT("/SF"), swtxt_SW_SRV_MAXSESSOPENS, ARG_REQ,
  251. swtxt_SW_SRV_AUDITING, NULL, ARG_REQ,
  252. swtxt_SW_SRV_NOAUDITING, NULL, ARG_REQ,
  253. swtxt_SW_SRV_GUESTACCT, NULL, ARG_REQ,
  254. swtxt_SW_SRV_MAXSESSREQS, NULL, ARG_REQ,
  255. swtxt_SW_SRV_MAXSHARES, NULL, ARG_REQ,
  256. swtxt_SW_SRV_NUMADMIN, NULL, ARG_REQ,
  257. swtxt_SW_SRV_SECURITY, NULL, ARG_REQ,
  258. swtxt_SW_SRV_SRVHEURISTICS, NULL, ARG_REQ,
  259. swtxt_SW_SRV_SRVNETS, NULL, ARG_REQ,
  260. swtxt_SW_SRV_SRVSERVICES, NULL, ARG_REQ,
  261. swtxt_SW_SRV_USERPATH, NULL, ARG_REQ,
  262. swtxt_SW_SRV_ACCESSALERT, NULL, ARG_REQ,
  263. swtxt_SW_SRV_ALERTNAMES, NULL, ARG_REQ,
  264. swtxt_SW_SRV_ALERTSCHED, NULL, ARG_REQ,
  265. swtxt_SW_SRV_DISKALERT, NULL, ARG_REQ,
  266. swtxt_SW_SRV_ERRORALERT, NULL, ARG_REQ,
  267. swtxt_SW_SRV_LOGONALERT, NULL, ARG_REQ,
  268. swtxt_SW_SRV_MAXAUDITLOG, NULL, ARG_REQ,
  269. swtxt_SW_SRV_NETIOALERT, NULL, ARG_REQ,
  270. swtxt_SW_SRV_SRVHIDDEN, NULL, ARG_REQ,
  271. swtxt_SW_SRV_AUTOPROFILE, NULL, ARG_REQ,
  272. swtxt_SW_SRV_AUTOPATH, NULL, ARG_REQ,
  273. swtxt_SW_SRV_MAXSESSOPENS, NULL, ARG_REQ,
  274. swtxt_SW_SRV_MAXUSERS, NULL, ARG_REQ,
  275. swtxt_SW_SRV_NUMBIGBUF, NULL, ARG_REQ,
  276. swtxt_SW_SRV_NUMREQBUF, NULL, ARG_REQ,
  277. swtxt_SW_SRV_SIZREQBUF, NULL, ARG_REQ,
  278. swtxt_SW_SRV_SRVANNDELTA, NULL, ARG_REQ,
  279. swtxt_SW_SRV_SRVANNOUNCE, NULL, ARG_REQ,
  280. swtxt_SW_SRV_AUTODISCONNECT, NULL, ARG_REQ,
  281. swtxt_SW_SRV_SRVCOMMENT, NULL, ARG_REQ,
  282. NULL, NULL, NO_ARG };
  283. #else /* NTENV */
  284. SWITCHTAB start_srv_switches[] = {
  285. swtxt_SW_SRV_MAXSESSOPENS, NULL, ARG_REQ,
  286. swtxt_SW_SRV_MAXUSERS, NULL, ARG_REQ,
  287. swtxt_SW_SRV_NUMBIGBUF, NULL, ARG_REQ,
  288. swtxt_SW_SRV_NUMREQBUF, NULL, ARG_REQ,
  289. swtxt_SW_SRV_SIZREQBUF, NULL, ARG_REQ,
  290. swtxt_SW_SRV_SRVANNDELTA, NULL, ARG_REQ,
  291. swtxt_SW_SRV_SRVANNOUNCE, NULL, ARG_REQ,
  292. swtxt_SW_SRV_AUTODISCONNECT, NULL, ARG_REQ,
  293. swtxt_SW_SRV_SRVCOMMENT, NULL, ARG_REQ,
  294. swtxt_SW_SRV_DEBUG, NULL, ARG_REQ,
  295. NULL, NULL, NO_ARG };
  296. #endif /* NTENV */
  297. SWITCHTAB start_ups_switches[] = {
  298. swtxt_SW_UPS_BATTERYTIME, NULL, ARG_REQ,
  299. swtxt_SW_UPS_CMDFILE, NULL, ARG_REQ,
  300. swtxt_SW_UPS_DEVICENAME, NULL, ARG_REQ,
  301. swtxt_SW_UPS_MESSDELAY, NULL, ARG_REQ,
  302. swtxt_SW_UPS_MESSTIME, NULL, ARG_REQ,
  303. swtxt_SW_UPS_RECHARGE, NULL, ARG_REQ,
  304. swtxt_SW_UPS_SIGNALS, NULL, ARG_REQ,
  305. swtxt_SW_UPS_VOLTLEVELS, NULL, ARG_REQ,
  306. NULL, NULL, NO_ARG };
  307. SWITCHTAB stats_switches[] = {
  308. swtxt_SW_STATS_CLEAR, NULL, NO_ARG,
  309. NULL, NULL, NO_ARG };
  310. SWITCHTAB use_switches[] = {
  311. #ifdef NTENV
  312. swtxt_SW_USE_USER, NULL, ARG_REQ,
  313. swtxt_SW_USE_PERSISTENT, NULL, ARG_REQ,
  314. swtxt_SW_USE_HOME, NULL, NO_ARG,
  315. swtxt_SW_USE_SMARTCARD, NULL, NO_ARG,
  316. swtxt_SW_USE_SAVECRED, NULL, NO_ARG,
  317. #else
  318. swtxt_SW_USE_COMM, NULL, NO_ARG,
  319. #endif /* NTENV */
  320. swtxt_SW_DELETE, NULL, NO_ARG,
  321. NULL, NULL, NO_ARG };
  322. SWITCHTAB user_switches[] = {
  323. swtxt_SW_ADD, NULL, NO_ARG,
  324. swtxt_SW_DELETE, NULL, NO_ARG,
  325. swtxt_SW_DOMAIN, NULL, NO_ARG,
  326. swtxt_SW_COMMENT, NULL, ARG_REQ,
  327. swtxt_SW_REMARK, swtxt_SW_COMMENT, ARG_REQ,
  328. swtxt_SW_COMMENT, NULL, ARG_REQ,
  329. swtxt_SW_NETWARE, NULL, ARG_OPT,
  330. swtxt_SW_RANDOM, NULL, ARG_OPT,
  331. swtxt_SW_USER_ACTIVE, NULL, ARG_OPT,
  332. swtxt_SW_USER_COUNTRYCODE, NULL, ARG_REQ,
  333. swtxt_SW_USER_EXPIRES, NULL, ARG_REQ,
  334. swtxt_SW_USER_ENABLESCRIPT, NULL, ARG_REQ,
  335. swtxt_SW_USER_FULLNAME, NULL, ARG_REQ,
  336. swtxt_SW_USER_HOMEDIR, NULL, ARG_REQ,
  337. swtxt_SW_USER_PARMS, NULL, ARG_REQ,
  338. swtxt_SW_USER_PASSWORDREQ, NULL, ARG_REQ,
  339. swtxt_SW_USER_PASSWORDCHG, NULL, ARG_REQ,
  340. swtxt_SW_USER_SCRIPTPATH, NULL, ARG_REQ,
  341. swtxt_SW_USER_TIMES, NULL, ARG_REQ,
  342. swtxt_SW_USER_USERCOMMENT, NULL, ARG_REQ,
  343. swtxt_SW_USER_WORKSTATIONS, NULL, ARG_REQ,
  344. swtxt_SW_USER_PROFILEPATH, NULL, ARG_REQ,
  345. NULL, NULL, NO_ARG };
  346. SWITCHTAB group_switches[] = {
  347. swtxt_SW_ADD, NULL, NO_ARG,
  348. swtxt_SW_DELETE, NULL, NO_ARG,
  349. swtxt_SW_DOMAIN, NULL, NO_ARG,
  350. swtxt_SW_COMMENT, NULL, ARG_REQ,
  351. swtxt_SW_REMARK, swtxt_SW_COMMENT, ARG_REQ,
  352. NULL, NULL, NO_ARG };
  353. SWITCHTAB ntalias_switches[] = {
  354. swtxt_SW_ADD, NULL, NO_ARG,
  355. swtxt_SW_DELETE, NULL, NO_ARG,
  356. swtxt_SW_DOMAIN, NULL, NO_ARG,
  357. NULL, NULL, NO_ARG };
  358. SWITCHTAB time_switches[] = {
  359. swtxt_SW_DOMAIN, NULL, ARG_OPT,
  360. swtxt_SW_TIME_SET, NULL, NO_ARG,
  361. swtxt_SW_RTSDOMAIN, NULL, ARG_OPT,
  362. swtxt_SW_SETSNTP, NULL, ARG_OPT,
  363. swtxt_SW_QUERYSNTP, NULL, NO_ARG,
  364. NULL, NULL, NO_ARG };
  365. SWITCHTAB who_switches[] = {
  366. swtxt_SW_DOMAIN, NULL, ARG_OPT,
  367. NULL, NULL, NO_ARG };
  368. SWITCHTAB view_switches[] = {
  369. swtxt_SW_DOMAIN, NULL, ARG_OPT,
  370. swtxt_SW_NETWORK, NULL, ARG_OPT,
  371. swtxt_SW_CACHE, NULL, NO_ARG,
  372. NULL, NULL, NO_ARG };