tintin.h 98 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084
  1. /******************************************************************************
  2. * This file is part of TinTin++ *
  3. * *
  4. * Copyright 2004-2020 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. * *
  22. * (T)he K(I)cki(N) (T)ickin D(I)kumud Clie(N)t *
  23. * *
  24. * coded by peter unold 1992 *
  25. * modified by Bill Reiss 1993 *
  26. * recoded by Igor van den Hoven 2004 *
  27. ******************************************************************************/
  28. #include <stdio.h>
  29. #include <zlib.h>
  30. #include <ctype.h>
  31. #include <termios.h>
  32. #include <pcre.h>
  33. #include <errno.h>
  34. #include <math.h>
  35. #include <stdarg.h>
  36. /******************************************************************************
  37. * Autoconf patching by David Hedbor *
  38. *******************************************************************************/
  39. #include "config.h"
  40. #if defined(HAVE_STRING_H)
  41. #include <string.h>
  42. #elif defined(HAVE_STRINGS_H)
  43. #include <strings.h>
  44. #endif
  45. #ifdef HAVE_STDLIB_H
  46. #include <stdlib.h>
  47. #endif
  48. #ifdef HAVE_UNISTD_H
  49. #include <unistd.h>
  50. #endif
  51. #ifdef HAVE_TIME_H
  52. #include <time.h>
  53. #endif
  54. #ifdef TIME_WITH_SYS_TIME
  55. #include <sys/time.h>
  56. #endif
  57. /*
  58. #ifdef SOCKS
  59. #include <socks.h>
  60. #endif
  61. */
  62. #ifndef BADSIG
  63. #define BADSIG (RETSIGTYPE (*)(int))-1
  64. #endif
  65. #ifdef HAVE_NET_ERRNO_H
  66. #include <net/errno.h>
  67. #endif
  68. #ifdef HAVE_GNUTLS_H
  69. #include <gnutls/gnutls.h>
  70. #include <gnutls/x509.h>
  71. #else
  72. #define gnutls_session_t int
  73. #endif
  74. #ifdef HAVE_SYS_SOCKET_H
  75. #include <sys/socket.h>
  76. #endif
  77. #ifdef HAVE_SYS_TYPES_H
  78. #include <sys/types.h>
  79. #endif
  80. #ifdef HAVE_SYS_STAT_H
  81. #include <sys/stat.h>
  82. #endif
  83. #if !defined(SO_PEERCRED)
  84. #define SO_PEERCRED 17
  85. #endif
  86. #ifndef __TINTIN_H__
  87. #define __TINTIN_H__
  88. /*
  89. A bunch of constants
  90. */
  91. #define FLAG_NONE 0
  92. #define FALSE 0
  93. #define TRUE 1
  94. #define IS_LINE 0
  95. #define IS_PROMPT 1
  96. #define GET_ONE 0 // stop at spaces
  97. #define GET_ALL 1 // stop at semicolon
  98. #define GET_NST 2 // nest square brackets
  99. #define GET_VBT 4 // ignore semicolon for verbatim mode
  100. #define TEL_N 0
  101. #define TEL_Y 1
  102. #define TEL_I 2
  103. #define SCREEN_WIDTH 80
  104. #define SCREEN_HEIGHT 24
  105. #define SORT_PRIORITY 0
  106. #define SORT_ALPHA 1
  107. #define SORT_ALNUM 2
  108. #define SORT_STABLE 3
  109. #define SORT_APPEND 4
  110. #define SEEK_MATCH 0
  111. #define SEEK_REPLACE 1
  112. #define SEEK_APPEND 2
  113. #define DEFAULT_OPEN '{'
  114. #define DEFAULT_CLOSE '}'
  115. #define COMMAND_SEPARATOR ';'
  116. #define ASCII_NUL 0
  117. #define ASCII_ENQ 5 // Ignore if possible
  118. #define ASCII_HTML_AMP 6 // Might conflict with MSDP
  119. #define ASCII_BEL 7
  120. #define ASCII_BS 8
  121. #define ASCII_HTAB 9
  122. #define ASCII_LF 10
  123. #define ASCII_VTAB 11
  124. #define ASCII_FF 12
  125. #define ASCII_CR 13
  126. #define ASCII_ESC 27
  127. #define ASCII_HTML_OPEN 28 // Also file separator, whatever that is
  128. #define ASCII_HTML_CLOSE 30 // Also record separator, whatever that is
  129. #define CTRL_A 1
  130. #define CTRL_B 2
  131. #define CTRL_C 3
  132. #define CTRL_D 4
  133. #define CTRL_E 5
  134. #define CTRL_F 6
  135. #define CTRL_G 7
  136. #define CTRL_H 8
  137. #define CTRL_I 9
  138. #define CTRL_J 10
  139. #define CTRL_K 11
  140. #define CTRL_L 12
  141. #define CTRL_M 13
  142. #define CTRL_N 14
  143. #define CTRL_O 15
  144. #define CTRL_P 16
  145. #define CTRL_Q 17
  146. #define CTRL_R 18
  147. #define CTRL_S 19
  148. #define CTRL_T 20
  149. #define CTRL_U 21
  150. #define CTRL_V 22
  151. #define CTRL_W 23
  152. #define CTRL_X 24
  153. #define CTRL_Y 25
  154. #define CTRL_Z 26
  155. #define ASCII_DEL 127
  156. #define DAEMON_DIR "daemons"
  157. #define TINTIN_DIR ".tintin"
  158. #define HISTORY_FILE "history.txt"
  159. #define BUFFER_SIZE 40000
  160. #define INPUT_SIZE 10000
  161. #define PATH_SIZE 4096
  162. #define STACK_SIZE 1000
  163. #define NAME_SIZE 256
  164. #define NUMBER_SIZE 100
  165. #define LEGEND_SIZE 50
  166. #define COLOR_SIZE 50
  167. #define CHAR_SIZE 5
  168. #define LIST_SIZE 2
  169. #define STRING_SIZE 2 * BUFFER_SIZE
  170. #define CLIENT_NAME "TinTin++"
  171. #define CLIENT_VERSION "2.02.12 "
  172. #define XT_E 0x27
  173. #define XT_C 0x5B
  174. #define XT_O 0x5D
  175. #define XT_W 0x74
  176. #define XT_T 0x07
  177. #define XT_CS 0x73
  178. #define XT_S "\073"
  179. #define XT_V "\000"
  180. /*
  181. <faa> - red
  182. <afa> - green
  183. <ffa> - yellow
  184. <aaf> - blue
  185. <faf> - magenta
  186. <aff> - cyan
  187. <fff> - white
  188. <acf> - Azure
  189. <afc> - Jade
  190. <caf> - Violet
  191. <cfa> - Lime
  192. <fac> - Pink
  193. <fca> - Orange
  194. */
  195. #define COLOR_BRACE "\e[38;5;164m" // "<eae>" // magenta
  196. #define COLOR_COMMAND "\e[38;5;044m" // "<aee>" // cyan
  197. #define COLOR_CONFIG "\e[38;5;208m" // "<fca>" // orange
  198. #define COLOR_RESET "\e[0m" // "<088>" // reset
  199. #define COLOR_SEPARATOR "\e[38;5;160m" // "<eaa>" // red
  200. #define COLOR_STATEMENT "\e[38;5;040m" // "<aea>" // green
  201. #define COLOR_STRING "\e[38;5;188m" // "<eee>" // white
  202. //#define COLOR_TEXT "\e[38;5;122m" // "<cfe>" // pale jade
  203. #define COLOR_TEXT "\e[0m" // "<cfe>" // pale jade
  204. #define COLOR_TINTIN "\e[38;5;184m" // "<eea>" // yellow
  205. #define COLOR_REPEAT "\e[38;5;33m" // "<acf>" // azure
  206. /*
  207. Index for lists used by tintin
  208. */
  209. enum lists
  210. {
  211. LIST_ACTION,
  212. LIST_ALIAS,
  213. LIST_BUTTON,
  214. LIST_CLASS,
  215. LIST_COMMAND,
  216. LIST_CONFIG,
  217. LIST_DELAY,
  218. LIST_EVENT,
  219. LIST_FUNCTION,
  220. LIST_GAG,
  221. LIST_HIGHLIGHT,
  222. LIST_HISTORY,
  223. LIST_LANDMARK,
  224. LIST_MACRO,
  225. LIST_PATH,
  226. LIST_PATHDIR,
  227. LIST_PROMPT,
  228. LIST_SUBSTITUTE,
  229. LIST_TAB,
  230. LIST_TERRAIN,
  231. LIST_TICKER,
  232. LIST_VARIABLE,
  233. LIST_MAX,
  234. };
  235. /*
  236. #define LIST_ACTION 0
  237. #define LIST_ALIAS 1
  238. #define LIST_BUTTON 2
  239. #define LIST_CLASS 3
  240. #define LIST_COMMAND 4
  241. #define LIST_CONFIG 5
  242. #define LIST_DELAY 6
  243. #define LIST_EVENT 7
  244. #define LIST_FUNCTION 8
  245. #define LIST_GAG 9
  246. #define LIST_HIGHLIGHT 10
  247. #define LIST_HISTORY 11
  248. #define LIST_LANDMARK 12
  249. #define LIST_MACRO 13
  250. #define LIST_PATH 14
  251. #define LIST_PATHDIR 15
  252. #define LIST_PROMPT 16
  253. #define LIST_SUBSTITUTE 17
  254. #define LIST_TAB 18
  255. #define LIST_TERRAIN 19
  256. #define LIST_TICKER 20
  257. #define LIST_VARIABLE 21
  258. #define LIST_MAX 22
  259. */
  260. /*
  261. Command type
  262. */
  263. enum operators
  264. {
  265. TOKEN_TYPE_BREAK,
  266. TOKEN_TYPE_CASE,
  267. TOKEN_TYPE_COMMAND,
  268. TOKEN_TYPE_CONTINUE,
  269. TOKEN_TYPE_DEFAULT,
  270. TOKEN_TYPE_END,
  271. TOKEN_TYPE_ELSE,
  272. TOKEN_TYPE_ELSEIF,
  273. TOKEN_TYPE_FOREACH,
  274. TOKEN_TYPE_BROKEN_FOREACH,
  275. TOKEN_TYPE_IF,
  276. TOKEN_TYPE_LOOP,
  277. TOKEN_TYPE_BROKEN_LOOP,
  278. TOKEN_TYPE_PARSE,
  279. TOKEN_TYPE_BROKEN_PARSE,
  280. TOKEN_TYPE_REGEX,
  281. TOKEN_TYPE_RETURN,
  282. TOKEN_TYPE_SESSION,
  283. TOKEN_TYPE_STRING,
  284. TOKEN_TYPE_SWITCH,
  285. TOKEN_TYPE_WHILE,
  286. TOKEN_TYPE_BROKEN_WHILE,
  287. TOKEN_TYPE_STATEMENT,
  288. TOKEN_TYPE_CONFIG,
  289. TOKEN_TYPE_REPEAT
  290. };
  291. /*
  292. Various flags
  293. */
  294. #define BV00 (0 << 0)
  295. #define BV01 (1 << 0)
  296. #define BV02 (1 << 1)
  297. #define BV03 (1 << 2)
  298. #define BV04 (1 << 3)
  299. #define BV05 (1 << 4)
  300. #define BV06 (1 << 5)
  301. #define BV07 (1 << 6)
  302. #define BV08 (1 << 7)
  303. #define BV09 (1 << 8)
  304. #define BV10 (1 << 9)
  305. #define BV11 (1 << 10)
  306. #define BV12 (1 << 11)
  307. #define BV13 (1 << 12)
  308. #define BV14 (1 << 13)
  309. #define BV15 (1 << 14)
  310. #define BV16 (1 << 15)
  311. #define BV17 (1 << 16)
  312. #define BV18 (1 << 17)
  313. #define BV19 (1 << 18)
  314. #define BV20 (1 << 19)
  315. #define BV21 (1 << 20)
  316. #define BV22 (1 << 21)
  317. #define BV23 (1 << 22)
  318. #define BV24 (1 << 23)
  319. #define BV25 (1 << 24)
  320. #define BV26 (1 << 25)
  321. #define BV27 (1 << 26)
  322. #define BV28 (1 << 27)
  323. #define BV29 (1 << 28)
  324. #define BV30 (1 << 29)
  325. #define BV31 (1 << 30)
  326. #define BV32 (1LL << 31)
  327. #define BV33 (1LL << 32)
  328. #define BV34 (1LL << 33)
  329. #define BV35 (1LL << 34)
  330. #define BV36 (1LL << 35)
  331. #define BV37 (1LL << 36)
  332. #define BV38 (1LL << 37)
  333. #define BV39 (1LL << 38)
  334. #define BV40 (1LL << 39)
  335. #define BV41 (1LL << 40)
  336. #define BUFFER_FLAG_GREP BV01
  337. #define CHAR_FLAG_DIGIT BV01
  338. #define CHAR_FLAG_ALPHA BV02
  339. #define CHAR_FLAG_VAR BV03
  340. #define CHAR_FLAG_SPACE BV04
  341. #define CHAR_FLAG_HEX BV05
  342. #define CHAR_FLAG_CSI BV06
  343. #define CHAR_FLAG_PRINT BV07 // max
  344. #define CHARSET_FLAG_UTF8 BV01
  345. #define CHARSET_FLAG_BIG5 BV02
  346. #define CHARSET_FLAG_GBK1 BV03
  347. #define CHARSET_FLAG_CP949 BV04
  348. #define CHARSET_FLAG_BIG5TOUTF8 BV05
  349. #define CHARSET_FLAG_FANSITOUTF8 BV06
  350. #define CHARSET_FLAG_GBK1TOUTF8 BV07
  351. #define CHARSET_FLAG_ISO1TOUTF8 BV08
  352. #define CHARSET_FLAG_ISO2TOUTF8 BV09
  353. #define CHARSET_FLAG_KOI8TOUTF8 BV10
  354. #define CHARSET_FLAG_CP1251TOUTF8 BV11
  355. #define CHARSET_FLAG_CP949TOUTF8 BV12
  356. #define CHARSET_FLAG_EUC CHARSET_FLAG_BIG5|CHARSET_FLAG_GBK1|CHARSET_FLAG_CP949
  357. #define CHARSET_FLAG_ALL_TOUTF8 CHARSET_FLAG_BIG5TOUTF8|CHARSET_FLAG_CP1251TOUTF8|CHARSET_FLAG_FANSITOUTF8|CHARSET_FLAG_GBK1TOUTF8|CHARSET_FLAG_ISO1TOUTF8|CHARSET_FLAG_ISO2TOUTF8|CHARSET_FLAG_KOI8TOUTF8|CHARSET_FLAG_CP949TOUTF8
  358. #define CHARSET_FLAG_ALL CHARSET_FLAG_UTF8|CHARSET_FLAG_ALL_TOUTF8|CHARSET_FLAG_EUC
  359. #define COL_BLD BV01
  360. #define COL_ITA BV02
  361. #define COL_UND BV03
  362. #define COL_BLK BV04
  363. #define COL_REV BV05
  364. #define COL_XTF BV06
  365. #define COL_XTF_5 BV07
  366. #define COL_XTF_R BV08
  367. #define COL_XTB BV09
  368. #define COL_XTB_5 BV10
  369. #define COL_XTB_R BV11
  370. #define COL_TCF BV12
  371. #define COL_TCF_2 BV13
  372. #define COL_TCF_R BV14
  373. #define COL_TCB BV15
  374. #define COL_TCB_2 BV16
  375. #define COL_TCB_R BV17
  376. #define CHAT_NAME_CHANGE 1
  377. #define CHAT_REQUEST_CONNECTIONS 2
  378. #define CHAT_CONNECTION_LIST 3
  379. #define CHAT_TEXT_EVERYBODY 4
  380. #define CHAT_TEXT_PERSONAL 5
  381. #define CHAT_TEXT_GROUP 6
  382. #define CHAT_MESSAGE 7
  383. #define CHAT_DO_NOT_DISTURB 8
  384. #define CHAT_SEND_ACTION 9
  385. #define CHAT_SEND_ALIAS 10
  386. #define CHAT_SEND_MACRO 11
  387. #define CHAT_SEND_VARIABLE 12
  388. #define CHAT_SEND_EVENT 13
  389. #define CHAT_SEND_GAG 14
  390. #define CHAT_SEND_HIGHLIGHT 15
  391. #define CHAT_SEND_LIST 16
  392. #define CHAT_SEND_ARRAY 17
  393. #define CHAT_SEND_BARITEM 18
  394. #define CHAT_VERSION 19
  395. #define CHAT_FILE_START 20
  396. #define CHAT_FILE_DENY 21
  397. #define CHAT_FILE_BLOCK_REQUEST 22
  398. #define CHAT_FILE_BLOCK 23
  399. #define CHAT_FILE_END 24
  400. #define CHAT_FILE_CANCEL 25
  401. #define CHAT_PING_REQUEST 26
  402. #define CHAT_PING_RESPONSE 27
  403. #define CHAT_PEEK_CONNECTIONS 28
  404. #define CHAT_PEEK_LIST 29
  405. #define CHAT_SNOOP_START 30
  406. #define CHAT_SNOOP_DATA 31
  407. #define CHAT_END_OF_COMMAND 255
  408. #define CHAT_FLAG_PRIVATE BV01
  409. #define CHAT_FLAG_REQUEST BV02
  410. #define CHAT_FLAG_SERVE BV03
  411. #define CHAT_FLAG_IGNORE BV04
  412. #define CHAT_FLAG_FORWARD BV05
  413. #define CHAT_FLAG_FORWARDBY BV06
  414. #define CHAT_FLAG_FORWARDALL BV07
  415. #define CHAT_FLAG_DND BV08
  416. #define CHAT_FLAG_LINKLOST BV09
  417. #define INPUT_FLAG_EDIT BV01
  418. #define INPUT_FLAG_HISTORYBROWSE BV02
  419. #define INPUT_FLAG_HISTORYSEARCH BV03
  420. #define INPUT_FLAG_CONVERTMETACHAR BV04
  421. #define PORT_FLAG_PRIVATE BV01
  422. #define PORT_FLAG_REQUEST BV02
  423. #define PORT_FLAG_SERVE BV03
  424. #define PORT_FLAG_IGNORE BV04
  425. #define PORT_FLAG_FORWARD BV05
  426. #define PORT_FLAG_FORWARDBY BV06
  427. #define PORT_FLAG_FORWARDALL BV07
  428. #define PORT_FLAG_DND BV08
  429. #define PORT_FLAG_LINKLOST BV09
  430. #define PORT_RANK_SPY 0 // observer
  431. #define PORT_RANK_DIPLOMAT 1 //
  432. #define PORT_RANK_SCOUT 2
  433. #define RANK_FLAG_SCOUT BV01
  434. #define COMM_FLAG_DISCONNECT BV01
  435. #define COMM_FLAG_PASSWORD BV02
  436. #define COMM_FLAG_REMOTEECHO BV03
  437. #define COMM_FLAG_EOR BV04
  438. #define COMM_FLAG_MSDPUPDATE BV05
  439. #define COMM_FLAG_256COLORS BV06
  440. #define COMM_FLAG_UTF8 BV07
  441. #define COMM_FLAG_GMCP BV08
  442. #define MSDP_FLAG_COMMAND BV01
  443. #define MSDP_FLAG_LIST BV02
  444. #define MSDP_FLAG_SENDABLE BV03
  445. #define MSDP_FLAG_REPORTABLE BV04
  446. #define MSDP_FLAG_CONFIGURABLE BV05
  447. #define MSDP_FLAG_REPORTED BV06
  448. #define MSDP_FLAG_UPDATED BV07
  449. #define MTTS_FLAG_ANSI BV01
  450. #define MTTS_FLAG_VT100 BV02
  451. #define MTTS_FLAG_UTF8 BV03
  452. #define MTTS_FLAG_256COLORS BV04
  453. #define MTTS_FLAG_MOUSETRACKING BV05
  454. #define MTTS_FLAG_COLORPALETTE BV06
  455. #define MTTS_FLAG_SCREENREADER BV07
  456. #define MTTS_FLAG_PROXY BV08
  457. #define MTTS_FLAG_TRUECOLOR BV09
  458. #define SCREEN_FLAG_CSIP BV01
  459. #define SCREEN_FLAG_OSCT BV02
  460. #define SCREEN_FLAG_OMIT BV03
  461. #define SCREEN_FLAG_GET_ONE BV04
  462. #define SCREEN_FLAG_GET_ALL BV05
  463. #define SCREEN_FLAG_GET_NONE BV06
  464. #define SCREEN_FLAG_SCROLLMODE BV07
  465. #define SCREEN_FLAG_SCROLLUPDATE BV08
  466. #define SCROLL_FLAG_RESIZE BV01
  467. #define STR_FLAG_STACK BV01
  468. #define STR_FLAG_LIST BV02
  469. #define STR_FLAG_FREE BV03
  470. // combines with event flags
  471. #define SUB_NONE BV00
  472. #define SUB_ARG BV01
  473. #define SUB_SEC BV02
  474. #define SUB_BRA BV03
  475. #define SUB_CMD BV04
  476. #define SUB_VAR BV05
  477. #define SUB_FUN BV06
  478. #define SUB_COL BV07
  479. #define SUB_ESC BV08
  480. #define SUB_EOL BV09 // telnet
  481. #define SUB_LNF BV10
  482. #define SUB_SIL BV11 // silent
  483. #define SUB_LIT BV12 // no soft escaping
  484. /*
  485. #define SUB_ARG BV01
  486. #define SUB_SEC BV02
  487. #define SUB_BRA BV03
  488. */
  489. #define EVENT_FLAG_CATCH BV04
  490. #define EVENT_FLAG_CLASS BV05
  491. #define EVENT_FLAG_GAG BV06
  492. #define EVENT_FLAG_INPUT BV07
  493. #define EVENT_FLAG_MAP BV08
  494. #define EVENT_FLAG_MOUSE BV09
  495. #define EVENT_FLAG_OUTPUT BV10
  496. #define EVENT_FLAG_PORT BV11
  497. #define EVENT_FLAG_SCAN BV12
  498. #define EVENT_FLAG_SCREEN BV13
  499. #define EVENT_FLAG_SESSION BV14
  500. #define EVENT_FLAG_SYSTEM BV15
  501. #define EVENT_FLAG_TELNET BV16
  502. #define EVENT_FLAG_TIME BV17
  503. #define EVENT_FLAG_UPDATE BV18
  504. #define EVENT_FLAG_VARIABLE BV19
  505. #define EVENT_FLAG_VT100 BV20
  506. #define TAB_FLAG_FORWARD BV01
  507. #define TAB_FLAG_BACKWARD BV02
  508. #define TAB_FLAG_COMPLETE BV03
  509. #define TAB_FLAG_CASELESS BV04
  510. #define TAB_FLAG_DICTIONARY BV05
  511. #define TAB_FLAG_LIST BV06
  512. #define TAB_FLAG_SCROLLBACK BV07
  513. #define REGEX_FLAG_NONE 0
  514. #define REGEX_FLAG_FIX BV01
  515. #define REGEX_FLAG_ARG BV02
  516. #define REGEX_FLAG_CMD BV03
  517. #define TINTIN_FLAG_GETNUMBER BV01 // UNUSED
  518. #define TINTIN_FLAG_SESSIONUPDATE BV02
  519. #define TINTIN_FLAG_PROCESSINPUT BV03
  520. #define TINTIN_FLAG_INHERITANCE BV04
  521. #define TINTIN_FLAG_INSERTINPUT BV05
  522. #define TINTIN_FLAG_CHILDLOCK BV06
  523. #define TINTIN_FLAG_TERMINATE BV07
  524. #define TINTIN_FLAG_MOUSETRACKING BV08
  525. #define TINTIN_FLAG_DISPLAYUPDATE BV09
  526. #define TINTIN_FLAG_DAEMONIZE BV10
  527. #define TINTIN_FLAG_HIDDENCURSOR BV11
  528. #define TINTIN_FLAG_LOCAL BV12
  529. #define TINTIN_FLAG_PRESERVEMACRO BV13
  530. #define TINTIN_FLAG_WINCHUPDATE BV14
  531. #define CONFIG_FLAG_AUTOPATCH BV01
  532. #define CONFIG_FLAG_AUTOPROMPT BV02
  533. #define CONFIG_FLAG_COLORPATCH BV03
  534. #define CONFIG_FLAG_CONVERTMETA BV04
  535. #define CONFIG_FLAG_ECHOCOMMAND BV05
  536. #define CONFIG_FLAG_MCCP BV06
  537. #define CONFIG_FLAG_MOUSEDEBUG BV07
  538. #define CONFIG_FLAG_MOUSEINFO BV08
  539. #define CONFIG_FLAG_MOUSEPIXELS BV09
  540. #define CONFIG_FLAG_MOUSETRACKING BV10
  541. #define CONFIG_FLAG_REPEATENTER BV11
  542. #define CONFIG_FLAG_SCREENREADER BV12
  543. #define CONFIG_FLAG_SCROLLLOCK BV13
  544. #define CONFIG_FLAG_SPEEDWALK BV14
  545. #define CONFIG_FLAG_TELNET BV15
  546. #define CONFIG_FLAG_VERBATIM BV16
  547. #define CONFIG_FLAG_VERBOSE BV17
  548. #define CONFIG_FLAG_WORDWRAP BV18
  549. #define SES_FLAG_BUFFERUPDATE BV01
  550. #define SES_FLAG_CLOSED BV02
  551. #define SES_FLAG_CONNECTED BV03
  552. #define SES_FLAG_GAG BV04
  553. #define SES_FLAG_PATHMAPPING BV05
  554. #define SES_FLAG_PRINTBUFFER BV06
  555. #define SES_FLAG_PRINTLINE BV07
  556. #define SES_FLAG_READMUD BV08
  557. #define SES_FLAG_RUN BV09
  558. #define SES_FLAG_SCANABORT BV10
  559. #define SES_FLAG_SCROLLSPLIT BV11
  560. #define SES_FLAG_SNOOP BV12
  561. #define SES_FLAG_SNOOPSCROLL BV13
  562. #define SES_FLAG_SPLIT BV14
  563. #define SES_FLAG_UPDATEVTMAP BV15
  564. #define TELOPT_FLAG_TELNET BV01
  565. #define TELOPT_FLAG_SGA BV02
  566. #define TELOPT_FLAG_ECHO BV03
  567. #define TELOPT_FLAG_NAWS BV04
  568. #define TELOPT_FLAG_PROMPT BV05
  569. #define TELOPT_FLAG_DEBUG BV06
  570. #define TELOPT_FLAG_TSPEED BV07
  571. #define TELOPT_FLAG_TTYPE BV08
  572. #define TELOPT_FLAG_MTTS BV09
  573. #define TELOPT_FLAG_UPDATENAWS BV10
  574. #define TELOPT_FLAG_CR BV11
  575. #define TELOPT_FLAG_LF BV12
  576. #define TELOPT_FLAG_NUL BV13
  577. #define LIST_FLAG_IGNORE BV01
  578. #define LIST_FLAG_PRIORITY BV02
  579. #define LIST_FLAG_MESSAGE BV03
  580. #define LIST_FLAG_DEBUG BV04
  581. #define LIST_FLAG_INFO BV05
  582. #define LIST_FLAG_LOG BV06
  583. #define LIST_FLAG_CLASS BV07
  584. #define LIST_FLAG_READ BV08
  585. #define LIST_FLAG_WRITE BV09
  586. #define LIST_FLAG_HIDE BV10
  587. #define LIST_FLAG_INHERIT BV11
  588. #define LIST_FLAG_REGEX BV12
  589. #define LIST_FLAG_NEST BV13
  590. #define LIST_FLAG_DEFAULT LIST_FLAG_MESSAGE
  591. #define NODE_FLAG_ONESHOT BV01
  592. #define LOG_FLAG_NONE 0
  593. #define LOG_FLAG_LINEFEED BV01
  594. #define LOG_FLAG_OVERWRITE BV02
  595. #define LOG_FLAG_APPEND BV03
  596. #define LOG_FLAG_NEXT BV04
  597. #define LOG_FLAG_LOW BV05
  598. #define LOG_FLAG_HTML BV06
  599. #define LOG_FLAG_PLAIN BV07
  600. #define LOG_FLAG_RAW BV08
  601. #define LOG_FLAG_OLD_HTML BV09
  602. #define LOG_FLAG_OLD_PLAIN BV10
  603. #define LOG_FLAG_OLD_RAW BV11
  604. // Saved in map files, so don't swap around
  605. // keep synced with exit flags
  606. #define ROOM_FLAG_AVOID BV01
  607. #define ROOM_FLAG_HIDE BV02
  608. #define ROOM_FLAG_LEAVE BV03
  609. #define ROOM_FLAG_VOID BV04
  610. #define ROOM_FLAG_STATIC BV05
  611. #define ROOM_FLAG_CURVED BV06
  612. #define ROOM_FLAG_PATH BV07
  613. #define ROOM_FLAG_NOGLOBAL BV08
  614. #define ROOM_FLAG_INVIS BV09
  615. #define ROOM_FLAG_AVOID_TMP BV10|ROOM_FLAG_AVOID // To realign exit and room flags in the future.
  616. #define ROOM_FLAG_HIDE_TMP BV11|ROOM_FLAG_HIDE
  617. #define ROOM_FLAG_LEAVE_TMP BV12|ROOM_FLAG_LEAVE
  618. #define ROOM_FLAG_VOID_TMP BV13|ROOM_FLAG_VOID
  619. #define ROOM_FLAG_STATIC_TMP BV13|ROOM_FLAG_STATIC
  620. #define ROOM_FLAG_CURVED_TMP BV14|ROOM_FLAG_CURVED
  621. #define ROOM_FLAG_BLOCK BV15
  622. #define ROOM_FLAG_TERRAIN BV20
  623. #define ROOM_FLAG_FOG BV21
  624. // keep synced with room flags
  625. #define EXIT_FLAG_HIDE BV01
  626. #define EXIT_FLAG_AVOID BV02
  627. #define EXIT_FLAG_INVIS BV03
  628. #define EXIT_FLAG_BLOCK BV04
  629. #define EXIT_FLAG_ALL BV01|BV02|BV03|BV04
  630. #define EXIT_GRID_0 0
  631. #define EXIT_GRID_N 1
  632. #define EXIT_GRID_E 2
  633. #define EXIT_GRID_S 3
  634. #define EXIT_GRID_W 4
  635. #define EXIT_GRID_U 5
  636. #define EXIT_GRID_D 6
  637. #define EXIT_GRID_NE 7
  638. #define EXIT_GRID_NW 8
  639. #define EXIT_GRID_SE 9
  640. #define EXIT_GRID_SW 10
  641. #define MAP_FLAG_STATIC BV01
  642. #define MAP_FLAG_VTMAP BV02
  643. #define MAP_FLAG_DIRECTION BV03
  644. #define MAP_FLAG_ASCIIGRAPHICS BV04
  645. #define MAP_FLAG_ASCIIVNUMS BV05
  646. #define MAP_FLAG_MUDFONT BV06
  647. #define MAP_FLAG_NOFOLLOW BV07
  648. #define MAP_FLAG_SYMBOLGRAPHICS BV08
  649. #define MAP_FLAG_UNICODEGRAPHICS BV09
  650. #define MAP_FLAG_BLOCKGRAPHICS BV10
  651. #define MAP_FLAG_RESIZE BV11
  652. #define MAP_FLAG_SYNC BV12
  653. #define MAP_FLAG_ASCIILENGTH BV13 // For debugging but might be useful
  654. #define MAP_FLAG_TERRAIN BV14
  655. #define MAP_FLAG_UPDATETERRAIN BV15
  656. #define MAP_FLAG_DOUBLED BV16
  657. #define MAP_FLAG_QUIET BV17
  658. #define MAP_FLAG_READ BV18
  659. #define MAP_SEARCH_NAME 0
  660. #define MAP_SEARCH_EXITS 1
  661. #define MAP_SEARCH_DESC 2
  662. #define MAP_SEARCH_AREA 3
  663. #define MAP_SEARCH_NOTE 4
  664. #define MAP_SEARCH_TERRAIN 5
  665. #define MAP_SEARCH_FLAG 6
  666. #define MAP_SEARCH_ID 7
  667. #define MAP_SEARCH_DISTANCE 8
  668. #define MAP_SEARCH_MAX 9
  669. #define MAP_EXIT_N 1
  670. #define MAP_EXIT_E 2
  671. #define MAP_EXIT_S 4
  672. #define MAP_EXIT_W 8
  673. #define MAP_EXIT_U 16
  674. #define MAP_EXIT_D 32
  675. #define MAP_DIR_N (1LL << MAP_EXIT_N)
  676. #define MAP_DIR_E (1LL << MAP_EXIT_E)
  677. #define MAP_DIR_S (1LL << MAP_EXIT_S)
  678. #define MAP_DIR_W (1LL << MAP_EXIT_W)
  679. #define MAP_DIR_U (1LL << MAP_EXIT_U)
  680. #define MAP_DIR_D (1LL << MAP_EXIT_D)
  681. #define MAP_DIR_NE (1LL << (MAP_EXIT_N|MAP_EXIT_E))
  682. #define MAP_DIR_NW (1LL << (MAP_EXIT_N|MAP_EXIT_W))
  683. #define MAP_DIR_SE (1LL << (MAP_EXIT_S|MAP_EXIT_E))
  684. #define MAP_DIR_SW (1LL << (MAP_EXIT_S|MAP_EXIT_W))
  685. #define MAP_UNDO_MOVE (1 << 0)
  686. #define MAP_UNDO_CREATE (1 << 1)
  687. #define MAP_UNDO_LINK (1 << 2)
  688. #define MAP_UNDO_INSERT (1 << 3)
  689. #define TERRAIN_FLAG_DENSE BV01
  690. #define TERRAIN_FLAG_AMPLE BV02
  691. #define TERRAIN_FLAG_SPARSE BV03
  692. #define TERRAIN_FLAG_SCANT BV04
  693. #define TERRAIN_FLAG_NARROW BV05
  694. #define TERRAIN_FLAG_STANDARD BV06
  695. #define TERRAIN_FLAG_WIDE BV07
  696. #define TERRAIN_FLAG_VAST BV08
  697. #define TERRAIN_FLAG_FADEIN BV09
  698. #define TERRAIN_FLAG_FADEOUT BV10
  699. #define TERRAIN_FLAG_DOUBLE BV11
  700. #define MOUSE_FLAG_BUTTON_A 1
  701. #define MOUSE_FLAG_BUTTON_B 2
  702. #define MOUSE_FLAG_SHIFT 4
  703. #define MOUSE_FLAG_ALT 8
  704. #define MOUSE_FLAG_CTRL 16
  705. #define MOUSE_FLAG_MOTION 32
  706. #define MOUSE_FLAG_WHEEL 64
  707. #define MOUSE_FLAG_EXTRA 128
  708. #define MOUSE_FLAG_RELEASE 256
  709. #define CURSOR_FLAG_ALWAYS 1
  710. //#define CURSOR_FLAG_NEVER 2
  711. #define CURSOR_FLAG_GET_ONE 4
  712. #define CURSOR_FLAG_GET_ALL 8
  713. #define STARTUP_FLAG_NOGREETING 1
  714. #define STARTUP_FLAG_SCREENREADER 2
  715. #define STARTUP_FLAG_NORESET 4
  716. #define STARTUP_FLAG_ARGUMENT 8
  717. #define STARTUP_FLAG_NOTITLE 16
  718. #define STARTUP_FLAG_VERBOSE 32
  719. #define WRAP_FLAG_NONE 0
  720. #define WRAP_FLAG_DISPLAY BV01
  721. #define WRAP_FLAG_WORD BV02
  722. #define WRAP_FLAG_SPLIT BV03
  723. #define WRAP_FLAG_TAIL BV04
  724. #define LEGEND_ASCII 0
  725. #define LEGEND_ASCII_MISC 16
  726. #define LEGEND_ASCII_CURVED 20
  727. #define LEGEND_ASCII_DIRS 24
  728. #define LEGEND_UNICODE 32
  729. #define LEGEND_UNICODE_MISC 48
  730. #define LEGEND_UNICODE_CURVED 52
  731. #define LEGEND_UNICODE_DIRS 56
  732. #define LEGEND_MUDFONT 64
  733. #define LEGEND_MUDFONT_NWS 64
  734. #define LEGEND_MUDFONT_NES 96
  735. #define LEGEND_MUDFONT_CURVED 192
  736. #define LEGEND_UNICODE_GRAPHICS 196
  737. #define LEGEND_MAX 230
  738. #define UNICODE_DIR_SE 1
  739. #define UNICODE_DIR_NE 2
  740. #define UNICODE_DIR_SW 4
  741. #define UNICODE_DIR_NW 8
  742. #define UNICODE_DIR_D 16
  743. #define UNICODE_DIR_N 17
  744. #define UNICODE_DIR_S 18
  745. #define UNICODE_DIR_NS 19
  746. #define UNICODE_DIR_U 20
  747. #define UNICODE_DIR_E 21
  748. #define UNICODE_DIR_W 22
  749. #define UNICODE_DIR_EW 23
  750. #define UNICODE_DIR_RL 24
  751. #define UNICODE_DIR_RL_CURVED 25
  752. #define UNICODE_DIR_RR 26
  753. #define UNICODE_DIR_RR_CURVED 27
  754. #define MAP_COLOR_AVOID 0
  755. #define MAP_COLOR_BACK 1
  756. #define MAP_COLOR_BLOCK 2
  757. #define MAP_COLOR_EXIT 3
  758. #define MAP_COLOR_FOG 4
  759. #define MAP_COLOR_HIDE 5
  760. #define MAP_COLOR_INVIS 6
  761. #define MAP_COLOR_PATH 7
  762. #define MAP_COLOR_ROOM 8
  763. #define MAP_COLOR_SYMBOL 9
  764. #define MAP_COLOR_USER 10
  765. #define MAP_COLOR_MAX 11
  766. /*
  767. Some macros to deal with double linked lists
  768. */
  769. #define LINK(link, head, tail) \
  770. { \
  771. if ((head) == NULL) \
  772. { \
  773. (head) = (link); \
  774. } \
  775. else \
  776. { \
  777. (tail)->next = (link); \
  778. } \
  779. (link)->next = NULL; \
  780. (link)->prev = (tail); \
  781. (tail) = (link); \
  782. }
  783. /*
  784. #define INSERT_LEFT(link, right, head) \
  785. { \
  786. (link)->prev = (right)->prev; \
  787. (right)->prev = (link); \
  788. (link)->next = (right); \
  789. \
  790. if ((link)->prev) \
  791. { \
  792. (link)->prev->next = (link); \
  793. } \
  794. else \
  795. { \
  796. (head) = (link); \
  797. } \
  798. }
  799. #define INSERT_RIGHT(link, left, tail) \
  800. { \
  801. (link)->next = (left)->next; \
  802. (left)->next = (link); \
  803. (link)->prev = (left); \
  804. \
  805. if ((link)->next) \
  806. { \
  807. (link)->next->prev = (link); \
  808. } \
  809. else \
  810. { \
  811. (tail) = (link); \
  812. } \
  813. }
  814. */
  815. #define UNLINK(link, head, tail) \
  816. { \
  817. if (((link)->prev == NULL && (link) != head) \
  818. || ((link)->next == NULL && (link) != tail)) \
  819. { \
  820. tintin_printf2(NULL, "#UNLINK ERROR in file %s on line %d", __FILE__, __LINE__); \
  821. dump_stack(); \
  822. } \
  823. if ((link)->prev == NULL) \
  824. { \
  825. (head) = (link)->next; \
  826. } \
  827. else \
  828. { \
  829. (link)->prev->next = (link)->next; \
  830. } \
  831. if ((link)->next == NULL) \
  832. { \
  833. (tail) = (link)->prev; \
  834. } \
  835. else \
  836. { \
  837. (link)->next->prev = (link)->prev; \
  838. } \
  839. (link)->next = NULL; \
  840. (link)->prev = NULL; \
  841. }
  842. /*
  843. string allocation
  844. */
  845. #define RESTRING(point, value) \
  846. { \
  847. if (point) \
  848. { \
  849. free(point); \
  850. } \
  851. point = strdup((value)); \
  852. }
  853. /*
  854. #define FREE(point) \
  855. { \
  856. free((point)); \
  857. point = NULL; \
  858. }
  859. */
  860. /*
  861. Bit operations
  862. */
  863. #define HAS_BIT(bitvector, bit) ((bitvector) & (bit))
  864. #define SET_BIT(bitvector, bit) ((bitvector) |= (bit))
  865. #define DEL_BIT(bitvector, bit) ((bitvector) &= (~(bit)))
  866. #define TOG_BIT(bitvector, bit) ((bitvector) ^= (bit))
  867. #define FFS_BIT(bitvector) ((ffs(bitvector) - 1))
  868. /*
  869. Generic
  870. */
  871. #define URANGE(a, b, c) ((b) < (a) ? (a) : (b) > (c) ? (c) : (b))
  872. //#define URANGE(a, b, c) ((b) <= (a) ? (a) : (c) >= (b) ? (b) : (c) < (b) ? (b) : (c))
  873. #define UMAX(a, b) ((a) > (b) ? (a) : (b))
  874. #define UMIN(a, b) ((a) < (b) ? (a) : (b))
  875. #define next_arg(u) (u < 99 ? u++ : u)
  876. #define IS_SPLIT(ses) (gtd->screen->rows != (ses)->split->bot_row)
  877. #define SCROLL(ses) ((ses)->cur_row == 0 || ((ses)->cur_row >= (ses)->split->top_row && (ses)->cur_row <= (ses)->split->bot_row) || ((ses)->cur_row >= ses->input->top_row && (ses)->cur_row <= ses->input->bot_row))
  878. #define VERBATIM(ses) (gtd->level->verbatim || (gtd->level->input == 0 && (HAS_BIT((ses)->config_flags, CONFIG_FLAG_VERBATIM) || HAS_BIT(gtd->flags, TINTIN_FLAG_CHILDLOCK))))
  879. /*
  880. Compatibility
  881. */
  882. #define atoll(str) (strtoll(str, NULL, 10))
  883. /************************ structures *********************/
  884. struct listroot
  885. {
  886. struct listnode ** list;
  887. struct session * ses;
  888. int size;
  889. int used;
  890. int update;
  891. short type;
  892. short flags;
  893. };
  894. struct listnode
  895. {
  896. struct listroot * root; // variable
  897. char * arg1;
  898. char * arg2;
  899. char * arg3;
  900. char * arg4;
  901. char * group;
  902. unsigned int shots;
  903. union
  904. {
  905. pcre * regex; // act, alias, gag, highlight, substitute
  906. char * data; // class
  907. struct room_data * room; // terrain
  908. long long val64; // delay, tick, path
  909. short val16[4]; // button
  910. int val32[2]; // landmark, event, pathdir
  911. };
  912. };
  913. /*
  914. struct tableroot
  915. {
  916. struct listtable ** table;
  917. int size;
  918. int used;
  919. };
  920. struct tablenode
  921. {
  922. struct tableroot * root;
  923. char * arg1;
  924. char * arg2;
  925. };
  926. */
  927. struct scriptroot
  928. {
  929. struct scriptnode * next;
  930. struct scriptnode * prev;
  931. struct session * ses;
  932. struct listroot * local;
  933. int list;
  934. };
  935. struct process_data
  936. {
  937. pid_t pid;
  938. uid_t uid;
  939. gid_t gid;
  940. };
  941. struct tintin_data
  942. {
  943. struct session * ses;
  944. struct session * update;
  945. struct session * dispose_next;
  946. struct session * dispose_prev;
  947. struct listroot * dispose_list;
  948. struct listroot * banner_list;
  949. struct chat_data * chat;
  950. struct screen_data * screen;
  951. struct level_data * level;
  952. struct memory_data * memory;
  953. struct system_data * system;
  954. struct termios old_terminal;
  955. char * detach_file;
  956. int detach_port;
  957. struct process_data detach_info;
  958. int detach_sock;
  959. char * attach_file;
  960. int attach_pid;
  961. int attach_sock;
  962. int daemon;
  963. char * buf;
  964. char * out;
  965. char * mud_output_buf;
  966. int mud_output_max;
  967. int mud_output_len;
  968. unsigned char * mccp_buf;
  969. int mccp_len;
  970. char macro_buf[BUFFER_SIZE];
  971. char is_result[NUMBER_SIZE];
  972. time_t time;
  973. time_t time_daemon;
  974. time_t time_input;
  975. time_t time_session;
  976. unsigned long long utime;
  977. unsigned long long utime_next_delay;
  978. unsigned long long utime_next_tick;
  979. long long total_io_exec;
  980. long long total_io_delay;
  981. long long convert_time;
  982. int history_size;
  983. unsigned short command_ref[32];
  984. int msdp_table_size;
  985. int flags;
  986. int event_flags;
  987. struct scriptroot * script_stack[STACK_SIZE];
  988. int script_index;
  989. char tintin_char;
  990. char verbatim_char;
  991. char repeat_char;
  992. char * vars[100];
  993. char * cmds[100];
  994. int args[100];
  995. char color_reset[COLOR_SIZE];
  996. };
  997. struct session
  998. {
  999. struct session * next;
  1000. struct session * prev;
  1001. struct map_data * map;
  1002. struct port_data * port;
  1003. z_stream * mccp2;
  1004. z_stream * mccp3;
  1005. gnutls_session_t ssl;
  1006. struct termios cur_terminal;
  1007. struct log_data * log;
  1008. struct scroll_data * scroll;
  1009. struct split_data * split;
  1010. struct input_data * input;
  1011. char * name;
  1012. char * group;
  1013. char * line_capturefile;
  1014. int line_captureindex;
  1015. int gagline;
  1016. struct listroot * list[LIST_MAX];
  1017. time_t created;
  1018. int cur_row;
  1019. int sav_row;
  1020. int cur_col;
  1021. int sav_col;
  1022. int wrap;
  1023. int fgc;
  1024. int bgc;
  1025. int vtc;
  1026. int socket;
  1027. int telopts;
  1028. int telopt_flag[8];
  1029. int event_flags;
  1030. int config_flags;
  1031. int flags;
  1032. int charset;
  1033. char * session_host;
  1034. char * session_ip;
  1035. char * session_port;
  1036. char * cmd_color;
  1037. unsigned char * read_buf;
  1038. int read_len;
  1039. int read_max;
  1040. unsigned long long connect_retry;
  1041. int connect_error;
  1042. // char more_output[BUFFER_SIZE];
  1043. char * more_output;
  1044. int color;
  1045. char color_patch[100];
  1046. unsigned long long packet_patch;
  1047. unsigned long long check_output;
  1048. int scrollback_tab;
  1049. int tab_width;
  1050. unsigned long long rand;
  1051. unsigned short rkey;
  1052. struct port_data * proxy;
  1053. };
  1054. struct edit_data
  1055. {
  1056. struct row_data ** line;
  1057. int used;
  1058. int size;
  1059. int update;
  1060. };
  1061. struct system_data
  1062. {
  1063. char * tt_dir;
  1064. char * home;
  1065. char * lang;
  1066. char * os;
  1067. char * term;
  1068. char * exec;
  1069. };
  1070. struct input_data
  1071. {
  1072. struct edit_data * line;
  1073. struct edit_data * edit;
  1074. char * line_name;
  1075. char * edit_name;
  1076. int flags;
  1077. int sav_top_row;
  1078. int sav_top_col;
  1079. int sav_bot_row;
  1080. int sav_bot_col;
  1081. int top_row;
  1082. int top_col;
  1083. int bot_row;
  1084. int bot_col;
  1085. int cur_row;
  1086. int str_len;
  1087. int raw_len;
  1088. int str_pos;
  1089. int raw_pos;
  1090. int str_hid;
  1091. int raw_hid;
  1092. int str_off;
  1093. char *buf;
  1094. char *tmp;
  1095. char *cut;
  1096. };
  1097. struct level_data
  1098. {
  1099. unsigned int background;
  1100. unsigned int convert;
  1101. unsigned int debug;
  1102. unsigned int grep;
  1103. unsigned int ignore;
  1104. unsigned int info;
  1105. unsigned int input;
  1106. unsigned int local;
  1107. unsigned int mshot;
  1108. unsigned int quiet;
  1109. unsigned int repeat;
  1110. unsigned int scan;
  1111. unsigned int scroll;
  1112. unsigned int shots;
  1113. unsigned int verbatim;
  1114. unsigned int verbose;
  1115. };
  1116. struct log_data
  1117. {
  1118. FILE * file;
  1119. char * name;
  1120. int mode;
  1121. FILE * next_file;
  1122. char * next_name;
  1123. time_t next_time;
  1124. FILE * line_file;
  1125. char * line_name;
  1126. time_t line_time;
  1127. char stamp_text[100];
  1128. char * stamp_strf;
  1129. time_t stamp_time;
  1130. };
  1131. struct split_data
  1132. {
  1133. int sav_top_row;
  1134. int sav_top_col;
  1135. int sav_bot_row;
  1136. int sav_bot_col;
  1137. int top_row;
  1138. int top_col;
  1139. int bot_row;
  1140. int bot_col;
  1141. };
  1142. struct scroll_data
  1143. {
  1144. struct buffer_data ** buffer;
  1145. int base;
  1146. int line;
  1147. int used;
  1148. int size;
  1149. int wrap;
  1150. time_t time;
  1151. char * input;
  1152. int flags;
  1153. int width;
  1154. };
  1155. struct buffer_data
  1156. {
  1157. int width;
  1158. int height;
  1159. unsigned short lines;
  1160. unsigned short flags;
  1161. time_t time;
  1162. char * str;
  1163. };
  1164. struct chat_data
  1165. {
  1166. struct chat_data * next;
  1167. struct chat_data * prev;
  1168. struct chat_data * update;
  1169. char * name;
  1170. char * ip;
  1171. char * version;
  1172. char * download;
  1173. char * reply;
  1174. char * prefix;
  1175. char * paste_buf;
  1176. char * color;
  1177. char * group;
  1178. int port;
  1179. int fd;
  1180. time_t timeout;
  1181. int flags;
  1182. unsigned long long paste_time;
  1183. FILE * file_pt;
  1184. char * file_name;
  1185. long long file_size;
  1186. int file_block_cnt;
  1187. int file_block_tot;
  1188. int file_block_patch;
  1189. unsigned long long file_start_time;
  1190. };
  1191. struct port_data
  1192. {
  1193. struct port_data * next;
  1194. struct port_data * prev;
  1195. struct port_data * update;
  1196. char * name;
  1197. char * ip;
  1198. char * prefix;
  1199. char * color;
  1200. char * group;
  1201. int port;
  1202. int fd;
  1203. int flags;
  1204. int comm_flags;
  1205. int mtts_flags;
  1206. struct msdp_data ** msdp_data;
  1207. char * proxy;
  1208. char * ttype;
  1209. char telbuf[BUFFER_SIZE];
  1210. int teltop;
  1211. char inbuf[BUFFER_SIZE];
  1212. int intop;
  1213. int cols;
  1214. int rows;
  1215. int total;
  1216. int rank;
  1217. z_stream * mccp2;
  1218. z_stream * mccp3;
  1219. struct session * ses;
  1220. };
  1221. struct link_data
  1222. {
  1223. struct link_data * next;
  1224. struct link_data * prev;
  1225. char * str1;
  1226. char * str2;
  1227. char * str3;
  1228. };
  1229. struct map_data
  1230. {
  1231. struct room_data ** room_list;
  1232. struct room_data ** grid_rooms;
  1233. int * grid_vnums;
  1234. FILE * logfile;
  1235. struct link_data * undo_head;
  1236. struct link_data * undo_tail;
  1237. struct search_data * search;
  1238. char * buf;
  1239. char * out;
  1240. char color[MAP_COLOR_MAX][COLOR_SIZE];
  1241. char color_raw[MAP_COLOR_MAX][COLOR_SIZE];
  1242. int center_x;
  1243. int center_y;
  1244. int center_z;
  1245. int max_grid_x;
  1246. int max_grid_y;
  1247. int sav_top_row;
  1248. int sav_top_col;
  1249. int sav_bot_row;
  1250. int sav_bot_col;
  1251. int top_row;
  1252. int top_col;
  1253. int bot_row;
  1254. int bot_col;
  1255. int rows;
  1256. int cols;
  1257. int undo_size;
  1258. int dir;
  1259. int size;
  1260. int flags;
  1261. int in_room;
  1262. int at_room;
  1263. int last_room;
  1264. int global_vnum;
  1265. struct exit_data * global_exit;
  1266. int version;
  1267. short display_stamp;
  1268. int nofollow;
  1269. char legend[LEGEND_MAX][LEGEND_SIZE];
  1270. char legend_raw[LEGEND_MAX][LEGEND_SIZE];
  1271. };
  1272. struct room_data
  1273. {
  1274. struct exit_data * f_exit;
  1275. struct exit_data * l_exit;
  1276. struct exit_data * exit_grid[11];
  1277. int vnum;
  1278. long long exit_dirs;
  1279. float length;
  1280. float weight;
  1281. unsigned short exit_size;
  1282. unsigned short search_stamp;
  1283. unsigned short display_stamp;
  1284. int flags;
  1285. int w;
  1286. int x;
  1287. int y;
  1288. int z;
  1289. int terrain_index;
  1290. short terrain_flags;
  1291. char * area;
  1292. char * color;
  1293. char * data;
  1294. char * desc;
  1295. char * id;
  1296. char * name;
  1297. char * note;
  1298. char * symbol;
  1299. char * terrain;
  1300. };
  1301. struct exit_data
  1302. {
  1303. struct exit_data * next;
  1304. struct exit_data * prev;
  1305. int vnum;
  1306. int dir;
  1307. int grid;
  1308. int flags;
  1309. float weight;
  1310. float delay;
  1311. char * name;
  1312. char * cmd;
  1313. char * color;
  1314. char * data;
  1315. };
  1316. struct search_data
  1317. {
  1318. int vnum;
  1319. int min;
  1320. int max;
  1321. unsigned short stamp;
  1322. char * arg;
  1323. pcre * name;
  1324. int exit_size;
  1325. long long exit_dirs;
  1326. char * exit_list;
  1327. pcre * desc;
  1328. pcre * area;
  1329. pcre * note;
  1330. pcre * terrain;
  1331. long long flag;
  1332. long long galf;
  1333. char * id;
  1334. float distance;
  1335. };
  1336. struct msdp_data
  1337. {
  1338. char * value;
  1339. int flags;
  1340. };
  1341. struct memory_data
  1342. {
  1343. struct stack_data ** debug;
  1344. int debug_len;
  1345. int debug_max;
  1346. struct str_data ** stack;
  1347. int stack_len;
  1348. int stack_cap;
  1349. int stack_max;
  1350. struct str_data ** list;
  1351. int list_len;
  1352. int list_max;
  1353. int * free;
  1354. int free_len;
  1355. int free_max;
  1356. };
  1357. struct row_data
  1358. {
  1359. char * str;
  1360. };
  1361. struct screen_data
  1362. {
  1363. struct row_data ** line;
  1364. struct row_data ** grid;
  1365. int flags;
  1366. int rows;
  1367. int cols;
  1368. int height;
  1369. int width;
  1370. int tot_height;
  1371. int tot_width;
  1372. int pos_height;
  1373. int pos_width;
  1374. int minimized;
  1375. int focus;
  1376. int char_height;
  1377. int char_width;
  1378. int desk_rows;
  1379. int desk_cols;
  1380. int desk_height;
  1381. int desk_width;
  1382. int top_row;
  1383. int bot_row;
  1384. int cur_row;
  1385. int cur_col;
  1386. int max_row;
  1387. int sav_lev;
  1388. int sav_row[STACK_SIZE];
  1389. int sav_col[STACK_SIZE];
  1390. };
  1391. struct stack_data
  1392. {
  1393. char * name;
  1394. int index;
  1395. };
  1396. struct str_data
  1397. {
  1398. int index;
  1399. int max;
  1400. int len;
  1401. short flags;
  1402. short blank;
  1403. };
  1404. // unused
  1405. struct window_data
  1406. {
  1407. char *name;
  1408. int top_row;
  1409. int top_col;
  1410. int bot_row;
  1411. int bot_col;
  1412. int off_row;
  1413. int off_col;
  1414. int max_row;
  1415. int max_col;
  1416. int pos_row;
  1417. int pos_col;
  1418. struct input_data **buffer;
  1419. };
  1420. #define DO_BUFFER(buffer) void buffer (struct session *ses, char *arg, char *arg1, char *arg2)
  1421. #define DO_CHAT(chat) void chat (char *arg1, char *arg2)
  1422. #define DO_COMMAND(command) struct session *command (struct session *ses, char *arg, char *arg1, char *arg2, char *arg3, char *arg4)
  1423. #define DO_CONFIG(config) struct session *config (struct session *ses, char *arg1, char *arg2, int index)
  1424. #define DO_CURSOR(cursor) void cursor (struct session *ses, char *arg)
  1425. #define DO_DAEMON(daemon) void daemon (struct session *ses, char *arg, char *arg1, char *arg2)
  1426. #define DO_EDIT(edit) struct session *edit (struct session *ses, char *arg, char *arg1, char *arg2)
  1427. #define DO_HISTORY(history) void history (struct session *ses, char *arg, char *arg1, char *arg2)
  1428. #define DO_LINE(line) struct session *line (struct session *ses, char *arg, char *arg1, char *arg2, char *arg3)
  1429. #define DO_MAP(map) void map (struct session *ses, char *arg, char *arg1, char *arg2)
  1430. #define DO_PATH(path) void path (struct session *ses, char *arg)
  1431. #define DO_PORT(port) struct session *port (struct session *ses, char *arg, char *arg1, char *arg2)
  1432. /*
  1433. Typedefs
  1434. */
  1435. typedef int CMPFUNC (const void *a, const void *b);
  1436. typedef void BUFFER (struct session *ses, char *arg, char *arg1, char *arg2);
  1437. typedef void CHAT (char *arg1, char *arg2);
  1438. typedef struct session *CONFIG (struct session *ses, char *arg1, char *arg2, int index);
  1439. typedef struct session *COMMAND (struct session *ses, char *arg, char *arg1, char *arg2, char *arg3, char *arg4);
  1440. typedef void CURSOR (struct session *ses, char *arg);
  1441. typedef void DAEMON (struct session *ses, char *arg, char *arg1, char *arg2);
  1442. typedef struct session *EDIT (struct session *ses, char *arg, char *arg1, char *arg2);
  1443. typedef void HISTORY (struct session *ses, char *arg, char *arg1, char *arg2);
  1444. typedef struct session *LINE (struct session *ses, char *arg, char *arg1, char *arg2, char *arg3);
  1445. typedef void MAP (struct session *ses, char *arg, char *arg1, char *arg2);
  1446. typedef void MSDP (struct session *ses, struct port_data *buddy, int index);
  1447. typedef void PATH (struct session *ses, char *arg);
  1448. typedef struct session *PORT (struct session *ses, char *arg, char *arg1, char *arg2);
  1449. /*
  1450. Structures for tables.c
  1451. */
  1452. struct buffer_type
  1453. {
  1454. char * name;
  1455. BUFFER * fun;
  1456. char * desc;
  1457. };
  1458. struct charset_type
  1459. {
  1460. char * name;
  1461. char * html;
  1462. int flags;
  1463. };
  1464. struct chat_type
  1465. {
  1466. char * name;
  1467. CHAT * fun;
  1468. int lval;
  1469. int rval;
  1470. char * desc;
  1471. };
  1472. struct color_type
  1473. {
  1474. char * name;
  1475. char * code;
  1476. int len;
  1477. };
  1478. struct command_type
  1479. {
  1480. char * name;
  1481. COMMAND * command;
  1482. int args;
  1483. int type;
  1484. };
  1485. struct config_type
  1486. {
  1487. char * name;
  1488. char * msg_on;
  1489. char * msg_off;
  1490. CONFIG * config;
  1491. };
  1492. struct cursor_type
  1493. {
  1494. char * name;
  1495. char * desc;
  1496. char * code;
  1497. int flags;
  1498. CURSOR * fun;
  1499. char * arg;
  1500. };
  1501. struct daemon_type
  1502. {
  1503. char * name;
  1504. DAEMON * fun;
  1505. char * desc;
  1506. };
  1507. struct edit_type
  1508. {
  1509. char * name;
  1510. EDIT * fun;
  1511. char * desc;
  1512. };
  1513. struct event_type
  1514. {
  1515. char * name;
  1516. int level;
  1517. int flags;
  1518. char * group;
  1519. char * desc;
  1520. };
  1521. struct history_type
  1522. {
  1523. char * name;
  1524. HISTORY * fun;
  1525. char * desc;
  1526. };
  1527. struct list_type
  1528. {
  1529. char * name;
  1530. char * name_multi;
  1531. int mode;
  1532. int args;
  1533. int script_arg;
  1534. int priority_arg;
  1535. int flags;
  1536. };
  1537. struct line_type
  1538. {
  1539. char * name;
  1540. LINE * fun;
  1541. char * desc;
  1542. };
  1543. struct map_type
  1544. {
  1545. char * name;
  1546. MAP * fun;
  1547. int flags;
  1548. int check;
  1549. char * desc;
  1550. };
  1551. struct map_legend_type
  1552. {
  1553. char * name;
  1554. char * group;
  1555. char * min;
  1556. char * max;
  1557. };
  1558. struct map_legend_group_type
  1559. {
  1560. char * name;
  1561. char * group;
  1562. int min_row;
  1563. int min_col;
  1564. int max_row;
  1565. int max_col;
  1566. int start;
  1567. int end;
  1568. char * reset;
  1569. };
  1570. struct msdp_type
  1571. {
  1572. char * name;
  1573. int flags;
  1574. int rank;
  1575. MSDP * fun;
  1576. };
  1577. struct path_type
  1578. {
  1579. char * name;
  1580. PATH * fun;
  1581. char * desc;
  1582. };
  1583. struct port_type
  1584. {
  1585. char * name;
  1586. PORT * fun;
  1587. int lval;
  1588. int rval;
  1589. char * desc;
  1590. };
  1591. struct pulse_type
  1592. {
  1593. unsigned char update_input;
  1594. unsigned char update_sessions;
  1595. unsigned char update_delays;
  1596. unsigned char update_daemon;
  1597. unsigned char update_chat;
  1598. unsigned char update_port;
  1599. unsigned char update_ticks;
  1600. unsigned char update_paths;
  1601. unsigned char update_packets;
  1602. unsigned char update_terminal;
  1603. unsigned char update_memory;
  1604. unsigned char update_time;
  1605. };
  1606. struct rank_type
  1607. {
  1608. char * name;
  1609. int flags;
  1610. };
  1611. struct stamp_type
  1612. {
  1613. char * name;
  1614. int length;
  1615. char * desc;
  1616. };
  1617. struct substitution_type
  1618. {
  1619. char * name;
  1620. int bitvector;
  1621. };
  1622. struct timer_type
  1623. {
  1624. char * name;
  1625. };
  1626. struct telopt_type
  1627. {
  1628. char * name;
  1629. int want;
  1630. int flags;
  1631. };
  1632. #endif
  1633. /*
  1634. Function declarations
  1635. */
  1636. #ifndef __BANNER_H__
  1637. #define __BANNER_H__
  1638. extern DO_COMMAND(do_banner);
  1639. #endif
  1640. #ifndef __BASE_H__
  1641. #define __BASE_H__
  1642. extern int str_to_base64(char *in, char *out, size_t size);
  1643. extern int base64_to_str(char *in, char *out, size_t size);
  1644. extern void str_to_base64z(char *in, char *out, size_t size);
  1645. extern void base64z_to_str(char *in, char *out, size_t size);
  1646. extern int str_to_base252(char *in, char *out, size_t size);
  1647. extern int base252_to_str(char *in, char *out, size_t size);
  1648. extern void str_to_base252z(char *in, char *out, size_t size);
  1649. extern void base252z_to_str(char *in, char *out, size_t size);
  1650. #endif
  1651. #ifndef __BUFFER_H__
  1652. #define __BUFFER_H__
  1653. extern DO_COMMAND(do_buffer);
  1654. extern DO_COMMAND(do_grep);
  1655. extern void init_buffer(struct session *ses, int size);
  1656. extern void add_line_buffer(struct session *ses, char *line, int more_output);
  1657. extern int show_buffer(struct session *ses);
  1658. extern DO_BUFFER(buffer_up);
  1659. extern DO_BUFFER(buffer_clear);
  1660. extern DO_BUFFER(buffer_down);
  1661. extern DO_BUFFER(buffer_get);
  1662. extern DO_BUFFER(buffer_home);
  1663. extern DO_BUFFER(buffer_end);
  1664. extern DO_BUFFER(buffer_find);
  1665. extern DO_BUFFER(buffer_jump);
  1666. extern DO_BUFFER(buffer_lock);
  1667. extern DO_BUFFER(buffer_refresh);
  1668. extern DO_BUFFER(buffer_write);
  1669. extern DO_BUFFER(buffer_info);
  1670. #endif
  1671. #ifndef __CHAT_H__
  1672. #define __CHAT_H__
  1673. extern DO_COMMAND(do_chat);
  1674. extern void process_chat_connections(fd_set *read_set, fd_set *write_set, fd_set *exc_set);
  1675. extern void chat_socket_printf(struct chat_data *buddy, char *format, ...);
  1676. extern void close_chat(struct chat_data *buddy, int unlink);
  1677. extern void chat_forward_session(struct session *ses, char *linelog);
  1678. extern DO_CHAT(chat_accept);
  1679. extern DO_CHAT(chat_call);
  1680. extern DO_CHAT(chat_cancelfile);
  1681. extern DO_CHAT(chat_color);
  1682. extern DO_CHAT(chat_decline);
  1683. extern DO_CHAT(chat_dnd);
  1684. extern DO_CHAT(chat_downloaddir);
  1685. extern DO_CHAT(chat_emote);
  1686. extern DO_CHAT(chat_filestat);
  1687. extern DO_CHAT(chat_group);
  1688. extern DO_CHAT(chat_forward);
  1689. extern DO_CHAT(chat_forwardall);
  1690. extern DO_CHAT(chat_ignore);
  1691. extern DO_CHAT(chat_initialize);
  1692. extern DO_CHAT(chat_info);
  1693. extern DO_CHAT(chat_ip);
  1694. extern DO_CHAT(chat_message);
  1695. extern DO_CHAT(chat_name);
  1696. extern DO_CHAT(chat_paste);
  1697. extern DO_CHAT(chat_peek);
  1698. extern DO_CHAT(chat_ping);
  1699. extern DO_CHAT(chat_prefix);
  1700. extern DO_CHAT(chat_private);
  1701. extern DO_CHAT(chat_public);
  1702. extern DO_CHAT(chat_reply);
  1703. extern DO_CHAT(chat_request);
  1704. extern DO_CHAT(chat_send);
  1705. extern DO_CHAT(chat_sendfile);
  1706. extern DO_CHAT(chat_transfer);
  1707. extern DO_CHAT(chat_serve);
  1708. extern DO_CHAT(chat_uninitialize);
  1709. extern DO_CHAT(chat_who);
  1710. extern DO_CHAT(chat_zap);
  1711. #endif
  1712. #ifndef __COMMAND_H__
  1713. #define __COMMAND_H__
  1714. extern void init_commands(void);
  1715. #endif
  1716. #ifndef __CURSOR_H__
  1717. #define __CURSOR_H__
  1718. extern DO_COMMAND(do_cursor);
  1719. int inputline_cur_row(void);
  1720. int inputline_cur_col(void);
  1721. int inputline_cur_off(void);
  1722. int inputline_cur_str_len(void);
  1723. int inputline_max_str_len(void);
  1724. int inputline_max_row(void);
  1725. int inputline_editor(void);
  1726. int inputline_rows(struct session *ses);
  1727. void inputline_insert(char *arg, int str_pos);
  1728. void inputline_set(char *arg, int str_pos);
  1729. extern DO_CURSOR(cursor_backspace);
  1730. extern DO_CURSOR(cursor_brace);
  1731. extern DO_CURSOR(cursor_buffer_down);
  1732. extern DO_CURSOR(cursor_buffer_end);
  1733. extern DO_CURSOR(cursor_buffer_home);
  1734. extern DO_CURSOR(cursor_buffer_lock);
  1735. extern DO_CURSOR(cursor_buffer_up);
  1736. extern DO_CURSOR(cursor_check_line);
  1737. extern DO_CURSOR(cursor_check_line_modified);
  1738. extern DO_CURSOR(cursor_clear_left);
  1739. extern DO_CURSOR(cursor_clear_line);
  1740. extern DO_CURSOR(cursor_clear_right);
  1741. extern DO_CURSOR(cursor_convert_meta);
  1742. extern DO_CURSOR(cursor_delete);
  1743. extern DO_CURSOR(cursor_delete_or_exit);
  1744. extern DO_CURSOR(cursor_delete_word_left);
  1745. extern DO_CURSOR(cursor_delete_word_right);
  1746. extern DO_CURSOR(cursor_echo);
  1747. extern DO_CURSOR(cursor_end);
  1748. extern DO_CURSOR(cursor_enter);
  1749. extern DO_CURSOR(cursor_enter_finish);
  1750. extern DO_CURSOR(cursor_flag);
  1751. extern DO_CURSOR(cursor_get);
  1752. extern DO_CURSOR(cursor_history_find);
  1753. extern DO_CURSOR(cursor_history_next);
  1754. extern DO_CURSOR(cursor_history_prev);
  1755. extern DO_CURSOR(cursor_history_search);
  1756. extern DO_CURSOR(cursor_home);
  1757. extern DO_CURSOR(cursor_info);
  1758. extern DO_CURSOR(cursor_insert);
  1759. extern DO_CURSOR(cursor_macro);
  1760. extern DO_CURSOR(cursor_move_page_down);
  1761. extern DO_CURSOR(cursor_move_down);
  1762. extern DO_CURSOR(cursor_move_left);
  1763. extern DO_CURSOR(cursor_move_left_word);
  1764. extern DO_CURSOR(cursor_move_right);
  1765. extern DO_CURSOR(cursor_move_right_word);
  1766. extern DO_CURSOR(cursor_move_page_up);
  1767. extern DO_CURSOR(cursor_move_up);
  1768. extern DO_CURSOR(cursor_page);
  1769. extern DO_CURSOR(cursor_paste_buffer);
  1770. extern DO_CURSOR(cursor_position);
  1771. extern DO_CURSOR(cursor_redraw_input);
  1772. extern DO_CURSOR(cursor_redraw_line);
  1773. extern DO_CURSOR(cursor_redraw_singleline);
  1774. extern DO_CURSOR(cursor_redraw_multiline);
  1775. extern DO_CURSOR(cursor_redraw_edit);
  1776. extern DO_CURSOR(cursor_set);
  1777. extern DO_CURSOR(cursor_soft_enter);
  1778. extern DO_CURSOR(cursor_suspend);
  1779. extern DO_CURSOR(cursor_tab);
  1780. #endif
  1781. #ifndef __INPUT_H__
  1782. #define __INPUT_H__
  1783. extern void process_input(void);
  1784. extern void read_line(char *input, int len);
  1785. extern void read_key(char *input, int len);
  1786. extern int check_key(char *input, int len);
  1787. extern void convert_meta(char *input, char *output, int eol);
  1788. extern char *str_convert_meta(char *input, int eol);
  1789. extern void echo_command(struct session *ses, char *line);
  1790. extern void init_input(struct session *ses, int top_row, int top_col, int bot_row, int bot_col);
  1791. extern void free_input(struct session *ses);
  1792. extern void input_printf(char *format, ...);
  1793. extern void modified_input(void);
  1794. #endif
  1795. #ifndef __MAPPER_H__
  1796. #define __MAPPER_H__
  1797. extern DO_COMMAND(do_map);
  1798. extern void delete_room_data(struct room_data *room);
  1799. extern int follow_map(struct session *ses, char *argument);
  1800. extern void show_vtmap(struct session *ses);
  1801. extern void map_mouse_handler(struct session *ses, char *left, char *right, int row, int col, int rev_row, int rev_col, int height, int width);
  1802. extern int delete_map(struct session *ses);
  1803. extern DO_MAP(map_at);
  1804. extern DO_MAP(map_center);
  1805. extern DO_MAP(map_color);
  1806. extern DO_MAP(map_create);
  1807. extern DO_MAP(map_debug);
  1808. extern DO_MAP(map_delete);
  1809. extern DO_MAP(map_destroy);
  1810. extern DO_MAP(map_dig);
  1811. extern DO_MAP(map_entrance);
  1812. extern DO_MAP(map_exit);
  1813. extern DO_MAP(map_exitflag);
  1814. extern DO_MAP(map_explore);
  1815. extern DO_MAP(map_find);
  1816. extern DO_MAP(map_flag);
  1817. extern DO_MAP(map_get);
  1818. extern DO_MAP(map_global);
  1819. extern DO_MAP(map_goto);
  1820. extern DO_MAP(map_info);
  1821. extern DO_MAP(map_insert);
  1822. extern DO_MAP(map_jump);
  1823. extern DO_MAP(map_landmark);
  1824. extern DO_MAP(map_leave);
  1825. extern DO_MAP(map_legend);
  1826. extern DO_MAP(map_link);
  1827. extern DO_MAP(map_list);
  1828. extern DO_MAP(map_map);
  1829. extern DO_MAP(map_move);
  1830. extern DO_MAP(map_name);
  1831. extern DO_MAP(map_offset);
  1832. extern DO_MAP(map_read);
  1833. extern DO_MAP(map_resize);
  1834. extern DO_MAP(map_return);
  1835. extern DO_MAP(map_roomflag);
  1836. extern DO_MAP(map_run);
  1837. extern DO_MAP(map_set);
  1838. extern DO_MAP(map_sync);
  1839. extern DO_MAP(map_terrain);
  1840. extern DO_MAP(map_travel);
  1841. extern DO_MAP(map_undo);
  1842. extern DO_MAP(map_uninsert);
  1843. extern DO_MAP(map_unlandmark);
  1844. extern DO_MAP(map_unlink);
  1845. extern DO_MAP(map_unterrain);
  1846. extern DO_MAP(map_update);
  1847. extern DO_MAP(map_vnum);
  1848. extern DO_MAP(map_write);
  1849. #endif
  1850. #ifndef __TT_MATH_H__
  1851. #define __TT_MATH_H__
  1852. extern long double mathexp(struct session *ses, char *str, char *result, int seed);
  1853. extern int is_math(struct session *ses, char *str);
  1854. extern int get_ellipsis(struct session *ses, unsigned int size, char *name, int *min, int *max);
  1855. extern long double get_number(struct session *ses, char *str);
  1856. extern unsigned long long get_ulong(struct session *ses, char *str);
  1857. extern long double get_double(struct session *ses, char *str);
  1858. extern void get_number_string(struct session *ses, char *str, char *result);
  1859. extern long double mathswitch(struct session *ses, char *left, char *right);
  1860. extern long double tintoi(char *str);
  1861. extern unsigned long long tintou(char *str);
  1862. #endif
  1863. #ifndef __CONFIG_H__
  1864. #define __CONFIG_H__
  1865. extern DO_COMMAND(do_configure);
  1866. extern DO_CONFIG(config_autotab);
  1867. extern DO_CONFIG(config_buffersize);
  1868. extern DO_CONFIG(config_charset);
  1869. extern DO_CONFIG(config_colormode);
  1870. extern DO_CONFIG(config_colorpatch);
  1871. extern DO_CONFIG(config_commandcolor);
  1872. extern DO_CONFIG(config_commandecho);
  1873. extern DO_CONFIG(config_connectretry);
  1874. extern DO_CONFIG(config_childlock);
  1875. extern DO_CONFIG(config_convertmeta);
  1876. extern DO_CONFIG(config_debugtelnet);
  1877. extern DO_CONFIG(config_historysize);
  1878. extern DO_CONFIG(config_inheritance);
  1879. extern DO_CONFIG(config_loglevel);
  1880. extern DO_CONFIG(config_logmode);
  1881. extern DO_CONFIG(config_mccp);
  1882. extern DO_CONFIG(config_mousetracking);
  1883. extern DO_CONFIG(config_packetpatch);
  1884. extern DO_CONFIG(config_randomseed);
  1885. extern DO_CONFIG(config_repeatchar);
  1886. extern DO_CONFIG(config_repeatenter);
  1887. extern DO_CONFIG(config_screenreader);
  1888. extern DO_CONFIG(config_scrolllock);
  1889. extern DO_CONFIG(config_speedwalk);
  1890. extern DO_CONFIG(config_tabwidth);
  1891. extern DO_CONFIG(config_telnet);
  1892. extern DO_CONFIG(config_tintinchar);
  1893. extern DO_CONFIG(config_verbatim);
  1894. extern DO_CONFIG(config_verbatimchar);
  1895. extern DO_CONFIG(config_verbose);
  1896. extern DO_CONFIG(config_wordwrap);
  1897. #endif
  1898. #ifndef __DAEMON_H__
  1899. #define __DAEMON_H__
  1900. extern DO_COMMAND(do_daemon);
  1901. extern DO_DAEMON(daemon_attach);
  1902. extern DO_DAEMON(daemon_detach);
  1903. extern DO_DAEMON(daemon_input);
  1904. extern DO_DAEMON(daemon_kill);
  1905. extern DO_DAEMON(daemon_list);
  1906. extern void reset_daemon(void);
  1907. extern void winch_daemon(void);
  1908. #endif
  1909. #ifndef __DATA_H__
  1910. #define __DATA_H__
  1911. extern DO_COMMAND(do_kill);
  1912. extern void kill_list(struct listroot *root);
  1913. extern void free_list(struct listroot *root);
  1914. extern int show_node_with_wild(struct session *ses, char *cptr, struct listroot *root);
  1915. extern void show_node(struct listroot *root, struct listnode *node, int level);
  1916. extern void show_nest(struct listnode *node, char *result);
  1917. extern void show_list(struct listroot *root, int level);
  1918. extern void remove_node_list(struct session *ses, int type, struct listnode *node);
  1919. extern void remove_index_list(struct listroot *root, int index);
  1920. extern void dispose_node(struct listnode *node);
  1921. extern void delete_node_list(struct session *ses, int type, struct listnode *node);
  1922. extern int delete_node_with_wild(struct session *ses, int index, char *string);
  1923. extern void delete_index_list(struct listroot *root, int index);
  1924. extern int search_index_list(struct listroot *root, char *text, char *priority);
  1925. extern int locate_index_list(struct listroot *root, char *text, char *priority);
  1926. extern int bsearch_alpha_list(struct listroot *root, char *text, int seek);
  1927. extern int bsearch_alnum_list(struct listroot *root, char *text, int seek);
  1928. extern int bsearch_priority_list(struct listroot *root, char *text, char *priority, int seek);
  1929. extern int nsearch_list(struct listroot *root, char *text);
  1930. extern struct listroot *init_list(struct session *ses, int type, int size);
  1931. extern struct listroot *copy_list(struct session *ses, struct listroot *sourcelist, int type);
  1932. extern struct listnode *create_node_list(struct listroot *root, char *arg1, char *arg2, char *arg3, char *arg4);
  1933. extern struct listnode *insert_node_list(struct listroot *root, struct listnode *node);
  1934. extern struct listnode *insert_index_list(struct listroot *root, struct listnode *node, int index);
  1935. extern struct listnode *update_node_list(struct listroot *root, char *arg1, char *arg2, char *arg3, char *arg4);
  1936. extern struct listnode *search_node_list(struct listroot *root, char *text);
  1937. #endif
  1938. #ifndef __DEBUG_H__
  1939. #define __DEBUG_H__
  1940. extern void push_call(char *format, ...);
  1941. extern int push_call_printf(char *format, ...);
  1942. extern void pop_call(void);
  1943. extern void dump_stack(void);
  1944. #endif
  1945. #ifndef __DICT_H__
  1946. #define __DICT_H__
  1947. extern DO_COMMAND(do_dictionary);
  1948. extern int spellcheck_count(struct session *ses, char *in);
  1949. extern int cursor_dictionary_tab_add(int stop_after_first);
  1950. #endif
  1951. #ifndef __EDIT_H__
  1952. #define __EDIT_H__
  1953. DO_COMMAND(do_edit);
  1954. DO_EDIT(edit_create);
  1955. DO_EDIT(edit_load);
  1956. DO_EDIT(edit_read);
  1957. DO_EDIT(edit_resume);
  1958. DO_EDIT(edit_save);
  1959. DO_EDIT(edit_suspend);
  1960. DO_EDIT(edit_write);
  1961. extern struct edit_data *create_editor(void);
  1962. extern void enable_editor(struct edit_data *edit);
  1963. extern void delete_editor(struct edit_data *edit);
  1964. extern void resize_editor(struct edit_data *edit, int size);
  1965. extern void clear_editor(struct edit_data *edit);
  1966. extern int str_save_editor(struct edit_data *edit, char **str);
  1967. extern int var_save_editor(struct edit_data *edit, char **str);
  1968. extern void create_line(struct edit_data *edit, int index, char *str);
  1969. extern void delete_line(struct edit_data *edit, int index);
  1970. extern void insert_line(struct edit_data *edit, int index, char *str);
  1971. extern void remove_line(struct edit_data *edit, int index);
  1972. #endif
  1973. #ifndef __DRAW_H__
  1974. #define __DRAW_H__
  1975. extern DO_COMMAND(do_draw);
  1976. #endif
  1977. #ifndef __EVENT_H__
  1978. #define __EVENT_H__
  1979. //extern DO_COMMAND(do_event);
  1980. //extern DO_COMMAND(do_unevent);
  1981. extern int check_all_events(struct session *ses, int flags, int args, int vars, char *fmt, ...);
  1982. extern void mouse_handler(struct session *ses, int val1, int val2, int val3);
  1983. #endif
  1984. #ifndef __FILES_H__
  1985. #define __FILES_H__
  1986. extern DO_COMMAND(do_read);
  1987. extern DO_COMMAND(do_write);
  1988. extern struct session *read_file(struct session *ses, FILE *fp, char *filename);
  1989. extern void write_node(struct session *ses, int mode, struct listnode *node, FILE *file);
  1990. extern char *fread_one_line(char **str, FILE *fp);
  1991. #endif
  1992. #ifndef __HELP_H__
  1993. #define __HELP_H__
  1994. extern DO_COMMAND(do_help);
  1995. #endif
  1996. #ifndef __HISTORY_H__
  1997. #define __HISTORY_H__
  1998. extern DO_COMMAND(do_history);
  1999. extern void add_line_history(struct session *ses, char *line);
  2000. extern void insert_line_history(struct session *ses, char *line);
  2001. extern struct session *repeat_history(struct session *ses, char *line);
  2002. extern int write_history(struct session *ses, char *filename);
  2003. extern int read_history(struct session *ses, char *filename);
  2004. DO_HISTORY(history_character);
  2005. DO_HISTORY(history_delete);
  2006. DO_HISTORY(history_get);
  2007. DO_HISTORY(history_insert);
  2008. DO_HISTORY(history_list);
  2009. DO_HISTORY(history_size);
  2010. DO_HISTORY(history_read);
  2011. DO_HISTORY(history_write);
  2012. #endif
  2013. #ifndef __LINE_H__
  2014. #define __LINE_H__
  2015. extern DO_COMMAND(do_line);
  2016. extern DO_LINE(line_background);
  2017. extern DO_LINE(line_benchmark);
  2018. extern DO_LINE(line_capture);
  2019. extern DO_LINE(line_convert);
  2020. extern DO_LINE(line_debug);
  2021. extern DO_LINE(line_gag);
  2022. extern DO_LINE(line_ignore);
  2023. extern DO_LINE(line_local);
  2024. extern DO_LINE(line_log);
  2025. extern DO_LINE(line_logmode);
  2026. extern DO_LINE(line_logverbatim);
  2027. extern DO_LINE(line_msdp);
  2028. extern DO_LINE(line_multishot);
  2029. extern DO_LINE(line_oneshot);
  2030. extern DO_LINE(line_quiet);
  2031. extern DO_LINE(line_strip);
  2032. extern DO_LINE(line_substitute);
  2033. extern DO_LINE(line_verbatim);
  2034. extern DO_LINE(line_verbose);
  2035. #endif
  2036. #ifndef __LOG_H__
  2037. #define __LOG_H__
  2038. extern void logheader(struct session *ses, FILE *file, int newline);
  2039. extern void init_log(struct session *ses);
  2040. extern void free_log(struct session *ses);
  2041. extern void logit(struct session *ses, char *txt, FILE *file, int newline);
  2042. extern void write_html_header(struct session *ses, FILE *fp);
  2043. extern void vt102_to_html(struct session *ses, char *txt, char *out);
  2044. #endif
  2045. #ifndef __MAIN_H__
  2046. #define __MAIN_H__
  2047. extern struct session *gts;
  2048. extern struct tintin_data *gtd;
  2049. extern void winch_handler(int signal);
  2050. extern void abort_handler(int signal);
  2051. extern void pipe_handler(int signal);
  2052. extern void suspend_handler(int signal);
  2053. extern void trap_handler(int signal);
  2054. extern int main(int argc, char **argv);
  2055. extern void init_tintin(int greeting);
  2056. extern void quitmsg(char *message);
  2057. extern void syserr_fatal(int signal, char *msg);
  2058. extern void syserr_printf(struct session *ses, char *fmt, ...);
  2059. #endif
  2060. #ifndef __MCCP_H__
  2061. #define __MCCP_H__
  2062. void *zlib_alloc(void *opaque, unsigned int items, unsigned int size);
  2063. void zlib_free(void *opaque, void *address);
  2064. #endif
  2065. #ifndef __MEMORY_H__
  2066. #define __MEMORY_H__
  2067. extern char *restring(char *point, char *string);
  2068. extern char *restringf(char *point, char *fmt, ...);
  2069. extern void init_memory(void);
  2070. extern struct str_data *get_str_ptr(char *str);
  2071. extern char *get_str_str(struct str_data *str_ptr);
  2072. extern int str_len(char *str);
  2073. extern int str_max(char *str);
  2074. extern int str_fix(char *str);
  2075. extern char *str_alloc(int len);
  2076. extern void str_free(char *ptr);
  2077. extern char *str_mim(char *original);
  2078. extern char *str_dup(char *original);
  2079. extern char *str_dup_clone(char *original);
  2080. extern char *str_dup_printf(char *fmt, ...);
  2081. extern char *str_ndup(char *original, int len);
  2082. extern char *str_resize(char **ptr, int add);
  2083. extern void str_clone(char **clone, char *original);
  2084. extern char *str_cpy(char **ptr, char *str);
  2085. extern char *str_cpy_printf(char **ptr, char *fmt, ...);
  2086. extern char *str_ncpy(char **ptr, char *str, int len);
  2087. extern char *str_cat_len(char **str, char *arg, int len);
  2088. extern char *str_cat(char **str, char *arg);
  2089. extern char *str_cat_chr(char **ptr, char chr);
  2090. extern char *str_cat_printf(char **str, char *fmt, ...);
  2091. extern char *str_cap(char **str, int index, char *buf);
  2092. extern char *str_ins(char **str, int index, char *buf);
  2093. extern char *str_ins_printf(char **str, int index, char *fmt, ...);
  2094. extern char *str_mov(char **str, int dst, int src);
  2095. extern char *str_alloc_stack(int size);
  2096. #endif
  2097. #ifndef __MISC_H__
  2098. #define __MISC_H__
  2099. extern DO_COMMAND(do_end);
  2100. extern DO_COMMAND(do_nop);
  2101. extern DO_COMMAND(do_test);
  2102. #endif
  2103. #ifndef __MSDP_H__
  2104. #define __MSDP_H__
  2105. extern void init_msdp_table(void);
  2106. extern int msdp_find(char *var);
  2107. extern void arachnos_devel(struct session *ses, char *fmt, ...);
  2108. extern void arachnos_mudlist(struct session *ses, char *fmt, ...);
  2109. extern void msdp_update_all(char *var, char *fmt, ...);
  2110. extern void msdp_update_var(struct session *ses, struct port_data *buddy, char *var, char *str);
  2111. extern void msdp_update_varf(struct session *ses, struct port_data *buddy, char *var, char *fmt, ...);
  2112. extern void msdp_update_var_instant(struct session *ses, struct port_data *buddy, char *var, char *fmt, ...);
  2113. extern void msdp_send_update(struct session *ses, struct port_data *buddy);
  2114. extern char *msdp_get_var(struct session *ses, struct port_data *buddy, char *var);
  2115. extern void process_msdp_varval(struct session *ses, struct port_data *buddy, char *var, char *val );
  2116. extern void msdp_command_list(struct session *ses, struct port_data *buddy, int index);
  2117. extern void msdp_command_report(struct session *ses, struct port_data *buddy, int index);
  2118. extern void msdp_command_reset(struct session *ses, struct port_data *buddy, int index);
  2119. extern void msdp_command_send(struct session *ses, struct port_data *buddy, int index);
  2120. extern void msdp_command_unreport(struct session *ses, struct port_data *buddy, int index);
  2121. extern void msdp_configure_arachnos(struct session *ses, struct port_data *buddy, int index);
  2122. extern void write_msdp_to_descriptor(struct session *ses, struct port_data *buddy, char *src, int length);
  2123. extern int msdp2json(unsigned char *src, int srclen, char *out);
  2124. extern int json2msdp(unsigned char *src, int srclen, char *out);
  2125. extern int tintin2msdp(char *src, char *out);
  2126. extern void arachnos_devel(struct session *ses, char *fmt, ...);
  2127. extern void arachnos_mudlist(struct session *ses, char *fmt, ...);
  2128. extern struct msdp_type msdp_table[];
  2129. #endif
  2130. #ifndef __NEST_H__
  2131. #define __NEST_H__
  2132. extern struct listroot *search_nest_base_ses(struct session *ses, char *arg);
  2133. extern struct listroot *search_nest_root(struct listroot *root, char *arg);
  2134. extern struct listnode *search_base_node(struct listroot *root, char *variable);
  2135. extern struct listnode *search_nest_node(struct listroot *root, char *variable);
  2136. extern struct listnode *search_nest_node_ses(struct session *ses, char *variable);
  2137. extern int search_nest_index(struct listroot *root, char *variable);
  2138. extern struct listroot *update_nest_root(struct listroot *root, char *arg);
  2139. extern void update_nest_node(struct listroot *root, char *arg);
  2140. extern int delete_nest_node(struct listroot *root, char *variable);
  2141. extern int get_nest_size_key(struct listroot *root, char *variable, char **result);
  2142. extern int get_nest_size_val(struct listroot *root, char *variable, char **result);
  2143. extern struct listnode *get_nest_node_key(struct listroot *root, char *variable, char **result, int def);
  2144. extern struct listnode *get_nest_node_val(struct listroot *root, char *variable, char **result, int def);
  2145. extern int get_nest_index(struct listroot *root, char *variable, char **result, int def);
  2146. extern void show_nest_node(struct listnode *node, char **result, int initialize);
  2147. extern void view_nest_node(struct listnode *node, char **str_result, int nest, int initialize, int color);
  2148. extern struct listnode *set_nest_node_ses(struct session *ses, char *arg1, char *format, ...);
  2149. extern struct listnode *add_nest_node_ses(struct session *ses, char *arg1, char *format, ...);
  2150. extern struct listnode *set_nest_node(struct listroot *root, char *arg1, char *format, ...);
  2151. extern struct listnode *add_nest_node(struct listroot *root, char *arg1, char *format, ...);
  2152. extern void copy_nest_node(struct listroot *dst_root, struct listnode *dst, struct listnode *src);
  2153. #endif
  2154. #ifndef __NET_H__
  2155. #define __NET_H__
  2156. extern int connect_mud(struct session *ses, char *host, char *port);
  2157. extern void write_line_mud(struct session *ses, char *line, int size);
  2158. extern int read_buffer_mud(struct session *ses);
  2159. extern void readmud(struct session *ses);
  2160. extern void process_mud_output(struct session *ses, char *linebuf, int prompt);
  2161. #endif
  2162. #ifndef __PARSE_H__
  2163. #define __PARSE_H__
  2164. extern int is_abbrev(char *str1, char *str2);
  2165. extern int is_member(char *str1, char *str2);
  2166. extern int is_vowel(char *str);
  2167. extern void filename_string(char *input, char *output);
  2168. extern struct session *execute(struct session *ses, char *format, ...);
  2169. extern struct session *command(struct session *ses, COMMAND *cmd, char *format, ...);
  2170. extern struct session *parse_input(struct session *ses, char *input);
  2171. extern struct session *parse_command(struct session *ses, char *input);
  2172. extern int is_speedwalk(struct session *ses, char *input);
  2173. extern char *substitute_speedwalk(struct session *ses, char *input, char *output);
  2174. extern void process_speedwalk(struct session *ses, char *input);
  2175. extern struct session *parse_tintin_command(struct session *ses, char *input);
  2176. extern int cnt_arg_all(struct session *ses, char *string, int flag);
  2177. extern char *get_arg_all(struct session *ses, char *string, char *result, int verbatim);
  2178. extern char *sub_arg_all(struct session *ses, char *string, char *result, int verbatim, int sub);
  2179. extern char *get_arg_in_braces(struct session *ses, char *string, char *result, int flag);
  2180. extern char *sub_arg_in_braces(struct session *ses, char *string, char *result, int flag, int sub);
  2181. extern char *get_arg_with_spaces(struct session *ses, char *string, char *result, int flag);
  2182. extern char *get_arg_stop_spaces(struct session *ses, char *string, char *result, int flag);
  2183. extern char *sub_arg_stop_spaces(struct session *ses, char *string, char *result, int flag, int sub);
  2184. extern char *get_arg_stop_digits(struct session *ses, char *string, char *result, int flag);
  2185. extern char *space_out(char *string);
  2186. extern char *get_arg_to_brackets(struct session *ses, char *string, char *result);
  2187. extern char *get_arg_at_brackets(struct session *ses, char *string, char *result);
  2188. extern char *get_arg_in_brackets(struct session *ses, char *string, char *result);
  2189. extern char *get_char(struct session *ses, char *string, char *result);
  2190. extern void write_mud(struct session *ses, char *command, int flags);
  2191. extern void do_one_line(char *line, struct session *ses);
  2192. #endif
  2193. #ifndef __PATH_H__
  2194. #define __PATH_H__
  2195. extern DO_COMMAND(do_pathdir);
  2196. int is_pathdir(struct session *ses, char *dir);
  2197. int exit_to_dir(struct session *ses, char *name);
  2198. unsigned char pdir(struct listnode *node);
  2199. char *dir_to_exit(struct session *ses, int dir);
  2200. extern void check_append_path(struct session *ses, char *forward, char *backward, float delay, int force, int follow);
  2201. extern DO_PATH(path_create);
  2202. extern DO_PATH(path_describe);
  2203. extern DO_PATH(path_delete);
  2204. extern DO_PATH(path_destroy);
  2205. extern DO_PATH(path_get);
  2206. extern DO_PATH(path_goto);
  2207. extern DO_PATH(path_insert);
  2208. extern DO_PATH(path_load);
  2209. extern DO_PATH(path_map);
  2210. extern DO_PATH(path_move);
  2211. extern DO_PATH(path_run);
  2212. extern DO_PATH(path_save);
  2213. extern DO_PATH(path_start);
  2214. extern DO_PATH(path_stop);
  2215. extern DO_PATH(path_swap);
  2216. extern DO_PATH(path_undo);
  2217. extern DO_PATH(path_unzip);
  2218. extern DO_PATH(path_walk);
  2219. extern DO_PATH(path_zip);
  2220. // old
  2221. extern DO_PATH(path_new);
  2222. extern DO_PATH(path_end);
  2223. #endif
  2224. #ifndef __PORT_H__
  2225. #define __PORT_H__
  2226. extern DO_PORT(port_call);
  2227. extern DO_PORT(port_color);
  2228. extern DO_PORT(port_flag);
  2229. extern DO_PORT(port_group);
  2230. extern DO_PORT(port_ignore);
  2231. extern DO_PORT(port_initialize);
  2232. extern DO_PORT(port_info);
  2233. extern DO_PORT(port_message);
  2234. extern DO_PORT(port_name);
  2235. extern DO_PORT(port_prefix);
  2236. extern DO_PORT(port_proxy);
  2237. extern DO_PORT(port_rank);
  2238. extern DO_PORT(port_send);
  2239. extern DO_PORT(port_uninitialize);
  2240. extern DO_PORT(port_who);
  2241. extern DO_PORT(port_zap);
  2242. extern int port_new(struct session *ses, int s);
  2243. extern void close_port(struct session *ses, struct port_data *buddy, int unlink);
  2244. extern void process_port_connections(struct session *ses, fd_set *read_set, fd_set *write_set, fd_set *exc_set);
  2245. extern void port_forward_session(struct session *ses, char *linelog);
  2246. extern void port_socket_printf(struct session *ses, struct port_data *buddy, char *format, ...);
  2247. extern void port_telnet_printf(struct session *ses, struct port_data *buddy, size_t length, char *format, ...);
  2248. extern void port_log_printf(struct session *ses, struct port_data *buddy, char *format, ...);
  2249. extern void port_printf(struct session *ses, char *format, ...);
  2250. extern int process_port_input(struct session *ses, struct port_data *buddy);
  2251. extern void get_port_commands(struct session *ses, struct port_data *buddy, char *buf, int len);
  2252. extern void port_name_change(struct session *ses, struct port_data *buddy, char *txt);
  2253. extern void port_receive_message(struct session *ses, struct port_data *buddy, char *txt);
  2254. extern void port_puts(struct session *ses, char *arg);
  2255. extern struct port_data *find_port_buddy(struct session *ses, char *arg);
  2256. extern struct port_data *find_port_group(struct session *ses, char *arg);
  2257. #endif
  2258. #ifndef __SCREEN_H__
  2259. #define __SCREEN_H__
  2260. extern DO_COMMAND(do_screen);
  2261. extern void init_inputregion(struct session *ses, int top_row, int top_col, int bot_row, int bot_col);
  2262. extern int get_row_index(struct session *ses, int val);
  2263. extern int get_col_index(struct session *ses, int val);
  2264. extern int get_row_index_arg(struct session *ses, char *arg);
  2265. extern int get_col_index_arg(struct session *ses, char *arg);
  2266. extern void csip_handler(int var1, int var2, int var3);
  2267. extern void csit_handler(int var1, int var2, int var3);
  2268. extern void rqlp_handler(int event, int button, int row, int col);
  2269. extern void osc_handler(char ind, char *arg);
  2270. extern void erase_scroll_region(struct session *ses);
  2271. extern void erase_input_region(struct session *ses);
  2272. extern void erase_split_region(struct session *ses);
  2273. extern void erase_bot_region(struct session *ses);
  2274. extern void erase_top_region(struct session *ses);
  2275. extern void erase_left_region(struct session *ses);
  2276. extern void erase_right_region(struct session *ses);
  2277. extern void erase_square(struct session *ses, int top_row, int top_col, int bot_row, int bot_col);
  2278. extern void fill_top_region(struct session *ses, char *arg);
  2279. extern void fill_bot_region(struct session *ses, char *arg);
  2280. extern void fill_left_region(struct session *ses, char *arg);
  2281. extern void fill_right_region(struct session *ses, char *arg);
  2282. extern void fill_split_region(struct session *ses, char *arg);
  2283. extern int inside_scroll_region(struct session *ses, int row, int col);
  2284. extern void add_row_index(struct row_data **row, int index);
  2285. extern void del_row_index(struct row_data **row, int index);
  2286. extern void print_scroll_region(struct session *ses);
  2287. extern void print_screen();
  2288. extern void init_screen(int rows, int cols, int pix_rows, int pix_cols);
  2289. extern void destroy_screen();
  2290. extern int inside_scroll_region(struct session *ses, int row, int col);
  2291. extern void set_grid_screen(struct session *ses, char *str, int row, int col);
  2292. extern void add_line_screen(struct session *ses, char *str, int row);
  2293. extern void set_line_screen(struct session *ses, char *ins, int row, int col);
  2294. extern void get_line_screen(char *str, int row);
  2295. extern int get_link_screen(struct session *ses, char *var, char *val, int flags, int row, int col);
  2296. extern void get_word_screen(char *str, int row, int col);
  2297. #endif
  2298. #ifndef __SESSION_H__
  2299. #define __SESSION_H__
  2300. extern DO_COMMAND(do_session);
  2301. extern DO_COMMAND(do_snoop);
  2302. extern DO_COMMAND(do_zap);
  2303. extern struct session *session_command(char *arg, struct session *ses);
  2304. extern struct session *find_session(char *name);
  2305. extern struct session *newactive_session(void);
  2306. extern struct session *activate_session(struct session *ses);
  2307. extern struct session *new_session(struct session *ses, char *name, char *address, int desc, int ssl);
  2308. extern struct session *connect_session(struct session *ses);
  2309. extern void cleanup_session(struct session *ses);
  2310. extern void dispose_session(struct session *ses);
  2311. #endif
  2312. #ifndef __SHOW_H__
  2313. #define __SHOW_H__
  2314. extern void show_message(struct session *ses, int index, char *format, ...);
  2315. extern void show_error(struct session *ses, int index, char *format, ...);
  2316. extern void show_debug(struct session *ses, int index, char *format, ...);
  2317. extern void show_info(struct session *ses, int index, char *format, ...);
  2318. extern void print_lines(struct session *ses, int flags, char *format, ...);
  2319. extern void show_lines(struct session *ses, char *str);
  2320. extern void tintin_header(struct session *ses, int width, char *format, ...);
  2321. extern void socket_printf(struct session *ses, size_t length, char *format, ...);
  2322. extern void telnet_printf(struct session *ses, int length, char *format, ...);
  2323. extern void tintin_printf2(struct session *ses, char *format, ...);
  2324. extern void tintin_printf(struct session *ses, char *format, ...);
  2325. extern void tintin_puts3(struct session *ses, char *string, int prompt);
  2326. extern void tintin_puts2(struct session *ses, char *string);
  2327. extern void tintin_puts(struct session *ses, char *string);
  2328. #endif
  2329. #ifndef __SORT_H__
  2330. #define __SORT_H__
  2331. extern void quadsort(void *array, size_t nmemb, size_t size, CMPFUNC *cmp);
  2332. extern int cmp_int(const void * a, const void * b);
  2333. extern int cmp_str(const void * a, const void * b);
  2334. extern int cmp_num(const void * a, const void * b);
  2335. #endif
  2336. #ifndef __SPLIT_H__
  2337. #define __SPLIT_H__
  2338. extern DO_COMMAND(do_split);
  2339. extern DO_COMMAND(do_unsplit);
  2340. extern void init_split(struct session *ses, int top, int bot, int left, int right);
  2341. extern void reset_screen(struct session *ses);
  2342. extern void dirty_screen(struct session *ses);
  2343. extern void split_show(struct session *ses, char *prompt, char *row, char *col);
  2344. #endif
  2345. #ifndef __SSL_H__
  2346. #define __SSL_H__
  2347. extern gnutls_session_t ssl_negotiate(struct session *ses);
  2348. #endif
  2349. #ifndef __STRING_H__
  2350. #define __STRING_H__
  2351. extern int get_raw_len_str_range_str_width(struct session *ses, char *str, int start, int end, int *raw_width);
  2352. extern int get_raw_off_str_range_raw_width(struct session *ses, char *str, int start, int end, int *raw_width);
  2353. extern int raw_len_str(struct session *ses, char *str, int start, int end);
  2354. extern int str_len_raw(struct session *ses, char *str, int start, int end);
  2355. extern char *str_ins_str(struct session *ses, char **str, char *ins, int str_start, int str_end);
  2356. extern char *calign(struct session *ses, char *in, char *out, int width);
  2357. extern char *lalign(struct session *ses, char *in, char *out, int width);
  2358. extern char *ralign(struct session *ses, char *in, char *out, int width);
  2359. extern char *ualign(struct session *ses, char *in, char *out, int width);
  2360. extern char char_cmp(char left, char right);
  2361. extern char is_alnum(char input);
  2362. extern char is_alpha(char input);
  2363. extern char is_digit(char input);
  2364. extern char is_hex(char input);
  2365. extern char is_print(char input);
  2366. extern char is_space(char input);
  2367. extern char is_varchar(char input);
  2368. extern char is_csichar(char input);
  2369. #endif
  2370. #ifndef __SUBSTITUTE_H__
  2371. #define __SUBSTITUTE_H__
  2372. extern int valid_escape(struct session *ses, char *arg);
  2373. extern char *fuzzy_color_code(struct session *ses, char *pti);
  2374. extern char *dim_color_code(struct session *ses, char *pti, int mod);
  2375. extern char *lit_color_code(struct session *ses, char *pti, int mod);
  2376. extern int color_gradient(char *pti, int low, int max);
  2377. extern int is_color_code(char *str);
  2378. extern int is_color_name(char *str);
  2379. extern int substitute_color(char *input, char *output, int colors);
  2380. #endif
  2381. #ifndef __SYSTEM_H__
  2382. #define __SYSTEM_H__
  2383. extern DO_COMMAND(do_suspend);
  2384. #endif
  2385. #ifndef __TABLES_H__
  2386. #define __TABLES_H__
  2387. extern struct buffer_type buffer_table[];
  2388. extern struct charset_type charset_table[];
  2389. extern struct chat_type chat_table[];
  2390. extern char character_table[];
  2391. extern struct color_type color_table[];
  2392. extern struct color_type map_color_table[];
  2393. extern struct config_type config_table[];
  2394. extern struct cursor_type cursor_table[];
  2395. extern struct daemon_type daemon_table[];
  2396. extern struct edit_type edit_table[];
  2397. extern struct event_type event_table[];
  2398. extern struct history_type history_table[];
  2399. extern struct line_type line_table[];
  2400. extern struct list_type list_table[LIST_MAX];
  2401. extern struct map_type map_table[];
  2402. extern struct path_type path_table[];
  2403. extern struct port_type port_table[];
  2404. extern struct rank_type rank_table[];
  2405. extern struct stamp_type huge_stamp_table[];
  2406. extern struct substitution_type substitution_table[];
  2407. extern struct telopt_type telopt_table[];
  2408. extern char *telcmds[];
  2409. extern struct timer_type timer_table[];
  2410. extern struct map_legend_type map_legend_table[];
  2411. extern struct map_legend_group_type map_legend_group_table[];
  2412. #endif
  2413. #ifndef __TELOPT_H__
  2414. #define __TELOPT_H__
  2415. extern int client_translate_telopts(struct session *ses, unsigned char *src, int cplen);
  2416. extern int client_write_compressed(struct session *ses, char *txt, int length);
  2417. extern int client_send_sb_naws(struct session *ses, int cplen, unsigned char *cpsrc);
  2418. extern void announce_support(struct session *ses, struct port_data *buddy);
  2419. extern int server_translate_telopts(struct session *ses, struct port_data *buddy, unsigned char *src, int srclen, unsigned char *out, int outlen);
  2420. extern void write_mccp2(struct session *ses, struct port_data *buddy, char *txt, int length);
  2421. extern void client_end_mccp2(struct session *ses);
  2422. extern void end_mccp2(struct session *ses, struct port_data *buddy);
  2423. extern void client_end_mccp3(struct session *ses);
  2424. extern void end_mccp3(struct session *ses, struct port_data *buddy);
  2425. extern void init_msdp_table(void);
  2426. #endif
  2427. #ifndef __TERMINAL_H__
  2428. #define __TERMINAL_H__
  2429. extern void init_terminal(struct session *ses);
  2430. extern void reset_terminal(struct session *ses);
  2431. extern void save_session_terminal(struct session *ses);
  2432. extern void refresh_session_terminal(struct session *ses);
  2433. extern void echo_on(struct session *ses);
  2434. extern void echo_off(struct session *ses);
  2435. extern void init_terminal_size(struct session *ses);
  2436. extern int get_scroll_rows(struct session *ses);
  2437. extern int get_scroll_cols(struct session *ses);
  2438. extern char *get_charset(struct session *ses);
  2439. #endif
  2440. #ifndef __TEXT_H__
  2441. #define __TEXT_H__
  2442. extern void print_line(struct session *ses, char **str, int isaprompt);
  2443. extern void print_stdout(int row, int col, char *format, ...);
  2444. extern int word_wrap(struct session *ses, char *textin, char *textout, int display, int *height, int *width);
  2445. extern int word_wrap_split(struct session *ses, char *textin, char *textout, int wrap, int start, int end, int flags, int *height, int *width);
  2446. #endif
  2447. #ifndef __TINEXP_H__
  2448. #define __TINEXP_H__
  2449. DO_COMMAND(do_regexp);
  2450. extern int substitute(struct session *ses, char *string, char *result, int flags);
  2451. extern int match(struct session *ses, char *str, char *exp, int flags);
  2452. extern int find(struct session *ses, char *str, char *exp, int sub, int flag);
  2453. extern int regexp_compare(struct session *ses, pcre *regex, char *str, char *exp, int option, int flag);
  2454. extern int check_one_regexp(struct session *ses, struct listnode *node, char *line, char *original, int option);
  2455. extern int tintin_regexp_check(struct session *ses, char *exp);
  2456. extern int tintin_regexp(struct session *ses, pcre *pcre, char *str, char *exp, int option, int flag);
  2457. extern pcre *regexp_compile(struct session *ses, char *exp, int option);
  2458. extern pcre *tintin_regexp_compile(struct session *ses, struct listnode *node, char *exp, int option);
  2459. extern void tintin_macro_compile(char *input, char *output);
  2460. #endif
  2461. #ifndef __TOKENIZE_H__
  2462. #define __TOKENIZE_H__
  2463. extern void init_local(struct session *ses);
  2464. extern struct scriptroot *push_script_stack(struct session *ses, int list);
  2465. extern void pop_script_stack();
  2466. extern struct listroot *local_list(struct session *ses);
  2467. extern struct session *script_driver(struct session *ses, int list, char *str);
  2468. extern char *view_script(struct session *ses, struct scriptroot *root);
  2469. extern char *script_writer(struct session *ses, char *str);
  2470. extern char *script_viewer(struct session *ses, char *str);
  2471. #endif
  2472. #ifndef __TRIGGER_H__
  2473. #define __TRIGGER_H__
  2474. extern DO_COMMAND(do_delay);
  2475. extern void check_all_actions(struct session *ses, char *original, char *line, char *buf);
  2476. extern int check_all_aliases(struct session *ses, char *input);
  2477. extern void check_all_buttons(struct session *ses, short row, short col, char *arg1, char *arg2, char *word, char *line);
  2478. extern void check_all_gags(struct session *ses, char *original, char *line);
  2479. extern void check_all_highlights(struct session *ses, char *original, char *line);
  2480. extern int check_all_prompts(struct session *ses, char *original, char *line);
  2481. extern void check_all_substitutions(struct session *ses, char *original, char *line);
  2482. #endif
  2483. // update.c
  2484. extern void mainloop(void);
  2485. extern void show_cpu(struct session *ses);
  2486. #ifndef __UTILS_H__
  2487. #define __UTILS_H__
  2488. extern int is_number(char *str);
  2489. extern unsigned long long hex_number_64bit(char *str);
  2490. extern unsigned int hex_number_32bit(char *str);
  2491. extern int hex_number_8bit(char *str);
  2492. extern int oct_number(char *str);
  2493. extern int unicode_8_bit(char *str, char *out);
  2494. extern int unicode_12_bit(char *str, char *out);
  2495. extern int unicode_16_bit(char *str, char *out);
  2496. extern int unicode_20_bit(char *str, char *out);
  2497. extern int unicode_21_bit(char *str, char *out);
  2498. extern unsigned long long utime(void);
  2499. extern time_t get_time(struct session *ses, char *str);
  2500. extern char *str_time(struct session *ses, char *format, time_t time);
  2501. extern unsigned long long generate_rand(struct session *ses);
  2502. extern void seed_rand(struct session *ses, unsigned long long seed);
  2503. extern char *capitalize(char *str);
  2504. extern char *ftos(float number);
  2505. extern char *ntos(long long number);
  2506. extern char *indent_one(int len);
  2507. extern char *indent(int len);
  2508. extern int cat_sprintf(char *dest, char *fmt, ...);
  2509. extern void ins_sprintf(char *dest, char *fmt, ...);
  2510. extern char *str_ins_printf(char **str, int index, char *fmt, ...);
  2511. extern int is_suffix(char *str1, char *str2);
  2512. #endif
  2513. #ifndef __UTF8_H__
  2514. #define __UTF8_H__
  2515. extern void big5toutf8_info(struct session *ses);
  2516. extern void utf8tobig5_info(struct session *ses);
  2517. extern int get_ascii_width(char *str, int *width);
  2518. extern int is_utf8_head(char *str);
  2519. extern int is_utf8_tail(char *str);
  2520. extern int get_utf8_size(char *str);
  2521. extern int get_utf8_width(char *str, int *width, int *index);
  2522. extern int get_utf8_index(char *str, int *index);
  2523. extern int unicode_to_utf8(int index, char *out);
  2524. extern int utf8_strlen(char *str, int *width);
  2525. extern int utf8_to_all(struct session *ses, char *in, char *out);
  2526. extern int all_to_utf8(struct session *ses, char *in, char *out);
  2527. extern int cp1251_to_utf8(char *input, char *output);
  2528. extern int utf8_to_cp1251(char *input, char *output);
  2529. extern int iso1_to_utf8(char *input, char *output);
  2530. extern int utf8_to_iso1(char *input, char *output);
  2531. extern int iso2_to_utf8(char *input, char *output);
  2532. extern int utf8_to_iso2(char *input, char *output);
  2533. extern int koi8_to_utf8(char *input, char *output);
  2534. extern int utf8_to_koi8(char *input, char *output);
  2535. extern int fansi_to_utf8(char *input, char *output);
  2536. extern int is_euc_head(struct session *ses, char *str);
  2537. extern int get_euc_size(struct session *ses, char *str);
  2538. extern int get_euc_width(struct session *ses, char *str, int *width);
  2539. extern int is_big5(char *str);
  2540. extern int big5_to_utf8(char *input, char *output);
  2541. extern int utf8_to_big5(char *input, char *output);
  2542. extern int is_gbk1(char *str);
  2543. extern int gbk1_to_utf8(char *input, char *output);
  2544. extern int utf8_to_gbk1(char *input, char *output);
  2545. extern int is_cp949(char *str);
  2546. extern int cp949_to_utf8(char *input, char *output);
  2547. extern int utf8_to_cp949(char *input, char *output);
  2548. #endif
  2549. #ifndef __VARIABLE_H__
  2550. #define __VARIABLE_H__
  2551. extern int valid_variable(struct session *ses, char *arg);
  2552. extern int string_raw_str_len(struct session *ses, char *str, int start, int end);
  2553. extern int string_str_raw_len(struct session *ses, char *str, int start, int end);
  2554. extern int translate_color_names(struct session *ses, char *string, char *result);
  2555. extern int get_color_names(struct session *ses, char *htype, char *result);
  2556. extern void lowerstring(char *str);
  2557. extern void upperstring(char *str);
  2558. extern void numbertocharacter(struct session *ses, char *str);
  2559. extern void charactertonumber(struct session *ses, char *str);
  2560. extern int delete_variable(struct session *ses, char *variable);
  2561. extern void justify_string(struct session *ses, char *in, char *out, int align, int cut);
  2562. extern void format_string(struct session *ses, char *format, char *arg, char *out);
  2563. extern struct listnode *search_variable(struct session *ses, char *variable);
  2564. extern struct listnode *get_variable(struct session *ses, char *variable, char *result);
  2565. extern struct listnode *set_variable(struct session *ses, char *variable, char *format, ...);
  2566. #endif
  2567. #ifndef __VT102_H__
  2568. #define __VT102_H__
  2569. extern void init_pos(struct session *ses, int row, int col);
  2570. extern void hide_cursor(struct session *ses);
  2571. extern void show_cursor(struct session *ses);
  2572. extern void save_pos(struct session *ses);
  2573. extern void goto_pos(struct session *ses, int row, int col);
  2574. extern void restore_pos(struct session *ses);
  2575. extern void erase_cols(int cnt);
  2576. extern void erase_scroll_region(struct session *ses);
  2577. extern void reset(struct session *ses);
  2578. extern void scroll_region(struct session *ses, int top, int bottom);
  2579. extern void reset_scroll_region(struct session *ses);
  2580. extern int find_color_code(char *str);
  2581. extern int find_escaped_color_code(char *str);
  2582. extern int find_secure_color_code(char *str);
  2583. extern int get_vt102_width(struct session *ses, char *str, int *width);
  2584. extern int strip_vt102_width(struct session *ses, char *str, int *width);
  2585. extern int skip_vt102_codes(char *str);
  2586. extern int skip_vt102_codes_non_graph(char *str);
  2587. extern int strip_vt102_codes(char *str, char *buf);
  2588. extern void strip_vt102_codes_non_graph(char *str, char *buf);
  2589. extern void strip_non_vt102_codes(char *str, char *buf);
  2590. extern void get_color_codes(char *old, char *str, char *buf, int flags);
  2591. extern int strip_vt102_strlen(struct session *ses, char *str);
  2592. extern int strip_color_strlen(struct session *ses, char *str);
  2593. extern char *strip_vt102_strstr(char *str, char *buf, int *len);
  2594. extern int interpret_vt102_codes(struct session *ses, char *str, int real);
  2595. extern int catch_vt102_codes(struct session *ses, unsigned char *str, int cplen);
  2596. #endif