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

  1. Newsgroups: comp.sources.misc
  2. From: Volker.Schuermann@unnet.w.open.de@unnet (Volker Schuermann)
  3. Subject:  v29i071:  mbox - A Bulletin Board System for UNIX and MINIX, Part09/10
  4. Message-ID: <1992Apr5.183726.150@sparky.imd.sterling.com>
  5. X-Md4-Signature: c2b851dfcccf8a015734298fef61e3a6
  6. Date: Sun, 5 Apr 1992 18:37:26 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 71
  11. Archive-name: mbox/part09
  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:  Installation etc/alias.sh etc/english.befehl
  21. #   etc/english.shorth etc/help.befehle etc/help.shorthelp
  22. #   src/CROSSREF src/SysV.getch.c src/befehl.c src/control.c
  23. #   src/ctrlx.c src/defs.h src/derror.c src/help.c src/makro.c
  24. #   src/nerror.c src/suchen.c
  25. # Wrapped by kent@sparky on Sun Apr  5 11:57:47 1992
  26. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  27. echo If this archive is complete, you will see the following message:
  28. echo '          "shar: End of archive 9 (of 10)."'
  29. if test -f 'Installation' -a "${1}" != "-c" ; then 
  30.   echo shar: Will not clobber existing file \"'Installation'\"
  31. else
  32.   echo shar: Extracting \"'Installation'\" \(4213 characters\)
  33.   sed "s/^X//" >'Installation' <<'END_OF_FILE'
  34. X
  35. X
  36. X
  37. X
  38. X
  39. X
  40. X
  41. X            
  42. X
  43. X                 ix/MBox  R E A D M E
  44. X          Mailbox-Programm fuer UNIX(-Derivate)
  45. X            
  46. X               Volker Schuermann
  47. X              Wuppertal, FRG, 07.12.1991
  48. X
  49. X
  50. X
  51. X
  52. X
  53. X
  54. X
  55. X
  56. X
  57. X
  58. XFolgendes wird jetzt als bereits geschehen (!) vorausgesetzt:
  59. X
  60. X1. Wir befinden uns im zukuenftigen "Mailbox-HOME"-Verzeichnis (~HOME)
  61. X
  62. X2. Wir haben "root.root"-Permissions (sprich sind als "root" aktiv)
  63. X
  64. X3. Wir haben das Archiv "mbox.tar.Z" komplett ausgepackt und in etwa
  65. X   diese Verzeichnisse/Dateien erhalten:
  66. X
  67. X   ./TUTORIAL
  68. X   ./README
  69. X
  70. X   ./src/*.c
  71. X   ./src/*.h
  72. X   ./src/Makefile
  73. X   ./src/CROSSREF
  74. X
  75. X   ./etc/active
  76. X   .  
  77. X   .  
  78. X   .
  79. X   ./etc/users.data
  80. X
  81. X
  82. X   Das heisst "src" und "etc" sind Unterverzeichnisse von (~HOME) und
  83. X   "TUTORIAL" etc. befinden sich in (~HOME). Sollte das nicht der Fall
  84. X   sein, muessen wir diese Stuktur im (~HOME) entweder von Hand
  85. X   herstellen, oder das Archiv "mbox.tar.Z" nochmal an entsprechender
  86. X   Stelle auspacken!
  87. X
  88. X
  89. X
  90. XWir wechseln jetzt ins "./src"-Verzeichnis, um die MBox an ihre neue
  91. XUmgebung anzupassen. Zwei Dateien muessen bearbeitet werden:
  92. X
  93. X1. Das "Makefile", das einige Informationen zum verwendeten Betriebs-
  94. X   system erhalten muss. Es sollte genuegen die entsprechenden 
  95. X   Eintraege durch Entfernen des "#" in der ersten Spalte zu aktivieren
  96. X   bzw. durch Voranstellen eines "#" auszukommentieren.
  97. X
  98. X   Die Variablen OWNER und GROUP muessen auf Werte gesetzt werden, die
  99. X   z.B. denen von "/bin/su" entsprechen - OWNER.GROUP muss Zugriff auf
  100. X   alle NEWS-, MAIL- und UUCP-Dateien/Verzeichnisse haben ... maximale
  101. X   Prioritaet ist also Voraussetzung!
  102. X
  103. X   Wenn SETUID "root" fuer die MBox NICHT gewuenscht wird, haben wir
  104. X   viel, viel Arbeit vor uns. Offiziell MUSS die MBox mit SETUID
  105. X   "root" gefahren werden !
  106. X
  107. X
  108. X
  109. X2. Das Definitions-File "mbox.h", in dem alle system-spezifischen
  110. X   Informationen gespeichert werden. Alle Eintraege, deren Kommentar
  111. X   mit einem ">" beginnt, muessen geprueft bzw. geaendert werden -
  112. X   bei allen anderen ist Vorsicht angebracht!
  113. X
  114. X   Es empfielt sich von "mbox.h" eine Kopie anzufertigen, um bei evtl.
  115. X   Fehlschlaegen das Original zu Rate ziehen zu koennen!
  116. X   
  117. X
  118. X
  119. XJetzt kommen wir zum spannenden Teil der Aktion. Wir starten "make"
  120. Xund hoffen (den ueblichen Zauber lassen wir mal weg, denn Aberglaube
  121. Xist ganz, ganz schlecht - bringt Unglueck :-)
  122. X
  123. XWenn wir nicht allzuviel falsch gemacht haben bei der Anpassung der
  124. Xbeiden Dateien, sollte sich das "Makefile" irgendwann kommentarlos
  125. Xverabschieden und uns mit einem Schwung neuer Programme in $(BIN) 
  126. Xzuruecklassen:
  127. X
  128. X$(BIN)/mbox        die Mailbox 
  129. X$(BIN)/mb-daemon        ein Daemon der INDEX-Dateien aus NEWS bildet
  130. X$(BIN)/xmd              ein Programm das Post an Mailbox-User zustellt
  131. X$(BIN)/bled             ein "anstaendiger" Zeileneditor
  132. X
  133. Xmbrsh                   eine neue SHELL, die von der Mailbox genutzt wird
  134. X
  135. XSollten diese Programme nicht vorhanden sein, geht's zurueck an den Start.
  136. XEntweder haben wir uns einen "Make error" eingefangen (dann muessen wir
  137. Xuns "Makefile" nochmal vornehmen), oder wir haben in "mbox.h" einen dieser
  138. Xklassischen Syntax-Fehler fabriziert ... viel Spass beim Suchen!
  139. X
  140. X
  141. XSo, wenn wir hier angekommen sind, sollten wir uns ein paar Stunden Pause
  142. Xgoennen, denn jetzt kommt Arbeit auf uns zu. Herumexperimentieren wuerde
  143. Xuns nicht weit bringen, wir sollten in aller Ruhe das "TUTORIAL" lesen
  144. Xund versuchen die dort beschrieben Dateien anzupassen ...
  145. X
  146. XTrotzdem duerfen wir uns schonmal auf die Schulter klopfen, die erste
  147. XHuerde ist genommen!
  148. X
  149. XMfG Volker
  150. X
  151. X
  152. X
  153. XNachschlag: Die MINIX-Mailbox kommt mit der Version "rz 2.30" von Chuck
  154. XForsbergs RZ/SZ nicht klar. Auch wenn's uns nicht gefaellt, in diesem
  155. Xspeziellen Fall kommen wir um einen kleinen Patch nicht herum:
  156. X
  157. X1. Wir kopieren "rz.cdiff" nach "/usr/src/commands/zmodem"
  158. X
  159. X2. Wir wechseln ins "/usr/src/commands/zmodem"-Verzeichnis
  160. X
  161. X3. Mit dem Befehl "patch -cf rz.c rz.cdiff" bringen wir den Patch an
  162. X
  163. X4. Um sicher zu gehen kopieren wir wie folgt: "mv rz.c rz.c.old" und
  164. X   "mv rz.c~ rc.c"
  165. X
  166. X5. Ein "make" sorgt dafuer, dass die neue RZ/SZ-Version erstellt wird.
  167. X   Da RB/SB und RX/RX Links auf RZ/SZ sind, muessen diese Protokolle
  168. X   nicht gesondert behandelt werden.
  169. X
  170. XVORSICHT: Das gilt ausschliesslich fuer die Version "rz 2.30" !
  171. END_OF_FILE
  172.   if test 4213 -ne `wc -c <'Installation'`; then
  173.     echo shar: \"'Installation'\" unpacked with wrong size!
  174.   fi
  175.   # end of 'Installation'
  176. fi
  177. if test -f 'etc/alias.sh' -a "${1}" != "-c" ; then 
  178.   echo shar: Will not clobber existing file \"'etc/alias.sh'\"
  179. else
  180.   echo shar: Extracting \"'etc/alias.sh'\" \(829 characters\)
  181.   sed "s/^X//" >'etc/alias.sh' <<'END_OF_FILE'
  182. X#---------------------------------------------------------------------------
  183. X#
  184. X#                       ix/MBox  A L I A S . S H
  185. X#          Mailbox-Programm fuer UNIX(-Derivate)
  186. X#            
  187. X#               Volker Schuermann
  188. X#              Wuppertal, FRG, 08.12.1991
  189. X#
  190. X#---------------------------------------------------------------------------
  191. X# Dieses Script fuegt einen Eintrag fuer jeden neuen User der ix/MBox an die
  192. X# Alias-Datei von SMAIL (etc.) an. 
  193. X#
  194. X# Wird UMAIL statt SMAIL verwendet, sollten alle Zeilen dieses Scripts' aus-
  195. X# kommentiert werden.
  196. X#---------------------------------------------------------------------------
  197. X# Parameter:
  198. X#
  199. X# $1  ->  Name des neuen Users im Format "Vorname.Nachname"
  200. X# 
  201. X# Beispiel:
  202. X#
  203. X# echo $1 "        " \"\|/usr/bin/xmd $1 -\" >> /usr/lib/smail/aliases
  204. X
  205. Xecho $1 "        " \"\|/usr/bin/xmd $1 -\" >> /usr/lib/smail/aliases
  206. X
  207. END_OF_FILE
  208.   if test 829 -ne `wc -c <'etc/alias.sh'`; then
  209.     echo shar: \"'etc/alias.sh'\" unpacked with wrong size!
  210.   fi
  211.   # end of 'etc/alias.sh'
  212. fi
  213. if test -f 'etc/english.befehl' -a "${1}" != "-c" ; then 
  214.   echo shar: Will not clobber existing file \"'etc/english.befehl'\"
  215. else
  216.   echo shar: Extracting \"'etc/english.befehl'\" \(2565 characters\)
  217.   sed "s/^X//" >'etc/english.befehl' <<'END_OF_FILE'
  218. X/***************************************************************************/
  219. X/* Wer diese Datei aendert sollte GENAU wissen was er tut. Die Reihen-     */
  220. X/* folge der Befehle ist NICHT willkuerlich festgelegt worden, sondern     */
  221. X/* entspricht der Vorgabe fuer GEOnet-Befehle und deren Abkuerzungen.      */
  222. X/*                                       */
  223. X/* S(schreiben) kommt vor SE(tup) und L(esen) vor LOE(schen) etc. ... wer  */
  224. X/* sich nicht voellig sicher ist, sollte die Datei einfach im Urzustand    */
  225. X/* belassen.                                   */
  226. X/*                                           */
  227. X/*                 Die Bedeutung der versch. Spalten                */
  228. X/* ======================================================================= */
  229. X/* ID            - Nummer des Befehls (siehe "loop()")               */
  230. X/* Intern        - Benoetigtes Userlevel                   */
  231. X/* Extern        - Bei einigen Befehle wird unterscheiden zwischen intern  */
  232. X/*           und extern. Z.B. beim Befehl "schreiben" wird diese     */
  233. X/*           Regelung angewendet, damit User zwar an die lokalen     */
  234. X/*           Bretter senden duerfen, nicht aber an die externen.     */
  235. X/* Prototyp      - Enthaelt diese Spalte eine '1', wird der Befehl bei der */
  236. X/*           Befehlsuebersicht angezeigt.                   */
  237. X/* Befehl        - Unter diesem Namen wird der Befehl aufgerufen           */
  238. X/*                                       */
  239. X/*                                       */
  240. X/* ACHTUNG: Zwischen Kommentar und Ueberschrift EINE Leerzeile einfuegen ! */
  241. X/***************************************************************************/
  242. X
  243. XID    Intern  Extern  Prototyp  Befehl 
  244. X===============================================
  245. X110    0    0    1    +
  246. X120    0    0    1    -
  247. X260    0    0    1    Account
  248. X125    9    9    0    Admin
  249. X150    0    0    1    Board
  250. X170    0    0    1    Chat
  251. X200    0    0    1    Dir
  252. X370    0    0    1    Date
  253. X220    1    1    1    Delete
  254. X440    0    0    1    Download
  255. X150    0    0    0    Cd
  256. X400     0       0       1       Direction
  257. X340    1    1    1    Forward
  258. X390     0    0    1    Games
  259. X180    0    0    1    Goodbye
  260. X180    0    0    0    Quit
  261. X180    0    0    0    Bye
  262. X180    0    0    0    End
  263. X190    0    0    1    Help
  264. X160    0    2    1    Mail
  265. X330     0       0       1       Macro
  266. X140    0    0    1    Message
  267. X240    6    6    1    Minix
  268. X240    6    6    0    Execute
  269. X270    0    0    1    Portinfo
  270. X130    0    0    1    Protocol
  271. X250    0    0    1    PM
  272. X210    0    0    1    Read
  273. X280    0    0    1    Setup
  274. X280    0    0    0    Password
  275. X280    0    0    0    Ansi
  276. X280    0    0    0    Bell
  277. X280    0    0    0    Address
  278. X310    1    0    1    Signature
  279. X290    0    0    1    State
  280. X410     0       0       1       Statistics
  281. X430     1       1       1       Search
  282. X380    0    0    1    Time
  283. X300    0    0    1    Users
  284. X320    0    0    1    Version        
  285. X230    0    5    1    Write
  286. X270    0    0    0    Who
  287. X420    0    0    0    RING
  288. X195    0    1    0    ~PD
  289. X215    0    0    0    Level
  290. X275    9    9    0    Relogin
  291. X350     0       0       0       Sleep
  292. X360     0       0       0       Keypressed
  293. X230     0       5       1       Upload
  294. X180     0       0       0       RING
  295. X998    2    2    0    ~MAIL_DUMMY
  296. END_OF_FILE
  297.   if test 2565 -ne `wc -c <'etc/english.befehl'`; then
  298.     echo shar: \"'etc/english.befehl'\" unpacked with wrong size!
  299.   fi
  300.   # end of 'etc/english.befehl'
  301. fi
  302. if test -f 'etc/english.shorth' -a "${1}" != "-c" ; then 
  303.   echo shar: Will not clobber existing file \"'etc/english.shorth'\"
  304. else
  305.   echo shar: Extracting \"'etc/english.shorth'\" \(3470 characters\)
  306.   sed "s/^X//" >'etc/english.shorth' <<'END_OF_FILE'
  307. X?                          reachable commands are shown 
  308. X? *                        all commands are shown
  309. Xcommand ?                  help on "command"
  310. X
  311. X0                          list command-buffers contents
  312. X1-9                        execute one of nine buffered commands 
  313. X
  314. X+                          go to the next board/group with NEW articles
  315. X
  316. X-                          go to the previous board/group with NEW articles
  317. X
  318. XACCOUNT               establish an account & a maildrop for a new user
  319. X
  320. XBOARD                      list boards with new articles
  321. XBOARD *                    list ALL boards
  322. XBOARD +                    go to the next board
  323. XBOARD -                    go to the previous board
  324. XBOARD !                    display the name of the current board
  325. XBOARD #                    list areas in board
  326. XBOARD ..           step from one area to the previous one
  327. XBOARD boardname            jump to board "boardname"
  328. X
  329. XCHAT                       multiport chatsystem
  330. X
  331. XDATE               display current date
  332. X
  333. XDELETE               delete all your mail
  334. XDELETE article           delete article no. "article"
  335. XDELETE article-article       delete from "article" to "article"
  336. X
  337. XDIR                        index new articles
  338. XDIR *                      index ALL articles (of a board)
  339. X
  340. XDIRECTION                  reading direction OLD <> NEW ?
  341. X
  342. XFORWARD                    list stored mails
  343. XFORWARD user               forward a stored mail to "user"
  344. XFORWARD article user       forward "article" to "user"
  345. X
  346. XGAMES               offer a (list of) game(s)
  347. X
  348. XGOODBYE               leave the BBS 
  349. X
  350. XHELP                       this shorthelp
  351. XHELP *                     display some pages of helpful descriptions
  352. XHELP command               show information on "command"
  353. X
  354. XMAIL user                  send mail to "user" 
  355. XMAIL host!user             send mail to "user" on system "host"
  356. XMAIL user@host.domain      send mail to "user" on system "host.domain"
  357. X
  358. XMACRO               display/declare macros
  359. X
  360. XMESSAGE                    show/change "hello" message
  361. X
  362. XMINIX OS-command           execute "OS-command" on MINIX-shell
  363. X
  364. XPORTINFO                   list all terminals, users, activities
  365. X
  366. XPROTOCOL                   protocol of all call(s/ers)
  367. XPROTOCOL *                 protocol (complete)
  368. XPROTOCOL #                 statistics of these calls
  369. XPROTOCOL %                 callers statistics (hitlist)
  370. X
  371. XPM                         move to your maildrop
  372. X
  373. XREAD                       read NEW articles
  374. XREAD *                     real ALL articles (of a board)
  375. XREAD article               show article no. "article"
  376. XREAD article-article       display from "article" to "article"
  377. X
  378. XSETUP                      configure the BBS to your favor
  379. X
  380. XSIGNATURE           show/change your signature
  381. X
  382. XSTATE                      list your BBS-configuration
  383. X
  384. XSTATISTICS                 table containing NEWS-statistics
  385. XSTATISTICS *               table containing more NEWS-statistics
  386. XSTATISTICS $               UUCP-rates (only if UUCP supports this)
  387. XSTATISTICS #               download-statistics 
  388. XSTATISTICS %               download-statistics (hitlist)
  389. X
  390. XTIME                       local time and your online-time in seconds
  391. X
  392. XUSERS                      show users list
  393. XUSERS *                    show users list (more detailed)
  394. XUSERS #                    users up-/download ratio
  395. X
  396. XVERSION                    print version
  397. XVERSION *                  display compiling definitions
  398. XVERSION #                  the "Hall of Fame"
  399. X
  400. XWRITE                      create a new article and post it 
  401. END_OF_FILE
  402.   if test 3470 -ne `wc -c <'etc/english.shorth'`; then
  403.     echo shar: \"'etc/english.shorth'\" unpacked with wrong size!
  404.   fi
  405.   # end of 'etc/english.shorth'
  406. fi
  407. if test -f 'etc/help.befehle' -a "${1}" != "-c" ; then 
  408.   echo shar: Will not clobber existing file \"'etc/help.befehle'\"
  409. else
  410.   echo shar: Extracting \"'etc/help.befehle'\" \(2752 characters\)
  411.   sed "s/^X//" >'etc/help.befehle' <<'END_OF_FILE'
  412. X/***************************************************************************/
  413. X/* Wer diese Datei aendert sollte GENAU wissen was er tut. Die Reihen-     */
  414. X/* folge der Befehle ist NICHT willkuerlich festgelegt worden, sondern     */
  415. X/* entspricht der Vorgabe fuer GEOnet-Befehle und deren Abkuerzungen.      */
  416. X/*                                       */
  417. X/* S(chreiben) kommt vor SE(tup) und L(esen) vor LOE(schen) etc. ... wer   */
  418. X/* sich nicht voellig sicher ist, sollte die Datei einfach im Urzustand    */
  419. X/* belassen.                                   */
  420. X/*                                           */
  421. X/*                 Die Bedeutung der versch. Spalten                */
  422. X/* ======================================================================= */
  423. X/* ID            - Nummer des Befehls (siehe "loop()")               */
  424. X/* Intern        - Benoetigtes Userlevel                   */
  425. X/* Extern        - Bei einigen Befehle wird unterscheiden zwischen intern  */
  426. X/*           und extern. Z.B. beim Befehl "schreiben" wird diese     */
  427. X/*           Regelung angewendet, damit User zwar an die lokalen     */
  428. X/*           Bretter senden duerfen, nicht aber an die externen.     */
  429. X/* Prototyp      - Enthaelt diese Spalte eine '1', wird der Befehl bei der */
  430. X/*           Befehlsuebersicht angezeigt.                   */
  431. X/* Befehl        - Unter diesem Namen wird der Befehl aufgerufen           */
  432. X/*                                       */
  433. X/*                                       */
  434. X/* ACHTUNG: Zwischen Kommentar und Ueberschrift EINE Leerzeile einfuegen ! */
  435. X/***************************************************************************/
  436. X
  437. XID    Intern  Extern  Prototyp  Befehl 
  438. X===============================================
  439. X110    0    0    1    +
  440. X120    0    0    1    -
  441. X130    0    0    1    Anrufer
  442. X140    1    0    1    Ansage
  443. X150    0    0    1    Brett
  444. X160    0    2    1    Brief
  445. X170    0    0    1    Chat
  446. X170    0    0    0    Dialog
  447. X370    0    0    0    Datum
  448. X170    0    0    0    Co
  449. X999    0    0    1    Demo
  450. X440     0       0       1       Download
  451. X210    0    0    1    Lesen
  452. X180    0    0    1    Ende
  453. X180    0    0    0    Quit
  454. X180    0    0    0    Log
  455. X180    0    0    0    Goodbye
  456. X190    0    0    1    Hilfe
  457. X195    0    1    0    ~PD
  458. X200    0    0    1    Inhalt
  459. X200    0    0    0    Dir
  460. X205    0    0    0    Id
  461. X215    0    0    0    Level
  462. X220    1    1    1    Loeschen
  463. X230    0    5    1    Schreiben
  464. X330     0       0       1       Makro
  465. X240    6    6    1    Minix
  466. X240    6    6    0    Execute
  467. X270    0    0    1    Portinfo
  468. X270    0    0    0    Who
  469. X270    0    0    0    Wer
  470. X260    0    0    1    Postfach
  471. X260    0    0    0    Antrag
  472. X275    9    9    0    Relogin
  473. X400     0       0       1       Richtung
  474. X280    0    0    1    Setup
  475. X390     0    0    1    Spiele
  476. X430    1    1    1    Suchen
  477. X280    0    0    0    Passwort
  478. X280    0    0    0    Ansi
  479. X280    0    0    0    Bell
  480. X280    0    0    0    Anschrift
  481. X290    0    0    1    Status
  482. X410     0       0       1       Statistik
  483. X300    0    0    1    User
  484. X310    1    0    1    Unterschrift
  485. X230     0       5       1       Upload
  486. X320    0    0    1    Version        
  487. X340    1    1    1    Weiterleiten
  488. X380    0    0    0    Zeit
  489. X125    9    9    0    Admin
  490. X130    0    0    0    Protokoll
  491. X250    0    0    1    PM
  492. X150    0    0    0    Cd
  493. X300    0    0    0    Finger
  494. X160    0    2    0    Mail
  495. X180    0    0    0    Quit
  496. X180    0    0    0    Exit
  497. X180    0    0    0    Logout
  498. X420    0    0    0    RING
  499. X350     0       0       0       Sleep
  500. X360     0       0       0       Keypressed
  501. X998    7    7    0    ~MAIL_DUMMY
  502. END_OF_FILE
  503.   if test 2752 -ne `wc -c <'etc/help.befehle'`; then
  504.     echo shar: \"'etc/help.befehle'\" unpacked with wrong size!
  505.   fi
  506.   # end of 'etc/help.befehle'
  507. fi
  508. if test -f 'etc/help.shorthelp' -a "${1}" != "-c" ; then 
  509.   echo shar: Will not clobber existing file \"'etc/help.shorthelp'\"
  510. else
  511.   echo shar: Extracting \"'etc/help.shorthelp'\" \(4032 characters\)
  512.   sed "s/^X//" >'etc/help.shorthelp' <<'END_OF_FILE'
  513. X?                          Befehlsuebersicht (levelabhaengig)
  514. X? *                        Befehlsuebersicht (alle Befehle)
  515. XBefehl ?                   Informationen zu "Befehl"
  516. X
  517. X0                          Inhalt des Befehlspuffers
  518. X1-9                        Befehl aus dem Puffer abrufen
  519. X
  520. X+                          Wechseln ins naechste Brett mit neuen Artikeln
  521. X
  522. X-                          Wechseln ins vorherige Brett mit neuen Artikeln
  523. X
  524. XANRUFER                    Anruferprotokoll
  525. XANRUFER *                  Anruferprotokoll (komplett)
  526. XANRUFER #                  Statistik der Anrufe
  527. X
  528. XANSAGE                     Mitteilungstext anzeigen/aendern
  529. X
  530. XBRETT                      Bretter mit aktuellen Artikeln anzeigen
  531. XBRETT *                    Alle Bretter anzeigen
  532. XBRETT +                    Wechseln ins naechste Brett
  533. XBRETT -                    Wechseln ins vorherige Brett
  534. XBRETT !                    Aktuellen Brettnamen ausgeben
  535. XBRETT #                    Gruppen (Areas) ausgeben
  536. XBRETT ..           Innerhalb einer Gruppe ins vorherige Brett wechseln
  537. XBRETT Brettname            Ins Brett "Brettname" wechseln
  538. X
  539. XBRIEF User                 Persoenliche Nachricht an "User" senden
  540. XBRIEF Host!User            Persoenliche Nachricht an "User" auf "Host"
  541. X
  542. XCHAT                       Multiport Chatsystem
  543. X
  544. XDOWNLOAD                   Diese Funktion erlaubt es, Artikel und Programme
  545. X                           unter Protokoll-Kontrollen zu empfangen
  546. X
  547. XENDE               Mailbox verlassen
  548. XENDE *                     Mailbox verlassen (Scanner nicht aktuallisieren)
  549. X
  550. XHILFE                      Diese Kurzhilfe anzeigen
  551. XHILFE *                    Hilfstexte komplett ausgeben
  552. XHILFE Befehl               Hilfstext zum Befehl "Befehl" zeigen
  553. X
  554. XINHALT                     Index der aktuellen Artikel ausgeben
  555. XINHALT *                   Alle Artikel eines Brettes anzeigen
  556. X
  557. XLESEN                      Neue Artikel listen
  558. XLESEN *                    Alle Artikel listen
  559. XLESEN Artikel              Artikel mit der Nummer "Artikel" ausgeben
  560. XLESEN Artikel-Artikel      Artikel von Nummer "Artikel" bis "Artikel" zeigen
  561. X
  562. XLOESCHEN Artikel           Artikel Nummer "Artikel" loeschen
  563. XLOESCHEN Artikel-Artikel   Loeschen von "Artikel" bis "Artikel"
  564. X
  565. XMAKRO                      Makrovereinbarungen zeigen/aendern
  566. X
  567. XMINIX Shell-Befehl         Externes Kommando "Shell-Befehl" ausfuehren
  568. X
  569. XPM                         Ins persoenliche Verzeichnis wechseln
  570. X
  571. XPORTINFO                   Aktivitaeten der verschiedenen Terminals zeigen
  572. X
  573. XPOSTFACH                   Postfach einrichten
  574. X
  575. XRICHTUNG                   Leserichtung (alt <-> neu) aendern
  576. X
  577. XSCHREIBEN                  Artikel erfassen und speichern
  578. X
  579. XSETUP                      Persoenliche Anpassungen
  580. X
  581. XSPIELE               Verschiedene Spiele werden aufgelistet/aufgerufen
  582. X
  583. XSTATUS                     Ausgabe der eigenen Anpassungen
  584. X
  585. XSTATISTIK                  Datei-Statistik der versch. Bretter anzeigen
  586. XSTATISTIK *                Statistik komplett ausgeben
  587. XSTATISTIK $                Uebersicht der UUCP-Gebuehren 
  588. XSTATISTIK #                Protokoll der Downloads (PD-Bretter)
  589. XSTATISTIK %                Protokoll der Downloads (HITLISTE)
  590. X
  591. XSUCHEN Muster              Artikel eines Brettes nach "Muster" durchsuchen    
  592. X
  593. XUNTERSCHRIFT               Unterschrift anzeigen/aendern
  594. X
  595. XUPLOAD                     Diese Funktion wird ueber den Befehl SCHREIBEN
  596. X                           automatisch aufgerufen
  597. X
  598. XUSER                       Userliste ausgeben
  599. XUSER *                     Userliste mit erweiteren Informationen
  600. XUSER #                     Userliste mit Up-/Download Verhaeltnis
  601. XUSER Name                  Informationen ueber den Teilnehmern "Name"
  602. X
  603. XVERSION                    Versionsnummer ausgeben
  604. XVERSION *                  Versionsnummer und Definitionen ausgeben
  605. XVERSION #                  Versionsnummer und "Hall of Fame" ausgeben
  606. X
  607. XWEITERLEITEN               Weiterleitbare PMs anzeigen
  608. XWEITERLEITEN User          Weiterleitbare PM an "User" senden
  609. XWEITERLEITEN Artikel User  Artikel Nummer "Artikel" an "User" senden
  610. END_OF_FILE
  611.   if test 4032 -ne `wc -c <'etc/help.shorthelp'`; then
  612.     echo shar: \"'etc/help.shorthelp'\" unpacked with wrong size!
  613.   fi
  614.   # end of 'etc/help.shorthelp'
  615. fi
  616. if test -f 'src/CROSSREF' -a "${1}" != "-c" ; then 
  617.   echo shar: Will not clobber existing file \"'src/CROSSREF'\"
  618. else
  619.   echo shar: Extracting \"'src/CROSSREF'\" \(2297 characters\)
  620.   sed "s/^X//" >'src/CROSSREF' <<'END_OF_FILE'
  621. X/***************************************************************************/
  622. X/*        PROGRAMM  ix/Mbox                           */
  623. X/*             DATEI  CROSSREF                           */
  624. X/*        FUNKTIONEN  Cross-Referenz-Liste der Funktionen           */
  625. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  626. X/*  LETZTE AENDERUNG  16.02.1992                       */
  627. X/***************************************************************************/
  628. X
  629. Xadmin()                admin.c
  630. Xansage()            lesen.c
  631. Xansi()                 tools.c
  632. Xanzeigen()            lesen2.c
  633. Xbaudrate()            baudrate.c
  634. Xbef()                befehl.c
  635. Xbrett()                misc2.c
  636. Xbrief()                mail.c
  637. Xbigcopy()            tools.c
  638. Xcarboncopy()            weiterl.c
  639. Xcheckdomaintype()        lesen.c
  640. Xchk_newsgrp()            misc2.c
  641. Xclearline()            tools.c
  642. Xcontrol()            control.c
  643. Xcrypted()            tools.c
  644. Xctrlx()                ctrlx.c
  645. Xcut_arg()            loop.c
  646. Xcut_bef()            loop.c
  647. Xdateconv()            tools.c
  648. Xdatereconv()            tools.c
  649. Xdownload()            pd.c
  650. Xfetch_receipy()            mail.c
  651. Xfinger()            portinfo.c
  652. Xfixoutput()            main.c
  653. Xgames()                games.c
  654. Xgetch()                getch.c
  655. Xgetint()            getline.c
  656. Xgetline()            getline.c
  657. Xgetsite()            lesen.c
  658. Xheadline()            tools.c
  659. Xhelp()                help.c
  660. Xinhalt2()            lesen2.c
  661. Xinit()                main.c
  662. Xinit_user()            intro.c
  663. Xintro()                intro.c
  664. Xisin()                tools.c
  665. Xlength()            tools.c
  666. Xlesen()                lesen.c
  667. Xlesen2()            lesen2.c
  668. Xloeschen()            misc2.c
  669. Xloeschen2()            lesen2.c
  670. Xlogout()            main.c
  671. Xloop()                loop.c
  672. Xlockf()                tools.c
  673. Xmain()                main.c
  674. Xmaybe_locked()            tools.c
  675. Xmore()                more.c
  676. Xmkix()                pd.c
  677. Xmydate()            tools.c
  678. Xmytime()            tools.c
  679. Xnerror()            nerror.c & derror.c
  680. Xnoctrlx()            ctrlx.c
  681. Xnum_stripped()            tools.c
  682. Xpd()                pd.c
  683. Xperms()                tools.c
  684. Xport()                portinfo.c
  685. Xpostfach()            postfach.c
  686. Xprf()                misc.c
  687. Xpruefe()            misc.c
  688. Xrates()                loop.c
  689. Xrename()            tools.c
  690. Xscanner()            misc.c
  691. Xschreiben()            misc.c
  692. Xsetup()                  admin.c
  693. Xsetup_get()            admin.c
  694. Xshortname()            shortname.c
  695. Xshow()                show.c
  696. Xshow_level()            portinfo.c
  697. Xsigcatch()            loop.c
  698. Xstatus()            pd.c
  699. Xstatistik()            pd.c
  700. Xstrcomp()            tools.c
  701. Xstrcopy()            tools.c
  702. Xstripped()            tools.c
  703. Xsubb()                misc2.c
  704. Xtimeconv()            tools.c
  705. Xtimereconv()            tools.c
  706. Xtty()                 tools.c
  707. Xttyna()                tools.c
  708. Xunterschrift()            lesen.c
  709. Xunlockf()            tools.c
  710. Xupcased()            tools.c
  711. Xuser_aendern()            admin.c
  712. Xuser_anzeigen()            admin.c
  713. Xuser_loeschen()            admin.c
  714. Xuserliste()            portinfo.c
  715. Xwait_until_keypressed()        admin.c
  716. Xweiterleiten()            weiterl.c
  717. Xwhoami()            tools.c
  718. Xwhodo()                control.c
  719. Xyesno()                getline.c
  720. END_OF_FILE
  721.   if test 2297 -ne `wc -c <'src/CROSSREF'`; then
  722.     echo shar: \"'src/CROSSREF'\" unpacked with wrong size!
  723.   fi
  724.   # end of 'src/CROSSREF'
  725. fi
  726. if test -f 'src/SysV.getch.c' -a "${1}" != "-c" ; then 
  727.   echo shar: Will not clobber existing file \"'src/SysV.getch.c'\"
  728. else
  729.   echo shar: Extracting \"'src/SysV.getch.c'\" \(1811 characters\)
  730.   sed "s/^X//" >'src/SysV.getch.c' <<'END_OF_FILE'
  731. X/*
  732. X *    %Z% %M%    %I% %D% %Q%
  733. X *
  734. X *    Copyright (C) 1990 by Christian Schlichtherle
  735. X *                  (chriss@attron.ruhr.sub.org)
  736. X *
  737. X *    %M% - C module for getch(S).
  738. X *
  739. X *    "getch" is a DOS and curses(S) like function which reads
  740. X *    a character and returns immediately without waiting for
  741. X *    newline.
  742. X */
  743. X
  744. X#if    !defined(lint) && !defined(library)
  745. Xstatic char    sccsid[] = "%Z% %M% %I% %D% %Q%";
  746. X#endif /* not lint and not library */
  747. X
  748. X#include <stdio.h>    
  749. X#include <sys/ioctl.h>
  750. X#include <termio.h>
  751. X#include <errno.h>
  752. X
  753. X/*
  754. X * getch - Gets a character.
  755. X * This function gets one character and immediately returns
  756. X * without waiting for newline. The character is not echoed.
  757. X * This function can be used best when you want to input only one
  758. X * character within canonical input or if you need this function
  759. X * only very rarely.
  760. X * EOF is returned on errors or if an ignored signal occured.
  761. X */
  762. Xint    getch()
  763. X{
  764. X    static struct termio    told, tnew;
  765. X    static int    set = 0;
  766. X    int    rstat;
  767. X    char    c;
  768. X
  769. X    if (!set) {
  770. X            /* Get old terminal mode. */
  771. X        if (ioctl(0, TCGETA, &told) == -1)
  772. X            return (EOF);
  773. X
  774. X        /*
  775. X         * Set new terminal mode. Switch off
  776. X         * canonical input and echoing.
  777. X         */
  778. X        tnew = told;
  779. X        tnew.c_cc[VMIN] = 1;
  780. X        tnew.c_cc[VTIME] = 0;
  781. X        tnew.c_lflag &= ~(ICANON | ECHO);
  782. X
  783. X            /* Don't execute this part anymore. */
  784. X        set = 1;
  785. X    }
  786. X
  787. X        /* Set new terminal mode. */
  788. X    if (ioctl(0, TCSETA, &tnew) == -1)
  789. X        return (EOF);
  790. X
  791. X        /* Read one character. */
  792. X    rstat = read(0, &c, 1);
  793. X
  794. X        /* Reset old terminal mode.
  795. X           Don't get disturbed by ignored signals.
  796. X           unnet!volker: Quite right, but you'll get
  797. X           Timing-Problems using this Function on
  798. X               ESIX-Systems.    
  799. X        
  800. X    while (ioctl(0, TCSETA, &told) == -1)
  801. X        if (errno != EINTR)
  802. X            return (EOF);  */
  803. X
  804. X        ioctl(0, TCSETA, &told);
  805. X
  806. X    if (rstat != 1)
  807. X        return (EOF);
  808. X
  809. X    return ((int)c);
  810. X}
  811. X
  812. END_OF_FILE
  813.   if test 1811 -ne `wc -c <'src/SysV.getch.c'`; then
  814.     echo shar: \"'src/SysV.getch.c'\" unpacked with wrong size!
  815.   fi
  816.   # end of 'src/SysV.getch.c'
  817. fi
  818. if test -f 'src/befehl.c' -a "${1}" != "-c" ; then 
  819.   echo shar: Will not clobber existing file \"'src/befehl.c'\"
  820. else
  821.   echo shar: Extracting \"'src/befehl.c'\" \(1767 characters\)
  822.   sed "s/^X//" >'src/befehl.c' <<'END_OF_FILE'
  823. X/***************************************************************************/
  824. X/*        PROGRAMM  ix/Mbox                           */
  825. X/*             DATEI  befehl.c                           */
  826. X/*        FUNKTIONEN  bef()                           */
  827. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  828. X/*  LETZTE AENDERUNG  16.11.1991                       */
  829. X/***************************************************************************/
  830. X
  831. X#include <stdio.h>
  832. X
  833. X#include "mbox.h"
  834. X
  835. X
  836. X/***************************************************************************/
  837. X/*      FUNKTION  bef()                               */
  838. X/*  BESCHREIBUNG  Sucht entweder die Befehlsnummer zu einem bekannten      */
  839. X/*          Befehl, oder zeigt die Befehle als Uebersicht an.        */
  840. X/*          Dabei wird das Userlevel beruecksichtigt.                */
  841. X/*     PARAMETER  befehl  =  Befehl  =  Befehl, der gesucht werden soll    */
  842. X/*                 '?'     =  Befehle anzeigen (levelabhaengig)  */
  843. X/*          arg     =  '*'     =  ALLE Befehle anzeigen                */
  844. X/*     RUECKGABE  -1  =  Userlevel reicht nicht aus               */
  845. X/*               -9  =  Befehl nicht gefunden                   */
  846. X/*           n  =  Befehlsnummer (siehe Datei BEFEHLE und loop.c)       */
  847. X/***************************************************************************/
  848. X
  849. Xint bef(befehl, arg)
  850. Xchar befehl[];
  851. Xchar arg[];
  852. X{
  853. X  int b = 0, i = 0, l;
  854. X
  855. X  l = USER.level;
  856. X
  857. X  if (befehl[0] == '?') {
  858. X
  859. X    if (arg[0] == '*') l = 9999;
  860. X
  861. X    while (BEF[b].id != -1) {
  862. X        if ((BEF[b].prototyp == 1) && (BEF[b].in <= l)) {
  863. X            printf("%-14.14s ", BEF[b].befehl);
  864. X            i++;
  865. X            if (i == 5) {
  866. X                printf("\n");
  867. X                i = 0;
  868. X            }
  869. X        }
  870. X        b++;
  871. X    }
  872. X    printf("\n\n");
  873. X    return 0;
  874. X  }
  875. X  else {
  876. X    while (BEF[b].id != -1) {
  877. X        if (strcomp(befehl, BEF[b].befehl) == 0) {
  878. X            if (BEF[b].in <= USER.level)
  879. X                return BEF[b].id;
  880. X            else
  881. X                return -1;
  882. X        }
  883. X        b++;
  884. X    }
  885. X    return -9;
  886. X  }
  887. X}
  888. END_OF_FILE
  889.   if test 1767 -ne `wc -c <'src/befehl.c'`; then
  890.     echo shar: \"'src/befehl.c'\" unpacked with wrong size!
  891.   fi
  892.   # end of 'src/befehl.c'
  893. fi
  894. if test -f 'src/control.c' -a "${1}" != "-c" ; then 
  895.   echo shar: Will not clobber existing file \"'src/control.c'\"
  896. else
  897.   echo shar: Extracting \"'src/control.c'\" \(2590 characters\)
  898.   sed "s/^X//" >'src/control.c' <<'END_OF_FILE'
  899. X/***************************************************************************/
  900. X/*        PROGRAMM  ix/Mbox                           */
  901. X/*             DATEI  control.c                           */
  902. X/*        FUNKTIONEN  control(), whodo()                   */
  903. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  904. X/*  LETZTE AENDERUNG  24.11.1991                       */
  905. X/***************************************************************************/
  906. X
  907. X#include <stdio.h>
  908. X
  909. X#include "mbox.h"
  910. X
  911. X
  912. X
  913. X/***************************************************************************/
  914. X/*      FUNKTION  control()                           */
  915. X/*  BESCHREIBUNG  Fuehrt ein "Logbuch" in zwei versch. Dateien/auf zwei    */
  916. X/*          versch. Geraeten (CONSOLE & CPRN).                       */
  917. X/*     PARAMETER  text  =  Ansage-Text                                     */
  918. X/*          mode  =  '< 99'  =  Ausgabe auf CONSOLE                  */
  919. X/*          mode  =  '= 99'  =  Ausgabe auf CPRN                     */
  920. X/*     RUECKGABE  keine                                                       */
  921. X/***************************************************************************/
  922. X
  923. XFILE *contfp = NULL;
  924. X
  925. Xvoid control(text, mode)
  926. Xchar text[];
  927. Xint mode;
  928. X{
  929. X  if (mode < 99) {
  930. X
  931. X#ifdef _MINIX
  932. X    if(tty() >= FIRST_EX_TTY){
  933. X#endif
  934. X        contfp = fopen(CONSOLE_REDIRECT, "a");
  935. X        if (contfp == NULL) {
  936. X            printf("\n\n%s [%s]\n\n", CTL01_MSG, CONSOLE_REDIRECT);
  937. X            exit(-1);
  938. X        }
  939. X#ifdef _DATESTAMP
  940. X        fprintf(contfp, "%s %s <%s>  %s\n", mydate(1), mytime(1), ttyna(), text);
  941. X#else
  942. X        fprintf(contfp, "MBOX: (%s:) %s\n", ttyna(), text);
  943. X#endif
  944. X        fflush(contfp);
  945. X        fclose(contfp);
  946. X#ifdef _MINIX
  947. X    }
  948. X#endif
  949. X
  950. X  }
  951. X  if (mode == 99) {
  952. X    contfp = fopen(CPRN, "a");
  953. X    if (contfp == NULL) {
  954. X        printf("\n\n%s [%s]\n\n", CTL01_MSG, CPRN);
  955. X        exit(-1);
  956. X    }
  957. X    fprintf(contfp, "\n%s  -  %s\n", mydate(1), mytime(1));
  958. X    fprintf(contfp, "MBOX: (%s:) %s\n", ttyna(), text);
  959. X    fflush(contfp);
  960. X    fclose(contfp);
  961. X  }
  962. X}
  963. X
  964. X
  965. X
  966. X/***************************************************************************/
  967. X/*      FUNKTION  whodo()                           */
  968. X/*  BESCHREIBUNG  Erstellt eine Datei fuer die "portinfo()"-Routine.       */
  969. X/*     PARAMETER  text = Ansage-Text (aktiver Befehl etc.)                 */
  970. X/*     RUECKGABE  keine                                                       */
  971. X/***************************************************************************/
  972. X
  973. Xvoid whodo(text)
  974. Xchar text[];
  975. X{
  976. X  FILE *fp;
  977. X  char s[STRING];
  978. X
  979. X  s[0] = '\0'; strcat(s, HOME); strcat(s, "/etc/");
  980. X  strcat(s, (char *) ttyna()); strcat(s, ".");
  981. X
  982. X  fp = fopen(s, "w");
  983. X  if (fp == NULL) {
  984. X    nerror("control.c", 44, "whodo", "Datei-Schreibfehler", s);
  985. X  }
  986. X  fputs(text, fp);
  987. X  fclose(fp);
  988. X}
  989. END_OF_FILE
  990.   if test 2590 -ne `wc -c <'src/control.c'`; then
  991.     echo shar: \"'src/control.c'\" unpacked with wrong size!
  992.   fi
  993.   # end of 'src/control.c'
  994. fi
  995. if test -f 'src/ctrlx.c' -a "${1}" != "-c" ; then 
  996.   echo shar: Will not clobber existing file \"'src/ctrlx.c'\"
  997. else
  998.   echo shar: Extracting \"'src/ctrlx.c'\" \(2077 characters\)
  999.   sed "s/^X//" >'src/ctrlx.c' <<'END_OF_FILE'
  1000. X/***************************************************************************/
  1001. X/*        PROGRAMM  ix/Mbox                           */
  1002. X/*             DATEI  ctrlx.c                           */
  1003. X/*        FUNKTIONEN  ctrlx(), noctrlx()                   */
  1004. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  1005. X/*  LETZTE AENDERUNG  16.11.1991                       */
  1006. X/***************************************************************************/
  1007. X
  1008. X#ifdef _SYS7    /* UNIX System 7  (MINIX, COHERENT, ...) */
  1009. X
  1010. X#include  <sgtty.h>
  1011. Xstatic struct tchars newtc, oldtc;
  1012. X
  1013. X#else        /* UNIX System V  (UNIX, XENIX, ESIX, ...) */
  1014. X
  1015. X#include  <sys/termio.h> 
  1016. Xstatic struct termio newtc, oldtc;
  1017. X
  1018. X#endif
  1019. X
  1020. X
  1021. X
  1022. X
  1023. X/***************************************************************************/
  1024. X/*      FUNKTION  ctrlx()                           */
  1025. X/*  BESCHREIBUNG  Das QUIT-Zeichen wird auf (int) 24 gesetzt - das ent-       */
  1026. X/*          spricht einem CTRL-X. Wird nun CTRL-X gedrueckt, loest   */
  1027. X/*          UNIX das Signal SIGABRT aus ...                          */
  1028. X/*     PARAMETER  keine                                                       */
  1029. X/*     RUECKGABE  keine                                                    */
  1030. X/***************************************************************************/
  1031. X
  1032. Xvoid ctrlx()
  1033. X{
  1034. X
  1035. X#ifdef _SYS7
  1036. X
  1037. X  ioctl(0, TIOCGETC, (struct sgttyb *) &oldtc);
  1038. X  newtc = oldtc;
  1039. X  newtc.t_quitc = 24;
  1040. X  ioctl(0, TIOCSETC, (struct sgttyb *) &newtc);
  1041. X
  1042. X#else
  1043. X
  1044. X  ioctl(0, TCGETA, (struct termio *) &oldtc);
  1045. X  newtc = oldtc;
  1046. X  newtc.c_cc[VQUIT] = 24;
  1047. X  ioctl(0, TCSETA, (struct termio *) &newtc);
  1048. X
  1049. X#endif
  1050. X
  1051. X}
  1052. X
  1053. X
  1054. X/***************************************************************************/
  1055. X/*      FUNKTION  noctrlx()                           */
  1056. X/*  BESCHREIBUNG  Das QUIT-Zeichen wird "restauriert" ...           */
  1057. X/*     PARAMETER  keine                                                       */
  1058. X/*     RUECKGABE  keine                                                    */
  1059. X/***************************************************************************/
  1060. X
  1061. Xvoid noctrlx()
  1062. X{
  1063. X
  1064. X#ifdef _SYS7
  1065. X
  1066. X  ioctl(0, TIOCSETC, (struct sgttyb *) &oldtc);
  1067. X
  1068. X#else
  1069. X
  1070. X  ioctl(0, TCSETA, (struct termio *) &oldtc);
  1071. X
  1072. X#endif
  1073. X
  1074. X}
  1075. END_OF_FILE
  1076.   if test 2077 -ne `wc -c <'src/ctrlx.c'`; then
  1077.     echo shar: \"'src/ctrlx.c'\" unpacked with wrong size!
  1078.   fi
  1079.   # end of 'src/ctrlx.c'
  1080. fi
  1081. if test -f 'src/defs.h' -a "${1}" != "-c" ; then 
  1082.   echo shar: Will not clobber existing file \"'src/defs.h'\"
  1083. else
  1084.   echo shar: Extracting \"'src/defs.h'\" \(3215 characters\)
  1085.   sed "s/^X//" >'src/defs.h' <<'END_OF_FILE'
  1086. X/***************************************************************************/
  1087. X/* Was jetzt folgt, ist fuer Experimente voellig ungeeignet. Jegliche Aen- */
  1088. X/* derung bringt ueber kurz oder lang ernste Probleme fuer die Konsistenz  */
  1089. X/* der ix/MBox.                                        */
  1090. X/*                                       */
  1091. X/* Auch wenn Aenderungen (zufaellig) erfolgreich sein sollten, duerfen sie */
  1092. X/* nicht an dritte weitergeleitet werden.                   */
  1093. X/*                                       */
  1094. X/* Wer globale Variablen/Strukturen nicht akzeptiert, sollte jetzt auf der */
  1095. X/* Stelle diese Datei verlassen !                       */
  1096. X/***************************************************************************/
  1097. X
  1098. X  
  1099. X#ifndef EXTERN
  1100. X#define EXTERN extern
  1101. X#endif
  1102. X
  1103. X/* --------------------------- HAENDE WEG !!! ---------------------------- */
  1104. X
  1105. X#include "proto.h"
  1106. X
  1107. X#define STRING         81
  1108. X#define LSTRING         STRING + 4
  1109. X#define LONGSTRING  256
  1110. X#define BS            8
  1111. X#define CR           13
  1112. X#define LF           10
  1113. X#define TAB           9
  1114. X#define BELL          7
  1115. X#define DEL         127
  1116. X#define CTRL_X         24
  1117. X#define CTRL_Z       26
  1118. X#define CTRL_D        4
  1119. X#define ESC          27
  1120. X
  1121. X#if defined( _SYS7) || defined(_SCO)
  1122. X#define ENTER        13
  1123. X#else
  1124. X#define ENTER        10
  1125. X#endif
  1126. X
  1127. X
  1128. X#define fix( II )  ( II / 100 )
  1129. X#define flt( II )  ( II - (fix( II ) * 100 ))
  1130. X
  1131. X#define MAKRO_MAX_REK 30
  1132. X
  1133. X#define DEF_MAX_SCR_LINES 23
  1134. X
  1135. XEXTERN int MAX_SCR_LINES;
  1136. X
  1137. XEXTERN int OLDUID;
  1138. XEXTERN int OLDGID;
  1139. X
  1140. XEXTERN char PROMPT[STRING];
  1141. XEXTERN char TERMINAL[STRING];
  1142. X
  1143. XEXTERN char EDDY[STRING];
  1144. X
  1145. XEXTERN char BRETT[STRING];
  1146. XEXTERN char INHALT[STRING];
  1147. XEXTERN char NG[STRING];
  1148. X
  1149. XEXTERN char UGROUPS[STRING];
  1150. XEXTERN char MAKRO[STRING];
  1151. X
  1152. XEXTERN char MYNAME[STRING];
  1153. X
  1154. XEXTERN long LASTLOG;
  1155. XEXTERN int LASTTIME;
  1156. X
  1157. XEXTERN int IS_BUFFERED;
  1158. X
  1159. XEXTERN int SHORT_HEADER;
  1160. X
  1161. XEXTERN long IDX_SIZE;
  1162. X
  1163. XEXTERN struct userdaten {
  1164. X    int id;
  1165. X    char name[31];
  1166. X    char passwort[11];
  1167. X    char sh_name[15];
  1168. X    char nick[31];
  1169. X    char wohnort[31];
  1170. X    char strasse[31];
  1171. X    char telefon1[31];
  1172. X    char telefon2[31];
  1173. X    char geburtsdatum[31];
  1174. X        int terminal;
  1175. X    int editor;
  1176. X    int level;
  1177. X        int bell;
  1178. X    int prompt;
  1179. X    int more;
  1180. X    char lastlog[11]; 
  1181. X    int seq;
  1182. X        int intro;
  1183. X    int lasttime;
  1184. X     int lastmode;
  1185. X    int leserichtung;
  1186. X    int tlines;
  1187. X    long upratio;
  1188. X    long downratio;
  1189. X    long elapsed;
  1190. X    char newsgrps[STRING];
  1191. X    char schluessel[STRING];
  1192. X    char abused[STRING];
  1193. X    char account[STRING];         
  1194. X} USER;
  1195. X
  1196. X
  1197. X
  1198. X#define MAX_BEF 70
  1199. X
  1200. XEXTERN struct bef_struct {
  1201. X    int id;
  1202. X    int in;
  1203. X     int ex;
  1204. X    int prototyp;
  1205. X    char befehl[(STRING/2)];
  1206. X} BEF[MAX_BEF];
  1207. X
  1208. X
  1209. X#define MAX_MAK 30
  1210. X
  1211. XEXTERN struct mak_struct {
  1212. X    char makname[STRING];
  1213. X    char makwert[(STRING * 2)];
  1214. X} MAK[MAX_MAK];
  1215. X
  1216. X
  1217. X
  1218. X#define MAX_NEWSGRPS 20
  1219. X
  1220. XEXTERN char newsgrp[MAX_NEWSGRPS][(STRING/3)];
  1221. XEXTERN int newsgrpptr;
  1222. X
  1223. XEXTERN int MAILOUT_LEV;
  1224. XEXTERN int ADMIN_LEV;
  1225. XEXTERN int WRITE_EX_LEV;
  1226. XEXTERN int WRITE_IN_LEV;
  1227. XEXTERN int WRITE_INTERNAT;
  1228. XEXTERN int PD_D_LEV;
  1229. XEXTERN int PD_U_LEV;
  1230. XEXTERN int EXE_LEV; 
  1231. XEXTERN int GUEST_LEV;
  1232. X
  1233. XEXTERN char CONSOLE_REDIRECT[STRING];
  1234. X
  1235. XEXTERN int BB1;
  1236. XEXTERN int BB2;
  1237. XEXTERN int BB3;
  1238. XEXTERN int BB4;
  1239. XEXTERN int BB5;
  1240. XEXTERN int BB6;
  1241. XEXTERN int BB7;
  1242. XEXTERN int BB8;
  1243. XEXTERN int BB9;
  1244. X
  1245. XEXTERN char UUCPID[STRING];
  1246. X
  1247. XEXTERN int BAUDRATE;
  1248. X
  1249. X
  1250. X/* --------------------------- HAENDE WEG !!! ---------------------------- */
  1251. X
  1252. X
  1253. X
  1254. X
  1255. X
  1256. X
  1257. X
  1258. X
  1259. END_OF_FILE
  1260.   if test 3215 -ne `wc -c <'src/defs.h'`; then
  1261.     echo shar: \"'src/defs.h'\" unpacked with wrong size!
  1262.   fi
  1263.   # end of 'src/defs.h'
  1264. fi
  1265. if test -f 'src/derror.c' -a "${1}" != "-c" ; then 
  1266.   echo shar: Will not clobber existing file \"'src/derror.c'\"
  1267. else
  1268.   echo shar: Extracting \"'src/derror.c'\" \(1740 characters\)
  1269.   sed "s/^X//" >'src/derror.c' <<'END_OF_FILE'
  1270. X/***************************************************************************/
  1271. X/*        PROGRAMM  ix/Mbox                           */
  1272. X/*             DATEI  dummy_nerror.c                       */
  1273. X/*        FUNKTIONEN  nerror                           */
  1274. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  1275. X/*  LETZTE AENDERUNG  16.11.1991                       */
  1276. X/***************************************************************************/
  1277. X
  1278. X#include <stdio.h>
  1279. X
  1280. X#include "defs.h"
  1281. X#include "mbox.msg"
  1282. X
  1283. X/***************************************************************************/
  1284. X/*      FUNKTION  nerror()                           */
  1285. X/*  BESCHREIBUNG  Zeigt Systemfehler (Dateien koennen nicht gefunden o.    */
  1286. X/*          geoeffnet werden, etc.) an. Anschliessend wie die        */
  1287. X/*          Befehlseingabe aufgerufen.                               */
  1288. X/*                                                               */
  1289. X/*          ACHTUNG: Nach "nerror()" laeuft die MBox zwar weiter,    */
  1290. X/*          aber beim Terminieren wird ein "core" ausgegeben.        */
  1291. X/*     PARAMETER  file     = Datei in der der Fehler aufgetreten ist       */
  1292. X/*          line     = Zeile in der Datei                            */
  1293. X/*          function = Funktion in der Datei                         */
  1294. X/*          descr    = Fehlerbeschreibung                               */
  1295. X/*          er       = Datei/Variable                                */
  1296. X/*     RUECKGABE  keine                            */
  1297. X/***************************************************************************/
  1298. X
  1299. Xvoid nerror(file, line, function, descr, er)
  1300. Xchar file[];
  1301. Xint line;
  1302. Xchar function[], descr[], er[];
  1303. X{
  1304. X  char s[80];
  1305. X
  1306. X  printf("%c%s %s (%s) - %s \"%s\"\n", CR, DER01_MSG, function, file, descr, er);
  1307. X
  1308. X  sprintf(s, "[%s] %s, %d\n***** %s, %s, %s ... %s !!!",
  1309. X    DER02_MSG, file, line, function, descr, er, DER03_MSG);
  1310. X  
  1311. X}
  1312. X
  1313. X
  1314. END_OF_FILE
  1315.   if test 1740 -ne `wc -c <'src/derror.c'`; then
  1316.     echo shar: \"'src/derror.c'\" unpacked with wrong size!
  1317.   fi
  1318.   # end of 'src/derror.c'
  1319. fi
  1320. if test -f 'src/help.c' -a "${1}" != "-c" ; then 
  1321.   echo shar: Will not clobber existing file \"'src/help.c'\"
  1322. else
  1323.   echo shar: Extracting \"'src/help.c'\" \(2401 characters\)
  1324.   sed "s/^X//" >'src/help.c' <<'END_OF_FILE'
  1325. X/***************************************************************************/
  1326. X/*        PROGRAMM  ix/Mbox                           */
  1327. X/*             DATEI  help.c                           */
  1328. X/*        FUNKTIONEN  help()                           */
  1329. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  1330. X/*  LETZTE AENDERUNG  16.11.1991                       */
  1331. X/***************************************************************************/
  1332. X
  1333. X#include <stdio.h>
  1334. X
  1335. X#include "mbox.h"
  1336. X
  1337. X
  1338. X/***************************************************************************/
  1339. X/*      FUNKTION  help()                            */
  1340. X/*  BESCHREIBUNG  Der Inhalt der Datei HILFE wird entweder komplett ange-  */
  1341. X/*          zeigt, oder aber in Abhaengigkeit von 'cmd' in Auszuegen */
  1342. X/*          ausgegeben.                                              */
  1343. X/*     PARAMETER  cmd  =  '*'      =  HILFE wird komplett ausgegeben       */
  1344. X/*                        '='      =  SHORTHELP                            */
  1345. X/*          #Befehl         =  HILFE zu "Befehl" wird ausgegeben    */
  1346. X/*     RUECKGABE  0  =  Keinen Eintrag gefunden                            */
  1347. X/*                n  =  Anzahl der Eintraege                   */
  1348. X/***************************************************************************/
  1349. X
  1350. Xint help(cmd)
  1351. Xchar cmd[];
  1352. X{
  1353. X  FILE *fp;
  1354. X  char s[255];
  1355. X  int ende = 0, ok = 0, found = 0, toggle = 0, lines = 0;
  1356. X
  1357. X  show(KURZHILFE, 99, 99); /* RESET */
  1358. X  
  1359. X  if(cmd[0] == '='){
  1360. X    headline( HLP01_MSG );
  1361. X    show(KURZHILFE, 9999, USER.more);    
  1362. X    return 9999;
  1363. X  }
  1364. X
  1365. X  maybe_locked(HILFE, "r");
  1366. X  fp = fopen(HILFE, "r");
  1367. X  if (fp == NULL) {
  1368. X    nerror("help.c", 14, "help", "Datei-Lesefehler", HILFE);
  1369. X  }
  1370. X  if (cmd[0] != '#') {
  1371. X    ok = 2;
  1372. X    found++;
  1373. X  }
  1374. X  headline( HLP01_MSG );
  1375. X  lines = 0;
  1376. X
  1377. X  while ((fgets(s, 85, fp) != NULL) && !ende) {
  1378. X
  1379. X    if (USER.more > 0) {
  1380. X        if (lines >= MAX_SCR_LINES) {
  1381. X            lines = 0;
  1382. X            if (more() != 0) return 1;
  1383. X        }
  1384. X    }
  1385. X    if (ok == 2) {
  1386. X        if (s[0] != '#') {
  1387. X            printf("%s", s);
  1388. X            lines++;
  1389. X            if (toggle > 0) {
  1390. X                ansi("me");
  1391. X                toggle = 0;
  1392. X            }
  1393. X        }
  1394. X        else {
  1395. X            printf("\n");
  1396. X            lines++;
  1397. X            ansi("md");
  1398. X            toggle++;
  1399. X        }
  1400. X    }
  1401. X    else {
  1402. X        if ((ok == 1) && (s[0] == '#')) {
  1403. X            ok = 0;
  1404. X            printf("\n");
  1405. X            lines++;
  1406. X        }
  1407. X        if ((ok == 1) && (s[0] != '#')) {
  1408. X            printf("%s", s);
  1409. X            lines++;
  1410. X            if (toggle > 0) {
  1411. X                ansi("me");
  1412. X                toggle == 0;
  1413. X            }
  1414. X        }
  1415. X        if ((ok == 0) && (s[0] == '#')) {
  1416. X            if (strcomp(cmd, s) == 0) {
  1417. X                ok = 1;
  1418. X                found++;
  1419. X                ansi("md");
  1420. X                toggle++;
  1421. X            }
  1422. X        }
  1423. X    }
  1424. X  }
  1425. X  fclose(fp);
  1426. X
  1427. X  return found;
  1428. X}
  1429. END_OF_FILE
  1430.   if test 2401 -ne `wc -c <'src/help.c'`; then
  1431.     echo shar: \"'src/help.c'\" unpacked with wrong size!
  1432.   fi
  1433.   # end of 'src/help.c'
  1434. fi
  1435. if test -f 'src/makro.c' -a "${1}" != "-c" ; then 
  1436.   echo shar: Will not clobber existing file \"'src/makro.c'\"
  1437. else
  1438.   echo shar: Extracting \"'src/makro.c'\" \(5459 characters\)
  1439.   sed "s/^X//" >'src/makro.c' <<'END_OF_FILE'
  1440. X/***************************************************************************/
  1441. X/*        PROGRAMM  ix/Mbox                           */
  1442. X/*             DATEI  makro.c                           */
  1443. X/*        FUNKTIONEN  makro()                           */
  1444. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  1445. X/*  LETZTE AENDERUNG  16.11.1991                       */
  1446. X/***************************************************************************/
  1447. X
  1448. X#include <stdio.h>
  1449. X
  1450. X#include "mbox.h"
  1451. X
  1452. X
  1453. Xvoid get_makros();
  1454. X
  1455. X/***************************************************************************/
  1456. X/*      FUNKTION  makro()                           */
  1457. X/*  BESCHREIBUNG  Makros auswerten                       */
  1458. X/*     PARAMETER  s  =  Eingabezeile                                       */
  1459. X/*     RUECKGABE  Eingabezeile mit Gegenwerten der Makros               */
  1460. X/***************************************************************************/
  1461. X
  1462. Xchar *makro( s )
  1463. Xchar s[];
  1464. X{
  1465. X  static char t[STRING];
  1466. X  char f[STRING];
  1467. X  int a = 0, b = 0, i = 0;
  1468. X  int m = 0, ok = 0;
  1469. X  int subcom = 0;
  1470. X
  1471. X  t[0] = '\0';
  1472. X
  1473. X  strcat(s, " ");
  1474. X
  1475. X  while(s[0] == ' ') *s++;
  1476. X
  1477. X  while(s[i] != '\0'){
  1478. X
  1479. X    if(s[i] == ' '){
  1480. X        b = i -1;
  1481. X        f[0] = '\0';
  1482. X        strcat(f, strcopy(s, a, b));
  1483. X        a = i +1;
  1484. X        ok = 0; 
  1485. X        m = 0;
  1486. X
  1487. X        while(MAK[m].makname[0] != '\0'){
  1488. X            if((strcomp(f, MAK[m].makname) == 0) && (strcomp(MAK[m].makname, f) == 0) && (subcom == 0)){
  1489. X                ok = 1; 
  1490. X                strcat(t, MAK[m].makwert);
  1491. X            }
  1492. X            m++;
  1493. X        }
  1494. X        if(ok == 0) strcat(t, stripped(f));
  1495. X        strcat(t, " ");
  1496. X    
  1497. X        subcom++;
  1498. X    }
  1499. X    i++;
  1500. X  }
  1501. X  return (char *) t;
  1502. X}
  1503. X
  1504. X
  1505. X
  1506. X/***************************************************************************/
  1507. X/*      FUNKTION  set_makros                           */
  1508. X/*  BESCHREIBUNG  Die Makro-Datei wird angezeigt und kann geandert werden. */
  1509. X/*     PARAMETER  keine                                                       */
  1510. X/*     RUECKGABE  keine                                                       */
  1511. X/***************************************************************************/
  1512. X
  1513. Xvoid set_makros()
  1514. X{
  1515. X  FILE *ff;
  1516. X  char s[STRING];
  1517. X  char t[STRING];
  1518. X  char tmp[STRING];
  1519. X  char c;
  1520. X  int b;
  1521. X
  1522. X
  1523. X  printf("\n\n%s\n\n", MAK01_MSG);
  1524. X
  1525. X  ansi("md");
  1526. X  b = 4;
  1527. X  while(MAK[b].makname[0] != '\0'){
  1528. X    printf("%s%c=%c%s\n", MAK[b].makname, TAB, TAB, MAK[b].makwert);
  1529. X    b++;
  1530. X  }  
  1531. X  printf("\n");  
  1532. X  ansi("mr");
  1533. X  printf("%c%s [%c, %c] > ", CR, MAK02_MSG, GBL06_MSG, GBL07_MSG);
  1534. X  ansi("me");
  1535. X
  1536. X  c = yesno();
  1537. X
  1538. X  if (c == GBL06_MSG) {
  1539. X    sprintf(t, "%s %s", EDDY, MAKRO);
  1540. X    system(t);
  1541. X  }
  1542. X
  1543. X  get_makros();
  1544. X
  1545. X  printf("\n");
  1546. X}
  1547. X
  1548. X
  1549. X
  1550. X
  1551. X/***************************************************************************/
  1552. X/*      FUNKTION  get_makros()                           */
  1553. X/*  BESCHREIBUNG  Liest die userabhaengigen Makro-Vereinbarungen in die    */
  1554. X/*          Stuktur ein                                   */
  1555. X/*     PARAMETER  keine                                                       */
  1556. X/*     RUECKGABE  keine                               */
  1557. X/***************************************************************************/
  1558. X
  1559. Xvoid get_makros()
  1560. X{
  1561. X  FILE *fp;
  1562. X  char s[STRING];
  1563. X  char t[STRING];
  1564. X  int b = 0, i = 0;
  1565. X
  1566. X
  1567. X  sprintf(MAK[0].makname, "demo");
  1568. X  sprintf(MAK[0].makwert, "?, sl 3, PM, sl 3, i, sl 3, anr, sl 3, dem1");
  1569. X  sprintf(MAK[1].makname, "dem1");
  1570. X  sprintf(MAK[1].makwert, "b, sl 3, +, +, +, +, +, +, i, sl 3, +, dem2");
  1571. X  sprintf(MAK[2].makname, "dem2");
  1572. X  sprintf(MAK[2].makwert, "i, sl 3, +, i, sl 3, b, +, i, sl 3, ?, dem3");
  1573. X  sprintf(MAK[3].makname, "dem3");
  1574. X  sprintf(MAK[3].makwert, "sl 3, v, sl 3, h hilf, sl 3, st, sl 3, pm, i");
  1575. X
  1576. X  fp = fopen(MAKRO, "r");
  1577. X  if (fp == NULL) {
  1578. X    MAK[4].makname[0] = '\0';
  1579. X    return;
  1580. X  }
  1581. X
  1582. X
  1583. X  b = 4;
  1584. X
  1585. X  while(fgets(s, 80, fp) != NULL){
  1586. X
  1587. X    MAK[b].makname[0] = '\0';
  1588. X    MAK[b].makwert[0] = '\0';
  1589. X    
  1590. X    i = 0;
  1591. X
  1592. X    while((s[i] != '=') && (s[i] != '\0')) i++;
  1593. X
  1594. X    t[0] = '\0'; strcat(t, strcopy(s, 0, (i-1)));
  1595. X    strcat(MAK[b].makname, stripped(t));
  1596. X
  1597. X    t[0] = '\0'; strcat(t, strcopy(s, (i+1), length(s)));
  1598. X     strcat(MAK[b].makwert, stripped(t));
  1599. X
  1600. X    b++;
  1601. X    if (b >= (MAX_MAK -1)) {
  1602. X        nerror("makro.c", 108, "get_makro", "MAX_MAK ueberschritten !!", "???");
  1603. X    }
  1604. X  }
  1605. X  MAK[b].makname[0] = '\0';
  1606. X
  1607. X  fclose(fp);
  1608. X
  1609. X}
  1610. X
  1611. X/***************************************************************************/
  1612. X/*      FUNKTION  add_makros()                           */
  1613. X/*  BESCHREIBUNG  Haengt Makro-Definition aus einer Prompt-Eingabe an die  */
  1614. X/*          Makro-Datei an                               */
  1615. X/*     PARAMETER  s  =  Makro-Definition                                   */
  1616. X/*     RUECKGABE  keine                               */
  1617. X/***************************************************************************/
  1618. X
  1619. Xvoid add_makro( s )
  1620. Xchar s[];
  1621. X{
  1622. X  FILE *fp;
  1623. X
  1624. X  fp = fopen( MAKRO, "a" );
  1625. X  if(fp == NULL){
  1626. X    nerror("makro.c", 189, "add_makro", "Datei-Erweiterungsfehler", MAKRO);
  1627. X  }
  1628. X  fputs((char *) stripped(s), fp);
  1629. X  fputs("\n", fp);
  1630. X  fclose(fp);
  1631. X
  1632. X  get_makros();
  1633. X
  1634. X  printf("\n\n%s\n", MAK03_MSG);
  1635. X  
  1636. X}
  1637. X
  1638. X
  1639. X/***************************************************************************/
  1640. X/*      FUNKTION  makro_definition()                       */
  1641. X/*  BESCHREIBUNG  Prueft ob die Prompt-Eingabe eine Makro-Definition ent-  */
  1642. X/*          haelt.                                       */
  1643. X/*     PARAMETER  s  =  Prompt-Eingabe                                     */
  1644. X/*     RUECKGABE  0  =  Keine Definition                   */
  1645. X/*                1  =  Makro-Definition                   */
  1646. X/***************************************************************************/
  1647. X
  1648. Xint makro_definition( s )
  1649. Xchar s[];
  1650. X{
  1651. X  int i = 0;
  1652. X  int ok = 0;
  1653. X
  1654. X  while(s[i] != '\0'){
  1655. X    if(s[i] == '=') ok++;
  1656. X    i++;
  1657. X  }
  1658. X
  1659. X  if(ok == 1){
  1660. X    add_makro( s );
  1661. X  }
  1662. X  if(ok > 1){
  1663. X    ansi("md");
  1664. X    printf(" %s\n", MAK04_MSG);
  1665. X    ansi("me");
  1666. X  }
  1667. X  return ok;
  1668. X}
  1669. X
  1670. END_OF_FILE
  1671.   if test 5459 -ne `wc -c <'src/makro.c'`; then
  1672.     echo shar: \"'src/makro.c'\" unpacked with wrong size!
  1673.   fi
  1674.   # end of 'src/makro.c'
  1675. fi
  1676. if test -f 'src/nerror.c' -a "${1}" != "-c" ; then 
  1677.   echo shar: Will not clobber existing file \"'src/nerror.c'\"
  1678. else
  1679.   echo shar: Extracting \"'src/nerror.c'\" \(1859 characters\)
  1680.   sed "s/^X//" >'src/nerror.c' <<'END_OF_FILE'
  1681. X/***************************************************************************/
  1682. X/*        PROGRAMM  ix/Mbox                           */
  1683. X/*             DATEI  nerror.c                           */
  1684. X/*        FUNKTIONEN  nerror                           */
  1685. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  1686. X/*  LETZTE AENDERUNG  16.11.1991                       */
  1687. X/***************************************************************************/
  1688. X
  1689. X#include <stdio.h>
  1690. X#include <setjmp.h>
  1691. X
  1692. X#include "mbox.h"
  1693. X
  1694. X
  1695. Xextern jmp_buf jmpenv;
  1696. X
  1697. X
  1698. X/***************************************************************************/
  1699. X/*      FUNKTION  nerror()                           */
  1700. X/*  BESCHREIBUNG  Zeigt Systemfehler (Dateien koennen nicht gefunden o.    */
  1701. X/*          geoeffnet werden, etc.) an. Anschliessend wird die       */
  1702. X/*          Befehlseingabe aufgerufen.                               */
  1703. X/*                                                               */
  1704. X/*          ACHTUNG: Nach "nerror()" laeuft die MBox zwar weiter,    */
  1705. X/*          aber beim Terminieren wird ein "core" ausgegeben.        */
  1706. X/*     PARAMETER  file     = Datei in der der Fehler aufgetreten ist       */
  1707. X/*          line     = Zeile in der Datei                            */
  1708. X/*          function = Funktion in der Datei                         */
  1709. X/*          descr    = Fehlerbeschreibung                               */
  1710. X/*          er       = Datei/Variable                                */
  1711. X/*     RUECKGABE  keine                            */
  1712. X/***************************************************************************/
  1713. X
  1714. Xvoid nerror(file, line, function, descr, er)
  1715. Xchar file[];
  1716. Xint line;
  1717. Xchar function[], descr[], er[];
  1718. X{
  1719. X  char s[80];
  1720. X
  1721. X  ansi("md");
  1722. X  printf("%c%s ", CR, NER01_MSG);
  1723. X  ansi("me");
  1724. X
  1725. X  printf("%s (%s) - %s \"%s\"\n", function, file, descr, er);
  1726. X
  1727. X  sprintf(s, "[%s] %s, %d\n***** %s, %s, %s ... %s !!!",
  1728. X    NER02_MSG, file, line, function, descr, er, NER03_MSG);
  1729. X
  1730. X  control(s, 99);
  1731. X  control(s, 3);
  1732. X
  1733. X  longjmp(jmpenv, 1);
  1734. X}
  1735. X
  1736. END_OF_FILE
  1737.   if test 1859 -ne `wc -c <'src/nerror.c'`; then
  1738.     echo shar: \"'src/nerror.c'\" unpacked with wrong size!
  1739.   fi
  1740.   # end of 'src/nerror.c'
  1741. fi
  1742. if test -f 'src/suchen.c' -a "${1}" != "-c" ; then 
  1743.   echo shar: Will not clobber existing file \"'src/suchen.c'\"
  1744. else
  1745.   echo shar: Extracting \"'src/suchen.c'\" \(2335 characters\)
  1746.   sed "s/^X//" >'src/suchen.c' <<'END_OF_FILE'
  1747. X/***************************************************************************/
  1748. X/*        PROGRAMM  ix/Mbox                           */
  1749. X/*             DATEI  suchen.c                           */
  1750. X/*        FUNKTIONEN  weiterleiten()                       */
  1751. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  1752. X/*  LETZTE AENDERUNG  10.01.1992                       */
  1753. X/***************************************************************************/
  1754. X
  1755. X#include <stdio.h>
  1756. X
  1757. X#include "mbox.h"
  1758. X
  1759. X
  1760. X/***************************************************************************/
  1761. X/*      FUNKTION  suchen()                           */
  1762. X/*  BESCHREIBUNG  Artikel im aktuellen Brett mit GREP nach muster durch-   */
  1763. X/*           suchen und entsprechende Artikel anzeigen.           */
  1764. X/*     PARAMETER  muster = Suchbegriff                           */
  1765. X/*     RUECKGABE  keine                                                    */
  1766. X/***************************************************************************/
  1767. X
  1768. Xvoid suchen( muster )
  1769. Xchar muster[];
  1770. X{
  1771. X  FILE *fp;
  1772. X
  1773. X  char s[STRING];
  1774. X  char t[STRING];
  1775. X  char tmp[STRING];
  1776. X  char ex[LONGSTRING];
  1777. X
  1778. X  int fpid;
  1779. X  int found = 0;
  1780. X  int ok = 0;
  1781. X  int i;
  1782. X  
  1783. X
  1784. X  if(muster[0] == '\0'){
  1785. X    ansi( "md" );
  1786. X    printf("\n\n%s ", SUC01_MSG);
  1787. X    ansi( "me" );
  1788. X    strcpy(muster, (char *) getline(60, 1, 32, ""));
  1789. X    if(muster[0] == '\0'){
  1790. X        printf(" <- %s\n", SUC02_MSG);
  1791. X        return;
  1792. X    }
  1793. X  }
  1794. X
  1795. X  i = 0;
  1796. X  while(muster[i] != '\0'){
  1797. X    if(muster[i] == '"') muster[i] = ' ';
  1798. X    i++;
  1799. X  }
  1800. X
  1801. X  sprintf(s, " %s \"%s\" %s [%s] ", SUC03_MSG, (char *) stripped(muster), SUC04_MSG, NG);
  1802. X  headline( s );
  1803. X
  1804. X  printf("%s .", SUC05_MSG);
  1805. X
  1806. X  sprintf(tmp, "%s/such.%d", TMP, getpid());
  1807. X
  1808. X  if(strcomp("PM", BRETT) == 0){
  1809. X    sprintf(t, "%s/usr/%d", HOME, USER.id);
  1810. X    chdir( t );
  1811. X  }
  1812. X  else{
  1813. X    chdir( BRETT );
  1814. X  }
  1815. X
  1816. X  switch( (fpid = fork()) ){
  1817. X        case -1 :
  1818. X                break;
  1819. X        case  0 :    while(1){
  1820. X                    printf(".");
  1821. X                    sleep(3);
  1822. X                }    
  1823. X                break;
  1824. X  }
  1825. X
  1826. X  sprintf(s, "%s \"%s\" * > %s 2> %s", GREP, (char *) stripped(muster), tmp, CPRN);
  1827. X  system( s );
  1828. X
  1829. X  kill( fpid, 9 );
  1830. X  wait( fpid );
  1831. X
  1832. X  printf("%c", CR);
  1833. X
  1834. X
  1835. X  fp = fopen( tmp, "r" );
  1836. X  if(fp == 0){
  1837. X    
  1838. X  }
  1839. X  while((fgets(ex, LONGSTRING, fp) != NULL) && (ok == 0)){
  1840. X    if(atoi(ex) != 0){    
  1841. X        if(show( (char *) stripped(ex), 9999, USER.more ) == -1) ok++;
  1842. X        found++;
  1843. X    }
  1844. X  }
  1845. X  fclose(fp);
  1846. X
  1847. X  chdir( HOME );
  1848. X
  1849. X  if(found == 0){
  1850. X    printf("%s \"%s\" %s\n", SUC06_MSG, (char *) stripped(muster), SUC07_MSG);
  1851. X  }
  1852. X
  1853. X  unlink( tmp );
  1854. X}
  1855. END_OF_FILE
  1856.   if test 2335 -ne `wc -c <'src/suchen.c'`; then
  1857.     echo shar: \"'src/suchen.c'\" unpacked with wrong size!
  1858.   fi
  1859.   # end of 'src/suchen.c'
  1860. fi
  1861. echo shar: End of archive 9 \(of 10\).
  1862. cp /dev/null ark9isdone
  1863. MISSING=""
  1864. for I in 1 2 3 4 5 6 7 8 9 10 ; do
  1865.     if test ! -f ark${I}isdone ; then
  1866.     MISSING="${MISSING} ${I}"
  1867.     fi
  1868. done
  1869. if test "${MISSING}" = "" ; then
  1870.     echo You have unpacked all 10 archives.
  1871.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1872. else
  1873.     echo You still must unpack the following archives:
  1874.     echo "        " ${MISSING}
  1875. fi
  1876. exit 0
  1877. exit 0 # Just in case...
  1878.