home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume31 / mbox / part08 < prev    next >
Encoding:
Text File  |  1992-07-09  |  61.0 KB  |  2,135 lines

  1. Newsgroups: comp.sources.misc
  2. From: Volker.Schuermann@unnet.w.open.de@unnet (Volker Schuermann)
  3. Subject:  v31i024:  mbox - A BBS for UNIX and MINIX v1.6 PL10, Part08/11
  4. Message-ID: <1992Jul10.050432.27711@sparky.imd.sterling.com>
  5. X-Md4-Signature: deff2dc67f3976636251f6b911747207
  6. Date: Fri, 10 Jul 1992 05:04:32 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 31, Issue 24
  11. Archive-name: mbox/part08
  12. Environment: MINIX, ISC, ESIX, SVR3
  13. Supersedes: mbox: Volume 29, Issue 63-72
  14.  
  15. #! /bin/sh
  16. # This is a shell archive.  Remove anything before this line, then feed it
  17. # into a shell via "sh file" or similar.  To overwrite existing files,
  18. # type "sh file -c".
  19. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  20. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  21. # Contents:  Changelog TUTORIAL etc/english.hilfe etc/help.shorthelp
  22. #   src/bled.doc src/lesen2.c src/misc2.c
  23. # Wrapped by kent@sparky on Thu Jul  9 23:26:03 1992
  24. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  25. echo If this archive is complete, you will see the following message:
  26. echo '          "shar: End of archive 8 (of 11)."'
  27. if test -f 'Changelog' -a "${1}" != "-c" ; then 
  28.   echo shar: Will not clobber existing file \"'Changelog'\"
  29. else
  30.   echo shar: Extracting \"'Changelog'\" \(9331 characters\)
  31.   sed "s/^X//" >'Changelog' <<'END_OF_FILE'
  32. X
  33. XHeute, nach einem Telefonat mit Volker haben wir beschlossen die Versionen
  34. Xder ix/MBox mal auf einen Gleichstand zu bringen.
  35. X
  36. XDa inzwischen mehrere Leute an der Box programmieren, verliert man leicht
  37. Xden Ueberblick, wenn nicht von einem definierten Stand der Version ausge-
  38. Xgangen wird.
  39. X
  40. XDie Version 1.6.0 soll deshalb die Version sein, auf die sich alle nach-
  41. Xfolgenden Aenderungen beziehen!
  42. X
  43. XAlso wenn Aenderungen gemacht werden, diff's erzeugen und Volker schicken.
  44. XDabei sollte man die Angabe der Version (ab Version 1.6.0) und Patchlevel
  45. Xnicht vergessen, auf die sich das Diff bezieht!
  46. X
  47. XUm Aenderungen nachvollziehen zu koennen, waehre meine Bitte, an dieses
  48. XFile kurze Erlaeuterungen zu den Aenderungen anzuhaengen!
  49. X
  50. X---------------------------------------------------------------------------
  51. X
  52. XSat Nov 16 02:21:20 MEZ 1991, Hergo Pape <hergo@ivcmd.Boerde.DE>
  53. X
  54. Xix/MBox 1.6 PL1::
  55. X
  56. X-  File patchlevel.h eingefuert, hier sind die Version, der Autor und
  57. X   die aktuelle Patchlevel definiert. Das File wird in mbox.h eingelesen.
  58. X
  59. X-  Makefile geaendert, "bled" braucht nicht mehr extra uebersetzt werden.
  60. X   Die Variable MBOXHOME eingefuehrt, daher man kann jetzt die Sourcen
  61. X   irgendwo uebersetzen und installiert wird in MBOXHOME. Ist meiner Meinung
  62. X   nach guenstiger fuer die Versionskontrolle.
  63. X
  64. X-  In nerror() den Aufruf der Funktion loop() gegen longjmp() ausgetauscht.
  65. X   Zumindest unter ISC gibt es jetzt kein core mehr beim verlassen der Box.
  66. X
  67. X-  In mb-daemon.c gibt die Finktion scan() nur char zurueck! Geaendert auf
  68. X   char *scan(), da ein String zurueckgegeben wird.
  69. X
  70. X-  In bled.c, HILFE wird jetzt im Makefile definiert.
  71. X
  72. X-  File portinfo.c, bei ps musz leider anstatt "ps a", "ps -a" angegeben
  73. X   werden. Kann jetzt per #define in mbox.h definiert werden.
  74. X   Wenn ich <defunkt> Prozesse habe, geht das aber auch noch nicht richtig.
  75. X
  76. X-  If's auf File-Zeiger von 0 nach NULL geaendert. Ich hoffe ich habe alle
  77. X   gefunden.
  78. X
  79. X---------------------------------------------------------------------------
  80. X
  81. XSun Nov 17 09:02:12 CET 1991, Volker Schuermann <volkers@unnet.w.open.de>
  82. X
  83. Xix/MBox 1.6 PL1::
  84. X
  85. X-  Fataler Fehler im File xmd.c gefunden und behoben. 
  86. X   (Das Uebliche: "=" oder "==", dass ist hier die Frage ...)
  87. X
  88. X-  Ausgabe im Modus "Seitenweise ausgeben, Seitende markieren" komplett
  89. X   ueberarbeitet. Diese Aenderung bezieht sich auf show.c, portinfo.c,
  90. X   tools.c, misc2.c, misc.c und lesen2.c.
  91. X
  92. X-  Hergo's Makefile fast komplett uebernommen - leider ist MINIXens
  93. X   MAKE etwas umstaendlicher, desshalb musste 'ne kleinere Aenderung
  94. X   gemacht werden.
  95. X
  96. X-  Die Geschichte mit "ps -a" wird generell so gefahren, denn auch
  97. X   MINIX kennt diese Flagge. 
  98. X
  99. X---------------------------------------------------------------------------
  100. X
  101. XWed Nov 20 17:02:12 CET 1991, Volker Schuermann <volkers@unnet.w.open.de>
  102. X
  103. Xix/MBox 1.6 PL2::
  104. X
  105. X-  Im Makefile gab's noch ein paar Unstimmigkeiten .... jetzt gibt's
  106. X   ein paar weniger :-)
  107. X
  108. X-  Fuer den Fall das die Datei UDBASE (siehe mbox.h) nicht existiert,
  109. X   richtet die MBox automagisch eine Userdatenbank ein, die den 
  110. X   Definitionen in mbox.h angepasst wird.
  111. X
  112. X-  In admin.c war eine Forward Deklaration nicht zulaessig.
  113. X
  114. X-  Die SYSV-Version hatte den "nnpost" nicht im Griff. Dieses Problem
  115. X   ist jetzt behoben - allerdings werden Subject, Keywords und Summary
  116. X   mit "No xxxx." gefuellt wenn sie nicht definiert vom User definiert
  117. X   wurden.
  118. X
  119. X---------------------------------------------------------------------------
  120. X
  121. XSat Nov 23 16:22:24 MEZ 1991, Hergo Pape <hergo@ivcmd.Boerde.DE>
  122. X
  123. Xix/MBox 1.6 PL3::
  124. X
  125. X -  In coreleft.c noch ein "#include <malloc.h> eingefuegt, sonst kommt
  126. X    bei malloc() ein Warning.
  127. X -  Im Makefile ist weiterl.c angegeben! habe das File weiterleiten.c
  128. X    entsprechend umbenannt.
  129. X -  Unter ISC gibt es keine Funktion "chgrp()", das wird wie bei SYS7
  130. X    mit chown() gemacht. 
  131. X -  In bled.c wurde HILFE nochmal definiert! Habe #ifndef Klammer drum
  132. X    gesetzt.
  133. X -  In xmd.c fehlt in der Funktion main(), ganz hinten eine Klammer '}'!.
  134. X
  135. X---------------------------------------------------------------------------
  136. X
  137. XSun Nov 24 11:15:43 CET 1991, Volker Schuermann <volkers@unnet.w.open.de>
  138. X
  139. Xix/MBox 1.6 PL3::
  140. X
  141. X -  Die Flagge -D_ISC sorgt dafuer, dass auch unter Interactive UNIX
  142. X    der System Call "chown" statt "chown"&"chgrp" eingesetzt wird.
  143. X
  144. X -  Die Flagge -D_DATESTAMP gibt auf der Console (oder auf was immer
  145. X    gerade per REDIRECT umgeleitet wird) zusaetlich zu den alten MBox-
  146. X    Informatione auch Datum und Uhrzeit aus.
  147. X
  148. X---------------------------------------------------------------------------
  149. X
  150. XWed Dec 4 19:41:02 CET 1991, Volker Schuermann <volkers@unnet.w.open.de>
  151. X
  152. Xix/MBox 1.6 PL4::
  153. X
  154. X -  Die Flagge -D_SCO entspricht fast komplett -D_ISC. Allerdings wird
  155. X    die Definition der ENTER Taste bei -D_SCO zusaetzlich beeinflusst
  156. X    (ENTER = 13).
  157. X
  158. X -  Im Makefile fehlte bei PROGS die Angabe "xmd" ("mb-daemon" war doppelt
  159. X    aufgefuehrt.
  160. X
  161. X -  Die Umbenennung von "weiterleiten.c" auf "weiterl.c" bleibt auch
  162. X    weiterhin den Installateuren ueberlassen :-)
  163. X
  164. X
  165. X---------------------------------------------------------------------------
  166. X
  167. XSun Dec 8 19:41:02 CET 1991, Volker Schuermann <volkers@unnet.w.open.de>
  168. X
  169. Xix/MBox 1.6 PL4::
  170. X
  171. X -  Da die MBox ab sofort komplett auf RMAIL und INEWS aufsetzt, gibt's
  172. X    ein paar GROESSERE Aenderungen:
  173. X
  174. X    Die Modi SYS_ACCOUNT und HDB_UUCP wurden komplett deaktiviert.
  175. X
  176. X    Die Kommunikation mit RMAIL, INEWS und SMAIL (?) laeuft ueber drei
  177. X    Shell-Scripts: $MBOXHOME/etc/rmail.sh, ~/etc/inews.sh und ~/etc/alias.sh
  178. X
  179. X -  Bisher habe ich es nicht fertig gebracht auf SETUID "root" zu verzichten.    
  180. X    Auch nach der Umstellung auf RMAIL/INEWS laufen MB-DAEMON und MBOX
  181. X    nur mit "root"-Permissions fehlerfrei.
  182. X
  183. X---------------------------------------------------------------------------
  184. X
  185. XSat Dec 28 18:11:41 CET 1991, Volker Schuermann <volkers@unnet.w.open.de>
  186. X
  187. Xix/MBox 1.6e PL5::
  188. X    
  189. X -  Alle Text-Zeilen im Source-Code der ix/MBox wurden entfernt und durch
  190. X    #DEFINES ersetzt. Diese Defines koennen ueber das "Language-File"
  191. X    [mbox.msg] belegt werde.
  192. X
  193. X -  Die Dateien [help.befehle], [help.hilfe] und [help.shorthelp] liegen
  194. X    in englischen Versionen vor. Das gilt auch fuer die Dokumentation.
  195. X
  196. X -  Verschiedene Fehler in "lesen2.c" und "admin.c" wurden behoben. Ausserdem
  197. X    wird neue Post auch direkt beim Anmelden angekuendigt. 
  198. X
  199. X
  200. X---------------------------------------------------------------------------
  201. X
  202. XWed Jan 1 11:11:11 CET 1992, Volker Schuermann <volkers@unnet.w.open.de>
  203. X
  204. Xix/MBox 1.6 PL6::
  205. X
  206. X -  Probleme mit "ifdef XXX || XXX" in [defs.h] und [getline.c] geloest.
  207. X
  208. X -  Der XMD wertet nur noch das erste Auftreten von "From:" und "Subject:"
  209. X    aus. Bei "From" (aus dem Envelope) gibt's 'ne Sonderregelung. 
  210. X
  211. X---------------------------------------------------------------------------
  212. X
  213. XWed Jan 4 22:31:51 CET 1992, Volker Schuermann <volkers@unnet.w.open.de>
  214. X
  215. Xix/MBox 1.6 PL6::
  216. X
  217. X -  Befehl "Suchen" testweise implementiert. Er setzt auf GREP auf.
  218. X
  219. X -  Die Header von MAIL und NEWS koennen editiert werden. "Followup" und
  220. X    "Poster" werden erkannt und ausgewertet.
  221. X
  222. X---------------------------------------------------------------------------
  223. X
  224. XTue Feb 17 21:02:32 CET 1992, Volker Schuermann <volkers@unnet.w.open.DE>
  225. X
  226. Xix/MBox 1.6 PL8.7::
  227. X
  228. X -  Befehl "User" erweitert: Informationen ueber lokale User aus der
  229. X    Userdatenbank, oder per "uux" von anderen Sites.
  230. X
  231. X -  Sicherheitslecks in "postfach.c" und "admin.c" gefunden und entschaerft.
  232. X
  233. X -  Header werden generell <intensive> ausgegeben.
  234. X
  235. X -  Funktion "Download" bietet die Option mehrer Dateien mit einem
  236. X    Kommando zu uebertragen.
  237. X
  238. X -  Funktion "Statistik #" zeigt zusaetlich die Ausnutzung der Baudrate
  239. X    in Prozent an.
  240. X
  241. X -  Befehl "Statistik %" errechnet eine HITLISTE aus der Liste der
  242. X    Downloads.
  243. X
  244. X -  Erfassung in "postfach.c" und "admin.c" erlaubt keine Sonderzeichen
  245. X    in Name, Nick/Alias und Shell-Name.
  246. X
  247. X -  XMD verfuegt ueber eine XMD.ALIAS-Datei, in der Empfaenger-Adressen
  248. X    lokal umgeleitet werden koennen.
  249. X
  250. X -  Das Makefile wurde ERHEBLICH verbessert!
  251. X
  252. X -  Die INDEX-Files muessen nicht mehr global fuer alle Gruppen im
  253. X    voraus gebildet werden, sondern koennen auch online von der MBox
  254. X    gruppenweise erstellt werden.
  255. X
  256. X---------------------------------------------------------------------------
  257. X
  258. XFri May 28 19:53:21 CET 1992, Volker Schuermann <volkers@unnet.w.open.DE>
  259. X
  260. Xix/MBox 1.6 PL10::
  261. X
  262. X -  MB-DAEMON wurde erheblich verbessert, was zu einem Geschwindigkeits-
  263. X    vorteil von bis zu 200% fuehrt
  264. X
  265. X -  RTF (Richtext Format) und 'Quoted-Printable' sind jetzt fuer alle
  266. X    MBox-User lesbar
  267. X
  268. X -  Erste Schritte ich Richtung MultiMedia-Mail sind implementiert 
  269. X
  270. X -  Neue Befehle: EDIT, DOWNLOAD
  271. X
  272. X -  Es wurde ein Accouting-Mechanismus eingefuehrt, der levelabhaengig
  273. X    greift - dadurch laesst sich eine Trennung von zahlenden und nicht-
  274. X    zahlenden Usern herstellen
  275. X
  276. X---------------------------------------------------------------------------
  277. X
  278. XSat Jun 6 14:11:01 CET 1992, Volker Schuermann <volkers@unnet.w.open.DE>
  279. X
  280. Xix/MBox 1.6 PL10a::
  281. X
  282. X -  Der Befehl "BRETT !" wurde erweitert: Er zeigt jetzt neben dem
  283. X    Namen eines Brettes auch den entsprechenden Informationstext an
  284. X
  285. X -  Es gibt jetzt eine Moeglichkeit externe Kommandos direkt in die
  286. X    Befehls-Struktur der MBox einzubinden
  287. X
  288. END_OF_FILE
  289.   if test 9331 -ne `wc -c <'Changelog'`; then
  290.     echo shar: \"'Changelog'\" unpacked with wrong size!
  291.   fi
  292.   # end of 'Changelog'
  293. fi
  294. if test -f 'TUTORIAL' -a "${1}" != "-c" ; then 
  295.   echo shar: Will not clobber existing file \"'TUTORIAL'\"
  296. else
  297.   echo shar: Extracting \"'TUTORIAL'\" \(10956 characters\)
  298.   sed "s/^X//" >'TUTORIAL' <<'END_OF_FILE'
  299. X
  300. X
  301. X
  302. X
  303. X
  304. X
  305. X
  306. X
  307. X
  308. X            ix/MBox BETA-Test Version
  309. X          Mailbox-Programm fuer UNIX(-Derivate)
  310. X            
  311. X               Volker Schuermann
  312. X              Wuppertal, FRG, 08.12.1991
  313. X
  314. X
  315. X
  316. X
  317. X
  318. X
  319. X
  320. X
  321. X
  322. X
  323. X
  324. X
  325. X          INHALT (Tutorial Beta-Entwurf (internal use only !))
  326. X=============================================================================
  327. X
  328. X    1.  ALLGEMEINES
  329. X
  330. X    1.1.  Public Domain ?!
  331. X    1.2.  Struktur der Programme
  332. X
  333. X    2.  UMGEBUNG (Voraussetzungen)
  334. X
  335. X    2.1.  Fuer alle
  336. X    2.2.  Speziell fuer Minix
  337. X
  338. X    3.  INSTALLATION
  339. X
  340. X    3.1.  Anpassungen "mbox.h"
  341. X    3.2.  Anpassungen "mb-daemon.c"
  342. X    3.3.  Anpassungen "/usr/lib/crontab"
  343. X    3.4.  Anpassungen "/etc/passwd"
  344. X    3.5.  Die Verteilung der Rechte
  345. X    3.6.  Kommunikation mit RMAIL & INEWS
  346. X
  347. X    4.  VERWALTUNG
  348. X    
  349. X    4.1.  der Teilnehmer (Bitte VOR dem ersten Aufruf der MBox lesen !)
  350. X    4.2.  der Dateien
  351. X
  352. X    5.  WEITERE INFOS
  353. X    
  354. X    5.1.  Mail genuegt
  355. X    5.2.  Updates
  356. X
  357. X
  358. X
  359. X
  360. X
  361. X
  362. X1. ALLGEMEIN
  363. X=============================================================================
  364. X
  365. X1.1.  Public Domain ?!
  366. X======================
  367. X
  368. XDas gesammte Programmpaket darf beliebig oft weitergegeben und eingesetzt
  369. Xwerden. 
  370. X
  371. XEs duerfen keine veraenderten Versionen verbreitet werden. Jede Veraenderung
  372. Xmuss dem Autor als ASCII-Textfile uebermittelt werden. Er entscheidet, ob
  373. Xdie Veraenderung in die naechste Version aufgenommen wird.
  374. X
  375. XDie Routine "getch.c" stammt nicht vom Autor, sondern von "attron!chris" !
  376. X
  377. X
  378. X
  379. X1.2. Struktur der Programme
  380. X===========================
  381. X
  382. XMir ist voellig klar, 
  383. X
  384. X... dass jeder die Routinen der "ix/MBox" effizienter, 
  385. Xstrukturierter und "besser" schreiben koennte. 
  386. X
  387. X... dass GOTOs und globale Varibalen nicht unbedingt zum
  388. XHandwerkszeug eine C-Programmierers gehoehren sollten.
  389. X
  390. X... dass viele Routinen aussehen, als waeren sie schnell
  391. X"ins Unreine" geschrieben worden - bei etlichen trifft das zu.
  392. X
  393. X... dass keine der Routinen einem LINT standhalten koennte.
  394. X
  395. X... dass jeder, der diese Punkte bemaengelt, selbst zu faul 
  396. Xwar, eine MBox auf die Beine zu stellen ...
  397. X
  398. X
  399. X
  400. X
  401. X2. UMGEBUNG
  402. X=============================================================================
  403. X
  404. X2.1. Fuer alle
  405. X==============
  406. XFolgende Programme MUESSEN bereits auf dem Host-Rechner installiert und
  407. Xeinsatzfaehig sein:
  408. X
  409. X- UUCP (UUCICO, UUX, UUXQT, ...)  
  410. X
  411. X- NEWS (RNEWS, PNEWS, EXPIRE, NNPOST, ...)
  412. X
  413. X- MAIL (LMAIL)
  414. X
  415. X- UMAIL (SENDMAIL, SMAIL etc.)
  416. X
  417. XDie MBox setzt auf dieser Programm-Konstellation auf. Sie ist nicht ein-
  418. Xsatzfaehig, wenn eines der Programm nicht verfuegbar ist.
  419. X
  420. X
  421. X
  422. X2.2. Speziell fuer Minix
  423. X========================
  424. XDie MBox wurde entwickelt unter MINIX 1.5.10 ... folgenden Patches muessen
  425. Xbei dieser Version angewendet werden:
  426. X
  427. X- Bruce Evans MX386-Patches
  428. X
  429. XVorteilhaft aber nicht zwingend erforderlich:
  430. X
  431. X- Gordon Irlams VC (virtuelle Consolen)
  432. X
  433. X- Shoelace (zum Booten von Harddisk)
  434. X
  435. XDie "ix/MBox" laeuft NICHT im 64+64 Modus, sondern nur unter 386er MINIX !
  436. XWie's bei 68000er MINIX aussieht, ist bisher nicht geprueft worden.
  437. X
  438. X
  439. X
  440. X3. INSTALLATION
  441. X=============================================================================
  442. X
  443. X3.1. Anpassungen ("mbox.h")
  444. X===========================
  445. XDie Datei "mbox.h" enthaelt die wichtigsten system-spezifischen Parameter.
  446. XDiese Parameter MUESSEN (zum Teil) unbedingt angepasst werden. 
  447. X
  448. XDie einzelnen Eintraege sind in der Datei dokumentiert - Fehler bei der
  449. XAnpassung ziehen WEITE Kreise ... VORSICHT ist die Mutter der Porzellankiste.
  450. X
  451. XPfade, deren Definition mit "./" beginnen, beziehen sich auf die MBox und 
  452. Xderen HOME-Verzeichnis. Diese Pfade muessen/sollten NICHT geandert werden.
  453. X
  454. XDas gilt praktisch fuer alle Definitionen, die nicht durch ein vorangestelltes
  455. X">" kenntlich gemacht wurden.
  456. X
  457. XZusaetzlich enthalten die verschiedenen Programme jeweils eigene Parameter-
  458. XDefinitionen. Deren Bedeutung wird im Folgenden erklaert.
  459. X
  460. X
  461. X3.2. Anpassungen "mb-daemon.c"
  462. X==============================
  463. XDer MB-Daemon kann u.A. auch als Reflektor fuer eine NewsGroup (NG) fungieren.
  464. XDa er sich nicht an die Konventionen fuer Reflektoren haelt, sollte sein
  465. XEinsatz auf lokal NGs beschraenkt bleiben.
  466. X
  467. XREFLECT_NG        Diese NG wird vom Reflektor untersucht und beantwortet
  468. XREFLECT_LOG       Hier protokolliert der Reflector seine Aktionen
  469. XDIRLIST           Mit dieser Datei wird ein DIRLIST-Request beantwortet
  470. XREFLECTUID        UID des Users "reflector" ... siehe "/etc/passwd"
  471. X
  472. XSoll der Reflektor inaktiv bleiben, genuegt es die REFLECT_NG auf eine NG
  473. Xzu setzen, die nicht existiert (NICHT "", sondern z.B. "dummy.dummy".
  474. X
  475. X
  476. X
  477. X
  478. X3.3. Anpassungen "/usr/lib/crontab"
  479. X===================================
  480. XDie CRONTAB muss um 2 Eintraege erweitert werden. Entscheidend ist dabei
  481. Xdie chronologische Reihenfolge:
  482. X
  483. X  0   4         *   *   *   /usr/lib/news/sendbatch -c NEWSFEED
  484. X 30   5         *   *   *   /usr/lib/uucp/uucico -r1 -x2 -sNEWSFEED
  485. X  0   6         *   *   *   /usr/lib/news/rnews -U
  486. X 20   6         *   *   *   /usr/bin/mb-daemon
  487. X 40   6         *   *   *   /usr/bin/xmd
  488. X
  489. XMB-Daemon und XMD duerfen erst aktiv werden, nachdem die NEWS einsortiert
  490. Xsind. Wird als Mailer SMAIL verwendet, entfaellt der Aufruf des XMD.
  491. X
  492. X
  493. X3.4. Anpassung der "/etc/passwd"
  494. X================================
  495. XDie PASSWD-Datei sollte um den Eintrag "gast" erweitert werden. Meldet
  496. Xsich dieser User an, wird direkt die "ix/MBox" gestartet.
  497. XEin Verlassen den MBox ist damit gleichbedeutend mit einem Verlassen des
  498. XSystems !
  499. X
  500. Xgast::12:1:Mailbox-User:/usr/gast:/usr/bin/mbox
  501. Xvolkers:X:14:3:Volker Schuermann:/usr/volkers/bin/shh
  502. Xreflector:*:22:3:UnNet Reflector::
  503. Xnews:*:30:6:W-NEWS System:/usr/lib/news:
  504. Xusenet:*:31:6:W-NEWS Administrator:/usr/lib/news: 
  505. Xuucp::40:40:UUCP-Account on Un.Net:/usr/spool/uucp:
  506. Xpostmaster:*:41:40:UUCP-Erroruser:/usr/spool/uucp:/bin/sh
  507. Xnuucp::42:40:Anonymous-UUCP:/usr/spool/uucppublic:/usr/lib/uucp/uucico
  508. X
  509. XDie Gruppe des Users "gast" und die Gruppe der uebrigen User (z.B. "volkers")
  510. Xmuss unterschiedlich sein (GID !)
  511. X
  512. X
  513. X
  514. X3.5. Die Verteilung der Rechte
  515. X==============================
  516. XHier nun eine Uebersicht der versch. Pfade und Programme (wobei das HOME-
  517. XVerzeichnis der "ix/MBox" jetzt "/usr/mbox" genannt wird):
  518. X
  519. Xdrwxrwxrwx  root.root /usr/mbox
  520. X-r-xr-xr-x  root.root /usr/mbox/mbrsh
  521. X
  522. Xdrwxrwx---  root.root  /usr/mbox/etc
  523. X-rw-rw----  root.root  /usr/mbox/etc/*
  524. X-rwxrwx---  root.root  /usr/mbox/etc/tset
  525. X
  526. Xdrwxrwx---  root.root  /usr/mbox/lib
  527. X-rw-rw-rw-  root.root  /usr/mbox/lib/*
  528. X
  529. Xdrwx------  root.root  /usr/mbox/src
  530. X-rw-r--r--  root.root  /usr/mbox/src/*
  531. X
  532. Xdrwxrwx---  root.root  /usr/mbox/usr
  533. Xdrwxrwx---  root.root  /usr/mbox/usr/*
  534. X-rw-rw----  root.root  /usr/mbox/usr/*/*
  535. X
  536. X-rwsrwsr-x  root.root  /usr/bin/mbox
  537. X-rwxrwxr-x  bin.sys    /usr/bin/bled
  538. X-rwxrwxr-x  root.root  /usr/bin/xmd
  539. X-rwsrwsr-x  root.root  /usr/bin/mb-daemon
  540. X
  541. X
  542. X3.6. Kommunikation mit RMAIL & INEWS
  543. X====================================
  544. XMit der Version 1.6 PL4 wird eine voellig neue Struktur der Kommunikation
  545. Xzwischen ix/MBox und UNIX/MINIX eingefuehrt. Sowohl Mails als auch Artikel
  546. Xfuer NEWS werden von der MBox mit einem Header ausgestattet und an die
  547. XProgramme RMAIL bzw. INEWS uebergeben, die den Header komplettieren und
  548. Xdie MSG verschicken.
  549. X
  550. XDurchgefuehrt werden diese Aktion mit Hilfe von 2 (3) Shell-Scripts. Sie
  551. Xbefinden sich in "/usr/mbox/etc/rmail.sh", "/usr/mbox/etc/inews.sh" und
  552. X"/usr/mbox/etc/alias.sh". Das letzte Script wird immer dann aufgerufen,
  553. Xwenn ein neues Postfach angelegt wird. Es sollte dann eine Zeile an die Datei
  554. X"/usr/lib/smail/aliases" (Alias-Datei von SMAIL) angehaengt werden, die
  555. XSMAIL anweist den Usernamen "Vorname.Name" als Alias zu verstehen und das
  556. Xentsprechende Kommando ("xmd Vorname.Name") auszufuehren ...
  557. X
  558. X
  559. X
  560. X
  561. X4. VERWALTUNG
  562. X=============================================================================
  563. X
  564. X4.1. Teilnehmer
  565. X===============
  566. XDie "ix/MBox" benutzt den Befehl "admin" zur Pflege der Teilnehmerdaten-
  567. Xbank. Der Sysop/Postmaster/Administrator kann hier auf alle Eintraege
  568. Xzugreifen. 
  569. X
  570. XUm die Sysop-Berechtigung zu bekommen, muss der Postmaster sich als "root"
  571. Xins System einloggen, und dann per "mbox" die MBox aufrufen. Er erhaelt
  572. Xdann Userlevel 10 und ist damit berechtigt, das Kommando "admin" auszu-
  573. Xfuehren. Sollte das mal nicht funktionieren, kann man einfach das Level
  574. Xfuer "admin" in der Datei "/usr/mbox/etc/help.befehle" auf 0 setzen ...
  575. X
  576. XACHTUNG: damit hat JEDER Zugriff auf alle Teilnehmerdaten - also nach
  577. XErhoehung des eigenen Levels (auf 10) unbedingt das "admin"-Level wieder
  578. Xauf 9 zuruecksetzen !!!
  579. X
  580. X
  581. XNochmal ACHTUNG: Zwei User muessen unbedingt ins System eingetragen werden:
  582. X
  583. XUsername:   GAST (identisch mit der GUEST-Definition in "mbox.h")
  584. XSH-Account: gast (siehe "/etc/passwd");
  585. XUser-Level: 0
  586. X
  587. XUsername:   Jacke wie Hose (naja...)
  588. XSH-Account: root (siehe POSTMASTER-Definition in "mbox.h");
  589. XUser-Level: 10
  590. X
  591. XSolange diese beiden User nicht ordnungsgemaess eingetragen sind, laeuft
  592. Xdas System nicht !!!
  593. X
  594. X
  595. XWird die MBox gestartet, und die Datei UDBASE (siehe "mbox.h") existiert
  596. Xnoch nicht, erzeugt die MBox eine Userdatenbank aus den Definitionen in
  597. X"mbox.h" - diese Datenbank kann mit dem Befehl "admin" ueberarbeitet werden.
  598. X
  599. XScheint das zu aufwendig, muessen die Definitionen in "mbox.h" geaendert und
  600. Xdie Datei UDBASE geloescht werden. Beim naechsten Start der MBox wird
  601. Xerneute eine Datenbank angelegt.
  602. X
  603. X
  604. X
  605. XWICHTIG: Fuer Gaeste und User muss es verschiedene GIDs (GroupIDs) auf
  606. XShell-Ebene geben !!! MBox-User OHNE Shell-Account werden daran erkannt,
  607. Xdass ihre GID die der SH-Gaeste (z.b. "other") ist ... MBox-User MIT Shell-
  608. XAccount haben die GID der SH-User (z.B. "sys"). 
  609. X
  610. X
  611. X
  612. X4.2. Dateien
  613. X============
  614. XDa es sich bei allen Protokoll- und Steuerdateien um ASCII-Textfiles handelt,
  615. Xkoennen Aenderungen problemlos mit einem "normalen" Editor vorgenommen werden.
  616. X
  617. XDie einzige Ausnahme bildet die Teilnehmer-Datenbank - also HAENDE WEG !!!
  618. X
  619. XSoll sich die MBox mit einem "LOGO"-Text/Bild melden, muss die Datei 
  620. X"./etc/logo" (s. LOGO-Definition in "mbox.h") exisitieren. Diese Datei 
  621. Xenthaelt einen ASCII-Text. ANSI-Bilder sollten vermieden werden, denn sie
  622. Xumgehen die TERMCAP-Steuerung der MBox.
  623. X
  624. X
  625. X5. WEITERE INFOS
  626. X=============================================================================
  627. X
  628. X5.1. Mail genuegt
  629. X=================
  630. XDiese BETA-Version des TUTORIALS beantwortet natuerlich nicht alle Fragen,
  631. Xdie bei der Installation der "ix/MBox" auftreten werden, aber bei zusaetz-
  632. Xlichem Studium der einzelnen Routinen (siehe auch CROSSREF), sollte sich
  633. Xzu fast jedem Problem auch eine Loesung finden lassen.
  634. X
  635. XWenn alles fehlschlaegt, genuegt eine MAIL an "volkers@unnet.w.open.de",
  636. Xum Infos und evtl. neue Routinen zu bekommen. Ausserdem wird immer dann,
  637. Xwenn's neue Erkenntnisse gibt, ein INFO-Rundschreiben verschickt, um 
  638. Xalle MBox-Betrieber mit dem aktuellen Stand der Entwicklung vertraut
  639. Xzu machen.
  640. X
  641. X
  642. X5.2. Updates
  643. X============
  644. XUpdates werden als CDIFFs fuer die Version 1.6.0 der ix/MBox verschickt,
  645. Xoder auf Wunsch als komplette Source-Files. Ausserdem werden von Zeit zu
  646. XZeit INFO-Runschreiben verschickt, die auf Aenderungen aufmerksam machen.
  647. X
  648. X
  649. XDer Rest ist Glueckssache ... mfG Volker Schuermann
  650. END_OF_FILE
  651.   if test 10956 -ne `wc -c <'TUTORIAL'`; then
  652.     echo shar: \"'TUTORIAL'\" unpacked with wrong size!
  653.   fi
  654.   # end of 'TUTORIAL'
  655. fi
  656. if test -f 'etc/english.hilfe' -a "${1}" != "-c" ; then 
  657.   echo shar: Will not clobber existing file \"'etc/english.hilfe'\"
  658. else
  659.   echo shar: Extracting \"'etc/english.hilfe'\" \(10356 characters\)
  660.   sed "s/^X//" >'etc/english.hilfe' <<'END_OF_FILE'
  661. X#?
  662. XCommand: "?"
  663. X
  664. XYou'll get a list of all commands, which you may use. The contents of this
  665. Xlist depends on your user-level. Type "? *", if you like to see ALL commands
  666. Xof this BBS.
  667. X
  668. X#0
  669. XCommand: "0" ("1-9")
  670. X
  671. XThere is a "dynamic command buffer", who captures every input you type at
  672. Xthe command-prompt. Type "0" to see which commands are in buffer, or any
  673. Xnumber between 1 and 9 to execute one of those commands. Of course, you may
  674. Xuse the cursor-keys to select any command, too.
  675. X
  676. X#+
  677. XCommand: "+"
  678. X
  679. XJump to the next board with new articles.
  680. X
  681. X#-
  682. XCommand: "-"
  683. XJump to the previous board with new articles.
  684. X
  685. X#ACCOUNT
  686. XCommand: "Account"
  687. X
  688. XYou need to registered to send and receive mails to/from all over the
  689. Xworld. The registration makes you a fully accepted user of this BBS.
  690. XYou're now reachable by mail from users on this host or on any host, this
  691. Xhost is connected to.
  692. X
  693. XPLEASE use your full name as username !
  694. X
  695. X#AREA
  696. XCommand: "Area"
  697. X
  698. XThis command makes it possible to jump between groups ('ar ++', 'ar --') or
  699. Xjust subgroups ('ar +', 'ar -').
  700. X
  701. X#BOARD
  702. XCommand: "Board"
  703. X
  704. XThere is a board for every single subject/theme with it's own index. So you
  705. Xhadn't to search long for special information on any item. To move from one
  706. Xboard to another, you use the command "board" with some options:
  707. X
  708. XBOARD                      list boards with new articles
  709. XBOARD *                    list all boards depending on userlevel
  710. XBOARD **                   list ALL boards
  711. XBOARD +                    go to the next board
  712. XBOARD -                    go to the previous board
  713. XBOARD !                    display the name of the current board
  714. XBOARD #                    list areas in board
  715. XBOARD ..           step from one area to the previous one
  716. XBOARD boardname            jump to board "boardname"
  717. X
  718. X#CHAT
  719. XCommand: "Chat"
  720. X
  721. X- systemdepending stuff -
  722. X
  723. X#DATE
  724. XCommand: "Date"
  725. X
  726. XShows the current date. (Not quite right ... it's shows the systems date :-)
  727. X
  728. X#DELETE
  729. XCommand: "Delete"
  730. X
  731. XDelete mails or articles. NOTE: Be careful! If you type "delete" in your
  732. XPM, every (!) mail will be scratched!
  733. X
  734. XDELETE               delete all your mail
  735. XDELETE article           delete article no. "article"
  736. XDELETE article-article       delete from "article" to "article"
  737. X
  738. X#DIR
  739. XCommand: "Dir"
  740. X
  741. XThis will give you a survey of what subjects are collect in the current
  742. Xboard. If you hadn't add a '*', you'll ony see the entries which are
  743. Xnew for you.
  744. X
  745. XDIR                        index new articles
  746. XDIR *                      index ALL articles (of a board)
  747. X
  748. X#DIRECTION
  749. XCommand: "Direction"
  750. X
  751. XIt's sounds pretty funny, but this commands decides whether you see
  752. Xanswers before questions or not :-)
  753. X
  754. X#DOWNLOAD
  755. XCommand: "Download"
  756. X
  757. XYou may use this to fetch a couple of articles. Just type in which
  758. Xarticles you want, and choose the prefered xfer-protocol.
  759. X
  760. X#EDIT
  761. XCommand: "Edit"
  762. X
  763. XFor the folks that are never quite satisfied with their work, the
  764. Xcommand "edit" offers the possibility to re-edit the text. Depending
  765. Xon the userlevel, changing other users articles is allowed, too ;-)
  766. X
  767. X#FINGER
  768. XCommand: "Finger"
  769. X
  770. XGetting informations about specified users is very easy. Use the command
  771. X"finger username" for local users, or "finger host!username" for users
  772. Xwho work on other sites.
  773. X
  774. X#FORWARD
  775. XCommand: "Forward"
  776. X
  777. XIf you like to send copies of mails/articles to other users, you may use
  778. Xthis command. The variable "user" (see below) stand for every kind of
  779. Xaddress (i.e. "Prename.Name", "host!name", "name@host.domain" etc.). So
  780. Xit is possible to forward articles to your own shell-account on this host,
  781. Xor to your account on any other host ... this may be useful sometimes.
  782. X
  783. XFORWARD                    list stored mails
  784. XFORWARD user               forward a stored mail to "user"
  785. XFORWARD mail user          forward "mail" to "user"
  786. XFORWARD article user       forward "article" to "user"
  787. X
  788. X#GAMES
  789. XCommand: "Games"
  790. X
  791. XThe list, that will be shown if you enter this command, includes some
  792. Xgames you may play. They all have own accounting procedures and different
  793. Xinstruction sets ... so don't blame the sysop for anything that will
  794. Xhappen to you :-)
  795. X
  796. X#GOODBYE
  797. XCommand: "Goodbye"
  798. X
  799. XNEVER use this command! (Exception: If you REALLY want to leave :-)
  800. X
  801. X#HELP
  802. XCommand: "Help"
  803. X
  804. XYou managed to get this information ... so why do you ask ???
  805. X
  806. XHELP                       this shorthelp
  807. XHELP *                     display some pages of helpful descriptions
  808. XHELP command               show information on "command"
  809. X
  810. X#MAIL
  811. XCommand: "Mail"
  812. X
  813. XOne of the most powerful commands on this BBS. If you are fitted out with
  814. Xthe right user-level, you're able to send mails to receivers all over the
  815. Xworld ... or just to another BBS-user.
  816. X
  817. XMAIL Prename.Name          (Prename.Name i.e. "Volker.Schuermann")
  818. XMAIL Alias                 (Alias i.e. "Sysop")
  819. XMAIL Shell-Account         (Shell-Account i.e. "volkers")
  820. X
  821. XThese three commands will deliver a mail to a user on this host. If this user
  822. Xhas his own BBS-account, the mail will be sent to his BBS-maildrop. 
  823. XOtherwise his/her shell-account-maildrop will be filled ... 
  824. X
  825. XMAIL Host!User             (Host!User i.e. "unnet!Volker.Schuermann")
  826. XMAIL User@Host.Domain      (User@Host.Domain i.e. "volker@unnet.w.open.de")
  827. X
  828. XBoth commands will send the mail to a user on another host (if "host" or
  829. X"host@domain" are the address of this host, the mail won't leave this host).
  830. X
  831. X#MACRO
  832. XCommand: "Macro"
  833. X
  834. XFor all lazy/intelligent users, here is a way to simplify work! Just create
  835. Xa new command to collect a group of commands:
  836. X
  837. Xnew = b comp.os.minix, d, key, b sub.os.minix, b
  838. X
  839. XThe new command "new" will jump to board "comp.os.minix" and show the index
  840. Xof new articels. If you hit (the) any key, it moves to "sub.os.minix" and 
  841. Xdoes the same.
  842. X
  843. XMacro = Command Sequence
  844. X===========================================================================
  845. Xandi  = mail andreas@xenox.ruhr.de
  846. Xwalt  = mail Walter, forward weller!walterb
  847. Xgrp   = mail volkers, forw xenox, forw stefans, forw joergg
  848. Xsts   = mail Stefan S, forw stefans@coduck.ruhr.sub.org, forw unnet!stefans
  849. Xin    = +, dir, KEY, in
  850. Xpp    = PORTINFO, SLEEP 5, pp
  851. X
  852. XThe entries "in" and "pp" are demonstrating how to build recursive commands.
  853. XUse CTRL-X to break the run of such a command sequence!
  854. X
  855. X#MESSAGE
  856. XCommand: "Message"
  857. X
  858. XYou may use this text to inform other users that you're offline for a
  859. Xfew days or that you never answers mail or what ever ...
  860. X
  861. XThis text is shown to everybody who wants to send a mail to you on this
  862. Xhost.
  863. X
  864. X#MINIX
  865. XCommand: "Minix"
  866. X
  867. XIf you'd have to leave the BBS everytime you like to do something on
  868. Xshell-level, it would be a nice swapping around on this system. But with
  869. Xthe command "minix", you can do everything (even start the BBS :-) without
  870. Xleaving ... 
  871. X
  872. X#PORTINFO
  873. XCommand: "Portinfo"
  874. X
  875. XHave a look on what the other users are doing. This includes BBS-users
  876. Xas well as shell-only-users (poor guys :-)
  877. X
  878. X#PROTOCOL
  879. XCommand: "Protocol"
  880. X
  881. XSee WHO called in WHEN from WHERE on WHICH line ... puhh, but that's exactly
  882. Xwhat this command is doing.
  883. X
  884. XIf you use the option "#" (means "protocol #"), the informations are shown
  885. Xas a diagram (for statistics purposes). 
  886. X
  887. X#PM
  888. XCommand: "PM"
  889. X
  890. XMove to the board with your BBS-maildrop. There you may check your incomming
  891. Xmails and answer (reply) them.
  892. X
  893. X#READ
  894. XCommand: "Read"
  895. X
  896. XThat's how to get the information hidden behind the subjects ... the options
  897. Xto this command a described in the following:
  898. X
  899. XREAD                       read NEW articles
  900. XREAD *                     real ALL articles (of a board)
  901. XREAD article               show article no. "article"
  902. XREAD article-article       display from "article" to "article"
  903. X
  904. XThe line "READ article" builds an exceptions ... if the listing of the
  905. Xspecified article is complete, the BBS shows a little menu to you. Type
  906. Xa "?" at the prompt to see what actions are available there!
  907. X
  908. XUsing this form of the command "read" is the most convenient way to consume
  909. Xarticles!!! 
  910. X
  911. X#SETUP
  912. XCommand: "Setup"
  913. X
  914. XTo make life easier (especially YOUR life), you may change lot's of the
  915. XBBS depending paramaters. The SETUP is fully controlled by menu, so you
  916. Xonly have to hit keys (more or less astonished because of the features 
  917. Xyou never noticed before) ...
  918. X
  919. X#SIGNATURE
  920. XCommand: "Signature"
  921. X
  922. XUse this command to create a text, that will be sent as a footnote of every
  923. Xmail/article you'll write on this BBS. Have a look on the ".signatures"
  924. Xof other ppl. to see which facts belong to such a text ...  
  925. X
  926. X#STATE
  927. XCommand: "State"
  928. X
  929. XGives a summary of all data, this BBS has stored in it's accouting database.
  930. XOf course,only that part of data is shown, that belongs to you!
  931. X
  932. X#STATISTICS
  933. XCommand: "Statistics"
  934. X
  935. XThe BBS collects some information for statistics purpose. If you are inter-
  936. Xested in those statistics, use one of the following options:
  937. X
  938. XSTATISTICS                 table containing NEWS-statistics
  939. XSTATISTICS *               table containing more NEWS-statistics
  940. XSTATISTICS $               UUCP-rates (only if UUCP supports this)
  941. XSTATISTICS #               download-statistics 
  942. X
  943. XThe option "$" depends on the systems UUCP-Support. Ask your Sysop whether
  944. Xthis system accounts UUCP-Rates or not.
  945. X
  946. X#TIME
  947. XCommand: "Time"
  948. X
  949. XShows the system time and the time you're online in seconds ... my goodness,
  950. Xfive hours, and still online ...
  951. X
  952. X#USERS
  953. XCommand: "Users"
  954. X
  955. XYep, you're not alone on this host. To see who's on too, type one of the
  956. Xfollowing commands:
  957. X
  958. XUSERS                      show users list
  959. XUSERS *                    show users list (more detailed)
  960. XUSERS #                    users up-/download ratio
  961. X
  962. XIf your level is to low, you won't be able to use the "#" option - don't
  963. Xbe angry, it's not as much interesting, as it seems to be (use "stati #"
  964. Xinstead :-)
  965. X
  966. X#VERSION
  967. XCommand: "Version"
  968. X
  969. XThis option was built in for other Sysops only - they may use it to spy out
  970. Xwhich BBS is the older one - nothing else.
  971. X
  972. XVERSION                    print version
  973. XVERSION *                  display compiling definitions
  974. XVERSION #                  the "Hall of Fame"
  975. X
  976. XThe option "#" gives a list of ppl., who were members of the "BBS gold crew"
  977. Xduring it's development :-)
  978. X
  979. X#WRITE
  980. XCommand: "Write"
  981. X
  982. XUse this command to create a new article for any board or newsgroup on this
  983. XBBS. Depending on your user-level this article will be sent with distribution
  984. X"world", "*group*" or "local". 
  985. X
  986. XDon't use this command to send mails to other users ... try it, if you don't
  987. Xtrust in documentations. 
  988. END_OF_FILE
  989.   if test 10356 -ne `wc -c <'etc/english.hilfe'`; then
  990.     echo shar: \"'etc/english.hilfe'\" unpacked with wrong size!
  991.   fi
  992.   # end of 'etc/english.hilfe'
  993. fi
  994. if test -f 'etc/help.shorthelp' -a "${1}" != "-c" ; then 
  995.   echo shar: Will not clobber existing file \"'etc/help.shorthelp'\"
  996. else
  997.   echo shar: Extracting \"'etc/help.shorthelp'\" \(4720 characters\)
  998.   sed "s/^X//" >'etc/help.shorthelp' <<'END_OF_FILE'
  999. X?                          Befehlsuebersicht (levelabhaengig)
  1000. X? *                        Befehlsuebersicht (alle Befehle)
  1001. XBefehl ?                   Informationen zu "Befehl"
  1002. X
  1003. X0                          Inhalt des Befehlspuffers
  1004. X1-9                        Befehl aus dem Puffer abrufen
  1005. X
  1006. X+                          Wechseln ins naechste Brett mit neuen Artikeln
  1007. X
  1008. X-                          Wechseln ins vorherige Brett mit neuen Artikeln
  1009. X
  1010. XANRUFER                    Anruferprotokoll
  1011. XANRUFER *                  Anruferprotokoll (komplett)
  1012. XANRUFER #                  Statistik der Anrufe
  1013. XANRUFER %                  Statistik der Anrufer (Hitliste)
  1014. X
  1015. XANSAGE                     Mitteilungstext anzeigen/aendern
  1016. X
  1017. XBRETT                      Bretter mit aktuellen Artikeln anzeigen
  1018. XBRETT *                    Alle Bretter anzeigen (levelabhaengig)
  1019. XBRETT **                   ALLE Bretter anzeigen                 
  1020. XBRETT +                    Wechseln ins naechste Brett
  1021. XBRETT -                    Wechseln ins vorherige Brett
  1022. XBRETT !                    Aktuellen Brettnamen ausgeben
  1023. XBRETT #                    Gruppen (Areas) ausgeben
  1024. XBRETT ..           Innerhalb einer Gruppe ins vorherige Brett wechseln
  1025. XBRETT Brettname            Ins Brett "Brettname" wechseln
  1026. X
  1027. XBRIEF User                 Persoenliche Nachricht an "User" senden
  1028. XBRIEF Host!User            Persoenliche Nachricht an "User" auf "Host"
  1029. X
  1030. XCHAT                       Multiport Chatsystem
  1031. X
  1032. XDOWNLOAD                   Diese Funktion erlaubt es, Artikel und Programme
  1033. X                           unter Protokoll-Kontrollen zu empfangen
  1034. X
  1035. XEDIT Artikel               Der Artikel mit der Nummer "Artikel" kann
  1036. X                           nachtraeglich editiert werden 
  1037. X
  1038. XENDE               Mailbox verlassen
  1039. XENDE *                     Mailbox verlassen (Scanner nicht aktuallisieren)
  1040. X
  1041. XGRUPPE +                   Zur nexten Gruppe einer Untergruppe
  1042. XGRUPPE ++                  Zur nexten Gruppe
  1043. XGRUPPE -                   Zur vorherigen Gruppe einer Untergruppe
  1044. XGRUPPE --                  Zur vorherigen Gruppe
  1045. X
  1046. XHILFE                      Diese Kurzhilfe anzeigen
  1047. XHILFE *                    Hilfstexte komplett ausgeben
  1048. XHILFE Befehl               Hilfstext zum Befehl "Befehl" zeigen
  1049. X
  1050. XINHALT                     Index der aktuellen Artikel ausgeben
  1051. XINHALT *                   Alle Artikel eines Brettes anzeigen
  1052. X
  1053. XLESEN                      Neue Artikel listen
  1054. XLESEN *                    Alle Artikel listen
  1055. XLESEN Artikel              Artikel mit der Nummer "Artikel" ausgeben
  1056. XLESEN Artikel-Artikel      Artikel von Nummer "Artikel" bis "Artikel" zeigen
  1057. X
  1058. XLOESCHEN Artikel           Artikel Nummer "Artikel" loeschen
  1059. XLOESCHEN Artikel-Artikel   Loeschen von "Artikel" bis "Artikel"
  1060. X
  1061. XMAKRO                      Makrovereinbarungen zeigen/aendern
  1062. X
  1063. XMINIX Shell-Befehl         Externes Kommando "Shell-Befehl" ausfuehren
  1064. X
  1065. XOUTDIAL                    Verbindung zu externen Hosts via Datex-P
  1066. X
  1067. XPM                         Ins persoenliche Verzeichnis wechseln
  1068. X
  1069. XPORTINFO                   Aktivitaeten der verschiedenen Terminals zeigen
  1070. X
  1071. XPOSTFACH                   Postfach einrichten
  1072. X
  1073. XRICHTUNG                   Leserichtung (alt <-> neu) aendern
  1074. X
  1075. XSCHREIBEN                  Artikel erfassen und speichern
  1076. X
  1077. XSETUP                      Persoenliche Anpassungen
  1078. X
  1079. XSPIELE               Verschiedene Spiele werden aufgelistet/aufgerufen
  1080. X
  1081. XSTATUS                     Ausgabe der eigenen Anpassungen
  1082. X
  1083. XSTATISTIK                  Datei-Statistik der versch. Bretter anzeigen
  1084. XSTATISTIK *                Statistik komplett ausgeben
  1085. XSTATISTIK $                Uebersicht der UUCP-Gebuehren 
  1086. XSTATISTIK #                Protokoll der Downloads (PD-Bretter)
  1087. XSTATISTIK %                Protokoll der Downloads (HITLISTE)
  1088. X
  1089. XSUCHEN Muster              Artikel eines Brettes nach "Muster" durchsuchen    
  1090. X
  1091. XSYSINFO                    Allgemeine Informationen zur Mailbox
  1092. X
  1093. XUNTERSCHRIFT               Unterschrift anzeigen/aendern
  1094. X
  1095. XUPLOAD                     Diese Funktion wird ueber den Befehl SCHREIBEN
  1096. X                           automatisch aufgerufen
  1097. X
  1098. XUSER                       Userliste ausgeben
  1099. XUSER *                     Userliste mit erweiteren Informationen
  1100. XUSER #                     Userliste mit Up-/Download Verhaeltnis
  1101. XUSER %                     Userliste zur Gebuehrenabrechnung
  1102. XUSER Name                  Informationen ueber den Teilnehmern "Name"
  1103. X
  1104. XVERSION                    Versionsnummer ausgeben
  1105. XVERSION *                  Versionsnummer und Definitionen ausgeben
  1106. XVERSION #                  Versionsnummer und "Hall of Fame" ausgeben
  1107. X
  1108. XWEITERLEITEN               Weiterleitbare PMs anzeigen
  1109. XWEITERLEITEN User          Weiterleitbare PM an "User" senden
  1110. XWEITERLEITEN Artikel User  Artikel Nummer "Artikel" an "User" senden
  1111. END_OF_FILE
  1112.   if test 4720 -ne `wc -c <'etc/help.shorthelp'`; then
  1113.     echo shar: \"'etc/help.shorthelp'\" unpacked with wrong size!
  1114.   fi
  1115.   # end of 'etc/help.shorthelp'
  1116. fi
  1117. if test -f 'src/bled.doc' -a "${1}" != "-c" ; then 
  1118.   echo shar: Will not clobber existing file \"'src/bled.doc'\"
  1119. else
  1120.   echo shar: Extracting \"'src/bled.doc'\" \(1399 characters\)
  1121.   sed "s/^X//" >'src/bled.doc' <<'END_OF_FILE'
  1122. X(B)LED ist ein zeilenorientierer Editor (Text-Erfassungssystem), der Texte
  1123. Xbeliebiger Groesse verarbeiten kann.
  1124. X
  1125. XEr verwendet verschiedene Eingabemodi, die jeweils am Prefix vor der
  1126. XZeilennummer zu identifizieren sind:
  1127. X
  1128. XL0000 Text-Zeile ...                  # Lese-Modus (".l" und ".L")
  1129. XA0000 Text-Zeile ...                  # Anhaenge-Modus (".a")
  1130. XI0000 Text-Zeile ...                  # Einfuge-Modus (".i")
  1131. XK0000 Text-Zeile ...                  # Korrektur-Modus (".k");
  1132. X
  1133. XWird ein neuer Text erfasst, ist der Anhaenge-Modus aktiv. Mit dem
  1134. XBefehl ".l" (bzw. ".L") kann man sich den bereits eingegeben Text
  1135. Xanzeigen lassen.
  1136. X
  1137. XMuss eine Zeile korrigiert werden, wird mit dem Befehl ".k ZEILE" die
  1138. Xentsprechende Zeile (ZEILE) nochmals angezeigt und kann ueberarbeitet
  1139. Xwerden.
  1140. X
  1141. XSoll zwischen den bereits erfassten Zeilen neuer Text eingegeben werden,
  1142. Xmuss mit ".i ZEILE" in den Einfuege-Modus gewechselt werden. Von nun 
  1143. Xan werden die Eingaben zwischen "ZEILE -1" und "ZEILE" eingefuegt. Die
  1144. XNummerierung der auf "ZEILE" folgenden Zeilen wird automatisch angepasst.
  1145. XDer Einfuege-Modus wird mit ".a" beendet. Danach ist der Anhaenge-Modus
  1146. Xaktiv, und alle Eingaben werden ans Ende des Textes angehaengt.
  1147. X
  1148. XSollen Zeilen komplett entfernt werden, kommt der Befehl ".d" zum Einsatz.
  1149. XWerden keine Zeilennummern angegeben, wird der gesamte Text geloescht !!!
  1150. X
  1151. XBeendet und gesichert wird die Eingabe mit "." !
  1152. END_OF_FILE
  1153.   if test 1399 -ne `wc -c <'src/bled.doc'`; then
  1154.     echo shar: \"'src/bled.doc'\" unpacked with wrong size!
  1155.   fi
  1156.   # end of 'src/bled.doc'
  1157. fi
  1158. if test -f 'src/lesen2.c' -a "${1}" != "-c" ; then 
  1159.   echo shar: Will not clobber existing file \"'src/lesen2.c'\"
  1160. else
  1161.   echo shar: Extracting \"'src/lesen2.c'\" \(10254 characters\)
  1162.   sed "s/^X//" >'src/lesen2.c' <<'END_OF_FILE'
  1163. X/***************************************************************************/
  1164. X/*        PROGRAMM  ix/Mbox                           */
  1165. X/*             DATEI  lesen2.c                           */
  1166. X/*        FUNKTIONEN  anzeigen(), lesen2(), inhalt2(), loeschen2()       */
  1167. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  1168. X/*  LETZTE AENDERUNG  20.11.1991                       */
  1169. X/***************************************************************************/
  1170. X
  1171. X#include <stdio.h>
  1172. X
  1173. X#include "mbox.h"
  1174. X
  1175. X
  1176. Xextern char headinfo[STRING];
  1177. X
  1178. X/***************************************************************************/
  1179. X/*      FUNKTION  anzeigen()                           */
  1180. X/*  BESCHREIBUNG  Artikel selektieren und anzeigen.               */
  1181. X/*     PARAMETER  art  =  Artikel(-Nummer)                                 */
  1182. X/*          von  =  Artikel-Nummer (Minimum)                         */
  1183. X/*          bis  =  Artikel-Nummer (Maximum)                         */
  1184. X/*     RUECKGABE  siehe "show()"                       */
  1185. X/***************************************************************************/
  1186. X
  1187. Xint anzeigen(art, von, bis)
  1188. Xint art, von, bis;
  1189. X{
  1190. X  char entry[STRING];
  1191. X  char s[STRING];
  1192. X  int mr;
  1193. X  int ok;
  1194. X
  1195. X  if (strcomp(BRETT, "PM") != 0) {
  1196. X    sprintf(entry, "%s/%d", BRETT, art);
  1197. X  }
  1198. X  else {
  1199. X    sprintf(entry, "%s/usr/%d/%d", HOME, USER.id, art);
  1200. X  }
  1201. X
  1202. X  mr = 0;
  1203. X  if ((USER.more == 1) || (USER.more == 3)) mr = 2;
  1204. X
  1205. X  sprintf(s, "%d", art);
  1206. X
  1207. X  if (((art >= von) && (art <= bis)) ||
  1208. X      ((art >= bis) && (art <= von))) {
  1209. X
  1210. X    ok = pruefe(s);    
  1211. X
  1212. X    if(ok == 0){
  1213. X        if(USER.more != 0){
  1214. X            sprintf(headinfo, " %s %d (%s) ", LE201_MSG, art, NG);
  1215. X            headline( headinfo );
  1216. X        }
  1217. X        else{
  1218. X            ansi("md");
  1219. X            printf("%s %d\n", LE202_MSG, art);
  1220. X            ansi("me");
  1221. X        }
  1222. X        show( "?", 99, 99 );
  1223. X        ok = show(entry, 9999, mr);
  1224. X        if(ok != -1){
  1225. X            if(USER.more != 0) more();
  1226. X        }
  1227. X        else return ok;
  1228. X    }
  1229. X  }
  1230. X  return ok;
  1231. X}
  1232. X
  1233. X
  1234. X
  1235. X/***************************************************************************/
  1236. X/*      FUNKTION  lesen2()                            */
  1237. X/*  BESCHREIBUNG  Artikel selektieren (je nach Parameter) und anzeigen.    */
  1238. X/*     PARAMETER  arg  =  Selektions-Schluessel                            */
  1239. X/*          mode =  DUMMY (!)                                        */
  1240. X/*     RUECKGABE  keine                                                       */
  1241. X/***************************************************************************/
  1242. X
  1243. Xvoid lesen2(arg, mode)
  1244. Xchar arg[];
  1245. Xchar mode;
  1246. X{
  1247. X  FILE *fp;
  1248. X  char ex[255];
  1249. X  char s[STRING];
  1250. X  char entry[STRING];
  1251. X  int a = 56, b = 63;
  1252. X  int i, d, e;
  1253. X  int von, bis;
  1254. X  int ALLE;
  1255. X  int PM = 0;
  1256. X  int art[MAX_PER_NG];
  1257. X  int artp;
  1258. X  int k, l;
  1259. X  int LR = 0;
  1260. X
  1261. X
  1262. X  i = 0;
  1263. X  k = -1;
  1264. X  l = -1;
  1265. X  while (arg[i] != '\0') {
  1266. X    if (arg[i] == '-') k = i;
  1267. X    if (arg[i] == '*') l = i;
  1268. X    i++;
  1269. X  }
  1270. X
  1271. X  if ((arg[0] != '\0') && (k == -1) && (l == -1)) {
  1272. X    ansi("md");
  1273. X    printf(" %s\n", LE203_MSG);
  1274. X    ansi("me");
  1275. X    return;
  1276. X  }
  1277. X
  1278. X  von = 1;
  1279. X  bis = 32000;
  1280. X
  1281. X  if (l != -1) {
  1282. X    ALLE = 1;
  1283. X  }
  1284. X  if (k != -1) {
  1285. X    strcpy(s, (char *) strcopy(arg, 0, (k - 1)));
  1286. X    von = atoi(s);
  1287. X    strcpy(s, (char *) strcopy(arg, (k + 1), length(arg)));
  1288. X    bis = atoi(s);
  1289. X
  1290. X    if (von == 0) von = 1;
  1291. X    if (bis == 0) bis = 32000;
  1292. X    ALLE = 1;
  1293. X  }
  1294. X  if ((k == -1) && (l == -1)) {
  1295. X    ALLE = 0;
  1296. X  }
  1297. X  if ((von == 1) && (bis == 32000)) LR++;
  1298. X
  1299. X  if ((USER.leserichtung != 1) && (LR != 0)) {
  1300. X    i = von;
  1301. X    von = bis;
  1302. X    bis = i;
  1303. X  }
  1304. X  if (strcomp(BRETT, "PM") != 0) {
  1305. X    PM = 0;
  1306. X  }
  1307. X  else {
  1308. X    PM = 1;
  1309. X  }
  1310. X
  1311. X  d = a + 10;
  1312. X  e = a + 14;
  1313. X
  1314. X  maybe_locked(INHALT, "r");
  1315. X  fp = fopen(INHALT, "r");
  1316. X  if (fp == NULL) {
  1317. X    nerror("lesen2.c", 104, "lesen2", "Datei-Lesefehler", INHALT);
  1318. X  }
  1319. X  artp = -1;
  1320. X
  1321. X  while (fgets(ex, 250, fp) != NULL) {
  1322. X    if (ALLE == 1) {
  1323. X        artp++;
  1324. X        art[artp] = atoi(ex);
  1325. X    }
  1326. X    else {
  1327. X        strcpy(s, (char *) strcopy(ex, a, b));
  1328. X        if (LASTLOG < dateconv(s)) {
  1329. X            artp++;
  1330. X            art[artp] = atoi(ex);
  1331. X        }
  1332. X        if (LASTLOG == dateconv(s)) {
  1333. X            strcpy(s, (char *) strcopy(ex, d, e));
  1334. X            if (LASTTIME <= timeconv(s)) {
  1335. X                artp++;
  1336. X                art[artp] = atoi(ex);
  1337. X            }
  1338. X        }
  1339. X    }
  1340. X    if(artp >= MAX_PER_NG){
  1341. X        nerror("lesen2.c", 188, "lesen2", "Zuviele", "Artikel");
  1342. X    }
  1343. X  }
  1344. X  fclose(fp);
  1345. X
  1346. X
  1347. X
  1348. X  if (artp == -1) {
  1349. X    ansi("md");
  1350. X    printf(" %s", LE204_MSG);
  1351. X    ansi("me");
  1352. X    printf("\n");
  1353. X    return;
  1354. X  }
  1355. X  ansi("cl");
  1356. X
  1357. X  if (strcomp(BRETT, "PM") != 0) {
  1358. X    i = von;
  1359. X    von = bis;
  1360. X    bis = i;
  1361. X  }
  1362. X
  1363. X  show("?", 0, 99);
  1364. X
  1365. X  if (von > bis) {
  1366. X    for (i = artp; i >= 0; i--) {
  1367. X        if (anzeigen(art[i], von, bis) == -1) return;
  1368. X    }
  1369. X  }
  1370. X  else {
  1371. X    for (i = 0; i <= artp; i++) {
  1372. X        if (anzeigen(art[i], von, bis) == -1) return;
  1373. X    }
  1374. X  }
  1375. X
  1376. X  return;
  1377. X}
  1378. X
  1379. X
  1380. X
  1381. X
  1382. X/***************************************************************************/
  1383. X/*      FUNKTION  inhalt2()                            */
  1384. X/*  BESCHREIBUNG  Inhalt selektieren (je nach Parameter) und anzeigen.        */
  1385. X/*     PARAMETER  arg  =  Selektions-Schluessel                            */
  1386. X/*          mode =  DUMMY (!)                                        */
  1387. X/*     RUECKGABE  keine                                                       */
  1388. X/***************************************************************************/
  1389. X
  1390. Xvoid inhalt2(arg, mode)
  1391. Xchar arg[];
  1392. Xchar mode;
  1393. X{
  1394. X  FILE *fp;
  1395. X  FILE *ff;
  1396. X  char ex[LONGSTRING];
  1397. X  char s[STRING];
  1398. X  char tmp[STRING];
  1399. X  int a = 56, b = 63;
  1400. X  int e, d, i;
  1401. X  int von, bis;
  1402. X  int k, l;
  1403. X  int plus, minus;
  1404. X  int PM;
  1405. X  int ALLE;
  1406. X  int LR = 0;
  1407. X
  1408. X
  1409. X  i = 0;
  1410. X  k = -1;
  1411. X  l = -1;
  1412. X  while (arg[i] != '\0') {
  1413. X    if (arg[i] == '-') k = i;
  1414. X    if (arg[i] == '*') l = i;
  1415. X    i++;
  1416. X  }
  1417. X
  1418. X  von = 1;
  1419. X  bis = 32000;
  1420. X
  1421. X  if ((arg[0] != '\0') && (k == -1) && (l == -1)) {
  1422. X    strcpy(s, (char *) strcopy(arg, 0, length(arg)));
  1423. X    von = atoi(s);    
  1424. X    bis = von;
  1425. X    ALLE = 1;
  1426. X  }
  1427. X
  1428. X  if (l != -1) {
  1429. X    ALLE = 1;
  1430. X  }
  1431. X  if (k != -1) {
  1432. X    strcpy(s, (char *) strcopy(arg, 0, (k - 1)));
  1433. X    von = atoi(s);
  1434. X    strcpy(s, (char *) strcopy(arg, (k + 1), length(arg)));
  1435. X    bis = atoi(s);
  1436. X
  1437. X    if (von == 0) von = 1;
  1438. X    if (bis == 0) bis = 32000;
  1439. X    ALLE = 1;
  1440. X  }
  1441. X
  1442. X  fp = fopen(INHALT, "r");
  1443. X  if (fp == NULL) {
  1444. X    brett( "~" );
  1445. X    return;
  1446. X  }
  1447. X  sprintf(tmp, "%s/I.%d", TMP, getpid());
  1448. X  ff = fopen(tmp, "w");
  1449. X
  1450. X  sprintf(ex, " %s (%s) ", LE205_MSG, NG);
  1451. X  ex[80] = '\0';
  1452. X  headline(ex);
  1453. X
  1454. X  fgets(ex, 250, fp);    /* alte Ueberschrift ausblenden */
  1455. X  fgets(ex, 250, fp);   /* dito */
  1456. X
  1457. X  if(strcomp(PDNG, NG) == 0){
  1458. X    printf("%s\n", GBL08_MSG); 
  1459. X  }
  1460. X  else{
  1461. X    printf("%s\n", GBL05_MSG);
  1462. X  }
  1463. X  printf("===============================================================================\n", ff);
  1464. X  
  1465. X
  1466. X  PM = 1;
  1467. X  if (strcomp(BRETT, "PM") != 0) {
  1468. X    i = von;
  1469. X    von = bis;
  1470. X    bis = i;
  1471. X    PM = 0;
  1472. X  }
  1473. X  plus = 0;
  1474. X  minus = 0;
  1475. X
  1476. X  d = a + 10;
  1477. X  e = a + 14;
  1478. X
  1479. X  if (((von == 1) && (bis == 32000)) || ((von == 32000) && (bis == 1))) LR++;
  1480. X
  1481. X  if ((USER.leserichtung != 1) && (LR != 0)) {
  1482. X    i = von;
  1483. X    von = bis;
  1484. X    bis = i;
  1485. X  }
  1486. X  if (von > bis) {
  1487. X    while (fgets(ex, 250, fp) != NULL) {
  1488. X        i = atoi(ex);
  1489. X        if(i != 0) minus++;
  1490. X        if (ALLE == 1) {
  1491. X            if ((i >= bis) && (i <= von)) {
  1492. X                fputs(ex, ff);
  1493. X                plus++;
  1494. X            }
  1495. X        } else {
  1496. X            strcpy(s, (char *) strcopy(ex, a, b));
  1497. X            if (LASTLOG < dateconv(s)) {
  1498. X                fputs(ex, ff);
  1499. X                plus++;
  1500. X            }
  1501. X            if (LASTLOG == dateconv(s)) {
  1502. X                strcpy(s, (char *) strcopy(ex, d, e));
  1503. X                if (LASTTIME <= timeconv(s)) {
  1504. X                    fputs(ex, ff);
  1505. X                    plus++;
  1506. X                }
  1507. X            }
  1508. X        }
  1509. X    }
  1510. X    fclose(ff);
  1511. X
  1512. X    if (PM == 1)
  1513. X        sprintf(s, "sort -nr -o %s %s", tmp, tmp);
  1514. X    else
  1515. X        sprintf(s, "sort -n -o %s %s", tmp, tmp);
  1516. X    system(s);
  1517. X  }
  1518. X  else {
  1519. X    while (fgets(ex, 250, fp) != 0) {
  1520. X        i = atoi(ex);
  1521. X        if(i != 0) minus++;
  1522. X        if (ALLE == 1) {
  1523. X            if ((i >= von) && (i <= bis)) {
  1524. X                fputs(ex, ff);
  1525. X                plus++;
  1526. X            }
  1527. X        } 
  1528. X        else {
  1529. X            strcpy(s, (char *) strcopy(ex, a, b));
  1530. X            if (LASTLOG < (long) dateconv(s)) {
  1531. X                fputs(ex, ff);
  1532. X                plus++;
  1533. X            }
  1534. X            if (LASTLOG == (long) dateconv(s)) {
  1535. X                strcpy(s, (char *) strcopy(ex, d, e));
  1536. X                if (LASTTIME <= (long) timeconv(s)) {
  1537. X                    fputs(ex, ff);
  1538. X                    plus++;
  1539. X                }
  1540. X            }
  1541. X        }
  1542. X    }
  1543. X    fclose(ff);
  1544. X  }
  1545. X  fclose(fp);
  1546. X
  1547. X  if (plus != 0) show(tmp, 9999, USER.more + 100);
  1548. X
  1549. X  unlink(tmp);
  1550. X
  1551. X  if (plus == 0) {
  1552. X    ansi("md");
  1553. X    printf("%s", LE206_MSG);
  1554. X    ansi("me");
  1555. X    if ((minus - plus) > 0)
  1556. X        printf("\n%s %d %s", LE207_MSG, minus, LE208_MSG);
  1557. X    else
  1558. X        printf("\n%s", LE209_MSG);
  1559. X  }
  1560. X  else if ((plus < 19) || (plus > 21)) {
  1561. X    if ((minus - plus) > 0)
  1562. X        printf("\n%s %d %s", LE210_MSG, (minus - plus), LE211_MSG);
  1563. X    else
  1564. X        printf("\n%s", LE212_MSG);
  1565. X  }
  1566. X  printf("\n");
  1567. X
  1568. X  return;
  1569. X}
  1570. X
  1571. X
  1572. X
  1573. X/***************************************************************************/
  1574. X/*      FUNKTION  loeschen2()                            */
  1575. X/*  BESCHREIBUNG  Persoenliche Post selektieren (je nach Parameter) und    */
  1576. X/*                loeschen.                           */
  1577. X/*     PARAMETER  arg  =  Selektions-Schluessel                            */
  1578. X/*          mode =  DUMMY (!)                                        */
  1579. X/*     RUECKGABE  keine                                                       */
  1580. X/***************************************************************************/
  1581. X
  1582. Xvoid loeschen2(arg, mode)
  1583. Xchar arg[];
  1584. Xchar mode;
  1585. X{
  1586. X  FILE *fp;
  1587. X  FILE *ff;
  1588. X  char ex[255];
  1589. X  char s[STRING];
  1590. X  char tmp[STRING];
  1591. X  int a, b, i;
  1592. X  int von, bis;
  1593. X  int k;
  1594. X  int plus;
  1595. X  int PM;
  1596. X
  1597. X
  1598. X  if(USER.level == GUEST_LEV){
  1599. X    return;
  1600. X  }
  1601. X
  1602. X  i = 0;
  1603. X  k = -1;
  1604. X  while (arg[i] != '\0') {
  1605. X    if (arg[i] == '-') k = i;
  1606. X    i++;
  1607. X  }
  1608. X
  1609. X  if ((arg[0] != '\0') && (k == -1)) {
  1610. X    ansi("md");
  1611. X    printf(" %s\n", LE213_MSG);
  1612. X    ansi("me");
  1613. X    return;
  1614. X  }
  1615. X  von = 1;
  1616. X  bis = 32000;
  1617. X
  1618. X  if (k != -1) {
  1619. X    strcpy(s, (char *) strcopy(arg, 0, (k - 1)));
  1620. X    von = atoi(s);
  1621. X    strcpy(s, (char *) strcopy(arg, (k + 1), length(arg)));
  1622. X    bis = atoi(s);
  1623. X
  1624. X    if (von == 0) von = 1;
  1625. X    if (bis == 0) bis = 32000;
  1626. X  }
  1627. X  if (strcomp(BRETT, "PM") != 0) {
  1628. X    a = 60;
  1629. X    b = 69;
  1630. X  } else {
  1631. X    a = 58;
  1632. X    b = 65;
  1633. X  }
  1634. X
  1635. X  maybe_locked(INHALT, "r");
  1636. X
  1637. X  sprintf(tmp, "%s/%d.l2", TMP, getpid());
  1638. X  sprintf(s, "cp %s %s > /dev/null", INHALT, tmp);
  1639. X  system(s);
  1640. X
  1641. X  fp = fopen(tmp, "r");
  1642. X  if (fp == NULL) {
  1643. X    nerror("lesen2.c", 217, "loeschen2", "Datei-Lesefehler", tmp);
  1644. X  }
  1645. X  fgets(ex, 250, fp);
  1646. X  fgets(ex, 250, fp);
  1647. X
  1648. X  PM = 1;
  1649. X  if (strcomp(BRETT, "PM") != 0) {
  1650. X    i = von;
  1651. X    von = bis;
  1652. X    bis = i;
  1653. X    PM = 0;
  1654. X  }
  1655. X  plus = 0;
  1656. X
  1657. X  if (von > bis) {
  1658. X    while (fgets(ex, 250, fp) != NULL) {
  1659. X        i = atoi(ex);
  1660. X        if ((i >= bis) && (i <= von)) {
  1661. X            sprintf(s, "%d", i);
  1662. X            loeschen(s);
  1663. X            plus++;
  1664. X        }
  1665. X    }
  1666. X  }
  1667. X  else {
  1668. X    while (fgets(ex, 250, fp) != NULL) {
  1669. X        i = atoi(ex);
  1670. X        if ((i >= von) && (i <= bis)) {
  1671. X            sprintf(s, "%d", i);
  1672. X            loeschen(s);
  1673. X            plus++;
  1674. X        }
  1675. X    }
  1676. X  }
  1677. X  fclose(fp);
  1678. X
  1679. X  if (plus == 0) {
  1680. X    ansi("md");
  1681. X    printf("%s\n", LE214_MSG);
  1682. X    ansi("me");
  1683. X    return;
  1684. X  }
  1685. X  unlink(tmp);
  1686. X
  1687. X  return;
  1688. X}
  1689. END_OF_FILE
  1690.   if test 10254 -ne `wc -c <'src/lesen2.c'`; then
  1691.     echo shar: \"'src/lesen2.c'\" unpacked with wrong size!
  1692.   fi
  1693.   # end of 'src/lesen2.c'
  1694. fi
  1695. if test -f 'src/misc2.c' -a "${1}" != "-c" ; then 
  1696.   echo shar: Will not clobber existing file \"'src/misc2.c'\"
  1697. else
  1698.   echo shar: Extracting \"'src/misc2.c'\" \(9043 characters\)
  1699.   sed "s/^X//" >'src/misc2.c' <<'END_OF_FILE'
  1700. X/***************************************************************************/
  1701. X/*        PROGRAMM  ix/Mbox                           */
  1702. X/*             DATEI  misc2.c                           */
  1703. X/*        FUNKTIONEN  chk_newsgrp(), subb(), loeschen(), brett()        */
  1704. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  1705. X/*  LETZTE AENDERUNG  11.06.1992                       */
  1706. X/***************************************************************************/
  1707. X
  1708. X#include <stdio.h>
  1709. X
  1710. X#include "mbox.h"
  1711. X
  1712. X
  1713. X
  1714. X
  1715. X
  1716. X/***************************************************************************/
  1717. X/*      FUNKTION  chk_newsgrp()                           */
  1718. X/*  BESCHREIBUNG  Stellt fest, ob ein Benutzer die angefragt NG betreten   */
  1719. X/*          darf.                                                       */
  1720. X/*     PARAMETER  s  =  Name der fraglichen NG                   */
  1721. X/*     RUECKGABE  -1 =  Kein Zugang/Zugriff :-(                            */
  1722. X/*                 1 =  Zugang erlaubt :-)                    */
  1723. X/***************************************************************************/
  1724. X
  1725. Xint chk_newsgrp( s )
  1726. Xchar s[];
  1727. X{
  1728. X  int i = 1, ok = -1;
  1729. X
  1730. X  while ((i < MAX_NEWSGRPS) && (newsgrp[i][0] != '\0') && (ok == -1)) {
  1731. X    if (strcomp(newsgrp[i], s) == 0) ok = 0;
  1732. X    if (strcomp(newsgrp[i], "all") == 0) ok = 0;
  1733. X    i++;
  1734. X  }
  1735. X
  1736. X  return ok;
  1737. X}
  1738. X
  1739. X
  1740. X
  1741. X
  1742. X/***************************************************************************/
  1743. X/*      FUNKTION  subb()                           */
  1744. X/*  BESCHREIBUNG  Ist die angefragte NG eine Unter-NG, oder ein kompletter */
  1745. X/*          Pfad ??                                                  */
  1746. X/*     PARAMETER  s  =  Name der NG                         |              */
  1747. X/*     RUECKGABE  0  =  Unter-NG (z.B. minix)               v              */
  1748. X/*          n  =  Erste Obergruppe endet bei 'n' (comp.os.minix)     */
  1749. X/***************************************************************************/
  1750. X
  1751. Xint subb(s)
  1752. Xchar s[];
  1753. X{
  1754. X  int a = 0, i = 0;
  1755. X
  1756. X  while (s[i] != '\0') {
  1757. X    if ((s[i] == '.') && (a == 0)) a = i;
  1758. X    i++;
  1759. X  }
  1760. X  return a;
  1761. X}
  1762. X
  1763. X
  1764. X
  1765. X
  1766. X/***************************************************************************/
  1767. X/*      FUNKTION  loeschen()                           */
  1768. X/*  BESCHREIBUNG  Gezielt einen persoenliche Mail loeschen.           */
  1769. X/*     PARAMETER  arg  =  Nummer der Mail                                  */
  1770. X/*     RUECKGABE  keine                                                       */
  1771. X/***************************************************************************/
  1772. X
  1773. Xvoid loeschen(arg)
  1774. Xchar arg[];
  1775. X{
  1776. X  FILE *fp;
  1777. X  FILE *ff;
  1778. X  char s[STRING];
  1779. X  char entry[STRING];
  1780. X  char index[STRING];
  1781. X  char t[STRING];
  1782. X  char ex[255];
  1783. X  char c;
  1784. X  int i, a = atoi(arg);
  1785. X  int ok;
  1786. X
  1787. X
  1788. X  if ((arg[0] < '1') || (arg[0] > '9')) {
  1789. X    ansi("md");
  1790. X    printf(" %s\n", MI201_MSG);
  1791. X    ansi("me");
  1792. X    return;
  1793. X  }
  1794. X  if (strcomp(BRETT, "PM") != 0) {
  1795. X    if(arg[0] < 33) return;
  1796. X    if(USER.level < ADMIN_LEV){
  1797. X        ansi("md");
  1798. X        printf(" %s %d ...\n", MI202_MSG, USER.level);
  1799. X        ansi("me");
  1800. X    }
  1801. X    else{
  1802. X        sprintf(entry, "%s/%s", BRETT, arg);
  1803. X        unlink(entry);
  1804. X        printf("\n\n%s\n", MI203_MSG);        
  1805. X        sprintf(entry, "%s %s -X", MB_DAEMON, NG);
  1806. X        system(entry);
  1807. X    }
  1808. X    return;
  1809. X  }
  1810. X
  1811. X  if(USER.level == GUEST_LEV){
  1812. X    return;
  1813. X  }
  1814. X
  1815. X  sprintf(entry, "%s/usr/%d/%s", HOME, USER.id, arg);
  1816. X  sprintf(index, "%s/usr/%d/INDEX", HOME, USER.id);
  1817. X
  1818. X  sprintf(s, "%s/loe%d", TMP, getpid());
  1819. X  ff = fopen(s, "w");
  1820. X
  1821. X  fp = fopen(index, "r");
  1822. X  if (fp == NULL) {
  1823. X    nerror("misc2.c", 109, "loeschen", "Datei-Lesefehler", index);
  1824. X  }
  1825. X  ok = 0;
  1826. X
  1827. X  while (fgets(ex, 250, fp) != NULL) {
  1828. X    if (atoi(ex) != a)
  1829. X        fputs(ex, ff);
  1830. X    else
  1831. X        ok = 1;
  1832. X  }
  1833. X  fclose(fp);
  1834. X  fclose(ff);
  1835. X
  1836. X  sprintf(t, "cp %s %s", s, index);
  1837. X  system(t);
  1838. X  unlink(s);
  1839. X  unlink(entry);
  1840. X}
  1841. X
  1842. X
  1843. X
  1844. X/***************************************************************************/
  1845. X/*      FUNKTION  brett()                           */
  1846. X/*  BESCHREIBUNG  Wechselt das Brett, zeigt Bretter an etc. pp.        */
  1847. X/*     PARAMETER  arg  =  '!'     =  Brettername ausgeben           */
  1848. X/*          arg  =  ''      =  aktuelle Bretter ausgeben           */
  1849. X/*          arg  =  '*'     =  alle Bretter ausgeben               */
  1850. X/*          arg  =  '#'     =  Gruppen ausgeben                      */
  1851. X/*          arg  =  '..'    =  eine Gruppe zurueck           */
  1852. X/*          arg  =  '^'     =  ALLE (!) Bretter ausgeben           */
  1853. X/*          arg  = 'Brett'  =  ins Brett 'Brett' wechseln           */
  1854. X/*     RUECKGABE  keine                                                       */
  1855. X/***************************************************************************/
  1856. X
  1857. X/*
  1858. Xvoid brett(arg)  Compiler Bug ???? 
  1859. X*/
  1860. Xbrett(arg)
  1861. Xchar arg[];
  1862. X{
  1863. X  FILE *fp;
  1864. X  FILE *ff;
  1865. X  char s[STRING];
  1866. X  char o[STRING];
  1867. X  int a, b, h;
  1868. X  char t[STRING];
  1869. X  char org[STRING];
  1870. X  char maybe[STRING];
  1871. X  int this;
  1872. X  int i, j;
  1873. X  int subboard = 0;
  1874. X  char c;
  1875. X  int plus = 0;
  1876. X  int zeile = 0;
  1877. X  int swing = 1;  
  1878. X  int fpid;
  1879. X
  1880. X  if (arg[0] == '!') {
  1881. X    printf("\n\n");
  1882. X    ansi( "md" );
  1883. X    printf("%s", MI204_MSG);
  1884. X    ansi( "me" );
  1885. X    printf(" %s\n", NG);
  1886. X    ansi( "md" );
  1887. X    printf("%s", MI204aMSG);
  1888. X    ansi( "me" );
  1889. X    printf(" ");    
  1890. X
  1891. X    if(strcomp(BRETT, "PM") == 0){
  1892. X        printf("%s", MI204bMSG);
  1893. X    }
  1894. X    else{
  1895. X        fp = fopen( NEWSGROUPS, "r" );
  1896. X        if(fp == NULL){
  1897. X            nerror("misc2.c", 190, "brett", "Datei-Lesefehler", NEWSGROUPS);
  1898. X        }
  1899. X        h = 0;
  1900. X        while((h == 0) && (fgets(s, 80, fp) != NULL)){
  1901. X            if(strcomp(NG, s) == 0){
  1902. X                a = 0; 
  1903. X                while(s[a] > 32) a++;
  1904. X                while(s[a] < 32) a++;
  1905. X                strcpy(t, (char *) strcopy(s, a, 80)); 
  1906. X                printf("%s", (char *) stripped(t));
  1907. X                h++;
  1908. X            }
  1909. X        }
  1910. X        fclose(fp);
  1911. X    }
  1912. X    printf("\n");
  1913. X    return;
  1914. X  }
  1915. X  if ((arg[0] == '+') || (arg[0] == '-')) {
  1916. X    scanner(arg[0] + 255);
  1917. X    return;
  1918. X  }
  1919. X  if (arg[0] == '\0') {
  1920. X    maybe_locked(UGROUPS, "r");
  1921. X    fp = fopen(UGROUPS, "r");
  1922. X    if (fp == NULL) {
  1923. X        nerror("misc2.c", 908, "brett", "Datei-Lesefehler", UGROUPS);
  1924. X    }
  1925. X    arg[0] = '*';
  1926. X  }
  1927. X  else {
  1928. X    maybe_locked(NGROUPS, "r");
  1929. X    fp = fopen(NGROUPS, "r");
  1930. X    if (fp == NULL) {
  1931. X        nerror("misc2.c", 916, "brett", "Datei-Lesefehler", NGROUPS);
  1932. X    }
  1933. X  }
  1934. X
  1935. X
  1936. X  org[0] = '\0';
  1937. X  strcat(org, arg);
  1938. X
  1939. X  if (arg[0] == '.') {
  1940. X    i = 0;
  1941. X    j = 0;
  1942. X    strcpy(org, NG);
  1943. X    while (org[i] != '\0') {
  1944. X        if (org[i] == '.') j = i;
  1945. X        i++;
  1946. X    }
  1947. X    if (j == 0) return;
  1948. X    org[j] = '\0';
  1949. X  }
  1950. X  if (arg[0] == '#') subboard++;
  1951. X
  1952. X  zeile = 0;
  1953. X
  1954. X  show(NGROUPS, 99, 99); /* RESET */
  1955. X
  1956. X  if ((arg[0] == '*') || (arg[0] == '+') || (arg[0] == '#') || (arg[0] == '~') || (arg[0] == '^')) {
  1957. X
  1958. X    if(arg[0] != '^'){
  1959. X        sprintf(s, "%s %d) ", MI205_MSG, USER.level);
  1960. X    }
  1961. X    else{
  1962. X        sprintf(s, "%s 10) ", MI205_MSG);
  1963. X    }
  1964. X    headline(s);
  1965. X    i = 0;
  1966. X    strcpy(o, (char *) "OOPS");
  1967. X
  1968. X    while (fscanf(fp, "%s %d %d %s", s, &a, &h, t) > 0) {
  1969. X#ifdef _CNEWS
  1970. X        if(t[0] == '=')     
  1971. X            continue; 
  1972. X#endif
  1973. X        if (arg[0] == '~') {
  1974. X            if (strcomp(NG, s) != 0) continue;
  1975. X        }
  1976. X        if ((strcomp(o, s) != 0) || (subboard == 0)) {
  1977. X            if (subboard != 0) {
  1978. X                j = subb(s);
  1979. X                if (j != 0) s[j] = '\0';
  1980. X                o[0] = '\0'; strcat(o, s);
  1981. X            }
  1982. X            if ((chk_newsgrp(s) == 0) || (arg[0] == '^')){
  1983. X                s[((80/USER.schluessel[1]) -2)] = '\0';
  1984. X                strcat(s, "                                   ");
  1985. X                s[((80/USER.schluessel[1]) -1)] = '\0';
  1986. X                printf("%s", s);
  1987. X                i++;
  1988. X                plus++;
  1989. X                if (i == USER.schluessel[1]) {
  1990. X                    printf("\n");
  1991. X                    i = 0;                
  1992. X                    zeile++;
  1993. X                    if (zeile >= MAX_SCR_LINES) {
  1994. X                        zeile = 0;
  1995. X                        if(USER.more != 0){
  1996. X                            if (more() != 0) return (int) 1;
  1997. X                        }
  1998. X                    }
  1999. X                }
  2000. X            }
  2001. X        }
  2002. X    }
  2003. X    if (plus == 0) {
  2004. X        printf("%s", MI206_MSG);
  2005. X    }
  2006. X    printf("\n");
  2007. X  }
  2008. X  else {
  2009. X    if (org[0] != '\0') {
  2010. X
  2011. X        SO_WHAT:
  2012. X
  2013. X        strcpy(o, (char *) org);
  2014. X
  2015. X        i = 0;
  2016. X        while (org[i] != '\0') {
  2017. X            t[i] = org[i];
  2018. X            if (t[i] == '.') t[i] = '/';
  2019. X            i++;
  2020. X        }
  2021. X        t[i] = '\0';
  2022. X
  2023. X        sprintf(s, "%s/%s", NEWS, t);
  2024. X
  2025. X        if (chdir(s) != 0) {
  2026. X            sprintf(o, "%s.%s", NG, org);
  2027. X            i = 0;
  2028. X            while (o[i] != '\0') {
  2029. X                t[i] = o[i];
  2030. X                if (t[i] == '.') t[i] = '/';
  2031. X                i++;
  2032. X            }
  2033. X            t[i] = '\0';
  2034. X            sprintf(s, "%s/%s", NEWS, t);
  2035. X        }
  2036. X        if (chdir(s) != 0) {
  2037. X            this = 9999;
  2038. X            maybe_locked(NGROUPS, "r");
  2039. X            ff = fopen(NGROUPS, "r");
  2040. X            if (ff == NULL) {
  2041. X                nerror("misc2.c", 1001, "brett", "Datei-Lesefehler", NGROUPS);
  2042. X            }
  2043. X            while (fscanf(ff, "%s %d %d %s", s, &i, &i, t) > 0) {
  2044. X                i = strcomp(org, s);
  2045. X                if (i < this) {
  2046. X                    this = i;
  2047. X                    strcpy(maybe, s);
  2048. X                }
  2049. X            }
  2050. X            fclose(ff);
  2051. X            
  2052. X            strcpy(org, maybe);
  2053. X            printf("\n\n");
  2054. X            ansi("mr");
  2055. X            printf("%s \"%s\" [%c, %c] >", MI207_MSG, maybe, GBL06_MSG, GBL07_MSG);
  2056. X            ansi("me");
  2057. X
  2058. X            c = yesno();
  2059. X            
  2060. X            if (c != GBL07_MSG) goto SO_WHAT;
  2061. X
  2062. X            printf("\n");
  2063. X        }
  2064. X        else {
  2065. X
  2066. X            if (chk_newsgrp(o) == 0) {
  2067. X                strcpy(BRETT, s);
  2068. X                printf("\n");
  2069. X                sprintf(NG, "%s", o);
  2070. X                if(length(o) > 14){
  2071. X#ifndef _LONGNAMES
  2072. X                    strcpy(o, (char *) shortname(o));
  2073. X#endif
  2074. X                }
  2075. X#ifdef _NOINDEX
  2076. X                printf("\n%s ..", MI211_MSG);
  2077. X                switch( (fpid = fork()) ){
  2078. X                    case -1 :
  2079. X                        break;
  2080. X                    case  0 :    while(1){
  2081. X                                printf(".");
  2082. X                                sleep(1);
  2083. X                            }    
  2084. X                        break;
  2085. X                }
  2086. X                sprintf(s, "%s %s -x", MB_DAEMON, NG);
  2087. X                system( s );
  2088. X                sprintf(s, "mv %s/%s/%s %s/inhalt.%d", HOME, LIB, o, TMP, getpid());
  2089. X                system( s );
  2090. X                sprintf(INHALT, "%s/inhalt.%d", TMP, getpid());
  2091. X                kill( fpid, SIGKILL );
  2092. X                wait( fpid );
  2093. X                printf("\n");                
  2094. X#else                
  2095. X                sprintf(INHALT, "%s/%s", LIB, o);
  2096. X#endif
  2097. X            } else {
  2098. X                ansi("md");
  2099. X                printf(" %s\n", MI210_MSG);
  2100. X                ansi("me");
  2101. X            }
  2102. X        }
  2103. X        chdir(HOME);
  2104. X    }
  2105. X  }
  2106. X  fclose(fp);
  2107. X  return;
  2108. X}
  2109. X
  2110. END_OF_FILE
  2111.   if test 9043 -ne `wc -c <'src/misc2.c'`; then
  2112.     echo shar: \"'src/misc2.c'\" unpacked with wrong size!
  2113.   fi
  2114.   # end of 'src/misc2.c'
  2115. fi
  2116. echo shar: End of archive 8 \(of 11\).
  2117. cp /dev/null ark8isdone
  2118. MISSING=""
  2119. for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
  2120.     if test ! -f ark${I}isdone ; then
  2121.     MISSING="${MISSING} ${I}"
  2122.     fi
  2123. done
  2124. if test "${MISSING}" = "" ; then
  2125.     echo You have unpacked all 11 archives.
  2126.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2127. else
  2128.     echo You still must unpack the following archives:
  2129.     echo "        " ${MISSING}
  2130. fi
  2131. exit 0
  2132. exit 0 # Just in case...
  2133.