home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-02-04 | 54.1 KB | 2,247 lines |
- Newsgroups: comp.sources.misc
- From: Volker.Schuermann@unnet.w.open.de (Volker Schuermann)
- Subject: v35i044: mbox - ix/Mbox, A BBS for UNIX and MINIX v1.6 PL10j7, Part09/15
- Message-ID: <1993Feb5.185815.10481@sparky.imd.sterling.com>
- X-Md4-Signature: 858339a0c6b9f11dc461d16061300e36
- Date: Fri, 5 Feb 1993 18:58:15 GMT
- Approved: kent@sparky.imd.sterling.com
-
- Submitted-by: Volker.Schuermann@unnet.w.open.de (Volker Schuermann)
- Posting-number: Volume 35, Issue 44
- Archive-name: mbox/part09
- Environment: MINIX, ISC, ESIX, SVR3
- Supersedes: mbox: Volume 31, Issue 16-27
-
- #! /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: etc/logo~ src/portinfo.c src/proto.h src/show.c src/xmd.c
- # Wrapped by kent@sparky on Fri Feb 5 12:18:10 1993
- PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
- echo If this archive is complete, you will see the following message:
- echo ' "shar: End of archive 9 (of 15)."'
- if test -f 'etc/logo~' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'etc/logo~'\"
- else
- echo shar: Extracting \"'etc/logo~'\" \(243 characters\)
- sed "s/^X//" >'etc/logo~' <<'END_OF_FILE'
- X
- X
- X
- Xooo o o ooo ooo o ooo ooo ooo oo o o o ooo o o oo ooo ooo ooo o o
- X o ooo oo o o ooo oo o ooo ooo o o oo o ooo o o oo ooo o o
- X o o o ooo o o o o ooo o o o o o o ooo ooo o o ooo ooo ooo ooo o
- X
- X
- END_OF_FILE
- if test 243 -ne `wc -c <'etc/logo~'`; then
- echo shar: \"'etc/logo~'\" unpacked with wrong size!
- fi
- # end of 'etc/logo~'
- fi
- if test -f 'src/portinfo.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/portinfo.c'\"
- else
- echo shar: Extracting \"'src/portinfo.c'\" \(15712 characters\)
- sed "s/^X//" >'src/portinfo.c' <<'END_OF_FILE'
- X/***************************************************************************/
- X/* PROGRAMM ix/Mbox */
- X/* DATEI portinfo.c */
- X/* FUNKTIONEN port(), show_level(), userliste(), finger() */
- X/* AUTOR vs (Volker Schuermann/MINIX-Version) */
- X/* LETZTE AENDERUNG 31.12.1992 */
- X/***************************************************************************/
- X
- X#include <sys/types.h>
- X#include <sys/stat.h>
- X#include <fcntl.h>
- X#include <unistd.h>
- X#include <stdio.h>
- X#include <utmp.h>
- X#include <time.h>
- X
- X#include <string.h>
- X
- X#include "mbox.h"
- X
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION port() */
- X/* BESCHREIBUNG Anzeigen was die Mbox- und die SH-User z. Zt. anstellen. */
- X/* PARAMETER keine */
- X/* RUECKGABE keine */
- X/***************************************************************************/
- X
- Xvoid port(arg)
- Xunsigned char arg[];
- X{
- X FILE *fp;
- X FILE *ff;
- X FILE *pp;
- X int fd;
- X unsigned char s[STRING];
- X unsigned char t[STRING];
- X unsigned char ks[STRING];
- X unsigned char ls[STRING];
- X unsigned char tmp[STRING];
- X unsigned char ex[255];
- X unsigned char terms[MAX_TERMINALS][STRING];
- X int termc = 0;
- X int a, b, k, l;
- X struct utmp US;
- X struct tm *tmt;
- X long ltime;
- X
- X
- X if(arg[0] != '-'){
- X headline( POR01_MSG );
- X }
- X else printf("\n\n");
- X
- X printf("%s\n", POR02_MSG);
- X printf("===============================================================================\n");
- X
- X printf("%s ", POR03_MSG);
- X
- X maybe_locked(WHO, "r");
- X fp = fopen(WHO, "r");
- X if (fp == NULL) {
- X nerror("portinfo.c", 56, "port", "Datei-Lesefehler", WHO);
- X }
- X while (fgets(s, 80, fp) != NULL) {
- X printf(".");
- X if(s[0] > 32){
- X strcpy(t, (unsigned char *) strcopy(s, 9, 37));
- X sprintf(terms[termc], "%s ", t);
- X strcpy(t, (unsigned char *) strcopy(s, 37, 80));
- X strcat(terms[termc], t);
- X strcat(terms[termc], " ");
- X terms[termc][56] = '\0';
- X sprintf(t, "%s", (unsigned char *) strcopy(s, 37, 49));
- X
- X sprintf(s, "%s/etc/%s.", HOME, (unsigned char *) stripped(t));
- X ff = fopen(s, "r");
- X if (ff == NULL) {
- X continue;
- X }
- X fgets(s, 80, ff);
- X s[23] = '\0';
- X fclose(ff);
- X strcat(terms[termc], s);
- X strcat(terms[termc], "\n");
- X termc++;
- X }
- X }
- X fclose(fp);
- X
- X sprintf(tmp, "%s/%dps", TMP, getpid());
- X sprintf(s, "ps -a > %s", tmp);
- X system( s );
- X
- X#ifdef _SYS7
- X maybe_locked(UTMP, "r");
- X fd = open(UTMP, O_RDONLY);
- X#else
- X maybe_locked(UTMP_FILE, "r");
- X fd = open(UTMP_FILE, O_RDONLY);
- X#endif
- X
- X if (fd == -1) {
- X
- X#ifdef _SYS7
- X nerror("portinfo.c", 83, "port", "Datei-Lesefehler", UTMP);
- X#else
- X nerror("portinfo.c", 83, "port", "Datei-Lesefehler", UTMP_FILE);
- X#endif
- X
- X }
- X while (read(fd, (unsigned char *) &US, sizeof(US)) == sizeof(US)) {
- X
- X printf(".");
- X t[0] = '\0';
- X strcat(t, "[$] -\n");
- X
- X if (US.ut_type == USER_PROCESS) {
- X terms[termc][0] = '\0';
- X sprintf(ex, "%.8s [SH-Account] ",
- X US.ut_user);
- X ex[33] = '\0';
- X strcat(terms[termc], ex);
- X
- X sprintf(ex, "%8.8s ",
- X US.ut_line);
- X strcat(terms[termc], ex);
- X
- X ltime = US.ut_time;
- X tmt = localtime(<ime);
- X sprintf(ex, "%02.2d:%02.2d ",
- X tmt->tm_hour, tmt->tm_min);
- X strcat(terms[termc], ex);
- X
- X l = atoi(strcopy(US.ut_line, 3, 6));
- X
- X pp = fopen(tmp, "r");
- X if (pp == NULL) {
- X nerror("portinfo.c", 113, "port", tmp, "???");
- X }
- X while (fgets(s, 80, pp) != NULL) {
- X k = atoi((unsigned char *) strcopy(s, 8, 10));
- X if ((k == l) && (s[17] != '-')) {
- X t[0] = '\0';
- X strcat(t, "[$] ");
- X strcat(t, (unsigned char *) strcopy(s, 17, 40));
- X s[0] = '\0';
- X strcat(s, t);
- X t[0] = '\0';
- X strcat(t, (unsigned char *) stripped(s));
- X t[27] = '\0';
- X strcat(t, "\n");
- X }
- X }
- X fclose(pp);
- X
- X strcat(terms[termc], t);
- X termc++;
- X }
- X }
- X close(fd);
- X
- X unlink(tmp);
- X
- X printf("%c", CR);
- X
- X for (a = 0; a < termc; a++) {
- X for (b = 0; b < termc; b++) {
- X sprintf(ks, "%s", (unsigned char *) strcopy(terms[a], 34, 40));
- X sprintf(ls, "%s", (unsigned char *) strcopy(terms[b], 34, 40));
- X if((strcomp(ks, ls) == 0) && (a != b)){
- X if (terms[a][53] == '$') terms[a][0] = '*';
- X if (terms[b][53] == '$') terms[b][0] = '*';
- X }
- X sprintf(s, "%d", ks); k = atoi(s);
- X sprintf(s, "%d", ls); l = atoi(s);
- X if (k < l) {
- X s[0] = '\0';
- X strcat(s, terms[a]);
- X terms[a][0] = '\0';
- X strcat(terms[a], terms[b]);
- X terms[b][0] = '\0';
- X strcat(terms[b], s);
- X }
- X }
- X }
- X
- X
- X for (a = 0; a < termc; a++) {
- X if (terms[a][0] != '*'){
- X if(terms[a][53] != '$') ansi( "md" );
- X printf("%s", terms[a]);
- X if(terms[a][53] != '$') ansi( "me" );
- X }
- X }
- X
- X printf("\n");
- X}
- X
- X
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION show_level() */
- X/* BESCHREIBUNG Zuweisung der Userlevel anzeigen. */
- X/* PARAMETER keine */
- X/* RUECKGABE keine */
- X/***************************************************************************/
- X
- Xvoid show_level()
- X{
- X headline( POR04_MSG );
- X printf("\n");
- X
- X printf("%s\n", POR05_MSG);
- X printf("-----------------------------------------\n");
- X printf("%s (%d)\n", POR06_MSG, GUEST_LEV);
- X printf("%s (%d)\n", POR07_MSG, WRITE_IN_LEV);
- X printf("%s (%d)\n", POR08_MSG, MAILOUT_LEV);
- X printf("%s (%d)\n", POR09_MSG, WRITE_EX_LEV);
- X printf("%s (%d)\n", POR10_MSG, WRITE_INTERNAT);
- X printf("%s (%d)\n", POR11_MSG, PD_D_LEV);
- X printf("%s (%d)\n", POR12_MSG, PD_U_LEV);
- X printf("%s (%d)\n", POR13_MSG, EXE_LEV);
- X printf("%s (%d)\n", POR14_MSG, ADMIN_LEV);
- X
- X printf("\n%s (%d), %s !\n\n", POR15_MSG, USER.level, USER.name);
- X
- X}
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION userliste() */
- X/* BESCHREIBUNG Verschieden Formen der Userliste ausgeben. */
- X/* PARAMETER arg = '' = nur Username und ID */
- X/* '*' = Name, letzter Anruf etc. */
- X/* '#' = Name, Up- / Downloads */
- X/* '$' = Gebuehren-Stand */
- X/* '%' = Level & Bretter */
- X/* RUECKGABE keine */
- X/***************************************************************************/
- X
- Xvoid userliste(arg)
- Xunsigned char arg[];
- X{
- X FILE *fp;
- X int fd;
- X struct userdaten LOOSER;
- X unsigned char s[STRING];
- X unsigned char u[(STRING*2)];
- X unsigned char tmp[STRING];
- X unsigned char t[STRING];
- X int i = 0, l, z;
- X int mode = 0;
- X int totalusr = 0;
- X int totalact = 0;
- X int totalgas = 0;
- X
- X unsigned char c;
- X
- X if (arg[0] == '*') mode = 1;
- X if ((arg[0] == '#') && (USER.level >= ADMIN_LEV)) mode = 2;
- X if ((arg[0] == '$') && (USER.level >= ADMIN_LEV)) mode = 3;
- X if (arg[0] == '%') mode = 4;
- X if ((arg[0] > 47) && (mode == 0)){
- X finger(arg);
- X return;
- X }
- X
- X headline( POR15aMSG );
- X
- X show(UDBASE, 99, 99); /* RESET */
- X
- X if (mode == 1) {
- X printf("%s\n", POR16_MSG);
- X printf("===============================================================================\n");
- X printf("%s", POR17_MSG);
- X }
- X if (mode == 2) {
- X printf("%s\n", POR18_MSG);
- X printf("===============================================================================\n");
- X printf("%s", POR17_MSG);
- X }
- X if (mode == 3) {
- X printf("%s\n", POR18aMSG);
- X printf("===============================================================================\n");
- X printf("%s", POR17_MSG);
- X }
- X if (mode == 4) {
- X printf("%s\n", POR18bMSG);
- X printf("===============================================================================\n");
- X printf("%s", POR17_MSG);
- X }
- X
- X sprintf(tmp, "%s/%d", TMP, getpid());
- X fp = fopen(tmp, "w");
- X if (fp == NULL) {
- X nerror("portinfo.c", 231, "userliste", "Datei-Schreibfehler", tmp);
- X }
- X maybe_locked(UDBASE, "r");
- X fd = open(UDBASE, O_RDONLY);
- X if (fd == -1) {
- X nerror("admin.c", 254, "userliste", "Datei-Lesefehler", UDBASE);
- X }
- X while (read(fd, (unsigned char *) &LOOSER, sizeof(LOOSER)) == sizeof(LOOSER)) {
- X if (mode == 0) {
- X sprintf(u, "%s", LOOSER.name);
- X sprintf(s, " (%d) ", LOOSER.id);
- X u[26 - strlen(s)] = '\0';
- X strcat(u, s); strcat(u, " ");
- X u[26] = '\0';
- X fprintf(fp, "%s", u);
- X i++;
- X if (i == 3) {
- X i = 0;
- X fprintf(fp, "\n");
- X }
- X }
- X if (mode == 1) {
- X sprintf(s, "%s", LOOSER.name);
- X s[24] = '\0';
- X sprintf(u, "%s [%d]", s, LOOSER.id);
- X
- X sprintf(s, "%s", " ");
- X if ((LOOSER.elapsed / 60) > 2) {
- X if (LOOSER.wohnort[0] < 48) {
- X if (strcomp(GUEST, LOOSER.name) != 0)
- X sprintf(s, "%s", "<?>");
- X }
- X }
- X else {
- X sprintf(s, "%s", "{-}");
- X }
- X if (LOOSER.seq == 1) {
- X sprintf(s, "%s", "<!>");
- X }
- X fprintf(fp, "%-30.30s %10s %s%6.d %6.ld\" %5.d%10.10s\n",
- X u, LOOSER.lastlog, s, LOOSER.seq, (LOOSER.elapsed / 60), LOOSER.level, LOOSER.sh_name);
- X
- X }
- X if (mode == 2) {
- X fprintf(fp, "%-30.30s %8.d kB %10.d kB %8.d\"\n",
- X LOOSER.name, LOOSER.upratio, LOOSER.downratio, (LOOSER.elapsed / 60));
- X }
- X if (mode == 3) {
- X if(LOOSER.level >= WRITE_INTERNAT){
- X if(LOOSER.account[0] == '\0') strcpy(LOOSER.account, "00.00.0000");
- X strcpy(s, LOOSER.account);
- X s[10] = '\0';
- X c = ' ';
- X strcpy(t, (unsigned char *) strcopy(LOOSER.account, 11, 16));
- X z = atoi(t);
- X fprintf(fp, "%-30.30s %5.d %c %s [%3d.%02d DM]\n",
- X LOOSER.name, LOOSER.id, c, s, fix(z), flt(z));
- X }
- X }
- X if (mode == 4) {
- X fprintf(fp, "%-15.15s %5.d %4.d %s\n",
- X LOOSER.name, LOOSER.id, LOOSER.level, LOOSER.newsgrps);
- X }
- X totalusr++;
- X sprintf(s, "%s", (unsigned char *) mydate( 0 ));
- X if((strcomp(s, LOOSER.lastlog) < 3) && (LOOSER.seq > 10)) totalact++;
- X if(strcomp(GUEST, LOOSER.name) == 0) totalgas = LOOSER.seq;
- X }
- X close(fd);
- X
- X fclose(fp);
- X
- X if (mode != 0) {
- X printf("%c", CR);
- X sprintf(s, "sort -d -o %s %s", tmp, tmp);
- X system(s);
- X show(tmp, 9999, USER.more + 100);
- X if (mode == 1) {
- X printf("\n%s\n%s", POR19_MSG, POR20_MSG);
- X }
- X }
- X else{
- X show(tmp, 9999, USER.more);
- X }
- X if(mode == 0){
- X printf("\n\n%s %d %s %d %s", POR21_MSG, totalusr, POR22_MSG, totalact, POR23_MSG);
- X printf("\n%s %d %s", POR24_MSG, totalgas, POR25_MSG);
- X }
- X printf("\n");
- X unlink(tmp);
- X}
- X
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION finger() */
- X/* BESCHREIBUNG Informationen ueber einen Teilnehmer anzeigen. */
- X/* PARAMETER arg = User-Name/User-Id des Teilnehmers */
- X/* RUECKGABE keine */
- X/***************************************************************************/
- X
- Xvoid finger(arg)
- Xunsigned char arg[];
- 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 unsigned char ex[LONGSTRING];
- X int i, ok, a, b;
- X int uid = -1;
- X unsigned char name[STRING];
- X unsigned char domain[STRING];
- X
- X
- X FILE *fp;
- X
- X
- X if ((arg[0] > 47) && (arg[0] < 58)) {
- X uid = atoi(arg);
- X }
- X else{
- X a = 0; b = 0;
- X i = 0;
- X while(arg[i] != '\0'){
- X if(arg[i] == '!') a = i;
- X if(arg[i] == '@') b = i;
- X i++;
- X }
- X if((a != 0) && (b == 0)){
- X if(a != 0){
- X strcpy(name, (unsigned char *) strcopy(arg, (a+1), length(arg)));
- X strcpy(domain, (unsigned char *) strcopy(arg, 0, (a-1)));
- X }
- X else{
- X strcpy(name, (unsigned char *) strcopy(arg, 0, (b-1)));
- X strcpy(domain, (unsigned char *) strcopy(arg, (b+1), length(arg)));
- X }
- X strcpy(t, USER.name);
- X i = 0;
- X while(t[i] != '\0'){
- X if(t[i] == ' ') t[i] = '.';
- X i++;
- X }
- X chdir( "/" );
- X sprintf(s, "%s %s!%s!\"finger %s\" \\| mail %s@%s", UUX, SMARTHOST, domain, name, t, UUCPID);
- X /*
- X printf("\n\n%s\n\n", s);
- X */
- X system( s );
- X chdir( HOME );
- X printf("\n\n%s \"%s\",\n%s \"%s\" %s.", POR25aMSG, name, POR25bMSG, domain, POR25cMSG);
- X ansi( "md" );
- X printf("\n%s\n", POR26_MSG);
- X ansi( "me" );
- X return;
- X }
- X else{
- X if(b != 0){
- X ansi( "md" );
- X printf(" <- %s\n\n", POR26aMSG);
- X ansi( "me" );
- X return;
- X }
- X }
- X }
- X
- X maybe_locked(UDBASE, "r"); mblock(UDBASE);
- X fd = open(UDBASE, O_RDONLY);
- X if (fd == -1) {
- X nerror("admin.c", 324, "aendern", "Datei-Lesefehler", 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(arg, DUMMY.name) == 0) ||
- X (strcomp(arg, DUMMY.nick) == 0) ||
- X (strcomp(arg, 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) {
- X ansi( "md" );
- X printf(" <- %s\n\n", POR27_MSG);
- X ansi( "me" );
- X return;
- X }
- X
- X sprintf(s, " %s: %s ", POR28_MSG, arg);
- X headline( s );
- X
- X ansi( "md" );
- X printf("\n%s ", POR29_MSG);
- X ansi( "me" );
- X printf("%d\n", LOOSER.id);
- X
- X ansi( "md" );
- X printf("%s ", POR30_MSG);
- X ansi( "me");
- X printf("%s\n", LOOSER.name);
- X
- X if(LOOSER.sh_name[0] != '\0'){
- X ansi( "md" );
- X printf("%s ", POR31_MSG);
- X ansi( "me" );
- X printf("%s\n", LOOSER.sh_name);
- X }
- X
- X if(LOOSER.nick[0] != '\0'){
- X ansi( "md" );
- X printf("%s ", POR32_MSG);
- X ansi( "me" );
- X printf("%s\n", LOOSER.nick);
- X }
- X
- X ansi( "md" );
- X printf("%s ", POR33_MSG);
- X ansi( "me" );
- X strcpy(s, LOOSER.name);
- X i = 0;
- X while(s[i] != '\0'){
- X if(s[i] == ' ') s[i] = '.';
- X i++;
- X }
- X if(LOOSER.level >= WRITE_INTERNAT)
- X printf("%s@%s\n", s, UUCPID2);
- X else
- X printf("%s@%s\n", s, UUCPID1);
- X
- X printf("\n"); ok = 0;
- X
- X if(USER.level >= WRITE_EX_LEV){
- X if(LOOSER.wohnort[0] != '\0'){
- X ok++;
- X ansi( "md" );
- X printf("%s ", POR34_MSG);
- X ansi( "me" );
- X printf("%s\n", LOOSER.wohnort);
- X }
- X }
- X
- X if(USER.level >= ADMIN_LEV){
- X if(LOOSER.strasse[0] != '\0'){
- X ok++;
- X ansi( "md" );
- X printf("%s ", POR35_MSG);
- X ansi( "me" );
- X printf("%s\n", LOOSER.strasse);
- X }
- X if(LOOSER.telefon1[0] != '\0'){
- X ok++;
- X ansi( "md" );
- X printf("%s ", POR36_MSG);
- X ansi( "me" );
- X printf("%s", LOOSER.telefon1);
- X
- X if(LOOSER.telefon2[0] != '\0'){
- X printf(" // %s\n", LOOSER.telefon2);
- X }
- X else{
- X printf("\n");
- X }
- X }
- X
- X if(ok != 0) printf("\n");
- X ok = 0;
- X
- X if(LOOSER.geburtsdatum[0] != '\0'){
- X ok++;
- X ansi( "md" );
- X printf("%s ", POR37_MSG);
- X ansi( "me" );
- X printf("%s\n", LOOSER.geburtsdatum);
- X }
- X }
- X
- X if(ok != 0) printf("\n");
- X
- X if(USER.level >= WRITE_EX_LEV){
- X ansi( "md" );
- X printf("%s ", POR38_MSG);
- X ansi( "me" );
- X printf("%d\n", LOOSER.seq);
- X ansi( "md" );
- X printf("%s ", POR39_MSG);
- X ansi( "me" );
- X printf("%s // %s\n", LOOSER.lastlog, (unsigned char *) timereconv(LOOSER.lasttime));
- X }
- X
- X ansi( "md" );
- X printf("%s ", POR45_MSG);
- X ansi( "me" );
- X
- X b = 0;
- X sprintf(s, "%s/usr/%d/INDEX", HOME, LOOSER.id);
- X
- X fp = fopen(s, "r");
- X if (fp == NULL) {
- X nerror("intro.c", 291, "intro", "Datei-Lesefehler", s);
- X }
- X while (fgets(ex, 200, fp) != NULL){
- X if(ex[0] < 65) b++;
- X }
- X fclose(fp);
- X printf("%d\n", b-1);
- X
- X if(USER.level >= ADMIN_LEV){
- X ansi( "md" );
- X printf("%s ", POR40_MSG);
- X ansi( "me" );
- X b = LOOSER.elapsed/(3600*24);
- X printf("%d %s, ", b, POR41_MSG);
- X a = (LOOSER.elapsed - (b*(3600*24)))/3600;
- X printf("%d %s, ", a, POR41aMSG);
- X b = (LOOSER.elapsed - (b*(3600*24)) - (a*3600))/360;
- X printf("%d %s\n", b, POR41bMSG);
- X ansi( "md" );
- X printf("%s ", POR41cMSG);
- X ansi( "me" );
- X printf("%s\n", LOOSER.account);
- X ansi( "md" );
- X printf("%s ", POR42_MSG);
- X ansi( "me" );
- X printf("%ld %s\n", LOOSER.upratio, POR43_MSG);
- X ansi( "md" );
- X printf("%s ", POR44_MSG);
- X ansi( "me" );
- X printf("%ld %s\n", LOOSER.downratio, POR43_MSG);
- X }
- X
- X printf("\n");
- X}
- X
- END_OF_FILE
- if test 15712 -ne `wc -c <'src/portinfo.c'`; then
- echo shar: \"'src/portinfo.c'\" unpacked with wrong size!
- fi
- # end of 'src/portinfo.c'
- fi
- if test -f 'src/proto.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/proto.h'\"
- else
- echo shar: Extracting \"'src/proto.h'\" \(5444 characters\)
- sed "s/^X//" >'src/proto.h' <<'END_OF_FILE'
- X
- X/***************************************************************************/
- X/* PROGRAMM ix/Mbox */
- X/* DATEI proto.h */
- X/* FUNKTIONEN Prototypen der Funktionen */
- X/* AUTOR Olaf's CPROTO */
- X/* LETZTE AENDERUNG 28.05.1992 */
- X/***************************************************************************/
- X
- X#if defined(__STDC__) || defined(__cplusplus)
- X# define P_(s) s
- X#else
- X# define P_(s) ()
- X#endif
- X
- X/* admin.c */
- Xvoid user_aendern P_((void));
- Xvoid user_anzeigen P_((void));
- Xvoid user_loeschen P_((void));
- Xint setup_get P_((int max));
- Xvoid wait_until_keypressed P_((void));
- Xvoid admin P_((void));
- Xvoid setup P_((void));
- X
- X/* befehl.c */
- Xint bef P_((unsigned char befehl[], unsigned char arg[]));
- X
- X/* baudrate.c */
- Xint baudrate P_((int try));
- X
- X/* control.c */
- Xvoid control P_((unsigned char text[], int mode));
- Xvoid whodo P_((unsigned char text[]));
- X
- X/* coreleft.c */
- Xint coreleft P_((void));
- X
- X/* ctrlx.c */
- Xvoid ctrlx P_((void));
- Xvoid noctrlx P_((void));
- X
- X/* derror.c */
- Xvoid nerror P_((unsigned char file[], int line, unsigned char function[], unsigned char descr[], unsigned char er[]));
- X
- X/* games.c */
- Xint games P_((void));
- X
- X/* getch.c */
- Xint getch P_((void));
- X
- X/* getline.c */
- Xunsigned char *getline P_((int len, int mode, int bsc, unsigned char deftext[]));
- Xint getint P_((void));
- Xint yesno P_((void));
- X
- X/* help.c */
- Xint help P_((unsigned char cmd[]));
- X
- X/* intro.c */
- Xvoid intro P_((void));
- Xvoid init_user P_((unsigned char info[]));
- X
- X/* lesen.c */
- Xunsigned char *getsite P_((unsigned char arg[]));
- Xint checkdomaintype P_((unsigned char arg[]));
- Xvoid ansage P_((void));
- Xvoid unterschrift P_((void));
- Xvoid lesen P_((unsigned char arg[]));
- X
- X/* lesen2.c */
- Xint anzeigen P_((int art, int von, int bis));
- Xvoid lesen2 P_((unsigned char arg[], int mode));
- Xvoid inhalt2 P_((unsigned char arg[], int mode));
- Xvoid loeschen2 P_((unsigned char arg[], int mode));
- X
- X/* loop.c */
- Xvoid sigcatch P_((int sig));
- Xunsigned char *cut_bef P_((unsigned char s[]));
- Xunsigned char *cut_arg P_((unsigned char s[]));
- Xunsigned char *rates P_((void));
- Xvoid loop P_((void));
- X
- X/* mail.c */
- Xunsigned char *fetch_reciepy P_((unsigned char REP[]));
- Xint brief P_((unsigned char arg[]));
- X
- X/* main.c */
- Xvoid logout P_((void));
- Xvoid init P_((void));
- Xvoid fixoutput P_((void));
- X/* int main P_((void)); */
- X
- X/* makro.c */
- Xunsigned char *makro P_((unsigned char s[]));
- Xvoid set_makros P_((void));
- Xvoid get_makros P_((void));
- Xvoid add_makro P_((unsigned char s[]));
- Xint makro_definition P_((unsigned char s[]));
- X
- X/* mb-daemon.c */
- Xint reflector P_((unsigned char arg[], unsigned char msg[]));
- Xint pdsize P_((unsigned char arg[]));
- Xunsigned char *scan P_((unsigned char arg[]));
- Xvoid mix P_((unsigned char s[], unsigned char t[]));
- Xint main P_((int argc, unsigned char *argv[]));
- X
- X/* mbrsh.c */
- Xint main P_((int argc, unsigned char *argv[]));
- X
- X/* misc.c */
- Xvoid scanner P_((int mode));
- Xvoid schreiben P_((unsigned char arg[]));
- Xint prf P_((unsigned char arg[]));
- Xint pruefe P_((unsigned char arg[]));
- X
- X/* misc2.c */
- Xint chk_newsgrp P_((unsigned char s[]));
- Xint subb P_((unsigned char s[]));
- Xvoid loeschen P_((unsigned char arg[]));
- Xint brett P_((unsigned char arg[]));
- X
- X/* nerror.c */
- Xvoid nerror P_((unsigned char file[], int line, unsigned char function[], unsigned char descr[], unsigned char er[]));
- X
- X/* outdial.c */
- Xvoid outdial P_((void));
- X
- X/* pd.c */
- Xvoid pd P_((unsigned char arg[], unsigned char keywds[]));
- Xvoid status P_((void));
- Xvoid mkix P_((unsigned char pfad[]));
- Xvoid statistik P_((void));
- Xvoid download P_((unsigned char arg[]));
- X
- X/* portinfo.c */
- Xvoid port P_((unsigned char arg[]));
- Xvoid show_level P_((void));
- Xvoid userliste P_((unsigned char arg[]));
- Xvoid finger P_((unsigned char arg[]));
- X
- X/* postfach.c */
- Xvoid postfach P_((unsigned char arg[]));
- X
- X/* show.c */
- Xint show P_((unsigned char fname[], int maxlines, int mode));
- Xint more P_((void));
- X
- X/* suchen.c */
- Xvoid suchen P_((unsigned char muster[]));
- X
- X/* tools.c */
- Xunsigned char *whoami P_((void));
- Xunsigned char *stripped P_((unsigned char st[]));
- Xunsigned char *upcased P_((unsigned char st[]));
- Xint length P_((unsigned char st[]));
- Xunsigned char *strcopy P_((unsigned char st[], int v, int b));
- Xunsigned char *bigcopy P_((unsigned char st[], int v, int b));
- Xint strcomp P_((unsigned char s[], unsigned char t[]));
- Xint ansi P_((unsigned char code[]));
- Xint ansi2 P_((unsigned char code[], int x, int y));
- X/* unsigned char *termansi P_((unsigned char code[])); */
- Xunsigned char *mydate P_((int mode));
- Xunsigned char *mytime P_((int mode));
- Xunsigned char *crypted P_((unsigned char s[]));
- Xlong dateconv P_((unsigned char d[]));
- Xunsigned char *datereconv P_((long l));
- Xint timeconv P_((unsigned char t[]));
- Xunsigned char *timereconv P_((int i));
- Xunsigned char *shortname P_((unsigned char longname[]));
- Xint maybe_locked P_((unsigned char name[], unsigned char mode[]));
- Xunsigned char *numstripped P_((unsigned char s[]));
- Xvoid headline P_((unsigned char line[]));
- Xvoid mblock P_((unsigned char path[]));
- Xvoid mbunlock P_((unsigned char path[]));
- Xint tty P_((void));
- Xunsigned char *ttyna P_((void));
- Xvoid clearline P_((void));
- Xint isin P_((unsigned char pattern[], int c));
- X
- X/* weiterl.c */
- Xvoid weiterleiten P_((unsigned char arg[]));
- Xvoid carboncopy P_((unsigned char cc[], unsigned char bcc[]));
- X
- X/* xmd.c */
- Xint brief P_((unsigned char arg[]));
- Xint mailing P_((void));
- Xint main P_((int argc, unsigned char *argv[]));
- X
- X#undef P_
- X
- X
- X
- END_OF_FILE
- if test 5444 -ne `wc -c <'src/proto.h'`; then
- echo shar: \"'src/proto.h'\" unpacked with wrong size!
- fi
- # end of 'src/proto.h'
- fi
- if test -f 'src/show.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/show.c'\"
- else
- echo shar: Extracting \"'src/show.c'\" \(15144 characters\)
- sed "s/^X//" >'src/show.c' <<'END_OF_FILE'
- X/***************************************************************************/
- X/* PROGRAMM ix/Mbox */
- X/* DATEI show.c */
- X/* FUNKTIONEN show(), more(), richtext(), quoted_printable(), */
- X/* iso_convert(), sio_line() */
- X/* AUTOR vs (Volker Schuermann/MINIX-Version) */
- X/* LETZTE AENDERUNG 17.11.1992 */
- X/***************************************************************************/
- X
- X#include <stdio.h>
- X#include <string.h>
- X
- X#include "mbox.h"
- X
- X
- Xstatic int show_more;
- Xstatic FILE *page;
- Xstatic unsigned char show_tmp[STRING];
- Xstatic int seite;
- X
- X
- Xextern unsigned char headinfo[STRING];
- X
- Xstatic int morechen;
- X
- X
- X/* Globals fuer RTF (Richtext Format): */
- X
- Xstatic int RTFcomment;
- Xstatic int RTFcenter;
- Xstatic int RTFrightflush;
- Xstatic int RTFheading;
- X
- Xstatic unsigned char ENCODING[STRING];
- X
- Xstatic int QPkeys;
- X
- Xunsigned char *richtext();
- Xunsigned char *quoted_printable();
- Xunsigned char *iso_convert();
- Xunsigned char *iso_line();
- X
- X/***************************************************************************/
- X/* FUNKTION show() */
- X/* BESCHREIBUNG Zeigt den Inhalt einer Datei an. */
- X/* PARAMETER fname = Dateiname */
- X/* maxlines = mehr Zeilen auf keinen Fall ausgeben */
- X/* mode = '> 99' Ueberschrift einrechnen */
- X/* '= 99' Reset (alle Parameter von "show") */
- X/* '= 0' Kontinuierlich ausgeben */
- X/* RUECKGABE -1 = Datei nicht gefunden */
- X/* -9 = Datei ueberspringen */
- X/***************************************************************************/
- X
- X#define LLL 80
- X
- Xint show(fname, maxlines, mode)
- Xunsigned char fname[];
- Xint maxlines;
- Xint mode;
- X{
- X FILE *fp;
- X
- X unsigned char s[LONGSTRING];
- X unsigned char o[LONGSTRING];
- X unsigned char t[STRING];
- X unsigned char CONTENT[STRING];
- X int c;
- X int ml;
- X int ret_status = 0;
- X int maxi = MAX_SCR_LINES;
- X int swing = 0;
- X int sl, ok;
- X int i, e;
- X
- X int HEADER_lines = 0;
- X int HEADER_path = 0;
- X int HEADER_double = 0;
- X
- X int FACE = 0;
- X
- X
- X if (mode > 99) { /* HEADLINE */
- X mode -= 100;
- X maxi -= 2;
- X swing = 2;
- X morechen = 1;
- X seite = 1;
- X }
- X if (mode == 99) { /* RESET */
- X show_more = 0;
- X seite = 1;
- X return 0;
- X }
- X fp = fopen(fname, "r");
- X if (fp == NULL) {
- X return -1;
- X }
- X ml = 0;
- X morechen = 0;
- X
- X CONTENT[0] = '\0';
- X ENCODING[0] = '\0';
- X
- X RTFcomment = 0;
- X RTFcenter = 0;
- X RTFrightflush = 0;
- X RTFheading = 0;
- X
- X QPkeys = 0;
- X
- X
- X
- X /* Temporary checking Usage */
- X
- X if((strcomp("PM", BRETT) != 0) && (USER.level < 10)){
- X page = fopen( "/local/mbox/etc/usage", "a" );
- X fprintf(page, "%s\n", NG);
- X fclose(page);
- X }
- X
- X sprintf(show_tmp, "%s/show%d", TMP, getpid());
- X page = fopen(show_tmp, "w");
- X
- X if (mode != 2)
- X show_more = 0;
- X else
- X morechen = show_more;
- X
- X if (show_more > maxi) show_more = 0;
- X
- X
- X if(DISKUSSION){
- X while((fgets(t, STRING, fp) != NULL) && (strcomp("Subject: ", t) != 0));
- X
- X if(strcomp("Subject: ", t) != 0) return -9;
- X
- X if(sgrep( t, DIS_subject ) != 0){
- X rewind(fp);
- X }
- X else{
- X fclose(fp);
- X fclose(page);
- X return -9;
- X }
- X }
- X
- X
- X while ((ml < maxlines) && (fgets(s, LONGSTRING, fp) != NULL)) {
- X
- X if(SHORT_HEADER){
- X if((strcomp("Path: ", s) == 0) || (strcomp("Newsgroups: ", s) == 0)){
- X HEADER_path++;
- X continue;
- X }
- X
- X if((HEADER_path != 0) && (HEADER_lines == 0)){
- X
- X if(strcomp("From: ", s) == 0){
- X printf("%s %s", GBL01_MSG, strcopy(s, 6, strlen(s)));
- X fprintf(fp, "%s %s", GBL01_MSG, strcopy(s, 6, strlen(s)));
- X morechen++;
- X }
- X if(strcomp("Subject: ", s) == 0){
- X printf("%s %s", GBL03_MSG, strcopy(s, 9, strlen(s)));
- X fprintf(fp, "%s %s", GBL03_MSG, strcopy(s, 9, strlen(s)));
- X morechen++;
- X }
- X if(strcomp("Date: ", s) == 0){
- X printf("%s %s\n", GBL02_MSG, strcopy(s, 6, strlen(s)));
- X fprintf(fp, "%s %s\n", GBL02_MSG, strcopy(s, 6, strlen(s)));
- X morechen++;
- X }
- X if(strlen(s) < 3){
- X HEADER_lines++;
- X morechen++;
- X }
- X continue;
- X }
- X }
- X else{
- X if(HEADER_lines == 0){
- X sprintf(t, "%s %s", GBL01_MSG, X_MAIL_DEMON);
- X if(strcomp(t, s) == 0){
- X do{
- X fgets(s, 250, fp);
- X }while(strcomp("From", s) != 0);
- X HEADER_double++;
- X ansi("md");
- X }
- X if((strcomp("Path:", s) == 0) || (strcomp("Newsgroups:", s) == 0) || (strcomp(GBL01_MSG, s) == 0)){
- X ansi("md");
- X HEADER_double++;
- X }
- X if(strlen(s) < 3){
- X HEADER_lines++;
- X HEADER_double = 0;
- X ansi("me");
- X }
- X }
- X }
- X
- X if(strcomp("Content-Type:", s) == 0){
- X strcpy(CONTENT, (unsigned char *) strcopy(s, 14, 80));
- X if(strcomp("text/richtext", CONTENT) != 0) /* RTF etc. */
- X CONTENT[0] = '\0';
- X }
- X if(strcomp("Content-Transfer-Encoding:", s) == 0){
- X strcpy(ENCODING, (unsigned char *) strcopy(s, 27, 80));
- X
- X }
- X if(strcomp("Content-", s) == 0){
- X if((HEADER_lines != 0) || (ml < 2)) continue; /* :-)) */
- X }
- X if(strcomp("X-Face:", s) == 0){
- X if(FACE == 0){
- X FACE++;
- X }
- X }
- X
- X#ifdef _MULTIMEDIA
- X if(strcomp("Quoted-Printable", ENCODING) == 0){
- X strcpy(s, (unsigned char *) quoted_printable(s));
- X }
- X if(CONTENT[0] != '\0'){
- X strcpy(s, (unsigned char *) richtext(s));
- X }
- X#endif
- X if(UMLAUT_MODUS != 4) strcpy(s, (unsigned char *) iso_line(s));
- X
- X sl = length(s);
- X while(sl > LLL){
- X strcpy(o, (unsigned char *) s);
- X sl = LLL; ok = 0;
- X i = 0;
- X while((s[i] != '\0') && (i <= sl)){
- X if(s[i] == ESC){
- X i++;
- X while((s[i] < 65) || (s[i] == '[')){
- X i++;
- X sl++;
- X }
- X sl += 2;
- X }
- X i++;
- X }
- X
- X while((sl > 0) && (ok == 0)){
- X if(s[sl] < 48){
- X ok = sl;
- X }
- X sl--;
- X }
- X s[ok] = '\0';
- X morechen++;
- X
- X if(sl < (strlen(o)-1)){
- X printf("%s\n", s);
- X fprintf(page, "%s\n", s);
- X
- X strcpy(s, (unsigned char *)bigcopy(o, ok, length(o)));
- X sl = length(s);
- X }
- X else{
- X sl = 0;
- X }
- X
- X if(ok == 0){
- X sl = LLL;
- X printf("[SysBug \"show.c\"]");
- X }
- X if(s[0] == '\n') s[0] = '\0';
- X }
- X i = strlen(s) -1;
- X if(s[i] == '\n') s[i] = '\0';
- X printf("%s\n", s);
- X fputs(s, page);
- X ml++;
- X morechen++;
- X if ((morechen >= maxi) && (mode > 0)) {
- X morechen = 0;
- X maxi += swing;
- X swing = 0;
- X fclose(page);
- X ret_status = more();
- X if (ret_status != 0) {
- X ml = maxlines + 9999;
- X }
- X else {
- X page = fopen(show_tmp, "w");
- X if(HEADER_double != 0){
- X ansi( "md" );
- X }
- X }
- X }
- X }
- X fclose(fp);
- X
- X show_more = morechen;
- X
- X if (page != NULL) fclose(page);
- X unlink(show_tmp);
- X
- X /* Experimental Use only !
- X */
- X if(FACE != 0){
- X faces( fname );
- X }
- X
- X
- X return (int) ret_status;
- X}
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION more() */
- X/* BESCHREIBUNG Erfragen ob weitergelesen werden soll, oder nicht. */
- X/* PARAMETER keine */
- X/* RUECKGABE 0 = weiterlesen */
- X/* -1 = abbrechen */
- X/***************************************************************************/
- X
- Xint more()
- X{
- X unsigned char s[LONGSTRING];
- X unsigned char c;
- X int ok = 0;
- X
- XFIRST_TRY:
- X
- X ansi("mr");
- X printf(" ");
- X printf("%c[%s] (?) > ", CR, SHO04_MSG);
- X ansi("me");
- X
- XSECOND_TRY:
- X
- X c = getint();
- X
- X if (c == '?') {
- X ansi("mr");
- X clearline();
- X printf("%c%s > ", CR, SHO05_MSG);
- X ansi("me");
- X goto SECOND_TRY;
- X }
- X if (c > 96) c -= 32;
- X
- X if ((c == DEL) ||
- X (c == CTRL_D) ||
- X (c == CTRL_X) ||
- X (c == SHO06_MSG) ||
- X (c == SHO07_MSG))
- X ok = -1;
- X
- X if ((c == SHO08_MSG) || (c == SHO09_MSG)) ok = 1;
- X
- X if (c == SHO10_MSG) {
- X ansi("cl");
- X ansi("mr");
- X printf(" ");
- X printf("%c%s\n", CR, SHO11_MSG);
- X ansi("me");
- X page = fopen(show_tmp, "r");
- X if (page != NULL) {
- X while (fgets(s, 250, page) != NULL) {
- X printf("%s", s);
- X }
- X fclose(page);
- X }
- X goto FIRST_TRY;
- X }
- X
- X if(ok != 1){
- X if (USER.more == 3) {
- X clearline();
- X }
- X else {
- X if(USER.more != 0){
- X ansi("cl");
- X seite++;
- X sprintf(s, "%s^- [%s %d]", headinfo, SHO12_MSG, seite);
- X headline(s);
- X }
- X else printf("\n\n");
- X }
- X }
- X else{
- X clearline();
- X }
- X
- X return (int) ok;
- X}
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION richtext() */
- X/* BESCHREIBUNG RTF ... die Zukunft kommt bestimmt :-))) */
- X/* PARAMETER Zeile im RT-Format */
- X/* RUECKGABE Zeile im ANSI-Format */
- X/***************************************************************************/
- X
- Xunsigned char *richtext( s )
- Xunsigned char s[];
- X{
- X unsigned char rt[LONGSTRING];
- X unsigned char line[LONGSTRING];
- X unsigned char space[LONGSTRING];
- X int i = 0, j;
- X int l = 0;
- X int not;
- X int keys = 0;
- X
- X while(s[i] != '\0'){
- X if(s[i] != '<'){
- X if(RTFcomment == 0){
- X /* RTF-Konform:
- X if(s[i] == '\n')
- X line[l] = ' ';
- X else
- X line[l] = s[i];
- X NICHT RTF-Konform: */
- X
- X line[l] = s[i];
- X l++;
- X keys++;
- X }
- X }
- X else{
- X line[l] = '\0';
- X not = 0;
- X i++;
- X j = i;
- X while((s[j] != '>') && (s[j] != '\0')){
- X if(s[j] == '/'){
- X i++;
- X not++;
- X }
- X j++;
- X }
- X strcpy(rt, (unsigned char *) strcopy(s, i, (j-1)));
- X
- X if(not == 0){
- X if(strcomp("Bold", rt) == 0)
- X strcat( line, (unsigned char *) termansi( "md" ));
- X if(strcomp("Italic", rt) == 0)
- X strcat( line, (unsigned char *) termansi( "mr" ));
- X if(strcomp("Bigger", rt) == 0)
- X strcat( line, (unsigned char *) termansi( "mb" ));
- X if(strcomp("Underline", rt) == 0)
- X strcat( line, (unsigned char *) termansi( "us" ));
- X if(strcomp("Paragraph", rt) == 0){
- X strcat( line, "\n\n");
- X morechen += 2;
- X }
- X if(strcomp("Comment", rt) == 0)
- X RTFcomment++;
- X if(strcomp("Center", rt) == 0)
- X RTFcenter++;
- X if(strcomp("FlushRight", rt) == 0)
- X RTFrightflush++;
- X if(strcomp("Heading", rt) == 0){
- X RTFheading++;
- X strcat( line, (unsigned char *) termansi( "md" ));
- X }
- X }
- X else{
- X if(strcomp("Bold", rt) == 0)
- X strcat( line, (unsigned char *) termansi( "me" ));
- X if(strcomp("Italic", rt) == 0)
- X strcat( line, (unsigned char *) termansi( "me" ));
- X if(strcomp("Bigger", rt) == 0)
- X strcat( line, (unsigned char *) termansi( "me" ));
- X if(strcomp("Underline", rt) == 0)
- X strcat( line, (unsigned char *) termansi( "me" ));
- X if(strcomp("Paragraph", rt) == 0){
- X strcat( line, "\n\n");
- X morechen += 2;
- X }
- X if(strcomp("Comment", rt) == 0)
- X RTFcomment = 0;
- X if(strcomp("Center", rt) == 0)
- X RTFcenter = 9999;
- X if(strcomp("FlushRight", rt) == 0)
- X RTFrightflush = 9999;
- X if(strcomp("Heading", rt) == 0){
- X RTFheading = 9999;
- X strcat( line, (unsigned char *) termansi( "me" ));
- X }
- X }
- X
- X if(strcomp("LT", rt) == 0)
- X strcat( line, (unsigned char *) "<" );
- X
- X /* NICHT RTF-Konform:
- X if(strcomp("NL", rt) == 0){
- X strcat( line, (unsigned char *) "\n" );
- X morechen++;
- X }
- X */
- X
- X if(strcomp("NP", rt) == 0)
- X strcat( line, (unsigned char *) "\f" );
- X if(RTFcomment == 0){
- X l = strlen(line);
- X }
- X i = j;
- X }
- X i++;
- X }
- X line[l] = '\0';
- X strcpy(space, (unsigned char *) " ");
- X
- X if((RTFcenter != 0) || (RTFheading != 0)){
- X i = (79 - keys) / 2;
- X if(i < 0) i = 0;
- X if(i > 79) i = 0;
- X space[i] = '\0';
- X strcat(space, (unsigned char *) line);
- X strcpy(line, (unsigned char *) space);
- X }
- X if(RTFrightflush != 0){
- X i = 79 - keys;
- X space[i] = '\0';
- X strcat(space, (unsigned char *) line);
- X strcpy(line, (unsigned char *) space);
- X }
- X /*
- X printf("%s", line);
- X */
- X if(RTFcenter == 9999) RTFcenter = 0;
- X if(RTFrightflush == 9999) RTFrightflush = 0;
- X if(RTFheading == 9999) RTFheading = 0;
- X
- X return (unsigned char *) line;
- X}
- X
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION quoted_printable() */
- X/* BESCHREIBUNG Transfer-Encoding: Regel #1 bis #5 */
- X/* PARAMETER Zeile im RT-Format */
- X/* RUECKGABE Decodierte Zeile */
- X/***************************************************************************/
- X
- Xunsigned char *quoted_printable( s )
- Xunsigned char s[];
- X{
- X unsigned char line[LONGSTRING];
- X unsigned char t[STRING];
- X int i = 0, l = 0, p = 0;
- X
- X while(s[i] != '\0'){
- X if(s[i] == '='){
- X if(s[(i+1)] == '\n'){
- X i++;
- X }
- X else{
- X if(s[(i+1)] < 65)
- X p = 16 * (s[(i+1)] - 48);
- X else
- X p = 16 * (s[(i+1)] - 55);
- X if(s[(i+2)] < 65)
- X p = p + (s[(i+2)] - 48);
- X else
- X p = p + (s[(i+2)] - 55);
- X line[l] = p;
- X l++;
- X i += 2;
- X }
- X }
- X else{
- X line[l] = s[i];
- X l++;
- X QPkeys++;
- X if(s[i] == '\n') QPkeys = 0;
- X }
- X
- X if(QPkeys >= 75){
- X p = l;
- X while((line[p] != ' ') && (p > 0)){
- X p--;
- X }
- X line[p] = '\n';
- X QPkeys = 0;
- X }
- X i++;
- X }
- X line[l] = '\0';
- X
- X return (unsigned char *) line;
- X}
- X
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION iso_convert() */
- X/* BESCHREIBUNG Konvertiert ISO 8859-1 / IBM */
- X/* PARAMETER Char als ISO-Zeichen */
- X/* RUECKGABE String mit Ersatz-Zeichen */
- X/***************************************************************************/
- X
- Xunsigned char *iso_convert( c )
- Xint c;
- X{
- X int i = 0;
- X int ok = 0;
- X
- X unsigned char t[STRING];
- X
- X t[1] = '\0';
- X
- X if(c > 127){
- X
- X if(UMLAUT_MODUS == 1){
- X switch(c){
- X case 142 :
- X case 196 : t[0] = 196;
- X break;
- X case 153 :
- X case 214 : t[0] = 214;
- X break;
- X case 154 :
- X case 220 : t[0] = 220;
- X break;
- X case 225 :
- X case 223 : t[0] = 223;
- X break;
- X case 132 :
- X case 228 : t[0] = 228;
- X break;
- X case 148 :
- X case 246 : t[0] = 246;
- X break;
- X case 129 :
- X case 252 : t[0] = 252;
- X break;
- X }
- X }
- X if(UMLAUT_MODUS == 2){
- X switch(c){
- X case 142 :
- X case 196 : t[0] = 142;
- X break;
- X case 153 :
- X case 214 : t[0] = 153;
- X break;
- X case 154 :
- X case 220 : t[0] = 154;
- X break;
- X case 225 :
- X case 223 : t[0] = 225;
- X break;
- X case 132 :
- X case 228 : t[0] = 132;
- X break;
- X case 148 :
- X case 246 : t[0] = 148;
- X break;
- X case 129 :
- X case 252 : t[0] = 129;
- X break;
- X }
- X }
- X if(UMLAUT_MODUS == 3){
- X switch(c){
- X case 142 :
- X case 196 : t[0] = 'A'; ok++;
- X break;
- X case 153 :
- X case 214 : t[0] = 'O'; ok++;
- X break;
- X case 154 :
- X case 220 : t[0] = 'U'; ok++;
- X break;
- X case 225 :
- X case 223 : t[0] = 's';
- X t[1] = 's';
- X break;
- X case 132 :
- X case 228 : t[0] = 'a'; ok++;
- X break;
- X case 148 :
- X case 246 : t[0] = 'o'; ok++;
- X break;
- X case 129 :
- X case 252 : t[0] = 'u'; ok++;
- X break;
- X }
- X if(ok != 0){
- X t[1] = 'e';
- X }
- X t[2] = '\0';
- X }
- X }
- X else{
- X t[0] = c;
- X }
- X
- X return (unsigned char *) t;
- X}
- X
- X
- Xunsigned char *iso_line( s )
- Xunsigned char s[];
- X{
- X unsigned char t[LONGSTRING];
- X
- X int i = 0;
- X
- X t[0] = '\0';
- X
- X while(s[i] != '\0'){
- X strcat(t, (unsigned char *) iso_convert( s[i] ));
- X i++;
- X }
- X
- X return (unsigned char *) t;
- X}
- END_OF_FILE
- if test 15144 -ne `wc -c <'src/show.c'`; then
- echo shar: \"'src/show.c'\" unpacked with wrong size!
- fi
- # end of 'src/show.c'
- fi
- if test -f 'src/xmd.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/xmd.c'\"
- else
- echo shar: Extracting \"'src/xmd.c'\" \(13319 characters\)
- sed "s/^X//" >'src/xmd.c' <<'END_OF_FILE'
- X/***************************************************************************/
- X/* PROGRAMM ix/Mbox */
- X/* DATEI xmd.c */
- X/* FUNKTIONEN brief(), mailing(), main() */
- X/* AUTOR vs (Volker Schuermann/MINIX-Version) */
- X/* LETZTE AENDERUNG 04.09.1992 */
- 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
- Xunsigned char tmp[STRING];
- Xunsigned char alias[MAX_XMD_ALIAS][2][STRING];
- Xunsigned char x400[STRING];
- Xint INTERACT;
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION brief() */
- X/* BESCHREIBUNG Leitet einen Brief weiter an einen MBox-Account. */
- X/* Auf diese Weise ist der Mbox-User auch unter der */
- X/* Adresse 'Real.Name@UUCPID' erreichbar. */
- X/* PARAMETER arg = Mbox-User-Name */
- X/* RUECKGABE keine */
- X/***************************************************************************/
- X
- Xbrief(arg)
- Xunsigned char arg[];
- X{
- X FILE *fp;
- X FILE *ff;
- X int fd;
- X int i, a, b;
- X int ok;
- X struct userdaten LOOSER;
- X
- X struct tm *timeptr;
- X time_t timer;
- X
- X int receiver;
- X static int mail_id;
- X int EX_PM = 0;
- X int REPLY = 0;
- X int lines = 0;
- X int local = 0;
- X int arrived = 1;
- X
- X
- X unsigned char s[STRING];
- X unsigned char t[STRING];
- X unsigned char top[STRING];
- X unsigned char subject[STRING];
- X unsigned char autor[STRING];
- X unsigned char rec_char[STRING];
- X unsigned char ex[255];
- X unsigned char user[STRING];
- X unsigned char c;
- X unsigned char protokoll;
- X unsigned char destination[STRING];
- X unsigned char receipt[STRING];
- X
- X i = 0;
- X ok = 0;
- X
- X
- X strcpy(user, (unsigned char *) stripped(arg));
- X strcpy(subject, XMD01_MSG);
- X
- X JUNK: receiver = 0;
- X
- X fd = open(UDBASE, O_RDONLY);
- X if (fd == -1) {
- X printf("\nSHIT!\n");
- X exit(-1);
- X }
- X lseek(fd, 0L, SEEK_SET);
- X while ((read(fd, (unsigned char *) &LOOSER, sizeof(LOOSER)) == sizeof(LOOSER)) && (receiver == 0)) {
- 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
- X if (receiver == 0) {
- X sprintf(subject, "[xmd:] '%s' ??? ", user);
- X strcpy(user, POSTMASTER);
- X arrived = 0;
- X goto JUNK;
- X }
- X sprintf(s, "%s/usr/%d/seq", HOME, receiver);
- X fp = fopen(s, "r");
- X fgets(s, 80, fp);
- X mail_id = atoi( s );
- X fclose(fp);
- X
- X sprintf(destination, "%s/usr/%d/%d", HOME, receiver, mail_id);
- X fp = fopen(destination, "w");
- X
- X sprintf(s, "%s %s (%s)\n", GBL01_MSG, X_MAIL_DEMON, "xmd");
- X fputs(s, fp);
- X
- X time(&timer);
- X timeptr = localtime(&timer);
- X strcpy(t, (unsigned char *) 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 fprintf(fp, "%s\n\n", XMD02_MSG);
- X
- X lines = 7;
- X
- X autor[0] = '\0';
- X subject[0] = '\0';
- X
- X ff = fopen(tmp, "r");
- X if (ff == NULL) {
- X return;
- X }
- X while (fgets(s, 80, ff) != NULL) {
- X i = 0;
- X /*
- X while(s[i] != '\0'){
- X if(s[i] > 127){
- X s[i] = '?';
- X }
- X i++;
- X }
- X */
- X if(strcomp("*From ", s) == 0){
- X strcpy(s, (unsigned char *) stripped(strcopy(s, 1, 80)));
- X strcat(s, "\n");
- X }
- X fputs(s, fp);
- X lines++;
- X if((strcomp("Subject: ", s) == 0) && (subject[0] == '\0')){
- X strcpy(subject, (unsigned char *) stripped(strcopy(s, 9, 80)));
- X }
- X if((strcomp("From: ", s) == 0) && ((autor[0] == '\0') || (local = 1))){
- X strcpy(autor, (unsigned char *) stripped(strcopy(s, 6, 80)));
- X local = 0;
- X }
- X if(strcomp("From ", s) == 0){
- X strcpy(autor, (unsigned char *) stripped(strcopy(s, 5, 80)));
- X local = 1;
- X }
- X if(strcomp("*From ", s) == 0){
- X strcpy(autor, (unsigned char *) stripped(strcopy(s, 6, 80)));
- X local = 1;
- X }
- X if(strcomp("Return-Receipt-To: ", s) == 0){
- X strcpy(receipt, (unsigned char *) stripped(strcopy(s, 19, 80)));
- X }
- X }
- X fclose(ff);
- X fclose(fp);
- X
- X i = 0;
- X while(autor[i] != '\0'){
- X if(autor[i] == '(') autor[(i-1)] = '\0';
- X i++;
- X }
- X
- X if((local == 1) && (strcomp("postmaster", autor) == 0)){
- X fclose(fp);
- X unlink(destination);
- X if(INTERACT == 0) printf("[%s]\n", arg);
- X fp = fopen( XMDLOG, "a" );
- X fprintf(fp, "%-29.29s %33.33s\n", (unsigned char *) stripped(arg), subject);
- X fclose(fp);
- X return;
- X }
- X
- X sprintf(s, "%s/usr/%d/INDEX", HOME, receiver);
- X fp = fopen(s, "a");
- X
- X sprintf(s, "%d ", mail_id);
- X s[6] = '\0';
- X fputs(s, fp);
- X
- X sprintf(ex, "%s ", subject);
- X ex[26] = '\0';
- X fputs(ex, fp);
- X
- X sprintf(ex, " %s ", autor);
- X ex[22] = '\0';
- X fputs(ex, fp);
- X
- 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 sprintf(s, "%-5.d\n", lines);
- X fputs(s, fp);
- X
- X fclose(fp);
- X
- X sprintf(s, "%s/usr/%d/seq", HOME, receiver);
- X fp = fopen(s, "w");
- X rewind(fp);
- X fprintf(fp, "%d\n", (int) (mail_id + 1));
- X fclose(fp);
- X
- X if(INTERACT == 0) printf("%s\n", arg);
- X
- X ff = fopen( XMDLOG, "a" );
- X fprintf(ff, "%5.5s %5.5s %-29.29s %-31.31s\n",
- X (unsigned char *) mydate( 1 ), (unsigned char *) mytime( 1 ),
- X (unsigned char *) stripped(arg), subject);
- X fclose(ff);
- X
- X if(receipt[0] != '\0'){
- X i = 0; b = 0;
- X while(receipt[i] != '\0'){
- X if(receipt[i] == '!') b = i;
- X if(receipt[i] == '@') b = i;
- X i++;
- X }
- X if(b == 0) return;
- X i = b; a = 0;
- X while((i > 0) && (a == 0)){
- X if((receipt[i] == ' ') ||
- X (receipt[i] == '<') ||
- X (receipt[i] == '(')) a = i + 1;
- X i--;
- X }
- X i = b; b = 0;
- X while((receipt[i] != '\0') && (b == 0)){
- X if((receipt[i] == ' ') ||
- X (receipt[i] == '>') ||
- X (receipt[i] == ')')) b = i -1;
- X i++;
- X }
- X if(b == 0) b = i -1;
- X strcpy(receipt, (unsigned char *) strcopy(receipt, a, b));
- X
- X sprintf(t, "%s/%d.REC", TMP, getpid());
- X ff = fopen( t, "w" );
- X
- X time(&timer);
- X
- X fprintf(ff, "From: XMD@%s\n", UUCPID2);
- X fprintf(ff, "Sender: postmaster@%s (Die Postmeisterei)\n", UUCPID2);
- X fprintf(ff, "Organization: %s\n", ORGANIZATION);
- X fprintf(ff, "To: %s\n", receipt);
- X fprintf(ff, "Subject: Delivering Report\n");
- X fprintf(ff, "X-Mailer: %s %s %s\n", VERSION, PATCHLEVEL, AUTOR);
- X fprintf(ff, "Message-Id: <%x.xmd@%s>\n", timer, UUCPID2);
- X fputs("\n", ff);
- X
- X fprintf(ff, "Wuppertal (FRG), %s at %s\n\n", mydate( 1 ), mytime( 1 ));
- X
- X fprintf(ff, "Your mail \"%s\" ...\n", subject);
- X if(arrived == 1){
- X fprintf(ff, "reached %s.\n\nBye now!\n", (unsigned char *) stripped(arg));
- X }
- X else{
- X fprintf(ff, "couldn't be delivered to %s.\n\n", (unsigned char *) stripped(arg));
- X fprintf(ff, "The local postmaster got a copy of your mail! Maybe he is able to forward it\nto the correct receipient!\n\n");
- X }
- X fclose(ff);
- X
- X sprintf(s, "/bin/sh ./etc/rmail.sh %s %s", t, receipt);
- X printf("%s\n", s);
- X system(s);
- X unlink( t );
- X }
- X}
- X
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION is_external() */
- X/* BESCHREIBUNG Wenn die MBox auch ein Gateway betreibt ... */
- X/* PARAMETER s = "To: ...." Zeile */
- X/* RUECKGABE Position des "%" Zeichens */
- X/***************************************************************************/
- X
- X
- Xint is_external( s )
- Xunsigned char s[];
- X{
- X int i = 0, j = 0, p = 0;
- X
- X if(strcomp("To: Empty Address", s) == 0) return (int) -1;
- X
- X while(s[i] != '\0'){
- X if(s[i] == '%') j++;
- X if((s[i] == '@') && (j > 0)) p = i;
- X i++;
- X }
- X return (int) p;
- X}
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION mailing() */
- X/* BESCHREIBUNG Isoliert den Mbox-User-Namen aus der UUCP-Adresse und */
- X/* ruft mit diesem Namen die Routine "brief()" auf. */
- X/* PARAMETER keine */
- X/* RUECKGABE keine */
- X/***************************************************************************/
- X
- Xmailing()
- X{
- X FILE *fp;
- X FILE *ff;
- X unsigned char s[255];
- X unsigned char t[STRING];
- X int i, j;
- X int toggle = 0;
- X
- X fp = fopen(tmp, "r");
- X if (fp == NULL) {
- X printf("\nPuhhh???\n");
- X exit(-1);
- X }
- X while (fgets(s, 80, fp) != NULL) {
- X if ((strcomp("X400-Recipients:", s) == 0) && (toggle == 0)){
- X i = 16;
- X j = 0;
- X while(s[i] != '\0'){
- X if(s[i] == '<') j = i+1;
- X if(s[i] == '@'){
- X strcpy(x400, (unsigned char *) strcopy(s, j, (i-1)));
- X }
- X i++;
- X }
- X }
- X if ((strcomp("To:", s) == 0) && (toggle == 0)){
- X i = 1;
- X toggle++;
- X while(strcomp("EOL", alias[i][1]) != 0){
- X if(strcomp(alias[i][1], s) == 0) strcpy(s, alias[i][2]);
- X i++;
- X }
- X
- X i = 0;
- X j = 0;
- X while ((s[i] != '\0') && (s[i] != '@')) {
- X if (s[i] == '!') j = i;
- X if (s[i] == '.') s[i] = ' ';
- X i++;
- X }
- X i--;
- X if (j == 0) {
- X strcpy(t, (unsigned char *) strcopy(s, 4, i));
- X } else {
- X strcpy(t, (unsigned char *) strcopy(s, (j + 1), length(s)));
- X }
- X if(is_external(s) == 0){
- X brief(t);
- X }
- X else{
- X if(strcomp("Empty Address", t) == 0){
- X strcpy(t, (unsigned char *) x400);
- X }
- X sprintf(s, "rmail -v -d -i %s %s@amnet.UUCP", tmp, t);
- X if(INTERACT == 0) printf("%s\n", t);
- X system( s );
- X ff = fopen( XMDLOG, "a" );
- X fprintf(ff, "%5.5s %5.5s > %-29.29s [Gateway]\n",
- X (unsigned char *) mydate( 1 ), (unsigned char *) mytime( 1 ),
- X (unsigned char *) t);
- X fclose(ff);
- X }
- X }
- X }
- X
- X fclose(fp);
- X
- X /*
- X unlink(tmp);
- X */
- X}
- X
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION main() (xmd) */
- X/* BESCHREIBUNG Der Briefkasten des ERRORUSERS (POSTMASTER) wird ge- */
- X/* scannt. Alle Eintraege fuer Mbox-User, deren Adresse */
- X/* im Format 'Real.Name@UUCPID' vorliegen, werden zuge- */
- X/* stellt. */
- X/* PARAMETER keine */
- X/* RUECKGABE keine */
- X/***************************************************************************/
- X
- Xmain(argc, argv)
- Xint argc;
- Xunsigned char *argv[];
- X{
- X FILE *fp;
- X FILE *ff;
- X unsigned char s[255];
- X unsigned char t[255];
- X unsigned char u[255];
- X unsigned char dump[STRING];
- X unsigned char maildrop[STRING];
- X int toggle = 0;
- X int l;
- X int c;
- X int p;
- X int i;
- X int j;
- X
- X setuid(0);
- X setgid(0);
- X umask(0000);
- X
- X chdir(HOME);
- X
- X
- X if(argc < 2){
- X maybe_locked(ERRMBOX); mblock(ERRMBOX);
- X fp = fopen(ERRMBOX, "r");
- X INTERACT = 0;
- X }
- X else{
- X if(argv[2][0] == '-'){
- X sprintf(maildrop, "%s/%dPIP", TMP, getpid());
- X fp = fopen(maildrop, "w");
- X c = 0;
- X do{
- X c = fgetc(stdin);
- X if((c != EOF) && (c != 4)){
- X fputc(c, fp);
- X printf("%c", c);
- X }
- X }while((c != EOF) && (c != 4));
- X fclose(fp);
- X fp = fopen(maildrop, "r");
- X INTERACT = 1;
- X }
- X else{
- X maybe_locked(maildrop); mblock(maildrop);
- X sprintf(maildrop, "%s/%s", MAILDROP, argv[1]);
- X fp = fopen(maildrop, "r");
- X INTERACT = 1;
- X }
- X }
- X if(INTERACT == 0) printf("\n");
- X
- X if (fp == NULL) {
- X if(INTERACT == 0) printf("\nNo mail.\n");
- X return;
- X }
- X
- X l = 1;
- X ff = fopen( XMD_ALIAS, "r" );
- X if(ff != 0){
- X while(fgets(s, 80, ff) != 0){
- X if((s[0] > 64) && (l < MAX_XMD_ALIAS)){
- X strcpy(alias[l][1], (unsigned char *) stripped(s));
- X fgets(s, 80, ff);
- X strcpy(alias[l][2], (unsigned char *) stripped(s));
- X l++;
- X }
- X }
- X fclose(ff);
- X }
- X strcpy(alias[l][1], "EOL");
- X
- X sprintf(dump, "%s/%d.DUMP", TMP, getpid());
- X ff = fopen(dump, "w");
- X
- X toggle = 0;
- X
- X while (fgets(s, 80, fp) != NULL) {
- X l = 2;
- X if (s[0] == '>') {
- X if(s[1] != ' ') l = 1;
- X strcpy(t, (unsigned char *) strcopy(s, l, length(s)));
- X strcpy(s, t);
- X if (strcomp("OOPS", s) != 0) {
- X fputs(s, ff);
- X }
- X }
- X else{
- X if(strcomp("From ", s) == 0){
- X fprintf(ff, "*%s", s);
- X if(strcomp(RETURNED_MAIL, s) == 0){
- X while(strcomp("> ", s) != 0){
- X fgets(s, 80, fp);
- X }
- X }
- X }
- X else{
- X fputs(s, ff);
- X }
- X }
- X
- X }
- X fclose(ff);
- X fclose(fp);
- X
- X fp = fopen(dump, "r");
- X
- X sprintf(tmp, "%s/%d.XMD", TMP, getpid());
- X
- X ff = fopen(tmp, "w");
- X
- X toggle = 0;
- X
- X while (fgets(s, 80, fp) != NULL) {
- X if (strcomp("*From ", s) == 0){
- X if (toggle == 1) {
- X if (ff != 0) fclose(ff);
- X mailing();
- X ff = fopen(tmp, "w");
- X }
- X toggle = 1;
- X }
- X if ((toggle == 1) && (strcomp("*From ", s) != 0)){
- X
- X if (strcomp("X400-Recipients:", s) == 0){
- X i = 16;
- X j = 0;
- X while(s[i] != '\0'){
- X if(s[i] == '<') j = i+1;
- X if(s[i] == '@'){
- X strcpy(x400, (unsigned char *) strcopy(s, j, (i-1)));
- X }
- X i++;
- X }
- X }
- X
- X if(strcomp("To: ", s) == 0){
- X p = is_external(s);
- X
- X if(p > 0){
- X s[p] = '\0';
- X strcat(s, (unsigned char *) "@amnet.UUCP\n");
- X }
- X if(p == -1){
- X sprintf(s, "To: %s@amnet.UUCP\n", x400);
- X }
- X }
- X fputs(s, ff);
- X }
- X }
- X if (ff != 0) fclose(ff);
- X if (toggle == 1) mailing();
- X fclose(fp);
- X
- X unlink(tmp);
- X unlink(dump);
- X
- X if(INTERACT == 0){
- X sprintf(s, "> %s", ERRMBOX);
- X mbunlock(ERRMBOX);
- X }
- X else{
- X if(getgid() == GUEST_GID){
- X sprintf(s, "> %s", maildrop);
- X mbunlock(maildrop);
- X }
- X }
- X system(s);
- X}
- END_OF_FILE
- if test 13319 -ne `wc -c <'src/xmd.c'`; then
- echo shar: \"'src/xmd.c'\" unpacked with wrong size!
- fi
- # end of 'src/xmd.c'
- fi
- echo shar: End of archive 9 \(of 15\).
- cp /dev/null ark9isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 15 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...
-