tables.c 106 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809
  1. /******************************************************************************
  2. * This file is part of TinTin++ *
  3. * *
  4. * Copyright 2004-2019 Igor van den Hoven *
  5. * *
  6. * TinTin++ is free software; you can redistribute it and/or modify *
  7. * it under the terms of the GNU General Public License as published by *
  8. * the Free Software Foundation; either version 3 of the License, or *
  9. * (at your option) any later version. *
  10. * *
  11. * This program is distributed in the hope that it will be useful, *
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
  14. * GNU General Public License for more details. *
  15. * *
  16. * *
  17. * You should have received a copy of the GNU General Public License *
  18. * along with TinTin++. If not, see https://www.gnu.org/licenses. *
  19. ******************************************************************************/
  20. /******************************************************************************
  21. * (T)he K(I)cki(N) (T)ickin D(I)kumud Clie(N)t *
  22. * *
  23. * coded by Igor van den Hoven 2004 *
  24. ******************************************************************************/
  25. #include "tintin.h"
  26. #include "telnet.h"
  27. struct list_type list_table[LIST_MAX] =
  28. {
  29. { "ACTION", "ACTIONS", SORT_PRIORITY, 3, 2, 3, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT|LIST_FLAG_REGEX|LIST_FLAG_PRIORITY },
  30. { "ALIAS", "ALIASES", SORT_PRIORITY, 3, 2, 3, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT|LIST_FLAG_REGEX|LIST_FLAG_PRIORITY },
  31. { "BUTTON", "BUTTONS", SORT_PRIORITY, 3, 2, 3, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT|LIST_FLAG_PRIORITY },
  32. { "CLASS", "CLASSES", SORT_PRIORITY, 2, 0, 0, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_INHERIT },
  33. { "COMMAND", "COMMANDS", SORT_APPEND, 1, 0, 0, LIST_FLAG_MESSAGE },
  34. { "CONFIG", "CONFIGS", SORT_ALPHA, 2, 0, 0, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT },
  35. { "DELAY", "DELAYS", SORT_DELAY, 2, 2, 3, LIST_FLAG_MESSAGE|LIST_FLAG_READ },
  36. { "EVENT", "EVENTS", SORT_ALPHA, 2, 2, 0, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT },
  37. { "FUNCTION", "FUNCTIONS", SORT_ALPHA, 2, 2, 0, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT },
  38. { "GAG", "GAGS", SORT_ALPHA, 1, 0, 0, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT },
  39. { "HIGHLIGHT", "HIGHLIGHTS", SORT_PRIORITY, 3, 0, 3, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT|LIST_FLAG_REGEX|LIST_FLAG_PRIORITY },
  40. { "HISTORY", "HISTORIES", SORT_APPEND, 1, 0, 0, LIST_FLAG_MESSAGE|LIST_FLAG_HIDE },
  41. { "LANDMARK", "LANDMARKS", SORT_ALPHA, 4, 0, 0, LIST_FLAG_MESSAGE|LIST_FLAG_HIDE },
  42. { "MACRO", "MACROS", SORT_ALPHA, 2, 2, 0, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT },
  43. { "PATH", "PATHS", SORT_APPEND, 2, 0, 0, LIST_FLAG_MESSAGE },
  44. { "PATHDIR", "PATHDIRS", SORT_ALPHA, 3, 0, 0, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT },
  45. { "PROMPT", "PROMPTS", SORT_ALPHA, 4, 0, 0, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT|LIST_FLAG_REGEX },
  46. { "SUBSTITUTE", "SUBSTITUTES", SORT_PRIORITY, 3, 0, 3, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT|LIST_FLAG_REGEX|LIST_FLAG_PRIORITY },
  47. { "TAB", "TABS", SORT_ALPHA, 1, 0, 0, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT },
  48. { "TERRAIN", "TERRAINS", SORT_ALPHA, 2, 0, 0, LIST_FLAG_MESSAGE|LIST_FLAG_HIDE },
  49. { "TICKER", "TICKERS", SORT_ALPHA, 3, 2, 0, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT },
  50. { "VARIABLE", "VARIABLES", SORT_ALNUM, 2, 0, 0, LIST_FLAG_MESSAGE|LIST_FLAG_READ|LIST_FLAG_WRITE|LIST_FLAG_CLASS|LIST_FLAG_INHERIT|LIST_FLAG_NEST }
  51. };
  52. struct substitution_type substitution_table[] =
  53. {
  54. { "ARGUMENTS", SUB_ARG },
  55. { "VARIABLES", SUB_VAR },
  56. { "FUNCTIONS", SUB_FUN },
  57. { "COLORS", SUB_COL },
  58. { "ESCAPES", SUB_ESC },
  59. // { "COMMANDS", SUB_CMD },
  60. { "SECURE", SUB_SEC },
  61. { "EOL", SUB_EOL },
  62. { "LNF", SUB_LNF },
  63. { "LITERAL", SUB_LIT },
  64. { "", 0 }
  65. };
  66. struct config_type config_table[] =
  67. {
  68. {
  69. "AUTO TAB",
  70. "Buffer lines used for tab completion",
  71. "",
  72. config_autotab
  73. },
  74. {
  75. "BUFFER SIZE",
  76. "The size of the scrollback buffer",
  77. "",
  78. config_buffersize
  79. },
  80. {
  81. "CHARSET",
  82. "The character set encoding used",
  83. "",
  84. config_charset
  85. },
  86. {
  87. "CHILD LOCK",
  88. "TinTin++ is child locked.",
  89. "TinTin++ is not child locked.",
  90. config_childlock
  91. },
  92. {
  93. "COLOR MODE",
  94. "The color code encoding used",
  95. "",
  96. config_colormode
  97. },
  98. {
  99. "COLOR PATCH",
  100. "Color the start of each line",
  101. "Leave color handling up to the server",
  102. config_colorpatch
  103. },
  104. {
  105. "COMMAND COLOR",
  106. "The color of echoed commands",
  107. "",
  108. config_commandcolor
  109. },
  110. {
  111. "COMMAND ECHO",
  112. "Commands are echoed in split mode",
  113. "Commands are not echoed in split mode",
  114. config_commandecho
  115. },
  116. {
  117. "CONNECT RETRY",
  118. "Seconds sessions try to connect on failure",
  119. "",
  120. config_connectretry
  121. },
  122. {
  123. "CONVERT META",
  124. "TinTin++ converts meta characters",
  125. "TinTin++ doesn't convert meta characters",
  126. config_convertmeta
  127. },
  128. {
  129. "DEBUG TELNET",
  130. "You see telnet negotiations",
  131. "You do not see telnet negotatiations",
  132. config_debugtelnet
  133. },
  134. {
  135. "HISTORY SIZE",
  136. "The size of the command history",
  137. "",
  138. config_historysize
  139. },
  140. {
  141. "INHERITANCE",
  142. "The startup session is inherited",
  143. "The startup session is not inherited",
  144. config_inheritance
  145. },
  146. {
  147. "LOG MODE",
  148. "The data type mode of log files",
  149. "",
  150. config_logmode
  151. },
  152. {
  153. "LOG LEVEL",
  154. "TinTin++ only logs low level server data",
  155. "TinTin++ only logs high level server data",
  156. config_loglevel
  157. },
  158. {
  159. "MCCP",
  160. "MCCP is enabled.",
  161. "MCCP is disabled.",
  162. config_mccp
  163. },
  164. {
  165. "MOUSE",
  166. "Generate mouse tracking events.",
  167. "Do not generate mouse events.",
  168. config_mousetracking
  169. },
  170. {
  171. "PACKET PATCH",
  172. "Seconds to try to patch broken packets",
  173. "",
  174. config_packetpatch
  175. },
  176. {
  177. "RANDOM SEED",
  178. "Seed value used for random numbers",
  179. "",
  180. config_randomseed
  181. },
  182. {
  183. "REPEAT CHAR",
  184. "Character used for repeating commands",
  185. "",
  186. config_repeatchar
  187. },
  188. {
  189. "REPEAT ENTER",
  190. "You send the last command on an enter",
  191. "You send a carriage return on an enter",
  192. config_repeatenter
  193. },
  194. {
  195. "SCREEN READER",
  196. "You are using a screen reader",
  197. "You are not using a screen reader",
  198. config_screenreader
  199. },
  200. {
  201. "SCROLL LOCK",
  202. "You do not see server output while scrolling",
  203. "You see server output while scrolling",
  204. config_scrolllock
  205. },
  206. {
  207. "SPEEDWALK",
  208. "Your input is scanned for speedwalks",
  209. "Your input is not scanned for speedwalks",
  210. config_speedwalk
  211. },
  212. {
  213. "TAB WIDTH",
  214. "Number of spaces used for a tab",
  215. "",
  216. config_tabwidth
  217. },
  218. {
  219. "TELNET",
  220. "TELNET support is enabled.",
  221. "TELNET support is disabled.",
  222. config_telnet
  223. },
  224. {
  225. "TINTIN CHAR",
  226. "Character used for TinTin++ commands",
  227. "",
  228. config_tintinchar
  229. },
  230. {
  231. "VERBATIM",
  232. "Keyboard input is send as is",
  233. "Keyboard input is parsed by TinTin++",
  234. config_verbatim
  235. },
  236. {
  237. "VERBATIM CHAR",
  238. "Character used for verbatim lines",
  239. "",
  240. config_verbatimchar
  241. },
  242. {
  243. "VERBOSE",
  244. "Read script files verbosely",
  245. "Read script files quietly",
  246. config_verbose
  247. },
  248. {
  249. "WORDWRAP",
  250. "Server output is word wrapped",
  251. "Server output is line wrapped",
  252. config_wordwrap
  253. },
  254. {
  255. "",
  256. "",
  257. 0,
  258. 0
  259. }
  260. };
  261. char character_table[256] =
  262. {
  263. 0, // 0
  264. 0,
  265. 0,
  266. 0,
  267. 0,
  268. 0,
  269. 0,
  270. 0,
  271. CHAR_FLAG_SPACE, // \t
  272. CHAR_FLAG_SPACE, // \n
  273. CHAR_FLAG_SPACE, // \v
  274. CHAR_FLAG_SPACE, // \f
  275. CHAR_FLAG_SPACE, // \r
  276. 0,
  277. 0,
  278. 0,
  279. 0,
  280. 0,
  281. 0,
  282. 0,
  283. 0,
  284. 0,
  285. 0,
  286. 0,
  287. 0,
  288. 0,
  289. 0,
  290. 0,
  291. 0,
  292. 0,
  293. 0,
  294. 0,
  295. CHAR_FLAG_PRINT|CHAR_FLAG_SPACE, // 32 space
  296. CHAR_FLAG_PRINT,
  297. CHAR_FLAG_PRINT,
  298. CHAR_FLAG_PRINT,
  299. CHAR_FLAG_PRINT,
  300. CHAR_FLAG_PRINT,
  301. CHAR_FLAG_PRINT,
  302. CHAR_FLAG_PRINT,
  303. CHAR_FLAG_PRINT, // 40 (
  304. CHAR_FLAG_PRINT,
  305. CHAR_FLAG_PRINT,
  306. CHAR_FLAG_PRINT,
  307. CHAR_FLAG_PRINT,
  308. CHAR_FLAG_PRINT,
  309. CHAR_FLAG_PRINT,
  310. CHAR_FLAG_PRINT,
  311. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_HEX|CHAR_FLAG_DIGIT, // 48 0
  312. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_HEX|CHAR_FLAG_DIGIT,
  313. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_HEX|CHAR_FLAG_DIGIT,
  314. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_HEX|CHAR_FLAG_DIGIT,
  315. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_HEX|CHAR_FLAG_DIGIT,
  316. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_HEX|CHAR_FLAG_DIGIT,
  317. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_HEX|CHAR_FLAG_DIGIT,
  318. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_HEX|CHAR_FLAG_DIGIT,
  319. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_HEX|CHAR_FLAG_DIGIT, // 56 8
  320. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_HEX|CHAR_FLAG_DIGIT,
  321. CHAR_FLAG_PRINT,
  322. CHAR_FLAG_PRINT,
  323. CHAR_FLAG_PRINT,
  324. CHAR_FLAG_PRINT,
  325. CHAR_FLAG_PRINT,
  326. CHAR_FLAG_PRINT,
  327. CHAR_FLAG_PRINT|CHAR_FLAG_CSI, // 64 @
  328. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA|CHAR_FLAG_HEX, // 65 A
  329. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA|CHAR_FLAG_HEX,
  330. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA|CHAR_FLAG_HEX,
  331. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA|CHAR_FLAG_HEX,
  332. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA|CHAR_FLAG_HEX,
  333. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA|CHAR_FLAG_HEX,
  334. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  335. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA, // 72 H
  336. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  337. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  338. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  339. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  340. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  341. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  342. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  343. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA, // 80 P
  344. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  345. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  346. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  347. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  348. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  349. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  350. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  351. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA, // 88 X
  352. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  353. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA, // 90 Z
  354. CHAR_FLAG_PRINT,
  355. CHAR_FLAG_PRINT|CHAR_FLAG_CSI, // 93 ]
  356. CHAR_FLAG_PRINT,
  357. CHAR_FLAG_PRINT,
  358. CHAR_FLAG_PRINT|CHAR_FLAG_VAR, // 95 _
  359. CHAR_FLAG_PRINT|CHAR_FLAG_CSI, // 96 `
  360. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA|CHAR_FLAG_HEX, // 97 a
  361. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA|CHAR_FLAG_HEX,
  362. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA|CHAR_FLAG_HEX,
  363. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA|CHAR_FLAG_HEX,
  364. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA|CHAR_FLAG_HEX,
  365. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA|CHAR_FLAG_HEX,
  366. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  367. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA, // 104 h
  368. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  369. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  370. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  371. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  372. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  373. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  374. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  375. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA, // 112 p
  376. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  377. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  378. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  379. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  380. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  381. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  382. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  383. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA, // 120 x
  384. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA,
  385. CHAR_FLAG_PRINT|CHAR_FLAG_VAR|CHAR_FLAG_CSI|CHAR_FLAG_ALPHA, // 122 z
  386. CHAR_FLAG_PRINT,
  387. CHAR_FLAG_PRINT,
  388. CHAR_FLAG_PRINT,
  389. CHAR_FLAG_PRINT,
  390. 0, // 127 del
  391. CHAR_FLAG_PRINT, // 128
  392. CHAR_FLAG_PRINT,
  393. CHAR_FLAG_PRINT,
  394. CHAR_FLAG_PRINT,
  395. CHAR_FLAG_PRINT,
  396. CHAR_FLAG_PRINT,
  397. CHAR_FLAG_PRINT,
  398. CHAR_FLAG_PRINT,
  399. CHAR_FLAG_PRINT,
  400. CHAR_FLAG_PRINT,
  401. CHAR_FLAG_PRINT,
  402. CHAR_FLAG_PRINT,
  403. CHAR_FLAG_PRINT,
  404. CHAR_FLAG_PRINT,
  405. CHAR_FLAG_PRINT,
  406. CHAR_FLAG_PRINT,
  407. CHAR_FLAG_PRINT,
  408. CHAR_FLAG_PRINT,
  409. CHAR_FLAG_PRINT,
  410. CHAR_FLAG_PRINT,
  411. CHAR_FLAG_PRINT,
  412. CHAR_FLAG_PRINT,
  413. CHAR_FLAG_PRINT,
  414. CHAR_FLAG_PRINT,
  415. CHAR_FLAG_PRINT,
  416. CHAR_FLAG_PRINT,
  417. CHAR_FLAG_PRINT,
  418. CHAR_FLAG_PRINT,
  419. CHAR_FLAG_PRINT,
  420. CHAR_FLAG_PRINT,
  421. CHAR_FLAG_PRINT,
  422. CHAR_FLAG_PRINT,
  423. CHAR_FLAG_PRINT,
  424. CHAR_FLAG_PRINT,
  425. CHAR_FLAG_PRINT,
  426. CHAR_FLAG_PRINT,
  427. CHAR_FLAG_PRINT,
  428. CHAR_FLAG_PRINT,
  429. CHAR_FLAG_PRINT,
  430. CHAR_FLAG_PRINT,
  431. CHAR_FLAG_PRINT,
  432. CHAR_FLAG_PRINT,
  433. CHAR_FLAG_PRINT,
  434. CHAR_FLAG_PRINT,
  435. CHAR_FLAG_PRINT,
  436. CHAR_FLAG_PRINT,
  437. CHAR_FLAG_PRINT,
  438. CHAR_FLAG_PRINT,
  439. CHAR_FLAG_PRINT,
  440. CHAR_FLAG_PRINT,
  441. CHAR_FLAG_PRINT,
  442. CHAR_FLAG_PRINT,
  443. CHAR_FLAG_PRINT,
  444. CHAR_FLAG_PRINT,
  445. CHAR_FLAG_PRINT,
  446. CHAR_FLAG_PRINT,
  447. CHAR_FLAG_PRINT,
  448. CHAR_FLAG_PRINT,
  449. CHAR_FLAG_PRINT,
  450. CHAR_FLAG_PRINT,
  451. CHAR_FLAG_PRINT,
  452. CHAR_FLAG_PRINT,
  453. CHAR_FLAG_PRINT,
  454. CHAR_FLAG_PRINT,
  455. CHAR_FLAG_PRINT,
  456. CHAR_FLAG_PRINT,
  457. CHAR_FLAG_PRINT,
  458. CHAR_FLAG_PRINT,
  459. CHAR_FLAG_PRINT,
  460. CHAR_FLAG_PRINT,
  461. CHAR_FLAG_PRINT,
  462. CHAR_FLAG_PRINT,
  463. CHAR_FLAG_PRINT,
  464. CHAR_FLAG_PRINT,
  465. CHAR_FLAG_PRINT,
  466. CHAR_FLAG_PRINT,
  467. CHAR_FLAG_PRINT,
  468. CHAR_FLAG_PRINT,
  469. CHAR_FLAG_PRINT,
  470. CHAR_FLAG_PRINT,
  471. CHAR_FLAG_PRINT,
  472. CHAR_FLAG_PRINT,
  473. CHAR_FLAG_PRINT,
  474. CHAR_FLAG_PRINT,
  475. CHAR_FLAG_PRINT,
  476. CHAR_FLAG_PRINT,
  477. CHAR_FLAG_PRINT,
  478. CHAR_FLAG_PRINT,
  479. CHAR_FLAG_PRINT,
  480. CHAR_FLAG_PRINT,
  481. CHAR_FLAG_PRINT,
  482. CHAR_FLAG_PRINT,
  483. CHAR_FLAG_PRINT,
  484. CHAR_FLAG_PRINT,
  485. CHAR_FLAG_PRINT,
  486. CHAR_FLAG_PRINT,
  487. CHAR_FLAG_PRINT,
  488. CHAR_FLAG_PRINT,
  489. CHAR_FLAG_PRINT,
  490. CHAR_FLAG_PRINT,
  491. CHAR_FLAG_PRINT,
  492. CHAR_FLAG_PRINT,
  493. CHAR_FLAG_PRINT,
  494. CHAR_FLAG_PRINT,
  495. CHAR_FLAG_PRINT,
  496. CHAR_FLAG_PRINT,
  497. CHAR_FLAG_PRINT,
  498. CHAR_FLAG_PRINT,
  499. CHAR_FLAG_PRINT,
  500. CHAR_FLAG_PRINT,
  501. CHAR_FLAG_PRINT,
  502. CHAR_FLAG_PRINT,
  503. CHAR_FLAG_PRINT,
  504. CHAR_FLAG_PRINT,
  505. CHAR_FLAG_PRINT,
  506. CHAR_FLAG_PRINT,
  507. CHAR_FLAG_PRINT,
  508. CHAR_FLAG_PRINT,
  509. CHAR_FLAG_PRINT,
  510. CHAR_FLAG_PRINT,
  511. CHAR_FLAG_PRINT,
  512. CHAR_FLAG_PRINT,
  513. CHAR_FLAG_PRINT,
  514. CHAR_FLAG_PRINT,
  515. CHAR_FLAG_PRINT,
  516. CHAR_FLAG_PRINT,
  517. CHAR_FLAG_PRINT,
  518. CHAR_FLAG_PRINT
  519. };
  520. struct color_type color_table[] =
  521. {
  522. { "azure", "<abd>", 5 },
  523. { "ebony", "<aaa>", 5 },
  524. { "jade", "<adb>", 4 },
  525. { "lime", "<bda>", 4 },
  526. { "orange", "<dba>", 6 },
  527. { "pink", "<dab>", 4 },
  528. { "silver", "<ccc>", 6 },
  529. { "tan", "<cba>", 3 },
  530. { "violet", "<bad>", 6 },
  531. { "light azure", "<acf>", 11 },
  532. { "light ebony", "<bbb>", 11 },
  533. { "light jade", "<afc>", 10 },
  534. { "light lime", "<cfa>", 10 },
  535. { "light orange", "<fca>", 12 },
  536. { "light pink", "<fac>", 10 },
  537. { "light silver", "<eee>", 12 },
  538. { "light tan", "<eda>", 9 },
  539. { "light violet", "<caf>", 12 },
  540. { "light black", "<108>", 11 },
  541. { "light red", "<118>", 9 },
  542. { "light green", "<128>", 11 },
  543. { "light yellow", "<138>", 12 },
  544. { "light blue", "<148>", 10 },
  545. { "light magenta", "<158>", 13 },
  546. { "light cyan", "<168>", 10 },
  547. { "light white", "<178>", 11 },
  548. { "dark black", "<208>", 5 },
  549. { "dark red", "<218>", 4 },
  550. { "dark green", "<228>", 5 },
  551. { "dark yellow", "<238>", 6 },
  552. { "dark blue", "<248>", 4 },
  553. { "dark magenta", "<258>", 7 },
  554. { "dark cyan", "<268>", 4 },
  555. { "dark white", "<278>", 5 },
  556. { "Azure", "<acf>", 5 },
  557. { "Ebony", "<bbb>", 5 },
  558. { "Jade", "<afc>", 4 },
  559. { "Lime", "<cfa>", 4 },
  560. { "Orange", "<fca>", 6 },
  561. { "Pink", "<fac>", 4 },
  562. { "Silver", "<eee>", 6 },
  563. { "Tan", "<eda>", 3 },
  564. { "Violet", "<caf>", 6 },
  565. { "reset", "<088>", 5 },
  566. { "light", "<188>", 5 },
  567. { "bold", "<188>", 4 },
  568. { "faint", "<288>", 5 },
  569. { "dim", "<288>", 3 },
  570. { "dark", "<288>", 4 },
  571. { "italic", "<388>", 6 },
  572. { "underscore", "<488>", 10 },
  573. { "blink", "<588>", 5 },
  574. { "reverse", "<788>", 7 },
  575. { "unitalic", "\e[23m", 8 },
  576. { "ununderscore", "\e[24m", 13 },
  577. { "unblink", "\e[25m", 8 },
  578. { "unreverse", "\e[27m", 10 },
  579. { "black", "<aaa>", 5 },
  580. { "red", "<daa>", 4 },
  581. { "green", "<ada>", 5 },
  582. { "yellow", "<dda>", 6 },
  583. { "blue", "<aad>", 4 },
  584. { "magenta", "<dad>", 7 },
  585. { "cyan", "<add>", 4 },
  586. { "white", "<ddd>", 5 },
  587. { "Black", "<bbb>", 5 },
  588. { "Red", "<faa>", 3 },
  589. { "Green", "<afa>", 5 },
  590. { "Yellow", "<ffa>", 6 },
  591. { "Blue", "<aaf>", 4 },
  592. { "Magenta", "<faf>", 7 },
  593. { "Cyan", "<aff>", 4 },
  594. { "White", "<fff>", 5 },
  595. { "b black", "<AAA>", 7 },
  596. { "b red", "<DAA>", 5 },
  597. { "b green", "<ADA>", 7 },
  598. { "b yellow", "<DDA>", 8 },
  599. { "b blue", "<AAD>", 6 },
  600. { "b magenta", "<DAD>", 9 },
  601. { "b cyan", "<ADD>", 6 },
  602. { "b white", "<DDD>", 7 },
  603. { "b azure", "<ABD>", 7 },
  604. { "b ebony", "<AAA>", 7 },
  605. { "b jade", "<ADB>", 6 },
  606. { "b lime", "<BDA>", 6 },
  607. { "b orange", "<DBA>", 8 },
  608. { "b pink", "<DAB>", 6 },
  609. { "b silver", "<CCC>", 8 },
  610. { "b tan", "<CBA>", 5 },
  611. { "b violet", "<BAD>", 8 },
  612. { "b Azure", "<ACF>", 7 },
  613. { "b Black", "<BBB>", 7 },
  614. { "b Blue", "<AAF>", 6 },
  615. { "b Cyan", "<AFF>", 6 },
  616. { "b Ebony", "<BBB>", 7 },
  617. { "b Green", "<AFA>", 7 },
  618. { "b Jade", "<AFC>", 6 },
  619. { "b Lime", "<CFA>", 6 },
  620. { "b Magenta", "<FAF>", 9 },
  621. { "b Orange", "<FCA>", 8 },
  622. { "b Pink", "<FAC>", 6 },
  623. { "b Red", "<FAA>", 5 },
  624. { "b Silver", "<EEE>", 8 },
  625. { "b Tan", "<EDA>", 5 },
  626. { "b Violet", "<CAF>", 8 },
  627. { "b White", "<FFF>", 7 },
  628. { "b Yellow", "<FFA>", 8 },
  629. { "", "<888>", 0 }
  630. };
  631. struct color_type map_color_table[] =
  632. {
  633. { "AVOID", "<118>" },
  634. { "BACKGROUND", "" },
  635. { "BLOCK", "<218>" },
  636. { "EXITS", "<278>" },
  637. { "FOG", "<148>" },
  638. { "HIDE", "<168>" },
  639. { "INVISIBLE", "<208>" },
  640. { "PATHS", "<138>" },
  641. { "ROOMS", "<178>" },
  642. { "SYMBOLS", "<128>" },
  643. { "USER", "<258>" },
  644. { NULL, "<888>" }
  645. };
  646. struct chat_type chat_table[] =
  647. {
  648. { "ACCEPT", chat_accept, 0, 1, "Accept a file transfer" },
  649. { "CALL", chat_call, 0, 0, "Call a buddy" },
  650. { "CANCELFILE", chat_cancelfile, 1, 0, "Cancel a file transfer" },
  651. { "COLOR", chat_color, 1, 0, "Set the default chat color" },
  652. { "DECLINE", chat_decline, 1, 0, "Decline a file transfer" },
  653. { "DND", chat_dnd, 0, 0, "Decline new connections" },
  654. { "DOWNLOADDIR", chat_downloaddir, 1, 0, "Set the download directory" },
  655. { "EMOTE", chat_emote, 0, 1, "Send an emoted chat message" },
  656. { "FORWARD", chat_forward, 1, 0, "Forward all chat messages to a buddy" },
  657. { "FORWARDALL", chat_forwardall, 1, 0, "Forward all chat/server messages to a buddy" },
  658. { "FILESTAT", chat_filestat, 1, 0, "Show file transfer data" },
  659. { "GROUP", chat_group, 0, 1, "Assign a group to a buddy" },
  660. { "IGNORE", chat_ignore, 1, 0, "Ignore all messages from a buddy" },
  661. { "INITIALIZE", chat_initialize, 1, 0, "Initialize chat with an optional port number" },
  662. { "INFO", chat_info, 0, 0, "Display the chat settings" },
  663. { "IP", chat_ip, 1, 0, "Change the IP address, unset by default" },
  664. { "MESSAGE", chat_message, 0, 1, "Send a private message to a buddy" },
  665. { "NAME", chat_name, 1, 0, "Change the chat name" },
  666. { "PASTE", chat_paste, 0, 1, "Paste a block of text to a buddy" },
  667. { "PEEK", chat_peek, 1, 0, "Show a buddy's public connections" },
  668. { "PING", chat_ping, 1, 0, "Display a buddy's response time" },
  669. { "PREFIX", chat_prefix, 1, 0, "Prefix before each chat message" },
  670. { "PRIVATE", chat_private, 1, 0, "Do not share a buddy's IP address" },
  671. { "PUBLIC", chat_public, 1, 0, "Share a buddy's IP address" },
  672. { "REPLY", chat_reply, 1, 0, "Reply to last private message" },
  673. { "REQUEST", chat_request, 1, 0, "Request a buddy's public connections" },
  674. { "SEND", chat_send, 0, 1, "Send a raw data message to a buddy" },
  675. { "SENDFILE", chat_sendfile, 0, 1, "Send a file to a buddy" },
  676. { "SERVE", chat_serve, 1, 0, "Forward all public chat messages to a buddy" },
  677. { "UNINITIALIZE", chat_uninitialize, 0, 0, "Uninitializes the chat server" },
  678. { "WHO", chat_who, 0, 0, "Show all connections" },
  679. { "ZAP", chat_zap, 1, 0, "Close the connection to a buddy" },
  680. { "", NULL, 0, 0, "" }
  681. };
  682. struct daemon_type daemon_table[] =
  683. {
  684. { "ATTACH", daemon_attach, "Attach to a daemon" },
  685. { "DETACH", daemon_detach, "Turn into a daemon and detach" },
  686. { "INPUT", daemon_input, "Send input to an attached daemon" },
  687. { "KILL", daemon_kill, "Kill a daemon" },
  688. { "LIST", daemon_list, "List a daemon" },
  689. { "", NULL, "" }
  690. };
  691. struct port_type port_table[] =
  692. {
  693. { "CALL", port_call, 0, 0, "Create outgoing socket connection" },
  694. { "COLOR", port_color, 1, 0, "Set the default port message color" },
  695. { "FLAG", port_flag, 0, 0, "Set various flags." },
  696. { "GROUP", port_group, 0, 1, "Assign a group to a socket" },
  697. { "IGNORE", port_ignore, 1, 0, "Ignore all messages from a socket" },
  698. { "INITIALIZE", port_initialize, 0, 0, "Initialize port with optional file name" },
  699. { "INFO", port_info, 0, 0, "Display the port settings" },
  700. { "NAME", port_name, 0, 0, "Change a socket name" },
  701. { "PREFIX", port_prefix, 1, 0, "Prefix before each port message" },
  702. { "PROXY", port_proxy, 0, 0, "Assign a proxy session to a socket" },
  703. { "RANK", port_rank, 0, 0, "Assign a rank to a socket" },
  704. { "SEND", port_send, 0, 1, "Send a message to a socket" },
  705. { "UNINITIALIZE", port_uninitialize, 0, 0, "Uninitializes the port" },
  706. { "WHO", port_who, 0, 0, "Show all socket connections" },
  707. { "ZAP", port_zap, 1, 0, "Close the connection to a socket" },
  708. { "", NULL, 0, 0, "" }
  709. };
  710. struct rank_type rank_table[] =
  711. {
  712. { "SPY", 0 },
  713. { "SCOUT", RANK_FLAG_SCOUT }
  714. };
  715. // 0 no map, 1 has map, 2 is inside map
  716. struct map_type map_table[] =
  717. {
  718. { "AT", map_at, 0, 1, "Execute command at given location" },
  719. { "CENTER", map_center, MAP_FLAG_VTMAP, 2, "Set the center of the map display" },
  720. { "COLOR", map_color, MAP_FLAG_VTMAP, 1, "Set the color for given field" },
  721. { "CREATE", map_create, MAP_FLAG_VTMAP, 0, "Creates the initial map" },
  722. { "DEBUG", map_debug, 0, 2, "Obscure debug information" },
  723. { "DELETE", map_delete, MAP_FLAG_VTMAP, 1, "Delete the room at given direction" },
  724. { "DESTROY", map_destroy, MAP_FLAG_VTMAP, 1, "Destroy area or map" },
  725. { "DIG", map_dig, MAP_FLAG_VTMAP, 2, "Create new room at given direction" },
  726. { "ENTRANCE", map_entrance, MAP_FLAG_VTMAP, 2, "Change the given exit's entrance" },
  727. { "EXIT", map_exit, MAP_FLAG_VTMAP, 2, "Change the given exit" },
  728. { "EXITFLAG", map_exitflag, MAP_FLAG_VTMAP, 2, "Change the given exit's flags" },
  729. { "EXPLORE", map_explore, MAP_FLAG_VTMAP, 2, "Save explored path to #path" },
  730. { "FIND", map_find, MAP_FLAG_VTMAP, 2, "Save found path to #path" },
  731. { "FLAG", map_flag, MAP_FLAG_VTMAP, 1, "Change the map's flags" },
  732. { "GET", map_get, 0, 2, "Get various room values" },
  733. { "GLOBAL", map_global, 0, 1, "Set the global exit room" },
  734. { "GOTO", map_goto, MAP_FLAG_VTMAP, 1, "Move to the given room" },
  735. { "INFO", map_info, 0, 1, "Display map and room information" },
  736. { "INSERT", map_insert, MAP_FLAG_VTMAP, 2, "Insert a room at given direction" },
  737. { "JUMP", map_jump, MAP_FLAG_VTMAP, 2, "Move to the given coordinate" },
  738. { "LANDMARK", map_landmark, 0, 1, "Create a global room reference" },
  739. { "LEAVE", map_leave, MAP_FLAG_VTMAP, 2, "Leave the map" },
  740. { "LEGEND" , map_legend, MAP_FLAG_VTMAP, 1, "Manipulate the map legend" },
  741. { "LINK", map_link, MAP_FLAG_VTMAP, 2, "Link room at given direction" },
  742. { "LIST", map_list, 0, 2, "List matching rooms" },
  743. { "MAP", map_map, 0, 2, "Display the map" },
  744. { "MOVE", map_move, MAP_FLAG_VTMAP, 2, "Move to the given direction" },
  745. { "NAME", map_name, MAP_FLAG_VTMAP, 2, "(obsolete) Use SET ROOMNAME instead" },
  746. { "OFFSET", map_offset, MAP_FLAG_VTMAP, 1, "Set the offset of the vt map" },
  747. { "READ", map_read, MAP_FLAG_VTMAP, 0, "Read a map file" },
  748. { "RESIZE", map_resize, 0, 1, "Resize the map room vnum range" },
  749. { "RETURN", map_return, MAP_FLAG_VTMAP, 1, "Return to last known room" },
  750. { "ROOMFLAG", map_roomflag, MAP_FLAG_VTMAP, 2, "Change the room's flags" },
  751. { "RUN", map_run, MAP_FLAG_VTMAP, 2, "Save found path to #path and run it" },
  752. { "SET", map_set, MAP_FLAG_VTMAP, 2, "Set various room values" },
  753. { "SYNC", map_sync, MAP_FLAG_VTMAP, 0, "Read a map file without overwriting" },
  754. { "TERRAIN", map_terrain, MAP_FLAG_VTMAP, 1, "Create a terrain type" },
  755. { "TRAVEL", map_travel, MAP_FLAG_VTMAP, 2, "Save explored path to #path and run it" },
  756. { "UNDO", map_undo, MAP_FLAG_VTMAP, 2, "Undo last map action" },
  757. { "UNINSERT", map_uninsert, MAP_FLAG_VTMAP, 2, "Uninsert room in given direction" },
  758. { "UNLANDMARK", map_unlandmark, MAP_FLAG_VTMAP, 1, "Remove a landmark" },
  759. { "UNLINK", map_unlink, MAP_FLAG_VTMAP, 2, "Remove given exit" },
  760. { "UNTERRAIN", map_unterrain, MAP_FLAG_VTMAP, 1, "Remove a terrain type" },
  761. { "UPDATE", map_update, 0, 0, "Mark vt map for an auto update" },
  762. { "VNUM", map_vnum, MAP_FLAG_VTMAP, 2, "Change the room vnum to given vnum" },
  763. { "WRITE", map_write, 0, 1, "Save the map to given file" },
  764. { "", NULL, 0, 0, "" }
  765. };
  766. struct cursor_type cursor_table[] =
  767. {
  768. { "BACKSPACE", "Delete backward character", "", CURSOR_FLAG_GET_ONE, cursor_backspace, "" },
  769. { "BRACE", "<OPEN|CLOSE> Insert a bracing character.", "", CURSOR_FLAG_GET_ONE, cursor_brace, "" },
  770. { "BACKWARD", "Move cursor backward", "", CURSOR_FLAG_GET_ALL, cursor_move_left, "" },
  771. { "CLEAR", "Delete the input line", "", CURSOR_FLAG_GET_ALL, cursor_clear_line, "" },
  772. { "CLEAR LEFT", "Delete from cursor to start of input", "", CURSOR_FLAG_GET_ALL, cursor_clear_left, "" },
  773. { "CLEAR LINE", "", "", CURSOR_FLAG_GET_ALL, cursor_clear_line, "" }, // obsolete
  774. { "CLEAR RIGHT", "Delete from cursor to end of input", " ", CURSOR_FLAG_GET_ALL, cursor_clear_right, "" },
  775. { "CONVERT META", "Meta convert the next character", "", CURSOR_FLAG_GET_ALL, cursor_convert_meta, "" },
  776. { "CTRL DELETE", "Delete one character, exit on an empty line", "", CURSOR_FLAG_GET_ALL, cursor_delete_or_exit, "" },
  777. { "DELETE", "Delete character at cursor", "\e[3~", CURSOR_FLAG_GET_ALL, cursor_delete, "" },
  778. { "DELETE WORD LEFT", "Delete backwards till next space", "", CURSOR_FLAG_GET_ALL, cursor_delete_word_left, "" },
  779. { "DELETE WORD RIGHT", "Delete forwards till next space", "\e[3;5~", CURSOR_FLAG_GET_ALL, cursor_delete_word_right, "" },
  780. { "DOWN", "Move cursor down", "\e[B", CURSOR_FLAG_GET_ALL, cursor_move_down, "" },
  781. { "ECHO", "", "", CURSOR_FLAG_GET_ONE, cursor_echo, "" },
  782. // { "EDIT", "", "", CURSOR_FLAG_GET_ONE, cursor_edit, "" },
  783. { "END", "Move cursor to end of input", "", CURSOR_FLAG_GET_ALL, cursor_end, "" },
  784. { "ENTER", "Process the input line", "", CURSOR_FLAG_GET_ALL, cursor_enter, "" },
  785. { "FLAG", "Set input echo/insert flags", "", CURSOR_FLAG_GET_ONE, cursor_flag, "" },
  786. { "FORWARD", "Move cursor forward", "", CURSOR_FLAG_GET_ALL, cursor_move_right, "" },
  787. { "GET", "Copy input line to given variable", "", CURSOR_FLAG_GET_ONE, cursor_get, "" },
  788. { "HISTORY NEXT", "Select next command history entry", "", CURSOR_FLAG_GET_ALL, cursor_history_next, "" },
  789. { "HISTORY PREV", "Select previous command history entry", "", CURSOR_FLAG_GET_ALL, cursor_history_prev, "" },
  790. { "HISTORY SEARCH", "Search command history", "", CURSOR_FLAG_GET_ALL, cursor_history_search, "" },
  791. { "HOME", "Move the cursor to start of input", "", CURSOR_FLAG_GET_ALL, cursor_home, "" },
  792. { "INFO", "", "", CURSOR_FLAG_GET_ALL, cursor_info, "" },
  793. // { "INSERT", "", "", CURSOR_FLAG_GET_ONE, NULL, "" },
  794. { "NEXT WORD", "Move cursor to the next word", "\ef", CURSOR_FLAG_GET_ALL, cursor_move_right_word, "" },
  795. { "MACRO", "<PRESERVE|RESET>", "", CURSOR_FLAG_GET_ONE, cursor_macro, "" },
  796. { "PAGE", "<DOWN|END|HOME|LOCK|UP>", "", 0, cursor_page, "" },
  797. { "PASTE BUFFER", "Paste the previously deleted input text", "", CURSOR_FLAG_GET_ALL, cursor_paste_buffer, "" },
  798. { "POSITION", "Move cursor position to given column.", "", CURSOR_FLAG_GET_ONE, cursor_position, "" },
  799. { "PRESERVE MACRO", "", "", CURSOR_FLAG_GET_ALL, cursor_macro, "PRESERVE" }, // obsolete
  800. { "PREV WORD", "Move cursor to the previous word", "\eb", CURSOR_FLAG_GET_ALL, cursor_move_left_word, "" },
  801. { "REDRAW INPUT", "Redraw the input line", " ", CURSOR_FLAG_GET_ALL, cursor_redraw_input, "" },
  802. { "RESET MACRO", "", "", CURSOR_FLAG_GET_ALL, cursor_macro, "RESET" }, // obsolete
  803. { "SET", "Copy given string to input line", "", CURSOR_FLAG_GET_ONE, cursor_set, "" },
  804. { "SOFT ENTER", "Create a new line in edit mode.", "\e[13;2u", CURSOR_FLAG_GET_ALL, cursor_soft_enter, "" },
  805. { "SUSPEND", "Suspend program, return with fg", "", CURSOR_FLAG_GET_ALL, cursor_suspend, "" },
  806. { "TAB", "<LIST|SCROLLBACK> <BACKWARD|FORWARD>", "", CURSOR_FLAG_GET_ONE, cursor_tab, "" },
  807. { "TAB L S BACKWARD", "", "\e[Z", CURSOR_FLAG_GET_ALL, cursor_tab, "L S B" }, // shift tab
  808. { "TAB L S FORWARD", "", "\t", CURSOR_FLAG_GET_ALL, cursor_tab, "L S F" },
  809. { "UP", "Move cursor up", "\e[A", CURSOR_FLAG_GET_ALL, cursor_move_up, "" },
  810. { "", "", "\e[6~", 0, cursor_buffer_down, "" },
  811. { "", "", "\e[1;5F", 0, cursor_buffer_end, "" },
  812. { "", "", "\e[1;5H", 0, cursor_buffer_home, "" },
  813. { "", "", "\e[5~", 0, cursor_buffer_up, "" },
  814. { "", "", "\eOa", 0, cursor_buffer_up, "1" },
  815. { "", "", "\eOb", 0, cursor_buffer_down, "1" },
  816. { "", "", "\e[1;2a", 0, cursor_buffer_up, "" },
  817. { "", "", "\e[1;2b", 0, cursor_buffer_down, "" },
  818. { "", "", "", 0, cursor_buffer_lock, "" },
  819. // { "", "", "\e[13;2u", 0, cursor_enter, "" },
  820. { "", "", "\eOM", 0, cursor_enter, "" },
  821. { "", "", "\e[7~", 0, cursor_home, "" },
  822. { "", "", "\e[1~", 0, cursor_home, "" },
  823. { "", "", "\eOH", 0, cursor_home, "" },
  824. { "", "", "\e[H", 0, cursor_home, "" },
  825. { "", "", "\eOD", 0, cursor_move_left, "" },
  826. { "", "", "\e[D", 0, cursor_move_left, "" },
  827. { "", "", "\e[8~", 0, cursor_end, "" },
  828. { "", "", "\e[4~", 0, cursor_end, "" },
  829. { "", "", "\eOF", 0, cursor_end, "" },
  830. { "", "", "\e[F", 0, cursor_end, "" },
  831. { "", "", "\eOC", 0, cursor_move_right, "" },
  832. { "", "", "\e[C", 0, cursor_move_right, "" },
  833. { "", "", "\x7F", 0, cursor_backspace, "" },
  834. { "", "", "\eOB", 0, cursor_move_down, "" },
  835. { "", "", "\eOA", 0, cursor_move_up, "" },
  836. { "", "", "\e[1;5D", 0, cursor_move_left_word, "" },
  837. { "", "", "\e[1;5C", 0, cursor_move_right_word, "" },
  838. { "", "", "\e[1;5B", 0, cursor_move_page_down, "" },
  839. { "", "", "\e[1;5A", 0, cursor_move_page_up, "" },
  840. { "", "", "\e[127;5u", 0, cursor_clear_line, "" },
  841. { "", "", "\e\x7F", 0, cursor_delete_word_left, "" },
  842. { "", "", "\ed", 0, cursor_delete_word_right, "" },
  843. { "", "", "", 0, NULL, "" }
  844. };
  845. struct edit_type edit_table[] =
  846. {
  847. { "CREATE", edit_create, "Create an editor" },
  848. { "LOAD", edit_load, "Create an editor from a variable" },
  849. { "READ", edit_read, "Create an editor from file" },
  850. { "RESUME", edit_resume, "Resume editing after suspending" },
  851. { "SAVE", edit_save, "Save editor to a list variable" },
  852. { "SUSPEND", edit_suspend, "Suspend editing" },
  853. { "WRITE", edit_write, "Write editor to file" },
  854. { "", NULL, "" },
  855. };
  856. struct timer_type timer_table[] =
  857. {
  858. { "Update Input" },
  859. { "Update Sessions" },
  860. { "Update Delays" },
  861. { "Update Daemon" },
  862. { "Update Chat" },
  863. { "Update Port" },
  864. { "Update Tickers" },
  865. { "Update Paths" },
  866. { "Update Packet Patcher" },
  867. { "Update Terminal" },
  868. { "Update Time Events" },
  869. { "Update Memory" },
  870. { "Stall Program" }
  871. };
  872. struct event_type event_table[] =
  873. {
  874. { "BUFFER UPDATE", 0, EVENT_FLAG_UPDATE, "UPDATE", "scrollback buffer update" },
  875. { "CATCH ", 0, EVENT_FLAG_CATCH, "CATCH", "prefix for catch events" },
  876. { "CHAT MESSAGE", 0, EVENT_FLAG_PORT, "PORT", "any chat related message" },
  877. { "CLASS ACTIVATED", 0, EVENT_FLAG_CLASS, "CLASS", "class activations" },
  878. { "CLASS CREATED", 0, EVENT_FLAG_CLASS, "CLASS", "class creation" },
  879. { "CLASS DEACTIVATED", 0, EVENT_FLAG_CLASS, "CLASS", "class deactivations" },
  880. { "CLASS DESTROYED", 0, EVENT_FLAG_CLASS, "CLASS", "class destruction" },
  881. { "DAEMON ATTACHED", 0, EVENT_FLAG_SYSTEM, "SYSTEM", "daemon attachment" },
  882. { "DAEMON DETACHED", 0, EVENT_FLAG_SYSTEM, "SYSTEM", "daemon detachment" },
  883. { "DATE", 0, EVENT_FLAG_TIME, "TIME", "the given date" },
  884. { "DAY", 0, EVENT_FLAG_TIME, "TIME", "each day or given day" },
  885. { "DISPLAY UPDATE", 0, EVENT_FLAG_UPDATE, "UPDATE", "when display is updated" },
  886. { "DOUBLE-CLICKED ", 0, EVENT_FLAG_MOUSE, "MOUSE", "mouse is double-clicked" },
  887. { "EDIT FINISHED", 0, EVENT_FLAG_INPUT, "INPUT", "when editing is finished" },
  888. { "EDIT STARTED", 0, EVENT_FLAG_INPUT, "INPUT", "when editing is started" },
  889. { "END OF PATH", 0, EVENT_FLAG_MAP, "MAP", "walking the last room" },
  890. { "END OF RUN", 0, EVENT_FLAG_MAP, "MAP", "running the last room" },
  891. { "GAG ", 0, EVENT_FLAG_GAG, "GAG", "prefix for gag events" },
  892. { "HOUR", 0, EVENT_FLAG_TIME, "TIME", "every hour or given hour" },
  893. { "IAC ", 0, EVENT_FLAG_TELNET, "TELNET", "prefix for telnet events" },
  894. { "LONG-CLICKED ", 0, EVENT_FLAG_MOUSE, "MOUSE", "mouse is long-clicked" },
  895. { "MAP CREATE ROOM", 0, EVENT_FLAG_MAP, "MAP", "a room is created" },
  896. { "MAP DELETE ROOM", 0, EVENT_FLAG_MAP, "MAP", "a room is deleted" },
  897. { "MAP DOUBLE-CLICKED ", 0, EVENT_FLAG_MOUSE, "MOUSE", "vt map click" },
  898. { "MAP ENTER MAP", 0, EVENT_FLAG_MAP, "MAP", "entering the map" },
  899. { "MAP ENTER ROOM", 0, EVENT_FLAG_MAP, "MAP", "entering a map room" },
  900. { "MAP EXIT MAP", 0, EVENT_FLAG_MAP, "MAP", "exiting the map" },
  901. { "MAP EXIT ROOM", 0, EVENT_FLAG_MAP, "MAP", "exiting a map room" },
  902. { "MAP FOLLOW MAP", 0, EVENT_FLAG_MAP, "MAP", "moving to a map room" },
  903. { "MAP LOCATION", 0, EVENT_FLAG_MOUSE, "MOUSE", "vt map click" },
  904. { "MAP LONG-CLICKED ", 0, EVENT_FLAG_MOUSE, "MOUSE", "vt map click" },
  905. { "MAP MOUSE LOCATION", 0, EVENT_FLAG_MOUSE, "MOUSE", "called by #screen raise" },
  906. { "MAP MOVED ", 0, EVENT_FLAG_MOUSE, "MOUSE", "vt map mouse move" },
  907. { "MAP PRESSED ", 0, EVENT_FLAG_MOUSE, "MOUSE", "vt map click" },
  908. { "MAP REGION ", 0, EVENT_FLAG_MOUSE, "MOUSE", "vt map mouse events" },
  909. { "MAP RELEASED ", 0, EVENT_FLAG_MOUSE, "MOUSE", "vt map click" },
  910. { "MAP ROOM ", 0, EVENT_FLAG_MOUSE, "MOUSE", "vt map room mouse events" },
  911. { "MAP SCROLLED ", 0, EVENT_FLAG_MOUSE, "MOUSE", "vt map scroll" },
  912. { "MAP SHORT-CLICKED ", 0, EVENT_FLAG_MOUSE, "MOUSE", "vt map click" },
  913. { "MAP TRIPLE-CLICKED ", 0, EVENT_FLAG_MOUSE, "MOUSE", "vt map click" },
  914. { "MAP UPDATED VTMAP", 0, EVENT_FLAG_MAP, "MAP", "vt map update" },
  915. { "MINUTE", 0, EVENT_FLAG_TIME, "TIME", "minute or given minute" },
  916. { "MONTH", 0, EVENT_FLAG_TIME, "TIME", "month or given month" },
  917. { "MOVED ", 0, EVENT_FLAG_MOUSE, "MOUSE", "mouse is moved" },
  918. { "PORT CONNECTION", 0, EVENT_FLAG_PORT, "PORT", "socket connects" },
  919. { "PORT DISCONNECTION", 0, EVENT_FLAG_PORT, "PORT", "socket disconnects" },
  920. { "PORT INITIALIZED", 0, EVENT_FLAG_PORT, "PORT", "port is initialized" },
  921. { "PORT LOG MESSAGE", 0, EVENT_FLAG_PORT, "PORT", "local port log messages" },
  922. { "PORT MESSAGE", 0, EVENT_FLAG_PORT, "PORT", "local port messages" },
  923. { "PORT RECEIVED MESSAGE", 0, EVENT_FLAG_PORT, "PORT", "socket data is received" },
  924. { "PORT UNINITIALIZED", 0, EVENT_FLAG_PORT, "PORT", "port is uninitialized" },
  925. { "PRESSED ", 0, EVENT_FLAG_MOUSE, "MOUSE", "mouse button is pressed" },
  926. { "PROCESSED KEYPRESS", 0, EVENT_FLAG_INPUT, "INPUT", "after a regular keypress" },
  927. { "PROGRAM START", 0, EVENT_FLAG_SYSTEM, "SYSTEM", "main session starts" },
  928. { "PROGRAM TERMINATION", 0, EVENT_FLAG_SYSTEM, "SYSTEM", "main session exists" },
  929. { "READ ERROR", 0, EVENT_FLAG_SYSTEM, "SYSTEM", "the read command fails" },
  930. { "RECEIVED ERROR", 0, EVENT_FLAG_SYSTEM, "SYSTEM", "an error is received" },
  931. { "RECEIVED INPUT", 0, EVENT_FLAG_INPUT, "INPUT", "keyboard input is received" },
  932. { "RECEIVED KEYPRESS", 0, EVENT_FLAG_INPUT, "INPUT", "a keypress is received" },
  933. { "RECEIVED LINE", 0, EVENT_FLAG_OUTPUT, "OUTPUT", "a new line is received" },
  934. { "RECEIVED OUTPUT", 0, EVENT_FLAG_OUTPUT, "OUTPUT", "bulk output is received" },
  935. { "RECEIVED PROMPT", 0, EVENT_FLAG_OUTPUT, "OUTPUT", "a prompt is received" },
  936. { "RELEASED ", 0, EVENT_FLAG_MOUSE, "MOUSE", "mouse button is released" },
  937. { "SCAN CSV HEADER", 0, EVENT_FLAG_SCAN, "SCAN", "scanning a csv file" },
  938. { "SCAN CSV LINE", 0, EVENT_FLAG_SCAN, "SCAN", "scanning a csv file" },
  939. { "SCAN TSV HEADER", 0, EVENT_FLAG_SCAN, "SCAN", "scanning a tsv file" },
  940. { "SCAN TSV LINE", 0, EVENT_FLAG_SCAN, "SCAN", "scanning a tsv file" },
  941. { "SCREEN DESKTOP DIMENSIONS", 0, EVENT_FLAG_SCREEN, "SCREEN", "called by #screen raise" },
  942. { "SCREEN DESKTOP SIZE", 0, EVENT_FLAG_SCREEN, "SCREEN", "called by #screen raise" },
  943. { "SCREEN DIMENSIONS", 0, EVENT_FLAG_SCREEN, "SCREEN", "called by #screen raise" },
  944. { "SCREEN FILL", 0, EVENT_FLAG_SCREEN, "SCREEN", "split bars are filled" },
  945. { "SCREEN FOCUS", 0, EVENT_FLAG_MOUSE, "MOUSE", "focus changes", },
  946. { "SCREEN LOCATION", 0, EVENT_FLAG_SCREEN, "SCREEN", "called by #screen raise" },
  947. { "SCREEN MINIMIZED", 0, EVENT_FLAG_SCREEN, "SCREEN", "called by #screen raise" },
  948. { "SCREEN MOUSE LOCATION", 0, EVENT_FLAG_MOUSE, "MOUSE", "called by #screen raise" },
  949. { "SCREEN REFRESH", 0, EVENT_FLAG_SCREEN, "SCREEN", "the screen is refreshed" },
  950. { "SCREEN RESIZE", 0, EVENT_FLAG_SCREEN, "SCREEN", "the screen is resized" },
  951. { "SCREEN ROTATE LANDSCAPE", 0, EVENT_FLAG_SCREEN, "SCREEN", "the screen is rotated" },
  952. { "SCREEN ROTATE PORTRAIT", 0, EVENT_FLAG_SCREEN, "SCREEN", "the screen is rotated" },
  953. { "SCREEN SIZE", 0, EVENT_FLAG_SCREEN, "SCREEN", "called by #screen raise" },
  954. { "SCREEN SPLIT", 0, EVENT_FLAG_SCREEN, "SCREEN", "the screen is split" },
  955. { "SCREEN SPLIT FILL", 0, EVENT_FLAG_SCREEN, "SCREEN", "split region is filled" },
  956. { "SCREEN UNSPLIT", 0, EVENT_FLAG_SCREEN, "SCREEN", "the screen is unsplit" },
  957. { "SCROLLBAR MOVE", 0, EVENT_FLAG_SCREEN, "SCREEN", "scrollbar movement" },
  958. { "SCROLLBAR POSITION", 0, EVENT_FLAG_SCREEN, "SCREEN", "scrollbar position" },
  959. { "SCROLLBAR UPDATE", 0, EVENT_FLAG_UPDATE, "UPDATE", "scrollbar update" },
  960. { "SCROLLED ", 0, EVENT_FLAG_MOUSE, "MOUSE", "mouse wheel is scrolled" },
  961. { "SECOND", 0, EVENT_FLAG_TIME, "TIME", "second or given second" },
  962. { "SEND OUTPUT", 0, EVENT_FLAG_INPUT, "INPUT", "before sending output" },
  963. { "SENT OUTPUT", 0, EVENT_FLAG_INPUT, "INPUT", "after sending output" },
  964. { "SESSION ACTIVATED", 0, EVENT_FLAG_SESSION, "SESSION", "a session is activated" },
  965. { "SESSION CONNECTED", 0, EVENT_FLAG_SESSION, "SESSION", "a new session connects" },
  966. { "SESSION CREATED", 0, EVENT_FLAG_SESSION, "SESSION", "a new session is created" },
  967. { "SESSION DEACTIVATED", 0, EVENT_FLAG_SESSION, "SESSION", "a session is deactivated" },
  968. { "SESSION DESTROYED", 0, EVENT_FLAG_SESSION, "SESSION", "a session is destroyed" },
  969. { "SESSION DISCONNECTED", 0, EVENT_FLAG_SESSION, "SESSION", "a session disconnects" },
  970. { "SESSION TIMED OUT", 0, EVENT_FLAG_SESSION, "SESSION", "a session doesn't connect" },
  971. { "SHORT-CLICKED", 0, EVENT_FLAG_MOUSE, "MOUSE", "mouse is short-clicked" },
  972. { "SWIPED", 0, EVENT_FLAG_MOUSE, "MOUSE", "mouse swipe" },
  973. { "SYSTEM CRASH", 0, EVENT_FLAG_SYSTEM, "SYSTEM", "system crash" },
  974. { "SYSTEM ERROR", 0, EVENT_FLAG_SYSTEM, "SYSTEM", "system errors" },
  975. { "TIME", 0, EVENT_FLAG_TIME, "TIME", "the given time" },
  976. { "TRIPLE-CLICKED", 0, EVENT_FLAG_MOUSE, "MOUSE", "mouse is triple-clicked" },
  977. { "UNKNOWN COMMAND", 0, EVENT_FLAG_SYSTEM, "SYSTEM", "unknown tintin command" },
  978. { "VARIABLE UPDATE ", 0, EVENT_FLAG_VARIABLE, "VARIABLE", "before a variable updates" },
  979. { "VARIABLE UPDATED ", 0, EVENT_FLAG_VARIABLE, "VARIABLE", "after a variable updates" },
  980. { "VT100 CPR", 0, EVENT_FLAG_VT100, "VT100", "an ESC [ 6 n call" },
  981. { "VT100 DA", 0, EVENT_FLAG_VT100, "VT100", "an ESC [ c call" },
  982. { "VT100 DECID", 0, EVENT_FLAG_VT100, "VT100", "an ESC Z call" },
  983. { "VT100 DSR", 0, EVENT_FLAG_VT100, "VT100", "an ESC [ 5 n call" },
  984. { "VT100 ENQ", 0, EVENT_FLAG_VT100, "VT100", "an \\x05 call" },
  985. { "VT100 SCROLL REGION", 0, EVENT_FLAG_VT100, "VT100", "vt100 scroll region change" },
  986. { "WEEK", 0, EVENT_FLAG_TIME, "TIME", "each week or given week" },
  987. { "WRITE ERROR", 0, EVENT_FLAG_SYSTEM, "SYSTEM", "the write command fails" },
  988. { "YEAR", 0, EVENT_FLAG_TIME, "TIME", "each year or given year" },
  989. { "", 0, 0, "", "" }
  990. };
  991. struct path_type path_table[] =
  992. {
  993. { "CREATE", path_create, "Clear the path and start path mapping." },
  994. { "DELETE", path_delete, "Delete the last command from the path." },
  995. { "DESCRIBE", path_describe, "Describe the path and current position." },
  996. { "DESTROY", path_destroy, "Clear the path and stop path mapping." },
  997. { "END", path_end, "" },
  998. { "GET", path_get, "Store a path value into a variable." },
  999. { "GOTO", path_goto, "Move position to given index." },
  1000. { "INSERT", path_insert, "Insert a command to the end of the path." },
  1001. { "LOAD", path_load, "Load a path from a variable." },
  1002. { "MAP", path_map, "Display the path and current position." },
  1003. { "MOVE", path_move, "Move one position forward or backward." },
  1004. { "NEW", path_new, "" },
  1005. { "RUN", path_run, "Execute the current path with optional delay." },
  1006. { "SAVE", path_save, "Save the current path to the given variable." },
  1007. { "SHOW", path_map, "" },
  1008. { "START", path_start, "Start path mapping." },
  1009. { "STOP", path_stop, "Stop path mapping." },
  1010. { "SWAP", path_swap, "Reverse the path, forward becoming backward." },
  1011. { "UNDO", path_undo, "Undo last step." },
  1012. { "UNZIP", path_unzip, "Turn speedwalk into a path." },
  1013. { "WALK", path_walk, "Walk one step forward or backward." },
  1014. { "ZIP", path_zip, "Turn path into a speedwalk." },
  1015. { "", NULL, "" }
  1016. };
  1017. struct line_type line_table[] =
  1018. {
  1019. { "BACKGROUND", line_background, "Execute line without stealing session focus." },
  1020. { "BENCHMARK", line_benchmark, "Execute line and provide timing information." },
  1021. { "CAPTURE", line_capture, "Capture output in the given variable." },
  1022. { "CONVERT", line_convert, "Execute line in convert meta data mode." },
  1023. { "DEBUG", line_debug, "Execute line in debug mode." },
  1024. { "GAG", line_gag, "Gag the next line." },
  1025. { "IGNORE", line_ignore, "Execute line with triggers ignored." },
  1026. { "LOCAL", line_local, "Execute line with local scope." },
  1027. { "LOG", line_log, "Log the next line or given line." },
  1028. { "LOGMODE", line_logmode, "Execute line with given log mode." },
  1029. { "LOGVERBATIM", line_logverbatim, "Log the line as plain text verbatim." },
  1030. { "MSDP", line_msdp, "Execute line with msdp conversion." },
  1031. { "MULTISHOT", line_multishot, "Execute line creating multishot triggers." },
  1032. { "ONESHOT", line_oneshot, "Execute line creating oneshot triggers." },
  1033. { "QUIET", line_quiet, "Execute line with all system messages off." },
  1034. { "STRIP", line_strip, "Execute line with escape codes stripped." },
  1035. { "SUBSTITUTE", line_substitute, "Execute line with given substitution." },
  1036. { "VERBATIM", line_verbatim, "Execute line as plain text." },
  1037. { "VERBOSE", line_verbose, "Execute line with all system messages on." },
  1038. { "", NULL, "" }
  1039. };
  1040. struct log_type log_table[] =
  1041. {
  1042. { "APPEND", log_append, "Start logging, appending to give file." },
  1043. { "INFO", log_info, "Some logging related info." },
  1044. { "OFF", log_off, "Stop logging." },
  1045. { "OVERWRITE", log_overwrite, "Start logging, overwriting the given file." },
  1046. { "", NULL, "" }
  1047. };
  1048. struct history_type history_table[] =
  1049. {
  1050. // { "CHARACTER", history_character, "Set the character used for repeating commands." },
  1051. { "DELETE", history_delete, "Delete last command history entry." },
  1052. { "GET", history_get, "Store in given variable a given index or range." },
  1053. { "INSERT", history_insert, "Insert a new command history entry." },
  1054. { "LIST", history_list, "Display command history list." },
  1055. { "READ", history_read, "Read a command history list from file." },
  1056. // { "SIZE", history_size, "The size of the command history." },
  1057. { "WRITE", history_write, "Write a command history list to file." },
  1058. { "", NULL, "" }
  1059. };
  1060. struct buffer_type buffer_table[] =
  1061. {
  1062. { "CLEAR", buffer_clear, "Clear buffer." },
  1063. { "DOWN", buffer_down, "Scroll down one page." },
  1064. { "END", buffer_end, "Scroll down to the end of the buffer." },
  1065. { "FIND", buffer_find, "Move to the given string in the buffer." },
  1066. { "GET", buffer_get, "Store in given variable a given line or range." },
  1067. { "HOME", buffer_home, "Scroll up to the start of the buffer." },
  1068. { "INFO", buffer_info, "Display statistics about the buffer." },
  1069. { "JUMP", buffer_jump, "Jump to given line." },
  1070. { "LOCK", buffer_lock, "Toggle the locking state of the buffer." },
  1071. { "REFRESH", buffer_refresh, "Refresh the buffer display." },
  1072. { "UP", buffer_up, "Scroll up one page." },
  1073. { "WRITE", buffer_write, "Write the buffer to file." },
  1074. { "", NULL, "" }
  1075. };
  1076. char *telcmds[] =
  1077. {
  1078. "EOF", "SUSP", "ABORT", "EOR", "SE",
  1079. "NOP", "DMARK", "BRK", "IP", "AO",
  1080. "AYT", "EC", "EL", "GA", "SB",
  1081. "WILL", "WONT", "DO", "DONT", "IAC",
  1082. };
  1083. struct telopt_type telopt_table[] =
  1084. {
  1085. { "BINARY", TEL_N, 0 },
  1086. { "ECHO", TEL_Y, 0 },
  1087. { "RCP", TEL_N, 0 },
  1088. { "SGA", TEL_Y, 0 },
  1089. { "NAME", TEL_N, 0 },
  1090. { "STATUS", TEL_N, 0 },
  1091. { "TIMING MARK", TEL_N, 0 },
  1092. { "RCTE", TEL_N, 0 },
  1093. { "NAOL", TEL_N, 0 },
  1094. { "NAOP", TEL_N, 0 },
  1095. { "NAORCD", TEL_N, 0 }, /* 10 */
  1096. { "NAOHTS", TEL_N, 0 },
  1097. { "NAOHTD", TEL_N, 0 },
  1098. { "NAOFFD", TEL_N, 0 },
  1099. { "NAOVTS", TEL_N, 0 },
  1100. { "NAOVTD", TEL_N, 0 },
  1101. { "NAOLFD", TEL_N, 0 },
  1102. { "EXTEND ASCII", TEL_N, 0 },
  1103. { "LOGOUT", TEL_N, 0 },
  1104. { "BYTE MACRO", TEL_N, 0 },
  1105. { "DATA ENTRY TERML", TEL_N, 0 }, /* 20 */
  1106. { "SUPDUP", TEL_N, 0 },
  1107. { "SUPDUP OUTPUT", TEL_N, 0 },
  1108. { "SEND LOCATION", TEL_N, 0 },
  1109. { "TERMINAL TYPE", TEL_Y, ANNOUNCE_DO },
  1110. { "EOR", TEL_Y, 0 },
  1111. { "TACACS UID", TEL_N, 0 },
  1112. { "OUTPUT MARKING", TEL_N, 0 },
  1113. { "TTYLOC", TEL_N, 0 },
  1114. { "3270 REGIME", TEL_N, 0 },
  1115. { "X.3 PAD", TEL_N, 0 }, /* 30 */
  1116. { "NAWS", TEL_Y, ANNOUNCE_DO },
  1117. { "TSPEED", TEL_Y, 0 },
  1118. { "LFLOW", TEL_N, 0 },
  1119. { "LINEMODE", TEL_N, 0 },
  1120. { "XDISPLOC", TEL_N, 0 },
  1121. { "OLD-ENVIRON", TEL_N, 0 },
  1122. { "AUTH", TEL_N, 0 },
  1123. { "ENCRYPT", TEL_N, 0 },
  1124. { "NEW-ENVIRON", TEL_Y, ANNOUNCE_DO },
  1125. { "TN3270E", TEL_N, 0 }, /* 40 */
  1126. { "XAUTH", TEL_N, 0 },
  1127. { "CHARSET", TEL_Y, ANNOUNCE_WILL },
  1128. { "RSP", TEL_N, 0 },
  1129. { "COM PORT", TEL_N, 0 },
  1130. { "SLE", TEL_N, 0 },
  1131. { "STARTTLS", TEL_N, 0 },
  1132. { "KERMIT", TEL_N, 0 },
  1133. { "SEND-URL", TEL_N, 0 },
  1134. { "FORWARD_X", TEL_N, 0 },
  1135. { "50", TEL_N, 0 }, /* 50 */
  1136. { "51", TEL_N, 0 },
  1137. { "52", TEL_N, 0 },
  1138. { "53", TEL_N, 0 },
  1139. { "54", TEL_N, 0 },
  1140. { "55", TEL_N, 0 },
  1141. { "56", TEL_N, 0 },
  1142. { "57", TEL_N, 0 },
  1143. { "58", TEL_N, 0 },
  1144. { "59", TEL_N, 0 },
  1145. { "60", TEL_N, 0 }, /* 60 */
  1146. { "61", TEL_N, 0 },
  1147. { "62", TEL_N, 0 },
  1148. { "63", TEL_N, 0 },
  1149. { "64", TEL_N, 0 },
  1150. { "65", TEL_N, 0 },
  1151. { "66", TEL_N, 0 },
  1152. { "67", TEL_N, 0 },
  1153. { "68", TEL_N, 0 },
  1154. { "MSDP", TEL_N, ANNOUNCE_WILL }, /* Mud Server Data Protocol */
  1155. { "MSSP", TEL_N, ANNOUNCE_WILL }, /* Mud Server Status Protocol */
  1156. { "71", TEL_N, 0 },
  1157. { "72", TEL_N, 0 },
  1158. { "73", TEL_N, 0 },
  1159. { "74", TEL_N, 0 },
  1160. { "75", TEL_N, 0 },
  1161. { "76", TEL_N, 0 },
  1162. { "77", TEL_N, 0 },
  1163. { "78", TEL_N, 0 },
  1164. { "79", TEL_N, 0 },
  1165. { "80", TEL_N, 0 }, /* 80 */
  1166. { "81", TEL_N, 0 },
  1167. { "82", TEL_N, 0 },
  1168. { "83", TEL_N, 0 },
  1169. { "84", TEL_N, 0 },
  1170. { "MCCP1", TEL_N, 0 }, /* Obsolete */
  1171. { "MCCP2", TEL_Y, ANNOUNCE_WILL }, /* Mud Client Compression Protocol v2 */
  1172. { "MCCP3", TEL_N, ANNOUNCE_WILL }, /* Mud Client Compression Protocol v3 */
  1173. { "88", TEL_N, 0 },
  1174. { "89", TEL_N, 0 },
  1175. { "MSP", TEL_N, 0 }, /* Mud Sound Protocl */
  1176. { "MXP", TEL_N, 0 }, /* Mud eXtension Protocol */
  1177. { "92", TEL_N, 0 }, /* Unadopted - MSP2 draft */
  1178. { "ZMP", TEL_N, 0 }, /* Unadopted - Zenith Mud Protocl draft */
  1179. { "94", TEL_N, 0 },
  1180. { "95", TEL_N, 0 },
  1181. { "96", TEL_N, 0 },
  1182. { "97", TEL_N, 0 },
  1183. { "98", TEL_N, 0 },
  1184. { "99", TEL_N, 0 },
  1185. { "100", TEL_N, 0 },
  1186. { "101", TEL_N, 0 },
  1187. { "102", TEL_N, 0 }, /* Obsolete - Aardwolf */
  1188. { "103", TEL_N, 0 },
  1189. { "104", TEL_N, 0 },
  1190. { "105", TEL_N, 0 },
  1191. { "106", TEL_N, 0 },
  1192. { "107", TEL_N, 0 },
  1193. { "108", TEL_N, 0 },
  1194. { "109", TEL_N, 0 },
  1195. { "110", TEL_N, 0 },
  1196. { "111", TEL_N, 0 },
  1197. { "112", TEL_N, 0 },
  1198. { "113", TEL_N, 0 },
  1199. { "114", TEL_N, 0 },
  1200. { "115", TEL_N, 0 },
  1201. { "116", TEL_N, 0 },
  1202. { "117", TEL_N, 0 },
  1203. { "118", TEL_N, 0 },
  1204. { "119", TEL_N, 0 },
  1205. { "120", TEL_N, 0 },
  1206. { "121", TEL_N, 0 },
  1207. { "122", TEL_N, 0 },
  1208. { "123", TEL_N, 0 },
  1209. { "124", TEL_N, 0 },
  1210. { "125", TEL_N, 0 },
  1211. { "126", TEL_N, 0 },
  1212. { "127", TEL_N, 0 },
  1213. { "128", TEL_N, 0 },
  1214. { "129", TEL_N, 0 },
  1215. { "130", TEL_N, 0 },
  1216. { "131", TEL_N, 0 },
  1217. { "132", TEL_N, 0 },
  1218. { "133", TEL_N, 0 },
  1219. { "134", TEL_N, 0 },
  1220. { "135", TEL_N, 0 },
  1221. { "136", TEL_N, 0 },
  1222. { "137", TEL_N, 0 },
  1223. { "138", TEL_N, 0 },
  1224. { "139", TEL_N, 0 },
  1225. { "140", TEL_N, 0 },
  1226. { "141", TEL_N, 0 },
  1227. { "142", TEL_N, 0 },
  1228. { "143", TEL_N, 0 },
  1229. { "144", TEL_N, 0 },
  1230. { "145", TEL_N, 0 },
  1231. { "146", TEL_N, 0 },
  1232. { "147", TEL_N, 0 },
  1233. { "148", TEL_N, 0 },
  1234. { "149", TEL_N, 0 },
  1235. { "150", TEL_N, 0 },
  1236. { "151", TEL_N, 0 },
  1237. { "152", TEL_N, 0 },
  1238. { "153", TEL_N, 0 },
  1239. { "154", TEL_N, 0 },
  1240. { "155", TEL_N, 0 },
  1241. { "156", TEL_N, 0 },
  1242. { "157", TEL_N, 0 },
  1243. { "158", TEL_N, 0 },
  1244. { "159", TEL_N, 0 },
  1245. { "160", TEL_N, 0 },
  1246. { "161", TEL_N, 0 },
  1247. { "162", TEL_N, 0 },
  1248. { "163", TEL_N, 0 },
  1249. { "164", TEL_N, 0 },
  1250. { "165", TEL_N, 0 },
  1251. { "166", TEL_N, 0 },
  1252. { "167", TEL_N, 0 },
  1253. { "168", TEL_N, 0 },
  1254. { "169", TEL_N, 0 },
  1255. { "170", TEL_N, 0 },
  1256. { "171", TEL_N, 0 },
  1257. { "172", TEL_N, 0 },
  1258. { "173", TEL_N, 0 },
  1259. { "174", TEL_N, 0 },
  1260. { "175", TEL_N, 0 },
  1261. { "176", TEL_N, 0 },
  1262. { "177", TEL_N, 0 },
  1263. { "178", TEL_N, 0 },
  1264. { "179", TEL_N, 0 },
  1265. { "180", TEL_N, 0 },
  1266. { "181", TEL_N, 0 },
  1267. { "182", TEL_N, 0 },
  1268. { "183", TEL_N, 0 },
  1269. { "184", TEL_N, 0 },
  1270. { "185", TEL_N, 0 },
  1271. { "186", TEL_N, 0 },
  1272. { "187", TEL_N, 0 },
  1273. { "188", TEL_N, 0 },
  1274. { "189", TEL_N, 0 },
  1275. { "190", TEL_N, 0 },
  1276. { "191", TEL_N, 0 },
  1277. { "192", TEL_N, 0 },
  1278. { "193", TEL_N, 0 },
  1279. { "194", TEL_N, 0 },
  1280. { "195", TEL_N, 0 },
  1281. { "196", TEL_N, 0 },
  1282. { "197", TEL_N, 0 },
  1283. { "198", TEL_N, 0 },
  1284. { "199", TEL_N, 0 },
  1285. { "ATCP", TEL_N, 0 }, /* Obsolete - Achaea Telnet Communication Protocol */
  1286. { "GMCP", TEL_N, ANNOUNCE_WILL }, /* MSDP over GMCP */
  1287. { "202", TEL_N, 0 },
  1288. { "203", TEL_N, 0 },
  1289. { "204", TEL_N, 0 },
  1290. { "205", TEL_N, 0 },
  1291. { "206", TEL_N, 0 },
  1292. { "207", TEL_N, 0 },
  1293. { "208", TEL_N, 0 },
  1294. { "209", TEL_N, 0 },
  1295. { "210", TEL_N, 0 },
  1296. { "211", TEL_N, 0 },
  1297. { "212", TEL_N, 0 },
  1298. { "213", TEL_N, 0 },
  1299. { "214", TEL_N, 0 },
  1300. { "215", TEL_N, 0 },
  1301. { "216", TEL_N, 0 },
  1302. { "217", TEL_N, 0 },
  1303. { "218", TEL_N, 0 },
  1304. { "219", TEL_N, 0 },
  1305. { "220", TEL_N, 0 },
  1306. { "221", TEL_N, 0 },
  1307. { "222", TEL_N, 0 },
  1308. { "223", TEL_N, 0 },
  1309. { "224", TEL_N, 0 },
  1310. { "225", TEL_N, 0 },
  1311. { "226", TEL_N, 0 },
  1312. { "227", TEL_N, 0 },
  1313. { "228", TEL_N, 0 },
  1314. { "229", TEL_N, 0 },
  1315. { "230", TEL_N, 0 },
  1316. { "231", TEL_N, 0 },
  1317. { "232", TEL_N, 0 },
  1318. { "233", TEL_N, 0 },
  1319. { "234", TEL_N, 0 },
  1320. { "235", TEL_N, 0 },
  1321. { "236", TEL_N, 0 },
  1322. { "237", TEL_N, 0 },
  1323. { "238", TEL_N, 0 },
  1324. { "239", TEL_N, 0 },
  1325. { "240", TEL_N, 0 },
  1326. { "NOP", TEL_N, 0 },
  1327. { "242", TEL_N, 0 },
  1328. { "243", TEL_N, 0 },
  1329. { "244", TEL_N, 0 },
  1330. { "245", TEL_N, 0 },
  1331. { "246", TEL_N, 0 },
  1332. { "247", TEL_N, 0 },
  1333. { "248", TEL_N, 0 },
  1334. { "249", TEL_N, 0 },
  1335. { "250", TEL_N, 0 },
  1336. { "251", TEL_N, 0 },
  1337. { "252", TEL_N, 0 },
  1338. { "253", TEL_N, 0 },
  1339. { "254", TEL_N, 0 },
  1340. { "255", TEL_N, 0 }
  1341. };
  1342. struct map_legend_type map_legend_table[] =
  1343. {
  1344. { "NO EXITS", "ASCII NESW LINE", "x", "1x1" },
  1345. { "N", "ASCII NESW LINE", "o", "1x1" },
  1346. { " E", "ASCII NESW LINE", "o", "1x1" },
  1347. { "N E", "ASCII NESW LINE", "+", "1x1" },
  1348. { " S", "ASCII NESW LINE", "o", "1x1" },
  1349. { "N S", "ASCII NESW LINE", "|", "1x1" },
  1350. { " E S", "ASCII NESW LINE", "+", "1x1" },
  1351. { "N E S", "ASCII NESW LINE", "+", "1x1" },
  1352. { " W", "ASCII NESW LINE", "o", "1x1" },
  1353. { "N W", "ASCII NESW LINE", "+", "1x1" },
  1354. { " E W", "ASCII NESW LINE", "-", "1x1" },
  1355. { "N E W", "ASCII NESW LINE", "+", "1x1" },
  1356. { " S W", "ASCII NESW LINE", "+", "1x1" },
  1357. { "N S W", "ASCII NESW LINE", "+", "1x1" },
  1358. { " E S W", "ASCII NESW LINE", "+", "1x1" },
  1359. { "N E S W", "ASCII NESW LINE", "+", "1x1" },
  1360. { "USER", "ASCII NESW MISC", "x", "1x1" },
  1361. { "DIR UNKNOWN", "ASCII NESW MISC", "+", "1x1" },
  1362. { "N S VOID", "ASCII NESW MISC", "|", "1x1" },
  1363. { "E W VOID", "ASCII NESW MISC", "-", "1x1" },
  1364. { "N E CURVED", "ASCII NESW CURVED", "+", "1x1" },
  1365. { "S E CURVED", "ASCII NESW CURVED", "+", "1x1" },
  1366. { "S W CURVED", "ASCII NESW CURVED", "+", "1x1" },
  1367. { "N W CURVED", "ASCII NESW CURVED", "+", "1x1" },
  1368. { "DIR N", "ASCII NESW DIRS", "|", "1x1" },
  1369. { "DIR NE", "ASCII NESW DIRS", "/", "1x1" },
  1370. { "DIR E", "ASCII NESW DIRS", "-", "1x1" },
  1371. { "DIR SE", "ASCII NESW DIRS", "\\", "1x1" },
  1372. { "DIR S", "ASCII NESW DIRS", "|", "1x1" },
  1373. { "DIR SW", "ASCII NESW DIRS", "/", "1x1" },
  1374. { "DIR W", "ASCII NESW DIRS", "-", "1x1" },
  1375. { "DIR NW", "ASCII NESW DIRS", "\\", "1x1" },
  1376. { "NO EXITS", "NESW LINE", "1x1", "1x1" },
  1377. { "N", "NESW LINE", "1x1", "1x1" },
  1378. { " E", "NESW LINE", "1x1", "1x1" },
  1379. { "N E", "NESW LINE", "1x1", "1x1" },
  1380. { " S", "NESW LINE", "1x1", "1x1" },
  1381. { "N S", "NESW LINE", "1x1", "1x1" },
  1382. { " E S", "NESW LINE", "1x1", "1x1" },
  1383. { "N E S", "NESW LINE", "1x1", "1x1" },
  1384. { " W", "NESW LINE", "1x1", "1x1" },
  1385. { "N W", "NESW LINE", "1x1", "1x1" },
  1386. { " E W", "NESW LINE", "1x1", "1x1" },
  1387. { "N E W", "NESW LINE", "1x1", "1x1" },
  1388. { " S W", "NESW LINE", "1x1", "1x1" },
  1389. { "N S W", "NESW LINE", "1x1", "1x1" },
  1390. { " E S W", "NESW LINE", "1x1", "1x1" },
  1391. { "N E S W", "NESW LINE", "1x1", "1x1" },
  1392. { "USER", "NESW MISC", "1x1", "1x1" },
  1393. { "DIR UNKNOWN", "NESW MISC", "1x1", "1x1" },
  1394. { "N S VOID", "NESW MISC", "1x1", "1x1" },
  1395. { "E W VOID", "NESW MISC", "1x1", "1x1" },
  1396. { "N E CURVED", "NESW CURVED", "1x1", "1x1" },
  1397. { "S E CURVED", "NESW CURVED", "1x1", "1x1" },
  1398. { "S W CURVED", "NESW CURVED", "1x1", "1x1" },
  1399. { "N W CURVED", "NESW CURVED", "1x1", "1x1" },
  1400. { "DIR N", "NESW DIRS", "1x1", "1x1" },
  1401. { "DIR NE", "NESW DIRS", "1x1", "1x1" },
  1402. { "DIR E", "NESW DIRS", "1x1", "1x1" },
  1403. { "DIR SE", "NESW DIRS", "1x1", "1x1" },
  1404. { "DIR S", "NESW DIRS", "1x1", "1x1" },
  1405. { "DIR SW", "NESW DIRS", "1x1", "1x1" },
  1406. { "DIR W", "NESW DIRS", "1x1", "1x1" },
  1407. { "DIR NW", "NESW DIRS", "1x1", "1x1" },
  1408. { "NO EXITS", "MUDFONT NWS", "1x2", "1x2" },
  1409. { "N", "MUDFONT NWS", "1x2", "1x2" },
  1410. { " NW", "MUDFONT NWS", "1x2", "1x2" },
  1411. { "N NW", "MUDFONT NWS", "1x2", "1x2" },
  1412. { " W", "MUDFONT NWS", "1x2", "1x2" },
  1413. { "N W", "MUDFONT NWS", "1x2", "1x2" },
  1414. { " NW W", "MUDFONT NWS", "1x2", "1x2" },
  1415. { "N NW W", "MUDFONT NWS", "1x2", "1x2" },
  1416. { " SW", "MUDFONT NWS", "1x2", "1x2" },
  1417. { "N SW", "MUDFONT NWS", "1x2", "1x2" },
  1418. { " NW SW", "MUDFONT NWS", "1x2", "1x2" },
  1419. { "N NW SW", "MUDFONT NWS", "1x2", "1x2" },
  1420. { " W SW", "MUDFONT NWS", "1x2", "1x2" },
  1421. { "N W SW", "MUDFONT NWS", "1x2", "1x2" },
  1422. { " NW W SW", "MUDFONT NWS", "1x2", "1x2" },
  1423. { "N NW W SW", "MUDFONT NWS", "1x2", "1x2" },
  1424. { " S", "MUDFONT NWS", "1x2", "1x2" },
  1425. { "N S", "MUDFONT NWS", "1x2", "1x2" },
  1426. { " NW S", "MUDFONT NWS", "1x2", "1x2" },
  1427. { "N NW S", "MUDFONT NWS", "1x2", "1x2" },
  1428. { " W S", "MUDFONT NWS", "1x2", "1x2" },
  1429. { "N W S", "MUDFONT NWS", "1x2", "1x2" },
  1430. { " NW W S", "MUDFONT NWS", "1x2", "1x2" },
  1431. { "N NW W S", "MUDFONT NWS", "1x2", "1x2" },
  1432. { " SW S", "MUDFONT NWS", "1x2", "1x2" },
  1433. { "N SW S", "MUDFONT NWS", "1x2", "1x2" },
  1434. { " NW SW S", "MUDFONT NWS", "1x2", "1x2" },
  1435. { "N NW SW S", "MUDFONT NWS", "1x2", "1x2" },
  1436. { " W SW S", "MUDFONT NWS", "1x2", "1x2" },
  1437. { "N W SW S", "MUDFONT NWS", "1x2", "1x2" },
  1438. { " NW W SW S", "MUDFONT NWS", "1x2", "1x2" },
  1439. { "N NW W SW S", "MUDFONT NWS", "1x2", "1x2" },
  1440. { "NO EXITS", "MUDFONT NES", "1x2", "1x2" },
  1441. { "N", "MUDFONT NES", "1x2", "1x2" },
  1442. { " NE", "MUDFONT NES", "1x2", "1x2" },
  1443. { "N NE", "MUDFONT NES", "1x2", "1x2" },
  1444. { " W", "MUDFONT NES", "1x2", "1x2" },
  1445. { "N W", "MUDFONT NES", "1x2", "1x2" },
  1446. { " NE W", "MUDFONT NES", "1x2", "1x2" },
  1447. { "N NE W", "MUDFONT NES", "1x2", "1x2" },
  1448. { " SE", "MUDFONT NES", "1x2", "1x2" },
  1449. { "N SE", "MUDFONT NES", "1x2", "1x2" },
  1450. { " NE SE", "MUDFONT NES", "1x2", "1x2" },
  1451. { "N NE SE", "MUDFONT NES", "1x2", "1x2" },
  1452. { " W SE", "MUDFONT NES", "1x2", "1x2" },
  1453. { "N W SE", "MUDFONT NES", "1x2", "1x2" },
  1454. { " NE W SE", "MUDFONT NES", "1x2", "1x2" },
  1455. { "N NE W SE", "MUDFONT NES", "1x2", "1x2" },
  1456. { " S", "MUDFONT NES", "1x2", "1x2" },
  1457. { "N S", "MUDFONT NES", "1x2", "1x2" },
  1458. { " NE S", "MUDFONT NES", "1x2", "1x2" },
  1459. { "N NE S", "MUDFONT NES", "1x2", "1x2" },
  1460. { " W S", "MUDFONT NES", "1x2", "1x2" },
  1461. { "N W S", "MUDFONT NES", "1x2", "1x2" },
  1462. { " NE W S", "MUDFONT NES", "1x2", "1x2" },
  1463. { "N NE W S", "MUDFONT NES", "1x2", "1x2" },
  1464. { " SE S", "MUDFONT NES", "1x2", "1x2" },
  1465. { "N SE S", "MUDFONT NES", "1x2", "1x2" },
  1466. { " NE SE S", "MUDFONT NES", "1x2", "1x2" },
  1467. { "N NE SE S", "MUDFONT NES", "1x2", "1x2" },
  1468. { " W SE S", "MUDFONT NES", "1x2", "1x2" },
  1469. { "N W SE S", "MUDFONT NES", "1x2", "1x2" },
  1470. { " NE W SE S", "MUDFONT NES", "1x2", "1x2" },
  1471. { "N NE W SE S", "MUDFONT NES", "1x2", "1x2" },
  1472. { "NO EXITS", "MUDFONT VOID NWS", "1x2", "1x2" },
  1473. { "N", "MUDFONT VOID NWS", "1x2", "1x2" },
  1474. { " NW", "MUDFONT VOID NWS", "1x2", "1x2" },
  1475. { "N NW", "MUDFONT VOID NWS", "1x2", "1x2" },
  1476. { " W", "MUDFONT VOID NWS", "1x2", "1x2" },
  1477. { "N W", "MUDFONT VOID NWS", "1x2", "1x2" },
  1478. { " NW W", "MUDFONT VOID NWS", "1x2", "1x2" },
  1479. { "N NW W", "MUDFONT VOID NWS", "1x2", "1x2" },
  1480. { " SW", "MUDFONT VOID NWS", "1x2", "1x2" },
  1481. { "N SW", "MUDFONT VOID NWS", "1x2", "1x2" },
  1482. { " NW SW", "MUDFONT VOID NWS", "1x2", "1x2" },
  1483. { "N NW SW", "MUDFONT VOID NWS", "1x2", "1x2" },
  1484. { " W SW", "MUDFONT VOID NWS", "1x2", "1x2" },
  1485. { "N W SW", "MUDFONT VOID NWS", "1x2", "1x2" },
  1486. { " NW W SW", "MUDFONT VOID NWS", "1x2", "1x2" },
  1487. { "N NW W SW", "MUDFONT VOID NWS", "1x2", "1x2" },
  1488. { " S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1489. { "N S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1490. { " NW S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1491. { "N NW S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1492. { " W S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1493. { "N W S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1494. { " NW W S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1495. { "N NW W S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1496. { " SW S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1497. { "N SW S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1498. { " NW SW S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1499. { "N NW SW S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1500. { " W SW S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1501. { "N W SW S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1502. { " NW W SW S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1503. { "N NW W SW S", "MUDFONT VOID NWS", "1x2", "1x2" },
  1504. { "NO EXITS", "MUDFONT VOID NES", "1x2", "1x2" },
  1505. { "N", "MUDFONT VOID NES", "1x2", "1x2" },
  1506. { " NE", "MUDFONT VOID NES", "1x2", "1x2" },
  1507. { "N NE", "MUDFONT VOID NES", "1x2", "1x2" },
  1508. { " W", "MUDFONT VOID NES", "1x2", "1x2" },
  1509. { "N W", "MUDFONT VOID NES", "1x2", "1x2" },
  1510. { " NE W", "MUDFONT VOID NES", "1x2", "1x2" },
  1511. { "N NE W", "MUDFONT VOID NES", "1x2", "1x2" },
  1512. { " SE", "MUDFONT VOID NES", "1x2", "1x2" },
  1513. { "N SE", "MUDFONT VOID NES", "1x2", "1x2" },
  1514. { " NE SE", "MUDFONT VOID NES", "1x2", "1x2" },
  1515. { "N NE SE", "MUDFONT VOID NES", "1x2", "1x2" },
  1516. { " W SE", "MUDFONT VOID NES", "1x2", "1x2" },
  1517. { "N W SE", "MUDFONT VOID NES", "1x2", "1x2" },
  1518. { " NE W SE", "MUDFONT VOID NES", "1x2", "1x2" },
  1519. { "N NE W SE", "MUDFONT VOID NES", "1x2", "1x2" },
  1520. { " S", "MUDFONT VOID NES", "1x2", "1x2" },
  1521. { "N S", "MUDFONT VOID NES", "1x2", "1x2" },
  1522. { " NE S", "MUDFONT VOID NES", "1x2", "1x2" },
  1523. { "N NE S", "MUDFONT VOID NES", "1x2", "1x2" },
  1524. { " W S", "MUDFONT VOID NES", "1x2", "1x2" },
  1525. { "N W S", "MUDFONT VOID NES", "1x2", "1x2" },
  1526. { " NE W S", "MUDFONT VOID NES", "1x2", "1x2" },
  1527. { "N NE W S", "MUDFONT VOID NES", "1x2", "1x2" },
  1528. { " SE S", "MUDFONT VOID NES", "1x2", "1x2" },
  1529. { "N SE S", "MUDFONT VOID NES", "1x2", "1x2" },
  1530. { " NE SE S", "MUDFONT VOID NES", "1x2", "1x2" },
  1531. { "N NE SE S", "MUDFONT VOID NES", "1x2", "1x2" },
  1532. { " W SE S", "MUDFONT VOID NES", "1x2", "1x2" },
  1533. { "N W SE S", "MUDFONT VOID NES", "1x2", "1x2" },
  1534. { " NE W SE S", "MUDFONT VOID NES", "1x2", "1x2" },
  1535. { "N NE W SE S", "MUDFONT VOID NES", "1x2", "1x2" },
  1536. { "N E", "MUDFONT CURVED", "1x2", "1x2" },
  1537. { "S E", "MUDFONT CURVED", "1x2", "1x2" },
  1538. { "S W", "MUDFONT CURVED", "1x2", "1x2" },
  1539. { "N W", "MUDFONT CURVED", "1x2", "1x2" },
  1540. { "NO DIAGONAL", "UNICODE GRAPHICS", "2x5", "2x5" },
  1541. { "SE", "UNICODE GRAPHICS", "⸌", "2x5" },
  1542. { "NE", "UNICODE GRAPHICS", "⸝", "2x5" },
  1543. { "SE NE", "UNICODE GRAPHICS", ">", "2x5" },
  1544. { "SW", "UNICODE GRAPHICS", "⸍", "2x5" },
  1545. { "SE SW", "UNICODE GRAPHICS", "⸌⸍", "2x5" },
  1546. { "NE SW", "UNICODE GRAPHICS", "/", "2x5" },
  1547. { "SE NE SW", "UNICODE GRAPHICS", ">⸍", "2x5" },
  1548. { "NW", "UNICODE GRAPHICS", "⸜", "2x5" },
  1549. { "SE NW", "UNICODE GRAPHICS", "\", "2x5" },
  1550. { "NE NW", "UNICODE GRAPHICS", "⸝⸜", "2x5" },
  1551. { "SE NE NW", "UNICODE GRAPHICS", ">⸜", "2x5" },
  1552. { "SW NW", "UNICODE GRAPHICS", "<", "2x5" },
  1553. { "SE SW NW", "UNICODE GRAPHICS", "⸌<", "2x5" },
  1554. { "NE SW NW", "UNICODE GRAPHICS", "⸝<", "2x5" },
  1555. { "SE NE SW NW", "UNICODE GRAPHICS", "><", "2x5" },
  1556. { "D", "UNICODE GRAPHICS", "-", "2x5" },
  1557. { "N", "UNICODE GRAPHICS", "↑", "2x5" },
  1558. { "S", "UNICODE GRAPHICS", "↓", "2x5" },
  1559. { "N S", "UNICODE GRAPHICS", "│", "2x5" },
  1560. { "U", "UNICODE GRAPHICS", "+", "2x5" },
  1561. { "E", "UNICODE GRAPHICS", "🠆", "2x5" },
  1562. { "W", "UNICODE GRAPHICS", "🠄", "2x5" },
  1563. { "E W", "UNICODE GRAPHICS", "─", "2x5" },
  1564. { "ROOM L", "UNICODE GRAPHICS", "[", "2x5" },
  1565. { "ROOM L CURVED", "UNICODE GRAPHICS", "(", "2x5" },
  1566. { "ROOM R", "UNICODE GRAPHICS", "]", "2x5" },
  1567. { "ROOM R CURVED", "UNICODE GRAPHICS", ")", "2x5" },
  1568. { NULL, NULL, NULL, NULL }
  1569. };
  1570. struct map_legend_group_type map_legend_group_table[] =
  1571. {
  1572. { "ALL", "", 1, 1, 1, 2, 0, 0, "" },
  1573. { "ASCII NESW", "ASCII NESW", 1, 1, 1, 1, 0, 0, "{x} {o} {o} {+} {o} {|} {+} {+} {o} {+} {-} {+} {+} {+} {+} {+} {x} {+} {|} {-} {+} {+} {+} {+} {|} {/} {-} {\\\\} {|} {/} {-} {\\\\}" },
  1574. { "ASCII NESW LINE", "ASCII NESW LINE", 1, 1, 1, 1, 0, 0, "{x} {o} {o} {+} {o} {|} {+} {+} {o} {+} {-} {+} {+} {+} {+} {+}" },
  1575. { "ASCII NESW MISC", "ASCII NESW MISC", 1, 1, 1, 1, 0, 0, "{x} {+} {|} {-}" },
  1576. { "ASCII NESW CURVED", "ASCII NESW CURVED", 1, 1, 1, 1, 0, 0, "{+} {+} {+} {+}" },
  1577. { "ASCII NESW DIRS", "ASCII NESW DIRS", 1, 1, 1, 1, 0, 0, "{|} {/} {-} {\\\\} {|} {/} {-} {\\\\}" },
  1578. { "NESW", "NESW", 1, 1, 1, 1, 0, 0, "{\\u2B51} {\\u2579} {\\u257A} {\\u2517} {\\u257B} {\\u2503} {\\u250F} {\\u2523} {\\u2578} {\\u251B} {\\u2501} {\\u253B} {\\u2513} {\\u252B} {\\u2533} {\\u254B} {\\u2B51} {\\u2012} {\\u2507} {\\u254D} {\\u2570} {\\u256D} {\\u256E} {\\u256F} {\\u2191} {\\u2B08} {\\u2B95} {\\u2b0A} {\\u2193} {\\u2B0B} {\\u2B05} {\\u2B09}" },
  1579. { "NESW TUBE", "NESW", 1, 1, 1, 1, 0, 0, "{\\u25AB}{\\U01F791}{\\U01F791}{\\u255A}{\\U01F791}{\\u2551}{\\u2554} {\\u2560}{\\U01F791}{\\u255D} {\\u2550} {\\u2569} {\\u2557} {\\u2563} {\\u2566} {\\u256C} {\\u25CF} {} {\\u2502} {\\u2500} {\\u2570} {\\u256D} {\\u256E} {\\u256F} {\\u2191} {\\u2B08} {\\u2B95} {\\u2b0A} {\\u2193} {\\u2B0B} {\\u2B05} {\\u2B09}" },
  1580. { "NESW LINE", "NESW LINE", 1, 1, 1, 1, 0, 0, "{\\u25AA} {\\u2579} {\\u257A} {\\u2517} {\\u257B} {\\u2503} {\\u250F} {\\u2523} {\\u2578} {\\u251B} {\\u2501} {\\u253B} {\\u2513} {\\u252B} {\\u2533} {\\u254B}" },
  1581. { "NESW MISC", "NESW MISC", 1, 1, 1, 1, 0, 0, "{\\u2B51} {\\u2012} {\\u2507} {\\u254D}" },
  1582. { "NESW CURVED", "NESW CURVED", 1, 1, 1, 1, 0, 0, "{\\u2570} {\\u256D} {\\u256E} {\\u256F}" },
  1583. { "NESW DIRS", "NESW DIRS", 1, 1, 1, 1, 0, 0, "{\\u2191} {\\u2B08} {\\u2B95} {\\u2b0A} {\\u2193} {\\u2B0B} {\\u2B05} {\\u2B09}" },
  1584. // { "NESW DIRS", "NESW DIRS", 1, 1, 1, 1, 0, 0, "{\\U01F805}{\\u2B08}{\\U01F806}{\\u2b0A}{\\U01F807}{\\u2B0B}{\\U01F804}{\\u2B09}" }, poor cross-platform support.
  1585. { "MUDFONT", "MUDFONT", 1, 2, 1, 2, 0, 0, "" },
  1586. { "MUDFONT PRIVATE", "MUDFONT", 1, 2, 1, 2, 0, 0, "{\\uE000} {\\uE001} {\\uE002} {\\uE003} {\\uE004} {\\uE005} {\\uE006} {\\uE007} {\\uE008} {\\uE009} {\\uE00A} {\\uE00B} {\\uE00C} {\\uE00D} {\\uE00E} {\\uE00F} {\\uE010} {\\uE011} {\\uE012} {\\uE013} {\\uE014} {\\uE015} {\\uE016} {\\uE017} {\\uE018} {\\uE019} {\\uE01A} {\\uE01B} {\\uE01C} {\\uE01D} {\\uE01E} {\\uE01F} {\\uE020} {\\uE021} {\\uE022} {\\uE023} {\\uE024} {\\uE025} {\\uE026} {\\uE027} {\\uE028} {\\uE029} {\\uE02A} {\\uE02B} {\\uE02C} {\\uE02D} {\\uE02E} {\\uE02F} {\\uE030} {\\uE031} {\\uE032} {\\uE033} {\\uE034} {\\uE035} {\\uE036} {\\uE037} {\\uE038} {\\uE039} {\\uE03A} {\\uE03B} {\\uE03C} {\\uE03D} {\\uE03E} {\\uE03F} {\\uE040} {\\uE041} {\\uE042} {\\uE043} {\\uE044} {\\uE045} {\\uE046} {\\uE047} {\\uE048} {\\uE049} {\\uE04A} {\\uE04B} {\\uE04C} {\\uE04D} {\\uE04E} {\\uE04F} {\\uE050} {\\uE051} {\\uE052} {\\uE053} {\\uE054} {\\uE055} {\\uE056} {\\uE057} {\\uE058} {\\uE059} {\\uE05A} {\\uE05B} {\\uE05C} {\\uE05D} {\\uE05E} {\\uE05F} {\\uE060} {\\uE061} {\\uE062} {\\uE063} {\\uE064} {\\uE065} {\\uE066} {\\uE067} {\\uE068} {\\uE069} {\\uE06A} {\\uE06B} {\\uE06C} {\\uE06D} {\\uE06E} {\\uE06F} {\\uE070} {\\uE071} {\\uE072} {\\uE073} {\\uE074} {\\uE075} {\\uE076} {\\uE077} {\\uE078} {\\uE079} {\\uE07A} {\\uE07B} {\\uE07C} {\\uE07D} {\\uE07E} {\\uE07F} {\\uE080} {\\uE081} {\\uE082} {\\uE083} {\\uE084} {\\uE085} {\\uE086} {\\uE087}" },
  1587. { "MUDFONT BRAILLE TUBE", "MUDFONT", 1, 2, 1, 2, 0, 0, "{\\u28CF} {\\u28C7} {\\u28CE} {\\u28C6} {\\u28C9} {\\u28C1} {\\u28C8} {\\u28C0} {\\u288F} {\\u2887} {\\u288E} {\\u2886} {\\u2889} {\\u2881} {\\u2888} {\\u2880} {\\u284F} {\\u2847} {\\u284E} {\\u2846} {\\u2849} {\\u2841} {\\u2848} {\\u2880} {\\u280F} {\\u2807} {\\u280E} {\\u2806} {\\u2809} {\\u2801} {\\u2808} {\\u2800} {\\u28F9} {\\u28F8} {\\u28F1} {\\u28F0} {\\u28C9} {\\u28C8} {\\u28C2} {\\u28C0} {\\u2879} {\\u2878} {\\u2871} {\\u2870} {\\u2849} {\\u2848} {\\u2842} {\\u2840} {\\u28B9} {\\u28B8} {\\u28B1} {\\u28B0} {\\u2889} {\\u2888} {\\u2882} {\\u2880} {\\u2839} {\\u2838} {\\u2831} {\\u2830} {\\u2809} {\\u2808} {\\u2802} {\\u2800} {\\u2830} {\\u2838} {\\u2831} {\\u2839} {\\u2836} {\\u283E} {\\u2837} {\\u283F} {\\u2870} {\\u2878} {\\u2871} {\\u2879} {\\u2876} {\\u287E} {\\u2877} {\\u287F} {\\u28B0} {\\u28B8} {\\u28B1} {\\u28B9} {\\u28B6} {\\u28BE} {\\u28B7} {\\u28BF} {\\u28F0} {\\u28F8} {\\u28F1} {\\u28F9} {\\u28F6} {\\u28FE} {\\u28F7} {\\u28FF} {\\u2806} {\\u2807} {\\u280E} {\\u280F} {\\u2836} {\\u2837} {\\u283E} {\\u283F} {\\u2886} {\\u2887} {\\u288E} {\\u288F} {\\u28B6} {\\u28B7} {\\u28BE} {\\u28BF} {\\u2846} {\\u2847} {\\u284E} {\\u284F} {\\u2876} {\\u2877} {\\u287E} {\\u287F} {\\u28C6} {\\u28C7} {\\u28CE} {\\u28CF} {\\u28F6} {\\u28F7} {\\u28FE} {\\u28FF} {\\u2818} {\\u28A0} {\\u2844} {\\u2803} {} {} {} {}" },
  1588. { "MUDFONT BRAILLE LINE", "MUDFONT", 1, 2, 1, 2, 0, 0, "{\\u2830} {\\u2838} {\\u2831} {\\u2839} {\\u2836} {\\u283E} {\\u2837} {\\u283F} {\\u2870} {\\u2878} {\\u2871} {\\u2879} {\\u2876} {\\u287E} {\\u2877} {\\u287F} {\\u28B0} {\\u28B8} {\\u28B1} {\\u28B9} {\\u28B6} {\\u28BE} {\\u28B7} {\\u28BF} {\\u28F0} {\\u28F8} {\\u28F1} {\\u28F9} {\\u28F6} {\\u28FE} {\\u28F7} {\\u28FF} {\\u2806} {\\u2807} {\\u280E} {\\u280F} {\\u2836} {\\u2837} {\\u283E} {\\u283F} {\\u2886} {\\u2887} {\\u288E} {\\u288F} {\\u28B6} {\\u28B7} {\\u28BE} {\\u28BF} {\\u2846} {\\u2847} {\\u284E} {\\u284F} {\\u2876} {\\u2877} {\\u287E} {\\u287F} {\\u28C6} {\\u28C7} {\\u28CE} {\\u28CF} {\\u28F6} {\\u28F7} {\\u28FE} {\\u28FF} {\\u2800} {\\u2808} {\\u2801} {\\u2809} {\\u2806} {\\u280E} {\\u2807} {\\u280F} {\\u2840} {\\u2848} {\\u2841} {\\u2849} {\\u2846} {\\u284E} {\\u2847} {\\u284F} {\\u2880} {\\u2888} {\\u2881} {\\u2889} {\\u2886} {\\u288E} {\\u2887} {\\u288F} {\\u28C0} {\\u28C8} {\\u28C1} {\\u28C9} {\\u28C6} {\\u28CE} {\\u28C7} {\\u28CF} {\\u2800} {\\u2801} {\\u2808} {\\u2809} {\\u2830} {\\u2831} {\\u2838} {\\u2839} {\\u2880} {\\u2881} {\\u2888} {\\u2889} {\\u28B0} {\\u28B1} {\\u28B8} {\\u28B9} {\\u2840} {\\u2841} {\\u2848} {\\u2849} {\\u2870} {\\u2871} {\\u2878} {\\u2879} {\\u28C0} {\\u28C1} {\\u28C8} {\\u28C9} {\\u28F0} {\\u28F1} {\\u28F8} {\\u28F9} {\\u2818} {\\u28A0} {\\u2844} {\\u2803} {} {} {} {}" },
  1589. { "MUDFONT NWS", "MUDFONT NWS", 1, 2, 1, 2, 0, 0, "" },
  1590. { "MUDFONT NES", "MUDFONT NES", 1, 2, 1, 2, 0, 0, "" },
  1591. { "MUDFONT VOID NWS", "MUDFONT VOID NWS", 1, 2, 1, 2, 0, 0, "" },
  1592. { "MUDFONT VOID NES", "MUDFONT VOID NES", 1, 2, 1, 2, 0, 0, "" },
  1593. { "MUDFONT CURVED", "MUDFONT CURVED", 1, 2, 1, 2, 0, 0, "" },
  1594. { "MUDFONT CURVED BRAILLE", "MUDFONT CURVED", 1, 2, 1, 2, 0, 0, "{\\u2818} {\\u28A0} {\\u2844} {\\u2803} {} {} {} {}" },
  1595. { "UNICODE GRAPHICS", "UNICODE GRAPHICS", 2, 5, 2, 5, 0, 0, "{ } {\\u2E0C} {\\u2E1D} {>} {\\u2E0D} {\\u2E0C\\u2E0D} {\\uFF0F} {>\\u2E0D} {\\u2E1C} {\\uFF3C} {\\u2E1D\\u2E1C} {>\\u2E1C} {<} {\\u2E0C<} {\\u2E1D<} {><} {-} {\\u2191} {\\u2193} {\\u2502} {+} {\\U01F806} {\\U01F804} {\\u2500} {[} {(} {]} {)}" },
  1596. // { "UNICODE GRAPHICS", "UNICODE GRAPHICS", 2, 5, 2, 5, 0, 0, "{ } {\\u2E0C} {\\u2E1D} {>} {\\u2E0D} {\\u2E0C\\u2E0D} {\\uFF0F} {>\\u2E0D} {\\u2E1C} {\\uFF3C} {\\u2E1D\\u2E1C} {>\\u2E1C} {<} {\\u2E0C<} {\\u2E1D<} {><} {-} {\\u2191} {\\u2193} {\\u2502} {+} {\\u2192} {\\u2190} {\\u2500} {[} {(} {]} {)}" },
  1597. { NULL, NULL, 0, 0, 0, 0, 0, 0, "" }
  1598. };
  1599. struct stamp_type huge_stamp_table[] =
  1600. {
  1601. { " ", 23, " \n \n \n \n \n " },
  1602. { "!", 23, "██╗\n██║\n██║\n╚═╝\n██╗\n╚═╝" },
  1603. { "\"", 41, "██╗██╗\n2██║██║\n╚═╝╚═╝\n \n \n " },
  1604. { "#", 59, " ██╗ ██╗ \n████████╗\n╚██╔═██╔╝\n████████╗\n╚██╔═██╔╝\n ╚═╝ ╚═╝ " },
  1605. { "&", 59, " ████╗ \n ██╔═██╗ \n ╚████╔╝ \n██╔══██═╗\n╚█████╔█║\n ╚════╝╚╝" },
  1606. { "%", 47, "██╗ ██╗\n╚═╝██╔╝\n ██╔╝ \n ██╔╝ \n██╔╝██╗\n╚═╝ ╚═╝" },
  1607. { "'", 23, "╗██╗\n██║\n╚═╝\n \n \n " },
  1608. { "(", 29, " ██╗\n██╔╝\n██║ \n██║ \n╚██╗\n ╚═╝" },
  1609. { ")", 29, "██╗ \n╚██╗\n ██║\n ██║\n██╔╝\n╚═╝ " },
  1610. { "*", 47, "▄ █ ▄\n █▄█▄█ \n ▐█▌ \n █▀█▀█ \n▀ █ ▀\n " },
  1611. { "+", 59, " ██╗ \n ██║ \n████████╗\n╚══██╔══╝\n ██║ \n ╚═╝ " },
  1612. // ,
  1613. // -
  1614. // .
  1615. // /
  1616. { "0", 53, " █████╗ \n██╔══██╗\n██║ ██║\n██║ ██║\n╚█████╔╝\n ╚════╝ " },
  1617. { "1", 53, " ▄██╗ \n ████║ \n ╚═██║ \n ██║ \n ██████╗\n ╚═════╝" },
  1618. { "2", 53, "██████╗ \n╚════██╗\n █████╔╝\n██╔═══╝ \n███████╗\n╚══════╝" },
  1619. { "3", 53, "██████╗ \n╚════██╗\n █████╔╝\n ╚═══██╗\n██████╔╝\n╚═════╝ " },
  1620. { "4", 53, "██╗ ██╗\n██║ ██║\n███████║\n╚════██║\n ██║\n ╚═╝" },
  1621. { "5", 53, "███████╗\n██╔════╝\n███████╗\n╚════██║\n███████║\n╚══════╝" },
  1622. { "6", 53, " █████╗ \n██╔═══╝ \n██████╗ \n██╔══██╗\n╚█████╔╝\n ╚════╝ " },
  1623. { "7", 53, "███████╗\n╚════██║\n ██╔╝\n ██╔╝ \n ██║ \n ╚═╝ " },
  1624. { "8", 53, " █████╗ \n██╔══██╗\n╚█████╔╝\n██╔══██╗\n╚█████╔╝\n ╚════╝ " },
  1625. { "9", 53, " █████╗ \n██╔══██╗\n╚██████║\n ╚═══██║\n █████╔╝\n ╚════╝ " },
  1626. { ":", 53, " \n ██╗ \n ╚═╝ \n \n ██╗ \n ╚═╝ " },
  1627. // ;
  1628. // <
  1629. // =
  1630. // >
  1631. // ?
  1632. { "@", 59, " ██████╗ \n██╔═══██╗\n██║██╗██║\n██║██║██║\n╚█║████╔╝\n ╚╝╚═══╝ " },
  1633. { "A", 53, " █████╗ \n██╔══██╗\n███████║\n██╔══██║\n██║ ██║\n╚═╝ ╚═╝" },
  1634. { "B", 53, "██████╗ \n██╔══██╗\n██████╔╝\n██╔══██╗\n██████╔╝\n╚═════╝ " },
  1635. { "C", 53, " ██████╗\n██╔════╝\n██║ \n██║ \n╚██████╗\n ╚═════╝" },
  1636. { "D", 53, "██████╗ \n██╔══██╗\n██║ ██║\n██║ ██║\n██████╔╝\n╚═════╝ " },
  1637. { "E", 53, "███████╗\n██╔════╝\n█████╗ \n██╔══╝ \n███████╗\n╚══════╝" },
  1638. { "F", 53, "███████╗\n██╔════╝\n█████╗ \n██╔══╝ \n██║ \n╚═╝ " },
  1639. { "G", 59, " ██████╗ \n██╔════╝ \n██║ ███╗\n██║ ██║\n╚██████╔╝\n ╚═════╝ " },
  1640. { "H", 53, "██╗ ██╗\n██║ ██║\n███████║\n██╔══██║\n██║ ██║\n╚═╝ ╚═╝" },
  1641. { "I", 47, "██████╗\n╚═██╔═╝\n ██║ \n ██║ \n██████╗\n╚═════╝" },
  1642. { "J", 53, " ██╗\n ██║\n ██║\n██ ██║\n╚█████╔╝\n ╚════╝ " },
  1643. { "K", 53, "██╗ ██╗\n██║ ██╔╝\n█████╔╝ \n██╔═██╗ \n██║ ██╗\n╚═╝ ╚═╝" },
  1644. { "L", 53, "██╗ \n██║ \n██║ \n██║ \n███████╗\n╚══════╝" },
  1645. { "M", 71, "███╗ ███╗\n████╗████║\n██╔███╔██║\n██║╚█╔╝██║\n██║ ╚╝ ██║\n╚═╝ ╚═╝" },
  1646. { "N", 65, "███╗ ██╗\n████╗ ██║\n██╔██╗ ██║\n██║╚██╗██║\n██║ ╚████║\n╚═╝ ╚═══╝" },
  1647. { "O", 59, " ██████╗ \n██╔═══██╗\n██║ ██║\n██║ ██║\n╚██████╔╝\n ╚═════╝ " },
  1648. { "P", 53, "██████╗ \n██╔══██╗\n██████╔╝\n██╔═══╝ \n██║ \n╚═╝ " },
  1649. { "Q", 59, " ██████╗ \n██╔═══██╗\n██║ ██║\n██║▄▄ ██║\n╚██████╔╝\n ╚══▀▀═╝ " },
  1650. { "R", 53, "██████╗ \n██╔══██╗\n██████╔╝\n██╔══██╗\n██║ ██║\n╚═╝ ╚═╝" },
  1651. { "S", 53, "███████╗\n██╔════╝\n███████╗\n╚════██║\n███████║\n╚══════╝" },
  1652. { "T", 59, "████████╗\n╚══██╔══╝\n ██║ \n ██║ \n ██║ \n ╚═╝ " },
  1653. { "U", 59, "██╗ ██╗\n██║ ██║\n██║ ██║\n██║ ██║\n╚██████╔╝\n ╚═════╝ " },
  1654. { "V", 59, "██╗ ██╗\n██║ ██║\n██║ ██║\n╚██╗ ██╔╝\n ╚████╔╝ \n ╚═══╝ " },
  1655. { "W", 65, "██╗ ██╗\n██║ ██║\n██║ █╗ ██║\n██║███╗██║\n╚███╔███╔╝\n ╚══╝╚══╝ " },
  1656. { "X", 53, "██╗ ██╗\n╚██╗██╔╝\n ╚███╔╝ \n ██╔██╗ \n██╔╝ ██╗\n╚═╝ ╚═╝" },
  1657. { "Y", 59, "██╗ ██╗\n╚██╗ ██╔╝\n ╚████╔╝ \n ╚██╔╝ \n ██║ \n ╚═╝ " },
  1658. { "Z", 53, "███████╗\n╚══███╔╝\n ███╔╝ \n ███╔╝ \n███████╗\n╚══════╝" },
  1659. // [
  1660. // ]
  1661. { "^", 41, " ███╗ \n██╔██╗\n╚═╝╚═╝\n \n \n" },
  1662. { "_", 53, " \n \n \n \n███████╗\n╚══════╝" },
  1663. // `
  1664. { "i", 23, "██╗\n╚═╝\n██╗\n██║\n██║\n╚═╝" },
  1665. { "n", 47, " \n \n██▟███╗\n██║ ██║\n██║ ██║\n╚═╝ ╚═╝" },
  1666. // {
  1667. // }
  1668. // ~
  1669. // DEL
  1670. { NULL, 0, NULL }
  1671. };