tintin.h 99 KB

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