home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume29 / mbox / part03 < prev    next >
Encoding:
Text File  |  1992-04-05  |  54.5 KB  |  1,844 lines

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