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

  1. Newsgroups: comp.sources.misc
  2. From: Volker.Schuermann@unnet.w.open.de@unnet (Volker Schuermann)
  3. Subject:  v31i023:  mbox - A BBS for UNIX and MINIX v1.6 PL10, Part07/11
  4. Message-ID: <1992Jul10.050400.27638@sparky.imd.sterling.com>
  5. X-Md4-Signature: 2d33d01640f849fcc491fee06a4f794c
  6. Date: Fri, 10 Jul 1992 05:04:00 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 23
  11. Archive-name: mbox/part07
  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:  src/Makefile src/bled.c src/intro.c src/main.c src/mbox.h
  22. # Wrapped by kent@sparky on Thu Jul  9 23:26:02 1992
  23. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  24. echo If this archive is complete, you will see the following message:
  25. echo '          "shar: End of archive 7 (of 11)."'
  26. if test -f 'src/Makefile' -a "${1}" != "-c" ; then 
  27.   echo shar: Will not clobber existing file \"'src/Makefile'\"
  28. else
  29.   echo shar: Extracting \"'src/Makefile'\" \(11028 characters\)
  30.   sed "s/^X//" >'src/Makefile' <<'END_OF_FILE'
  31. X#---------------------------------------------------------------------------
  32. X#
  33. X#                      ix/MBox  M A K E F I L E
  34. X#             Bulletin Board System for UNIX(-Derivations)
  35. X#            
  36. X#               Volker Schuermann
  37. X#              Wuppertal, FRG, 26.10.1991
  38. X#
  39. X#
  40. X#                     Modified for SVR3    
  41. X#        
  42. X#          Walter Buerger <walterb@weller.ruhr.sub.org>
  43. X#              Ralf Heidelberg <ralf@heibox.ruhr.sub.org>
  44. X#          Solingen/Wuppertal, FRG, 08.11.1991
  45. X#
  46. X#
  47. X#                        Modified for ISC 2.21
  48. X#
  49. X#              Hergo Pape <hergo@ivcmd.BOERDE.DE>
  50. X#               Magdeburg, FRG, 16.11.1991
  51. X#
  52. X#        
  53. X#                 DIFF-Support
  54. X#
  55. X#        Ralf Heidelberg <ralf@heibox.ruhr.sub.org>
  56. X#            Wuppertal, FRG, 07.01.1992
  57. X#
  58. X#
  59. X#               Modified for ST Minix/c86
  60. X#      
  61. X#              Olaf <olaf@oski.toppoint.de>
  62. X#                        Kiel, FRG, 14.01.1992
  63. X#
  64. X#
  65. X#                           SVR4 Support by 
  66. X#
  67. X#                Andreas Laumann <andreas@xenox.w.open.de>
  68. X#                   Wuppertal, FRG, 30.05.1992
  69. X#
  70. X#
  71. X#---------------------------------------------------------------------------
  72. X# CFLAGS: 
  73. X# 
  74. X# -D_MBOX         Has to be set ALWAYS!
  75. X# -D_SYS7         UNIX System 7 (MINIX, COHERENT, ...)
  76. X# -D_MINIX        MINIX special stuff
  77. X# -D_ISC          Interactive UNIX goodies
  78. X# -D_SCO          For SCO UNIX only
  79. X# -D_SVR4         For AT&T's System V Rel 4 
  80. X# -D_LONGNAMES    Long filenames allowed (SVR4, BSD, ULTRIX, ...)
  81. X# -D_ESTDIO       Earl Chew's "estdio.h" and GNU C 1.37
  82. X# -D_CORELEFT     To check your memory (-D_CORELEFT=10000)
  83. X# -D_DATESTAMP    Add time&date to console LOGFILE
  84. X# -D_NOINDEX      Index files for NEWS will be created interactive for
  85. X#          each group that is called by a user
  86. X#          Otherwise MB-DAEMON has to be called by [cron] daily
  87. X# -D_BAUDRATE     If you've a HST-Modem with FIXED BAUDRATE
  88. X# -D_MULTIMEDIA   Local "Multimedia"-Features (i.e. read RTF-Files etc.)
  89. X# -D_CNEWS      To prevent problems with C-NEWS' aliasing mechanism
  90. X#---------------------------------------------------------------------------
  91. X# This is a workaround for the System V (not SVR4) /bin/sh bug 
  92. X
  93. XSHELL = /bin/sh
  94. X
  95. X# The following definition tells all ix/MBox BBS parts where they have to 
  96. X# live in the future. 
  97. X
  98. XMBOXHOME=/local/mbox
  99. X
  100. X# All BBS binaries will be stored in the BIN dircetory ... except [mbrsh]
  101. X# NOTE that the path to BIN has to be in all users 'SET'!
  102. X
  103. XBIN=/usr/bin
  104. X
  105. X#---------------------------------------------------------------------------
  106. X# And now some predefined settings for various compilers/systems:
  107. X#
  108. X# MINIX 386 (BCC)
  109. X CC= bcc
  110. X LN= ln
  111. X CHMEM= chmem
  112. X CFLAGS= -D_MINIX -D_SYS7 -D_MBOX -D_BAUDRATE -D_MULTIMEDIA \
  113. X    -DHOME="\"$(MBOXHOME)"\" -DADDRMODE
  114. X LIB=
  115. X CONVERT= mv a.out $@
  116. X CHOWN= chown $(OWNER).$(GROUP) 
  117. X CHGRP= :
  118. X STRIP= strip $@
  119. X#
  120. X#
  121. X# MINIX 386 & ESTDIO.H
  122. X# CC= cc
  123. X# LN= ln
  124. X# CHMEM= chmem
  125. X# CFLAGS= -D_MINIX -D_SYS7 -D_ESTDIO -D_MBOX -DHOME="\"$(MBOXHOME)"\"
  126. X# LIB= -lestdio
  127. X# CONVERT= mv a.out $@
  128. X# CHOWN= chown $(OWNER).$(GROUP) 
  129. X# CHGRP= :
  130. X# STRIP= strip $@
  131. X#
  132. X#
  133. X# MINIX 386 (GCC 1.37)
  134. X# CC= gcc
  135. X# LN= ln
  136. X# CHMEM= : 
  137. X# CFLAGS= -O -D_MINIX -D_SYS7 -D_MBOX -D_ESTDIO -DHOME="\"$(MBOXHOME)"\" \
  138. X#    -D_BAUDRATE -D_MULTIMEDIA    
  139. X# LIB=
  140. X# CONVERT= /usr/local/bin/gcc2minix < a.out > $@
  141. X# CHOWN= chown $(OWNER).$(GROUP) 
  142. X# CHGRP= :
  143. X# STRIP= strip $@
  144. X#
  145. X#
  146. X# ESIX SVR3 
  147. X# CC= cc
  148. X# LN= ln
  149. X# CHMEM= :
  150. X# CFLAGS= -O -D_MBOX -DHOME="\"$(MBOXHOME)"\"
  151. X# LIB= -lcurses -s
  152. X# CONVERT= mv a.out $@
  153. X# CHOWN= chown $(OWNER) 
  154. X# CHGRP= chgrp $(GROUP)
  155. X# STRIP= $@
  156. X#
  157. X#
  158. X# ISC 2.21 & "Shared Libs" 
  159. X# CC= gcc
  160. X# LN= ln
  161. X# CHMEM= :
  162. X# CFLAGS= -O -D_MBOX -D_ISC -traditional -DHOME="\"$(MBOXHOME)"\"
  163. X# LIB= -ltermcap -lcurses -lc_s -s
  164. X# CONVERT= mv a.out $@
  165. X# CHOWN= chown $(OWNER) 
  166. X# CHGRP= chgrp $(GROUP)
  167. X# STRIP= :
  168. X#
  169. X#
  170. X# Dell 2.1 (SVR4) & GCC 2.1
  171. X# CC= gcc
  172. X# LN= ln
  173. X# CHMEM= :
  174. X# CFLAGS= -traditional -g -D_MBOX -D_SVR4 -D_DATESTAMP -D_BAUDRATE \
  175. X#     -D_LONGNAMES -D_MULTIMEDIA -D_CNEWS -DHOME="\"$(MBOXHOME)"\"
  176. X# LIB= -ltermlib
  177. X# DBM= 
  178. X# CONVERT= mv a.out $@
  179. X# CHOWN= chown $(OWNER) 
  180. X# CHGRP= chgrp $(GROUP)
  181. X# STRIP= :
  182. X
  183. X# This is the pager which BLED uses to display his helpfile 
  184. XBLPAGER=/bin/cat
  185. X
  186. X# In this directory, you hide your helpfiles and manuals
  187. XHELPDIR=/usr/doc
  188. X
  189. X
  190. X# Sorry, but SETUID root.root is still necessary ...
  191. XOWNER=root
  192. XGROUP=root
  193. X
  194. X
  195. XMBOX.OBJ=main.o getch.o tools.o getline.o \
  196. X    intro.o nerror.o show.o    loop.o help.o admin.o mail.o control.o \
  197. X    misc.o lesen.o lesen2.o pd.o portinfo.o befehl.o misc2.o \
  198. X    postfach.o ctrlx.o makro.o weiterl.o coreleft.o games.o suchen.o \
  199. X    baudrate.o outdial.o faces.o
  200. X
  201. XBLED.OBJ=bled.o getch.o bltools.o blgetline.o derror.o
  202. X
  203. XXMD.OBJ=xmd.o tools.o derror.o
  204. X
  205. XMBRSH.OBJ=mbrsh.o
  206. X
  207. XMBD.OBJ=tools.o mb-daemon.o derror.o
  208. X
  209. XDIFF_FILES=admin.c befehl.c bled.c control.c coreleft.c \
  210. X    ctrlx.c defs.h derror.c games.c getch.c getline.c help.c intro.c \
  211. X    lesen.c lesen2.c loop.c mail.c main.c makro.c mb-daemon.c mbox.h \
  212. X    mbrsh.c misc.c misc2.c nerror.c patchlevel.h pd.c portinfo.c \
  213. X    postfach.c show.c suchen.c tools.c weiterl.c xmd.c baudrate.c \
  214. X    outdial.c faces.c
  215. X
  216. XPROGS=mbox bled mb-daemon mbrsh xmd
  217. X
  218. Xdefault:; @echo ''
  219. X      @echo 'One of the following:'
  220. X      @echo ''
  221. X      @echo 'make all       <-   Create every object file'
  222. X      @echo 'make world     <-   Make directories and set permissions'
  223. X      @echo 'make inst      <-   Install the BBS (make all, world, etc.)'
  224. X      @echo 'make english   <-   Prepare for english version'
  225. X      @echo 'make german    <-   Prepare for german version'
  226. X      @echo 'make clean     <-   Remove object files'
  227. X      @echo 'make mbox      <-   Make the BBS itself (ix/MBox BBS)'
  228. X      @echo 'make mb-daemon <-   Compile "mb-daemon" (NEWS Scanner)'
  229. X      @echo 'make xmd       <-   Create "xmd" (Mailing Agent)'
  230. X      @echo 'make mbrsh     <-   Build "mbrsh" (External Shell)'
  231. X      @echo 'make bled      <-   Make "bled" (B[etter] L[ine] ED[itor])'
  232. X      @echo ''
  233. X      @echo 'Active definitions:'
  234. X      @echo ''
  235. X      @echo 'Compiler [$(CC)]'
  236. X      @echo 'CFLAGS   [$(CFLAGS)]'
  237. X      @echo 'Lib(s)   [$(LIB)]'
  238. X      @echo 'Root-ID  [$(OWNER).$(GROUP)]'
  239. X      @echo ''
  240. X
  241. Xall: $(PROGS)
  242. X    @echo ''
  243. X    @echo '- All files are made' 
  244. X    @echo ''
  245. X
  246. Xmbox:    $(MBOX.OBJ)
  247. X    @echo ''
  248. X    @echo '- The BBS is going to be compiled...'
  249. X    @echo ''
  250. X    $(CC) $(CFLAGS) $(MBOX.OBJ) $(LIB) 
  251. X    @$(CONVERT)
  252. X    @$(CHGRP) $@
  253. X    @$(CHOWN) $@
  254. X    @chmod +x mbox
  255. X    @chmod ug+s mbox
  256. X    @$(CHMEM) +250000 mbox
  257. X    @$(STRIP)
  258. X
  259. Xbled:    $(BLED.OBJ) 
  260. X    @echo ''
  261. X    @echo '- The Editor (BLED) is going to be compiled...'
  262. X    @echo ''
  263. X    $(CC) $(CFLAGS) $(BLED.OBJ) $(LIB) 
  264. X    @$(CONVERT)
  265. X    @$(CHMEM) +10000 bled    
  266. X    @$(STRIP)
  267. X    @chmod +x bled
  268. X
  269. Xxmd:    $(XMD.OBJ) 
  270. X    @echo ''
  271. X    @echo '- The Mailing Agent (xmd) is going to be compiled...'
  272. X    @echo ''
  273. X    $(CC) $(CFLAGS) $(XMD.OBJ) $(LIB) 
  274. X    @$(CONVERT)
  275. X    @$(STRIP)
  276. X    @chmod +x xmd
  277. X
  278. Xmbrsh:  $(MBRSH.OBJ) 
  279. X    @echo ''
  280. X    @echo '- The external SHELL (mbrsh) is going to be compiled...'
  281. X    @echo ''
  282. X    $(CC) $(CFLAGS) $(MBRSH.OBJ) $(LIB) 
  283. X    @$(CONVERT)
  284. X    @$(STRIP)
  285. X    @chmod +x mbrsh
  286. X
  287. Xmb-daemon:    $(MBD.OBJ) 
  288. X    @echo ''
  289. X    @echo '- The NEWS Scanner (mb-daemon) is going to be compiled...'
  290. X    @echo ''
  291. X    $(CC) $(CFLAGS) $(MBD.OBJ) $(LIB) 
  292. X    @$(CONVERT)
  293. X    @chmod +x mb-daemon
  294. X    @chmod ug+s mb-daemon
  295. X    @$(CHMEM) +64000 mb-daemon        
  296. X    @$(STRIP)
  297. X
  298. Xinst:    world all
  299. X    @echo
  300. X    @echo -n '- The BBS is going to be installed...'
  301. X    @cp mbox $(BIN)
  302. X    @cp bled $(BIN)
  303. X    @cp mbrsh $(MBOXHOME)
  304. X    @cp mb-daemon $(BIN)
  305. X    @cp xmd $(BIN)
  306. X    @cp bled.doc $(HELPDIR)
  307. X    @$(CHOWN) $(MBOXHOME)/* $(MBOXHOME)/etc/*
  308. X    @$(CHGRP) $(MBOXHOME)/* $(MBOXHOME)/etc/*
  309. X    @chmod +s $(BIN)/mbox
  310. X    @chmod +s $(BIN)/mb-daemon
  311. X    @echo  'done.'
  312. X    @echo
  313. X
  314. Xcopy:
  315. X    cp mbox bled mb-daemon xmd $(BIN)
  316. X    cp mbrsh $(MBOXHOME)
  317. X
  318. Xenglish:;
  319. X    @echo
  320. X    @echo -n '- Preparing english version...'
  321. X    @rm $(MBOXHOME)/src/mbox.msg
  322. X    @ln $(MBOXHOME)/src/mbox.english $(MBOXHOME)/src/mbox.msg
  323. X    @rm $(MBOXHOME)/etc/help.*
  324. X    @ln $(MBOXHOME)/etc/english.befehle $(MBOXHOME)/etc/help.befehle
  325. X    @ln $(MBOXHOME)/etc/english.hilfe $(MBOXHOME)/etc/help.hilfe
  326. X    @ln $(MBOXHOME)/etc/english.shorthelp $(MBOXHOME)/etc/help.shorthelp
  327. X    @echo 'done.'
  328. X    @echo ''
  329. X
  330. Xgerman:;
  331. X    @echo
  332. X    @echo -n '- Preparing german version...'
  333. X    @rm $(MBOXHOME)/src/mbox.msg
  334. X    @ln $(MBOXHOME)/src/mbox.deutsch $(MBOXHOME)/src/mbox.msg
  335. X    @rm $(MBOXHOME)/etc/help.*
  336. X    @ln $(MBOXHOME)/etc/deutsch.befehle $(MBOXHOME)/etc/help.befehle
  337. X    @ln $(MBOXHOME)/etc/deutsch.hilfe $(MBOXHOME)/etc/help.hilfe
  338. X    @ln $(MBOXHOME)/etc/deutsch.shorthelp $(MBOXHOME)/etc/help.shorthelp
  339. X    @echo 'done.'
  340. X    @echo ''
  341. X
  342. Xworld:;    @echo
  343. X    @echo -n '- Making directories...'
  344. X    @if test -d $(MBOXHOME) ; then echo -n ''; else mkdir $(MBOXHOME) ; fi
  345. X    @if test -d $(BIN) ; then echo -n ''; else mkdir $(BIN) ; fi
  346. X    @if test -d $(MBOXHOME)/etc ; then echo -n ''; \
  347. X        else mkdir $(MBOXHOME)/etc ; fi
  348. X    @if test -d $(MBOXHOME)/lib ; then echo -n ''; \
  349. X        else mkdir $(MBOXHOME)/lib ; fi
  350. X    @if test -d $(MBOXHOME)/src ; then echo -n ''; \
  351. X        else mkdir $(MBOXHOME)/src ; fi
  352. X    @if test -d $(MBOXHOME)/usr ; then echo -n ''; \
  353. X        else mkdir $(MBOXHOME)/usr ; fi
  354. X    @$(CHOWN) $(MBOXHOME) $(MBOXHOME)/*
  355. X    @$(CHGRP) $(MBOXHOME) $(MBOXHOME)/*
  356. X    @chmod ug+rwx $(MBOXHOME)/lib
  357. X    @chmod o-rwx $(MBOXHOME)/lib
  358. X    @chmod ug+rwx $(MBOXHOME)/src
  359. X    @chmod o-rwx $(MBOXHOME)/src
  360. X    @chmod ug+rwx $(MBOXHOME)/etc
  361. X    @chmod o-rwx $(MBOXHOME)/etc
  362. X    @chmod ug+rwx $(MBOXHOME)/usr
  363. X    @chmod o-rwx $(MBOXHOME)/usr
  364. X    @echo 'done.'
  365. X    @echo ''
  366. X
  367. X
  368. Xclean:;    
  369. X    @echo ''
  370. X    @echo -n '- Old stuff is going to be deleted...' 
  371. X    @rm -f *.o mbox mbrsh bled xmd mb-daemon bltools.c blgetline.c
  372. X    @echo 'done.'
  373. X    @echo ''
  374. X
  375. Xblgetline.o:    mbox.h patchlevel.h
  376. X    @if test -f blgetline.c ; then echo -n '' ; \
  377. X        else $(LN) getline.c blgetline.c ; fi
  378. X    $(CC) -c $(CFLAGS) blgetline.c
  379. X
  380. Xbltools.o:    mbox.h patchlevel.h
  381. X    @rm -f bltools.c
  382. X    @cat undef.c > bltools.c
  383. X    @cat tools.c >> bltools.c
  384. X    $(CC) -c $(CFLAGS) bltools.c
  385. X
  386. Xbled.o:    mbox.h patchlevel.h
  387. X    $(CC) -c $(CFLAGS) -DHILFE="\"$(BLPAGER) $(HELPDIR)/bled.doc"\" bled.c
  388. X
  389. X
  390. X
  391. X# For automagic update service (Beta-Testers only) ...
  392. XDIFF     = /usr/bin/cdiff
  393. XSRC      = /mbox/src
  394. XSRC_ORIG = /mbox/1.6
  395. XADRESSE  = "volkers@unnet.w.open.DE"
  396. X
  397. X
  398. Xdiff: $(DIFF_FILES)
  399. X    @echo DiffMailer by ralf@heibox.ruhr.sub.org >$@
  400. X    @echo Project: ix/MBox 1.6 >>$@
  401. X    @echo Adresse: $(ADRESSE)
  402. X    @echo Folgende Aenderungen sind in $? vorzunehmen >>$@
  403. X    @date >>$@
  404. X    @echo >>$@
  405. X    @for f in $? ; do \
  406. X    echo ----- $$f -----; \
  407. X    echo ----- $$f ----- >>$@; \
  408. X    $(DIFF) $(SRC)/$$f $(SRC_ORIG) | cat >>$@; \
  409. X    done
  410. X    @cat diff | mail -s "ix/MBox PATCHES" volkers@unnet.w.open.de
  411. X
  412. X
  413. Xadmin.o:        mbox.h defs.h
  414. Xbefehl.o:        mbox.h defs.h
  415. Xbled.o:            mbox.h defs.h
  416. Xbaudrate.o:        mbox.h defs.h
  417. Xcontrol.o:        mbox.h defs.h
  418. Xderror.o:        mbox.h defs.h
  419. Xfaces.o:        mbox.h defs.h
  420. Xgames.o:        mbox.h defs.h
  421. Xgetline.o:        mbox.h defs.h
  422. Xhelp.o:            mbox.h defs.h
  423. Xintro.o:        mbox.h defs.h
  424. Xlesen:            mbox.h defs.h
  425. Xlesen2.o:        mbox.h defs.h
  426. Xloop.o:            mbox.h defs.h
  427. Xmail.o:            mbox.h defs.h
  428. Xmain.o:            mbox.h defs.h
  429. Xmakro.o:        mbox.h defs.h
  430. Xmbd.o:            mbox.h defs.h
  431. Xmbrsh.o:        mbox.h defs.h
  432. Xmisc.o:            mbox.h defs.h
  433. Xmisc2.o:        mbox.h defs.h
  434. Xnerror.o:        mbox.h defs.h
  435. Xoutdial.o:        mbox.h defs.h
  436. Xpd.o:            mbox.h defs.h
  437. Xportinfo.o:        mbox.h defs.h
  438. Xpostfach.o:        mbox.h defs.h
  439. Xshow.o:            mbox.h defs.h
  440. Xsuchen.o:        mbox.h defs.h
  441. Xtools.o:        mbox.h defs.h
  442. Xweiterl.o:        mbox.h defs.h
  443. Xxmd.o:            mbox.h defs.h
  444. X
  445. X
  446. END_OF_FILE
  447.   if test 11028 -ne `wc -c <'src/Makefile'`; then
  448.     echo shar: \"'src/Makefile'\" unpacked with wrong size!
  449.   fi
  450.   # end of 'src/Makefile'
  451. fi
  452. if test -f 'src/bled.c' -a "${1}" != "-c" ; then 
  453.   echo shar: Will not clobber existing file \"'src/bled.c'\"
  454. else
  455.   echo shar: Extracting \"'src/bled.c'\" \(11315 characters\)
  456.   sed "s/^X//" >'src/bled.c' <<'END_OF_FILE'
  457. X#include <stdio.h>
  458. X#include <setjmp.h>
  459. X#include <signal.h>
  460. X
  461. X#define VERSION "LED 3.5 (Unix)"
  462. X#define AUTOR   "Volker.Schuermann@unnet.w.open.de"
  463. X
  464. X#ifndef STRING
  465. X#define STRING 85
  466. X#endif
  467. X
  468. X#include "mbox.msg"
  469. X
  470. X
  471. X#define CR     13
  472. X#define LF     10
  473. X#define BS      8
  474. X#define CTRL_X 24
  475. X#define CTRL_D  4
  476. X
  477. X
  478. X#define TMP "/tmp"
  479. X
  480. X#define APPEND 1
  481. X#define INSERT 2
  482. X#define FINISH 3
  483. X#define QUIT   4
  484. X#define UPLOAD 5
  485. X
  486. X#ifdef _MBOX
  487. X#undef _MBOX
  488. X#endif
  489. X
  490. Xstatic int melted;
  491. X
  492. Xstatic char tmp1[STRING];
  493. Xstatic char tmp2[STRING];
  494. X
  495. Xstatic int von, bis;
  496. Xstatic int max_line;
  497. X
  498. Xstatic char imode;
  499. X
  500. Xstatic char THE_FILE[STRING];
  501. Xstatic int  THE_LINE;
  502. X
  503. X
  504. Xint melt(startlin)
  505. Xint startlin;
  506. X{
  507. X  FILE *fp;
  508. X  FILE *ff;
  509. X  FILE *fg;
  510. X  char s[255];
  511. X  char tmp3[STRING];
  512. X  int i;
  513. X
  514. X
  515. X  if (melted == 0) return 0;
  516. X
  517. X  sprintf(tmp3, "%s/bled3.%d", TMP, getpid());
  518. X
  519. X  fg = fopen(tmp3, "w");
  520. X  if (fg == NULL) {
  521. X    printf("\n%s\n", tmp3);
  522. X    exit(-1);
  523. X  }
  524. X  fp = fopen(tmp1, "r");
  525. X  if (fp == NULL) {
  526. X    printf("\n%s\n", tmp1);
  527. X    exit(-1);
  528. X  }
  529. X  i = 0;
  530. X  while ((i < startlin) && (fgets(s, 250, fp) != NULL)) {
  531. X    fputs(s, fg);
  532. X    i++;
  533. X  }
  534. X  ff = fopen(tmp2, "r");
  535. X  if (ff != NULL) {
  536. X    while (fgets(s, 250, ff) != NULL) {
  537. X        fputs(s, fg);
  538. X        i++;
  539. X    }
  540. X    fclose(ff);
  541. X  }
  542. X  while (fgets(s, 250, fp) != NULL) {
  543. X    fputs(s, fg);
  544. X  }
  545. X  fclose(fg);
  546. X  fclose(fp);
  547. X
  548. X  unlink(tmp1);
  549. X  rename(tmp3, tmp1);
  550. X  unlink(tmp3);
  551. X
  552. X  return 0;
  553. X}
  554. X
  555. X
  556. X
  557. Xbledmove(from, to)
  558. Xchar from[], to[];
  559. X{
  560. X  FILE *fp;
  561. X  FILE *ff;
  562. X  char s[255];
  563. X
  564. X
  565. X  fp = fopen(from, "r");
  566. X  if (fp == NULL) {
  567. X    printf("\n%s\n", from);
  568. X    exit(-1);
  569. X  }
  570. X  ff = fopen(to, "w");
  571. X  if (ff == NULL) {
  572. X    printf("\n%s\n", from);
  573. X    exit(-1);
  574. X  }
  575. X  while (fgets(s, 250, fp) != NULL) {
  576. X    fputs(s, ff);
  577. X  }
  578. X  fclose(fp);
  579. X  fclose(ff);
  580. X}
  581. X
  582. X
  583. X
  584. X
  585. X
  586. Xzeigen(mode)
  587. Xchar mode;
  588. X{
  589. X  FILE *fp;
  590. X  char t[STRING];
  591. X  char s[255];
  592. X  int i;
  593. X
  594. X  if ((von != 0) && (bis == 0)) bis = von;
  595. X  if ((von == 0) && (bis == 0)) bis = 32000;
  596. X
  597. X  if (von > bis) {
  598. X    /*
  599. X    printf("\n\nLED: Fehler bei der Zeilenangabe.\n");
  600. X    */    
  601. X    printf("\n\nLED: %s\n", BLD01_MSG);
  602. X    return;
  603. X  }
  604. X  fp = fopen(tmp1, "r");
  605. X  if (fp == NULL) {
  606. X    printf("\n%s\n", tmp1);
  607. X    exit(-1);
  608. X  }
  609. X  i = 1;
  610. X  printf("\n\n");
  611. X  while (fgets(s, 250, fp) != NULL) {
  612. X    if ((i >= von) && (i <= bis)) {
  613. X        if (mode == 'l')
  614. X            printf("L%04.4d %s", i, s);
  615. X        else
  616. X            printf("%s", s);
  617. X    }
  618. X    i++;
  619. X  }
  620. X  fclose(fp);
  621. X}
  622. X
  623. X
  624. X
  625. Xloeschen()
  626. X{
  627. X  FILE *fp;
  628. X  FILE *ff;
  629. X  char t[STRING];
  630. X  char s[255];
  631. X  int i;
  632. X
  633. X  if ((von != 0) && (bis == 0)) bis = von;
  634. X  if ((von == 0) && (bis == 0)) bis = 32000;
  635. X
  636. X  if (von > bis) {
  637. X    /*
  638. X    printf("\n\nLED: Fehler bei der Zeilenangabe.\n");
  639. X    */    
  640. X    printf("\n\nLED: %s\n", BLD01_MSG);
  641. X    return;
  642. X  }
  643. X  ff = fopen(tmp2, "w");
  644. X  if (ff == NULL) {
  645. X    printf("\n%s\n", tmp2);
  646. X    exit(-1);
  647. X  }
  648. X  fp = fopen(tmp1, "r");
  649. X  if (fp == NULL) {
  650. X    printf("\n%s\n", tmp1);
  651. X    exit(-1);
  652. X  }
  653. X  i = 1;
  654. X  printf("\n\n");
  655. X  while (fgets(s, 250, fp) != 0) {
  656. X    if ((i < von) || (i > bis)) {
  657. X        fputs(s, ff);
  658. X    }
  659. X    i++;
  660. X  }
  661. X  fclose(fp);
  662. X  fclose(ff);
  663. X
  664. X  unlink(tmp1);
  665. X  rename(tmp2, tmp1);
  666. X}
  667. X
  668. X
  669. X
  670. Xupload()
  671. X{
  672. X  FILE *fp;
  673. X  char c;
  674. X  char lf;
  675. X
  676. X  fp = fopen(tmp2, "w");
  677. X  if (fp == NULL) {
  678. X    printf("\n%s\n", tmp2);
  679. X    exit(-1);
  680. X  }
  681. X  /*
  682. X  printf("\n\nLED: Uebertragung beginnt. (Beenden mit CTRL-X !)\n\n");
  683. X  */
  684. X  printf("\n\nLED: %s\n\n", BLD02_MSG);
  685. X
  686. X  c = 0;
  687. X  lf = CR;
  688. X
  689. X
  690. X  while ((c != CTRL_X) && (c != CTRL_D)) {
  691. X
  692. X        c = getint();
  693. X
  694. X    if ((c == CR) && (lf == CR)) fputc(LF, fp);
  695. X    if (c == CR) lf = CR;
  696. X    if (c == LF) lf = LF;
  697. X    if ((c != CTRL_X) && (c != CTRL_D) && (c != CR)) {
  698. X        fputc(c, fp);
  699. X    }
  700. X  }
  701. X  fclose(fp);
  702. X}
  703. X
  704. X
  705. X
  706. Xkorrigieren()
  707. X{
  708. X  FILE *fp;
  709. X  FILE *ff;
  710. X  char s[255];
  711. X  char t[255];
  712. X  int i, z;
  713. X
  714. X  if (von == 0) {
  715. X    /*
  716. X    printf("\n\nLED: Fehler bei der Zeilenangabe.\n");
  717. X    */    
  718. X    printf("\n\nLED: %s\n", BLD01_MSG);
  719. X    return;
  720. X  }
  721. X  fp = fopen(tmp1, "r");
  722. X  if (fp == NULL) {
  723. X    printf("\n%s\n", tmp1);
  724. X    exit(-1);
  725. X  }
  726. X  ff = fopen(tmp2, "w");
  727. X  if (ff == NULL) {
  728. X    printf("\n%s\n", tmp1);
  729. X    exit(-1);
  730. X  }
  731. X  i = 1;
  732. X  while (fgets(s, 250, fp) != NULL) {
  733. X    if (i == von) {
  734. X        t[0] = '\0';
  735. X        strcpy(t, s); 
  736. X        z = strlen(t);
  737. X        while(t[z] < 33) z--;
  738. X        z++;
  739. X        t[z] = '\0';
  740. X        s[0] = '\0';
  741. X        if (length(t) < 74)
  742. X            printf("\n\nK%04.4d ", i);
  743. X        else
  744. X            printf("\n\n");
  745. X        strcat(s, getline(74, 1001, ' ', t));
  746. X        strcat(s, "\n");
  747. X        printf("\n");
  748. X    }
  749. X    fputs(s, ff);
  750. X    i++;
  751. X  }
  752. X  fclose(ff);
  753. X  fclose(fp);
  754. X  unlink(tmp1);
  755. X  rename(tmp2, tmp1);
  756. X}
  757. X
  758. X
  759. X
  760. X
  761. Xcrunch(s)
  762. Xchar s[];
  763. X{
  764. X  char t[STRING];
  765. X  int i = 0, a = 0;
  766. X
  767. X  von = 0;
  768. X  bis = 0;
  769. X
  770. X  while (s[i] != '\0') {
  771. X    if ((s[i] == ',') || (s[i] == '-')) a = i;
  772. X    i++;
  773. X  }
  774. X  if (a == 0) a = i;
  775. X  t[0] = '\0';
  776. X  strcat(t, strcopy(s, 3, (a - 1)));
  777. X  von = atoi(t);
  778. X  t[0] = '\0';
  779. X  strcat(t, strcopy(s, (a + 1), i));
  780. X  bis = atoi(t);
  781. X  if ((a != i) && (bis == 0)) bis = 32000;
  782. X}
  783. X
  784. X
  785. X
  786. X
  787. X
  788. Xint befehl(s)
  789. Xchar s[];
  790. X{
  791. X  char c = s[1];
  792. X
  793. X  if ((s[2] != ' ') && (s[2] != '\0') && (s[1] != '\0')) {
  794. X    /*
  795. X    printf("\n\nLED: Syntax-Fehler.\n");
  796. X    */
  797. X    printf("\n\nLED: %s\n", BLD03_MSG);
  798. X    return 0;
  799. X  }
  800. X  crunch(s);
  801. X
  802. X  switch (c) {
  803. X      case '\0':
  804. X            return FINISH;
  805. X            break;
  806. X      case '?':
  807. X            printf("\n\n%c", CR);
  808. X            ansi("mr");
  809. X            /*
  810. X            printf(" %s  -  Befehlsuebersicht ", VERSION);
  811. X            */
  812. X            printf(" %s  -  %s ", VERSION, BLD04_MSG);
  813. X            ansi("me");
  814. X            printf("\n\n");
  815. X            /*
  816. X            printf(".l [ZEILE]|[VON,BIS]   lesen\n");
  817. X            printf(".L [ZEILE]|[VON,BIS]   lesen (keine Zeilennummern)\n");
  818. X            printf(".i AB                  einfuegen\n");
  819. X            printf(".a                     anhaengen (beendet einfuegen)\n");
  820. X            printf(".k ZEILE               korrigieren\n");
  821. X            printf(".d [ZEILE]|[VON,BIS]   loeschen\n");
  822. X            printf(".u                     uebertragen (ASCII-Upload)\n");
  823. X            printf(".q                     abbrechen\n");
  824. X            printf(".h                     ausfuehrliche Hilfe\n");
  825. X            printf(".                      sichern & beenden\n\n");
  826. X            printf("ZEILE, VON, BIS, AB sind gueltige Zeilennummern.\n");
  827. X            printf("Angaben in [KLAMMERN] sind optional. Werden\n");
  828. X            printf("keine Angaben gemacht gilt AB=1, VON=1, BIS=32000.\n");
  829. X            */
  830. X            printf("%s\n", BLD05_MSG);
  831. X            printf("%s\n", BLD06_MSG);
  832. X            printf("%s\n", BLD07_MSG);
  833. X            printf("%s\n", BLD08_MSG);
  834. X            printf("%s\n", BLD09_MSG);
  835. X            printf("%s\n", BLD10_MSG);            
  836. X            printf("%s\n", BLD11_MSG);
  837. X            printf("%s\n", BLD12_MSG);
  838. X            printf("%s\n", BLD13_MSG);
  839. X            printf("%s\n", BLD14_MSG);
  840. X            printf("\n");
  841. X            printf("%s\n", BLD15_MSG);
  842. X            printf("%s\n", BLD16_MSG);
  843. X            printf("%s\n", BLD17_MSG);
  844. X            break;
  845. X      case 'h':            printf("\n\n%c", CR);
  846. X            ansi("mr");
  847. X            /*
  848. X            printf(" %s  -  Hilfe ", VERSION);
  849. X            */
  850. X            printf(" %s  -  %s ", VERSION, BLD18_MSG);
  851. X            ansi("me");
  852. X            printf("\n\n");
  853. X            system( HILFE );
  854. X            break;
  855. X      case 'a':    
  856. X            return APPEND;    
  857. X            break;
  858. X      case 'i':
  859. X            return INSERT;    
  860. X            break;
  861. X      case 'l':
  862. X      case 'L':
  863. X            zeigen(c);
  864. X            return APPEND;
  865. X            break;
  866. X      case 'd':
  867. X            loeschen();
  868. X            return APPEND;
  869. X            break;
  870. X      case 'k':
  871. X      case 'c':
  872. X            korrigieren();
  873. X            return APPEND;
  874. X      case 'u':
  875. X            upload();
  876. X            return UPLOAD;
  877. X      case 'q':
  878. X            unlink(tmp1);
  879. X            unlink(tmp2);
  880. X            /*
  881. X            printf("\n\nLED: Abgebrochen. Datei NICHT gesichert.\n\n");
  882. X            */
  883. X            printf("\n\nLED: %s\n\n", BLD19_MSG);
  884. X            exit(0);
  885. X            break;
  886. X      default:        /*
  887. X            printf("\n\nLED: Befehl unbekannt.\n");
  888. X            */
  889. X            printf("\n\nLED: %s\n", BLD20_MSG);
  890. X}
  891. X  return 0;
  892. X}
  893. X
  894. X
  895. X
  896. X
  897. X
  898. Xint erfassen(line, mode)
  899. Xint line, mode;
  900. X{
  901. X  FILE *fp;
  902. X  char s[STRING];
  903. X  char t[STRING];
  904. X  char def[STRING];
  905. X  int ok = 0;
  906. X  int elin = line;
  907. X  int startlin = line - 1;
  908. X  int a, b;
  909. X
  910. X  melted = 1;            /* Sicher ist sicher ... */
  911. X  THE_LINE = startlin;
  912. X
  913. X  fp = fopen(tmp2, "w");
  914. X  if (fp == NULL) return -1;
  915. X
  916. X  def[0] = '\0';
  917. X
  918. X  do {
  919. X    if (elin > max_line) max_line = elin;
  920. X    printf("\n%c%04.4d ", imode, elin);
  921. X    s[0] = '\0';
  922. X    if (def[0] == '\0')
  923. X        strcat(s, getline(73, 1, ' ', " "));
  924. X    else
  925. X        strcat(s, getline(73, 1001, ' ', def));
  926. X
  927. X    if (strcomp("<BREAK>", s) == 0) {
  928. X        sprintf(s, ".?");
  929. X    }
  930. X    if (s[0] == '.') {
  931. X        fclose(fp);
  932. X        melted = melt(startlin);
  933. X
  934. X        ok = befehl(s);
  935. X
  936. X        if (ok == UPLOAD) {
  937. X            melted = 1;
  938. X            melted = melt(startlin);
  939. X            ok = APPEND;
  940. X        }
  941. X        if (ok == INSERT) {
  942. X            imode = 'I';
  943. X            if (von < 1) von = 1;
  944. X            if (von > max_line) {
  945. X                ok = APPEND;
  946. X            }
  947. X             else {
  948. X                startlin = von - 1;
  949. X                THE_LINE = startlin;
  950. X                elin = von;
  951. X            }
  952. X        }
  953. X        if (ok == APPEND) {
  954. X            imode = 'A';
  955. X            unlink(tmp2);
  956. X            rename(tmp1, tmp2);
  957. X            startlin = getfile(tmp2);
  958. X            if (startlin < 1) startlin = 0;
  959. X            elin = startlin + 1;
  960. X            THE_LINE = startlin;
  961. X        }
  962. X        fp = fopen(tmp2, "w");
  963. X        if (fp == NULL) return -1;
  964. X
  965. X    } else {
  966. X        def[0] = '\0';
  967. X        a = length(s);
  968. X        if (a == 73) {
  969. X            while ((s[a] != ' ') && (a > 40)) a--;
  970. X            if (s[a] == ' ') {
  971. X                strcat(def, strcopy(s, (a + 1), 73));
  972. X                s[a] = '\0';
  973. X                for (b = a; b < 73; b++) printf("%c", BS);
  974. X                for (b = a; b < 73; b++) printf(" ");
  975. X            }
  976. X        }
  977. X        fprintf(fp, "%s\n", s);
  978. X        elin++;
  979. X        melted++;
  980. X    }
  981. X  } while (ok != FINISH);
  982. X  return elin;
  983. X}
  984. X
  985. X
  986. X
  987. Xsigcatch(sig)
  988. Xint sig;
  989. X{
  990. X
  991. X  switch (sig) {
  992. X      case SIGINT:
  993. X      case SIGQUIT:
  994. X      case SIGHUP:
  995. X      case SIGABRT:
  996. X      case SIGTERM:
  997. X    melted++;
  998. X    melt(THE_LINE);
  999. X    bledmove(tmp1, THE_FILE);
  1000. X    unlink(tmp1);
  1001. X    unlink(tmp2);
  1002. X    /*
  1003. X    printf("\n\nLED: Prozess terminiert. Datei gesichert.\n\n");
  1004. X    */
  1005. X    printf("\n\nLED: %s\n\n", BLD21_MSG);
  1006. X    exit(-1);
  1007. X    break;
  1008. X  }
  1009. X}
  1010. X
  1011. X
  1012. X
  1013. Xint getfile(path)
  1014. Xchar path[];
  1015. X{
  1016. X  FILE *fp;
  1017. X  FILE *ff;
  1018. X  int i = 0;
  1019. X  char s[STRING];
  1020. X
  1021. X  ff = fopen(tmp1, "w");
  1022. X  if (ff == NULL) {
  1023. X    printf("\n%s\n", tmp1);
  1024. X  }
  1025. X  fp = fopen(path, "r");
  1026. X  if (fp == NULL) {
  1027. X    fclose(ff);
  1028. X    return -1;
  1029. X  }
  1030. X  if (fgets(s, STRING, fp) != 0) i++;
  1031. X  if ((s[0] == 1) && (s[1] == 3)) {    /* MAGIC NUMBER */
  1032. X    return -2;
  1033. X  }
  1034. X  fputs(s, ff);
  1035. X
  1036. X  while (fgets(s, STRING, fp) != NULL) {
  1037. X    fputs(s, ff);
  1038. X    i++;
  1039. X  }
  1040. X  fclose(fp);
  1041. X  fclose(ff);
  1042. X
  1043. X  return i;
  1044. X}
  1045. X
  1046. X
  1047. X
  1048. Xmain(argc, argv)
  1049. Xint argc;
  1050. Xchar *argv[];
  1051. X{
  1052. X  char s[STRING];
  1053. X
  1054. X  int eof = 0;
  1055. X
  1056. X
  1057. X  if (argc < 2) {
  1058. X    /*
  1059. X    printf("\nLED: Keine Datei angegeben.\n\n");
  1060. X    */
  1061. X    printf("\nLED: %s\n\n", BLD22_MSG);
  1062. X    return;
  1063. X  }
  1064. X  /*
  1065. X  signal(SIGINT, sigcatch);
  1066. X  signal(SIGQUIT, sigcatch);
  1067. X  signal(SIGHUP, sigcatch);
  1068. X  signal(SIGABRT, sigcatch);
  1069. X  signal(SIGTERM, sigcatch);
  1070. X  */
  1071. X  signal(SIGINT,  SIG_IGN);
  1072. X  signal(SIGQUIT, SIG_IGN);
  1073. X  signal(SIGHUP,  SIG_IGN);
  1074. X  signal(SIGABRT, SIG_IGN);
  1075. X  signal(SIGTERM, SIG_IGN);
  1076. X
  1077. X#ifndef _SYS7
  1078. X
  1079. X  setbuf(stdout, NULL);
  1080. X
  1081. X#endif
  1082. X
  1083. X  ansi( "INIT" );
  1084. X
  1085. X  sprintf(s, " %s ", VERSION);
  1086. X  headline(s);
  1087. X  /*
  1088. X  printf("\nMomentchen ...");
  1089. X  */
  1090. X  printf("\n%s", BLD23_MSG);
  1091. X
  1092. X  sprintf(tmp1, "%s/bled1.%d", TMP, getpid());
  1093. X  sprintf(tmp2, "%s/bled2.%d", TMP, getpid());
  1094. X
  1095. X  sprintf(THE_FILE, "%s", argv[1]);
  1096. X  THE_LINE = 0;
  1097. X
  1098. X  eof = getfile(THE_FILE);
  1099. X  printf("%c", CR);
  1100. X  if (eof == -2) {
  1101. X    /*
  1102. X    printf("Datei \"%s\" enthaelt ein ausfuehrbares Programm.\n\n", THE_FILE);
  1103. X    */
  1104. X    printf("%s \"%s\" %s\n\n", BLD24_MSG, THE_FILE, BLD25_MSG);
  1105. X    return;
  1106. X  }
  1107. X  if (eof == -1)
  1108. X    /*
  1109. X    printf("Datei wird angelegt.");
  1110. X    */
  1111. X    printf("%s", BLD26_MSG);
  1112. X  else
  1113. X    /*
  1114. X    printf("Datei enthaelt %d Zeilen.", eof);
  1115. X    */
  1116. X    printf("%s %d %s", BLD27_MSG, eof, BLD28_MSG);
  1117. X  
  1118. X  /*
  1119. X  printf(" Befehlsuebersicht: \".?\"\n");
  1120. X  */
  1121. X  printf(" %s: \".?\"\n", BLD04_MSG);
  1122. X
  1123. X  if (eof < 1) eof = 0;
  1124. X  melted = 0;
  1125. X  max_line = eof;
  1126. X  eof++;
  1127. X
  1128. X  imode = 'A';
  1129. X
  1130. X  if (erfassen(eof, APPEND) < 1) {
  1131. X    /*
  1132. X    printf("\n\nLED: Probleme ...\n\n");
  1133. X    */
  1134. X    printf("\n\nLED: %s\n\n", BLD29_MSG);
  1135. X  }
  1136. X  bledmove(tmp1, THE_FILE);
  1137. X  unlink(tmp1);
  1138. X  unlink(tmp2);
  1139. X
  1140. X  /*
  1141. X  printf("\n\nUnd 'tschuess ...\n\n");
  1142. X  */
  1143. X  printf("\n\n%s\n\n", BLD30_MSG);
  1144. X}
  1145. END_OF_FILE
  1146.   if test 11315 -ne `wc -c <'src/bled.c'`; then
  1147.     echo shar: \"'src/bled.c'\" unpacked with wrong size!
  1148.   fi
  1149.   # end of 'src/bled.c'
  1150. fi
  1151. if test -f 'src/intro.c' -a "${1}" != "-c" ; then 
  1152.   echo shar: Will not clobber existing file \"'src/intro.c'\"
  1153. else
  1154.   echo shar: Extracting \"'src/intro.c'\" \(13861 characters\)
  1155.   sed "s/^X//" >'src/intro.c' <<'END_OF_FILE'
  1156. X/***************************************************************************/
  1157. X/*        PROGRAMM  ix/Mbox                           */
  1158. X/*             DATEI  intro.c                           */
  1159. X/*        FUNKTIONEN  intro(), init_user()                   */
  1160. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  1161. X/*  LETZTE AENDERUNG  11.07.1992                       */
  1162. X/***************************************************************************/
  1163. X
  1164. X#include <sys/types.h>
  1165. X#include <sys/stat.h>
  1166. X#include <unistd.h>
  1167. X#include <fcntl.h>
  1168. X#include <stdio.h>
  1169. X#include <time.h>
  1170. X
  1171. X#include "mbox.h"
  1172. X
  1173. Xtime_t time_start, time_now;
  1174. X
  1175. X
  1176. Xvoid init_user();
  1177. X
  1178. X/***************************************************************************/
  1179. X/*      FUNKTION  intro()                           */
  1180. X/*  BESCHREIBUNG  Teilnehmer melden sich an. Beim Aufruf von SHELL, wird   */
  1181. X/*          die Prozedur automagisch abgewickelt. Gaeste koennen     */
  1182. X/*          ausserdem in dieser Funktion ein Terminal auswaehlen.    */
  1183. X/*     PARAMETER  keine                                                    */
  1184. X/*     RUECKGABE  keine                                                       */
  1185. X/***************************************************************************/
  1186. X
  1187. Xvoid intro()
  1188. X{
  1189. X  FILE *fp;
  1190. X  FILE *ff;
  1191. X  int fd;
  1192. X  char s[LSTRING];
  1193. X  char t[STRING];
  1194. X  char f[STRING];
  1195. X  char tmp[STRING];
  1196. X  char crypt_pw[STRING];
  1197. X  char ex[255];
  1198. X  char tmpuser[STRING];
  1199. X  char moreLASTLOG[STRING];
  1200. X  int i, calls;
  1201. X  char c;
  1202. X  int ok;
  1203. X  int a, b;
  1204. X  long ll, lalo;
  1205. X  struct userdaten LOOSER;
  1206. X
  1207. X  struct tm *timeptr;
  1208. X  time_t timer;
  1209. X  struct stat fst;
  1210. X
  1211. X  umask(0007);
  1212. X
  1213. X  sprintf(TERMINAL, "ansi");
  1214. X  ansi("INIT");
  1215. X
  1216. X  time(&time_start);
  1217. X
  1218. X  fp = fopen( LOGO, "r" );
  1219. X  if(fp != NULL){
  1220. X    fclose(fp);
  1221. X    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
  1222. X    ansi("cl");
  1223. X    ansi("md");
  1224. X        show( LOGO, 24, 0 );
  1225. X    ansi("me");
  1226. X    c = getint();    
  1227. X  }
  1228. X
  1229. X  printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
  1230. X  ansi("cl");
  1231. X
  1232. X  ansi("md");
  1233. X  printf("\n%s ", INT01_MSG);
  1234. X  ansi("me");
  1235. X  printf("%s", ORGANIZATION);
  1236. X    
  1237. X  ansi("md");
  1238. X  printf("\n%s ", INT02_MSG);
  1239. X  ansi("me");
  1240. X  printf("%s %s %s", VERSION, PATCHLEVEL, AUTOR);
  1241. X
  1242. X  ansi("md");
  1243. X  printf("\n%s ", INT03_MSG);
  1244. X  ansi("me");
  1245. X  printf("%s", SYSTEM);
  1246. X
  1247. X  BAUDRATE = (int) 0;
  1248. X
  1249. X  if (OLDGID == GUEST_GID) {    /* GAESTE */
  1250. X
  1251. X        TRY_AGAIN:
  1252. X
  1253. X    printf("\n\n%s ", GBL04_MSG);
  1254. X    strcpy(LOOSER.name, (char *) getline(30, 11, '.', ""));
  1255. X    if (LOOSER.name[0] == '\0') goto TRY_AGAIN;
  1256. X
  1257. X    strcpy(s, (char *) upcased(LOOSER.name));
  1258. X
  1259. X    if (strcomp(GUEST, s) != 0) {
  1260. X
  1261. X        printf("\n%s ", GBL09_MSG);
  1262. X        strcpy(LOOSER.passwort, (char *) getline(10, 12, '.', ""));
  1263. X        strcpy(crypt_pw, (char *) crypted(LOOSER.passwort));
  1264. X
  1265. X        maybe_locked(UDBASE, "r"); mblock(UDBASE);
  1266. X        fd = open(UDBASE, O_RDONLY);
  1267. X        if (fd == -1) {
  1268. X            nerror("intro.c", 78, "intro", "Datei-Lesefehler", UDBASE);
  1269. X        }
  1270. X        ok = 0;
  1271. X        while ((ok == 0) && (read(fd, &USER, sizeof(USER)) == sizeof(USER))) {
  1272. X            if (((strcomp(LOOSER.name, USER.name) == 0) ||
  1273. X                   (strcomp(LOOSER.name, USER.nick) == 0)) &&
  1274. X                ((strcomp(USER.passwort, (char *) crypt_pw) == 0) ||
  1275. X                 (strcomp(USER.passwort, LOOSER.passwort) == 0)))
  1276. X                ok = 1;
  1277. X        }
  1278. X        close(fd);
  1279. X        mbunlock(UDBASE);
  1280. X
  1281. X        if (ok == 1) goto WELL_DONE;
  1282. X        goto TRY_AGAIN;
  1283. X    }
  1284. X    strcpy(LOOSER.name, (char *) upcased(s));
  1285. X
  1286. X    maybe_locked(UDBASE, "r"); mblock(UDBASE);
  1287. X    fd = open(UDBASE, O_RDONLY);
  1288. X    if (fd == -1) {
  1289. X        nerror("intro.c", 98, "intro", "Datei-Lesefehler", UDBASE);
  1290. X    }
  1291. X    ok = 0;
  1292. X    while ((ok == 0) && (read(fd, &USER, sizeof(USER)) == sizeof(USER))) {
  1293. X        if (strcomp(LOOSER.name, USER.name) == 0) ok = 1;
  1294. X    }
  1295. X    close(fd);
  1296. X    mbunlock(UDBASE);
  1297. X
  1298. X    ansi("md");
  1299. X    printf("\n\n%s\n\n", INT04_MSG);
  1300. X    ansi("me");
  1301. X    printf("%s\n", INT05_MSG);
  1302. X    ansi("md");
  1303. X    printf("\n%s > ", INT06_MSG);
  1304. X    ansi("me");
  1305. X
  1306. X    do {
  1307. X        c = getint();
  1308. X    } while ((c < '1') || (c > '4'));
  1309. X    printf("%c", c);
  1310. X    USER.terminal = c - 48;
  1311. X
  1312. X    strcpy(USER.name, (char *) GUEST);
  1313. X    sprintf(USER.passwort, "%s", "*****");
  1314. X
  1315. X    USER.level       =  0;
  1316. X    USER.prompt        =  2;
  1317. X    USER.bell          =  0;
  1318. X    USER.intro         =  1;
  1319. X    USER.more          =  3;
  1320. X    USER.editor        =  1;
  1321. X    USER.lastmode      =  2;
  1322. X    USER.leserichtung  =  2;
  1323. X    USER.tlines        = 23;
  1324. X    USER.schluessel[0] =  1;
  1325. X    USER.schluessel[1] =  3;
  1326. X
  1327. X    sprintf(USER.newsgrps, "%s", NEWS_MINIMUM);
  1328. X
  1329. X    LASTLOG = (long) 19700101;
  1330. X    LASTTIME = 0;
  1331. X    sprintf(moreLASTLOG, "%s", "01.01.1970");
  1332. X  }
  1333. X  else {            /* USER */
  1334. X
  1335. X    printf("\n\n%s ....................", GBL04_MSG);
  1336. X    for (i = 0; i < 20; i++) printf("%c", BS);
  1337. X
  1338. X    strcpy(tmpuser, (char *) whoami());
  1339. X    printf("%s", tmpuser);
  1340. X
  1341. X    printf("\n%s ..........", GBL09_MSG);
  1342. X
  1343. X    for (i = 0; i < 10; i++) printf("%c", BS);
  1344. X    for (i = 0; i < 10; i++) printf("*");
  1345. X
  1346. X    if (strcomp(tmpuser, "root") == 0) {
  1347. X        strcpy(tmpuser, (char *) POSTMASTER);
  1348. X
  1349. X        strcpy(s, (char *) ttyname(0));
  1350. X        if(strcomp(PMS_TTY, s) != 0){
  1351. X            printf("\n\n");
  1352. X            ansi("mr");
  1353. X            printf("%s", INT07_MSG);
  1354. X            ansi("me");
  1355. X            printf("\n\n");
  1356. X            exit(-1);
  1357. X        }
  1358. X        else {
  1359. X            USER.level = 10;
  1360. X        }
  1361. X    }
  1362. X    maybe_locked(UDBASE, "r"); mblock(UDBASE);
  1363. X    fd = open(UDBASE, O_RDONLY);
  1364. X    if (fd == -1) {
  1365. X        nerror("intro.c", 156, "intro", "Datei-Lesefehler", UDBASE);
  1366. X    }
  1367. X    ok = 0;
  1368. X    while ((ok == 0) && (read(fd, &USER, sizeof(USER)) == sizeof(USER))) {
  1369. X        if ((strcomp(tmpuser, USER.sh_name) == 0)) ok = 1;
  1370. X    }
  1371. X    close(fd);
  1372. X    mbunlock(UDBASE);
  1373. X
  1374. X    if (ok == 0) postfach(tmpuser);
  1375. X
  1376. X  }
  1377. X
  1378. X  WELL_DONE:
  1379. X
  1380. X  setuid( ROOT_UID );
  1381. X  setgid( ROOT_GID ); 
  1382. X
  1383. X  if (strcomp(GUEST, USER.name) != 0) {
  1384. X    LASTLOG = (long) dateconv(USER.lastlog);
  1385. X    LASTTIME = USER.lasttime;
  1386. X    sprintf(moreLASTLOG, "%s", USER.lastlog);
  1387. X  }
  1388. X  if (USER.lastmode == 2) LASTTIME = 0;
  1389. X
  1390. X  sprintf(UGROUPS, "%s/usr/%d/.active", HOME, USER.id);
  1391. X
  1392. X  maybe_locked( AGROUPS, "r" );
  1393. X  fp = fopen(AGROUPS, "r");
  1394. X  if (fp == NULL) {
  1395. X    nerror("intro.c", 182, "intro", "Datei-Lesefehler", AGROUPS);
  1396. X  }
  1397. X  ff = fopen(UGROUPS, "w");
  1398. X  if (ff == NULL) {
  1399. X    nerror("intro.c", 195, "intro", "Datei-Schreibfehler", UGROUPS);
  1400. X  }
  1401. X  while (fscanf(fp, "%s %ld", s, &lalo) > 0) {
  1402. X    if (LASTLOG < lalo) {
  1403. X        sprintf(t, "%s 00000 00000 y\n", s);
  1404. X        fputs(t, ff);
  1405. X    }
  1406. X    if (LASTLOG == lalo) {
  1407. X    }
  1408. X  }
  1409. X  fclose(ff);
  1410. X  fclose(fp);
  1411. X
  1412. X  sprintf(s, "%s \"%s\" (%d) %s", INT08_MSG, USER.name, USER.id, INT09_MSG);
  1413. X  control(s, 3);
  1414. X  whodo( INT10_MSG );
  1415. X
  1416. X  printf("\n\n");
  1417. X
  1418. X  if ((USER.level < 10) && (strcomp(MYNAME, USER.name) != 0)) {
  1419. X
  1420. X    maybe_locked(SEQ, "r"); mblock(SEQ);
  1421. X    fp = fopen(SEQ, "r");
  1422. X    if (fp == NULL) {
  1423. X        nerror("intro.c", 223, "intro", "Datei-Lesefehler", SEQ);
  1424. X    }
  1425. X    fscanf(fp, "%d", &calls);
  1426. X    fclose(fp);
  1427. X    calls++;
  1428. X
  1429. X    fp = fopen(SEQ, "w");
  1430. X    if (fp == NULL) {
  1431. X        nerror("intro.c", 227, "intro", "Datei-Schreibfehler", SEQ);
  1432. X    }
  1433. X    fprintf(fp, "%d\n", calls);
  1434. X    fclose(fp);
  1435. X    mbunlock(SEQ);
  1436. X
  1437. X    sprintf(tmp, "%s/%dT", TMP, getpid());
  1438. X
  1439. X    fp = fopen(tmp, "w");
  1440. X    if (fp == NULL) {
  1441. X        nerror("intro.c", 236, "intro", "Datei-Schreibfehler", tmp);
  1442. X    }
  1443. X    maybe_locked(CALLS, "r"); mblock(CALLS);
  1444. X    ff = fopen(CALLS, "r");
  1445. X    if (ff == NULL) {
  1446. X        nerror("intro.c", 239, "intro", "Datei-Lesefehler", CALLS);
  1447. X    }
  1448. X    sprintf(s, "%s (%s)", USER.name, USER.nick);
  1449. X    sprintf(t, "%s", numstripped(USER.wohnort));
  1450. X    if (t[0] == '\0') sprintf(t, "%s", "   ");
  1451. X
  1452. X    sprintf(f, "%s", (char *) ttyna());
  1453. X
  1454. X    fprintf(fp, "%5.d  %-28.28s  %-17.17s%8.8s  %s  %s\n",
  1455. X        calls, s, stripped(t), f, (char *) mydate(1), (char *) mytime(1));
  1456. X
  1457. X    if(PRO_ENTRIES < 10){
  1458. X        nerror("intro.c", 291, "intro", "PRO_ENTRIES zu klein dimensioniert", "mbox.h");            
  1459. X    }
  1460. X
  1461. X    i = 1;
  1462. X    while ((fgets(s, 84, ff) != NULL) && (i <= PRO_ENTRIES)) {
  1463. X        fputs(s, fp);
  1464. X        i++;
  1465. X    }
  1466. X
  1467. X    fclose(ff);
  1468. X    fclose(fp);
  1469. X
  1470. X    sprintf(s, "cp %s %s > /dev/null", tmp, CALLS);
  1471. X    system(s);
  1472. X
  1473. X    unlink(tmp);
  1474. X    mbunlock(CALLS);
  1475. X  }
  1476. X
  1477. X  sprintf(s, "%s/usr/%d/INDEX", HOME, USER.id);  
  1478. X  if(atol(USER.abused) == 0L){
  1479. X      stat(s, &fst);
  1480. X      IDX_SIZE = (long) fst.st_size;
  1481. X  }
  1482. X  else IDX_SIZE = atol(USER.abused);
  1483. X
  1484. X  init_user( INT11_MSG );
  1485. X
  1486. X  if (USER.intro < 3) {
  1487. X
  1488. X    a = 0;
  1489. X    fp = fopen(UGROUPS, "r");
  1490. X    if (fp == NULL) {
  1491. X        nerror("intro.c", 283, "intro", "Datei-Lesefehler", AGROUPS);
  1492. X    }
  1493. X    while (fgets(ex, 200, fp) != NULL) a++;
  1494. X    fclose(fp);
  1495. X
  1496. X    b = 0;
  1497. X    sprintf(s, "%s/usr/%d/INDEX", HOME, USER.id);  
  1498. X    
  1499. X    fp = fopen(s, "r");
  1500. X    if (fp == NULL) {
  1501. X        nerror("intro.c", 291, "intro", "Datei-Lesefehler", s);
  1502. X    }
  1503. X    while (fgets(ex, 200, fp) != NULL){
  1504. X        if(ex[0] < 65) b++;
  1505. X    }
  1506. X    fclose(fp);
  1507. X    b -= 1;
  1508. X
  1509. X    ansi("md");
  1510. X    printf("%s %d. %s %s %s.\n", 
  1511. X        INT12_MSG, USER.seq, INT13_MSG, moreLASTLOG, INT14_MSG);
  1512. X    printf("%s %d %s %d %s.\n", 
  1513. X        INT15_MSG, a, INT16_MSG, b, INT17_MSG);
  1514. X    ansi("me");
  1515. X    printf("\n");
  1516. X  }
  1517. X  if ((USER.intro != 2) && (USER.intro != 4)) show(INTRO, 9999, 1);
  1518. X
  1519. X
  1520. X
  1521. X  
  1522. X  fp = fopen(WHO, "a");
  1523. X  if (fp == NULL) {
  1524. X    nerror("intro.c", 309, "intro", "Datei-Lesefehler", WHO);
  1525. X  }
  1526. X  strcpy(s, (char *) USER.sh_name);
  1527. X  if (s[0] == '\0') strcpy(s, (char *) USER.nick);
  1528. X  if (s[0] == '\0') strcpy(s, (char *) GBL10_MSG);
  1529. X  sprintf(ex, "%-8.8s %s (%s)                                               ",
  1530. X    (char *) ttyna(), USER.name, s);
  1531. X
  1532. X  ex[39] = '\0';
  1533. X  fputs(ex, fp);
  1534. X
  1535. X  sprintf(ex, "%8.8s", (char *) ttyna());
  1536. X  fputs(ex, fp);
  1537. X
  1538. X  strcpy(s, (char *) mytime(1));
  1539. X  if (USER.level < 10)
  1540. X    sprintf(ex, "   %s   [%d] MBox: %s\n", s, USER.level, INT10_MSG);
  1541. X  else
  1542. X    sprintf(ex, "   %s   [%d] MBox: %s\n", s, ADMIN_LEV, INT10_MSG);
  1543. X
  1544. X  fputs(ex, fp);
  1545. X  fclose(fp);
  1546. X  
  1547. X
  1548. X
  1549. X  sprintf(MYNAME, "%s", USER.name);
  1550. X
  1551. X  sprintf(s, "%s", (char *) mydate(0));
  1552. X  s[5] = '\0';
  1553. X  if (strcomp(s, USER.geburtsdatum) == 0) {
  1554. X    ansi("md");
  1555. X    printf("\n\n%s\n", INT18_MSG);
  1556. X    printf("%s\n\n", INT19_MSG);
  1557. X    ansi("me");
  1558. X  }
  1559. X  if (strcomp("24.12.", s) == 0) {
  1560. X    ansi("md");
  1561. X    printf("\n\n%s\n", INT20_MSG);
  1562. X    printf("%s\n\n", INT21_MSG);
  1563. X    ansi("me");
  1564. X  }
  1565. X  if (strcomp("06.12.", s) == 0) {
  1566. X    ansi("md");
  1567. X    printf("\n\n%s\n", INT22_MSG);
  1568. X    printf("\n%s\n\n", INT23_MSG);
  1569. X    ansi("me");
  1570. X  }
  1571. X  if (strcomp("01.01.", s) == 0) {
  1572. X    ansi("md");
  1573. X    printf("\n\n%s\n", INT24_MSG);
  1574. X    printf("%s\n\n", INT25_MSG);
  1575. X    ansi("me");
  1576. X  }
  1577. X  if ((calls == 1000) || (calls == 10000) || (calls == 100000)) {
  1578. X    ansi("md");
  1579. X    printf("\n\n%s %d%s\n\n", INT26_MSG, calls, INT27_MSG);
  1580. X    ansi("me");
  1581. X  }
  1582. X
  1583. X
  1584. X  /* Strict Accounting ... decrease Level if User doesn't pay */
  1585. X
  1586. X  strcpy(s, (char *) mydate( 0 ));
  1587. X  lalo = dateconv(s);  
  1588. X  
  1589. X  strcpy(s, (char *) USER.account);
  1590. X  s[10] = '\0';
  1591. X  ll = dateconv(s);
  1592. X
  1593. X  if((ll <= lalo) && (ll > 19000000L)){
  1594. X    ansi( "md" );
  1595. X    printf("\n%s %s %s\n", INT28_MSG, s, INT29_MSG);
  1596. X    ansi( "me" );
  1597. X    printf("%s\n", INT30_MSG);
  1598. X
  1599. X    if(lalo > (ll + 21)){
  1600. X        USER.level = WRITE_INTERNAT - 1;
  1601. X    }
  1602. X  }
  1603. X}
  1604. X
  1605. X
  1606. X
  1607. X/***************************************************************************/
  1608. X/*      FUNKTION  init_user()                           */
  1609. X/*  BESCHREIBUNG  Teilnehmer-Parameter werden zugewiesen, Rechte verteilt  */
  1610. X/*          und die Daten aktualisiert.                              */
  1611. X/*     PARAMETER  info  =  Ansage-Text                                     */
  1612. X/*     RUECKGABE  keine                                                       */
  1613. X/***************************************************************************/
  1614. X
  1615. Xvoid init_user(info)
  1616. Xchar info[];
  1617. X{
  1618. X  FILE *fp;
  1619. X  FILE *ff;
  1620. X  int fd;
  1621. X  char s[STRING];
  1622. X  char t[STRING];
  1623. X  int i;
  1624. X  struct userdaten DUMMY;
  1625. X  int dummy = sizeof(DUMMY);
  1626. X  long ll, lalo;
  1627. X  int lati;
  1628. X  int ok;
  1629. X
  1630. X  printf("%s ..", info);
  1631. X
  1632. X  switch (USER.terminal) {
  1633. X      case 1:
  1634. X        sprintf(s, "eval '%s ansi' ", TSET);
  1635. X        sprintf(TERMINAL, "ansi");
  1636. X        break;
  1637. X      case 2:
  1638. X        sprintf(s, "eval '%s vt100' ", TSET);
  1639. X        sprintf(TERMINAL, "vt100");
  1640. X        break;
  1641. X      case 3:
  1642. X        sprintf(s, "eval '%s vt52' ", TSET);
  1643. X        sprintf(TERMINAL, "vt52");
  1644. X        break;
  1645. X      case 4:
  1646. X        sprintf(s, "eval '%s vt52' ", TSET);
  1647. X        sprintf(TERMINAL, "vt52");
  1648. X        break;
  1649. X  }
  1650. X  printf(".");
  1651. X
  1652. X  ansi("INIT");
  1653. X
  1654. X  fp = fopen(EDITORS, "r");
  1655. X  if (fp == NULL) {
  1656. X    nerror("intro.c", 487, "intro", "Datei-Lesefehler", EDITORS);
  1657. X  }
  1658. X  i = 0;
  1659. X  while((fgets(s, 80, fp) != NULL) && (s[0] == '/'));
  1660. X  while ((i != USER.editor) && (fscanf(fp, "%s %s", s, EDDY) > 0)) i++;
  1661. X  fclose(fp);
  1662. X
  1663. X  printf(".");
  1664. X
  1665. X  if (USER.leserichtung == 0) USER.leserichtung = 2;
  1666. X
  1667. X  USER.seq++;
  1668. X
  1669. X  maybe_locked(UDBASE, "r"); mblock(UDBASE);
  1670. X  fd = open(UDBASE, O_RDWR);
  1671. X  if (fd == -1) {
  1672. X    nerror("intro.c", 395, "init_user", "Datei-Schreib/-Lesefehler", UDBASE);
  1673. X  }
  1674. X  while (read(fd, &DUMMY, dummy) == dummy) {
  1675. X    if (USER.id == DUMMY.id) {
  1676. X        ll = lseek(fd, 0L, SEEK_CUR) - dummy;
  1677. X    }
  1678. X  }
  1679. X  lseek(fd, ll, SEEK_SET);
  1680. X  write(fd, &USER, sizeof(USER));
  1681. X  close(fd);
  1682. X  mbunlock(UDBASE);
  1683. X
  1684. X  printf(".");
  1685. X
  1686. X  sprintf(UGROUPS, "%s/usr/%d/.active", HOME, USER.id);
  1687. X  sprintf(MAKRO, "%s/usr/%d/.makro", HOME, USER.id);
  1688. X
  1689. X  maybe_locked( AGROUPS, "r" );
  1690. X  fp = fopen(AGROUPS, "r");
  1691. X  if (fp == NULL) {
  1692. X    nerror("intro.c", 412, "intro", "Datei-Lesefehler", AGROUPS);
  1693. X  }
  1694. X  ff = fopen(UGROUPS, "w");
  1695. X  if (ff == NULL) {
  1696. X    nerror("intro.c", 442, "intro", "Datei-Schreibfehler", UGROUPS);
  1697. X  }
  1698. X  while (fscanf(fp, "%s %ld %d", s, &lalo, &lati) > 0) {
  1699. X    if (LASTLOG < lalo) {
  1700. X        sprintf(t, "%s 00000 00000 y\n", s);
  1701. X        fputs(t, ff);
  1702. X    }
  1703. X    if (LASTLOG == lalo) {
  1704. X        if (LASTTIME <= lati) {
  1705. X            sprintf(t, "%s 00000 00000 y\n", s);
  1706. X            fputs(t, ff);
  1707. X        }
  1708. X    }
  1709. X  }
  1710. X  fclose(ff);
  1711. X  fclose(fp);
  1712. X
  1713. X  printf(".");
  1714. X
  1715. X  strcpy(BRETT, "PM");
  1716. X  sprintf(NG, "%s.PM", USER.name);
  1717. X  sprintf(INHALT, "%s/usr/%d/INDEX", HOME, USER.id);
  1718. X
  1719. X  printf(".");
  1720. X
  1721. X  if (USER.newsgrps[0] == '\0') sprintf(USER.newsgrps, "%s", NEWS_MINIMUM);
  1722. X
  1723. X  sscanf(USER.newsgrps, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s",
  1724. X    newsgrp[1], newsgrp[2], newsgrp[3], newsgrp[4], newsgrp[5],
  1725. X    newsgrp[6], newsgrp[7], newsgrp[8], newsgrp[9], newsgrp[10],
  1726. X    newsgrp[11], newsgrp[12], newsgrp[13], newsgrp[14], newsgrp[15]);
  1727. X
  1728. X  if((USER.tlines < 22) || (USER.tlines > 23)){
  1729. X    MAX_SCR_LINES = DEF_MAX_SCR_LINES;
  1730. X    USER.tlines = DEF_MAX_SCR_LINES;
  1731. X  }
  1732. X  else 
  1733. X    MAX_SCR_LINES = USER.tlines;
  1734. X
  1735. X
  1736. X  if(USER.schluessel[0] == 32)
  1737. X    SHORT_HEADER = 1;
  1738. X  else
  1739. X    SHORT_HEADER = 0;
  1740. X
  1741. X  if(USER.schluessel[1] == 0)
  1742. X    USER.schluessel[1] = 4;
  1743. X
  1744. X  if(USER.level >= WRITE_INTERNAT){
  1745. X    strcpy(UUCPID, UUCPID2);
  1746. X  }
  1747. X  else{
  1748. X    strcpy(UUCPID, UUCPID1);
  1749. X  }
  1750. X
  1751. X  if(USER.account[0] == '\0') strcpy(USER.account, "00.00.0000 000.00");
  1752. X  
  1753. X  printf("%c", CR);
  1754. X}
  1755. END_OF_FILE
  1756.   if test 13861 -ne `wc -c <'src/intro.c'`; then
  1757.     echo shar: \"'src/intro.c'\" unpacked with wrong size!
  1758.   fi
  1759.   # end of 'src/intro.c'
  1760. fi
  1761. if test -f 'src/main.c' -a "${1}" != "-c" ; then 
  1762.   echo shar: Will not clobber existing file \"'src/main.c'\"
  1763. else
  1764.   echo shar: Extracting \"'src/main.c'\" \(7037 characters\)
  1765.   sed "s/^X//" >'src/main.c' <<'END_OF_FILE'
  1766. X/***************************************************************************/
  1767. X/*        PROGRAMM  ix/Mbox                           */
  1768. X/*             DATEI  main.c                           */
  1769. X/*        FUNKTIONEN  logout(), init(), fixoutput(), main()           */
  1770. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  1771. X/*  LETZTE AENDERUNG  13.06.1992                       */
  1772. X/***************************************************************************/
  1773. X   
  1774. X#include <sys/types.h>
  1775. X#include <unistd.h>
  1776. X#include <stdio.h>
  1777. X#include <time.h>
  1778. X#include <fcntl.h>
  1779. X
  1780. X#include "mbox.h"
  1781. X
  1782. Xextern time_t time_start, time_now;
  1783. X
  1784. X
  1785. X
  1786. X/***************************************************************************/
  1787. X/*      FUNKTION  logout()                           */
  1788. X/*  BESCHREIBUNG  Entfernt den User aus "WHO" und reorganisiert seine      */
  1789. X/*          Teilnehmerdaten.                                         */
  1790. X/*     PARAMETER  keine                                                       */
  1791. X/*     RUECKGABE  keine                               */
  1792. X/***************************************************************************/
  1793. X
  1794. Xvoid logout()
  1795. X{
  1796. X  FILE *fp;
  1797. X  FILE *ff;
  1798. X  char s[STRING];
  1799. X  char t[STRING];
  1800. X  char u[STRING];
  1801. X  char f[STRING];
  1802. X  long ll;
  1803. X  int a, b;
  1804. X  int fd;
  1805. X  struct tm *timeptr;
  1806. X  struct userdaten DUMMY;
  1807. X  int dummy = sizeof(DUMMY);
  1808. X
  1809. X  printf("\n");
  1810. X
  1811. X
  1812. X  time(&time_now);
  1813. X  USER.elapsed += (long) (time_now - time_start);
  1814. X
  1815. X  sprintf(f, "%s/who%d", TMP, getpid());
  1816. X  maybe_locked(WHO, "r"); mblock(WHO);
  1817. X  fp = fopen(WHO, "r");
  1818. X  if (fp == NULL) {
  1819. X    nerror("main.c", 34, "logout", "Datei-Lesefehler", WHO);
  1820. X  }
  1821. X  strcpy(t, (char *) ttyna()); t[9] = '\0';
  1822. X
  1823. X  ff = fopen(f, "w");
  1824. X  if (ff == NULL) {
  1825. X    nerror("main.c", 38, "logout", "Datei-Schreibfehler", f);
  1826. X  }
  1827. X  while (fgets(s, 80, fp) != NULL) {
  1828. X    if(strcomp(t, s) != 0) fputs(s, ff);
  1829. X  }
  1830. X  fclose(ff);
  1831. X  fclose(fp);
  1832. X  sprintf(s, "cp %s %s", f, WHO);
  1833. X  system(s);
  1834. X  unlink(f);
  1835. X  mbunlock(WHO);
  1836. X
  1837. X  strcpy(s, HOME); strcat(s, "/etc/");
  1838. X  strcat(s, (char *) ttyna()); strcat(s, ".");
  1839. X  unlink( s );
  1840. X
  1841. X  sprintf(USER.abused, "%ld", IDX_SIZE);
  1842. X
  1843. X  USER.seq--;        
  1844. X  printf("\n");
  1845. X  init_user( MAI01_MSG );
  1846. X
  1847. X#ifdef _NOINDEX
  1848. X  sprintf(s, "%s/inhalt.%d", TMP, getpid());
  1849. X  unlink(s);
  1850. X#endif
  1851. X
  1852. X  control(MAI02_MSG, 3);
  1853. X}
  1854. X
  1855. X
  1856. X
  1857. X/***************************************************************************/
  1858. X/*      FUNKTION  init()                           */
  1859. X/*  BESCHREIBUNG  Liest die Befehle aus "BEFEHLE", fuellt die Befehl-      */
  1860. X/*          Stuktur und verteilt die Level-Vorgaben.                 */
  1861. X/*     PARAMETER  keine                                                       */
  1862. X/*     RUECKGABE  keine                               */
  1863. X/***************************************************************************/
  1864. X
  1865. Xvoid init()
  1866. X{
  1867. X  FILE *fp;
  1868. X  FILE *ff;
  1869. X  char s[STRING];
  1870. X  char t[STRING];
  1871. X  char udcc[STRING];
  1872. X  int udcl;
  1873. X  char udcp[STRING];
  1874. X  int b = 0;
  1875. X  int ok = 0;
  1876. X
  1877. X  ff = fopen(UDCS, "r");
  1878. X  if (ff == NULL) {
  1879. X    nerror("main.c", 115, "init", "Datei-Lesefehler", "./etc/mbox.udc");
  1880. X    exit(0);
  1881. X  }  
  1882. X  while((fgets(s, 80, ff) != NULL) && (s[0] == '/'));
  1883. X  if(fgets(s, 80, ff) != NULL) ok = 1;
  1884. X  sscanf(s, "%s %d %s %s", udcc, &udcl, udcp, t);
  1885. X  if(udcc[0] > 96) udcc[0] -= 32;
  1886. X  strcat(udcp, " "); strcat(udcp, t);
  1887. X
  1888. X  fp = fopen(BEFEHLE, "r");
  1889. X  if (fp == NULL) {
  1890. X    nerror("main.c", 68, "init", "Datei-Lesefehler", BEFEHLE);
  1891. X  }
  1892. X  while((fgets(s, 80, fp) != NULL) && (s[0] == '/'));
  1893. X  
  1894. X  fgets(s, 80, fp); /* 3 Zeilen nach dem Kommentar (exakt 3 Zeilen !!!) */
  1895. X  fgets(s, 80, fp);
  1896. X
  1897. X  while (fscanf(fp, "%d %d %d %d %s", &BEF[b].id, &BEF[b].in, &BEF[b].ex, &BEF[b].prototyp, BEF[b].befehl) > 0) {
  1898. X
  1899. X    if (BEF[b].id == 160) MAILOUT_LEV = BEF[b].ex;
  1900. X    if (BEF[b].id == 125) ADMIN_LEV = BEF[b].ex;
  1901. X    if (BEF[b].id == 230) WRITE_EX_LEV = BEF[b].ex;
  1902. X    if (BEF[b].id == 230) WRITE_IN_LEV = BEF[b].in;
  1903. X    if (BEF[b].id == 998) WRITE_INTERNAT = BEF[b].in;
  1904. X    if (BEF[b].id == 195) PD_D_LEV = BEF[b].in;
  1905. X    if (BEF[b].id == 195) PD_U_LEV = BEF[b].ex;
  1906. X    if (BEF[b].id == 240) EXE_LEV = BEF[b].ex;
  1907. X    if (BEF[b].id == 320) GUEST_LEV = BEF[b].in;
  1908. X    if (BEF[b].id == 130) BB1 = b;
  1909. X    if (BEF[b].id == 150) BB2 = b;
  1910. X    if (BEF[b].id == 160) BB3 = b;
  1911. X    if (BEF[b].id == 170) BB4 = b;
  1912. X    if (BEF[b].id == 210) BB5 = b;
  1913. X    if (BEF[b].id == 180) BB6 = b;
  1914. X    if (BEF[b].id == 190) BB7 = b;
  1915. X    if (BEF[b].id == 200) BB8 = b;
  1916. X    if (BEF[b].id == 270) BB9 = b;
  1917. X
  1918. X    if((ok == 1) && (BEF[b].prototyp == 1) && (udcc[0] < BEF[b].befehl[0])){
  1919. X        BEF[(b+1)].id = BEF[b].id;
  1920. X        BEF[(b+1)].in = BEF[b].in;
  1921. X        BEF[(b+1)].ex = BEF[b].ex;
  1922. X        BEF[(b+1)].prototyp = BEF[b].prototyp;
  1923. X        strcpy(BEF[(b+1)].befehl, (char *) BEF[b].befehl);
  1924. X        BEF[b].id = 1000;
  1925. X        BEF[b].in = udcl;
  1926. X        BEF[b].ex = udcl;
  1927. X        BEF[b].prototyp = 1;
  1928. X        strcpy(BEF[b].befehl, (char *) udcc);
  1929. X        strcpy(BEF[b].pfad, (char *) udcp);
  1930. X        b++;
  1931. X        if(fgets(s, 80, ff) == NULL) ok = 0;
  1932. X        sscanf(s, "%s %d %s %s", udcc, &udcl, udcp, t);
  1933. X        if(udcc[0] > 96) udcc[0] -= 32;
  1934. X        strcat(udcp, " "); strcat(udcp, t);
  1935. X    }
  1936. X
  1937. X    b++;
  1938. X    if (b >= MAX_BEF) {
  1939. X        nerror("main.c", 85, "init", "MAX_BEF ueberschritten !!", "???");
  1940. X    }
  1941. X  }
  1942. X  BEF[b].id = -1;
  1943. X
  1944. X  fclose(fp);
  1945. X  fclose(ff);
  1946. X}
  1947. X
  1948. X
  1949. X
  1950. X/***************************************************************************/
  1951. X/*      FUNKTION  fixoutput()                           */
  1952. X/*  BESCHREIBUNG  Legt fest an welches Geraet, oder in welche Datei, die   */
  1953. X/*          Logbuch-Eintraege geschickt werden.               */
  1954. X/*     PARAMETER  keine                                                       */
  1955. X/*     RUECKGABE  keine                               */
  1956. X/***************************************************************************/
  1957. X
  1958. Xvoid fixoutput()
  1959. X{
  1960. X  char s[STRING];
  1961. X
  1962. X  FILE *fp;
  1963. X
  1964. X  strcpy(s, CONSOLE); CONSOLE_REDIRECT[0] = '\0';
  1965. X
  1966. X  if(strcomp("REDIRECT", CONSOLE) == 0){
  1967. X    fp = fopen( CDIRECTFL, "r" );
  1968. X    if(fp != NULL){
  1969. X        fgets(s, STRING, fp);
  1970. X        fclose(fp);
  1971. X        
  1972. X    }
  1973. X   }
  1974. X   strcat(CONSOLE_REDIRECT, (char *) stripped(s));
  1975. X}
  1976. X
  1977. X
  1978. X
  1979. X
  1980. X/***************************************************************************/
  1981. X/*      FUNKTION  main()                           */
  1982. X/*  BESCHREIBUNG  Hauptfunktion. Rettet UID/GID, initialisiert, startet    */
  1983. X/*          die MBox-Funktionen und terminiert.                      */
  1984. X/*     PARAMETER  keine                                                       */
  1985. X/*     RUECKGABE  "Exit-Status"                           */
  1986. X/***************************************************************************/
  1987. X
  1988. Xint main(argc, argv)
  1989. Xint argc;
  1990. Xchar *argv[];
  1991. X{
  1992. X  FILE *fp;
  1993. X  int i;
  1994. X
  1995. X#if defined(_ESTDIO) || !defined(_SYS7)
  1996. X  setbuf(stdout, NULL);
  1997. X#endif
  1998. X
  1999. X
  2000. X  chdir(HOME);
  2001. X
  2002. X  OLDUID = getuid();
  2003. X  OLDGID = getgid();
  2004. X
  2005. X  sprintf(MYNAME, "%s", "J. Random Looser");
  2006. X
  2007. X  fp = fopen( UDBASE, "r" );
  2008. X  if(fp == NULL){
  2009. X    strcpy(TERMINAL, "ansi");
  2010. X    ansi("INIT");
  2011. X
  2012. X    headline( MAI03_MSG );
  2013. X    ansi("md");
  2014. X    printf("\n%s", MAI04_MSG);
  2015. X    printf("\n%s", MAI05_MSG);
  2016. X    printf("\n%s", MAI06_MSG);
  2017. X    printf("\n");
  2018. X    printf("\n%s", MAI07_MSG);
  2019. X    printf("\n%s", MAI08_MSG);
  2020. X    printf("\n%s\n\n", MAI09_MSG);
  2021. X    ansi("me");
  2022. X
  2023. X    postfach( "#1" );
  2024. X    postfach( "#2" );
  2025. X
  2026. X    ansi("md");
  2027. X    printf("\n%s\n\n", MAI10_MSG);
  2028. X    ansi("me");
  2029. X    return 0;
  2030. X  }
  2031. X  fclose(fp);
  2032. X
  2033. X  fixoutput();
  2034. X  init();  
  2035. X  intro();
  2036. X  get_makros();
  2037. X  ctrlx();
  2038. X
  2039. X  loop();
  2040. X
  2041. X  logout();
  2042. X  noctrlx();
  2043. X  ansi("md");
  2044. X  printf("\n\n%s\n\n", MAI11_MSG);
  2045. X  ansi("me");
  2046. X
  2047. X  return 0;
  2048. X}
  2049. END_OF_FILE
  2050.   if test 7037 -ne `wc -c <'src/main.c'`; then
  2051.     echo shar: \"'src/main.c'\" unpacked with wrong size!
  2052.   fi
  2053.   # end of 'src/main.c'
  2054. fi
  2055. if test -f 'src/mbox.h' -a "${1}" != "-c" ; then 
  2056.   echo shar: Will not clobber existing file \"'src/mbox.h'\"
  2057. else
  2058.   echo shar: Extracting \"'src/mbox.h'\" \(13062 characters\)
  2059.   sed "s/^X//" >'src/mbox.h' <<'END_OF_FILE'
  2060. X/***************************************************************************/
  2061. X/*        PROGRAMM  ix/MBox                           */
  2062. X/*             DATEI  mbox.h                           */
  2063. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  2064. X/*  LETZTE AENDERUNG  10.05.1992                       */
  2065. X/***************************************************************************/
  2066. X#include "mbox.msg"
  2067. X#include "defs.h"
  2068. X#include "patchlevel.h"
  2069. X
  2070. X
  2071. X/***************************************************************************/
  2072. X/* >ORGANIZATION  -  frei waehlbar (moeglichst identisch mit dem ent-      */
  2073. X/*             sprechenden Eintrag fuer NEWS)               */
  2074. X/* >SYSTEM        -  frei waehlbar (Name der Mailbox)                  */
  2075. X/***************************************************************************/
  2076. X
  2077. X#define ORGANIZATION     "THE UNDERGROUND NETWORK"
  2078. X#define SYSTEM           "The Time Traveling Agency"  
  2079. X
  2080. X
  2081. X
  2082. X/***************************************************************************/
  2083. X/*  VERSION       -  wird vom Autor (und nur vom dem) geandert           */
  2084. X/*                   Co-Autoren, Portierer etc. koennen sich gefaelligst   */
  2085. X/*             ihren eigenen Eintrag basteln.                   */
  2086. X/*  AUTOR         -  das bin ich - Hallo auch !                   */
  2087. X/***************************************************************************/
  2088. X
  2089. X#define VERSION             "ix/MBox 1.6"
  2090. X#define AUTOR            "by <volkers@unnet.w.open.DE>"
  2091. X
  2092. X
  2093. X
  2094. X
  2095. X/***************************************************************************/
  2096. X/* >UUCPSITE       - Systemname innerhalb der UUCP-Netze           */
  2097. X/* >UUCPID2        - Adresse (Domain-) im Internet               */
  2098. X/* >UUCPID1        - Adresse (Domain-) im lokalen UUCP-Netz            */
  2099. X/* >UUCPBANG       - Adresse als BANG-Pfad                   */
  2100. X/*  UUCPCOSTS      - Gebuehrenaufstellung                   */
  2101. X/* >SMARTHOST       -                                */
  2102. X/***************************************************************************/
  2103. X
  2104. X#define UUCPSITE         "unnet"
  2105. X#define UUCPID2          "unnet.w.open.DE"        
  2106. X#define UUCPID1             "unnet.ruhr.SUB.ORG"
  2107. X#define UUCPBANG         "~!unido!horga!xenox!unnet!"
  2108. X#define UUCPCOSTS        "/usr/spool/uucp/.costs"
  2109. X#define SMARTHOST    "xenox"
  2110. X
  2111. X
  2112. X
  2113. X/***************************************************************************/
  2114. X/*  X_MAIL_DEMON    - Name des X-Mail-Daemons (HAENDE WEG !!!)            */
  2115. X/***************************************************************************/
  2116. X
  2117. X#define X_MAIL_DEMON     "X-Mail-Daemon"
  2118. X
  2119. X
  2120. X
  2121. X
  2122. X/***************************************************************************/
  2123. X/*  LIB             - Pfad zum MBox-Directory LIB               */
  2124. X/*  TMP              - Directory fuer temporaere Dateien           */
  2125. X/* >NEWS         - Pfad zum SPOOL-Directory fuer NEWS           */
  2126. X/*  NEWSGROUPS       - Pfad zur Datei mit den Erlaeuterungen der Gruppen   */
  2127. X/*  ERRMBOX          - Mailbox des Error-Users (POSTMASTER)           */
  2128. X/*  MAILDROP         - Pfad zu den Maildrops der SH-User           */
  2129. X/* >NGROUPS          - Pfad zur "active"-Datei von NEWS               */
  2130. X/*  AGROUPS         - Pfad zur MBox-"active"-Datei               */
  2131. X/***************************************************************************/
  2132. X
  2133. X#define LIB             "./lib"
  2134. X#define TMP             "/tmp"
  2135. X#define NEWS             "/usr/spool/news"
  2136. X#define NEWSGROUPS    "/usr/lib/news/newsgroups"
  2137. X#define ERRMBOX          "/usr/spool/mail/postmaster"
  2138. X#define MAILDROP         "/usr/spool/mail"
  2139. X#define NGROUPS          "/usr/lib/news/active"
  2140. X#define AGROUPS          "./etc/active"
  2141. X
  2142. X
  2143. X
  2144. X
  2145. X
  2146. X/***************************************************************************/
  2147. X/* >CONSOLE          - Geraet/Datei fuer die Logbuch-Ausgaben           */
  2148. X/*            Ist CONSOLE als "REDIRECT" definiert, wird aus der */
  2149. X/*                      Datei CDIRECTFL der Name der Ausgabedatei gelesen  */
  2150. X/*            gelesen                               */
  2151. X/*  CDIRECTFL         - Geraet/Datei wohin CONSOLE-Info ausgeben wird       */
  2152. X/*                Die Datei ENTHAELT DEN NAMEN der Ausgabedatei !!!  */
  2153. X/* >CPRN              - Geraet/Datei fuer Fehler-Ausgaben           */
  2154. X/* >POSTMASTER        - Name des SYSOPs (identisch mit dessen SH-Account)  */
  2155. X/*  MAX_BPS           - Maximale Modem-Ubertragungsrate in BPS             */
  2156. X/* >PMS_TTY           - Nummer des einzigen Terminals, auf dem sich "root" */
  2157. X/*            anmelden darf                       */
  2158. X/*  GUEST             - MBox-Account fuer Besucher               */
  2159. X/*  UDBASE            - Pfad zur Teilnehmer-Datenbank               */
  2160. X/*  UDSEQ             - Pfad zur Teilnehmer-SEQ-Datei               */
  2161. X/***************************************************************************/
  2162. X
  2163. X#define CONSOLE             "REDIRECT"
  2164. X#define CDIRECTFL        "/etc/mbox.out"
  2165. X#define CPRN             "/tmp/errlog"
  2166. X#define POSTMASTER       "volkers"
  2167. X#define PMS_TTY          "/dev/tty4"
  2168. X#define MAX_BPS          19200
  2169. X#define GUEST            "GAST"
  2170. X#define UDBASE           "./etc/users.data"
  2171. X#define UDSEQ            "./etc/users.seq"
  2172. X
  2173. X
  2174. X
  2175. X
  2176. X/***************************************************************************/
  2177. X/*  BEFEHLE        - Pfad zur Befehls-Tabelle                   */
  2178. X/*  HILFE          - Pfad zu den HELP-Texten                   */
  2179. X/*  KURZHILFE       - Kurzuebersicht                       */
  2180. X/*  INTRO          - Pfad zur INTRO-Meldung                   */
  2181. X/*  LOGO           - Optionaler Text als Mailbox-LOGO                */
  2182. X/*  SYSINFO       - Allgemeine Infos zur MBox                   */
  2183. X/***************************************************************************/
  2184. X
  2185. X#define BEFEHLE             "./etc/help.befehle"  
  2186. X#define HILFE             "./etc/help.hilfe"
  2187. X#define KURZHILFE        "./etc/help.shorthelp"
  2188. X#define INTRO            "./etc/intro"
  2189. X#define LOGO             "./etc/logo"
  2190. X#define SYSINFO        "./etc/sysinfo"
  2191. X
  2192. X
  2193. X
  2194. X/***************************************************************************/
  2195. X/*  SEQ             - Pfad zur MBox-SEQ-Datei (Anzahl der Anrufe)       */
  2196. X/*  CALLS           - Pfad zur MBox-CALLS-Datei (Logfile)           */
  2197. X/*  WHO             - Pfad zur MBox-WHO-Datei (gerade aktive User)       */
  2198. X/***************************************************************************/
  2199. X
  2200. X#define SEQ              "./etc/mbox.seq"
  2201. X#define CALLS            "./etc/mbox.calls"
  2202. X#define WHO              "./etc/mbox.who"
  2203. X
  2204. X
  2205. X
  2206. X
  2207. X/***************************************************************************/
  2208. X/*  EDITORS          - Pfad zur Liste der verfuegbaren Eddies           */
  2209. X/*  GAMES            - Pfad zur Liste der Online-Spiele               */
  2210. X/*  MAX_GAMES          - Anzahl der max. angebotenen Spiele           */
  2211. X/* >CHAT             - Pfad zum CHAT-Programm                   */
  2212. X/*  RSH              - MBox-RSH; NICHT identisch mit RemoteSH/RestrictedSH */
  2213. X/*  UDCS         - Pfad zur Liste der 'User defined Commands'       */
  2214. X/*  PACKERS         - Pfad zur Liste der Komprimierer/Archivierer         */
  2215. X/***************************************************************************/
  2216. X
  2217. X#define EDITORS          "./etc/mbox.editors"
  2218. X#define GAMES             "./etc/mbox.games"
  2219. X#define MAX_GAMES    10
  2220. X#define CHAT             "/usr/bin/chat"
  2221. X#define RSH              "./mbrsh"
  2222. X#define UDCS        "./etc/mbox.udc"
  2223. X#define PACKERS        "./etc/mbox.packers"
  2224. X
  2225. X
  2226. X
  2227. X
  2228. X/***************************************************************************/
  2229. X/*  ROOT_UID          - siehe "/etc/passwd"                   */
  2230. X/*  ROOT_GID          - dito                           */
  2231. X/*  GUEST_GID           - dito (unbedingt != GID fuer "normale" User)        */
  2232. X/***************************************************************************/
  2233. X
  2234. X#define ROOT_UID          0
  2235. X#define ROOT_GID          0
  2236. X#define GUEST_GID         1
  2237. X
  2238. X
  2239. X
  2240. X
  2241. X
  2242. X/***************************************************************************/
  2243. X/* >FIRST_EX_TTY       - Nummer des ersten seriellen Terminals           */
  2244. X/*  MAX_TERMINALS      - Max. Anzahl der aktiven Terminals            */
  2245. X/***************************************************************************/
  2246. X
  2247. X#define FIRST_EX_TTY    64
  2248. X#define MAX_TERMINALS    20
  2249. X
  2250. X
  2251. X
  2252. X
  2253. X/***************************************************************************/
  2254. X/* >SIGNATURE          - Name des '.signature'-File im $HOME eins SH-Users */
  2255. X/* >TSET               - Pfad zum TSET-Programm                   */
  2256. X/* >EXPIRE             - Pfad zum EXPIRE-Programm               */
  2257. X/*  MB-DAEMON          - Pfad zum MB-DAEMON-Programm               */
  2258. X/*  MB_DLOG            - Pfad zum MB-DAEMON-Statistik-File           */
  2259. X/*  XMDLOG           - Pfad zum XMD-Protokoll-File                   */
  2260. X/*  XMD_ALIAS           - Pfad zur Alias-Datei des XMD               */
  2261. X/***************************************************************************/
  2262. X
  2263. X#define SIGNATURE        ".wmailsign"
  2264. X#define TSET             "./etc/tset"
  2265. X#define EXPIRE           "/usr/lib/news/expire"
  2266. X#define MB_DAEMON        "/usr/bin/mb-daemon"
  2267. X#define MB_DLOG          "./etc/mbd.log"
  2268. X#define XMDLOG             "/usr/adm/xmd.log"
  2269. X#define XMD_ALIAS    "./etc/xmd.alias"
  2270. X
  2271. X
  2272. X
  2273. X
  2274. X/***************************************************************************/
  2275. X/* >COMPRESS        - Pfad zum Standard-COMPRESS               */
  2276. X/* >GREP         - Pfad zum SUCH-Programm (GREP -L: Filename only !)*/
  2277. X/* >SORTEDCUT           - Zaehlt die Downloads pro File               */
  2278. X/* >SECONDCUT           - Zaehlt die Anrufe pro User               */
  2279. X/* >UUX                 - Fuehrt Kommandos auf fremden Sites aus       */
  2280. X/*  TAR            - Tar-Synopsis zum bilden eines neuen Archives     */
  2281. X/***************************************************************************/
  2282. X
  2283. X#define COMPRESS         "/usr/bin/compress"
  2284. X#define GREP             "/usr/bin/grep -l"
  2285. X#define SORTEDCUT       "cut -d' ' -i2 -f3 %s | sort - | uniq -c | sort -r - | sed '/ \\//s//   \\//g' > %s"
  2286. X#define SECONDCUT    "cut -c6-35 %s | sed '/  /s//    /g' | sort - | uniq -c | sort -r - > %s"
  2287. X#define UUX        "uux -r"
  2288. X#define TAR        "/usr/bin/tar cf"
  2289. X
  2290. X
  2291. X
  2292. X/***************************************************************************/
  2293. X/*  PDNG         - Name der Freeware/Shareware/PD-NG           */
  2294. X/*  PDLOG                - PD-Download-Protokoll               */
  2295. X/*  PDSCRIPT         - Pfad zum Protokoll der UPLOADs           */
  2296. X/* >NEWS_MINIMUM         - Mindestens verfuegbare NGs               */
  2297. X/*  MAX_PER_NG           - Maximale Anzahl der Eintraege pro NG           */
  2298. X/*  EXPIRE_DAYS          - Ab wann loeschen, wenn MAX_PER_NG erreicht ist  */
  2299. X/*  MAX_XMD_ALIAS     - Wieviele Namen kann XMD "umleiten"              */
  2300. X/*  NAT_DOMAIN1          - Nationale Domains (gebuehrenfrei)           */
  2301. X/*  NAT_DOMAIN2          - (dito)                       */
  2302. X/*  NAT_DOMAIN3          - (dito)                       */
  2303. X/***************************************************************************/
  2304. X
  2305. X#define PDNG             "local.pd"
  2306. X#define PDLOG             "./etc/pd.log"
  2307. X#define PDSCRIPT         "./etc/pd.script"
  2308. X#define NEWS_MINIMUM     "local xenox de"
  2309. X#define MAX_PER_NG       1000
  2310. X#define EXPIRED_DAYS     32
  2311. X#define MAX_XMD_ALIAS   20
  2312. X#define NAT_DOMAIN1      ".de"
  2313. X#define NAT_DOMAIN2      ".sub.org"
  2314. X#define NAT_DOMAIN3      ".de" 
  2315. X
  2316. X
  2317. X
  2318. X
  2319. X
  2320. X/***************************************************************************/
  2321. X/*  SZ            - ZModem Download                   */
  2322. X/*  SX              - X-Modem                       */
  2323. X/*  SB                  - Y-Modem                       */
  2324. X/*  RZ              - ZModem Upload                   */
  2325. X/*  RX                    - X-Modem                        */
  2326. X/*  RB                    - Y-Modem                       */
  2327. X/***************************************************************************/
  2328. X
  2329. X#define SZ               "/usr/bin/sz"
  2330. X#define SX               "/usr/bin/sx"
  2331. X#define SB              "/usr/bin/sb"
  2332. X
  2333. X#define RZ               "/usr/bin/rz"
  2334. X#define RX             "/usr/bin/rx"
  2335. X#define RB             "/usr/bin/rb"
  2336. X
  2337. X
  2338. X
  2339. X
  2340. X
  2341. X/***************************************************************************/
  2342. X/*  TARIF                 - Pfennige pro Einheit (Telefongebuehren)       */
  2343. X/*  NZNT                  - Sekunden pro Einheit Nahzone/Normal-Tarif       */
  2344. X/*  NZBT                  -                      Nahzone/Billig-Tarif       */
  2345. X/*  RZNT                  -                  Regionalzone/Normal-Tarif */
  2346. X/*  RZBT          -             Regionalzone/Billig-Tarif */
  2347. X/*  WZNT          -             Weitzone/Normal-Tarif     */
  2348. X/*  WZBT          -             Weitzone/Billig-Tarif     */
  2349. X/***************************************************************************/
  2350. X
  2351. X#define TARIF            23
  2352. X#define NZNT             360
  2353. X#define NZBT             720
  2354. X#define RZNT              60
  2355. X#define RZBT            120
  2356. X#define WZNT             21
  2357. X#define WZBT             42
  2358. X
  2359. X
  2360. X
  2361. X
  2362. X/***************************************************************************/
  2363. X/*  PRO_ENTRIES          - Maximal Eintraege in MBOX.CALLS             */
  2364. X/*  MAX_TAGE          - Max. Eintraege im PRO-Diagramm           */
  2365. X/***************************************************************************/
  2366. X
  2367. X#define PRO_ENTRIES      999
  2368. X#define MAX_TAGE    16
  2369. X
  2370. X
  2371. X
  2372. X/***************************************************************************/
  2373. X/*  MVERSION          - Version des MB-DAEMON               */
  2374. X/*  REFLECT_NG          - Auf diese Gruppe wird "reflektiert"           */
  2375. X/*  REFLECT_LOG          - LOG-File des Reflektors               */
  2376. X/*  DIRLIST          - Wird gesendet bei DIRLIST-Request            */
  2377. X/*  REFLECTUID          - UID des Reflektors (siehe /etc/passwd)         */
  2378. X/*  TZS              - ?? Fehler in der Zeitberechnung ??           */
  2379. X/***************************************************************************/
  2380. X
  2381. X#define MVERSION        "+++ Un.Net Reflecting Device - Version 1.6 / MB-DAEMON +++"
  2382. X#define REFLECT_NG      "xenox.test"
  2383. X#define REFLECT_LOG     "/local/mbox/etc/reflector.log"
  2384. X#define DIRLIST         "/public/pd/DIRLIST"
  2385. X#define REFLECTUID      22
  2386. X#define TZS        1
  2387. X
  2388. X
  2389. X/***************************************************************************/
  2390. X/*  MIME-VERSION      - MIME Versionsnummer (f. MultiMedia-Mail)       */
  2391. X/***************************************************************************/
  2392. X
  2393. X#define MIME_VERSION    "1.0"
  2394. X
  2395. X
  2396. X
  2397. END_OF_FILE
  2398.   if test 13062 -ne `wc -c <'src/mbox.h'`; then
  2399.     echo shar: \"'src/mbox.h'\" unpacked with wrong size!
  2400.   fi
  2401.   # end of 'src/mbox.h'
  2402. fi
  2403. echo shar: End of archive 7 \(of 11\).
  2404. cp /dev/null ark7isdone
  2405. MISSING=""
  2406. for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
  2407.     if test ! -f ark${I}isdone ; then
  2408.     MISSING="${MISSING} ${I}"
  2409.     fi
  2410. done
  2411. if test "${MISSING}" = "" ; then
  2412.     echo You have unpacked all 11 archives.
  2413.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2414. else
  2415.     echo You still must unpack the following archives:
  2416.     echo "        " ${MISSING}
  2417. fi
  2418. exit 0
  2419. exit 0 # Just in case...
  2420.