home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume42
/
mbox
/
part04
< prev
next >
Wrap
Internet Message Format
|
1994-03-29
|
93KB
From: Volker.Schuermann@unnet.wupper.de (Volker Schuermann)
Newsgroups: comp.sources.misc
Subject: v42i027: mbox - ix/MBox BBS, v2.1, Part04/12
Date: 29 Mar 1994 21:07:19 -0600
Organization: THE UNDERGROUND NETWORK
Sender: kent@sparky.sterling.com
Approved: kent@sparky.sterling.com
Message-ID: <2naqd7$iqf@sparky.sterling.com>
Reply-To: Volker Schuermann <Volker.Schuermann@unnet.wupper.de>
X-Md4-Signature: 4f4104b5b18e31f3bcb40e8a10eccbf3
Submitted-by: Volker.Schuermann@unnet.wupper.de (Volker Schuermann)
Posting-number: Volume 42, Issue 27
Archive-name: mbox/part04
Environment: MINIX, ISC, ESIX, SVR3, LINUX, SVR4
Supersedes: mbox: Volume 35, Issue 36-50
#! /bin/sh
# This is a shell archive. Remove anything before this line, then feed it
# into a shell via "sh file" or similar. To overwrite existing files,
# type "sh file -c".
# Contents: mbox/src/admin.c mbox/src/mail.c mbox/src/misc.c
# mbox/src/weiterl.c
# Wrapped by kent@sparky on Thu Mar 24 21:48:34 1994
PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin:$PATH ; export PATH
echo If this archive is complete, you will see the following message:
echo ' "shar: End of archive 4 (of 12)."'
if test -f 'mbox/src/admin.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'mbox/src/admin.c'\"
else
echo shar: Extracting \"'mbox/src/admin.c'\" \(24678 characters\)
sed "s/^X//" >'mbox/src/admin.c' <<'END_OF_FILE'
X/* ix/MBox (admin.c) by Volker Schuermann, 01.01.1994
X
X This C source code contains the following functions:
X
X #UA user_aendern() change user data in the BBS database
X #UZ user_anzeigen() show user data
X #UL user_loeschen() delete user (data) from the database
X #SG setup_get() read a number
X #WU wait_until_keypressed() guess what ;-)
X #AD admin() sysop changing user data (interactive)
X #SU setup() user changing user data (interactive)
X
X Contact <volkers@unnet.wupper.de> for help! */
X
X
X
X
X
X#include <sys/types.h>
X#include <sys/stat.h>
X#include <unistd.h>
X#include <stdio.h>
X#include <fcntl.h>
X
X#include "mbox.h"
X
Xvoid wait_until_keypressed();
X
X
X
X
X/* #UA - Change users data. */
X
Xvoid user_aendern()
X{
X int fd;
X struct userdaten DUMMY, LOOSER;
X
X UNSIGNED char s[STRING];
X UNSIGNED char t[STRING];
X UNSIGNED char oldname[STRING];
X
X long ll = -1L;
X size_t dummy = sizeof(DUMMY);
X UNSIGNED char c;
X int i;
X int uid = -1;
X
X headline( ADM01_MSG );
X
X printf("%s ", ADM02_MSG);
X strcpy(s, (UNSIGNED char *) getline(30, 11, '.', ""));
X if ((s[0] > 47) && (s[0] < 58)) uid = atoi(s);
X
X maybe_locked(UDBASE, "r"); mblock(UDBASE);
X fd = open(UDBASE, O_RDONLY);
X if(fd == -1){
X nerror("admin.c", 324, "aendern", "Can't read", UDBASE);
X }
X while(read(fd, (UNSIGNED char *) &DUMMY, dummy) == dummy){
X if(uid == DUMMY.id){
X ll = lseek(fd, 0L, SEEK_CUR) - dummy;
X }
X else{
X if((strcomp(s, DUMMY.name) == 0) ||
X (strcomp(s, DUMMY.nick) == 0) ||
X (strcomp(s, DUMMY.sh_name) == 0)){
X ll = lseek(fd, 0L, SEEK_CUR) - dummy;
X }
X }
X }
X lseek(fd, ll, SEEK_SET);
X read(fd, (UNSIGNED char *) &LOOSER, sizeof(LOOSER));
X close(fd);
X mbunlock(UDBASE);
X
X if(ll == -1L) return;
X
X printf("%c%s %d ", CR, ADM03_MSG, LOOSER.id);
X
X strcpy(oldname, (UNSIGNED char) LOOSER.name);
X
X printf("\n%s ", ADM04_MSG);
X strcpy(s, (UNSIGNED char *) getline(30, 1011, '.', LOOSER.name));
X if (s[0] > 32) sprintf(LOOSER.name, s);
X if (s[0] == 32) LOOSER.name[0] = '\0';
X
X printf("\n%s ", ADM05_MSG);
X strcpy(s, (UNSIGNED char *) getline(10, 1011, '.', LOOSER.passwort));
X if (s[0] > 32) sprintf(LOOSER.passwort, s);
X if (s[0] == 32) LOOSER.passwort[0] = '\0';
X
X printf("\n%s ", ADM06_MSG);
X strcpy(s, (UNSIGNED char *) getline(14, 1011, '.', LOOSER.sh_name));
X if (s[0] > 32) sprintf(LOOSER.sh_name, s);
X if (s[0] == 32) LOOSER.sh_name[0] = '\0';
X
X printf("\n%s ", ADM07_MSG);
X strcpy(s, (UNSIGNED char *) getline(30, 1011, '.', LOOSER.nick));
X if (s[0] > 32) sprintf(LOOSER.nick, s);
X if (s[0] == 32) LOOSER.nick[0] = '\0';
X
X printf("\n%s ", ADM08_MSG);
X strcpy(s, (UNSIGNED char *) getline(30, 1011, '.', LOOSER.wohnort));
X if (s[0] > 31) sprintf(LOOSER.wohnort, s);
X
X printf("\n%s ", ADM09_MSG);
X strcpy(s, (UNSIGNED char *) getline(30, 1011, '.', LOOSER.strasse));
X if (s[0] > 31) sprintf(LOOSER.strasse, s);
X
X printf("\n%s ", ADM10_MSG);
X strcpy(s, (UNSIGNED char *) getline(20, 1011, '.', LOOSER.telefon1));
X if (s[0] > 31) sprintf(LOOSER.telefon1, s);
X
X printf("\n%s ", ADM11_MSG);
X strcpy(s, (UNSIGNED char *) getline(20, 1011, '.', LOOSER.telefon2));
X if (s[0] > 31) sprintf(LOOSER.telefon2, s);
X
X printf("\n%s ", ADM12_MSG);
X strcpy(s, (UNSIGNED char *) getline(10, 1114, '?', LOOSER.geburtsdatum));
X if (s[0] > 31) sprintf(LOOSER.geburtsdatum, s);
X
X printf("\n%s ", ADM13_MSG);
X sprintf(t, "%d", LOOSER.terminal);
X strcpy(s, (UNSIGNED char *) getline(5, 1111, '.', t));
X if (s[0] > 31) LOOSER.terminal = atoi(s);
X if ((LOOSER.terminal < 1) || (LOOSER.terminal > 8)) LOOSER.terminal = 1;
X
X printf("\n%s ", ADM14_MSG);
X sprintf(t, "%d", LOOSER.editor);
X strcpy(s, (UNSIGNED char *) getline(5, 1111, '.', t));
X if (s[0] > 31) LOOSER.editor = atoi(s);
X if ((LOOSER.editor < 1) || (LOOSER.editor > OFFERED_EDITORS)) LOOSER.editor = 1;
X
X printf("\n%s ", ADM15_MSG);
X sprintf(t, "%d", LOOSER.level);
X strcpy(s, (UNSIGNED char *) getline(5, 1111, '.', t));
X if (s[0] > 31) LOOSER.level = atoi(s);
X
X printf("\n%s ", ADM16_MSG);
X sprintf(t, "%d", LOOSER.more);
X strcpy(s, (UNSIGNED char *) getline(5, 1111, '.', t));
X if (s[0] > 31) LOOSER.more = atoi(s);
X if ((LOOSER.more < 0) || (LOOSER.more > 3)) LOOSER.more = 1;
X
X printf("\n%s ", ADM17_MSG);
X sprintf(t, "%d", LOOSER.bell);
X strcpy(s, (UNSIGNED char *) getline(5, 1111, '.', t));
X if (s[0] > 31) LOOSER.bell = atoi(s);
X if ((LOOSER.bell < -1) || (LOOSER.bell > 1)) LOOSER.bell = 0;
X
X printf("\n%s ", ADM18_MSG);
X sprintf(t, "%d", LOOSER.prompt);
X strcpy(s, (UNSIGNED char *) getline(5, 1111, '.', t));
X if (s[0] > 31) LOOSER.prompt = atoi(s);
X if ((LOOSER.prompt < 1) || (LOOSER.prompt > 3)) LOOSER.prompt = 2;
X
X printf("\n%s ", ADM19_MSG);
X LOOSER.tlines += 2;
X sprintf(t, "%d", LOOSER.tlines);
X strcpy(s, (UNSIGNED char *) getline(5, 1111, '.', t));
X if (s[0] > 31) LOOSER.tlines = atoi(s);
X LOOSER.tlines -= 2;
X if ((LOOSER.tlines < 22) || (LOOSER.tlines > 23)) LOOSER.tlines = DEF_MAX_SCR_LINES;
X
X printf("\n%s ", ADM20_MSG);
X strcpy(s, (UNSIGNED char *) getline(10, 1114, '?', LOOSER.lastlog));
X if (s[0] > 31) sprintf(LOOSER.lastlog, s);
X
X printf("\n%s ", ADM21_MSG);
X strcpy(t, (UNSIGNED char *) timereconv((long) LOOSER.lasttime));
X t[5] = '\0';
X strcpy(s, (UNSIGNED char *) getline(5, 1113, '?', t));
X LOOSER.lasttime = timeconv(s);
X
X printf("\n%s ", ADM21aMSG);
X strcpy(s, (UNSIGNED char *) ttyname(0));
X if(strcomp(PMS_TTY, s) == 0){
X strcpy(s, (UNSIGNED char *) getline(17, 1011, '.', LOOSER.account));
X if (s[0] > 31) sprintf(LOOSER.account, s);
X }
X else{
X printf("%s", LOOSER.account);
X }
X
X printf("\n%s ", ADM22_MSG);
X strcpy(s, (UNSIGNED char *) getline(58, 1011, '.', LOOSER.newsgrps));
X if (s[0] > 31) sprintf(LOOSER.newsgrps, s);
X
X printf("\n%s ", ADM23_MSG);
X sprintf(t, "%d", LOOSER.seq);
X strcpy(s, (UNSIGNED char *) getline(10, 1111, '.', t));
X if (s[0] > 31) LOOSER.seq = atoi(s);
X
X wait_until_keypressed();
X
X maybe_locked(UDBASE, "r"); mblock(UDBASE);
X fd = open(UDBASE, O_WRONLY);
X if (fd == -1) {
X nerror("admin.c", 428, "aendern", "Can't write to", UDBASE);
X }
X if (lseek(fd, ll, SEEK_SET) == -1) {
X nerror("admin.c", 431, "aendern", "Position not found in", UDBASE);
X }
X write(fd, (UNSIGNED char *) &LOOSER, sizeof(LOOSER));
X close(fd);
X mbunlock(UDBASE);
X
X if (LOOSER.id == USER.id) { /* Ich bin's !!! */
X
X maybe_locked(UDBASE, "r");
X mblock(UDBASE);
X fd = open(UDBASE, O_RDONLY);
X if (fd == -1) {
X nerror("admin.c", 324, "aendern", "Can't read", UDBASE);
X }
X lseek(fd, ll, SEEK_SET);
X read(fd, (UNSIGNED char *) &USER, sizeof(USER));
X close(fd);
X mbunlock(UDBASE);
X }
X
X if(LOOSER.name[0] != oldname[0]){
X moving( oldname, LOOSER.name, LOOSER.id );
X }
X}
X
X
X
X
X/* #UZ - Show users data. */
X
Xvoid user_anzeigen()
X{
X int fd;
X struct userdaten DUMMY, LOOSER;
X UNSIGNED char s[STRING];
X UNSIGNED char t[STRING];
X long ll = -1L;
X size_t dummy = sizeof(DUMMY);
X UNSIGNED char c;
X int i;
X int uid = -1;
X
X
X headline( ADM01_MSG );
X
X printf("%s ", ADM02_MSG);
X strcpy(s, (UNSIGNED char *) getline(30, 11, '.', ""));
X if ((s[0] > 47) && (s[0] < 58)) uid = atoi(s);
X
X maybe_locked(UDBASE, "r"); mblock(UDBASE);
X fd = open(UDBASE, O_RDONLY);
X if (fd == -1) {
X nerror("admin.c", 324, "aendern", "Can't read", UDBASE);
X }
X while (read(fd, (UNSIGNED char *) &DUMMY, dummy) == dummy) {
X if (uid == DUMMY.id) {
X ll = lseek(fd, 0L, SEEK_CUR) - dummy;
X }
X else{
X if ((strcomp(s, DUMMY.name) == 0) ||
X (strcomp(s, DUMMY.nick) == 0) ||
X (strcomp(s, DUMMY.sh_name) == 0)) {
X ll = lseek(fd, 0L, SEEK_CUR) - dummy;
X }
X }
X }
X lseek(fd, ll, SEEK_SET);
X read(fd, (UNSIGNED char *) &LOOSER, sizeof(LOOSER));
X close(fd);
X mbunlock(UDBASE);
X
X if (ll == -1L) return;
X
X printf("%c %s %d ", CR, ADM03_MSG, LOOSER.id);
X printf("\n %s %s", ADM04_MSG, LOOSER.name);
X printf("\n %s %s", ADM05_MSG, LOOSER.passwort);
X printf("\n %s %s", ADM06_MSG, LOOSER.sh_name);
X printf("\n %s %s", ADM07_MSG, LOOSER.nick);
X printf("\n %s %s", ADM08_MSG, LOOSER.wohnort);
X printf("\n %s %s", ADM09_MSG, LOOSER.strasse);
X printf("\n %s %s", ADM10_MSG, LOOSER.telefon1);
X printf("\n %s %s", ADM11_MSG, LOOSER.telefon2);
X printf("\n %s %s", ADM12_MSG, LOOSER.geburtsdatum);
X printf("\n %s %d", ADM13_MSG, LOOSER.terminal);
X printf("\n %s %d", ADM14_MSG, LOOSER.editor);
X printf("\n %s %d", ADM15_MSG, LOOSER.level);
X printf("\n %s %d", ADM16_MSG, LOOSER.more);
X printf("\n %s %d", ADM17_MSG, LOOSER.bell);
X printf("\n %s %d", ADM18_MSG, LOOSER.prompt);
X printf("\n %s %d", ADM19_MSG, LOOSER.tlines += 2);
X printf("\n %s %s", ADM20_MSG, LOOSER.lastlog);
X printf("\n %s %.5s", ADM21_MSG, (UNSIGNED char *) timereconv((long) LOOSER.lasttime));
X printf("\n %s %s", ADM21aMSG, LOOSER.account);
X printf("\n %s %s", ADM22_MSG, LOOSER.newsgrps);
X printf("\n %s %d", ADM23_MSG, LOOSER.seq);
X
X wait_until_keypressed();
X}
X
X
X/* #UL - Delete BBS user account including all directories and files. */
X
Xvoid user_loeschen()
X{
X int fd;
X int gd;
X struct userdaten DUMMY, LOOSER;
X UNSIGNED char s[STRING];
X UNSIGNED char t[STRING];
X long ll = -1L;
X size_t dummy = sizeof(DUMMY);
X UNSIGNED char c;
X int i;
X int uid = -1;
X
X
X headline( ADM25_MSG );
X
X printf("\n%s ", ADM02_MSG);
X strcpy(s, (UNSIGNED char *) getline(30, 11, '.', ""));
X if ((s[0] > 47) && (s[0] < 58)) uid = atoi(s);
X
X maybe_locked(UDBASE, "r"); mblock(UDBASE);
X fd = open(UDBASE, O_RDONLY);
X if (fd == -1) {
X nerror("admin.c", 459, "loeschen", "Can't read", UDBASE);
X }
X while (read(fd, (UNSIGNED char *) &DUMMY, dummy) == dummy) {
X if (uid == DUMMY.id) {
X ll = lseek(fd, 0L, SEEK_CUR) - dummy;
X }
X else{
X if ((strcomp(s, DUMMY.name) == 0) ||
X (strcomp(s, DUMMY.nick) == 0) ||
X (strcomp(s, DUMMY.sh_name) == 0)) {
X ll = lseek(fd, 0L, SEEK_CUR) - dummy;
X }
X }
X }
X lseek(fd, ll, SEEK_SET);
X read(fd, (UNSIGNED char *) &LOOSER, sizeof(LOOSER));
X close(fd);
X mbunlock(UDBASE);
X
X if (ll == -1L) return;
X
X printf("%c%s (%d) ", CR, ADM26_MSG, LOOSER.id);
X printf("\n%s (%s) ", ADM27_MSG, LOOSER.name);
X
X ansi2("md", 0, 0);
X printf("\n\n%s [%c, %c] ? > ", ADM28_MSG, GBL06_MSG, GBL07_MSG);
X ansi2("me", 0, 0);
X
X c = yesno();
X
X if (c != GBL06_MSG) return;
X
X maybe_locked(UDBASE, "r"); mblock(UDBASE);
X fd = open(UDBASE, O_RDONLY);
X if (fd == -1) {
X nerror("admin.c", 490, "loeschen", "Can't read", UDBASE);
X }
X sprintf(s, "%s/%dbase", TMP, getpid());
X
X gd = open(s, O_WRONLY | O_CREAT);
X if (gd == -1) {
X nerror("admin.c", 497, "loeschen", "Can't create", s);
X }
X while (read(fd, (UNSIGNED char *) &DUMMY, dummy) == dummy) {
X if (DUMMY.id != LOOSER.id) {
X write(gd, (UNSIGNED char *) &DUMMY, dummy);
X }
X }
X close(gd);
X close(fd);
X mbunlock(UDBASE);
X
X sprintf(t, "cp %s %s", s, UDBASE);
X system(t);
X
X unlink(s);
X
X sprintf(s, "rm -r %s/usr/%c/%d", HOME, LOOSER.name[0], LOOSER.id);
X system(s);
X}
X
X
X
X/* #SG - Read a number. Only accept numbers between 1 and 'max'. */
X
Xint setup_get(max)
XUNSIGNED char max;
X{
X UNSIGNED char c;
X
X ansi2("md", 0 ,0);
X printf("\n[1-%c] %s > ", max, ADM29_MSG);
X ansi2("me", 0, 0);
X
X do {
X c = getint();
X if ((c < '0') || (c > max)) c = 0;
X } while (c == 0);
X printf("%c", c);
X
X return c;
X}
X
X
X
X/* #WU - Wait until keypressed ... what a surprise! */
X
Xvoid wait_until_keypressed()
X{
X UNSIGNED char c;
X
X ansi2("md", 0, 0);
X printf("\n\n%s > ", ADM30_MSG);
X ansi2("me", 0, 0);
X
X c = getint();
X}
X
X
X
X/* #AD - Sysop maintaining users database. */
X
Xvoid admin()
X{
X UNSIGNED char c;
X
XAGAIN:
X
X headline( ADM31_MSG );
X
X printf( "\n 1 - %s", ADM32_MSG);
X printf("\n\n 2 - %s", ADM33_MSG);
X printf("\n\n 3 - %s", ADM34_MSG);
X printf("\n\n 4 - %s", ADM35_MSG);
X printf("\n\n 5 - %s", ADM36_MSG);
X
X printf("\n");
X printf("\n\n 8 - %s", ADM37_MSG);
X
X MEDIUM: printf("\n");
X
X c = setup_get('8');
X
X switch (c) {
X case '1':
X postfach("*");
X logout();
X intro();
X break;
X
X case '2':
X user_aendern();
X break;
X
X case '3':
X user_loeschen();
X break;
X
X case '4':
X user_anzeigen();
X break;
X
X case '5':
X userliste("");
X wait_until_keypressed();
X break;
X
X default:
X printf("\n");
X return;
X }
X goto AGAIN;
X
X}
X
X
X
X/* #SU - User maintaining his/her data. */
X
Xvoid setup()
X{
X FILE *fp;
X int fd;
X UNSIGNED char s[STRING];
X UNSIGNED char t[STRING];
X UNSIGNED char c;
X int i;
X int ok = 0;
X long ll;
X struct userdaten DUMMY;
X int dummy = sizeof(DUMMY);
X UNSIGNED char *BLANKS = (UNSIGNED char *) " ";
X UNSIGNED char oldname[STRING];
X
X
X AGAIN:
X
X headline( ADM38_MSG );
X printf("\n");
X
X printf(" 1 - %s\n\n", ADM39_MSG);
X printf(" 2 - %s\n\n", ADM40_MSG);
X printf(" 3 - %s\n\n", ADM41_MSG);
X printf(" 4 - %s\n\n", ADM42_MSG);
X printf(" 5 - %s\n\n", ADM43_MSG);
X printf(" 6 - %s\n\n", ADM44_MSG);
X printf(" 7 - %s\n\n", ADM45_MSG);
X printf(" 8 - %s\n\n", ADM46_MSG);
X printf("\n");
X printf(" 9 - %s\n\n", ADM47_MSG);
X
X c = setup_get('9');
X
X switch (c) {
X case '1':
X headline( ADM48_MSG );
X printf("\n");
X if (USER.terminal == 1)
X printf("*");
X else
X printf(" ");
X printf(" 1 - ANSI (X3.64 ... PC-BBS-ANSI)\n\n");
X if (USER.terminal == 2)
X printf("*");
X else
X printf(" ");
X printf(" 2 - VT100 (Digital Equipment VT100)\n\n");
X if (USER.terminal == 3)
X printf("*");
X else
X printf(" ");
X printf(" 3 - VT52 (Digital Equipment VT52)\n\n");
X if (USER.terminal == 4)
X printf("*");
X else
X printf(" ");
X printf(" 4 - Dump (%s)\n\n", ADM49_MSG);
X if (USER.terminal == 5)
X printf("*");
X else
X printf(" ");
X printf(" 5 - COLOR-ANSI (X3.64 & ISO 6429)\n\n");
X if (USER.terminal == 6)
X printf("*");
X else
X printf(" ");
X printf(" 6 - %s (%s)\n\n", TECA[1].name, TECA[1].desc);
X if (USER.terminal == 7)
X printf("*");
X else
X printf(" ");
X printf(" 7 - %s (%s)\n\n", TECA[2].name, TECA[2].desc);
X if (USER.terminal == 8)
X printf("*");
X else
X printf(" ");
X printf(" 8 - %s (%s)\n\n", TECA[3].name, TECA[3].desc);
X
X USER.terminal = setup_get('8') - 48;
X
X break;
X
X case '2':
X headline( ADM50_MSG );
X printf("\n");
X fp = fopen(EDITORS, "r");
X if (fp == NULL) {
X nerror("admin.c", 563, "setup", "Can't read", EDITORS);
X }
X i = 0;
X while((fgets(s, STRING, fp) != NULL) && (s[0] != '='));
X while (fscanf(fp, "%s %s", s, t) > 0) {
X i++;
X if (USER.editor == i)
X printf("*");
X else
X printf(" ");
X printf(" %d - %s\n\n", i, s);
X }
X fclose(fp);
X USER.editor = setup_get((i + 48)) - 48;
X
X break;
X
X case '3':
X headline( ADM51_MSG );
X printf("\n");
X strcpy(s, (UNSIGNED char *) mytime(0));
X if ((USER.prompt == 1) && (USER.bell == 1))
X printf("*");
X else
X printf(" ");
X printf(" 1 - %s-> \"[%s] %s > \"\n\n", ADM52_MSG, s, LOP06_MSG);
X if ((USER.prompt == 1) && (USER.bell == 0))
X printf("*");
X else
X printf(" ");
X printf(" 2 - %s-> \"[%s] %s > \"\n\n", ADM53_MSG, s, LOP06_MSG);
X if ((USER.prompt == 2) && (USER.bell == 1))
X printf("*");
X else
X printf(" ");
X printf(" 3 - %s-> \"[%s] %s > \"\n\n", ADM54_MSG, NG, LOP06_MSG);
X if ((USER.prompt == 2) && (USER.bell == 0))
X printf("*");
X else
X printf(" ");
X printf(" 4 - %s-> \"[%s] %s > \"\n\n", ADM55_MSG, NG, LOP06_MSG);
X if ((USER.prompt == 3) && (USER.bell == 1))
X printf("*");
X else
X printf(" ");
X printf(" 5 - %s-> \"[(Sec.) NZ, RZ, WZ] %s > \"\n\n", ADM56_MSG, LOP06_MSG);
X if ((USER.prompt == 3) && (USER.bell == 0))
X printf("*");
X else
X printf(" ");
X printf(" 6 - %s-> \"[(Sec.) NZ, RZ, WZ] %s > \"\n\n", ADM57_MSG, LOP06_MSG);
X
X c = setup_get('6');
X switch (c) {
X case '1':
X USER.prompt = 1;
X USER.bell = 1;
X break;
X case '2':
X USER.prompt = 1;
X USER.bell = 0;
X break;
X case '3':
X USER.prompt = 2;
X USER.bell = 1;
X break;
X case '4':
X USER.prompt = 2;
X USER.bell = 0;
X break;
X case '5':
X USER.prompt = 3;
X USER.bell = 1;
X break;
X case '6':
X USER.prompt = 3;
X USER.bell = 0;
X break;
X }
X break;
X
X case '4':
X headline( ADM58_MSG );
X printf("\n");
X if (USER.more == 0)
X printf("*");
X else
X printf(" ");
X printf(" 1 - %s\n\n", ADM59_MSG);
X if (USER.more == 1)
X printf("*");
X else
X printf(" ");
X printf(" 2 - %s\n\n", ADM60_MSG);
X if (USER.more == 3)
X printf("*");
X else
X printf(" ");
X printf(" 3 - %s\n\n", ADM61_MSG);
X printf("\n");
X printf(" 4 - %s\n\n", ADM62_MSG);
X printf(" 5 - %s\n\n", ADM63_MSG);
X printf(" 6 - %s\n\n", ADM64_MSG);
X printf(" 7 - %s\n\n", ADM64aMSG);
X printf(" 8 - %s\n\n", ADM64bMSG);
X
X i = setup_get('8') - 49;
X
X if (i < 3) {
X USER.more = i;
X if (USER.more == 2) USER.more++;
X }
X else {
X headline( ADM58_MSG );
X printf("\n");
X
X if (i == 3) {
X if (USER.leserichtung == 1)
X printf("*");
X else
X printf(" ");
X printf(" 1 - %s\n\n", ADM65_MSG);
X if (USER.leserichtung == 2)
X printf("*");
X else
X printf(" ");
X printf(" 2 - %s\n\n", ADM66_MSG);
X
X USER.leserichtung = setup_get('2') - 48;
X }
X if (i == 4) {
X if (USER.tlines == 22)
X printf("*");
X else
X printf(" ");
X printf(" 1 - %s\n\n", ADM67_MSG);
X if (USER.tlines == 23)
X printf("*");
X else
X printf(" ");
X printf(" 2 - %s\n\n", ADM68_MSG);
X if (USER.tlines == 43)
X printf("*");
X else
X printf(" ");
X printf(" 3 - %s\n\n", ADM68aMSG);
X
X USER.tlines = setup_get('3') - 48 + 21;
X if(USER.tlines == 24) USER.tlines = 43; /* 45 Zeilen !! */
X }
X if (i == 5) {
X if (USER.schluessel[0] != 32)
X printf("*");
X else
X printf(" ");
X printf(" 1 - %s\n\n", ADM69_MSG);
X if (USER.schluessel[0] == 32)
X printf("*");
X else
X printf(" ");
X printf(" 2 - %s\n\n", ADM70_MSG);
X
X i = setup_get('2') - 48;
X if (i == 2){
X USER.schluessel[0] = 32;
X }
X else{
X USER.schluessel[0] = 1;
X }
X }
X if (i == 6) {
X if (USER.schluessel[1] == 2)
X printf("*");
X else
X printf(" ");
X printf(" 1 - %s\n\n", ADM70aMSG);
X if (USER.schluessel[1] == 3)
X printf("*");
X else
X printf(" ");
X printf(" 2 - %s\n\n", ADM70bMSG);
X
X if (USER.schluessel[1] == 4)
X printf("*");
X else
X printf(" ");
X printf(" 3 - %s\n\n", ADM70cMSG);
X
X i = setup_get('3') - 48;
X USER.schluessel[1] = i + 1;
X }
X if (i == 7) {
X if (USER.schluessel[2] == 1)
X printf("*");
X else
X printf(" ");
X printf(" 1 - %s [%c %c %c %c %c %c %c]\n\n",
X ADM70dMSG, 196, 214, 220, 228, 246, 252, 223);
X if (USER.schluessel[2] == 2)
X printf("*");
X else
X printf(" ");
X printf(" 2 - %s [%c %c %c %c %c %c %c]\n\n",
X ADM70eMSG, 142, 153, 154, 132, 148, 129, 225);
X if (USER.schluessel[2] == 3)
X printf("*");
X else
X printf(" ");
X printf(" 3 - %s\n\n", ADM70fMSG);
X if (USER.schluessel[2] == 4)
X printf("*");
X else
X printf(" ");
X printf(" 4 - %s\n\n", ADM70gMSG);
X
X i = setup_get('4') - 48;
X USER.schluessel[2] = i;
X }
X }
X break;
X
X case '5':
X if (strcomp(GUEST, USER.name) == 0) break;
X
X headline( ADM71_MSG );
X printf("\n");
X
X ansi2("md", 0, 0);
X printf("%s\n", ADM72_MSG);
X printf("%s\n", ADM73_MSG);
X printf("%s\n", ADM74_MSG);
X printf("\n");
X printf("%s\n", ADM75_MSG);
X printf("%s\n", ADM76_MSG);
X ansi2("me", 0, 0);
X
X maybe_locked(UDBASE, "r");
X fd = open(UDBASE, O_RDONLY);
X if (fd == -1) {
X nerror("admin.c", 747, "setup", "Can't read", UDBASE);
X }
X
X strcpy(oldname, (UNSIGNED char *) USER.name);
X
X printf("\n%s ", ADM04_MSG);
X strcpy(s, (UNSIGNED char *) getline(30, 1015, '.', USER.name));
X if(strcomp(GUEST, s) != 0){
X if (s[0] > 31){
X ok = 0;
X lseek(fd, 0L, SEEK_SET);
X while ((read(fd, (UNSIGNED char *) &DUMMY, sizeof(DUMMY)) == sizeof(DUMMY)) && (ok == 0)) {
X if (strcomp(s, DUMMY.name) == 0) ok = 1;
X if (strcomp(s, DUMMY.nick) == 0) ok = 1;
X if (strcomp(s, DUMMY.sh_name) == 0) ok = 1;
X }
X if(USER.level < ADMIN_LEV){
X if ((strcomp("SYSOP", s) == 0) ||
X (strcomp("POST", s) == 0) ||
X (strcomp("GAST", s) == 0) ||
X (strcomp("ADMIN", s) == 0) ||
X (strcomp("COSYS", s) == 0)) ok++;
X }
X if(s[0] >= 97) s[0] -= 32;
X
X if(ok == 0) strcpy(USER.name, (UNSIGNED char *) s);
X }
X }
X
X printf("\n%s ", ADM07_MSG);
X strcpy(s, (UNSIGNED char *) getline(30, 1015, '.', USER.nick));
X if (s[0] > 31){
X ok = 0;
X lseek(fd, 0L, SEEK_SET);
X while ((read(fd, (UNSIGNED char *) &DUMMY, sizeof(DUMMY)) == sizeof(DUMMY)) && (ok == 0)) {
X if (strcomp(s, DUMMY.name) == 0) ok = 1;
X if (strcomp(s, DUMMY.nick) == 0) ok = 1;
X if (strcomp(s, DUMMY.sh_name) == 0) ok = 1;
X }
X if (USER.level < ADMIN_LEV){
X if ((strcomp("SYSOP", s) == 0) ||
X (strcomp("POST", s) == 0) ||
X (strcomp("GAST", s) == 0) ||
X (strcomp("ADMIN", s) == 0) ||
X (strcomp("COSYS", s) == 0)) ok++;
X }
X
X if(ok == 0) strcpy(USER.nick, (UNSIGNED char *) s);
X }
X
X close(fd);
X mbunlock(UDBASE);
X
X printf("\n%s ", ADM08_MSG);
X strcpy(s, (UNSIGNED char *) getline(30, 1011, '.', USER.wohnort));
X if (s[0] > 31) sprintf(USER.wohnort, s);
X
X printf("\n%s ", ADM09_MSG);
X strcpy(s, (UNSIGNED char *) getline(30, 1011, '.', USER.strasse));
X if (s[0] > 31) sprintf(USER.strasse, s);
X
X printf("\n%s ", ADM10_MSG);
X strcpy(s, (UNSIGNED char *) getline(20, 1011, '.', USER.telefon1));
X if (s[0] > 31) sprintf(USER.telefon1, s);
X
X printf("\n%s ", ADM11_MSG);
X strcpy(s, (UNSIGNED char *) getline(20, 1011, '.', USER.telefon2));
X if (s[0] > 31) sprintf(USER.telefon2, s);
X
X printf("\n%s ", ADM12_MSG);
X strcpy(s, (UNSIGNED char *) getline(10, 1114, '?', USER.geburtsdatum));
X if (s[0] > 31) sprintf(USER.geburtsdatum, s);
X
X if(USER.name[0] != oldname[0]){
X moving( oldname, USER.name, USER.id );
X }
X break;
X
X case '6':
X if (strcomp(GUEST, USER.name) == 0) break;
X
X headline( ADM77_MSG );
X
X NIX: printf("\n%s ", ADM78_MSG);
X
X strcpy(s, (UNSIGNED char *) getline(10, 12, '.', ""));
X if (s[0] != '\0') {
X strcpy(USER.passwort, (UNSIGNED char *) crypted(s));
X printf(" (%s)", USER.passwort);
X }
X if (strlen(USER.passwort) < 5) {
X ansi2("md", 0, 0);
X printf("\n\n%s\n", ADM79_MSG);
X ansi2("me", 0, 0);
X goto NIX;
X }
X printf("\n\n%s ", ADM80_MSG);
X strcpy(s, (UNSIGNED char *) getline(10, 12, '.', ""));
X strcpy(t, (UNSIGNED char *) crypted(s));
X printf(" (%s)", t);
X if ((strcomp(t, USER.passwort) != 0) || (strcomp(USER.passwort, t) != 0)) {
X ansi2("md", 0, 0);
X printf(" %s \n", ADM81_MSG);
X ansi2("me", 0, 0);
X goto NIX;
X }
X break;
X
X case '7':
X headline( ADM82_MSG );
X printf("\n");
X strcpy(s, (UNSIGNED char *) mytime(0));
X if (USER.intro == 1)
X printf("*");
X else
X printf(" ");
X printf(" 1 - %s\n\n", ADM83_MSG);
X if (USER.intro == 2)
X printf("*");
X else
X printf(" ");
X printf(" 2 - %s\n\n", ADM84_MSG);
X if (USER.intro == 3)
X printf("*");
X else
X printf(" ");
X printf(" 3 - %s\n\n", ADM85_MSG);
X if (USER.intro == 4)
X printf("*");
X else
X printf(" ");
X printf(" 4 - %s\n\n", ADM86_MSG);
X
X USER.intro = setup_get('4') - 48;
X break;
X
X case '8':
X headline( ADM87_MSG );
X printf("\n");
X if (USER.lastmode == 1)
X printf("*");
X else
X printf(" ");
X printf(" 1 - %s\n\n", ADM88_MSG);
X if (USER.lastmode == 2)
X printf("*");
X else
X printf(" ");
X printf(" 2 - %s\n\n", ADM89_MSG);
X printf("\n");
X printf(" 3 - %s\n\n", ADM90_MSG);
X
X i = setup_get('3') - 48;
X
X switch (i) {
X case 1:
X USER.lastmode = 1;
X LASTTIME = USER.lasttime;
X break;
X case 2:
X USER.lastmode = 2;
X LASTTIME = (int) 0;
X break;
X case 3:
X headline( ADM87_MSG );
X ansi2("md", 0, 0);
X printf("\n%s\n", ADM91_MSG);
X printf("%s\n", ADM92_MSG);
X printf("%s\n", ADM93_MSG);
X printf("%s\n", ADM94_MSG);
X ansi2("me", 0, 0);
X
X printf("\n%s ", ADM95_MSG);
X strcpy(t, (UNSIGNED char *) datereconv(LASTLOG));
X strcpy(s, (UNSIGNED char *) getline(10, 1114, '?', t));
X LASTLOG = (long) dateconv(s);
X
X printf("\n%s ", ADM96_MSG);
X strcpy(t, (UNSIGNED char *) timereconv(LASTTIME));
X strcpy(s, (UNSIGNED char *) getline(8, 1113, '?', t));
X LASTTIME = timeconv(s);
X
X break;
X }
X break;
X
X case '9':
X goto ENDE;
X break;
X }
X printf("\n\n");
X init_user( ADM97_MSG );
X goto AGAIN;
X
X ENDE:
X
X sprintf(s, "%s/surf.%d", TMP, getpid());
X unlink(s);
X
X printf("\n");
X return;
X}
END_OF_FILE
if test 24678 -ne `wc -c <'mbox/src/admin.c'`; then
echo shar: \"'mbox/src/admin.c'\" unpacked with wrong size!
fi
# end of 'mbox/src/admin.c'
fi
if test -f 'mbox/src/mail.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'mbox/src/mail.c'\"
else
echo shar: Extracting \"'mbox/src/mail.c'\" \(24817 characters\)
sed "s/^X//" >'mbox/src/mail.c' <<'END_OF_FILE'
X/* ix/MBox (mail.c) by Volker Schuermann, 04.12.1993
X
X This C source code contains the following functions:
X
X #BF brief() mailing to local and foreign users
X
X Contact <volkers@unnet.wupper.de> for help! */
X
X
X
X
X
X
X
X
X#include <sys/types.h>
X#include <sys/stat.h>
X#include <unistd.h>
X#include <stdio.h>
X#include <fcntl.h>
X#include <time.h>
X
X#include "mbox.h"
X
X
X
X
X/* #BF - The internal mailer.
X
X This one is able to mail to BBS users, to shell users and users
X abroad.
X
X If [arg] contains the text "~REPLY~", the mailer looks for a mail
X to replay on. If not, [arg] must be some kind of address. The mailer
X itself finds out wheter the receiver is a BBS user, shell user or
X even a user on another site.
X
X The function returns a -1 to announce a break or an error. */
X
Xint brief(arg)
XUNSIGNED char arg[];
X{
X FILE *fp;
X FILE *ff;
X FILE *ft;
X int fd;
X int i, j, a;
X int ok;
X struct userdaten LOOSER;
X
X int endless;
X
X time_t timer;
X struct tm *timeptr;
X
X int receiver;
X int mail_id;
X int EX_PM = 0;
X int REPLY = 0;
X int lines = 0;
X int WEITERLEITEN = 0;
X int HOLD = 0;
X int UMLEITUNG = 0;
X int KOPIE = 0;
X
X UNSIGNED char s[STRING];
X UNSIGNED char t[STRING];
X UNSIGNED char TEP[STRING];
X UNSIGNED char REP[STRING];
X UNSIGNED char f[STRING];
X UNSIGNED char subject[STRING];
X UNSIGNED char from[STRING];
X UNSIGNED char rec_char[STRING];
X UNSIGNED char ex[LONGSTRING];
X UNSIGNED char user[STRING];
X UNSIGNED char mesg_id[STRING];
X UNSIGNED char refs[STRING];
X UNSIGNED char date[STRING];
X UNSIGNED char c;
X UNSIGNED char protokoll;
X UNSIGNED char lf;
X UNSIGNED char pubdir[STRING];
X UNSIGNED char dummy[STRING];
X UNSIGNED char username[STRING];
X UNSIGNED char reply[STRING];
X UNSIGNED char priority[STRING];
X UNSIGNED char action[STRING];
X UNSIGNED char cc[STRING];
X UNSIGNED char bcc[STRING];
X UNSIGNED char encrypted[STRING];
X UNSIGNED char comments[STRING];
X UNSIGNED char keywords[STRING];
X UNSIGNED char fortune[STRING];
X UNSIGNED char content[STRING];
X UNSIGNED char receipt[STRING];
X UNSIGNED char delivery[STRING];
X
X long cont_length = 0;
X
X UNSIGNED char YOUR_SITE[STRING];
X
X int BINFILE;
X int news_reply = 0;
X
X struct stat fst;
X
X
X i = 0;
X ok = 0;
X
X mesg_id[0] = '\0';
X
X if (arg[0] == '\0') {
X ansi2("md", 0, 0);
X printf(" %s\n", MAL03_MSG);
X ansi2("me", 0, 0);
X return -1;
X }
X EX_PM = 0;
X
X i = 0;
X strcpy(t, USER.name);
X while (t[i] != '\0') {
X if (t[i] == ' ') t[i] = '.';
X i++;
X }
X strcpy(username, t);
X action[0] = '\0';
X priority[0] = '\0';
X encrypted[0] = '\0';
X keywords[0] = '\0';
X comments[0] = '\0';
X cc[0] = '\0';
X bcc[0] = '\0';
X fortune[0] = '\0';
X content[0] = '\0';
X receipt[0] = '\0';
X reply[0] = '\0';
X delivery[0] = '\0';
X
X#ifdef _UMLAUT
X if(UMLAUT_MODUS < 3) strcpy(content, (UNSIGNED char *) "text/plain; charset=iso-8859-1");
X#endif
X
X if(ROT13_MODUS) strcpy(encrypted, (UNSIGNED char *) "rot13");
X
X i = 0;
X while (arg[i] != '\0') {
X if ((arg[i] == '!') || (arg[i] == '@') || (arg[i] == '%')) EX_PM++;
X i++;
X }
X
X if ((EX_PM > 0) && (USER.level < MAILOUT_LEV)) {
X ansi2("md", 0, 0);
X printf("\n\n%s (%d) %s\n", MAL04_MSG, MAILOUT_LEV, MAL05_MSG);
X ansi2("me", 0, 0);
X return -1;
X }
X
X if(arg[strlen(arg) -1] == '?'){
X arg[strlen(arg) -1] = '$';
X HOLD++;
X KOPIE++;
X }
X
X if(arg[strlen(arg) -1] == '$'){
X WEITERLEITEN++;
X arg[strlen(arg) -1] = '\0';
X sprintf(TEP, "%s/usr/%c/%d/.lastletter", HOME, USER.name[0], USER.id);
X sprintf(t, "%s/usr/%c/%d/.lastsubject", HOME, USER.name[0], USER.id);
X fp = fopen( t, "r" );
X if(fp == NULL) {
X return -1;
X }
X fgets(s, STRING, fp);
X fclose(fp);
X if(HOLD == 0){
X sprintf(subject, "%s %s", MAL06_MSG, s);
X UMLEITUNG++;
X }else
X sprintf(subject, "%s", s);
X }
X
X user[0] = '\0';
X strcat(user, arg);
X
X if(WEITERLEITEN != 0) goto TRY_AGAIN;
X
X if (strcomp("~REPLY~", arg) == 0) {
X REPLY++;
X sprintf(REP, "%s/%dRep", TMP, getpid());
X sprintf(TEP, "%s/%dTep", TMP, getpid());
X fp = fopen(REP, "r");
X if (fp == NULL) {
X nerror("mail.c", 278, "brief", "Can't read", REP);
X }
X fgets(s, STRING, fp ); /* HEADER: Autor */
X
X sprintf(dummy, "%s %s", GBL01_MSG, X_MAIL_DEMON);
X
X if ((strcomp(GBL01_MSG, s) == 0) && (strcomp(dummy, s) != 0)) {
X strcpy(user, (UNSIGNED char *) strcopy(s, (1+strlen(GBL01_MSG)), 80));
X
X fgets(s, STRING, fp); /* HEADER: Datum */
X fgets(s, STRING, fp); /* HEADER: Betreff */
X
X strcpy(t, (UNSIGNED char *) strcopy(s, (1+strlen(GBL03_MSG)), STRING));
X subject[0]= '\0';
X if (strcomp("Re: ", t) != 0) {
X strcpy(subject, "Re: ");
X }
X strcat(subject, (UNSIGNED char *) stripped(t));
X
X fgets(s, STRING, fp); /* HEADER: empty */
X fgets(s, STRING, fp); /* HEADER: empty */
X }
X else { /* UUCP-Header (!MBox) */
X
X sprintf(subject, MAL07_MSG);
X refs[0] = '\0';
X mesg_id[0] = '\0';
X
X ok = -1;
X
X while ((ok < 1) && (fgets(s, STRING, fp) != NULL)) {
X if (strcomp("Lines: ", s) == 0) ok = 1;
X if (strcomp("Date: ", s) == 0) {
X strcpy(date, (UNSIGNED char *) strcopy(s, 6, STRING));
X }
X if (strcomp("Newsgroups: ", s) == 0) news_reply++;
X if (strcomp("Subject: ", s) == 0) {
X subject[0] = '\0';
X strcpy(t, (UNSIGNED char *) strcopy(s, 9, STRING));
X if (strcomp("Re: ", t) != 0) {
X sprintf(subject, "%s", "Re: ");
X }
X strcat(subject, (UNSIGNED char *) stripped(t));
X }
X if (strcomp("Message-Id: ", s) == 0) {
X strcpy(mesg_id, (UNSIGNED char *) strcopy(s, 12, STRING));
X }
X if (strcomp("From: ", s) == 0) {
X strcpy(from, (UNSIGNED char *) strcopy(s, 6, STRING));
X ok = 0;
X }
X if (strcomp("From ", s) == 0) {
X strcpy(from, (UNSIGNED char *) strcopy(s, 5, STRING));
X ok = 0;
X }
X if (strcomp("References: ", s) == 0) {
X strcpy(refs, (UNSIGNED char *) strcopy(s, 12, STRING));
X }
X if (strcomp("Comments: ", s) == 0) {
X strcpy(comments, (UNSIGNED char *) strcopy(s, 10, STRING));
X strcpy(comments, (UNSIGNED char *) stripped(comments));
X }
X if (strcomp("Keywords: ", s) == 0) {
X strcpy(keywords, (UNSIGNED char *) strcopy(s, 10, STRING));
X strcpy(keywords, (UNSIGNED char *) stripped(keywords));
X }
X if (strcomp("Content-Type: ", s) == 0) {
X strcpy(content, (UNSIGNED char *) strcopy(s, 14, STRING));
X strcpy(content, (UNSIGNED char *) stripped(content));
X }
X if (strcomp("X-Delivering-Time: ", s) == 0) {
X strcpy(delivery, (UNSIGNED char *) strcopy(s, 19, STRING));
X strcpy(delivery, (UNSIGNED char *) stripped(delivery));
X }
X
X if ((strlen(s) < 5) && (ok == 0)) ok = 1;
X
X /* THE FOLLOWING IS A LOUSY TRICK, EATING HEADER INFORMATION! */
X
X while(strlen(s) == (STRING - 1)){
X fgets(s, STRING, fp);
X }
X }
X }
X
X i = 0; a = 0; printf(" %-4.4d", a );
X
X ff = fopen(TEP, "w");
X
X if(news_reply > 0){
X fprintf(ff, "In \"%s\" you wrote the other day:\n", NG);
X }
X
X
X while (fgets(s, STRING, fp) != NULL) {
X
X a++;
X printf("%c%c%c%c%-4.4d", BS, BS, BS, BS, a );
X
X if((s[0] != '\n') && (i == 0)){
X
X if(s[0] != '>')
X fputs("> ", ff);
X else{
X if(strcomp("> ", s) == 0){
X s[1] = '>';
X }
X else fputs(">", ff);
X }
X }
X
X if(s[0] != '>'){
X
X if(i >= 65){
X fputs("\n> ", ff);
X i = 0;
X }
X
X endless = 0;
X
X BETTER_TWICE:
X
X if((strlen(s) + i) > 65){
X j = 65 - i;
X i = 0;
X ok = 0;
X while((ok == 0) && (j > 0)){
X if(s[j] == ' '){
X fputs((UNSIGNED char *) iso_line( (UNSIGNED char *) strcopy(s, 0, (j-1))), ff);
X fputs("\n> ", ff);
X strcpy(f, (UNSIGNED char *) stripped( strcopy(s, (j+1), strlen(s))));
X strcpy(s, (UNSIGNED char *) f);
X strcat(s, (UNSIGNED char *) " ");
X i = strlen(s);
X ok++;
X }
X j--;
X }
X if((j == 0) && (ok == 0)){
X fputs("\n> ", ff);
X endless++;
X if(endless == 1) goto BETTER_TWICE;
X }
X }
X else{
X i = 0;
X }
X }
X
X fputs((UNSIGNED char *) iso_line(s), ff);
X }
X fputs("", ff);
X fclose(ff);
X fclose(fp);
X }
X
X TRY_AGAIN:
X
X if((WEITERLEITEN != 0) && (EX_PM != 0)){
X sprintf(rec_char, "%s", user);
X if(checkdomaintype( rec_char ) != 0) return -1;
X goto ONCE_MORE;
X }
X
X receiver = 0;
X
X maybe_locked(UDBASE, "r"); mblock(UDBASE);
X fd = open(UDBASE, O_RDONLY);
X if (fd == -1) {
X nerror("mail.c", 216, "brief", "Can't read", UDBASE);
X }
X lseek(fd, 0L, SEEK_SET);
X while ((receiver == 0) && (read(fd, (UNSIGNED char *) &LOOSER, sizeof(LOOSER)) == sizeof(LOOSER))) {
X if ((strcomp(user, LOOSER.name) == 0) ||
X (strcomp(LOOSER.name, user) == 0) ||
X (strcomp(user, LOOSER.nick) == 0) ||
X (strcomp(user, LOOSER.sh_name) == 0)) {
X receiver = LOOSER.id;
X strcpy(rec_char, LOOSER.name);
X }
X }
X close(fd);
X mbunlock(UDBASE);
X
X if ((receiver == 0) && (EX_PM == 0)) {
X
X if (REPLY != 0) {
X strcpy(user, fetch_reciepy(REP));
X if (fetch_local == 1) goto TRY_AGAIN;
X strcpy(rec_char, (UNSIGNED char *) stripped(user));
X if (strcomp(user, "OOPS") == 0) {
X ansi2("md", 0, 0);
X printf("\n\n%s\n", MAL08_MSG);
X ansi2("me", 0, 0);
X unlink(TEP);
X unlink(REP); /* ??? */
X return -1;
X }
X EX_PM = 1;
X c = MAL13_MSG;
X goto REPLY_MARK;
X }
X else {
X ansi2("md", 0, 0);
X strcpy(rec_char, (UNSIGNED char *) stripped(user));
X printf("\n\n%s \"%s\" %s\n", MAL09_MSG, user, MAL10_MSG);
X ansi2("me", 0, 0);
X if(WEITERLEITEN == 0) unlink(TEP);
X unlink(REP);
X return -1;
X }
X }
X
X if(WEITERLEITEN != 0) goto ONCE_MORE;
X
X unlink(REP);
X
X if (EX_PM == 0) {
X ansi2("md", 0, 0);
X sprintf(s, "%s/usr/%d/.hello", HOME, receiver);
X printf("\n\n");
X show(s, 22, 0);
X ansi2("me", 0, 0);
X }
X else {
X strcpy(rec_char, arg);
X }
X
X if(checkdomaintype( rec_char ) != 0) return -1;
X
X if (REPLY != 0) {
X c = MAL13_MSG;
X goto REPLY_MARK;
X }
X printf("\n\n%c", CR);
X
X if(ROT13_MODUS){
X printf("%s ", MAL11aMSG);
X ansi2("md", 0, 0);
X printf("ROT13");
X ansi2("me", 0, 0);
X printf(" %s\n\n", MAL11bMSG);
X }
X ansi2("mr", 0, 0);
X printf("[%s \"%s\"] %s, ? > ", MAL11_MSG, rec_char, MAL12_MSG);
X ansi2("me", 0, 0);
X printf("%c%c", MAL13_MSG, BS);
X
X do {
X c = getint();
X if (c >= 97) c -= 32;
X if (c == '?') {
X clearline();
X ansi2("mr", 0, 0);
X printf("%c%s > ", CR, MAL16_MSG);
X ansi2("me", 0, 0);
X }
X if (c == ENTER) c = MAL13_MSG;
X if ((c != MAL13_MSG) && (c != MAL14_MSG) && (c != MAL15_MSG)) c = 0;
X } while (c == 0);
X
X printf("%c", c);
X
X if (c == MAL15_MSG) { /* REJECT / VERWERFEN */
X unlink(REP);
X unlink(TEP);
X printf("\n");
X return -1;
X }
X sprintf(TEP, "%s/M%d", TMP, getpid());
X sprintf(pubdir, "%s/dir%d", TMP, getpid());
X
X if (c == MAL14_MSG) { /* UPLOAD */
X clearline();
X ansi2("mr", 0, 0);
X printf("%c%s, ? > ", CR, MAL17_MSG);
X ansi2("me", 0, 0);
X
X do {
X protokoll = getint();
X if (protokoll >= 97) protokoll -= 32;
X if (protokoll == '?') {
X clearline();
X ansi2("mr", 0, 0);
X printf("%c%s > ", CR, MAL17aMSG);
X ansi2("me", 0, 0);
X }
X if ((protokoll != MAL18_MSG) && (protokoll != MAL18_MSG) &&
X (protokoll != MAL20_MSG) && (protokoll != MAL21_MSG))
X protokoll = 0;
X } while (protokoll == 0);
X
X printf("%c", protokoll);
X
X }
X printf("\n\n%c", CR);
X ansi2("mr", 0, 0);
X printf("%s ", MAL22_MSG);
X ansi2("me", 0, 0);
X printf(" %s (%s)\n%c", USER.name, USER.nick, CR);
X ansi2("mr", 0, 0);
X printf("%s ", MAL23_MSG);
X ansi2("me", 0, 0);
X printf(" %s\n%c", rec_char, CR);
X ansi2("mr", 0, 0);
X printf("%s ", MAL24_MSG);
X ansi2("me", 0, 0);
X printf(" ");
X strcpy(subject, (UNSIGNED char *) getline(50, -11, '.', ""));
X if(subject[0] == '\0'){
X strcpy(subject, (UNSIGNED char *) "Just another letter ...");
X printf("%s ", subject);
X }
X printf("\n");
X ansi2("mr", 0, 0);
X printf("%s ", MAL23aMSG);
X ansi2("me", 0, 0);
X printf(" ");
X strcpy(cc, (UNSIGNED char *) getline(50, -11, '.', ""));
X
X REPLY_MARK:
X
X if(checkdomaintype( rec_char ) != 0) return -1;
X
X if (c == MAL13_MSG) {
X security_ed( TEP );
X protokoll = '*';
X }
X else { /* UPLOAD */
X
X noctrlx();
X
X printf("\n\n%s\n\n", MAL25_MSG);
X ansi2("md", 0, 0);
X printf("%s", MAL26_MSG);
X ansi2("me", 0, 0);
X
X unlink( TEP );
X
X switch (protokoll) {
X case MAL18_MSG:
X fp = fopen(TEP, "w");
X if (fp == NULL) {
X nerror("mail.c", 268, "brief", "Can't write to", TEP);
X }
X c = 0;
X lf = CR;
X
X fputc(LF, fp);
X
X /*
X while ((c != CTRL_X) && (c != CTRL_D)) {
X */
X while ((c != CTRL_E) && (c != CTRL_D)) {
X c = getint();
X if ((c == CR) && (lf == CR)) fputc(LF, fp);
X if (c == CR) lf = CR;
X if (c == LF) lf = LF;
X /*
X if ((c != CTRL_X) && (c != CTRL_D) && (c != CR)) {
X fputc(c, fp);
X }
X */
X if ((c != CTRL_E) && (c != CTRL_D) && (c != CR)) {
X fputc(c, fp);
X }
X }
X fclose(fp);
X break;
X
X case MAL19_MSG:
X printf("\n");
X sprintf(s, "exec %s -c TimeTravelAgency", RX);
X break;
X case MAL20_MSG:
X printf("\n");
X sprintf(s, "exec %s", RB);
X break;
X case MAL21_MSG:
X printf("\n");
X sprintf(s, "exec %s", RZ);
X break;
X }
X if (protokoll != MAL18_MSG){
X mkdir( pubdir, 0777 );
X chdir( pubdir );
X
X system( s );
X
X chdir( HOME );
X sprintf(s, "mv %s/* %s", pubdir, TEP);
X system( s );
X sprintf(s, "rm -r %s", pubdir);
X system( s );
X }
X sync();
X ctrlx();
X stat(TEP, &fst);
X if (fst.st_size < 3L) {
X printf("\n\n%s\n", MAL27_MSG);
X control(MAL28_MSG, 3);
X unlink(REP);
X unlink(TEP);
X return -1;
X }
X if (prf(TEP) == 1) {
X printf("\n\n");
X ansi2( "md", 0, 0 );
X printf("%s", MAL25_MSG);
X ansi2( "me", 0, 0 );
X unlink(REP);
X unlink(TEP);
X BINFILE++;
X return -1;
X }
X else{
X mkix(TEP);
X }
X }
X
X sprintf(reply, "%s <%s@%s>", USER.name, username, UUCPID);
X
X ONCE_MORE:
X
X
X if((HOLD != 0) || ((WEITERLEITEN != 0) && (IS_BUFFERED != 0))) goto HOLD_MARK;
X
X printf("\n\n");
X ansi2("mr", 0, 0);
X printf("[%s \"%s\"] %s, ? > ", MAL11_MSG, rec_char, MAL28aMSG);
X ansi2("me", 0, 0);
X printf("%c%c", MAL29_MSG, BS);
X
X do {
X c = getint();
X if (c >= 97) c -= 32;
X if (c == '?') {
X clearline();
X ansi2("mr", 0, 0);
X printf("%c%s > ", CR, MAL32_MSG);
X ansi2("me", 0, 0);
X }
X if (c == ENTER) c = MAL29_MSG;
X if ((c != MAL29_MSG) && (c != MAL30_MSG) && (c != MAL30aMSG) && (c != MAL31_MSG) && (c != MAL31aMSG)) c = 0;
X } while (c == 0);
X
X printf("%c", c);
X
X if (c == MAL31_MSG) { /* CONTINUE / WEITERSCHREIBEN */
X security_ed( TEP );
X goto ONCE_MORE;
X }
X if (c == MAL30_MSG) { /* REJECT / VERWERFEN */
X printf("\n");
X unlink(TEP);
X unlink(REP);
X return -1;
X }
X if (c == MAL31aMSG) { /* HEADER */
X headline( MAL32aMSG );
X printf("\n");
X
X time(&timer);
X
X ansi2( "md", 0, 0 );
X printf("From: ");
X ansi2( "me", 0, 0 );
X printf("%s <%s@%s>\n", USER.name, username, UUCPID);
X
X ansi2( "md", 0, 0 );
X printf("Reply-To: ");
X ansi2( "me", 0, 0 );
X if(USER.level > GUEST_LEV){
X strcpy(reply, (UNSIGNED char *) getline(STRING, -1001, 32, reply));
X printf("\n");
X }
X else printf("%s\n", reply);
X
X ansi2( "md", 0, 0 );
X printf("Return-Receipt-To: ");
X ansi2( "me", 0, 0 );
X if(USER.level > GUEST_LEV){
X strcpy(receipt, (UNSIGNED char *) getline(STRING, -1001, 32, receipt));
X printf("\n");
X }
X
X i = 0; j = 0; /* Receiver: Realname */
X while(from[i] != '\0'){
X if(from[i] == '<'){
X strcpy(s, (UNSIGNED char *) strcopy(from, 0, (i-1)));
X j = i;
X }
X if(from[i] == '(') j = i+1;
X if(from[i] == ')') strcpy(s, (UNSIGNED char *) strcopy(from, j, (i-1)));
X i++;
X }
X if(j == 0) strcpy(s, from);
X
X if(mesg_id[0] != '\0'){
X ansi2( "md", 0, 0 );
X printf("In-Reply-To: ");
X ansi2( "me", 0, 0 );
X printf("%s; ", (UNSIGNED char *) stripped(mesg_id));
X printf("from \"%s\" at %s", (UNSIGNED char *) stripped(s), date);
X
X if(refs[0] != '\0')
X sprintf(s, "%s ", stripped(refs));
X else
X s[0] = '\0';
X strcat(s, mesg_id);
X ansi2( "md", 0, 0 );
X printf("References: ");
X ansi2( "me", 0, 0 );
X printf("%s\n", s);
X }
X
X ansi2( "md", 0, 0 );
X printf("To: ");
X ansi2( "me", 0, 0 );
X if(USER.level > GUEST_LEV){
X strcpy(rec_char, (UNSIGNED char *) getline(STRING, -1001, 32, rec_char));
X printf("\n");
X }
X else printf("%s\n", rec_char);
X
X ansi2( "md", 0, 0 );
X printf("Cc: ");
X ansi2( "me", 0, 0 );
X if(USER.level > GUEST_LEV){
X strcpy(cc, (UNSIGNED char *) getline(STRING, -1001, 32, cc));
X printf("\n");
X }
X else printf("%s\n", cc);
X
X ansi2( "md", 0, 0 );
X printf("Bcc: ");
X ansi2( "me", 0, 0 );
X if(USER.level > GUEST_LEV){
X strcpy(bcc, (UNSIGNED char *) getline(STRING, -1001, 32, bcc));
X printf("\n");
X }
X else printf("%s\n", bcc);
X
X
X ansi2( "md", 0, 0 );
X printf("Subject: ");
X ansi2( "me", 0, 0 );
X if(USER.level > GUEST_LEV){
X strcpy(subject, (UNSIGNED char *) getline(STRING, -1001, 32, subject));
X printf("\n");
X }
X else printf("%s\n", subject);
X
X ansi2( "md", 0, 0 );
X printf("Keywords: ");
X ansi2( "me", 0, 0 );
X if(USER.level > GUEST_LEV){
X strcpy(keywords, (UNSIGNED char *) getline(STRING, -1001, 32, keywords));
X printf("\n");
X }
X else printf("%s\n", keywords);
X
X ansi2( "md", 0, 0 );
X printf("Comments: ");
X ansi2( "me", 0, 0 );
X if(USER.level > GUEST_LEV){
X strcpy(comments, (UNSIGNED char *) getline(STRING, -1001, 32, comments));
X printf("\n");
X }
X else printf("%s\n", comments);
X
X ansi2( "md", 0, 0 );
X printf("Encrypted: ");
X ansi2( "me", 0, 0 );
X if(USER.level > GUEST_LEV){
X strcpy(encrypted, (UNSIGNED char *) getline(STRING, -1001, 32, encrypted));
X printf("\n");
X }
X else printf("%s\n", encrypted);
X
X#ifdef _MULTIMEDIA
X ansi2( "md", 0, 0 );
X printf("MIME-Version: ");
X ansi2( "me", 0, 0 );
X printf("%s\n", MIME_VERSION);
X
X if(USER.level >= WRITE_INTERNAT){
X if(content[0] == '\0')
X strcpy(content, (UNSIGNED char *) "text/plain; charset=us-ascii");
X ansi2( "md", 0, 0 );
X printf("Content-Type: ");
X ansi2( "me", 0, 0 );
X strcpy(content, (UNSIGNED char *) getline(STRING, -1001, 32, content));
X printf("\n");
X }
X#endif
X
X ansi2( "md", 0, 0 );
X printf("X-Mailer: ");
X ansi2( "me", 0, 0 );
X printf("%s %s %s\n", VERSION, PATCHLEVEL, AUTOR);
X
X ansi2( "md", 0, 0 );
X printf("Priority: ");
X ansi2( "me", 0, 0 );
X if(USER.level > GUEST_LEV){
X strcpy(priority, (UNSIGNED char *) getline(STRING, -1001, 32, priority));
X printf("\n");
X }
X else printf("%s\n", priority);
X
X ansi2( "md", 0, 0 );
X printf("Action: ");
X ansi2( "me", 0, 0 );
X if(USER.level > GUEST_LEV){
X strcpy(action, (UNSIGNED char *) getline(STRING, -1001, 32, action));
X printf("\n");
X }
X else printf("%s\n", action);
X
X ansi2( "md", 0, 0 );
X printf("X-Fortune: ");
X ansi2( "me", 0, 0 );
X if(USER.level > GUEST_LEV){
X strcpy(fortune, (UNSIGNED char *) getline(STRING, -1001, 32, fortune));
X printf("\n");
X }
X else printf("%s\n", fortune);
X
X
X ansi2( "md", 0, 0 );
X printf("Message-Id: ");
X ansi2( "me", 0, 0 );
X printf("<%x.%d@%s>\n", timer, USER.id, UUCPID);
X
X goto ONCE_MORE;
X }
X
X
X HOLD_MARK:
X
X if((UMLEITUNG == 0) && (WEITERLEITEN == 0) && (strcomp(TMP, TEP) == 0)){
X sprintf(s, "cp %s %s/usr/%c/%d/.lastletter > /dev/null", TEP, HOME, USER.name[0], USER.id);
X system( s );
X sprintf(s, "%s/usr/%c/%d/.lastsubject", HOME, USER.name[0], USER.id);
X fp = fopen( s, "w" );
X if(fp == NULL){
X nerror("mail.c", 500, "brief", "Can't write to", s);
X }
X fprintf(fp, "%s", subject);
X fclose(fp);
X }
X
X
X if (EX_PM == 0) {
X
X if(rec_char[0] >= 'a') rec_char[0] -= 32;
X
X sprintf(s, "%s/usr/%c/%d/seq", HOME, rec_char[0], receiver);
X maybe_locked(s, "r"); mblock(s);
X fp = fopen(s, "r");
X if (fp == NULL) {
X nerror("mail.c", 431, "brief", "Can't read", s);
X }
X fscanf(fp, "%d", &mail_id);
X fclose(fp);
X fp = fopen(s, "w");
X fprintf(fp, "%d\n", (mail_id + 1));
X fclose(fp);
X mbunlock(s);
X sprintf(s, "%s/usr/%c/%d/%d", HOME, rec_char[0], receiver, mail_id);
X }
X else {
X umask(0000);
X sprintf(s, "%s/%d.expm", TMP, getpid());
X }
X
X
X fp = fopen(s, "w");
X
X if (EX_PM == 0) {
X sprintf(s, "%s %s (%s)\n", GBL01_MSG, USER.name, USER.nick);
X fputs(s, fp);
X
X time(&timer);
X timeptr = localtime(&timer);
X strcpy(t, asctime(timeptr));
X
X sprintf(s, "%s %s", GBL02_MSG, t);
X fputs(s, fp);
X
X sprintf(s, "%s %s\n\n", GBL03_MSG, subject);
X fputs(s, fp);
X
X fputs("Content-Type: text/richtext;\n", fp);
X
X lines = 5;
X }
X else {
X lines = 4;
X }
X
X ff = fopen(TEP, "r");
X if (ff == 0) {
X printf("\n\n");
X ansi2("md", 0, 0);
X printf("%s\n", MAL33_MSG);
X ansi2("me", 0, 0);
X control(MAL34_MSG, 3);
X return;
X }
X stat(TEP, &fst);
X cont_length = fst.st_size;
X
X if(EX_PM != 0){
X
X time(&timer);
X
X i = 0; j = 0; /* Receiver: Realname */
X while(from[i] != '\0'){
X if(from[i] == '<'){
X strcpy(s, (UNSIGNED char *) strcopy(from, 0, (i-1)));
X j = i;
X }
X if(from[i] == '(') j = i+1;
X if(from[i] == ')') strcpy(s, (UNSIGNED char *) strcopy(from, j, (i-1)));
X i++;
X }
X if(j == 0) strcpy(s, from);
X
X fprintf(fp, "From: %s@%s (%s)\n", username, UUCPID, USER.name);
X if(reply[0] != '\0')
X fprintf(fp, "Reply-To: %s\n", reply);
X if(receipt[0] != '\0')
X fprintf(fp, "Return-Receipt-To: %s\n", receipt);
X fprintf(fp, "Organization: %s\n", ORGANIZATION);
X if(mesg_id[0] != '\0'){
X fprintf(fp, "In-Reply-To: %s; ", (UNSIGNED char *) stripped(mesg_id));
X fprintf(fp, "from \"%s\" at %s", (UNSIGNED char *) stripped(s), date);
X if(refs[0] != '\0')
X sprintf(s, "%s ", stripped(refs));
X else
X s[0] = '\0';
X strcat(s, mesg_id);
X fprintf(fp, "References: %s\n", s);
X }
X fprintf(fp, "To: %s\n", rec_char);
X if(cc[0] != '\0')
X fprintf(fp, "Cc: %s\n", cc);
X
X sprintf(s, "%s/usr/%c/%d/.face", HOME, USER.name[0], USER.id); /* X-Face ??? */
X ft = fopen( s, "r" );
X if(ft != NULL){
X while(fgets(s, 70, ft) != NULL){
X fprintf(fp, "X-Face: %s\n", (UNSIGNED char *) stripped(s));
X }
X fclose(ft);
X }
X
X if(subject[0] != '\0')
X fprintf(fp, "Subject: %s\n", subject);
X if(keywords[0] != '\0')
X fprintf(fp, "Keywords: %s\n", keywords);
X if(comments[0] != '\0')
X fprintf(fp, "Comments: %s\n", comments);
X if(encrypted[0] != '\0')
X fprintf(fp, "Encrypted: %s\n", encrypted);
X
X#ifdef _MULTIMEDIA
X fprintf(fp, "MIME-Version: %s\n", MIME_VERSION);
X if(content[0] != '\0'){
X fprintf(fp, "Content-Type: %s\n", content);
X if(UMLAUT_MODUS < 3) fprintf(fp, "Content-Transfer-Encoding: 8bit\n");
X fprintf(fp, "Content-Length: %ld\n", cont_length);
X }
X#endif
X fprintf(fp, "X-Mailer: %s %s %s\n", VERSION, PATCHLEVEL, AUTOR);
X if(priority[0] != '\0')
X fprintf(fp, "Priority: %s\n", priority);
X if(action[0] != '\0')
X fprintf(fp, "Action: %s\n", action);
X if(fortune[0] != '\0')
X fprintf(fp, "X-Fortune: %s\n", fortune);
X fprintf(fp, "Message-Id: <%x.%d@%s>\n", timer, USER.id, UUCPID);
X if(delivery[0] != '\0')
X fprintf(fp, "X-Delivered-After: %s\n", delivery);
X fputs("\n", fp);
X
X }
X
X UMLAUT_MODUS = 1;
X if(WEITERLEITEN == 0) printf(" %-4.4d", lines);
X while (fgets(s, STRING, ff) != 0) {
X if(ROT13_MODUS) strcpy(s, (UNSIGNED char *) rot13( s ));
X fputs((UNSIGNED char *) iso_line(s), fp);
X lines++;
X if(WEITERLEITEN == 0) printf("%c%c%c%c%-4.4d", BS, BS, BS, BS, lines);
X }
X fclose(ff);
X
X if(UMLEITUNG == 0){
X sprintf(s, "%s/usr/%c/%d/.signature", HOME, USER.name[0], USER.id);
X ff = fopen(s, "r");
X if (ff != NULL) {
X while (fgets(s, STRING, ff) != 0) {
X if(ROT13_MODUS) strcpy(s, (UNSIGNED char *) rot13( s ));
X fputs((UNSIGNED char *) iso_line(s), fp);
X lines++;
X if(KOPIE == 0) printf("%c%c%c%c%-4.4d", BS, BS, BS, BS, lines);
X }
X fclose(ff);
X }
X }
X
X UMLAUT_MODUS = USER.schluessel[2];
X
X if(WEITERLEITEN == 0) unlink(TEP);
X fclose(fp);
X
X if (EX_PM == 0) {
X sprintf(s, "%s/usr/%c/%d/INDEX", HOME, rec_char[0], receiver);
X maybe_locked(s, "r");
X fp = fopen(s, "a");
X if (fp == NULL) {
X nerror("mail.c", 527, "brief", "Can't append to", s);
X }
X sprintf(s, "%d ", mail_id);
X s[6] = '\0';
X if(HOLD != 0){
X s[5] = '>';
X }
X fputs(s, fp);
X
X sprintf(ex, "%s ", subject);
X ex[26] = '\0';
X fputs(ex, fp);
X
X sprintf(ex, " %s ", USER.name);
X ex[22] = '\0';
X fputs(ex, fp);
X
X strcpy(s, (UNSIGNED char *) mydate(1));
X strcpy(t, (UNSIGNED char *) mytime(1));
X sprintf(ex, " %s %s ", s, t);
X ex[19] = '\0';
X fputs(ex, fp);
X
X if(HOLD != 0)
X sprintf(s, "%s\n", LE216_MSG);
X else{
X if(priority[0] != '\0')
X sprintf(s, "%s\n", LE219_MSG);
X else
X sprintf(s, "%s\n", LE215_MSG);
X }
X
X fputs(s, fp);
X
X fclose(fp);
X }
X else {
X sprintf(s, " X-Mail via UUCP (%s) ", rec_char);
X headline(s);
X printf("\n%s", MAL35_MSG);
X sprintf(s, "%s/%d.expm", TMP, getpid());
X sprintf(t, "/bin/sh ./etc/rmail.sh %s %s > /dev/null 2>&1", s, rec_char);
X system(t);
X unlink(s);
X unlink(f);
X umask(0007);
X printf(" %s\n", MAL36_MSG);
X }
X
X unlink(REP);
X if((UMLEITUNG == 0) && (WEITERLEITEN == 0)) unlink(TEP);
X
X sprintf(s, "%s \"%s\" %s", MAL11_MSG, rec_char, MAL37_MSG);
X control(s, 3);
X
X printf("\n");
X
X
X#ifdef _PMCOPY
X
X IS_BUFFERED = 0;
X
X if(WEITERLEITEN == 0){
X if((strcomp(POSTMASTER, LOOSER.sh_name) == 0) || (strcomp(POSTMASTER, LOOSER.nick) == 0)){
X if(bcc[0] != '\0') strcat(bcc, ", ");
X sprintf(s, "%s!root", UUCPSITE);
X strcat(bcc, (UNSIGNED char *) s);
X IS_BUFFERED = 1;
X }
X }
X#endif
X
X if((cc[0] != '\0') || (bcc[0] != '\0')){
X carboncopy(cc, bcc);
X }
X
X return 0;
X}
END_OF_FILE
if test 24817 -ne `wc -c <'mbox/src/mail.c'`; then
echo shar: \"'mbox/src/mail.c'\" unpacked with wrong size!
fi
# end of 'mbox/src/mail.c'
fi
if test -f 'mbox/src/misc.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'mbox/src/misc.c'\"
else
echo shar: Extracting \"'mbox/src/misc.c'\" \(24307 characters\)
sed "s/^X//" >'mbox/src/misc.c' <<'END_OF_FILE'
X/* ix/MBox (misc.c) by Volker Schuermann, 04.12.1993
X
X This C source code contains the following functions:
X
X #SC scanner() switching from one newsgroup to another
X #SN schreiben() write news articles
X #PF prf() is the uploaded file a text or a binaries?
X #PR pruefe() contains an article the BINFILE key?
X
X Contact <volkers@unnet.wupper.de> for help! */
X
X
X
X
X
X
X
X#include <sys/types.h>
X#include <sys/stat.h>
X#include <unistd.h>
X#include <fcntl.h>
X#include <stdio.h>
X#include <utmp.h>
X#include <time.h>
X
X
X#include "mbox.h"
X
X
Xextern UNSIGNED char headinfo[STRING];
X
X
Xint lastpoint( name )
XUNSIGNED char name[];
X{
X int a = 0, b = 0;
X
X while(name[a] != '\0'){
X if(name[a] == '.') b = a;
X a++;
X }
X if(b == 0) return a;
X
X return (int) b;
X}
X
X
X
X/* #SC - Changing the current newsgroup.
X
X [mode] -> > 255 = all boards (ignore date)
X > 500 = next AREA
X > 1000 = no idea (next hiearchy, maybe)
X + = next board
X - = previous board */
X
Xvoid scanner(mode)
Xint mode;
X{
X FILE *fp;
X UNSIGNED char s[STRING];
X UNSIGNED char t[STRING];
X UNSIGNED char f[STRING];
X UNSIGNED char prevg[STRING];
X UNSIGNED char prevf[STRING];
X int ok = 0, a, b;
X int line = 0, l = 0;
X int locmod = 0;
X int max = 0;
X int widerange = 0;
X
X
X if (mode >= 1000) {
X widerange = 1000;
X mode -= 1000;
X }
X
X if (mode >= 500) {
X locmod = 500;
X mode -= 500;
X }
X
X if (mode >= 255) {
X locmod = 255;
X mode -= 255;
X }
X KEIN_ZUGRIFF:
X
X if (locmod == 255) {
X maybe_locked(SGROUPS, "r");
X fp = fopen(SGROUPS, "r");
X if (fp == NULL) {
X nerror("misc.c", 26, "scanner", "Can't read", NGROUPS);
X }
X }
X else {
X maybe_locked(UGROUPS, "r");
X fp = fopen(UGROUPS, "r");
X if (fp == NULL) {
X nerror("misc.c", 34, "scanner", "Can't read", UGROUPS);
X }
X }
X
X f[0] = '\0';
X ok = 0;
X strcpy(prevg, "L.I.S.A.");
X
X while ((ok == 0) && (fscanf(fp, "%s %d %d %s", s, &a, &a, t) > 0)) {
X l++;
X if (strcomp(NG, s) == 0) {
X ok = 1;
X }
X else {
X strcpy(f, (UNSIGNED char *) s);
X
X if(strcomp(prevg, s) != 0){
X if(widerange == 0){
X a = lastpoint( s );
X strcpy(prevg, (UNSIGNED char *) s);
X strcpy(prevf, (UNSIGNED char *) s);
X prevg[a] = '\0';
X }
X else{
X strcpy(prevg, (UNSIGNED char *) s); prevg[3] = '\0';
X strcpy(prevf, (UNSIGNED char *) s);
X }
X }
X }
X }
X
X if (locmod == 500) {
X if (mode == '+') {
X ok = 0;
X
X if(widerange == 0){
X a = lastpoint( NG );
X strcpy(prevg, (UNSIGNED char *) NG);
X prevg[a] = '\0';
X }
X else{
X strcpy(prevg, (UNSIGNED char *) NG);
X prevg[3] = '\0';
X }
X
X while ((ok == 0) && (fscanf(fp, "%s %d %d %s", s, &a, &a, t) > 0)) {
X l++;
X if (strcomp(prevg, s) != 0) {
X ok = 1;
X strcpy(f, (UNSIGNED char *) s);
X }
X }
X if(ok == 0) line = -1;
X }
X if (mode == '-') {
X strcpy(f, (UNSIGNED char *) prevf);
X }
X }
X else{
X if (mode == '+') {
X if (fscanf(fp, "%s %d %d %s", f, &a, &a, t) < 1) {
X if (ok == 0) {
X rewind(fp);
X fscanf(fp, "%s %d %d %s", f, &a, &a, t);
X }
X else {
X line = -1;
X }
X }
X }
X if (mode == '-') {
X if (f[0] == '\0') {
X rewind(fp);
X while (fscanf(fp, "%s %d %d %s", f, &a, &a, t) > 0);
X }
X }
X }
X fclose(fp);
X
X if (max == 20) {
X ansi2( "md", 0, 0 );
X printf("\n\n%s", MIS00_MSG);
X ansi2( "me", 0, 0 );
X }
X
X if ((line == -1) || (f[0] == '\0')) {
X strcpy(BRETT, (UNSIGNED char *) "PM");
X printf("\n");
X sprintf(NG, "%s.PM", USER.name);
X sprintf(INHALT, "%s/usr/%c/%d/INDEX", HOME, USER.name[0], USER.id);
X return;
X }
X if (l == 0) {
X ansi2("md", 0, 0);
X printf(" %s\n", MIS01_MSG);
X ansi2("me", 0, 0);
X return;
X }
X if ((chk_newsgrp(f) != 0) || (is_subscribed(f) != 1)) {
X sprintf(NG, "%s", f);
X max++;
X goto KEIN_ZUGRIFF;
X }
X brett(f);
X}
X
X
X
X
X
X
X/* #SN - Write an article for the news system.
X
X [arg] seems to be a dummy ... don't comment on this! */
X
Xvoid schreiben(arg)
XUNSIGNED char arg[];
X{
X FILE *fp;
X FILE *ff;
X FILE *fl;
X UNSIGNED char s[STRING];
X UNSIGNED char t[STRING];
X UNSIGNED char f[STRING];
X UNSIGNED char g[LSTRING];
X UNSIGNED char ex[LONGSTRING];
X UNSIGNED char cmdl[STRING];
X UNSIGNED char rep[STRING];
X UNSIGNED char subj[STRING];
X UNSIGNED char keyw[STRING];
X UNSIGNED char summ[STRING];
X UNSIGNED char from[STRING];
X UNSIGNED char msid[STRING];
X UNSIGNED char refs[STRING];
X UNSIGNED char tmp[STRING];
X UNSIGNED char ng[STRING];
X UNSIGNED char reply[STRING];
X UNSIGNED char group[STRING];
X UNSIGNED char newsgroups[STRING];
X UNSIGNED char distribution[STRING];
X UNSIGNED char followup[STRING];
X UNSIGNED char expires[STRING];
X UNSIGNED char ctrl[STRING];
X UNSIGNED char sender[STRING];
X UNSIGNED char approved[STRING];
X UNSIGNED char content[STRING];
X UNSIGNED char iam[STRING];
X UNSIGNED char username[STRING];
X
X int i, j, a, b, ok;
X int app, endless;
X int lines;
X
X UNSIGNED char protokoll = 0;
X UNSIGNED char c;
X UNSIGNED char lf;
X
X int BINFILE;
X
X struct stat fst;
X
X UNSIGNED char pubdir[STRING];
X long tdummy;
X long tn, ts;
X
X if (strcomp(BRETT, "PM") == 0) {
X brief( arg );
X return;
X }
X BINFILE = 0;
X
X if (moderated( NG ) == 1) return;
X
X i = 0; /* Vorname.Name */
X strcpy(ng, USER.name);
X while (ng[i] != '\0') {
X if (ng[i] == ' ') ng[i] = '.';
X i++;
X }
X strcpy(username, ng);
X strcpy(group, NG);
X
X
X umask(0000);
X
X if (arg[0] == '\0') {
X
X subj[0] = '\0';
X keyw[0] = '\0';
X from[0] = '\0';
X msid[0] = '\0';
X summ[0] = '\0';
X refs[0] = '\0';
X
X sprintf(rep, "%s/%dRep", TMP, getpid());
X
X fp = fopen(rep, "r");
X if (fp != NULL) { /* REPLY */
X while ((fgets(s, STRING, fp) != NULL) && (strlen(s) > 2)) {
X if (strcomp("Subject:", s) == 0) {
X strcat(subj, strcopy(s, 8, 79));
X strcpy(subj, (UNSIGNED char *) stripped(subj));
X }
X if (strcomp("From:", s) == 0) {
X from[0] = '\0';
X strcat(from, strcopy(s, 6, 79));
X strcpy(from, (UNSIGNED char *) stripped(from));
X }
X if (strcomp("Reply-To:", s) == 0) {
X from[0] = '\0';
X strcat(from, strcopy(s, 10, 79));
X strcpy(from, (UNSIGNED char *) stripped(from));
X }
X if (strcomp("Keywords:", s) == 0) {
X strcat(keyw, strcopy(s, 10, 79));
X strcpy(keyw, (UNSIGNED char *) stripped(keyw));
X }
X if (strcomp("Summary:", s) == 0) {
X strcat(summ, strcopy(s, 9, 79));
X strcpy(summ, (UNSIGNED char *) stripped(summ));
X }
X if (strcomp("Message-ID:", s) == 0) {
X strcat(msid, strcopy(s, 11, 79));
X strcpy(msid, (UNSIGNED char *) stripped(msid));
X }
X if (strcomp("Content-Type:", s) == 0) {
X strcat(content, strcopy(s, 14, 79));
X strcpy(content, (UNSIGNED char *) stripped(content));
X }
X if (strcomp("Article-I.D.:", s) == 0) {
X strcat(msid, strcopy(s, 13, 79));
X strcpy(msid, (UNSIGNED char *) stripped(msid));
X }
X if (strcomp("References:", s) == 0) {
X strcat(refs, strcopy(s, 12, 79));
X strcpy(refs, (UNSIGNED char *) stripped(refs));
X }
X if (strcomp("Followup-To:", s) == 0) {
X strcpy(group, strcopy(s, 13, 79));
X strcpy(group, (UNSIGNED char *) stripped(group));
X }
X
X /* THE FOLLOWING IS A LOUSY TRICK, EATING HEADER INFORMATION! */
X
X while(strlen(s) == (STRING - 1)){
X fgets(s, STRING, fp);
X }
X }
X
X if(strcomp("Poster", group) == 0){
X printf(" <- %s\n", MIS02aMSG);
X return;
X }
X
X
X sprintf(t, "%s/A%d", TMP, getpid());
X ff = fopen(t, "w");
X
X a = 0;
X b = 0;
X i = 0;
X while (from[i] != '\0') {
X if (from[i] == '(') a = i + 1;
X if (from[i] == ')') b = i - 1;
X i++;
X }
X if (a < b) {
X strcpy(s, (UNSIGNED char *) strcopy(from, a, b));
X strcpy(from, (UNSIGNED char *) s);
X }
X sprintf(ex, "In article %s,\n %s writes:\n\n", msid, from);
X fputs(ex, ff);
X
X a = 0; printf(" %-4.4d", a );
X
X while (fgets(s, STRING, fp) != NULL) {
X
X a++;
X printf("%c%c%c%c%-4.4d", BS, BS, BS, BS, a );
X
X if((s[0] != '\n') && (i == 0)){
X
X if(s[0] != '>')
X fputs("> ", ff);
X else{
X if(strcomp("> ", s) == 0){
X s[1] = '>';
X }
X else fputs(">", ff);
X }
X }
X
X if(s[0] != '>'){
X
X if(i >= 65){
X fputs("\n> ", ff);
X i = 0;
X }
X
X endless = 0;
X
X BETTER_TWICE:
X
X if((strlen(s) + i) > 65){
X j = 65 - i;
X i = 0;
X ok = 0;
X while((ok == 0) && (j > 0)){
X if(s[j] == ' '){
X fputs((UNSIGNED char *) iso_line( (UNSIGNED char *) strcopy(s, 0, (j-1))), ff);
X fputs("\n> ", ff);
X strcpy(f, (UNSIGNED char *) stripped( strcopy(s, (j+1), strlen(s))));
X strcpy(s, (UNSIGNED char *) f);
X strcat(s, (UNSIGNED char *) " ");
X i = strlen(s);
X ok++;
X }
X j--;
X }
X if((j == 0) && (ok == 0)){
X fputs("\n> ", ff);
X endless++;
X if(endless == 1) goto BETTER_TWICE;
X }
X }
X else{
X i = 0;
X }
X }
X
X fputs((UNSIGNED char *) iso_line(s), ff);
X }
X fclose(fp);
X fclose(ff);
X
X
X printf("\n\n");
X security_ed( t );
X if (strcomp("Re:", subj) != 0) {
X sprintf(f, "Re: %s", stripped(subj));
X strcpy(subj, (UNSIGNED char *) f);
X }
X unlink(rep);
X }
X else { /* Interactive Articles */
X
X printf("\n\n%c", CR);
X
X if(ROT13_MODUS){
X printf("%s ", MIS02bMSG);
X ansi2("md", 0, 0);
X printf("ROT13");
X ansi2("me", 0, 0);
X printf(" %s\n\n", MIS02cMSG);
X }
X
X ansi2("mr", 0, 0);
X printf("%s", MIS03_MSG);
X ansi2("me", 0, 0);
X printf(" %s (%s)\n%c", USER.name, USER.nick, CR);
X ansi2("mr", 0, 0);
X printf("%s", MIS04_MSG);
X ansi2("me", 0, 0);
X printf(" %s\n%c", NG, CR);
X ansi2("mr", 0, 0);
X printf("%s", MIS05_MSG);
X ansi2("me", 0, 0);
X printf(" ");
X strcpy(subj, (UNSIGNED char *) getline(57, -11, '.', ""));
X if(subj[0] == '\0'){
X strcpy(subj, (UNSIGNED char *) "Yet another article ...");
X printf("%s ", subj);
X }
X
X printf("\n");
X ansi2("mr", 0, 0);
X printf("%s", MIS06_MSG);
X ansi2("me", 0, 0);
X printf(" ");
X strcpy(keyw, (UNSIGNED char *) getline(57, -11, '.', ""));
X printf("\n");
X ansi2("mr", 0, 0);
X printf("%s", MIS07_MSG);
X ansi2("me", 0, 0);
X printf(" ");
X strcpy(summ, (UNSIGNED char *) getline(57, -11, '.', ""));
X
X printf("\n\n");
X ansi2("mr", 0, 0);
X printf("[%s] %s ? > ", NG, MIS08_MSG);
X ansi2("me", 0, 0);
X printf("%c%c", MIS09_MSG, BS);
X
X do {
X c = getint();
X if (c >= 97) c -= 32;
X if (c == '?') {
X clearline();
X ansi2("mr", 0, 0);
X printf("%c%s > ", CR, MIS12_MSG);
X ansi2("me", 0, 0);
X }
X if (c == ENTER) c = MIS09_MSG;
X if ((c != MIS09_MSG) && (c != MIS10_MSG) && (c != MIS11_MSG)) c = 0;
X } while (c == 0);
X
X printf("%c", c);
X
X if (c == MIS11_MSG) { /* REJECT / VERWERFEN */
X printf("\n");
X unlink(t);
X return;
X }
X if (c == MIS10_MSG) { /* UPLOAD */
X printf("%c ", CR);
X ansi2("mr", 0, 0);
X printf("%c%s, ? > ", CR, MIS13_MSG);
X ansi2("me", 0, 0);
X
X do {
X protokoll = getint();
X if (protokoll >= 97) protokoll -= 32;
X if (protokoll == '?') {
X clearline();
X ansi2("mr", 0, 0);
X printf("%c%s > ", CR, MIS14_MSG);
X ansi2("me", 0, 0);
X }
X if ((protokoll != MIS15_MSG) && (protokoll != MIS15_MSG) &&
X (protokoll != MIS18_MSG) && (protokoll != MIS17_MSG ))
X protokoll = 0;
X } while (protokoll == 0);
X
X printf("%c", protokoll);
X
X }
X sprintf(tmp, "%s/A%d", TMP, getpid());
X sprintf(pubdir, "%s/dir%d", TMP, getpid());
X strcpy(cmdl, (UNSIGNED char *) tmp);
X
X if (c == MIS09_MSG) { /* SEND / SCHREIBEN */
X strcpy(cmdl, (UNSIGNED char *) tmp);
X security_ed( cmdl );
X protokoll = '*';
X }
X else { /* UPLOAD */
X
X noctrlx();
X
X printf("\n\n");
X ansi2("md", 0, 0);
X printf("%s", MIS19_MSG);
X ansi2("me", 0, 0);
X
X switch (protokoll) {
X case MIS15_MSG:
X fp = fopen(tmp, "w");
X if (fp == NULL) {
X nerror("misc.c", 310, "schreiben", "Can't write to", tmp);
X }
X c = 0;
X lf = CR;
X fputc(LF, fp);
X
X /*
X while ((c != CTRL_X) && (c != CTRL_D)) {
X */
X while ((c != CTRL_E) && (c != CTRL_D)) {
X c = getint();
X if ((c == CR) && (lf == CR))
X fputc(LF, fp);
X if (c == CR) lf = CR;
X if (c == LF) lf = LF;
X /*
X if ((c != CTRL_X) && (c != CTRL_D) && (c != CR)) {
X fputc(c, fp);
X }
X */
X if ((c != CTRL_E) && (c != CTRL_D) && (c != CR)) {
X fputc(c, fp);
X }
X }
X fclose(fp);
X break;
X case MIS16_MSG:
X printf("\n");
X sprintf(s, "exec %s -c TimeTravelAgency 2> /dev/null", RX);
X break;
X case MIS17_MSG:
X printf("\n");
X sprintf(s, "exec %s 2> /dev/null", RB);
X break;
X case MIS18_MSG:
X printf("\n");
X sprintf(s, "exec %s 2> /dev/null", RZ);
X break;
X }
X if (protokoll != MIS15_MSG){
X mkdir( pubdir, 0777 );
X chdir( pubdir );
X
X time(&ts);
X system( s );
X time(&tn); tn = tn - ts;
X tn -= 10; /* 10 = "Toleranz" */
X
X chdir( HOME );
X sprintf(s, "mv %s/* %s", pubdir, tmp);
X system( s );
X sprintf(s, "rm -r %s", pubdir);
X system( s );
X }
X sync();
X ctrlx();
X stat(tmp, &fst);
X if (fst.st_size < 3L) {
X printf("\n\n%s\n", MIS20_MSG);
X control(MIS21_MSG, 3);
X unlink(tmp);
X return;
X }
X if (prf(tmp) == 1) {
X if (strcomp(PDNG, NG) == 0) {
X USER.upratio += ((long) fst.st_size / 1024);
X }
X BINFILE++;
X sprintf(s, MIS22_MSG);
X }
X else{
X mkix(tmp);
X sprintf(s, MIS23_MSG);
X }
X ansi2( "md", 0, 0 );
X printf("\n\n%ld %s %s %s.\n", fst.st_size, MIS24_MSG, s, MIS25_MSG);
X ansi2( "me", 0, 0 );
X if(tn < 1) tn = 1L;
X printf("%s %d cps (ca. %d bps).", MIS26_MSG,
X (fst.st_size / tn), ((fst.st_size / tn) * 11));
X }
X }
X
X sprintf(iam, "%s <%s@%s>", USER.name, username, UUCPID);
X /*
X sprintf(reply, "%s@%s (%s)", username, UUCPID, USER.name);
X */
X strcpy(newsgroups, group);
X if (USER.level < WRITE_EX_LEV) {
X strcpy(distribution, "local");
X }
X else {
X /*
X strcpy(ng, NG);
X i = 0;
X while ((ng[i] != '.') && (ng[i] != '\0')) i++;
X ng[i] = '\0';
X strcpy(distribution, ng);
X */
X strcpy(distribution, "world");
X }
X if(refs[0] != '\0') strcat(refs, " ");
X strcat(refs, msid);
X followup[0] = '\0';
X sender[0] = '\0';
X ctrl[0] = '\0';
X expires[0] = '\0';
X approved[0] = '\0';
X app = 0;
X content[0] = '\0';
X
X#if defined(_MULTIMEDIA) && defined(_UMLAUT)
X strcpy(content, (UNSIGNED char *) "text/plain; charset=iso-8859-1");
X#endif
X
X ONCE_MORE:
X
X printf("\n\n");
X ansi2("mr", 0, 0);
X if(BINFILE == 0){
X printf("[%s] %s, ? > ", NG, MIS27_MSG);
X }
X else{
X printf("[%s] %s, ? > ", NG, MIS28_MSG);
X }
X ansi2("me", 0, 0);
X printf("%c%c", MIS29_MSG, BS);
X
X do {
X c = getint();
X if (c >= 97) c -= 32;
X if (c == '?') {
X clearline();
X ansi2("mr", 0, 0);
X if(BINFILE == 0){
X printf("%c%s > ", CR, MIS32_MSG);
X }
X else{
X printf("%c%s > ", CR, MIS33_MSG);
X }
X ansi2("me", 0, 0);
X }
X if (c == ENTER) c = MIS29_MSG;
X if ((c != MIS29_MSG) && (c != MIS30_MSG) && (c != MIS31_MSG) && (c != MIS31aMSG)) c = 0;
X } while (c == 0);
X
X printf("%c", c);
X if (c == MIS30_MSG) { /* REJECT / VERWERFEN */
X unlink(f);
X unlink(s);
X unlink(t);
X unlink(tmp); /* ??? */
X unlink(rep);
X printf("\n");
X return;
X }
X if ((c == MIS31_MSG) && (BINFILE == 0)) { /* REEDIT / WEITERSCHREIBEN */
X security_ed( cmdl );
X goto ONCE_MORE;
X }
X if (c == MIS31aMSG) { /* HEADER */
X headline( MIS38aMSG );
X printf("\n");
X time(&tdummy);
X
X ansi2( "md", 0, 0 );
X printf("From: ");
X ansi2( "me", 0, 0 );
X if(USER.level > ADMIN_LEV){
X strcpy(s, (UNSIGNED char *) getline(80, -1001, 32, iam));
X if(strcomp(s, iam) != 0) app++;
X if(s[0] != '\0') strcpy(iam, s);
X printf("\n");
X }
X else printf("%s\n", iam);
X
X ansi2( "md", 0, 0 );
X printf("Reply-To: ");
X ansi2( "me", 0, 0 );
X if(USER.level > GUEST_LEV){
X strcpy(reply, (UNSIGNED char *) getline(80, -1001, 32, reply));
X printf("\n");
X }
X else printf("%s\n", reply);
X
X ansi2( "md", 0, 0 );
X printf("Sender: ");
X ansi2( "me", 0, 0 );
X if(USER.level >= ADMIN_LEV){
X strcpy(sender, (UNSIGNED char *) getline(80, -1001, 32, sender));
X printf("\n");
X }
X else printf("%s\n", sender);
X
X ansi2( "md", 0, 0 );
X printf("Control: ");
X ansi2( "me", 0, 0 );
X if(USER.level >= ADMIN_LEV){
X strcpy(ctrl, (UNSIGNED char *) getline(80, -1001, 32, ctrl));
X printf("\n");
X }
X else printf("%s\n", ctrl);
X
X ansi2( "md", 0, 0 );
X printf("Approved: ");
X ansi2( "me", 0, 0 );
X if(app != 0) sprintf(approved, "%s <%s@%s>", USER.name, username, UUCPID);
X if(USER.level >= EXE_LEV){
X strcpy(approved, (UNSIGNED char *) getline(80, -1001, 32, approved));
X printf("\n");
X }
X else printf("%s\n", approved);
X
X ansi2( "md", 0, 0 );
X printf("Newsgroups: ");
X ansi2( "me", 0, 0 );
X if(USER.level >= WRITE_EX_LEV){
X strcpy(newsgroups, (UNSIGNED char *) getline(80, -1001, 32, newsgroups));
X printf("\n");
X i = 0;
X while(newsgroups[i] != '\0'){
X if(newsgroups[i] == ' '){
X strcpy(s, (UNSIGNED char *) newsgroups);
X newsgroups[i] = '\0';
X strcat(newsgroups, (UNSIGNED char *) strcopy(s, (i+1), 80));
X i--;
X }
X i++;
X }
X }
X else printf("%s\n", newsgroups);
X
X ansi2( "md", 0, 0 );
X printf("Distribution: ");
X ansi2( "me", 0, 0 );
X if(USER.level >= WRITE_INTERNAT){
X strcpy(distribution, (UNSIGNED char *) getline(80, -1001, 32, distribution));
X printf("\n");
X }
X else printf("%s\n", distribution);
X
X ansi2( "md", 0, 0 );
X printf("Followup-To: ");
X ansi2( "me", 0, 0 );
X if(USER.level >= WRITE_EX_LEV){
X strcpy(followup, (UNSIGNED char *) getline(80, -1001, 32, followup));
X printf("\n");
X }
X else printf("%s\n", followup);
X
X ansi2( "md", 0, 0 );
X printf("Subject: ");
X ansi2( "me", 0, 0 );
X strcpy(subj, (UNSIGNED char *) getline(80, -1001, 32, subj));
X
X ansi2( "md", 0, 0 );
X printf("\nKeywords: ");
X ansi2( "me", 0, 0 );
X strcpy(keyw, (UNSIGNED char *) getline(80, -1001, 32, keyw));
X
X ansi2( "md", 0, 0 );
X printf("\nSummary: ");
X ansi2( "me", 0, 0 );
X strcpy(summ, (UNSIGNED char *) getline(80, -1001, 32, summ));
X
X#ifdef _MULTIMEDIA
X
X if(USER.level >= WRITE_INTERNAT){
X if(content[0] == '\0')
X strcpy(content, (UNSIGNED char *) "text/plain; charset=us-ascii");
X ansi2( "md", 0, 0 );
X printf("\nContent-Type: ");
X ansi2( "me", 0, 0 );
X strcpy(content, (UNSIGNED char *) getline(80, -1001, 32, content));
X }
X#endif
X
X ansi2( "md", 0, 0 );
X printf("\nX-News-Reader: ");
X ansi2( "me", 0, 0 );
X printf("%s %s %s\n", VERSION, PATCHLEVEL, AUTOR);
X
X ansi2( "md", 0, 0 );
X printf("References: ");
X ansi2( "me", 0, 0 );
X printf("%s\n", refs);
X
X ansi2( "md", 0, 0 );
X printf("Message-ID: ");
X ansi2( "me", 0, 0 );
X printf("<%x.%d@%s>\n", tdummy, USER.id, UUCPID);
X
X ansi2( "md", 0, 0 );
X printf("Expires: ");
X ansi2( "me", 0, 0 );
X if(USER.level >= WRITE_INTERNAT){
X strcpy(expires, (UNSIGNED char *) getline(80, -1001, 32, expires));
X printf("\n");
X }
X else printf("%s\n", expires);
X
X goto ONCE_MORE;
X }
X
X ansi2( "md", 0, 0 );
X printf("\n\n%s\n", MIS34_MSG);
X ansi2( "me", 0, 0 );
X
X sprintf(f, "%s/A%d", TMP, getpid());
X sprintf(t, "%s/B%d", TMP, getpid());
X
X fp = fopen(f, "r");
X if (fp == NULL) {
X printf("\n");
X ansi2("md", 0, 0);
X printf("%s ...\n", MIS35_MSG);
X ansi2("me", 0, 0);
X control(MIS36_MSG, 3);
X unlink(rep);
X return;
X }
X
X#ifdef _CNEWS
X lines = 0;
X while(fgets(s, STRING, fp) != 0) lines++;
X rewind(fp);
X#endif
X
X ff = fopen(t, "w");
X
X time(&tdummy);
X
X fprintf(ff, "From: %s\n", iam);
X if(reply[0] != '\0')
X fprintf(ff, "Reply-To: %s\n", reply);
X if(sender[0] != '\0')
X fprintf(ff, "Sender: %s\n", sender);
X if(approved[0] != '\0')
X fprintf(ff, "Approved: %s\n", approved);
X if(newsgroups[0] != '\0')
X fprintf(ff, "Newsgroups: %s\n", newsgroups);
X if(distribution[0] != '\0')
X fprintf(ff, "Distribution: %s\n", distribution);
X if(ctrl[0] != '\0')
X fprintf(ff, "Control: %s\n", ctrl);
X if(followup[0] != '\0')
X fprintf(ff, "Followup-To: %s\n", followup);
X if(subj[0] != '\0')
X fprintf(ff, "Subject: %s\n", subj);
X if(keyw[0] != '\0')
X fprintf(ff, "Keywords: %s\n", keyw);
X if(summ[0] != '\0')
X fprintf(ff, "Summary: %s\n", summ);
X if(content[0] != '\0'){
X fprintf(ff, "MIME-Version: %s\n", MIME_VERSION);
X fprintf(ff, "Content-Type: %s\n", content);
X#ifdef _UMLAUT
X fprintf(ff, "Content-Transfer-Encoding: 8bit\n");
X#endif
X }
X fprintf(ff, "X-News-Reader: %s %s %s\n", VERSION, PATCHLEVEL, AUTOR);
X fprintf(ff, "Message-ID: <%x.%d@%s>\n", tdummy, USER.id, UUCPID);
X if(expires[0] != '\0')
X fprintf(ff, "Expires: %s\n", expires);
X if(refs[0] != '\0')
X fprintf(ff, "References: %s\n", refs);
X#ifdef _CNEWS
X fprintf(ff, "Lines: %d\n", lines);
X#endif
X fputs("\n", ff);
X
X if (BINFILE == 0) {
X UMLAUT_MODUS = 1;
X i = 0;
X while (fgets(s, STRING, fp) != 0) {
X if(ROT13_MODUS) strcpy(s, (UNSIGNED char *) rot13( s ));
X fputs((UNSIGNED char *) iso_line(s), ff);
X i++;
X }
X }
X else {
X time(&tdummy);
X fputs("BINFILE\n", ff);
X sprintf(s, "%s/PD.%d", BRETT, tdummy);
X fputs(s, ff);
X sprintf(f, "cp %s %s &", tmp, s);
X system(f);
X sprintf(s, "\n/public/pd/%s\n", subj);
X fputs(s, ff);
X fl = fopen( PDSCRIPT, "a" );
X fprintf(fl, "mv %s/PD.%d /public/pd/%s\n", BRETT, tdummy, subj);
X fclose(fl);
X }
X fclose(fp);
X unlink(f);
X
X unlink(rep);
X
X if ((USER.level > WRITE_IN_LEV) && (BINFILE == 0)) {
X sprintf(s, "%s/usr/%c/%d/.signature", HOME, USER.name[0], USER.id);
X fp = fopen(s, "r");
X if (fp != NULL) {
X while (fgets(s, STRING, fp) != 0) {
X if(ROT13_MODUS) strcpy(s, (UNSIGNED char *) rot13( s ));
X fputs((UNSIGNED char *) iso_line(s), ff);
X }
X fclose(fp);
X }
X }
X fclose(ff);
X
X UMLAUT_MODUS = USER.schluessel[2];
X
X sprintf(ex, "/bin/sh ./etc/inews.sh %s %s", NG, t);
X system(ex);
X
X unlink(t);
X
X sprintf(s, "%s \"%s\" %s", MIS37_MSG, NG, MIS38_MSG);
X control(s, 3);
X
X
X if(BINFILE != 0){
X maybe_locked(NGROUPS, "r");
X fp = fopen(NGROUPS, "r");
X if (fp == NULL) {
X nerror("misc.c", 895, "schreiben", "Can't read", NGROUPS);
X }
X
X ok = 0;
X
X while ((ok == 0) && (fscanf(fp, "%s %d %d %s", s, &a, &b, f) > 0)) {
X if(strcomp(NG, s) == 0){
X i = a;
X ok = 1;
X }
X }
X fclose(fp);
X
X fl = fopen( PDSCRIPT, "a" );
X fprintf(fl, "%s %s/%d\n", FAVORITE_EDITOR, BRETT, i);
X fprintf(fl, "#%s %s\n\n", NG, USER.name);
X fclose(fl);
X }
X
X printf("%s", MIS39_MSG);
X
X#ifndef _SYS7
X sleep(30); /* Scheinbar laeuft INEWS bei SYSV im Hintergrund */
X#endif
X
X sprintf(s, "%s %s", MB_DAEMON, group);
X system(s);
X unlink(tmp);
X printf("\n");
X }
X else {
X ansi2("md", 0, 0);
X printf(" %s\n\n", MIS40_MSG);
X ansi2("me", 0, 0);
X }
X umask(0007);
X
X}
X
X
X
X
X
X
X/* #PR - Finds out whether a file is a text or binary.
X
X [arg] is the name/path of the file to check.
X
X This function returns 0 if the file includes a text or an 1 if
X its binary. */
X
Xint prf(arg)
XUNSIGNED char arg[];
X{
X FILE *fp;
X UNSIGNED char ex[LONGSTRING];
X int i, a;
X
X#ifdef _PROFILE
X profile( "prf()" );
X#endif
X
X fp = fopen(arg, "r");
X if (fp == NULL) return -1;
X while ((fgets(ex, LONGSTRING, fp) != NULL) && (strlen(ex) < 30));
X fclose(fp);
X
X i = 0;
X a = 0;
X while (ex[i] != '\0') {
X if ((ex[i] < 32) || (ex[i] > 127)) {
X if ((ex[i] != LF) && (ex[i] != CR)) a++;
X }
X i++;
X }
X if (a > 3) return 1; /* BINFILE */
X
X return 0; /* TEXTFILE */
X}
X
X
X
X
X
X
X/* #PF - Checks if an article includes the key BINFILE. If so, the
X function "pd()" is called to handle it.
X
X [arg] gives the number (NOT path) of an article.
X
X This function returns 0 if the article includes a text and 1 if it
X is a binary file. */
X
Xint pruefe(arg)
XUNSIGNED char arg[];
X{
X FILE *fp;
X UNSIGNED char ex[LONGSTRING];
X UNSIGNED char s[STRING];
X UNSIGNED char entry[STRING];
X UNSIGNED char keywds[STRING];
X
X#ifdef _PROFILE
X profile( "pruefe()" );
X#endif
X
X if ((arg[0] == '\0') || (arg[0] == '*')) return -1;
X
X if (strcomp(BRETT, "PM") != 0) {
X sprintf(entry, "%s/%s", BRETT, arg);
X }
X else {
X sprintf(entry, "%s/usr/%c/%d/%s", HOME, USER.name[0], USER.id, arg);
X }
X
X keywds[0] = '\0';
X
X fp = fopen(entry, "r");
X if (fp == NULL) return -1;
X
X while ((fgets(ex, LONGSTRING, fp) != NULL) && (ex[0] > 32)){
X if(strcomp("Keywords: ", ex) == 0){
X ex[80] = '\0';
X strcpy(keywds, strcopy(ex, 10, 80));
X }
X }
X
X while ((fgets(ex, LONGSTRING, fp) != NULL) && (ex[0] < 32));
X
X if (strcomp("Content-", ex) == 0)
X fgets(ex, LONGSTRING, fp);
X
X if (strcomp("BINFILE", ex) == 0) {
X fgets(s, STRING, fp);
X fclose(fp);
X pd(s, keywds);
X return 1;
X }
X fclose(fp);
X
X return 0;
X}
X
X
X
X
X
X
END_OF_FILE
if test 24307 -ne `wc -c <'mbox/src/misc.c'`; then
echo shar: \"'mbox/src/misc.c'\" unpacked with wrong size!
fi
# end of 'mbox/src/misc.c'
fi
if test -f 'mbox/src/weiterl.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'mbox/src/weiterl.c'\"
else
echo shar: Extracting \"'mbox/src/weiterl.c'\" \(11765 characters\)
sed "s/^X//" >'mbox/src/weiterl.c' <<'END_OF_FILE'
X/* ix/MBox (weiterl.c) by Volker Schuermann, 04.12.1993
X
X This C source code contains the following functions:
X
X #WL weiterleiten() forward mails or articles
X #CC carboncopy() send copies to other users
X #BO boerse() stock exchange ("de.etc.finanz")
X
X Contact <volkers@unnet.wupper.de> for help! */
X
X
X
X
X
X
X#include <stdio.h>
X#include <sys/types.h>
X#include <sys/stat.h>
X#include <dirent.h>
X
X#include "mbox.h"
X
X
X
X
X/* #WL - Forward mails.
X
X [arg] -> '' = show which mail may be forwarded
X -> 'user' = forward the last mail to 'user'
X -> 'article user' = forward 'article' to 'user' */
X
Xvoid weiterleiten( arg )
XUNSIGNED char arg[];
X{
X FILE *fp;
X UNSIGNED char s[STRING];
X UNSIGNED char t[STRING];
X UNSIGNED char subject[STRING];
X int i, a, num;
X UNSIGNED char empf[STRING];
X
X subject[0] = '\0';
X
X sprintf(s, "%s/usr/%c/%d/.lastsubject", HOME, USER.name[0], USER.id);
X fp = fopen( s, "r" );
X if(fp != NULL){
X fgets(subject, STRING, fp);
X fclose(fp);
X }
X
X if((subject[0] == '\0') && ((arg[0] > 64) || (arg[0] == '?'))){
X ansi2("md", 0, 0);
X printf(" %s\n", WEI01_MSG);
X ansi2("me", 0, 0);
X return;
X }
X
X if(arg[0] == '\0'){
X printf("\n\n%s\n\n", WEI02_MSG);
X ansi2("md", 0, 0);
X printf("%s %s\n\n", WEI03_MSG, subject);
X ansi2("me", 0, 0);
X return;
X }
X
X num = 0;
X
X if(arg[0] < 65){
X i = 0;
X while((arg[i] > 32) && (arg[i] != '\0')) i++;
X strcpy(s, (UNSIGNED char *) strcopy(arg, 0, (i-1)));
X num = atoi(s);
X strcpy(empf, (UNSIGNED char *) strcopy(arg, (i+1), strlen(arg)));
X strcat(empf, "$");
X }
X else{
X sprintf(empf, "%s$", arg);
X }
X
X if(num != 0){
X if(strcomp(BRETT, "PM") != 0){
X sprintf(t, "%s/%d", BRETT, num);
X sprintf(s, "cp %s/%d %s/usr/%c/%d/.lastletter", BRETT, num, HOME, USER.name[0], USER.id);
X }
X else{
X sprintf(t, "%s/usr/%c/%d/%d", HOME, USER.name[0], USER.id, num);
X sprintf(s, "cp %s/usr/%c/%d/%d %s/usr/%c/%d/.lastletter", HOME, USER.name[0], USER.id, num, HOME, USER.name[0], USER.id);
X }
X fp = fopen( t, "r" );
X if(fp == NULL){
X ansi2("md", 0, 0);
X printf(" %s\n", WEI04_MSG);
X ansi2("me", 0, 0);
X return;
X }
X fclose(fp);
X system(s);
X sprintf(s, "%s/usr/%c/%d/.lastletter", HOME, USER.name[0], USER.id);
X
X sprintf(s, "%s/usr/%c/%d/.lastsubject", HOME, USER.name[0], USER.id);
X fp = fopen( s, "w" );
X if(fp == NULL){
X nerror("weiterl.c", 76, "weiterleiten", "Can't write to", s);
X }
X fprintf(fp, "%d <%s>", num, NG);
X fclose(fp);
X }
X
X brief(empf);
X}
X
X
X
X
X/* #CC - Send copies of mails to various users.
X
X [cc] -> name of users (shown in "Cc:" header line)
X [bcc] -> name of users (shown in "Bcc:" header line, not shown to
X users) */
X
Xvoid carboncopy( cc, bcc )
XUNSIGNED char cc[], bcc[];
X{
X UNSIGNED char ex[LONGSTRING];
X UNSIGNED char ef[LONGSTRING];
X UNSIGNED char s[STRING];
X
X int a = 0, i = 0;
X int ok = 0;
X
X printf("\n");
X
X sprintf(ex, "%s,%s ", (UNSIGNED char *) stripped(cc), bcc);
X
X if(ex[0] == '\0') return;
X
X while(ok == 0){
X while((ex[i] != ',') && (ex[i] != '\0')) i++;
X
X if(ex[i] == '\0') ok++;
X
X strcpy(ef, (UNSIGNED char *) bigcopy(ex, a, (i-1)));
X strcpy(s, (UNSIGNED char *) stripped(ef));
X
X if((strlen(s) > 1) && (s[0] != '(')){
X weiterleiten( s );
X }
X a = i + 1;
X i++;
X }
X
X}
X
X
X
X
X/* #BO - Handle stock exchange database.
X
X This needs informations from newsgroup "de.etc.finanz".
X
X NOTE: This stuff is still under construction! */
X
X#define MAX_BOERSE 40
X#define MAX_KURSE 40
X
Xvoid boerse( arg )
XUNSIGNED char arg[];
X{
X UNSIGNED char s[STRING];
X UNSIGNED char t[STRING];
X UNSIGNED char u[STRING];
X
X UNSIGNED char d[MAX_BOERSE][STRING];
X UNSIGNED char l[MAX_KURSE][STRING];
X int dptr;
X
X FILE *fp;
X FILE *ff;
X
X int c, i, j, a, b;
X
X long t1, t2;
X long o1, o2;
X long p1;
X long x1, x2;
X long q;
X
X DIR *dp;
X struct dirent *actdir;
X
X
X
X if(USER.terminal == 4){
X printf(" <- %s\n", BAU04_MSG );
X return;
X }
X
X
X sprintf(s, " Stock Exchange [Support: %s] ", STOCK_AUTOR);
X headline( s );
X
X fp = fopen( STOCK_INDEX, "r" );
X if(fp != NULL){
X
X ansi2( "cm", 56, 3 );
X printf("DAX ........");
X ansi2( "cm", 56, 4 );
X printf("FTSE .......");
X ansi2( "cm", 56, 5 );
X printf("DOW JONES ..");
X ansi2( "cm", 56, 6 );
X printf("CAC ........");
X ansi2( "cm", 56, 7 );
X printf("MIBTEL .....");
X ansi2( "cm", 56, 8 );
X printf("IBEX .......");
X
X while(fgets(s, STRING, fp) != 0){
X if(strlen(s) > 10) strcpy(t, (UNSIGNED char *) s);
X }
X
X fclose(fp);
X
X ansi2( "md", 0, 0 );
X
X j = 12;
X
X for(i = 3; i < 9; i++){
X ansi2( "cm", 69, i );
X printf("%s", (UNSIGNED char *) strcopy(t, j, (j + 8)));
X j += 11;
X }
X
X ansi2( "cm", 56, 10 );
X ansi2( "mr", 0, 0 );
X printf(" %s ", (UNSIGNED char *) strcopy(t, 0, 9) );
X }
X
X ansi2( "cm", 1, 2 );
X ansi2( "me", 0, 0 );
X
X printf("\n 1 - DAX Aktien Kurse\n");
X printf("\n 2 - Dow Jones Aktien Kurse\n");
X ansi2( "us", 0, 0 );
X printf("\n 3 - Diagramm\n\n\n");
X ansi2( "me", 0, 0 );
X
X ansi2( "md", 0, 0 );
X printf("[Kurse] Welche? > ");
X
X c = getint();
X
X ansi2( "me", 0, 0 );
X
X if((c < '1') || (c > '3')){
X printf("\n");
X return;
X }
X
X if(c != '3'){
X
X sprintf(s, " Stock Exchange [Support: %s] ", STOCK_AUTOR);
X headline( s );
X
X dptr = 1;
X
X dp = opendir( STOCK_PATH );
X if(dp == NULL){
X nerror("weiterl.c", 216, "boerse", "Directory not found", STOCK_PATH);
X }
X
X while(((actdir = readdir(dp)) != NULL) && (dptr < MAX_BOERSE)){
X strcpy(s, (UNSIGNED char *) actdir->d_name);
X i = strlen(s);
X if(i > 3){
X while(i > -1){
X if(s[i] == '.'){
X a = i + 1;
X i = -1;
X }
X i--;
X }
X strcpy(t, (UNSIGNED char *) strcopy(s, a, strlen(s)));
X
X if(c == '1'){
X if(strcomp("dax", t) == 0){
X strcpy(d[dptr], actdir->d_name);
X dptr++;
X }
X }
X if(c == '2'){
X if(strcomp("dj", t) == 0){
X strcpy(d[dptr], actdir->d_name);
X dptr++;
X }
X }
X }
X }
X closedir(dp);
X
X
X for(i = 1; i < dptr; i++){
X for(j = 1; j < dptr; j++){
X t1 = dateconv( d[i] );
X t2 = dateconv( d[j] );
X if(t1 > t2){
X strcpy(s, (UNSIGNED char *) d[i]);
X strcpy(d[i], (UNSIGNED char *) d[j]);
X strcpy(d[j], (UNSIGNED char *) s);
X }
X }
X }
X
X
X j = 0; strcpy(l[0], " ");
X
X if(dptr > 5) dptr = 5;
X
X for(i = 1; i < dptr; i++){
X
X sprintf(s, "%s/%s", STOCK_PATH, d[i]);
X
X b = 1;
X
X fp = fopen( s, "r" );
X if(fp == NULL){
X nerror("weiterl.c", 274, "boerse", "Can't read", s);
X }
X
X strcat(l[0], " ");
X strcat(l[0], (UNSIGNED char *) strcopy(d[i], 0, 7));
X
X while(fgets(s, STRING, fp) != 0){
X if(j == 0){
X strcpy(l[b], stripped( (UNSIGNED char *) strcopy(s, 7, 80)));
X while(strlen(l[b]) < 31) strcat(l[b], " ");
X l[b][31] = '\0';
X }
X fgets(t, STRING, fp);
X if(s[0] == t[0]){
X sprintf(s, " %9.9s", stripped( (UNSIGNED char *) strcopy(t, 7, 80)));
X }
X else{
X sprintf(s, " %9.9s", "WPKN?");
X }
X strcat(l[b], s);
X if(b < MAX_KURSE) b++;
X }
X fclose(fp);
X
X j++;
X }
X
X sprintf(t, "%s/city.%d", STOCK_PATH, getpid());
X
X fp = fopen( t, "w" );
X if(fp == NULL){
X nerror("weiterl.c", 303, "boerse", "Can't write to", t);
X }
X
X fputs("Content-Type: text/richtext\n", fp);
X
X a = 0;
X
X for(i = 1; i < b; i++){
X if(l[i][0] >= 'A'){
X if(a == 0){
X fprintf(fp, "%s\n", l[i]);
X a++;
X }
X else{
X fprintf(fp, "<Underline>%s</Underline>\n", l[i]);
X a = 0;
X }
X }
X }
X fclose(fp);
X
X sprintf(s, " Stock Exchange [Support: %s] ", STOCK_AUTOR);
X headblock( s, l[0] );
X show( t, 9999, USER.more + 100 );
X
X unlink( t );
X
X }
X else{ /* Grafik */
X
X sprintf(s, " Stock Exchange [Support: %s] ", STOCK_AUTOR);
X headline( s );
X
X dptr = 1;
X
X dp = opendir( STOCK_PATH );
X if(dp == NULL){
X nerror("weiterl.c", 341, "boerse", "Directory not found", STOCK_PATH);
X }
X
X while((actdir = readdir(dp)) != NULL){
X if(dptr >= MAX_BOERSE){
X for(i = 1; i <= dptr; i++)
X strcpy(d[i], (UNSIGNED char *) d[i+1]);
X dptr--;
X }
X strcpy(s, (UNSIGNED char *) actdir->d_name);
X i = strlen(s);
X if(i > 3){
X while(i > -1){
X if(s[i] == '.'){
X a = i + 1;
X i = -1;
X }
X i--;
X }
X strcpy(t, (UNSIGNED char *) strcopy(s, a, strlen(s)));
X
X if((strcomp("wpkn", t) != 0) && (strcomp("index", s) != 0)){
X strcpy(d[dptr], actdir->d_name);
X dptr++;
X }
X }
X }
X closedir(dp);
X
X
X for(i = 1; i < dptr; i++){
X for(j = 1; j < dptr; j++){
X t1 = dateconv( d[i] );
X t2 = dateconv( d[j] );
X if(t1 < t2){
X strcpy(s, (UNSIGNED char *) d[i]);
X strcpy(d[i], (UNSIGNED char *) d[j]);
X strcpy(d[j], (UNSIGNED char *) s);
X }
X }
X }
X
X b = 1; t1 = 9999L; t2 = 0L; o1 = 9999L; o2 = 0L;
X
X for(i = 1; i < dptr; i++){ /* Pass 1 */
X sprintf(s, "%s/%s", STOCK_PATH, d[i]);
X
X fp = fopen( s, "r" );
X if(fp == NULL){
X nerror("weiterl.c", 385, "boerse", "Can't read", s);
X }
X
X fgets(t, STRING, fp);
X fgets(s, STRING, fp);
X
X if(atol(t) != atol(s)){ /* WPKN ??? */
X fclose(fp);
X continue;
X }
X
X strcpy(l[b], (UNSIGNED char *) strcopy(s, 7, 80));
X
X q = atol(l[b]);
X
X if(d[i][strlen(d[i]) -1] == 'x'){
X if(q < t1) t1 = q;
X if(q > t2) t2 = q;
X }
X else{
X if(q < o1) o1 = q;
X if(q > o2) o2 = q;
X }
X
X if(b < MAX_KURSE) b++;
X fclose(fp);
X }
X
X t1 = (t1 + t2) / 2;
X o1 = (o1 + o2) / 2;
X
X x1 = (t2 - t1) / 10 + 1;
X x2 = (o2 - o1) / 10 + 1;
X
X a = 15;
X
X for( i = 3; i < (42 - USER.tlines); i++){
X ansi2( "cm", 14, i );
X printf("------------------------------------------------------------------");
X }
X
X
X ansi2( "md", 0, 0 );
X ansi2( "cm", 14, 12 );
X printf("------------------------------------------------------------------");
X ansi2( "cm", 14, (42 - USER.tlines) );
X printf("------------------------------------------------------------------");
X
X ansi2( "me", 0, 0 );
X
X for( i = 4; i < 7; i++){
X ansi2( "cm", 68, i );
X printf(" ");
X }
X
X ansi2( "cm", 69, 4 );
X ansi2( "mr", 0, 0 );
X printf("=");
X ansi2( "me", 0, 0 );
X ansi2( "md", 0, 0 );
X printf(" DAX");
X ansi2( "me", 0, 0 );
X
X ansi2( "cm", 69, 6 );
X ansi2( "mr", 0, 0 );
X printf("+");
X ansi2( "me", 0, 0 );
X printf(" Dow Jones");
X
X ansi2( "cm", 58, (41 - USER.tlines) );
X ansi2( "us", 0, 0 );
X strcpy(t, (UNSIGNED char *) strcopy(d[(dptr - 1)], 0, 7));
X printf(" %s bis %s", (UNSIGNED char *) strcopy(d[1], 0, 7), t);
X ansi2( "me", 0, 0 );
X
X j = 1;
X /*
X if(dptr > 22) j = dptr - 22;
X */
X if(dptr > 27) j = dptr - 27;
X
X for(i = j; i < dptr; i++){ /* Pass 2 */
X sprintf(s, "%s/%s", STOCK_PATH, d[i]);
X
X fp = fopen( s, "r" );
X if(fp == NULL){
X nerror("weiterl.c", 476, "boerse", "Can't read", s);
X }
X
X fgets(t, STRING, fp);
X fgets(s, STRING, fp);
X
X if(atol(t) != atol(s)){ /* WPKN ??? */
X fclose(fp);
X continue;
X }
X
X strcpy(t, (UNSIGNED char *) strcopy(s, 7, 80));
X
X q = atol(t);
X
X ansi2( "mr", 0, 0 );
X
X if(d[i][strlen(d[i]) -1] == 'x'){
X
X p1 = t1 - q;
X p1 /= x1;
X if(p1 == 0) p1 = 1;
X
X
X if(p1 > 0){
X for(j = 0; j < p1; j++){
X b = 12 + j;
X ansi2( "cm", a, b);
X printf("=");
X }
X }
X else{
X p1 *= -1;
X
X for(j = 0; j < p1; j++){
X b = 12 - j;
X ansi2( "cm", a, b);
X printf("=");
X }
X
X }
X
X ansi2( "cm", 1, b);
X ansi2( "me", 0, 0 );
X ansi2( "md", 0, 0 );
X printf("%s", t);
X }
X else{
X p1 = o1 - q;
X p1 /= x2;
X if(p1 == 0) p1 = 1;
X
X
X if(p1 > 0){
X for(j = 0; j < p1; j++){
X b = 12 + j;
X ansi2( "cm", a, b);
X printf("+");
X }
X }
X else{
X p1 *= -1;
X
X for(j = 0; j < p1; j++){
X b = 12 - j;
X ansi2( "cm", a, b);
X printf("+");
X }
X
X }
X ansi2( "cm", 1, b);
X ansi2( "me", 0, 0 );
X printf("%s", t);
X }
X
X for(j = 0; j < 2; j++){
X ansi2( "cm", a, (43 - USER.tlines) + j );
X printf("%c", d[i][j]);
X }
X
X ansi2( "me", 0, 0 );
X
X a += 2;
X
X fclose(fp);
X }
X ansi2( "cm", 1, (USER.tlines + 1) );
X }
X}
END_OF_FILE
if test 11765 -ne `wc -c <'mbox/src/weiterl.c'`; then
echo shar: \"'mbox/src/weiterl.c'\" unpacked with wrong size!
fi
# end of 'mbox/src/weiterl.c'
fi
echo shar: End of archive 4 \(of 12\).
cp /dev/null ark4isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 12 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still must unpack the following archives:
echo " " ${MISSING}
fi
exit 0
exit 0 # Just in case...