home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume35 / mbox / part05 < prev    next >
Text File  |  1993-02-05  |  56KB  |  1,817 lines

  1. Newsgroups: comp.sources.misc
  2. From: Volker.Schuermann@unnet.w.open.de (Volker Schuermann)
  3. Subject: v35i040:  mbox - ix/Mbox, A BBS for UNIX and MINIX v1.6 PL10j7, Part05/15
  4. Message-ID: <1993Feb5.185645.10153@sparky.imd.sterling.com>
  5. X-Md4-Signature: 1aedcbb4ea7abae554007a6a7f64f4f2
  6. Date: Fri, 5 Feb 1993 18:56:45 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: Volker.Schuermann@unnet.w.open.de (Volker Schuermann)
  10. Posting-number: Volume 35, Issue 40
  11. Archive-name: mbox/part05
  12. Environment: MINIX, ISC, ESIX, SVR3
  13. Supersedes: mbox: Volume 31, Issue 16-27
  14.  
  15. #! /bin/sh
  16. # This is a shell archive.  Remove anything before this line, then feed it
  17. # into a shell via "sh file" or similar.  To overwrite existing files,
  18. # type "sh file -c".
  19. # Contents:  src/mbox.english src/tools.c wendy/Makefile
  20. # Wrapped by kent@sparky on Fri Feb  5 12:18:06 1993
  21. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  22. echo If this archive is complete, you will see the following message:
  23. echo '          "shar: End of archive 5 (of 15)."'
  24. if test -f 'src/mbox.english' -a "${1}" != "-c" ; then 
  25.   echo shar: Will not clobber existing file \"'src/mbox.english'\"
  26. else
  27.   echo shar: Extracting \"'src/mbox.english'\" \(25566 characters\)
  28.   sed "s/^X//" >'src/mbox.english' <<'END_OF_FILE'
  29. X/***************************************************************************/
  30. X/*        PROGRAMM  ix/Mbox                           */
  31. X/*             DATEI  MBOX.MSG "english"                   */
  32. X/*        FUNKTIONEN  Landessprachen-abhaengige Text-Zeilen           */
  33. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  34. X/*  LETZTE AENDERUNG  16.01.1993                       */
  35. X/***************************************************************************/
  36. X
  37. X/* ?? SysV.getch.c */
  38. X
  39. X/* admin.c */
  40. X
  41. X#define ADM01_MSG    " Administration (Change User) "
  42. X#define ADM01aMSG    " Administration (Show User) "
  43. X#define ADM02_MSG    "UserID/Username:"
  44. X#define ADM03_MSG    "            User-ID:"
  45. X#define ADM04_MSG    "           Username:"
  46. X#define ADM05_MSG    "           Password:"
  47. X#define ADM06_MSG    "         SH-Account:"
  48. X#define ADM07_MSG    "              Alias:"
  49. X#define ADM08_MSG    "           Hometown:"
  50. X#define ADM09_MSG    "             Street:"
  51. X#define ADM10_MSG    "  Telephone (voice):"
  52. X#define ADM11_MSG    "   Telephone (data):"
  53. X#define ADM12_MSG    "      Date of Birth:"
  54. X#define ADM13_MSG    "           Terminal:"
  55. X#define ADM14_MSG    "             Editor:"
  56. X#define ADM15_MSG    "              Level:"
  57. X#define ADM16_MSG    "               More:"
  58. X#define ADM17_MSG    "               Bell:"
  59. X#define ADM18_MSG    "             Prompt:"
  60. X#define ADM19_MSG    "              Lines:"
  61. X#define ADM20_MSG    "          LastLogin:"
  62. X#define ADM21_MSG    "           LastTime:"
  63. X#define ADM21aMSG    "            Account:"
  64. X#define ADM22_MSG    "             Boards:"
  65. X#define ADM23_MSG    "                SEQ:"
  66. X#define ADM24_MSG    " Administration (Change User) "    
  67. X#define ADM25_MSG    " Administration (Delete User) "
  68. X#define ADM26_MSG    "User-ID"
  69. X#define ADM27_MSG    "Username"
  70. X#define ADM28_MSG    "[DELETE] Really?"
  71. X#define ADM29_MSG    "Which?"
  72. X#define ADM30_MSG    "[ADM] More?"
  73. X#define ADM31_MSG    " Administration (The Revenge of the Sysop) "
  74. X#define ADM32_MSG    "Register User"
  75. X#define ADM33_MSG    "Change User"
  76. X#define ADM34_MSG    "Delete User"
  77. X#define ADM35_MSG    "Show User"
  78. X#define ADM36_MSG    "Show List of Users"
  79. X#define ADM37_MSG    "Back to MBox"
  80. X#define ADM38_MSG    " Administration (Setup) "
  81. X#define ADM39_MSG    "Terminal (ANSI, VT100 etc.)"
  82. X#define ADM40_MSG    "Editor (Textprocessor)"
  83. X#define ADM41_MSG    "Prompt (Id, Board, Rates)"
  84. X#define ADM42_MSG    "Output (Textoutput)"
  85. X#define ADM43_MSG    "Address (Personal Data)"
  86. X#define ADM44_MSG    "Password (To be changed regularly!)"
  87. X#define ADM45_MSG    "Intro (Show State and/or Intro MSG?)"
  88. X#define ADM46_MSG    "Scanner (Date of last login)"
  89. X#define ADM47_MSG    "END (Leave Setup)"
  90. X#define ADM48_MSG    " Administration (Terminal) "
  91. X#define ADM49_MSG    "List-Device"
  92. X#define ADM50_MSG    " Administration (Editor) "
  93. X#define ADM51_MSG    " Administration (Prompt) "
  94. X#define ADM52_MSG    "Time & Signal (BELL)         "
  95. X#define ADM53_MSG    "Time                         "
  96. X#define ADM54_MSG    "Board & Signal (BELL)        "
  97. X#define ADM55_MSG    "Board                        "
  98. X#define ADM56_MSG    "Rates & Signal (BELL)        "
  99. X#define ADM57_MSG    "Rates                        "
  100. X#define ADM58_MSG    " Administration (Textoutput) "
  101. X#define ADM59_MSG    "List continuously (TYPE, CAT)"
  102. X#define ADM60_MSG    "Page (Mark end of page)"
  103. X#define ADM61_MSG    "Page (Don't mark end of page)"
  104. X#define ADM62_MSG    "Reading-Direction (OLD <> NEW)"
  105. X#define ADM63_MSG    "Number of Screen-Lines (State-Line?)"
  106. X#define ADM64_MSG    "Format of Article-\"Header\""
  107. X#define ADM64aMSG    "Boards Survey (Number of Columns)"
  108. X#define ADM64bMSG    "Converting German 'Umlauts'"
  109. X#define ADM65_MSG    "Reading-Direction OLD -> NEW"
  110. X#define ADM66_MSG    "Reading-Direction NEW -> OLD"
  111. X#define ADM67_MSG    "Number of Screen-Lines: 24 (State-Line; ProComm etc.)"
  112. X#define ADM68_MSG    "Number of Screen-Lines: 25 (no State-Line)"
  113. X#define ADM68aMSG    "Number of Screen-Lines: 45 (experimental)"
  114. X#define ADM69_MSG    "Original Article-\"Header\" (Total)"    
  115. X#define ADM70_MSG    "Short Output (Author, Subject, Date)"
  116. X#define ADM70aMSG    "Output in two-column Format"
  117. X#define ADM70bMSG    "Output in three Columns"
  118. X#define ADM70cMSG    "Output in four Columns"
  119. X#define ADM70dMSG    "ISO-8859-1 (Amiga, german Keyboard)"
  120. X#define ADM70eMSG    "IBMs german Charset"
  121. X#define ADM70fMSG    "Converting to Substitutes"
  122. X#define ADM70gMSG    "Don't convert anything"
  123. X#define ADM71_MSG    " Administration (Address) "
  124. X#define ADM72_MSG    "At this point, you are able to change ALL personal data (including your"
  125. X#define ADM73_MSG    "Username). To get permission to send NEWS-Articles and external mails,"
  126. X#define ADM74_MSG    "your name and address have to be specified." 
  127. X#define ADM75_MSG    "If the old entries are still correct, you have to use the <ENTER>-key to"
  128. X#define ADM76_MSG    "leave them uncorrected. Otherwise you may enter the new data."
  129. X#define ADM77_MSG    " Administration (Password) "
  130. X#define ADM78_MSG    "New Password:"
  131. X#define ADM79_MSG    "You have to enter more than four characters!" 
  132. X#define ADM80_MSG    "Again, please:"
  133. X#define ADM81_MSG    "<- not identical!!!"
  134. X#define ADM82_MSG    " Administration (Intro) "
  135. X#define ADM83_MSG    "State & intro message"
  136. X#define ADM84_MSG    "State message"
  137. X#define ADM85_MSG    "Intro message"
  138. X#define ADM86_MSG    "No message"
  139. X#define ADM87_MSG    " Administration (Scanner) "
  140. X#define ADM88_MSG    "Date & time of last login are checked"
  141. X#define ADM89_MSG    "Only date is checked"
  142. X#define ADM90_MSG    "Change date & time"
  143. X#define ADM91_MSG    "Everytime the system was assigned to show \"new\" information, "
  144. X#define ADM92_MSG    "it checks the \"date of your last login\" to find out what is new. This date"
  145. X#define ADM93_MSG    "you may change now. The number of \"new\" articles grows more, if you"
  146. X#define ADM94_MSG    "count back further ..."
  147. X#define ADM95_MSG    "New date:"
  148. X#define ADM96_MSG    "New time:"
  149. X#define ADM97_MSG    "Reorganizing"
  150. X
  151. X
  152. X/* ?? befehl.c */
  153. X
  154. X/* bled.c */
  155. X
  156. X#define BLD01_MSG    "Wrong line."
  157. X#define BLD02_MSG    "Transfer starts. (Cancel with CTRL-X !)"
  158. X#define BLD03_MSG    "Syntax error."
  159. X#define BLD04_MSG    "Commands"
  160. X#define BLD05_MSG    ".l [LINE]|[FROM,TO]    list"
  161. X#define BLD06_MSG    ".L [LINE]|[FROM,TO]    list (don't show line numbers)"
  162. X#define BLD07_MSG    ".i AT                  insert"
  163. X#define BLD08_MSG    ".a                     append (stops insert mode)"
  164. X#define BLD09_MSG    ".c LINE                correct"
  165. X#define BLD10_MSG    ".d [LINE]|[FROM,TO]    delete"    
  166. X#define BLD11_MSG    ".u                     upload (ASCII text)"
  167. X#define BLD12_MSG    ".q                     quit (don't save)"
  168. X#define BLD13_MSG    ".h                     help (long text)"
  169. X#define BLD14_MSG    ".                      save & quit"
  170. X#define BLD15_MSG    "LINE, FROM, TO, AT are legal line numbers."
  171. X#define BLD16_MSG    "Statements in [brackets] are optional. If there"
  172. X#define BLD17_MSG    "are no values specified: AT=1, FROM=1, TO=32000."
  173. X#define BLD18_MSG    "Help"
  174. X#define BLD19_MSG    "Break. File NOT saved."
  175. X#define BLD20_MSG    "Command not known."
  176. X#define BLD21_MSG    "Process terminated. File saved."
  177. X#define BLD22_MSG    "No file specified."    
  178. X#define BLD23_MSG    "Wait a while ..."
  179. X#define BLD24_MSG    "File"
  180. X#define BLD25_MSG    "contains non-ASCII characters."
  181. X#define BLD26_MSG    "New file."
  182. X#define BLD27_MSG    "File contains"
  183. X#define BLD28_MSG    "lines"    
  184. X#define BLD29_MSG    "Problems ..."
  185. X#define BLD30_MSG    "That's all ..."
  186. X
  187. X
  188. X/* control.c */
  189. X
  190. X#define CTL01_MSG    "Error in errorhandler!!!"
  191. X
  192. X
  193. X/* ?? coreleft.c */
  194. X
  195. X/* ?? ctrlx.c */
  196. X
  197. X/* derror.c */
  198. X
  199. X#define DER01_MSG    "ERROR:"
  200. X#define DER02_MSG    "Error:"
  201. X#define DER03_MSG    "break"
  202. X
  203. X
  204. X/* dis.c */
  205. X
  206. X#define DIS01_MSG    " We are involved in the following discussions: "
  207. X#define DIS02_MSG    "Newsgroup/Board                  Subject                Msg-ID     Date"
  208. X#define DIS03_MSG    "No entries at all."
  209. X#define DIS04_MSG    "Maybe this discussion is yet out of date."
  210. X#define DIS05_MSG    "Start at article no."
  211. X#define DIS06_MSG    "Subject"
  212. X
  213. X
  214. X/* games.c */
  215. X
  216. X#define GA01_MSG    " Onlinegames (Some using ANSI Codes) "
  217. X#define GA02_MSG    "[Games] Which?"
  218. X#define GA03_MSG    "<- Ok, don't play!"
  219. X
  220. X
  221. X/* ?? getch.c */
  222. X
  223. X/* ?? getline.c */
  224. X
  225. X/* help.c */
  226. X
  227. X#define HLP01_MSG    " Helpfunctions (For ix/MBox only) "
  228. X
  229. X
  230. X/* intro.c */
  231. X
  232. X#define INT01_MSG    "Organisation:"
  233. X#define INT02_MSG    "BBS-Software:"
  234. X#define INT03_MSG    "Mailbox-Name:"
  235. X#define INT04_MSG    "Choose a terminal:"
  236. X#define INT05_MSG    "1 - ANSI      2 - VT100      3 - VT52      4 - DUMP      5 - COLOR-ANSI"
  237. X#define INT06_MSG    "Terminal?"
  238. X#define INT07_MSG    "---  Your process was terminated  ---"
  239. X#define INT08_MSG    "User"
  240. X#define INT09_MSG    "logged in"
  241. X#define INT10_MSG    "Login"
  242. X#define INT11_MSG    "Initializing"
  243. X#define INT12_MSG    "That's your"
  244. X#define INT13_MSG    "call to this BBS; On"
  245. X#define INT14_MSG    "you were in last"
  246. X#define INT15_MSG    "There are"
  247. X#define INT16_MSG    "boards with new articles and your mailbox contains"
  248. X#define INT17_MSG    "mails"
  249. X#define INT18_MSG    "Hey, todays your birthday ... yet noticed?"
  250. X#define INT19_MSG    "So I wish you a \"Happy Birthday\" !!!"
  251. X#define INT20_MSG    "MERRY XMAS, and best of holidays to you!"
  252. X#define INT21_MSG    "May Santa Claus bring the \"right\" presents ..."
  253. X#define INT22_MSG    ""
  254. X#define INT23_MSG    ""
  255. X#define INT24_MSG    "Puhh ... the year is gone at least ..."
  256. X#define INT25_MSG    "So have a nice new one !!!"
  257. X#define INT26_MSG    "There he is, the"
  258. X#define INT27_MSG    "st caller !!!"
  259. X#define INT28_MSG    "Your account for special access rights will be cancled at"
  260. X#define INT29_MSG    "!"
  261. X#define INT30_MSG    "PAY YOUR BILL AS SOON AS POSSIBLE!"
  262. X
  263. X
  264. X/* lesen2.c */
  265. X
  266. X#define LE201_MSG    "Article"
  267. X#define LE202_MSG    "Article:"
  268. X#define LE203_MSG    "<- Can't find that article!"
  269. X#define LE204_MSG    "<- No new articles in here!"
  270. X#define LE205_MSG    "Directory"
  271. X#define LE206_MSG    "Sorry, no new articles ..."
  272. X#define LE207_MSG    "But there are still"
  273. X#define LE208_MSG    "older entries."
  274. X#define LE209_MSG    "And there ain't no older entries, either."
  275. X#define LE210_MSG     "In this board, there are"
  276. X#define LE211_MSG    "older articles."
  277. X#define LE212_MSG    "In this board, there are no older articles."
  278. X#define LE213_MSG    "<- Can't find that article!"
  279. X#define LE214_MSG    "No corresponding article found ..."
  280. X
  281. X
  282. X/* loop.c */
  283. X
  284. X#define LOP01_MSG    "---  Break  ---"
  285. X#define LOP02_MSG    "---  Your process was terminated  ---"    
  286. X#define LOP03_MSG    "New mail arrived for you ..."
  287. X#define LOP04_MSG    "Cmd:"
  288. X#define LOP05_MSG    " Commandbuffer (1-9) "
  289. X#define LOP06_MSG    "So what?"
  290. X#define LOP07_MSG    "<- No, there couldn't be such stupid users!"
  291. X#define LOP08_MSG    "Commands (At Level"
  292. X#define LOP09_MSG    "Commands (Survey)"
  293. X#define LOP10_MSG    "<- Ridiculous!"
  294. X#define LOP11_MSG    "<- You have to add a command!"
  295. X#define LOP12_MSG    "No help for command"
  296. X#define LOP13_MSG    "available ..."
  297. X#define LOP14_MSG    " Protocol (Calls) "
  298. X#define LOP15_MSG    " Call  User                          Hometown         Terminal  Date      Time"
  299. X#define LOP16_MSG    "No write authorization!"
  300. X#define LOP17_MSG    "Definitions:"
  301. X#define LOP18_MSG    "Date:"
  302. X#define LOP19_MSG    "Time:"    
  303. X#define LOP20_MSG    "Seconds"
  304. X#define LOP21_MSG    "Reading-Directions:"
  305. X#define LOP22_MSG    "New -> Old"
  306. X#define LOP22aMSG    "Old -> New"
  307. X#define LOP23_MSG    " Statistics (NewsSystem) "    
  308. X#define LOP24_MSG    "Date      Time       Boards  Bytes (Bb)     total: Boards  Articles  Bytes (kB)"
  309. X#define LOP25_MSG    " Statistics (UUCP-Rates) "
  310. X#define LOP26_MSG    " Statistics (Download) "
  311. X#define LOP27_MSG    "Date         File                                         CPS     BPS  State"
  312. X#define LOP27aMSG    " Statistics (Mailer XMD) "
  313. X#define LOP27bMSG    "Date   Time    Reciever                        Subject"
  314. X#define LOP28_MSG    "[END] Really?"
  315. X#define LOP29_MSG    "Wait"
  316. X#define LOP30_MSG    "<- Remember, you only have level"
  317. X#define LOP31_MSG    "<- Command not known!"
  318. X#define LOP32_MSG    " Statistics (Download/HITLIST) "
  319. X#define LOP33_MSG    "DNLs   Files"
  320. X#define LOP33aMSG    "Converting 'Umlauts' "
  321. X#define LOP33bMSG    "on"
  322. X#define LOP33cMSG    "off"
  323. X#define LOP34_MSG    " Statistics (Calls per User) "
  324. X#define LOP35_MSG    "Calls    User"
  325. X#define LOP36_MSG    " Any key to stop! "
  326. X
  327. X
  328. X/* mail.c */
  329. X
  330. X#define MAL01_MSG    "You need level"
  331. X#define MAL02_MSG    "to send international mails ..."
  332. X#define MAL03_MSG    "<- No receiver specified!"
  333. X#define MAL04_MSG    "You need level"
  334. X#define MAL05_MSG    "for mailing to external users ..."
  335. X#define MAL06_MSG    "Transmission:"
  336. X#define MAL07_MSG    "<No subject found>"
  337. X#define MAL08_MSG    "Can't find external users address!"
  338. X#define MAL09_MSG    "The user"
  339. X#define MAL10_MSG    "doesn't \"live\" on this host!"
  340. X#define MAL11_MSG    "Mail to"
  341. X#define MAL12_MSG    "W, U, A"
  342. X#define MAL13_MSG    'W'
  343. X#define MAL14_MSG    'U'
  344. X#define MAL15_MSG    'A'
  345. X#define MAL16_MSG    "Write, Upload, reject & Abort"
  346. X#define MAL17_MSG    "[Transfer-Protocol] A, X, Y, Z"
  347. X#define MAL17aMSG    "ASCII (Text), [X-Modem], Y-Modem (Batch), Z-Modem"
  348. X#define MAL18_MSG    'A'
  349. X#define MAL19_MSG    'X'
  350. X#define MAL20_MSG    'Y'
  351. X#define MAL21_MSG    'Z'
  352. X#define MAL22_MSG    "   From:"
  353. X#define MAL23_MSG    "     To:"
  354. X#define MAL23aMSG    "Copy to:"
  355. X#define MAL24_MSG    "Subject:"
  356. X#define MAL25_MSG    "It's not allowed to mail binaries! They will be rejected!"
  357. X#define MAL26_MSG    "Please start transfer now ... cancel with CTRL-X!"
  358. X#define MAL27_MSG    "No mail recieved. Job canceld ..."
  359. X#define MAL28_MSG    "Nothing received!"
  360. X#define MAL28aMSG    "W, A, C, E"
  361. X#define MAL29_MSG    'W'
  362. X#define MAL30_MSG    'A'
  363. X#define MAL30aMSG    'R'
  364. X#define MAL31_MSG    'C'
  365. X#define MAL31aMSG    'E'
  366. X#define MAL32_MSG    "Write & send, Abort, Continue, Edit header"
  367. X#define MAL32aMSG    " Edit Header "
  368. X#define MAL32bMSG    "Receiver"
  369. X#define MAL32cMSG    "unknown!"
  370. X#define MAL33_MSG    "Ok, no mail ..."
  371. X#define MAL34_MSG    "Mail canled!"
  372. X#define MAL35_MSG    "Wait a while ..."
  373. X#define MAL36_MSG    "that's all!"
  374. X#define MAL37_MSG    "sent"
  375. X#define MAL38_MSG    "The current \"hello\" message:"
  376. X#define MAL39_MSG    "[MESSAGE] change?"
  377. X#define MAL40_MSG    "The current signature:"
  378. X#define MAL41_MSG    "[SIGNATURE] change?"
  379. X
  380. X
  381. X/* main.c */
  382. X
  383. X#define MAI01_MSG    "Updating account"
  384. X#define MAI02_MSG    "Connection closed ..."
  385. X#define MAI03_MSG    " Administration (Setup UDBASE) "
  386. X#define MAI04_MSG    "Can't find users DATABASE. Therefore a DATABASE will be established auto-"
  387. X#define MAI05_MSG    "matically. The necessary stuff will be found in 'mbox.h' (have a look there)."
  388. X#define MAI06_MSG    ""
  389. X#define MAI07_MSG    "These new DATABASE has to be checked with the command 'admin', or may be" 
  390. X#define MAI08_MSG    "rebuild by deleting the DATABASE - don't forget to change the entries in" 
  391. X#define MAI09_MSG    "'mbox.h' (read the TUTORIAL)."
  392. X#define MAI10_MSG       "The DATABASE is usable now. Please restart \"ix/Mbox\" ..."
  393. X#define MAI11_MSG    "Bye, bye, ..."
  394. X
  395. X
  396. X/* makro.c */
  397. X
  398. X#define MAK01_MSG    "The following macros are declared:"
  399. X#define MAK02_MSG    "[MACROS] Change?"
  400. X#define MAK03_MSG    "Macro declared."
  401. X#define MAK04_MSG    "<- Error in macro declaration!"
  402. X
  403. X
  404. X/* mb-daemon.c */
  405. X
  406. X#define MBD01_MSG    "New articles"
  407. X#define MBD02_MSG    "Yet scanned articles"
  408. X#define MBD03_MSG    "Today there are"
  409. X#define MBD04_MSG    "new borads with"
  410. X#define MBD05_MSG    "kbytes"
  411. X#define MBD06_MSG    "In total"
  412. X#define MBD07_MSG    "groups there are"
  413. X#define MBD08_MSG    "articles with"
  414. X#define MBD09_MSG    "kbytes"
  415. X
  416. X/* ?? mbrsh.c */
  417. X
  418. X/* misc.c */
  419. X
  420. X#define MIS01_MSG    "<- No new boards available."
  421. X#define MIS02_MSG    "is not a NEWSGROUP!"
  422. X#define MIS02aMSG    "Not allowed! (See: \"Followup-To:\")"
  423. X#define MIS03_MSG    "     From:"
  424. X#define MIS04_MSG    "       To:"    
  425. X#define MIS05_MSG    "  Subject:"
  426. X#define MIS06_MSG    " Keywords:"
  427. X#define MIS07_MSG    "  Summary:"
  428. X#define MIS08_MSG    "W, U, A"
  429. X#define MIS09_MSG    'W'
  430. X#define MIS10_MSG    'U'
  431. X#define MIS11_MSG    'A'
  432. X#define MIS12_MSG    "Write, Upload, reject & Abort"
  433. X#define MIS13_MSG    "[Transfer-Protocol] A, [X], Y, Z"
  434. X#define MIS14_MSG    "ASCII (Text), [X-Modem], Y-Modem (Batch), Z-Modem"
  435. X#define MIS15_MSG    'A'
  436. X#define MIS16_MSG     'X'
  437. X#define MIS17_MSG    'Y'
  438. X#define MIS18_MSG    'Z'
  439. X#define MIS19_MSG    "Please start transfer now ... cancel with CTRL-X!"
  440. X#define MIS20_MSG    "Nothing received, no new article ..."
  441. X#define MIS21_MSG    "Upload hasn't received data!"
  442. X#define MIS22_MSG    "binaryfile"
  443. X#define MIS23_MSG    "textfile"
  444. X#define MIS24_MSG    "bytes of a"
  445. X#define MIS25_MSG    "received"
  446. X#define MIS26_MSG    "The effective transfer-rate was"
  447. X#define MIS27_MSG    "W, A, C"
  448. X#define MIS28_MSG    "W, A"
  449. X#define MIS29_MSG    'W'
  450. X#define MIS30_MSG    'A'
  451. X#define MIS31_MSG    'C'
  452. X#define MIS31aMSG    "E"
  453. X#define MIS32_MSG    "Write & send, Abort, Continue, Edit header"    
  454. X#define MIS33_MSG    "Write & send, Abort, Edit header"
  455. X#define MIS34_MSG    "Writing ..."
  456. X#define MIS35_MSG    "Ok, no new article ..."
  457. X#define MIS36_MSG    "Article rejected!"
  458. X#define MIS37_MSG    "Message to"
  459. X#define MIS38_MSG    "sent"
  460. X#define MIS38aMSG    " Edit Header "
  461. X#define MIS39_MSG    "The new article will be available in 30 seconds."
  462. X#define MIS40_MSG    "<- Options are not allowed ..."
  463. X#define MIS41_MSG    "<- Wrong option  ..."
  464. X#define MIS42_MSG    "Message:"
  465. X#define MIS43_MSG    "Article"
  466. X#define MIS44_MSG    "Message:"
  467. X#define MIS45_MSG    "Personal message"
  468. X#define MIS46_MSG    "A, R, S, D, N, P"
  469. X#define MIS47_MSG    'A'
  470. X#define MIS48_MSG      'R'
  471. X#define MIS49_MSG    'S'
  472. X#define MIS50_MSG    'D'
  473. X#define MIS51_MSG    'N'
  474. X#define MIS52_MSG    'P'
  475. X#define MIS53_MSG    "Abort, Reply, Show again, Delete, Next one, Previous one"
  476. X#define MIS54_MSG    "[DELETE] really?"
  477. X#define MIS55_MSG    "No more new articles in this board!"
  478. X#define MIS56_MSG    "There are no older articles!"
  479. X#define MIS57_MSG    " Reply in progress (Searching path etc. ...) "
  480. X#define MIS58_MSG    "Wait a while ..."
  481. X#define MIS59_MSG    "[REPLY] A, B"
  482. X#define MIS60_MSG    "Send to Author or Board?"
  483. X#define MIS61_MSG    'A'
  484. X#define MIS62_MSG    'B'
  485. X
  486. X
  487. X
  488. X/* misc2.c */
  489. X
  490. X#define MI201_MSG    "<- Wrong option ..."
  491. X#define MI202_MSG    "<- Not with level"
  492. X#define MI203_MSG    "The index will be available in 30 seconds."
  493. X#define MI204_MSG    "Board/Group:"
  494. X#define MI204aMSG    "Description:"
  495. X#define MI204bMSG    "Your personal maildrop"
  496. X#define MI205_MSG    " Boards (Level"
  497. X#define MI206_MSG    "No boards with new articles found ..."
  498. X#define MI207_MSG    "Board"    
  499. X#define MI208_MSG    
  500. X#define MI209_MSG    
  501. X#define MI210_MSG    "<- No access "
  502. X#define MI211_MSG    "Building index"
  503. X
  504. X
  505. X/* nerror.c */
  506. X
  507. X#define NER01_MSG    "ERROR:"
  508. X#define NER02_MSG    "Error:"
  509. X#define NER03_MSG    "break"
  510. X
  511. X
  512. X/* pd.c */
  513. X
  514. X#define PD01_MSG    "Can't list this article. It contains an executable program."
  515. X#define PD02_MSG    "Contents:"
  516. X#define PD03_MSG    "[PROGRAM] Transmit?"
  517. X#define PD04_MSG    
  518. X#define PD05_MSG    
  519. X#define PD06_MSG    'Q'
  520. X#define PD07_MSG    "Transfer-Protocol"
  521. X#define PD08_MSG    'A'
  522. X#define PD09_MSG    'X'
  523. X#define PD10_MSG    'Y'
  524. X#define PD11_MSG    'Z'
  525. X#define PD12_MSG    "ASCII (UUE), X-Modem, Y-Modem, Z-Modem"
  526. X#define PD13_MSG    "Please start transfer now ... cancel with CTRL-X !"
  527. X#define PD14_MSG    "Transfer probably (!) interrupted ..."
  528. X#define PD15_MSG    "bytes transmitted"
  529. X#define PD16_MSG    "The effective transfer-rate was"
  530. X#define PD17_MSG    "BREAK"
  531. X#define PD18_MSG    "State (UserID"
  532. X#define PD19_MSG    "Address                    Alias(es)         Date of Birth    Telephone"
  533. X#define PD20_MSG    "Terminal  Editor  Level  Bell  Prompt  More  Intro   Calls  Last Call"
  534. X#define PD21_MSG    "Onlinetime (min. total)     Bytes (kB Upload)         Bytes (kB Download)"
  535. X#define PD22_MSG    "UUCP-Adresse(es)                                      Accounted until"
  536. X#define PD22aMSG    "Accounted until"
  537. X#define PD23_MSG    "Subnet"
  538. X#define PD24_MSG    "Bang"
  539. X#define PD25_MSG    "Local"
  540. X#define PD26_MSG    "Newsgroup(s)"
  541. X#define PD27_MSG    " Statistics (Login) "
  542. X#define PD28_MSG       "Date         \"Daytime\"  \"Nightshift\"       Total    Diagram"
  543. X#define PD29_MSG    "<Su>"
  544. X#define PD30_MSG    "<Sa>"
  545. X#define PD31_MSG    "Total       "
  546. X#define PD32_MSG    "Diagram"
  547. X#define PD33_MSG    "The line \"Total\" refers to the calls of the last"
  548. X#define PD34_MSG    "days"
  549. X#define PD35_MSG    "Transaktion failed! No such articles located."
  550. X#define PD36_MSG    "Assembling articles. Wait"
  551. X#define PD37_MSG    " Compressing/Archiving Tools "
  552. X#define PD38_MSG    "Which?"
  553. X#define PD39_MSG    "Wait"
  554. X#define PD40_MSG    "NOTE: "
  555. X#define PD41_MSG    "The files have to be packed before compressing!"
  556. X#define PD42_MSG    "The archive"
  557. X#define PD43_MSG    "contains"
  558. X#define PD44_MSG    "Bytes"
  559. X#define PD45_MSG    "Only the articles from"
  560. X#define PD46_MSG    "upto"
  561. X#define PD47_MSG    "have been copied!"
  562. X
  563. X
  564. X/* portinfo.c */
  565. X
  566. X#define POR01_MSG    " Portinfo (external/internal) "
  567. X#define POR02_MSG    "User                             Terminal   Login   Process"
  568. X#define POR03_MSG    "Wait a moment"
  569. X#define POR04_MSG    " Level (Survey) "
  570. X#define POR05_MSG    "Option/Description         required level"
  571. X#define POR06_MSG    "Visitor (Guest) ....................."
  572. X#define POR07_MSG    "Write (internal Mail) ..............."
  573. X#define POR08_MSG    "Write (external Mail) ..............."
  574. X#define POR09_MSG    "Write (NEWS Articles) ..............."
  575. X#define POR10_MSG    "Write (international Mail) .........."
  576. X#define POR11_MSG    "Freeware (Download) ................."
  577. X#define POR12_MSG    "Freeware (Upload) ..................."
  578. X#define POR13_MSG    "OS-Shell ............................"
  579. X#define POR14_MSG    "Administration (Postmaster) ........."
  580. X#define POR15_MSG    "And we are on level"
  581. X#define POR15aMSG    " List of Users "
  582. X#define POR16_MSG    "User                            Last Call      Calls   Online   Level   Account"
  583. X#define POR17_MSG    "Wait a while ..."
  584. X#define POR18_MSG    "User                              Upload       Download      Online"
  585. X#define POR18aMSG    "User                               ID     Account (until)"
  586. X#define POR18bMSG    "User               ID  Level  Newsgroups"
  587. X#define POR19_MSG    "Users with <?> mark should check their accounting-data (something is missing)."
  588. X#define POR20_MSG    "All {-} entries will be deleted at next update."  
  589. X#define POR21_MSG    "Momentary"
  590. X#define POR22_MSG    "users are on this BBS. Thereof"
  591. X#define POR23_MSG    "are regularly active."
  592. X#define POR24_MSG    "And besides"
  593. X#define POR25_MSG    "guests have looked around here."
  594. X#define POR25aMSG    "Informations about the external user"
  595. X#define POR25bMSG    "will be ordered on"
  596. X#define POR25cMSG    "via UUCP"
  597. X#define POR26_MSG    "Look for an answers in your mailbox the next days!"
  598. X#define POR26aMSG    "Illegal DOMAIN-Address!"
  599. X#define POR27_MSG    "User not known."
  600. X#define POR28_MSG    "Userinformation"
  601. X#define POR29_MSG    "       User-ID:"
  602. X#define POR30_MSG    "      Username:"
  603. X#define POR31_MSG    " Shell-Account:"
  604. X#define POR32_MSG    "         Alias:"
  605. X#define POR33_MSG    "      Internet:"
  606. X#define POR34_MSG    "      Hometown:"
  607. X#define POR35_MSG    "        Street:"
  608. X#define POR36_MSG    "     Telephone:"
  609. X#define POR37_MSG    " Date of Birth:"
  610. X#define POR38_MSG    " Calls (total):"
  611. X#define POR39_MSG    "     Last Call:"
  612. X#define POR40_MSG    "   Time Online:"
  613. X#define POR41_MSG    "day(s)"
  614. X#define POR41aMSG    "hour(s)"
  615. X#define POR41bMSG    "minute(s)"
  616. X#define POR41cMSG    " Account until:"
  617. X#define POR42_MSG       "        Upload:"
  618. X#define POR43_MSG    "kByte(s)"
  619. X#define POR44_MSG    "      Download:"
  620. X#define POR45_MSG    "         Mails:"
  621. X
  622. X
  623. X
  624. X/* postfach.c */
  625. X
  626. X#define POS01_MSG    "<- Don't you think that one account is enough ?"
  627. X#define POS02_MSG    
  628. X#define POS03_MSG    "Guest"
  629. X#define POS04_MSG    "User No.1"
  630. X#define POS05_MSG    "User No.2"
  631. X#define POS06_MSG    " Administration (Registration) "
  632. X#define POS07_MSG    "Your personal data will be stored for administrative purpose!"
  633. X#define POS08_MSG    "The sysop can't give any guarantees for the security of your data, because"
  634. X#define POS09_MSG    "this hosts allows shell-accounting, too." 
  635. X#define POS10_MSG    "First name and name (Username=Realname):"
  636. X#define POS11_MSG    "Ok, ok, no account ..."
  637. X#define POS12_MSG    "Checking ... wait a while, please ..."
  638. X#define POS13_MSG    "yet accounted!!!"
  639. X#define POS14_MSG    "                               Password:"
  640. X#define POS15_MSG    "More than four characters!!!"
  641. X#define POS16_MSG    "                  Alias (for UUCP etc.):"
  642. X#define POS17_MSG    "                               Hometown:"
  643. X#define POS18_MSG    "                                 Street:"
  644. X#define POS19_MSG    "                      Telephone (VOICE):"
  645. X#define POS20_MSG    "                       Telephone (DATA):"
  646. X#define POS21_MSG    "                          Date of Birth:"
  647. X#define POS22_MSG    "You now have an account and a maildrop on this host. As soon as your data"
  648. X#define POS23_MSG    "is checked, your \"LEVEL\" will be raised."
  649. X#define POS24_MSG    "New account for"
  650. X#define POS24aMSG    "!You have to 'make world' first!"
  651. X#define POS25_MSG    "Reorganizing"    
  652. X#define POS26_MSG    "New user"
  653. X
  654. X
  655. X/* show.c */
  656. X
  657. X#define SHO01_MSG
  658. X#define SHO02_MSG
  659. X#define SHO03_MSG
  660. X#define SHO04_MSG    "MORE"
  661. X#define SHO05_MSG    "Show again, Abort, Leave or use \"SPACE\"-bar to continue"
  662. X#define SHO06_MSG    'L'
  663. X#define SHO07_MSG    'X'
  664. X#define SHO08_MSG    'Q'
  665. X#define SHO09_MSG    'A'
  666. X#define SHO10_MSG    'S'
  667. X#define SHO11_MSG    "Repetition ..."
  668. X#define SHO12_MSG    "Page"
  669. X
  670. X
  671. X/* suchen.c */
  672. X
  673. X#define SUC01_MSG    "Searchpattern:"
  674. X#define SUC02_MSG    "Ok, don't search!"
  675. X#define SUC03_MSG    "Searching for"
  676. X#define SUC04_MSG    "in"
  677. X#define SUC05_MSG    "Wait a moment"
  678. X#define SUC06_MSG    "No articles including pattern"    
  679. X#define SUC07_MSG    "found."    
  680. X#define SUC07aMSG    "Which article?"
  681. X#define SUC08_MSG    "Your own mail ... WHY ???"
  682. X#define SUC09_MSG    "No permissions!"
  683. X#define SUC10_MSG    "Can't find that!"
  684. X
  685. X
  686. X/* tools.c */
  687. X
  688. X#define TOL01_MSG    "Sunday"
  689. X#define TOL02_MSG    "Monday"
  690. X#define TOL03_MSG    "Tuesday"
  691. X#define TOL04_MSG    "Wednesday"
  692. X#define TOL05_MSG    "Thursday"
  693. X#define TOL06_MSG    "Friday"
  694. X#define TOL07_MSG    "Saturday"
  695. X#define TOL08_MSG    "Wait a moment"
  696. X
  697. X
  698. X/* weiterl.c */
  699. X
  700. X#define WEI01_MSG    "<- No messages stored."
  701. X#define WEI02_MSG    "Stored message(s):"
  702. X#define WEI03_MSG    "Subject:"
  703. X#define WEI04_MSG    "<- Article not found!"
  704. X
  705. X
  706. X/* xmd.c */
  707. X
  708. X#define XMD01_MSG    "Mail from an \"external\" user"
  709. X#define XMD02_MSG    "---------  Message follows  ---------"
  710. X
  711. X
  712. X/*  G L O B A L  */
  713. X
  714. X#define GBL01_MSG    "Author:"
  715. X
  716. X#define GBL02_MSG    "Date:"
  717. X#define GBL03_MSG    "Subject:"
  718. X
  719. X#define GBL04_MSG    "Username:"
  720. X#define GBL05_MSG    "No.   Subject                     Author                Date      Time   Lines"
  721. X
  722. X#define GBL06_MSG    'Y'     /* YES !!!!! */
  723. X#define GBL07_MSG    'N'    /* NO !!!!!! */
  724. X
  725. X#define GBL08_MSG    "No.   Subject                     Author                Date      Time   kBytes"
  726. X#define GBL09_MSG    "Password:"
  727. X
  728. X#define GBL10_MSG    "guest"
  729. END_OF_FILE
  730.   if test 25566 -ne `wc -c <'src/mbox.english'`; then
  731.     echo shar: \"'src/mbox.english'\" unpacked with wrong size!
  732.   fi
  733.   # end of 'src/mbox.english'
  734. fi
  735. if test -f 'src/tools.c' -a "${1}" != "-c" ; then 
  736.   echo shar: Will not clobber existing file \"'src/tools.c'\"
  737. else
  738.   echo shar: Extracting \"'src/tools.c'\" \(24683 characters\)
  739.   sed "s/^X//" >'src/tools.c' <<'END_OF_FILE'
  740. X/***************************************************************************/
  741. X/*        PROGRAMM  ix/Mbox                           */
  742. X/*             DATEI  tools.c                           */
  743. X/*        FUNKTIONEN  whoami(), tty(), stripped(), upcased(), length(),    */
  744. X/*              strcopy(), strcomp(), ansi2(), mydate(), mytime(),   */
  745. X/*                  crypted(), dateconv(), datereconv(), timeconv(),     */
  746. X/*              timereconv(), maybe_locked(), num_stripped(),        */
  747. X/*              rename(), headline(), ttyna(), bigcopy(), mblock(),  */
  748. X/*              mbunlock(), shortname(), clearline(), isin()       */
  749. X/*              termansi(), sgrep()                   */
  750. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  751. X/*  LETZTE AENDERUNG  18.12.1992                       */
  752. X/***************************************************************************/
  753. X
  754. X#include <sys/types.h>
  755. X#include <sys/stat.h>
  756. X#include <stdio.h>
  757. X#include <unistd.h>
  758. X#include <time.h>
  759. X#include <pwd.h>
  760. X
  761. X#ifdef _SYS7
  762. X#include <termcap.h>
  763. X#endif
  764. X
  765. X
  766. X#ifdef _MBOX
  767. X#define EXTERN
  768. X#include "mbox.h"
  769. X#else
  770. X#define VERSION "TOOLS.C"
  771. X#define CR 13
  772. X#define TOL01_MSG    "Sonntag"
  773. X#define TOL02_MSG    "Montag"
  774. X#define TOL03_MSG    "Dienstag"
  775. X#define TOL04_MSG    "Mittwoch"
  776. X#define TOL05_MSG    "Donnerstag"
  777. X#define TOL06_MSG    "Freitag"
  778. X#define TOL07_MSG    "Samstag"
  779. X#define TOL08_MSG    "Momentchen"
  780. X#endif
  781. X#ifdef STRING
  782. X#undef STRING
  783. X#endif
  784. X
  785. X#ifdef LONGSTRING
  786. X#undef LONGSTRING
  787. X#endif
  788. X
  789. X#define STRING 81
  790. X#define LONGSTRING 256
  791. X
  792. Xunsigned char headinfo[STRING];
  793. X
  794. X
  795. X/***************************************************************************/
  796. X/*      FUNKTION  whoami()                           */
  797. X/*  BESCHREIBUNG  Name des eigenen SH-Accounts.                    */
  798. X/*     PARAMETER  keine                                                       */
  799. X/*     RUECKGABE  siehe BESCHREIBUNG                                       */
  800. X/***************************************************************************/
  801. X
  802. Xunsigned char *whoami()
  803. X{
  804. X  struct passwd *pw_entry;
  805. X
  806. X  pw_entry = getpwuid(getuid());
  807. X
  808. X  if (pw_entry->pw_uid < 0) return (unsigned char *) "OOPS";
  809. X
  810. X  return (unsigned char *) (pw_entry->pw_name);
  811. X}
  812. X
  813. X
  814. X
  815. X
  816. X/***************************************************************************/
  817. X/*      FUNKTION  stripped()                           */
  818. X/*  BESCHREIBUNG  STRING von fuehrenden und folgenden Leerzeichen be-      */
  819. X/*          freien.                                                  */
  820. X/*     PARAMETER  st  =  STRING inclusive Leerzeichen                      */
  821. X/*     RUECKGABE  STRING exclusive Leerzeichen                             */
  822. X/***************************************************************************/
  823. X
  824. Xunsigned char *stripped(st)
  825. Xunsigned char st[];
  826. X{
  827. X  static unsigned char s[STRING];
  828. X
  829. X  int i = 0, a = 0, b = 0, c = 0;
  830. X
  831. X  if (st[0] == '\0') return (unsigned char *) '\0';
  832. X  if ((st[0] == 10) || (st[0] == 13)) return (unsigned char *) " ";
  833. X
  834. X  strcpy(s, st);
  835. X
  836. X  while ((s[i] < 33) && (s[i] != '\0')) i++;
  837. X  a = i;
  838. X  while (s[a] != '\0') a++;
  839. X  a--;
  840. X  while (s[a] < 33) a--;
  841. X
  842. X  for (c = i; c <= a; c++) {
  843. X    s[b] = s[c];
  844. X    b++;
  845. X  }
  846. X  s[b] = '\0';
  847. X
  848. X  return (unsigned char *) s;
  849. X}
  850. X
  851. X
  852. X
  853. X
  854. X
  855. X/***************************************************************************/
  856. X/*      FUNKTION  upcased()                           */
  857. X/*  BESCHREIBUNG  Zeichen eines STRING auf Grossbuchstaben umstellen.       */
  858. X/*     PARAMETER  st  =  STRING mit Gross-/Kleinbuchstaben           */
  859. X/*     RUECKGABE  STRING in Grossbuchstaben                                */
  860. X/***************************************************************************/
  861. X
  862. Xunsigned char *upcased(st)
  863. Xunsigned char st[];
  864. X{
  865. X  static unsigned char s[STRING];
  866. X
  867. X  int i = 0;
  868. X
  869. X
  870. X  strcpy(s, st);
  871. X
  872. X  while (s[i] != '\0') {
  873. X    if (s[i] > 96) s[i] -= 32;
  874. X    i++;
  875. X  }
  876. X
  877. X  return (unsigned char *) s;
  878. X}
  879. X
  880. X
  881. X
  882. X
  883. X
  884. X/***************************************************************************/
  885. X/*      FUNKTION  length()                           */
  886. X/*  BESCHREIBUNG  Laenge eines STRING ermitteln (ja, ja, "strlen" ...)       */
  887. X/*     PARAMETER  st  =  STRING                                            */
  888. X/*     RUECKGABE  Laenge des STRING                                        */
  889. X/***************************************************************************/
  890. X
  891. Xint length(st)
  892. Xunsigned char st[];
  893. X{
  894. X  int i = 0;
  895. X
  896. X  while (st[i] != '\0') i++;
  897. X
  898. X  return i;
  899. X}
  900. X
  901. X
  902. X
  903. X
  904. X/***************************************************************************/
  905. X/*      FUNKTION  strcopy()                           */
  906. X/*  BESCHREIBUNG  Einen TeilSTRING aus einem STRING herausschneiden.       */
  907. X/*     PARAMETER  st  =  STRING                                            */
  908. X/*          v   =  von Zeichen (1. Zeichen = 0 !!!)           */
  909. X/*          b   =  bis Zeichen                           */
  910. X/*     RUECKGABE  TeilSTRING                                               */
  911. X/***************************************************************************/
  912. X
  913. Xunsigned char *strcopy(st, v, b)
  914. Xunsigned char st[];
  915. Xint v, b;
  916. X{
  917. X  static unsigned char s[STRING];
  918. X
  919. X  int i = 0, j;
  920. X
  921. X
  922. X  strcpy(s, st);
  923. X
  924. X  if (length(s) < b) b = length(s);
  925. X
  926. X  for (j = v; j <= b; j++) {
  927. X    s[i] = s[j];
  928. X    i++;
  929. X  }
  930. X  s[i] = '\0';
  931. X
  932. X  return (unsigned char *) s;
  933. X}
  934. X
  935. X
  936. X/***************************************************************************/
  937. X/*      FUNKTION  bigcopy()                           */
  938. X/*  BESCHREIBUNG  Einen TeilLONGSTRING aus LONGSTRING herausschneiden.     */
  939. X/*     PARAMETER  st  =  LONGSTRING                                        */
  940. X/*          v   =  von Zeichen (1. Zeichen = 0 !!!)           */
  941. X/*          b   =  bis Zeichen                           */
  942. X/*     RUECKGABE  TeilLONGSTRING                                           */
  943. X/***************************************************************************/
  944. X
  945. Xunsigned char *bigcopy(st, v, b)
  946. Xunsigned char st[];
  947. Xint v, b;
  948. X{
  949. X  static unsigned char s[LONGSTRING];
  950. X
  951. X  int i = 0, j;
  952. X
  953. X
  954. X  strcpy(s, st);
  955. X
  956. X  if (length(s) < b) b = length(s);
  957. X
  958. X  for (j = v; j <= b; j++) {
  959. X    s[i] = s[j];
  960. X    i++;
  961. X  }
  962. X  s[i] = '\0';
  963. X
  964. X  return (unsigned char *) s;
  965. X}
  966. X
  967. X
  968. X
  969. X
  970. X/***************************************************************************/
  971. X/*      FUNKTION  strcomp()                           */
  972. X/*  BESCHREIBUNG  Zwei STRINGs vergleichen. Und zwar genau solange, bis    */
  973. X/*          bei STRING1 das Ende ('\0') erreicht ist !!!             */
  974. X/*                Gross-/Kleinschreibung wird dabei IGNORIERT !!!          */
  975. X/*     PARAMETER  st  =  STRING1                                           */
  976. X/*              tt  =  STRING2                                           */
  977. X/*     RUECKGABE  Anzahl der UNGLEICHEN Zeichen                            */
  978. X/***************************************************************************/
  979. X
  980. Xint strcomp(s, t)
  981. Xunsigned char s[], t[];
  982. X{
  983. X  int i = 0, a = 0;
  984. X  int s1, t1;
  985. X
  986. X  while (s[i] != '\0') {
  987. X    s1 = s[i];
  988. X    t1 = t[i];
  989. X    if ((t1 > 96) && (t1 < 123)) t1 -= 32;
  990. X    if ((s1 > 96) && (s1 < 123)) s1 -= 32;
  991. X    if (t1 != s1) a++;
  992. X    i++;
  993. X  }
  994. X  return a;
  995. X}
  996. X
  997. X
  998. X/***************************************************************************/
  999. X/*      FUNKTION  ansi2()                           */
  1000. X/*  BESCHREIBUNG  TERMCAP-Eintrag fuer ein Terminal in "buf" einlesen,     */
  1001. X/*          und angeforderte Sequenzen finden & ausgeben.            */
  1002. X/*     PARAMETER  code  =  'INIT'  =  Eintrag holen und speichern       */
  1003. X/*                         =  Sequenz finden & ausgeben            */
  1004. X/*     RUECKGABE  -1  =  Terminal nicht gefunden                           */
  1005. X/*           1  =  Sequenz nicht gefunden                   */
  1006. X/***************************************************************************/
  1007. X
  1008. Xstatic unsigned char buf[1024];
  1009. X
  1010. Xint ansi(code)
  1011. Xunsigned char code[];
  1012. X{
  1013. X  ansi2(code, 0, 0);
  1014. X}
  1015. X
  1016. Xint ansi2(code, x, y)
  1017. Xunsigned char code[];
  1018. Xint x, y;
  1019. X{
  1020. X  unsigned char *getenv();
  1021. X  static unsigned char s[STRING];
  1022. X  unsigned char *p = s;
  1023. X  unsigned char *term;
  1024. X
  1025. X#ifdef _MBOX
  1026. X  term = TERMINAL;
  1027. X#else
  1028. X  term = getenv("TERM");
  1029. X#endif
  1030. X
  1031. X  if ((x == -1) && (y == -1)) {
  1032. X    if (tgetent(buf, code) != 1) return -1;
  1033. X  }
  1034. X  if (strcomp("INIT", code) == 0) {
  1035. X    if (tgetent(buf, term) != 1) return -1;
  1036. X  }
  1037. X  if (strcomp("cm", code) == 0) {
  1038. X    if (tgetstr(code, &p) == 0) return 1;
  1039. X    printf("%s", (unsigned char *) tgoto( s, (x -1), (y -1) ));
  1040. X    return 0;
  1041. X  }
  1042. X  else{
  1043. X    if (tgetstr(code, &p) == 0) return 1;
  1044. X  }
  1045. X
  1046. X  printf("%s", s);
  1047. X
  1048. X  return 0;
  1049. X}
  1050. X
  1051. Xunsigned char *termansi(code)
  1052. Xunsigned char code[];
  1053. X{
  1054. X  unsigned char *getenv();
  1055. X  unsigned char s[STRING];
  1056. X  unsigned char *p = s;
  1057. X  unsigned char *term;
  1058. X
  1059. X#ifdef _MBOX
  1060. X  term = TERMINAL;
  1061. X#else
  1062. X  term = getenv("TERM");
  1063. X#endif
  1064. X
  1065. X  if (strcomp("INIT", code) == 0) {
  1066. X    if (tgetent(buf, term) != 1) return (unsigned char *) '\0';
  1067. X  }
  1068. X  if (tgetstr(code, &p) == 0) return (unsigned char *) '\0';
  1069. X
  1070. X  return (unsigned char *) s;
  1071. X}
  1072. X
  1073. X
  1074. X
  1075. X/***************************************************************************/
  1076. X/*      FUNKTION  mydate()                           */
  1077. X/*  BESCHREIBUNG  Tagesdatum liefern.                         */
  1078. X/*     PARAMETER  mode  =  0  =  tt.mm.yyyy                   */
  1079. X/*               1  =  tt.mm.yy                   */
  1080. X/*               2  =  ttt                       */    
  1081. X/*     RUECKGABE  Datum                                                    */
  1082. X/***************************************************************************/
  1083. X
  1084. X#define TZS      1
  1085. X
  1086. Xunsigned char *mydate(mode)
  1087. Xint mode;
  1088. X{
  1089. X  struct tm *tp;
  1090. X  time_t tt;
  1091. X  unsigned char wt[8][11];
  1092. X
  1093. X  static unsigned char s[STRING];
  1094. X
  1095. X#ifndef _MBOX
  1096. X  strcpy(wt[0], "Sonntag");
  1097. X  strcpy(wt[1], "Montag");
  1098. X  strcpy(wt[2], "Dienstag");
  1099. X  strcpy(wt[3], "Mittwoch");
  1100. X  strcpy(wt[4], "Donnerstag");
  1101. X  strcpy(wt[5], "Freitag");
  1102. X  strcpy(wt[6], "Samstag");
  1103. X#else
  1104. X  strcpy(wt[0], TOL01_MSG);
  1105. X  strcpy(wt[1], TOL02_MSG);
  1106. X  strcpy(wt[2], TOL03_MSG);
  1107. X  strcpy(wt[3], TOL04_MSG);
  1108. X  strcpy(wt[4], TOL05_MSG);
  1109. X  strcpy(wt[5], TOL06_MSG);
  1110. X  strcpy(wt[6], TOL07_MSG);
  1111. X#endif
  1112. X
  1113. X  time(&tt);
  1114. X  tp = localtime(&tt);
  1115. X  if (mode == 0) {
  1116. X    sprintf(s, "%02.2d.%02.2d.%04.4d", tp->tm_mday, tp->tm_mon + TZS, 1900 + tp->tm_year);
  1117. X  }
  1118. X  if (mode == 1) {
  1119. X    sprintf(s, "%02.2d.%02.2d.%02.2d", tp->tm_mday, tp->tm_mon + TZS, tp->tm_year);
  1120. X  }
  1121. X  if (mode == 2) {
  1122. X    sprintf(s, "%s", wt[tp->tm_wday]);
  1123. X  }
  1124. X  return (unsigned char *) s;
  1125. X}
  1126. X
  1127. X
  1128. X
  1129. X
  1130. X/***************************************************************************/
  1131. X/*      FUNKTION  mytime()                           */
  1132. X/*  BESCHREIBUNG  Tageszeit liefern.                         */
  1133. X/*     PARAMETER  mode  =  0  =  hh:mm:ss                   */
  1134. X/*               1  =  hh:mm                        */
  1135. X/*     RUECKGABE  Zeit                                                     */
  1136. X/***************************************************************************/
  1137. X
  1138. Xunsigned char *mytime(mode)
  1139. Xint mode;
  1140. X{
  1141. X  struct tm *tp;
  1142. X  time_t tt;
  1143. X
  1144. X  static unsigned char s[STRING];
  1145. X
  1146. X  time(&tt);
  1147. X  tp = localtime(&tt);
  1148. X  sprintf(s, "%02.2d:%02.2d:%02.2d", tp->tm_hour, tp->tm_min, tp->tm_sec);
  1149. X
  1150. X  if (mode == 1) s[5] = '\0';
  1151. X
  1152. X  return (unsigned char *) s;
  1153. X}
  1154. X
  1155. X
  1156. X
  1157. X
  1158. X/***************************************************************************/
  1159. X/*      FUNKTION  crypted()                           */
  1160. X/*  BESCHREIBUNG  STRING verschluesseln und zurueckgeben.           */
  1161. X/*     PARAMETER  s  =  STRING                                             */
  1162. X/*     RUECKGABE  Verschluesselter STRING                                  */
  1163. X/***************************************************************************/
  1164. X
  1165. Xunsigned char *crypted(s)
  1166. Xunsigned char s[];
  1167. X{
  1168. X  static unsigned char t[STRING];
  1169. X  int i, a;
  1170. X
  1171. X
  1172. X  strcpy(t, s);
  1173. X  i = 0;
  1174. X  a = 2;
  1175. X  while (t[i] != '\0') {
  1176. X    t[i] = (t[i] / a) + 32;
  1177. X    i++;
  1178. X    a++;
  1179. X    if (a > 5) a = 2;
  1180. X  }
  1181. X
  1182. X  return (unsigned char *) t;
  1183. X}
  1184. X
  1185. X
  1186. X
  1187. X
  1188. X/***************************************************************************/
  1189. X/*      FUNKTION  dateconv()                            */
  1190. X/*  BESCHREIBUNG  Datum (STRING) in Datum (LONG) wandeln.           */
  1191. X/*     PARAMETER  d  =  Datum (STRING)                                     */
  1192. X/*     RUECKGABE  Datum (LONG)                                             */
  1193. X/***************************************************************************/
  1194. X
  1195. Xlong dateconv(d)
  1196. Xunsigned char d[];
  1197. X{
  1198. X  unsigned char s[STRING];
  1199. X  int a, b, i;
  1200. X
  1201. X
  1202. X  strcpy(s, (unsigned char *) strcopy(d, 0, 1));
  1203. X  a = atoi(s);
  1204. X  strcpy(s, (unsigned char *) strcopy(d, 3, 4));
  1205. X  b = atoi(s);
  1206. X  strcpy(s, (unsigned char *) strcopy(d, 6, 9));
  1207. X  i = atoi(s);
  1208. X  if (i < 1900) i += 1900;
  1209. X
  1210. X  sprintf(s, "%4.4d%02.2d%02.2d", i, b, a);
  1211. X
  1212. X  return atol(s);
  1213. X}
  1214. X
  1215. X
  1216. X
  1217. X/***************************************************************************/
  1218. X/*      FUNKTION  datereconv()                            */
  1219. X/*  BESCHREIBUNG  Datum (LONG) in Datum (STRING) wandeln.           */
  1220. X/*     PARAMETER  l  =  Datum (LONG)                                       */
  1221. X/*     RUECKGABE  Datum (STRING)                                           */
  1222. X/***************************************************************************/
  1223. X
  1224. Xunsigned char *datereconv(l)
  1225. Xlong l;
  1226. X{
  1227. X  static unsigned char s[STRING];
  1228. X  static unsigned char t[STRING];
  1229. X
  1230. X
  1231. X  if (l < 19000000)
  1232. X    sprintf(s, "%ld", 1900000L + l);
  1233. X  else
  1234. X    sprintf(s, "%ld", l);
  1235. X
  1236. X  strcpy(t, (unsigned char *) strcopy(s, 6, 7));
  1237. X  strcat(t, ".");
  1238. X  strcat(t, (unsigned char *) strcopy(s, 4, 5));
  1239. X  strcat(t, ".");
  1240. X  strcat(t, (unsigned char *) strcopy(s, 0, 3));
  1241. X
  1242. X  return (unsigned char *) t;
  1243. X}
  1244. X
  1245. X
  1246. X
  1247. X/***************************************************************************/
  1248. X/*      FUNKTION  timeconv()                            */
  1249. X/*  BESCHREIBUNG  Zeit (STRING) in Zeit (LONG) wandeln.               */
  1250. X/*     PARAMETER  t  =  Zeit (STRING)                                      */
  1251. X/*     RUECKGABE  Zeit (LONG)                                              */
  1252. X/***************************************************************************/
  1253. X
  1254. Xint timeconv(t)
  1255. Xunsigned char t[];
  1256. X{
  1257. X  unsigned char s[STRING];
  1258. X  int i = 0;
  1259. X
  1260. X
  1261. X  strcpy(s, (unsigned char *) strcopy(t, 0, 1));
  1262. X  i = 100 * atoi(s);
  1263. X  strcpy(s, (unsigned char *) strcopy(t, 3, 4));
  1264. X  i += atoi(s);
  1265. X
  1266. X  return i;
  1267. X}
  1268. X
  1269. X
  1270. X
  1271. X
  1272. X/***************************************************************************/
  1273. X/*      FUNKTION  timereconv()                            */
  1274. X/*  BESCHREIBUNG  Zeit (LONG) in Zeit (STRING) wandeln.               */
  1275. X/*     PARAMETER  i  =  Zeit (LONG)                                        */
  1276. X/*     RUECKGABE  Zeit (STRING)                                            */
  1277. X/***************************************************************************/
  1278. X
  1279. Xunsigned char *timereconv(i)
  1280. Xint i;
  1281. X{
  1282. X  static unsigned char s[STRING];
  1283. X  static unsigned char t[STRING];
  1284. X
  1285. X
  1286. X  if (i < 10000)
  1287. X    sprintf(s, "%04.4d00", i);
  1288. X  else
  1289. X    sprintf(s, "%06.6d", i);
  1290. X
  1291. X  strcpy(t, (unsigned char *) strcopy(s, 0, 1));
  1292. X  strcat(t, ":");
  1293. X  strcat(t, (unsigned char *) strcopy(s, 2, 3));
  1294. X  strcat(t, ":");
  1295. X  strcat(t, (unsigned char *) strcopy(s, 4, 5));
  1296. X
  1297. X  return (unsigned char *) t;
  1298. X}
  1299. X
  1300. X
  1301. X
  1302. X/***************************************************************************/
  1303. X/*      FUNKTION  shortname()                            */
  1304. X/*  BESCHREIBUNG  Wandelt lange Namen (NGs) ins 14-Zeichenformat, um Ver-  */
  1305. X/*                Wechslungen zu vermeiden:                   */
  1306. X/*                                       */
  1307. X/*              comp.protocols.tcp-ip.sources.wanted           */
  1308. X/*                =>  com0ces.wanted                       */
  1309. X/*                                               */
  1310. X/*     PARAMETER  longname : langer Name                                   */
  1311. X/*                                       */
  1312. X/*                                          */
  1313. X/*     RUECKGABE  s : kurzer Name                                          */
  1314. X/***************************************************************************/
  1315. X
  1316. Xunsigned char *shortname( longname )
  1317. Xunsigned char longname[];
  1318. X{
  1319. X  unsigned char s[STRING];
  1320. X  unsigned char t[STRING];
  1321. X
  1322. X  int i = 0, j = 0;
  1323. X
  1324. X  strcpy(s, longname);
  1325. X
  1326. X  strcpy(t, longname);
  1327. X
  1328. X  while(s[i] != '\0'){
  1329. X    if(s[i] == '/') j = i + 1;
  1330. X    i++;
  1331. X  }
  1332. X
  1333. X  i = strlen(t);
  1334. X
  1335. X  if((i - j) < 15) return (unsigned char *) s;
  1336. X
  1337. X  s[j + 3] = '0'; s[j + 4] = '\0';
  1338. X  strcat(s, (unsigned char *) strcopy(t, (i-10), i));
  1339. X
  1340. X  return (unsigned char *) s;
  1341. X}
  1342. X
  1343. X
  1344. X
  1345. X
  1346. X
  1347. X/***************************************************************************/
  1348. X/*      FUNKTION  maybe_locked()                       */
  1349. X/*  BESCHREIBUNG  Um sicherzustellen das eine Datei, die eigentlich vor-   */
  1350. X/*          handen sein MUSS, wirklich nicht da ist (und nicht nur   */
  1351. X/*          gerade von einem anderen Task benutzt wird), verzoegert  */
  1352. X/*          diese Funktion die Fehlermeldung um eine festgelegte     */
  1353. X/*          Zeitspanne.                                              */
  1354. X/*     PARAMETER  name  =  Dateiname                           */
  1355. X/*          mode  =  Zugriffsmodus (sollte NICHT verwendet werden !) */
  1356. X/*     RUECKGABE   0    =  Datei erreichbar                   */
  1357. X/*          -1    =  Datei nicht verfuegbar               */
  1358. X/***************************************************************************/
  1359. X
  1360. Xint maybe_locked(name, mode)
  1361. Xunsigned char name[], mode[];
  1362. X{
  1363. X  FILE *fp;
  1364. X  int i = 0, LCK = 0;
  1365. X  unsigned char s[STRING];
  1366. X
  1367. X  sprintf(s, "%s.LCK", name);
  1368. X
  1369. X#ifndef _LONGNAMES
  1370. X  strcpy(s, (unsigned char *) shortname(s));
  1371. X#endif
  1372. X
  1373. X  TRY_TWICE:
  1374. X
  1375. X  fp = NULL;
  1376. X
  1377. X  do {
  1378. X    if(fp != NULL) fclose(fp);
  1379. X    fp = fopen(s, "r");
  1380. X    i++;
  1381. X    if (fp != NULL) {
  1382. X        if(i == 1) printf("%c%s ", CR, TOL08_MSG);
  1383. X        printf(".");
  1384. X        sleep(3);
  1385. X    }
  1386. X  } while ((i < 8) && (fp != 0));
  1387. X
  1388. X  if(fp != 0){
  1389. X    fclose(fp);
  1390. X#ifdef _MBOX
  1391. X    mbunlock(name);  /* <--- DAS IST NATUERLICH NICHT KORREKT !!! */
  1392. X    goto TRY_TWICE;  /* <--- DAS AUCH NICHT !!! */
  1393. X    nerror("tools.c", 566, "maybe_locked", "Datei gesperrt", name);    
  1394. X#else
  1395. X    printf("\n\nDatei >>%s<< gesperrt !!!\n\n", name);
  1396. X#endif
  1397. X    exit( -1 );
  1398. X  }
  1399. X
  1400. X  i = 0;
  1401. X
  1402. X  do {
  1403. X    fp = fopen(name, "r");    /* "r" => "mode", aber VORSICHT ! */
  1404. X    i++;
  1405. X    if (fp == NULL) {
  1406. X        if(i == 1) printf("%c%s ", CR, TOL08_MSG);    
  1407. X        printf(".");
  1408. X        sync();
  1409. X        sleep(3);
  1410. X    }
  1411. X  } while ((i < 5) && (fp == NULL));
  1412. X
  1413. X  if (fp == NULL) return -1;
  1414. X
  1415. X  fclose(fp);
  1416. X  return 0;
  1417. X}
  1418. X
  1419. X
  1420. X
  1421. X
  1422. X
  1423. X/***************************************************************************/
  1424. X/*      FUNKTION  num_stripped()                       */
  1425. X/*  BESCHREIBUNG  Entfernt alle Ziffern aus STRING.               */
  1426. X/*     PARAMETER  s  =  STRING (incl. Ziffern)                   */
  1427. X/*     RUECKGABE  STRING (excl. Ziffern)                   */
  1428. X/***************************************************************************/
  1429. X
  1430. Xunsigned char *numstripped(s)
  1431. Xunsigned char s[];
  1432. X{
  1433. X  static unsigned char t[STRING];
  1434. X  int i = 0, a = 0;
  1435. X
  1436. X  while (s[i] != '\0') {
  1437. X    if (((s[i] > 64) && (s[i] < 127)) || (s[i] == ' ') || (s[i] == '-')) {
  1438. X        t[a] = s[i];
  1439. X        a++;
  1440. X    }
  1441. X    i++;
  1442. X  }
  1443. X  t[a] = '\0';
  1444. X
  1445. X  return (unsigned char *) t;
  1446. X}
  1447. X
  1448. X
  1449. X
  1450. X
  1451. X/***************************************************************************/
  1452. X/*      FUNKTION  rename()                           */
  1453. X/*  BESCHREIBUNG  Benennt Datei1 in Datei2 um (ok, gelogen ... Datei1 wird */
  1454. X/*          in Datei2 kopiert).                                      */
  1455. X/*     PARAMETER  alt  =  Datei1                                           */
  1456. X/*          neu  =  Datei2                                           */
  1457. X/*     RUECKGABE   0   =  ok                                               */
  1458. X/*          -1   =  Datei1 nicht gefunden                   */
  1459. X/***************************************************************************/
  1460. X
  1461. X#ifndef _ANSI
  1462. X
  1463. Xint rename(alt, neu)
  1464. Xunsigned char *alt[], *neu[];
  1465. X{
  1466. X  FILE *fp;
  1467. X  FILE *ff;
  1468. X
  1469. X  unsigned char s[250];
  1470. X
  1471. X  fp = fopen(neu, "w");
  1472. X  if (fp == NULL) {
  1473. X    return -1;
  1474. X  }
  1475. X  ff = fopen(alt, "r");
  1476. X  if (ff == NULL) {
  1477. X    return -2;
  1478. X  }
  1479. X  while (fgets(s, 250, ff) != NULL) {
  1480. X    fputs(s, fp);
  1481. X  }
  1482. X
  1483. X  fclose(fp);
  1484. X  fclose(ff);
  1485. X
  1486. X  unlink(alt);
  1487. X
  1488. X  return 0;
  1489. X}
  1490. X
  1491. X#endif
  1492. X
  1493. X
  1494. X
  1495. X
  1496. X/***************************************************************************/
  1497. X/*      FUNKTION  headline()                           */
  1498. X/*  BESCHREIBUNG  Ueberschrift mit Ansage-Text ausgeben. Vorher wird der   */
  1499. X/*          der Bildschirm geloescht (falls moegliche) und auf       */
  1500. X/*          negative Darstellung umgeschaltet.                       */
  1501. X/*     PARAMETER  line  =  Ansage-Text                       */
  1502. X/*     RUECKGABE  keine                                                    */
  1503. X/***************************************************************************/
  1504. X
  1505. Xvoid headline(line)
  1506. Xunsigned char line[];
  1507. X{
  1508. X  unsigned char ex[255];
  1509. X  int i;
  1510. X
  1511. X
  1512. X  strcpy(ex, line);
  1513. X  i = 0;
  1514. X  while(line[i] != '\0'){
  1515. X    if(line[i] == '^'){
  1516. X        strcpy(ex, (unsigned char *) strcopy(line, 0, (i-1)));
  1517. X        line[i] = ' ';
  1518. X    }
  1519. X    i++;
  1520. X  }
  1521. X  strcpy(headinfo, ex);
  1522. X  sprintf(ex, "%s                                                                          ", line);
  1523. X  ex[79] = '\0';
  1524. X  if (ansi("cl") != -1) {
  1525. X    if (ansi("mr") == 1) {
  1526. X        if (ansi("so") == 1) { 
  1527. X            printf("\n\n------  %s  ------\n\n", line);
  1528. X            return;
  1529. X        }
  1530. X    }
  1531. X    printf("%s\n", ex);
  1532. X    if (ansi("me") == 1) {
  1533. X        ansi("se");
  1534. X    }
  1535. X  }
  1536. X  else {
  1537. X    printf("\n\n\n\n\n------  %s  ------\n\n", line);
  1538. X  }
  1539. X}
  1540. X
  1541. X
  1542. X/***************************************************************************/
  1543. X/*      FUNKTION  mblock()                           */
  1544. X/*  BESCHREIBUNG  Schuetzt eine Datei vor ALLEN Zugriffen           */
  1545. X/*     PARAMETER  path  =  Datei                       */
  1546. X/*     RUECKGABE  keine                                                    */
  1547. X/***************************************************************************/
  1548. X
  1549. Xvoid mblock( path )
  1550. Xunsigned char path[];
  1551. X{
  1552. X  FILE *fp;
  1553. X  unsigned char s[STRING];
  1554. X
  1555. X  sprintf(s, "%s.LCK", path); 
  1556. X
  1557. X#ifndef _LONGNAMES
  1558. X  strcpy(s, (unsigned char *) shortname(s));
  1559. X#endif
  1560. X
  1561. X  fp = fopen( s, "w" );
  1562. X  fputs(VERSION, fp);
  1563. X  fclose(fp);
  1564. X}
  1565. X
  1566. X
  1567. X/***************************************************************************/
  1568. X/*      FUNKTION  unmblock()                           */
  1569. X/*  BESCHREIBUNG  Erlaubt Zugriffe auf eine Datei               */
  1570. X/*     PARAMETER  path  =  Datei                       */
  1571. X/*     RUECKGABE  keine                                                    */
  1572. X/***************************************************************************/
  1573. X
  1574. Xvoid mbunlock( path )
  1575. Xunsigned char path[];
  1576. X{
  1577. X  unsigned char s[STRING];
  1578. X  
  1579. X  sprintf(s, "%s.LCK", path); 
  1580. X
  1581. X#ifndef _LONGNAMES
  1582. X  strcpy(s, (unsigned char *) shortname(s));
  1583. X#endif
  1584. X
  1585. X  unlink(s);
  1586. X}
  1587. X
  1588. X
  1589. X/***************************************************************************/
  1590. X/*      FUNKTION  tty()                               */
  1591. X/*  BESCHREIBUNG  Name des eigenen Terminal-Anschlusses.            */
  1592. X/*     PARAMETER  keine                                                       */
  1593. X/*     RUECKGABE  siehe BESCHREIBUNG                                       */
  1594. X/***************************************************************************/
  1595. X
  1596. Xint tty()
  1597. X{
  1598. X  unsigned char s[STRING];
  1599. X  unsigned char t[STRING];
  1600. X  int i, l, a, b;
  1601. X
  1602. X
  1603. X  strcpy(s, (unsigned char *) ttyname(0));
  1604. X  l = length(s);
  1605. X  i = l;
  1606. X
  1607. X  while ((s[l] != 'y') && (l > 0)) l--;
  1608. X
  1609. X  l++;
  1610. X  a = 0;
  1611. X
  1612. X  for (b = l; b < i; b++) {
  1613. X    t[a] = s[b];
  1614. X    a++;
  1615. X  }
  1616. X  t[a] = '\0';
  1617. X
  1618. X  return atoi(t);
  1619. X}
  1620. X
  1621. X
  1622. X/***************************************************************************/
  1623. X/*      FUNKTION  ttyna()                           */
  1624. X/*  BESCHREIBUNG  Name des eigenen Terminal-Anschlusses.            */
  1625. X/*     PARAMETER  keine                                                       */
  1626. X/*     RUECKGABE  siehe BESCHREIBUNG                                       */
  1627. X/***************************************************************************/
  1628. X
  1629. Xunsigned char *ttyna()
  1630. X{
  1631. X  static unsigned char s[STRING];
  1632. X  static unsigned char t[STRING];
  1633. X  int i, j, l;
  1634. X
  1635. X
  1636. X  strcpy(s, (unsigned char *) ttyname(0));
  1637. X
  1638. X  l = length(s) + 1;
  1639. X
  1640. X  i = 0; 
  1641. X  while(s[i] != '\0'){
  1642. X    if(s[i] == '/') j = i + 1;
  1643. X    i++;
  1644. X  }
  1645. X  (void) strcpy(t, (unsigned char *) strcopy(s, j, l));
  1646. X  
  1647. X  return (unsigned char *) t;
  1648. X}
  1649. X
  1650. X
  1651. X
  1652. X/***************************************************************************/
  1653. X/*      FUNKTION  clearline()                           */
  1654. X/*  BESCHREIBUNG  Bildschirmzeile loeschen.                    */
  1655. X/*     PARAMETER  keine                                                       */
  1656. X/*     RUECKGABE  keine                                               */
  1657. X/***************************************************************************/
  1658. X
  1659. Xvoid clearline()
  1660. X{
  1661. X  printf("%c", CR);
  1662. X  if (ansi("ce") == 1) {
  1663. X    printf("                                                               ");
  1664. X  }
  1665. X  printf("%c", CR);
  1666. X}
  1667. X
  1668. X
  1669. X/***************************************************************************/
  1670. X/*      FUNKTION  isin()                           */
  1671. X/*  BESCHREIBUNG  Prueft ob ein Zeichen in einer Zeichenkette vorkommt.       */
  1672. X/*     PARAMETER  pattern = Zeichenkette mit den moegl. Uebereinstimmungen */
  1673. X/*          c       = Zeichen                       */
  1674. X/*     RUECKGABE  0       = Zeichen ist NICHT in Zeichenkette enthalten       */
  1675. X/***************************************************************************/
  1676. X
  1677. Xint isin( pattern, c )
  1678. Xunsigned char pattern[];
  1679. Xint c;
  1680. X{
  1681. X  int i = 0;
  1682. X  int ok = 0;
  1683. X
  1684. X  while((pattern[i] != '\0') && (ok == 0)){
  1685. X    if(pattern[i] == c) ok++;    
  1686. X    i++;
  1687. X  }
  1688. X  
  1689. X  return (int) ok;  
  1690. X}
  1691. X
  1692. X
  1693. X/***************************************************************************/
  1694. X/*      FUNKTION  sgrep()                           */
  1695. X/*  BESCHREIBUNG  Prueft ob Muster in einer Zeichenkette vorkommt.       */
  1696. X/*     PARAMETER  pattern = Zeichenkette mit den moegl. Uebereinstimmungen */
  1697. X/*          source  = Zeichenkette                   */
  1698. X/*     RUECKGABE  0       = Muster ist NICHT in Zeichenkette enthalten       */
  1699. X/***************************************************************************/
  1700. X
  1701. Xint sgrep( source, pattern )
  1702. Xunsigned char source[];
  1703. Xunsigned char pattern[];
  1704. X{
  1705. X  unsigned char t[STRING];
  1706. X  int i = 0;
  1707. X  while(source[i] != 0){
  1708. X    if(source[i] == pattern[0]){
  1709. X        strcpy(t, (unsigned char *) strcopy(source, i, strlen(source)));
  1710. X        if(strcomp(pattern, t) == 0) return (int) i;
  1711. X    }
  1712. X    i++;
  1713. X  }
  1714. X
  1715. X  return (int) 0;
  1716. X}
  1717. X
  1718. END_OF_FILE
  1719.   if test 24683 -ne `wc -c <'src/tools.c'`; then
  1720.     echo shar: \"'src/tools.c'\" unpacked with wrong size!
  1721.   fi
  1722.   # end of 'src/tools.c'
  1723. fi
  1724. if test -f 'wendy/Makefile' -a "${1}" != "-c" ; then 
  1725.   echo shar: Will not clobber existing file \"'wendy/Makefile'\"
  1726. else
  1727.   echo shar: Extracting \"'wendy/Makefile'\" \(1007 characters\)
  1728.   sed "s/^X//" >'wendy/Makefile' <<'END_OF_FILE'
  1729. X# MINIX 386 (BCC)
  1730. X O= o
  1731. X CC= bcc
  1732. X CHMEM= chmem
  1733. X CFLAGS= -D_SYS7 -D_LOCAL
  1734. X CONVERT= mv a.out $@
  1735. X STRIP= strip $@
  1736. X#
  1737. X#
  1738. X# MINIX 386 (GCC 1.37)
  1739. X# O= o
  1740. X# CC= gcc
  1741. X# CHMEM= :
  1742. X# CFLAGS= -O -D_SYS7 -D_ESTDIO -traditional
  1743. X# CONVERT= /usr/local/bin/gcc2minix < a.out > $@
  1744. X# STRIP= strip $@
  1745. X#
  1746. X#
  1747. X# ESIX SVR3
  1748. X# O= o
  1749. X# CC= gcc
  1750. X# CFLAGS= -O2
  1751. X# LIB= -lcurses -lc_s
  1752. X# CONVERT= mv a.out $@
  1753. X# STRIP= strip $@
  1754. X# 
  1755. X# 
  1756. X# Dell 2.1 (SVR4) & GCC 2.1
  1757. X# O= o
  1758. X# CC= /usr/local/bin/gcc
  1759. X# LN= ln
  1760. X# CHMEM= :
  1761. X# CFLAGS= -traditional -g 
  1762. X# LIB= -ltermlib
  1763. X# CONVERT= mv a.out $@
  1764. X# CHOWN= chown $(OWNER) 
  1765. X# CHGRP= chgrp $(GROUP)
  1766. X# STRIP= :
  1767. X#
  1768. X# 
  1769. XPROG=wendy
  1770. XOBJ=    getch.$(O) echo.$(O) getline.$(O) tools.$(O) block.$(O) \
  1771. X    misc.$(O) rtf.$(O) screen.$(O) ctrl.$(O) wendy.$(O)
  1772. X$(PROG): $(OBJ)
  1773. X    $(CC) $(CFLAGS) $(OBJ) $(LIB)
  1774. X    @$(CONVERT)
  1775. X    @$(CHMEM) +250000 $@
  1776. X    @$(STRIP)
  1777. X    @chmod +x $@
  1778. X
  1779. Xblock.o:    wendy.h
  1780. Xmisc.o:        wendy.h
  1781. Xrtf.o:        wendy.h
  1782. Xscreen.o:    wendy.h
  1783. Xctrl.o:        wendy.h
  1784. Xwendy.o:    wendy.h    
  1785. X
  1786. Xclean:;
  1787. X    @rm -f *.$(O) core a.out wendy wendy.sh
  1788. X    
  1789. END_OF_FILE
  1790.   if test 1007 -ne `wc -c <'wendy/Makefile'`; then
  1791.     echo shar: \"'wendy/Makefile'\" unpacked with wrong size!
  1792.   fi
  1793.   # end of 'wendy/Makefile'
  1794. fi
  1795. echo shar: End of archive 5 \(of 15\).
  1796. cp /dev/null ark5isdone
  1797. MISSING=""
  1798. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
  1799.     if test ! -f ark${I}isdone ; then
  1800.     MISSING="${MISSING} ${I}"
  1801.     fi
  1802. done
  1803. if test "${MISSING}" = "" ; then
  1804.     echo You have unpacked all 15 archives.
  1805.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1806. else
  1807.     echo You still must unpack the following archives:
  1808.     echo "        " ${MISSING}
  1809. fi
  1810. exit 0
  1811. exit 0 # Just in case...
  1812.