home *** CD-ROM | disk | FTP | other *** search
- From: Volker.Schuermann@unnet.wupper.de (Volker Schuermann)
- Newsgroups: comp.sources.misc
- Subject: v42i028: mbox - ix/MBox BBS, v2.1, Part05/12
- Date: 29 Mar 1994 21:07:39 -0600
- Organization: THE UNDERGROUND NETWORK
- Sender: kent@sparky.sterling.com
- Approved: kent@sparky.sterling.com
- Message-ID: <2naqdr$iqs@sparky.sterling.com>
- Reply-To: Volker Schuermann <Volker.Schuermann@unnet.wupper.de>
- X-Md4-Signature: 943f034684289ce45e157c75bd6c0369
-
- Submitted-by: Volker.Schuermann@unnet.wupper.de (Volker Schuermann)
- Posting-number: Volume 42, Issue 28
- Archive-name: mbox/part05
- 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/contrib/wendy/ctrl.c mbox/src/intro.c
- # mbox/src/languages/francais.shh mbox/src/pd.c mbox/src/xmd.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 5 (of 12)."'
- if test -f 'mbox/contrib/wendy/ctrl.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'mbox/contrib/wendy/ctrl.c'\"
- else
- echo shar: Extracting \"'mbox/contrib/wendy/ctrl.c'\" \(21334 characters\)
- sed "s/^X//" >'mbox/contrib/wendy/ctrl.c' <<'END_OF_FILE'
- X/* ix/MBox/WENDY (ctrl.c) by Volker Schuermann, 04.12.1993
- X
- X This C source code contains the following functions:
- X
- X #CG ctrlg() display state
- X #CH ctrlh() process <BS> key
- X #CV ctrlv() process <INS> key
- X #CJ ctrlj() process <DOWN> cursor key
- X #CK ctrlk() process <UP> cursor key
- X #CN ctrln() insert RTF CONTENT line
- X #CU ctrlu() choose RTF attribute
- X #CS ctrls() change setup
- X #CT ctrlt() delete from cursor position to eoln
- X #CW ctrlw() save text
- X #CX ctrlx() quit session
- X #CY ctrly() delete a line
- X
- X Contact <volkers@unnet.wupper.de> for help! */
- X
- X
- X
- X
- X#include "wendy.h"
- X
- X
- X
- X
- X/* #CG - Display state of the session */
- X
- Xctrlg( f )
- Xunsigned char f[];
- X{
- X unsigned char s[STRING];
- X unsigned char t[STRING];
- X
- X t[0] = '\0';
- X
- X#ifdef _LOCAL
- X if(INS_mode != 0)
- X strcpy(t, (unsigned char *) " - Einfuege-Modus");
- X
- X sprintf(s, " %s - Spalte %d, Zeile %d (%d) %s", f, x, (ypos + y - 2), lastline, t);
- X#else
- X if(INS_mode != 0)
- X strcpy(t, (unsigned char *) " - Insert-Mode");
- X
- X sprintf(s, " %s - Column %d, Line %d (%d) %s", f, x, (ypos + y -1), lastline, t);
- X#endif
- X show_status( s );
- X activate( RTF_attrib );
- X ansi2( "cm", x, y );
- X}
- X
- X
- X
- X/* #CH - Process <BS> key */
- X
- Xctrlh()
- X{
- X unsigned char s[LONGSTRING];
- X unsigned char a[LONGSTRING];
- X unsigned char q[LONGSTRING];
- X int i, j;
- X
- X if(x == 1){
- X if(y == START) return;
- X strcpy(s, (unsigned char *) SCREEN[y-1]);
- X i = strlen((unsigned char *) right_stripped(s));
- X strcpy(s, (unsigned char *) SCREEN[y]);
- X j = strlen((unsigned char *) right_stripped(s));
- X
- X SCREEN[(y-1)][i] = '\0';
- X ATTRIB[(y-1)][i] = '\0';
- X
- X strcpy(s, (unsigned char *) SCREEN[(y-1)]); strcat(s, (unsigned char *) SCREEN[y]);
- X strcat(s, (unsigned char *) " ");
- X strcpy(a, (unsigned char *) ATTRIB[(y-1)]); strcat(a, (unsigned char *) ATTRIB[y]);
- X strcat(a, (unsigned char *) "0000000000000000000000000000000000000000000000000000000000000000000000000000000");
- X
- X strcpy(SCREEN[y], (unsigned char *) strcopy(s, MAXX, MAXX+MAXX));
- X strcpy(ATTRIB[y], (unsigned char *) strcopy(a, MAXX, MAXX+MAXX));
- X
- X s[MAXX] = '\0'; strcpy(SCREEN[(y-1)], (unsigned char *) s);
- X a[MAXX] = '\0'; strcpy(ATTRIB[(y-1)], (unsigned char *) a);
- X
- X strcpy(q, (unsigned char *) right_stripped(SCREEN[y]));
- X
- X if(strlen((unsigned char *) right_stripped(q)) < 1)
- X ctrly();
- X else
- X show_line( SCREEN[y], ATTRIB[y], 1 );
- X
- X y--; x = i + 1;
- X show_line( SCREEN[y], ATTRIB[y], x );
- X ansi2( "cm", x, y );
- X
- X return;
- X }
- X
- X strcpy(s, (unsigned char *) SCREEN[y]);
- X s[(x-2)] = '\0';
- X strcat(s, (unsigned char *) strcopy(SCREEN[y], (x-1), strlen(SCREEN[y])));
- X strcat(s, " ");
- X s[MAXX] = '\0';
- X strcpy(SCREEN[y], (unsigned char *) s);
- X
- X strcpy(s, (unsigned char *) ATTRIB[y]);
- X s[(x-2)] = '\0';
- X strcat(s, (unsigned char *) strcopy(ATTRIB[y], (x-1), strlen(ATTRIB[y])));
- X strcat(s, "0000000000000000000000000000000000000000000000000000000000000000000000000000000");
- X s[MAXX] = '\0';
- X strcpy(ATTRIB[y], (unsigned char *) s);
- X
- X x--;
- X ansi2( "cm", x, y );
- X
- X if(ansi( "dc" ) != 0){
- X show_line( SCREEN[y], ATTRIB[y], x );
- X ansi2( "cm", x, y );
- X }
- X}
- X
- X
- X
- X/* #CV - Process <INS> key */
- X
- Xctrlv()
- X{
- X if(INS_mode == 0){
- X INS_mode = 1;
- X#ifdef _LOCAL
- X show_status( " WENDY: Einfuegemodus aktiviert. " );
- X#else
- X show_status( " WENDY: Insert mode activated. " );
- X#endif
- X }
- X else{
- X INS_mode = 0;
- X#ifdef _LOCAL
- X show_status( " WENDY: Einfuegemodus aus. " );
- X#else
- X show_status( " WENDY: Insert mode deactivated. " );
- X#endif
- X }
- X ansi2( "cm", x, y );
- X}
- X
- X
- X
- X/* #CJ - Process cursor <DOWN> key */
- X
- Xctrlj()
- X{
- X int ymem = y;
- X
- X if((y < MAXY) && (y < lastline)){
- X ansi( "do" );
- X y++;
- X return;
- X }
- X
- X if(ypos < (lastline - MAXY)){
- X restore_screen( ypos );
- X ypos++;
- X prep_screen( ypos );
- X
- X
- X ansi2( "cm", 1, START );
- X
- X
- X if(ansi( "dl" ) != 0){
- X show_screen( START );
- X }
- X else{
- X y = MAXY;
- X show_line( SCREEN[MAXY], ATTRIB[MAXY], 1 );
- X y = ymem;
- X }
- X ansi2( "cm", x, y );
- X }
- X}
- X
- X
- X
- X/* #CK - Process cursor <UP> key */
- X
- Xctrlk()
- X{
- X if(y > START){
- X ansi( "up" );
- X y--;
- X return;
- X }
- X
- X if(ypos > 1){ /* 1(!), nicht START (!) */
- X restore_screen( ypos );
- X ypos--;
- X prep_screen( ypos );
- X
- X
- X ansi2( "cm", 1, MAXY );
- X ansi( "ce" );
- X ansi2( "cm", x, y );
- X
- X
- X if(ansi( "al" ) != 0){
- X show_screen( START );
- X }
- X else{
- X show_line( SCREEN[y], ATTRIB[y], 1);
- X ansi2( "cm", x, y );
- X }
- X }
- X}
- X
- X
- X
- X
- X/* #CN - Insert a RTF "Content:" line */
- X
- Xctrln()
- X{
- X if(RTF_toggle == 0){
- X FLAG[(ypos + y - 1)] &= ~is_plain;
- X FLAG[(ypos + y - 1)] |= is_richtext;
- X#ifdef _LOCAL
- X show_status( "Der folgende Text wird klassifiziert als 'text/richtext'." );
- X#else
- X show_status( "The following text is classified as 'text/richtext'." );
- X#endif
- X RTF_toggle++;
- X }
- X else{
- X FLAG[(ypos + y - 1)] &= ~is_richtext;
- X FLAG[(ypos + y - 1)] |= is_plain;
- X#ifdef _LOCAL
- X show_status( "Der folgende Text wird klassifiziert als 'text/plain'." );
- X#else
- X show_status( "The following text is classified as 'text/plain'." );
- X#endif
- X RTF_toggle = 0;
- X }
- X activate( RTF_attrib );
- X ansi2( "cm", x, y );
- X}
- X
- X
- X
- X
- Xctrlu_output()
- X{
- X ansi( "me"); ansi( "us" );
- X
- X if(RTF_attrib == 'b'){
- X ansi2( "cm", 8, 1 ); printf("B");
- X }
- X if(FORMATTER == 'c'){
- X ansi2( "cm", 16, 1 ); printf("C");
- X }
- X if(RTF_attrib == 'f'){
- X ansi2( "cm", 26, 1 ); printf("F");
- X }
- X if(RTF_attrib == 'i'){
- X ansi2( "cm", 35, 1 ); printf("I");
- X }
- X if(RTF_attrib == '0'){
- X ansi2( "cm", 45, 1 ); printf("N");
- X }
- X if(FORMATTER == 'b'){
- X ansi2( "cm", 57, 1 ); printf("o");
- X }
- X if(RTF_attrib == 'u'){
- X ansi2( "cm", 67, 1 ); printf("U");
- X }
- X
- X ansi( "mr" );
- X if(RTF_attrib != 'b'){
- X ansi2( "cm", 8, 1 ); printf("B");
- X }
- X if(FORMATTER != 'c'){
- X ansi2( "cm", 16, 1 ); printf("C");
- X }
- X if(RTF_attrib != 'f'){
- X ansi2( "cm", 26, 1 ); printf("F");
- X }
- X if(RTF_attrib != 'i'){
- X ansi2( "cm", 35, 1 ); printf("I");
- X }
- X if(RTF_attrib != '0'){
- X ansi2( "cm", 45, 1 ); printf("N");
- X }
- X if(FORMATTER != 'b'){
- X ansi2( "cm", 57, 1 ); printf("o");
- X }
- X if(RTF_attrib != 'u'){
- X ansi2( "cm", 67, 1 ); printf("U");
- X }
- X
- X}
- X
- X
- X/* #CU - Choose RTF attribute */
- X
- Xctrlu()
- X{
- X int c;
- X
- X show_status( " RTF: <B>old <C>enter <F>lash <I>talic <N>ormal Bl<o>ckset <U>nderline " );
- X
- X REALLY++;
- X
- X do{
- X ctrlu_output();
- X ansi2( "cm", 45, 1 );
- X c = getch();
- X if(c == ESC){
- X do{
- X c = getch();
- X }while(c < 65);
- X c = getch();
- X#ifdef _LOCAL
- X show_status( " WENDY: Noe, Auswahl per Cursortaste ist noch nicht implementiert ;-) ");
- X#else
- X show_status( " WENDY: Nope! Selection by cursor keys' not implemented yet!" );
- X#endif
- X activate( RTF_attrib );
- X ansi2( "cm", x, y );
- X return;
- X }
- X
- X switch(c){
- X case 'b' :
- X case 'B' : if(RTF_attrib == 'b')
- X RTF_attrib = '0';
- X else
- X RTF_attrib = 'b';
- X break;
- X case 'c' :
- X case 'C' : if(FORMATTER == 'c')
- X FORMATTER = 0;
- X else
- X FORMATTER = 'c';
- X break;
- X case 'f' :
- X case 'F' : if(RTF_attrib == 'f')
- X RTF_attrib = '0';
- X else
- X RTF_attrib = 'f';
- X break;
- X case 'i' :
- X case 'I' : if(RTF_attrib == 'i')
- X RTF_attrib = '0';
- X else
- X RTF_attrib = 'i';
- X break;
- X case 'n' :
- X case 'N' : FORMATTER = 0;
- X RTF_attrib = '0';
- X break;
- X case 'o' :
- X case 'O' : if(FORMATTER == 'o')
- X FORMATTER = 0;
- X else
- X FORMATTER = 'b';
- X break;
- X case 'u' :
- X case 'U' : if(RTF_attrib == 'u')
- X RTF_attrib = '0';
- X else
- X RTF_attrib = 'u';
- X break;
- X
- X }
- X }while(isin("bBcCfFiIoOuU") != 0);
- X
- X ctrlu_output();
- X
- X if(BLOCK.status == BLOCKMODE) block_ctrlu();
- X
- X activate( RTF_attrib );
- X ansi2( "cm", x, y );
- X}
- X
- X
- X
- X
- X
- X
- Xctrls_output()
- X{
- X if(MAXX < 10) MAXX = 10;
- X if(MAXX > 136) MAXX = 136;
- X if(MAXY < 4) MAXY = 4;
- X if(MAXY > 24) MAXY = 24;
- X
- X ansi( "me" );
- X#ifdef _LOCAL
- X ansi2( "cm", 25, 5); printf("%d ", MAXX);
- X ansi2( "cm", 25, 7); printf("%d ", MAXY);
- X
- X ansi2( "cm", 67, 5); printf("%s ", terminal);
- X ansi2( "cm", 67, 7); printf("%s ", umlaut);
- X#else
- X ansi2( "cm", 27, 5); printf("%d ", MAXX);
- X ansi2( "cm", 27, 7); printf("%d ", MAXY);
- X
- X ansi2( "cm", 66, 5); printf("%s ", terminal);
- X ansi2( "cm", 66, 7); printf("%s ", umlaut);
- X#endif
- X}
- X
- X/* #CS - Change setup */
- X
- Xctrls()
- X{
- X FILE *fp;
- X unsigned char s[STRING];
- X unsigned char *home;
- X int c, d;
- X
- X
- X restore_screen( ypos );
- X ansi( "cl" );
- X
- X#ifdef _LOCAL
- X
- X show_status( " WENDY: Parameter aendern ... " );
- X
- X ansi2( "cm", 1, 3 ); printf("Aktive Parameter:");
- X
- X ansi( "mr" );
- X ansi2( "cm", 1, 5 ); printf(" 1 ");
- X ansi2( "cm", 5, 5 ); printf(" Zeichen pro Zeile " );
- X ansi2( "cm", 1, 7 ); printf(" 2 ");
- X ansi2( "cm", 5, 7 ); printf(" Anzahl der Zeilen " );
- X
- X ansi2( "cm", 40, 5 ); printf(" 3 ");
- X ansi2( "cm", 44, 5 ); printf(" Terminal-Emulation " );
- X ansi2( "cm", 40, 7 ); printf(" 4 " );
- X ansi2( "cm", 44, 7 ); printf(" Umlaut-Konvertierung " );
- X
- X ansi( "me" );
- X ansi2( "cm", 1, 10); printf("Vordefinierte Konfigurationen:");
- X
- X ansi( "mr" );
- X ansi2( "cm", 1, 12); printf(" 5 ");
- X ansi2( "cm", 5, 12); printf(" UNIX (Console) ");
- X ansi2( "cm", 1, 14); printf(" 6 ");
- X ansi2( "cm", 5, 14); printf(" LINUX (Console) ");
- X ansi2( "cm", 1, 16); printf(" 7 ");
- X ansi2( "cm", 5, 16); printf(" DOS (ProComm ab 2.4.1) ");
- X
- X ansi2( "cm", 40, 12); printf(" 8 ");
- X ansi2( "cm", 44, 12); printf(" DOS (TELIX ab 3.11) ");
- X ansi2( "cm", 40, 14); printf(" 9 ");
- X ansi2( "cm", 44, 14); printf(" DOS (Telemate ab 2.11) ");
- X
- X ctrls_output();
- X
- X do{
- X ansi2( "cm", 1, 19); printf("Nun, was soll's denn sein? ");
- X ansi2( "cm", 28, 19 );
- X c = getch();
- X ansi2( "cm", 1, 19 );
- X switch(c){
- X case '1' : ansi( "ce" );
- X printf("Zeichen pro Zeile (10-136): ");
- X sprintf(s, "%d", MAXX);
- X strcpy(s, (unsigned char *) getline( 3, 1101, '.', s));
- X MAXX = atoi(s);
- X break;
- X case '2' : ansi( "ce" );
- X printf("Bildschirmzeilen (4-24): ");
- X sprintf(s, "%d", MAXY);
- X strcpy(s, (unsigned char *) getline( 2, 1101, '.', s));
- X MAXY = atoi(s);
- X break;
- X case '3' : ansi( "mr" );
- X ansi2( "cm", 1, 21); printf(" A ");
- X ansi2( "cm", 5, 21); printf(" ANSI (X3.64) ");
- X ansi2( "cm", 30, 21); printf(" B ");
- X ansi2( "cm", 34, 21); printf(" DEC VT100 ");
- X ansi2( "cm", 60, 21); printf(" C ");
- X ansi2( "cm", 64, 21); printf(" MINIX CONSOLE ");
- X ansi( "me" );
- X
- X ansi2( "cm", 1, 19 ); ansi( "ce" );
- X printf("Terminal-Emulation (A-C): ");
- X
- X do{
- X d = getch();
- X }while(isin("abcABC", d) == 0);
- X
- X switch(d){
- X case 'a' :
- X case 'A' : strcpy(terminal, (unsigned char *) "ansi");
- X break;
- X case 'b' :
- X case 'B' : strcpy(terminal, (unsigned char *) "vt100");
- X break;
- X case 'c' :
- X case 'C' : strcpy(terminal, (unsigned char *) "minix");
- X break;
- X }
- X ansi2( "cm", 1, 21); ansi( "ce" );
- X break;
- X case '4' : ansi( "mr" );
- X ansi2( "cm", 1, 21); printf(" A ");
- X ansi2( "cm", 5, 21); printf(" ISO-8859-1 ");
- X ansi2( "cm", 30, 21); printf(" B ");
- X ansi2( "cm", 34, 21); printf(" IBM-Umlaute ");
- X ansi( "me" );
- X
- X ansi2( "cm", 1, 19 ); ansi( "ce" );
- X printf("Umlaut-Konvertierung (A-B): ");
- X
- X do{
- X d = getch();
- X }while(isin("abAB", d) == 0);
- X
- X switch(d){
- X case 'a' :
- X case 'A' : strcpy(umlaut, (unsigned char *) "iso-8859-1");
- X break;
- X case 'b' :
- X case 'B' : strcpy(umlaut, (unsigned char *) "ibm");
- X break;
- X }
- X ansi2( "cm", 1, 21); ansi( "ce" );
- X break;
- X case '5' : MAXX = 80;
- X MAXY = 24;
- X wBS = 127; wDEL = 9151; wINS = 9150; wEND = 9152;
- X strcpy(terminal, (unsigned char *) "vt100");
- X strcpy(umlaut, (unsigned char *) "iso-8859-1");
- X break;
- X case '6' : MAXX = 80;
- X MAXY = 24;
- X wBS = 127; wDEL = 9151; wINS = 9150; wEND = 9152;
- X strcpy(terminal, (unsigned char *) "ansi-color");
- X strcpy(umlaut, (unsigned char *) "iso-8850-1");
- X break;
- X case '7' : MAXX = 79;
- X MAXY = 24;
- X wBS = 8; wDEL = 9152; wINS = 9151; wEND = 9189;
- X strcpy(terminal, (unsigned char *) "ansi");
- X strcpy(umlaut, (unsigned char *) "ibm");
- X break;
- X case '8' : MAXX = 80;
- X MAXY = 24;
- X wBS = 8; wDEL = 9152; wINS = 9151; wEND = 9189;
- X strcpy(terminal, (unsigned char *) "ansi");
- X strcpy(umlaut, (unsigned char *) "ibm");
- X break;
- X case '9' : MAXX = 80;
- X MAXY = 23;
- X wBS = 8; wDEL = 9152; wINS = 9151; wEND = 9189;
- X strcpy(terminal, (unsigned char *) "ansi");
- X strcpy(umlaut, (unsigned char *) "ibm");
- X break;
- X }
- X ctrls_output();
- X }while(isin("123456789", c) != 0);
- X
- X home = (unsigned char *) getenv( "HOME" );
- X sprintf(s, "%s/.wendy", home);
- X fp = fopen( s, "w" );
- X if(fp != 0){
- X fprintf(fp, "%d%c%c%c# Anzahl der Zeilen (4-24)\n", MAXY, TAB, TAB, TAB);
- X fprintf(fp, "%d%c%c%c# Anzahl der Zeichen pro Zeile (10-136)\n", MAXX, TAB, TAB, TAB);
- X fprintf(fp, "%s%c%c%c# Terminal-Emulation (ANSI, VT100, MINIX)\n", terminal, TAB, TAB, TAB);
- X fprintf(fp, "%s%c%c%c# Umlaut-Konvertierung (IBM, ISO-8859-1)\n", umlaut, TAB, TAB, TAB);
- X fprintf(fp, "%d%c%c%c# BS Taste (8 o. 127)\n", wBS, TAB, TAB, TAB);
- X fprintf(fp, "%d%c%c%c# DEL Taste\n", wDEL, TAB, TAB, TAB);
- X fprintf(fp, "%d%c%c%c# INS Taste\n", wINS, TAB, TAB, TAB);
- X fprintf(fp, "%d%c%c%c# END Taste\n", wEND, TAB, TAB, TAB);
- X fclose(fp);
- X }
- X
- X#else
- X
- X show_status( " WENDY: Changing settings ... " );
- X
- X ansi2( "cm", 1, 3 ); printf("Active Settings:");
- X
- X ansi( "mr" );
- X ansi2( "cm", 1, 5 ); printf(" 1 ");
- X ansi2( "cm", 5, 5 ); printf(" Characters per Line " );
- X ansi2( "cm", 1, 7 ); printf(" 2 ");
- X ansi2( "cm", 5, 7 ); printf(" Number of Lines " );
- X
- X ansi2( "cm", 40, 5 ); printf(" 3 ");
- X ansi2( "cm", 44, 5 ); printf(" Terminal-Emulation " );
- X ansi2( "cm", 40, 7 ); printf(" 4 " );
- X ansi2( "cm", 44, 7 ); printf(" 'Umlaut'-Conversion " );
- X
- X ansi( "me" );
- X ansi2( "cm", 1, 10); printf("Predefined Settings:");
- X
- X ansi( "mr" );
- X ansi2( "cm", 1, 12); printf(" 5 ");
- X ansi2( "cm", 5, 12); printf(" UNIX (Console) ");
- X ansi2( "cm", 1, 14); printf(" 6 ");
- X ansi2( "cm", 5, 14); printf(" MINIX (Console) ");
- X ansi2( "cm", 1, 16); printf(" 7 ");
- X ansi2( "cm", 5, 16); printf(" DOS (ProComm 2.4.1) ");
- X
- X ansi2( "cm", 40, 12); printf(" 8 ");
- X ansi2( "cm", 44, 12); printf(" DOS (TELIX 3.11) ");
- X ansi2( "cm", 40, 14); printf(" 9 ");
- X ansi2( "cm", 44, 14); printf(" DOS (Telemate 2.11) ");
- X
- X ctrls_output();
- X
- X do{
- X ansi2( "cm", 1, 19); printf("Now, which one do you want ? ");
- X ansi2( "cm", 30, 19 );
- X c = getch();
- X ansi2( "cm", 1, 19 );
- X switch(c){
- X case '1' : ansi( "ce" );
- X printf("Characters per line (10-136): ");
- X sprintf(s, "%d", MAXX);
- X strcpy(s, (unsigned char *) getline( 3, 1101, '.', s));
- X MAXX = atoi(s);
- X break;
- X case '2' : ansi( "ce" );
- X printf("Screenlines (4-24): ");
- X sprintf(s, "%d", MAXY);
- X strcpy(s, (unsigned char *) getline( 2, 1101, '.', s));
- X MAXY = atoi(s);
- X break;
- X case '3' : ansi( "mr" );
- X ansi2( "cm", 1, 21); printf(" A ");
- X ansi2( "cm", 5, 21); printf(" ANSI (X3.64) ");
- X ansi2( "cm", 30, 21); printf(" B ");
- X ansi2( "cm", 34, 21); printf(" DEC VT100 ");
- X ansi2( "cm", 60, 21); printf(" C ");
- X ansi2( "cm", 64, 21); printf(" MINIX CONSOLE ");
- X ansi( "me" );
- X
- X ansi2( "cm", 1, 19 ); ansi( "ce" );
- X printf("Terminal-Emulation (A-C): ");
- X
- X do{
- X d = getch();
- X }while(isin("abcABC", d) == 0);
- X
- X switch(d){
- X case 'a' :
- X case 'A' : strcpy(terminal, (unsigned char *) "ansi");
- X break;
- X case 'b' :
- X case 'B' : strcpy(terminal, (unsigned char *) "vt100");
- X break;
- X case 'c' :
- X case 'C' : strcpy(terminal, (unsigned char *) "minix");
- X break;
- X }
- X ansi2( "cm", 1, 21); ansi( "ce" );
- X break;
- X case '4' : ansi( "mr" );
- X ansi2( "cm", 1, 21); printf(" A ");
- X ansi2( "cm", 5, 21); printf(" ISO-8859-1 ");
- X ansi2( "cm", 30, 21); printf(" B ");
- X ansi2( "cm", 34, 21); printf(" IBM-Conversion ");
- X ansi( "me" );
- X
- X ansi2( "cm", 1, 19 ); ansi( "ce" );
- X printf("'Umlaut'-Conversions (A-B): ");
- X
- X do{
- X d = getch();
- X }while(isin("abAB", d) == 0);
- X
- X switch(d){
- X case 'a' :
- X case 'A' : strcpy(umlaut, (unsigned char *) "iso-8859-1");
- X break;
- X case 'b' :
- X case 'B' : strcpy(umlaut, (unsigned char *) "ibm");
- X break;
- X }
- X ansi2( "cm", 1, 21); ansi( "ce" );
- X break;
- X case '5' : MAXX = 80;
- X MAXY = 24;
- X strcpy(terminal, (unsigned char *) "vt100");
- X strcpy(umlaut, (unsigned char *) "iso-8859-1");
- X break;
- X case '6' : MAXX = 80;
- X MAXY = 24;
- X strcpy(terminal, (unsigned char *) "minix");
- X strcpy(umlaut, (unsigned char *) "ibm");
- X break;
- X case '7' : MAXX = 79;
- X MAXY = 24;
- X strcpy(terminal, (unsigned char *) "ansi");
- X strcpy(umlaut, (unsigned char *) "ibm");
- X break;
- X case '8' : MAXX = 80;
- X MAXY = 24;
- X strcpy(terminal, (unsigned char *) "ansi");
- X strcpy(umlaut, (unsigned char *) "ibm");
- X break;
- X case '9' : MAXX = 80;
- X MAXY = 23;
- X strcpy(terminal, (unsigned char *) "ansi");
- X strcpy(umlaut, (unsigned char *) "ibm");
- X break;
- X }
- X ctrls_output();
- X }while(isin("123456789", c) != 0);
- X
- X home = (unsigned char *) getenv( "HOME" );
- X sprintf(s, "%s/.wendy", home);
- X fp = fopen( s, "w" );
- X if(fp != 0){
- X fprintf(fp, "%d%c%c%c# Number of lines (4-24)\n", MAXY, TAB, TAB, TAB);
- X fprintf(fp, "%d%c%c%c# Characters per line (10-136)\n", MAXX, TAB, TAB, TAB);
- X fprintf(fp, "%s%c%c%c# Terminal-Emulation (ANSI, VT100, MINIX)\n", terminal, TAB, TAB, TAB);
- X fprintf(fp, "%s%c%c%c# 'Umlaut'-Conversion (IBM, ISO-8859-1)\n", umlaut, TAB, TAB, TAB);
- X fclose(fp);
- X }
- X
- X#endif
- X
- X ansi( terminal, -1, -1 );
- X
- X ansi( "cl" );
- X show_status( version );
- X prep_screen( ypos );
- X show_screen( START );
- X x = 1; y = START;
- X ansi2( "cm", x, y );
- X}
- X
- X
- X
- X/* #CT - Delete from cursor position to eoln */
- X
- Xctrlt()
- X{
- X unsigned char s[LONGSTRING];
- X
- X strcpy(s, (unsigned char *) SCREEN[y]);
- X s[(x-1)] = '\0';
- X strcat(s, " ");
- X s[MAXX] = '\0';
- X strcpy(SCREEN[y], (unsigned char *) s);
- X
- X strcpy(s, (unsigned char *) ATTRIB[y]);
- X s[x] = '\0';
- X strcat(s, "0000000000000000000000000000000000000000000000000000000000000000000000000000000");
- X s[MAXX] = '\0';
- X strcpy(ATTRIB[y], (unsigned char *) s);
- X
- X show_line( SCREEN[y], ATTRIB[y], 1 ); /* 1 !!! */
- X ansi2( "cm", x, y );
- X}
- X
- X
- X
- X/* #CW - Save the text in a file */
- X
- Xctrlw( f )
- Xunsigned char f[];
- X{
- X FILE *fp;
- X int i;
- X int rtf = 0;
- X unsigned char s[STRING];
- X unsigned char q[LONGSTRING];
- X
- X restore_screen( ypos );
- X
- X if(BLOCK.status == BLOCKMODE){
- X block_ctrlw();
- X return;
- X }
- X
- X strcpy(q, (unsigned char *) TEXT[lastline]);
- X while((strlen((unsigned char *) right_stripped(q)) < 2) && (TEXT[lastline][0] < 33)){
- X lastline--;
- X strcpy(q, (unsigned char *) TEXT[lastline]);
- X }
- X
- X fp = fopen( f, "w" );
- X
- X if(REALLY != 0){
- X fprintf(fp, "Content-Type: text/richtext;\n");
- X rtf++;
- X }
- X
- X for( i = START; i <= lastline; i++){
- X
- X if(TEXT[i][0] == '~'){
- X strcpy(TEXT[i], (unsigned char *) strcopy(TEXT[i], 1, strlen(TEXT[i])));
- X }
- X
- X if(((FLAG[i] & is_richtext) == is_richtext) && (rtf == 0)){
- X fprintf(fp, "Content-Type: text/richtext; charset=iso-8859-1\n");
- X rtf++;
- X }
- X
- X if(((FLAG[i] & is_plain) == is_plain) && (rtf != 0)){
- X fprintf(fp, "Content-Type: text/plain; charset=iso-8859-1\n");
- X rtf = 0;
- X }
- X
- X if((FLAG[i] & is_centered) == is_centered){
- X fprintf(fp, "<center>%s</center>", (unsigned char *) stripped(TEXT[i]));
- X }
- X else{
- X strcpy(q, (unsigned char *) TEXT[i]);
- X strcpy(q, (unsigned char *) right_stripped(q));
- X fputs(q, fp);
- X }
- X
- X if(TEXT[(i+1)][0] != '~'){
- X if(rtf == 0)
- X fprintf(fp, "\n");
- X else
- X fprintf(fp, "<nl>\n");
- X }
- X }
- X
- X if(rtf != 0){
- X fprintf(fp, "Content-Type: text/plain;\n");
- X }
- X
- X fclose(fp);
- X
- X CHANGED = 0;
- X
- X#ifdef _LOCAL
- X sprintf(s, " WENDY: Datei <%s> mit %d Zeilen gesichert. ", f, lastline);
- X#else
- X sprintf(s, " WENDY: File <%s> with %d lines saved. ", f, lastline);
- X#endif
- X
- X show_status( s );
- X activate( RTF_attrib );
- X ansi2( "cm", x, y );
- X}
- X
- X
- X
- X/* #CX - Stop session and leave */
- X
- Xctrlx( f )
- X{
- X int c;
- X
- X if(CHANGED != 0){
- X printf("%c", 7);
- X#ifdef _LOCAL
- X show_status( " WENDY: Datei noch nicht gesichert! Sichern? (J/N) " );
- X#else
- X show_status( " WENDY: File not saved yet! Save? (Y/N) " );
- X#endif
- X ansi( "mr" );
- X c = yesno();
- X ansi( "me" );
- X if((c == 'J') || (c == 'Y')) ctrlw( f );
- X }
- X show_status( " WENDY: Bye, bye ... " );
- X}
- X
- X
- X
- X/* #CY - Delete a line */
- X
- Xctrly()
- X{
- X int i, j, ymem = y;
- X
- X if(BLOCK.status == BLOCKMODE){
- X block_ctrly();
- X return;
- X }
- X
- X restore_screen( ypos );
- X j = ypos + y - 1;
- X for(i = j; i < lastline; i++){
- X strcpy(TEXT[i], (unsigned char *) TEXT[i+1]);
- X FLAG[i] = FLAG[i+1];
- X }
- X lastline--;
- X
- X prep_screen( ypos );
- X
- X if(ansi( "dl" ) != 0){
- X show_screen( y );
- X }
- X else{
- X y = MAXY;
- X show_line( SCREEN[MAXY], ATTRIB[MAXY], 1 );
- X y = ymem;
- X ansi2( "cm", x, y );
- X }
- X}
- X
- END_OF_FILE
- if test 21334 -ne `wc -c <'mbox/contrib/wendy/ctrl.c'`; then
- echo shar: \"'mbox/contrib/wendy/ctrl.c'\" unpacked with wrong size!
- fi
- # end of 'mbox/contrib/wendy/ctrl.c'
- fi
- if test -f 'mbox/src/intro.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'mbox/src/intro.c'\"
- else
- echo shar: Extracting \"'mbox/src/intro.c'\" \(18265 characters\)
- sed "s/^X//" >'mbox/src/intro.c' <<'END_OF_FILE'
- X/* ix/MBox (admin.c) by Volker Schuermann, 04.12.1993
- X
- X This C source code contains the following functions:
- X
- X #IN intro() show intros, handle login
- X #IU init_user() activate users preferences
- X
- X Contact <volkers@unnet.wupper.de> for help! */
- X
- X
- 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 <time.h>
- X
- X#include "mbox.h"
- X
- Xtime_t time_start, time_now;
- X
- X
- Xvoid init_user();
- X
- X
- X
- X/* #IN - Welcome users, show intros, handle login. */
- X
- Xvoid intro()
- X{
- X FILE *fp;
- X FILE *ff;
- X int fd;
- X UNSIGNED char s[LSTRING];
- X UNSIGNED char t[STRING];
- X UNSIGNED char f[STRING];
- X UNSIGNED char tmp[STRING];
- X UNSIGNED char crypt_pw[STRING];
- X UNSIGNED char ex[LONGSTRING];
- X UNSIGNED char tmpuser[STRING];
- X UNSIGNED char moreLASTLOG[STRING];
- X UNSIGNED char teca[4][STRING];
- X
- X UNSIGNED char *term;
- X UNSIGNED char c;
- X
- X int i, calls;
- X int ok;
- X int a, b;
- X long ll, lalo;
- X struct userdaten LOOSER;
- X
- X struct tm *timeptr;
- X time_t timer;
- X
- X struct stat fst;
- X
- X umask(0007);
- X
- X term = (UNSIGNED char *) getenv("TERM");
- X strcpy(TERMINAL, (UNSIGNED char *) term);
- X
- X ansi2("INIT", 0, 0);
- X ansi2("me", 0, 0 );
- X
- X time(&time_start);
- X
- X fp = fopen( LOGO, "r" );
- X if(fp != NULL){
- X fclose(fp);
- X printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- X ansi2("cl", 0, 0);
- X ansi2("md", 0, 0);
- X show( LOGO, 9999, 0 );
- X ansi2("me", 0, 0);
- X c = getint();
- X }
- X
- X printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- X ansi2("cl", 0, 0);
- X
- X ansi2("md", 0, 0);
- X printf("\n%s ", INT01_MSG);
- X ansi2("me", 0, 0);
- X printf("%s", ORGANIZATION);
- X
- X ansi2("md", 0, 0);
- X printf("\n%s ", INT02_MSG);
- X ansi2("me", 0, 0);
- X printf("%s %s %s", VERSION, PATCHLEVEL, AUTOR);
- X
- X ansi2("md", 0, 0);
- X printf("\n%s ", INT03_MSG);
- X ansi2("me", 0, 0);
- X printf("%s", SYSTEM);
- X
- X BAUDRATE = (int) 0;
- X
- X
- X fp = fopen( TERMIS, "r" );
- X if(fp == NULL){
- X nerror("intro.c", 158, "intro", "Can't read", TERMIS);
- X }
- X while((fgets(s, STRING, fp) != 0) && (s[0] != '='));
- X
- X fgets(s, STRING, fp); sscanf(s, "%s", TECA[1].entry);
- X strcpy(TECA[1].name, (UNSIGNED char *) upcased( TECA[1].entry));
- X strcpy(TECA[1].desc, (UNSIGNED char *) stripped( strcopy( s, strlen(TECA[1].entry), STRING)));
- X fgets(s, STRING, fp); sscanf(s, "%s", TECA[2].entry);
- X strcpy(TECA[2].name, (UNSIGNED char *) upcased( TECA[2].entry));
- X strcpy(TECA[2].desc, (UNSIGNED char *) stripped( strcopy( s, strlen(TECA[2].entry), STRING)));
- X fgets(s, STRING, fp); sscanf(s, "%s", TECA[3].entry);
- X strcpy(TECA[3].name, (UNSIGNED char *) upcased( TECA[3].entry));
- X strcpy(TECA[3].desc, (UNSIGNED char *) stripped( strcopy( s, strlen(TECA[3].entry), STRING)));
- X fclose(fp);
- X
- X
- X
- X if (OLDGID == GUEST_GID) { /* GUESTS / GAESTE */
- X
- X TRY_AGAIN:
- X
- X printf("\n\n%s ", GBL04_MSG);
- X strcpy(LOOSER.name, (UNSIGNED char *) getline(30, 11, '.', ""));
- X if (LOOSER.name[0] == '\0') goto TRY_AGAIN;
- X
- X strcpy(s, (UNSIGNED char *) upcased(LOOSER.name));
- X
- X if (strcomp(GUEST, s) != 0) {
- X
- X printf("\n%s ", GBL09_MSG);
- X strcpy(LOOSER.passwort, (UNSIGNED char *) getline(10, 12, '.', ""));
- X strcpy(crypt_pw, (UNSIGNED char *) crypted(LOOSER.passwort));
- X
- X maybe_locked(UDBASE, "r"); mblock(UDBASE);
- X fd = open(UDBASE, O_RDONLY);
- X if (fd == -1) {
- X nerror("intro.c", 78, "intro", "Can't read", UDBASE);
- X }
- X ok = 0;
- X while ((ok == 0) && (read(fd, (UNSIGNED char *) &USER, sizeof(USER)) == sizeof(USER))) {
- X if ((strcomp(LOOSER.name, USER.name) == 0) ||
- X (strcomp(LOOSER.name, USER.nick) == 0)) {
- X if ((strcomp(USER.passwort, (UNSIGNED char *) crypt_pw) == 0) ||
- X (strcomp(USER.passwort, LOOSER.passwort) == 0))
- X ok = 1;
- X }
- X }
- X close(fd);
- X mbunlock(UDBASE);
- X
- X if (ok == 1) goto WELL_DONE;
- X goto TRY_AGAIN;
- X }
- X strcpy(LOOSER.name, (UNSIGNED char *) upcased(s));
- X
- X maybe_locked(UDBASE, "r"); mblock(UDBASE);
- X fd = open(UDBASE, O_RDONLY);
- X if (fd == -1) {
- X nerror("intro.c", 98, "intro", "Can't read", UDBASE);
- X }
- X ok = 0;
- X while ((ok == 0) && (read(fd, (UNSIGNED char *) &USER, sizeof(USER)) == sizeof(USER))) {
- X if (strcomp(LOOSER.name, USER.name) == 0) ok = 1;
- X }
- X close(fd);
- X mbunlock(UDBASE);
- X
- X ansi2("md", 0, 0);
- X printf("\n\n%s\n\n", INT04_MSG);
- X ansi2("me", 0, 0);
- X printf("%s\n\n", INT05_MSG);
- X printf("%-15.15s 6 - %-12.12s 7 - %-12.12s 8 - %-12.12s\n",
- X INT05aMSG, TECA[1].name, TECA[2].name, TECA[3].name);
- X
- X ansi2("md", 0, 0);
- X printf("\n%s > ", INT06_MSG);
- X ansi2("me", 0, 0);
- X printf("5%c", BS);
- X
- X do {
- X c = getint();
- X if((c == LF) || (c == CR)) c = '5';
- X } while ((c < '1') || (c > '8'));
- X printf("%c", c);
- X USER.terminal = c - 48;
- X
- X#ifdef GERMAN_VERSION
- X ansi2("md", 0, 0);
- X printf("\n\nWelche der folgenden Umlaut-Darstellungen ist korrekt?\n\n");
- X ansi2("me", 0, 0);
- X
- X printf("1 - [%c] [%c] [%c] [%c] [%c] [%c] [%c] ISO-8859-1 / AMIGA\n\n",
- X 196, 214, 220, 228, 246, 252, 223);
- X printf("2 - [%c] [%c] [%c] [%c] [%c] [%c] [%c] IBM / ATARI\n\n",
- X 142, 153, 154, 132, 148, 129, 225);
- X
- X printf("3 - [Ae] [Oe] [Ue] [ae] [oe] [ue] [ss]\n");
- X
- X ansi2("md", 0, 0);
- X printf("\n%s > ", "Und?");
- X ansi2("me", 0, 0);
- X printf("2%c", BS);
- X
- X do {
- X c = getint();
- X if((c == LF) || (c == CR)) c = '2';
- X } while ((c < '1') || (c > '3'));
- X printf("%c", c);
- X USER.schluessel[2] = c - 48;
- X
- X#else
- X USER.schluessel[2] = 4;
- X#endif
- X
- X strcpy(USER.name, (UNSIGNED char *) GUEST);
- X sprintf(USER.passwort, "%s", "*****");
- X
- X USER.level = 0;
- X USER.prompt = 2;
- X USER.bell = 0;
- X USER.intro = 1;
- X USER.more = 3;
- X USER.lastmode = 2;
- X USER.leserichtung = 2;
- X USER.tlines = 22;
- X USER.schluessel[0] = 1;
- X USER.schluessel[1] = 3;
- X USER.schluessel[3] = 128;
- X
- X if(USER.terminal < 2)
- X USER.editor = 1;
- X else
- X USER.editor = 2;
- X
- X sprintf(USER.newsgrps, "%s", NEWS_MINIMUM);
- X
- X LASTLOG = (long) 19700101;
- X LASTTIME = 0;
- X sprintf(moreLASTLOG, "%s", "01.01.1970");
- X }
- X else { /* USER */
- X
- X printf("\n\n%s ....................", GBL04_MSG);
- X for (i = 0; i < 20; i++) printf("%c", BS);
- X
- X strcpy(tmpuser, (UNSIGNED char *) whoami());
- X printf("%s", tmpuser);
- X
- X printf("\n%s ..........", GBL09_MSG);
- X
- X for (i = 0; i < 10; i++) printf("%c", BS);
- X for (i = 0; i < 10; i++) printf("*");
- X
- X if (strcomp(tmpuser, "root") == 0) {
- X strcpy(tmpuser, (UNSIGNED char *) POSTMASTER);
- X
- X strcpy(s, (UNSIGNED char *) ttyname(0));
- X if((PMS_TTY[0] != '\0') && (strcomp(PMS_TTY, s) != 0)){
- X printf("\n\n");
- X ansi2("mr", 0, 0);
- X printf("%s \"%s\" %s", INT07_MSG, PMS_TTY, INT07aMSG);
- X ansi2("me", 0, 0);
- X printf("\n\n");
- X exit(-1);
- X }
- X else {
- X USER.level = 10;
- X }
- X }
- X maybe_locked(UDBASE, "r"); mblock(UDBASE);
- X fd = open(UDBASE, O_RDONLY);
- X if (fd == -1) {
- X nerror("intro.c", 156, "intro", "Can't read", UDBASE);
- X }
- X ok = 0;
- X while ((ok == 0) && (read(fd, (UNSIGNED char *) &USER, sizeof(USER)) == sizeof(USER))) {
- X if ((strcomp(tmpuser, USER.sh_name) == 0)) ok = 1;
- X }
- X close(fd);
- X mbunlock(UDBASE);
- X
- X if (ok == 0) postfach(tmpuser);
- X
- X }
- X
- X WELL_DONE:
- X
- X printf("\n\n%s ...", INT09aMSG);
- X
- X setuid( ROOT_UID );
- X setgid( ROOT_GID );
- X
- X if(USER.name[0] > 96) USER.name[0] -= 32;
- X
- X if (strcomp(GUEST, USER.name) != 0) {
- X LASTLOG = (long) dateconv(USER.lastlog);
- X LASTTIME = USER.lasttime;
- X sprintf(moreLASTLOG, "%s", USER.lastlog);
- X }
- X if (USER.lastmode == 2) LASTTIME = 0;
- X
- X sprintf(s, "%s/usr/%c/%d/.dummy", HOME, USER.name[0], USER.id); /* New User-Directory !!! */
- X fp = fopen( s, "w" );
- X if(fp == NULL){
- X sprintf(s, "%s/usr/%c", HOME, USER.name[0]);
- X#ifndef _LINUX
- X mkdir( s );
- X chmod( s, 0777 );
- X#else
- X mkdir( s, 0777 );
- X#endif
- X sprintf(s, "%s/usr/%c/%d", HOME, USER.name[0], USER.id);
- X#ifndef _LINUX
- X mkdir( s );
- X chmod(s , 0777 );
- X#else
- X mkdir(s, 0777 );
- X#endif
- X sprintf(s, "cp %s/usr/%d/.* %s/usr/%c/%d > /dev/null 2>&1", HOME, USER.id, HOME, USER.name[0], USER.id);
- X system( s );
- X sprintf(s, "cp %s/usr/%d/* %s/usr/%c/%d > /dev/null 2>&1", HOME, USER.id, HOME, USER.name[0], USER.id);
- X system( s );
- X sprintf(s, "rm -r %s/usr/%d", HOME, USER.id);
- X system( s );
- X }
- X else{
- X unlink(s);
- X fclose(fp);
- X }
- X
- X sprintf(s, "%s \"%s\" (%d) %s", INT08_MSG, USER.name, USER.id, INT09_MSG);
- X control(s, 3);
- X whodo( INT10_MSG );
- X
- X if ((USER.level < 10) && (strcomp(MYNAME, USER.name) != 0)) {
- X
- X maybe_locked(SEQ, "r"); mblock(SEQ);
- X fp = fopen(SEQ, "r");
- X if (fp == NULL) {
- X nerror("intro.c", 223, "intro", "Can't read", SEQ);
- X }
- X fscanf(fp, "%d", &calls);
- X fclose(fp);
- X calls++;
- X
- X fp = fopen(SEQ, "w");
- X if (fp == NULL) {
- X nerror("intro.c", 227, "intro", "Can't write to", SEQ);
- X }
- X fprintf(fp, "%d\n", calls);
- X fclose(fp);
- X mbunlock(SEQ);
- X
- X sprintf(tmp, "%s/%dT", TMP, getpid());
- X
- X fp = fopen(tmp, "w");
- X if (fp == NULL) {
- X nerror("intro.c", 236, "intro", "Can't write to", tmp);
- X }
- X maybe_locked(CALLS, "r"); mblock(CALLS);
- X ff = fopen(CALLS, "r");
- X if (ff == NULL) {
- X nerror("intro.c", 239, "intro", "Can't read", CALLS);
- X }
- X sprintf(s, "%s (%s)", USER.name, USER.nick);
- X strcpy(t, numstripped(USER.wohnort));
- X if (t[0] == '\0') strcpy(t, (UNSIGNED char *) " ");
- X
- X strcpy(f, (UNSIGNED char *) ttyna());
- X
- X fprintf(fp, "%5.d %-28.28s %-17.17s%8.8s %s %s\n",
- X calls, s, (UNSIGNED char *) stripped(t), f, (UNSIGNED char *) mydate(1), (UNSIGNED char *) mytime(1));
- X
- X if(PRO_ENTRIES < 10){
- X nerror("intro.c", 291, "intro", "PRO_ENTRIES must be defined bigger", "mbox.h");
- X }
- X
- X i = 1;
- X while ((fgets(s, STRING, ff) != NULL) && (i <= PRO_ENTRIES)) {
- X fputs(s, fp);
- X i++;
- X }
- X
- X fclose(fp);
- X fclose(ff);
- X
- X#ifdef _ALLTIME
- X if(i >= PRO_ENTRIES){
- X fp = fopen( ALLTIME, "a" );
- X if(fp == NULL){
- X nerror("intro.c", 337, "intro", "Can't append to", ALLTIME);
- X }
- X fputs(s, fp);
- X fclose(fp);
- X }
- X#endif
- X
- X mbrename( tmp, CALLS );
- X unlink(tmp);
- X mbunlock(CALLS);
- X }
- X
- X sprintf(s, "%s/usr/%c/%d/INDEX", HOME, USER.name[0], USER.id);
- X if(atol(USER.abused) == 0L){
- X stat(s, &fst);
- X IDX_SIZE = (long) fst.st_size;
- X }
- X else IDX_SIZE = atol(USER.abused);
- X
- X stat(MB_READY, &fst);
- X MBD_SIZE = (int) fst.st_size;
- X
- X printf("%c", CR);
- X
- X init_user( INT11_MSG, 1 );
- X
- X
- X if(USER.schluessel[3] == 128){
- X show_raw( ANSI_INTRO, 10 );
- X }
- X
- X sprintf(UGROUPS, "%s/usr/%c/%d/.active", HOME, USER.name[0], USER.id);
- X
- X if (USER.intro < 3) {
- X
- X a = 0;
- X fp = fopen(UGROUPS, "r");
- X if (fp == NULL) {
- X nerror("intro.c", 283, "intro", "Can't read", AGROUPS);
- X }
- X while (fgets(ex, LONGSTRING, fp) != NULL) a++;
- X fclose(fp);
- X
- X b = 0;
- X sprintf(s, "%s/usr/%c/%d/INDEX", HOME, USER.name[0], USER.id);
- X
- X fp = fopen(s, "r");
- X if (fp == NULL) {
- X nerror("intro.c", 291, "intro", "Can't read", s);
- X }
- X while (fgets(ex, LONGSTRING, fp) != NULL){
- X if((strlen(ex) > 60) && (ex[5] != '*')) b++;
- X }
- X fclose(fp);
- X b -= 2;
- X
- X ansi2("md", 0, 0);
- X printf("%s %d. %s %s %s.\n",
- X INT12_MSG, USER.seq, INT13_MSG, moreLASTLOG, INT14_MSG);
- X printf("%s %d %s %d %s.\n",
- X INT15_MSG, a, INT16_MSG, b, INT17_MSG);
- X ansi2("me", 0, 0);
- X printf("\n");
- X }
- X
- X if ((USER.intro != 2) && (USER.intro != 4)){
- X a = MAX_SCR_LINES;
- X if (USER.schluessel[3] == 128)
- X MAX_SCR_LINES -= 11;
- X
- X if (USER.level == GUEST_LEV) {
- X show(GUESTS_INTRO, 9999, USER.more);
- X printf("\n");
- X }
- X show(INTRO, 9999, USER.more);
- X
- X MAX_SCR_LINES = a;
- X }
- X
- X fp = fopen(WHO, "a");
- X if (fp == NULL) {
- X nerror("intro.c", 309, "intro", "Can't read", WHO);
- X }
- X strcpy(s, (UNSIGNED char *) USER.sh_name);
- X if (s[0] == '\0') strcpy(s, (UNSIGNED char *) USER.nick);
- X if (s[0] == '\0') strcpy(s, (UNSIGNED char *) GBL10_MSG);
- X sprintf(ex, "%-8.8s %s (%s) ",
- X (UNSIGNED char *) ttyna(), USER.name, s);
- X
- X ex[39] = '\0';
- X fputs(ex, fp);
- X
- X sprintf(ex, "%8.8s", (UNSIGNED char *) ttyna());
- X fputs(ex, fp);
- X
- X strcpy(s, (UNSIGNED char *) mytime(1));
- X if (USER.level < 10)
- X sprintf(ex, " %s [%d] MBox: %s\n", s, USER.level, INT10_MSG);
- X else
- X sprintf(ex, " %s [%d] MBox: %s\n", s, ADMIN_LEV, INT10_MSG);
- X
- X fputs(ex, fp);
- X fclose(fp);
- X
- X sprintf(MYNAME, "%s", USER.name);
- X
- X sprintf(s, "%s", (UNSIGNED char *) mydate(0));
- X s[6] = '\0';
- X if (strcomp(s, USER.geburtsdatum) == 0) {
- X ansi2("md", 0, 0);
- X printf("\n\n%s\n", INT18_MSG);
- X printf("%s\n\n", INT19_MSG);
- X ansi2("me", 0, 0);
- X }
- X if (strcomp("24.12.", s) == 0) {
- X ansi2("md", 0, 0);
- X printf("\n\n%s\n", INT20_MSG);
- X printf("%s\n\n", INT21_MSG);
- X ansi2("me", 0, 0);
- X }
- X if (strcomp("06.12.", s) == 0) {
- X ansi2("md", 0, 0);
- X printf("\n\n%s\n", INT22_MSG);
- X printf("\n%s\n\n", INT23_MSG);
- X ansi2("me", 0, 0);
- X }
- X if (strcomp("01.01.", s) == 0) {
- X ansi2("md", 0, 0);
- X printf("\n\n%s\n", INT24_MSG);
- X printf("%s\n\n", INT25_MSG);
- X ansi2("me", 0, 0);
- X }
- X if ((calls == 1000) || (calls == 10000) || (calls == 100000)) {
- X ansi2("md", 0, 0);
- X printf("\n\n%s %d%s\n\n", INT26_MSG, calls, INT27_MSG);
- X ansi2("me", 0, 0);
- X }
- X
- X
- X /* Strict Accounting ... decrease Level if User doesn't pay */
- X
- X strcpy(s, (UNSIGNED char *) mydate( 0 ));
- X lalo = dateconv(s);
- X
- X strcpy(s, (UNSIGNED char *) USER.account);
- X s[10] = '\0';
- X ll = dateconv(s);
- X
- X if((ll <= lalo) && (ll > 19000000L)){
- X ansi2( "md", 0, 0 );
- X printf("\n%s %s %s\n", INT28_MSG, s, INT29_MSG);
- X ansi2( "me", 0, 0 );
- X printf("%s\n", INT30_MSG);
- X
- X if(lalo > (ll + 14)){
- X USER.level = PD_U_LEV;
- X sprintf(USER.newsgrps, "%s", NEWS_MINIMUM);
- X }
- X }
- X
- X if(USER.level >= ADMIN_LEV){
- X sprintf(s, "%s/core", HOME);
- X fp = fopen( s, "r" );
- X if(fp != NULL){
- X fclose(fp);
- X stat(s, &fst);
- X timeptr = localtime( &fst.st_mtime );
- X
- X printf("\n%s %02.2d.%02.2d.%04.4d %s %02.2d:%02.2d %s\n",
- X INT31_MSG,
- X timeptr->tm_mday, timeptr->tm_mon, 1900 + timeptr->tm_year,
- X INT32_MSG,
- X timeptr->tm_hour, timeptr->tm_min,
- X INT33_MSG );
- X unlink(s);
- X }
- X }
- X
- X uptodate();
- X}
- X
- X
- X
- X/* #IU - Reset users data for this session.
- X
- X [info] contains a text, which is shown during the process,
- X [mode] if set to 1 will start a complete rebuild. */
- X
- Xvoid init_user(info, mode)
- XUNSIGNED char info[];
- Xint mode;
- X{
- X FILE *fp;
- X FILE *ff;
- X FILE *fl;
- X int fd;
- X UNSIGNED char s[STRING];
- X UNSIGNED char t[STRING];
- X int i;
- X struct userdaten DUMMY;
- X int dummy = sizeof(DUMMY);
- X long ll, lalo;
- X int lati;
- X int ok;
- X
- X printf("%s ..", info);
- X
- X
- X switch (USER.terminal) {
- X case 1: sprintf(TERMINAL, "ansi");
- X break;
- X case 2: sprintf(TERMINAL, "vt100");
- X break;
- X case 3: sprintf(TERMINAL, "vt52");
- X break;
- X case 4: sprintf(TERMINAL, "un");
- X break;
- X case 5: sprintf(TERMINAL, "ansi-color");
- X break;
- X case 6: sprintf(TERMINAL, TECA[1].entry);
- X break;
- X case 7: sprintf(TERMINAL, TECA[2].entry);
- X break;
- X case 8: sprintf(TERMINAL, TECA[3].entry);
- X }
- X printf(".");
- X
- X sprintf(s, "[TERMINAL:] %s", TERMINAL);
- X control(s, 3);
- X
- X ansi2("INIT", 0, 0);
- X
- X fp = fopen(EDITORS, "r");
- X if (fp == NULL) {
- X nerror("intro.c", 487, "intro", "Can't read", EDITORS);
- X }
- X i = 0;
- X while((fgets(s, STRING, fp) != NULL) && (s[0] != '='));
- X
- X while (fscanf(fp, "%s %s", t, s) > 0){
- X if(i == (USER.editor -1)) strcpy(EDDY, (UNSIGNED char *) s);
- X i++;
- X }
- X fclose(fp);
- X
- X OFFERED_EDITORS = i;
- X
- X printf(".");
- X
- X if (USER.leserichtung == 0) USER.leserichtung = 2;
- X
- X USER.seq++;
- X
- X maybe_locked(UDBASE, "r"); mblock(UDBASE);
- X fd = open(UDBASE, O_RDWR);
- X if (fd == -1) {
- X nerror("intro.c", 395, "init_user", "Can't open", UDBASE);
- X }
- X while (read(fd, (UNSIGNED char *) &DUMMY, dummy) == dummy) {
- X if (USER.id == DUMMY.id) {
- X ll = lseek(fd, 0L, SEEK_CUR) - dummy;
- X }
- X }
- X lseek(fd, ll, SEEK_SET);
- X write(fd, (UNSIGNED char *) &USER, sizeof(USER));
- X close(fd);
- X mbunlock(UDBASE);
- X
- X printf(".");
- X
- X if (USER.newsgrps[0] == '\0') sprintf(USER.newsgrps, "%s", NEWS_MINIMUM);
- X
- X if (strcomp("selected", USER.newsgrps) == 0){
- X
- X i = 1;
- X
- X fp = fopen( SELECTED, "r" );
- X if(fp == NULL){
- X nerror("intro.c", 675, "init_user", "Can't open", SELECTED);
- X }
- X while((fgets(s, STRING, fp) != 0) && (i < MAX_NEWSGRPS)){
- X if((s[0] != '#') && (strlen(s) > 2)){
- X strcpy(newsgrp[i], (UNSIGNED char *) stripped(s));
- X i++;
- X }
- X }
- X fclose(fp);
- X }
- X else{
- X sscanf(USER.newsgrps, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s",
- X newsgrp[1], newsgrp[2], newsgrp[3], newsgrp[4], newsgrp[5],
- X newsgrp[6], newsgrp[7], newsgrp[8], newsgrp[9], newsgrp[10],
- X newsgrp[11], newsgrp[12], newsgrp[13], newsgrp[14], newsgrp[15]);
- X }
- X
- X if (mode == 1) {
- X
- X sprintf(UGROUPS, "%s/usr/%c/%d/.active", HOME, USER.name[0], USER.id);
- X sprintf(SGROUPS, "%s/usr/%c/%d/.active.all", HOME, USER.name[0], USER.id);
- X sprintf(MAKRO, "%s/usr/%c/%d/.makro", HOME, USER.name[0], USER.id);
- X
- X maybe_locked( AGROUPS, "r" );
- X fp = fopen(AGROUPS, "r");
- X if (fp == NULL) {
- X nerror("intro.c", 412, "intro", "Can't read", AGROUPS);
- X }
- X ff = fopen(UGROUPS, "w");
- X if (ff == NULL) {
- X nerror("intro.c", 442, "intro", "Can't write", UGROUPS);
- X }
- X fl = fopen(SGROUPS, "w");
- X if (fl == NULL) {
- X nerror("intro.c", 545, "intro", "Can't write", SGROUPS);
- X }
- X
- X i = 0;
- X
- X while (fscanf(fp, "%s %ld %d", s, &lalo, &lati) > 0) {
- X if ((is_subscribed(s) == 1) && (chk_newsgrp(s) == 0)) {
- X sprintf(t, "%s 00000 00000 y\n", s);
- X if (LASTLOG < lalo) {
- X fputs(t, ff);
- X }
- X if (LASTLOG == lalo) {
- X if (LASTTIME <= lati) fputs(t, ff);
- X }
- X fputs(t, fl);
- X }
- X i++;
- X if (!(i % 30)) printf(".");
- X }
- X fclose(fl);
- X fclose(ff);
- X fclose(fp);
- X
- X printf(".");
- X
- X }
- X
- X strcpy(BRETT, "PM");
- X sprintf(NG, "%s.PM", USER.name);
- X sprintf(INHALT, "%s/usr/%c/%d/INDEX", HOME, USER.name[0], USER.id);
- X
- X MAX_SCR_LINES = USER.tlines;
- X
- X if(USER.schluessel[0] == 32)
- X SHORT_HEADER = 1;
- X else
- X SHORT_HEADER = 0;
- X
- X if(USER.schluessel[1] == 0)
- X USER.schluessel[1] = 4;
- X
- X if(USER.level >= WRITE_INTERNAT){
- X strcpy(UUCPID, UUCPID2);
- X }
- X else{
- X strcpy(UUCPID, UUCPID1);
- X }
- X
- X if((USER.schluessel[2] != 1) && (USER.schluessel[2] != 2) && (USER.schluessel[2] != 4))
- X USER.schluessel[2] = 3;
- X
- X UMLAUT_MODUS = USER.schluessel[2];
- X
- X if(USER.account[0] == '\0') strcpy(USER.account, "00.00.0000");
- X USER.account[10] = '\0';
- X
- X if(USER.name[0] >= 'a') USER.name[0] -= 32;
- X
- X if((USER.schluessel[3] != 128) && (USER.schluessel[3] != 96)){
- X if(USER.schluessel[2] == INTEL_INSIDE)
- X USER.schluessel[3] = 128;
- X else
- X USER.schluessel[3] = 96;
- X }
- X
- X if(UMLAUT_MODUS != INTEL_INSIDE){
- X USER.schluessel[3] = 96;
- X }
- X
- X if(USER.schluessel[3] == 128)
- X sprintf(s, "[GRAPHICS:] %s", "yes");
- X else
- X sprintf(s, "[GRAPHICS:] %s", "no");
- X control(s, 3);
- X
- X printf("%c", CR);
- X}
- X
- END_OF_FILE
- if test 18265 -ne `wc -c <'mbox/src/intro.c'`; then
- echo shar: \"'mbox/src/intro.c'\" unpacked with wrong size!
- fi
- # end of 'mbox/src/intro.c'
- fi
- if test -f 'mbox/src/languages/francais.shh' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'mbox/src/languages/francais.shh'\"
- else
- echo shar: Extracting \"'mbox/src/languages/francais.shh'\" \(4754 characters\)
- sed "s/^X//" >'mbox/src/languages/francais.shh' <<'END_OF_FILE'
- X? Affiche les commandes disponnibles
- X? * Affiche toutes les commandes
- Xcommand ? Affiche l'aide qui concerne "command"
- X
- X0 Liste vos macros commandes
- X1-9 Execute une de vos neuf macros
- X
- X+ Va au prochain groupe avec des NOUVEAUX messages
- X
- X- Va au precedent groupe avec des NOUVEAUX messages
- X
- XACCOUNT Creation de votre compte et boite aux lettres
- X
- XAREA + Va a la section/groupe suivant(e)
- XAREA ++ Va au groupe suivant
- XAREA - Va a la section/groupe precedent(e)
- XAREA -- Va au groupe precedent
- X
- XBOARD Affiche les sections qui ont des NOUVEAUX messages
- XBOARD * Affiche toutes les sections (depends de votre niveau)
- XBOARD ** Affiche TOUTES les sections
- XBOARD + Va a la section suivante
- XBOARD - Va a la section precedente
- XBOARD ! Affiche le nom de la section courante
- XBOARD # Liste les groupes contenus dans la section
- XBOARD .. Va au groupe precedent (dans la section)
- XBOARD boardname Va au groupe "boardname"
- X
- XCHAT Discussion en ligne multi utilisateurs
- X
- XCOMBINE article artice
- X
- XDATE Affiche la date courante
- X
- XDELETE 1 Detruit le message numero 1
- XDELETE 8-12 Detruit les messages depuis 8 jusqu'a 12
- XDELETE > Detruit les copies de vos propres Emails dans votre BAL
- X
- XDIR Affiche l'index des NOUVEAUX messages
- XDIR * Affiche l'index de TOUS les messages (de la section)
- X
- XDIRECTION Sens de la lecture VIEUX <-> NOUVEAUX ?
- X
- XDOWNLOAD Recevoir des messages ASCII en utilisant le protocle
- X de transfert de son choix
- X
- XEDIT 1 Editer le message numero 1
- X
- XFINGER user Affiche les information qui concernent l'utilisateur
- X
- XFORWARD Affiche la liste des Emails preserve's
- XFORWARD user Reposte un Email pour "user"
- XFORWARD 1 user Poste le message numero 1 en Email pour "user"
- X
- XGAMES Affiche la liste des jeux
- X
- XGOODBYE Quitte le bbs
- X
- XHELP Affiche cette aide (resume')
- XHELP * display some pages of helpful descriptions
- XHELP command Affiche l'aide qui concerne la commande
- X
- XMAIL user Envoie un Email a user
- XMAIL host!user Envoie un Email a user sur la machine host
- XMAIL user@host.domain Envoie un Email a user sur la machine host.domain
- X
- XMACRO Affiche/Modifie vos macros
- X
- XMESSAGE Affiche/Modifie votre message d'acceuil
- X
- XMINIX OS-command Execute une commande shell
- X
- XPORTINFO Affiche qui fait quoi sur quel terminal
- X
- XPROTOCOL Affiche les derniers appelants
- XPROTOCOL * Affiche une liste complete des appels sur le bbs
- XPROTOCOL # Statistiques des appels du bbs
- XPROTOCOL % Statitiques des utilisateurs (TOP 50)
- X
- XPM Va dans votre Boite Aux Lettres
- X
- XREAD Lire les NOUVEAUX messages
- XREAD * Lire TOUS les messages d'une section
- XREAD 1 Lire le message numero 1
- XREAD 8-12 Lire depuis le message 8 jusqu'au 12
- X
- XROT13
- X
- XSEARCH expression Recherche l'expression dans tous les messages de la
- X section courante
- X
- XSETUP Configuration de vos preferences
- X
- XSIGNATURE Affiche/Modifie la signature qui est ajoutee a la fin
- X de tous les messages que vous ecrivez
- X
- XSTATE Affiche votre configuration courante
- X
- XSTATISTICS Statistiques sur les NEWS
- XSTATISTICS * Statistiques plus completes sur les NEWS
- XSTATISTICS $ Vitesses UUCP (si UUCP garde ces renseignements)
- XSTATISTICS # Statistiques sur le telechargement
- XSTATISTICS % Statisitiques sur le telechargement (TOP 50)
- XSTATISTICS > Statistiques sur les Emails
- X
- XSUBSCRIBE
- X
- XTHREAD
- XTHREAD 1 Suivre un sujet a travers les messages d'un groupe
- X
- XTIME Affiche l'heure local et depuis combien de temps vous
- X etes connecte'
- X
- XUSERS Affiche la liste des utilisateurs
- XUSERS * Affiche une liste plus complete des utilisateurs
- XUSERS # Affiche le ratio envoi/telechargement
- XUSERS % Affiche les utilisateurs avec leurs groupes
- XUSERS $ Information sur les comptes (payants ;-) )
- XUSERS user Affiche les informations sur user
- X
- XVERSION Affiche le numero de version du bbs
- XVERSION * Affiche les informations de compilation du bbs
- XVERSION # Affiche le "Mur des vainqueurs"
- X
- XWRITE Cree un nouveau message et le poste
- END_OF_FILE
- if test 4754 -ne `wc -c <'mbox/src/languages/francais.shh'`; then
- echo shar: \"'mbox/src/languages/francais.shh'\" unpacked with wrong size!
- fi
- # end of 'mbox/src/languages/francais.shh'
- fi
- if test -f 'mbox/src/pd.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'mbox/src/pd.c'\"
- else
- echo shar: Extracting \"'mbox/src/pd.c'\" \(23193 characters\)
- sed "s/^X//" >'mbox/src/pd.c' <<'END_OF_FILE'
- X/* ix/MBox (pd.c) by Volker Schuermann, 04.12.1993
- X
- X This C source code contains the following functions:
- X
- X #PD pd() sending a file to user under protocol control
- X #ST status() display users preferences
- X #MK mkix() making a file unix-like
- X #SK statistik() building statistics of the CALLS file
- X #AR archivieren() pack&compress a couple of articles
- X #DL download() do the downloading of a group of files
- X #AT alltime() show "all calls ever"
- X #AU auslastung() print the usage of the terminal ports
- 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 <signal.h>
- X#include <sys/stat.h>
- X#include <time.h>
- X
- X#include "mbox.h"
- X
- X
- X
- X
- X/* #PD - A file [arg] is transfered under protocol (SZ, SB, SX) control.
- X
- X [keywds] stands for Keywords. This header line should contain a
- X few words describing the contents of the file. */
- X
- Xvoid pd(arg, keywds)
- XUNSIGNED char arg[], keywds[];
- X{
- X FILE *fp;
- X FILE *ff;
- X
- X UNSIGNED char s[STRING];
- X UNSIGNED char tmp[STRING];
- X UNSIGNED char c;
- X UNSIGNED char protokoll;
- X UNSIGNED char cd[STRING];
- X struct stat fst;
- X long ts, tn;
- X
- X int cps, bps, eff;
- X int ok, i;
- X int bytes = 0;
- X
- X strcpy(cd, stripped(arg));
- X
- X printf("\n\n");
- X ansi2("md", 0, 0);
- X printf("%s\n\n", PD01_MSG);
- X
- X if(keywds[0] != '\0'){
- X printf("%s ", PD02_MSG);
- X ansi2("me", 0, 0);
- X printf("%s\n\n", keywds);
- X }
- X else{
- X ansi2("me", 0, 0);
- X }
- X
- X ansi2("mr", 0, 0);
- X printf("%c%s [%c, %c, (%c)] > ", CR, PD03_MSG, GBL06_MSG, GBL07_MSG, PD06_MSG);
- X ansi2("me", 0, 0);
- X
- X do {
- X c = getint();
- X if (c >= 97) c -= 32;
- X if ((c != GBL06_MSG) && (c != GBL07_MSG) && (c != PD06_MSG)) c = 0;
- X } while (c == 0);
- X
- X printf("%c", c);
- X
- X if (c == PD06_MSG) { /* X */
- X printf("\n");
- X sigcatch(SIGINT);
- X }
- X
- X if (c != GBL06_MSG) { /* J */
- X printf("\n");
- X return;
- X }
- X ansi2("mr", 0, 0);
- X printf("%c[%s] %c, %c, %c, %c ? > ", CR, PD07_MSG, PD08_MSG, PD09_MSG, PD10_MSG, PD11_MSG);
- X ansi2("me", 0, 0);
- X
- 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, PD12_MSG);
- X ansi2("me", 0, 0);
- X }
- X if ((protokoll != PD08_MSG) && (protokoll != PD09_MSG) &&
- X (protokoll != PD10_MSG) && (protokoll != PD11_MSG))
- X protokoll = 0;
- X } while (protokoll == 0);
- X
- X
- X printf("%c", protokoll);
- X
- X printf("\n\n");
- X ansi2("md", 0, 0);
- X printf("%s\n\n", PD13_MSG);
- X ansi2("me", 0, 0);
- X
- X time(&ts);
- X
- X switch (protokoll) {
- X case PD08_MSG:
- X sprintf(s, "exec cat %s", cd);
- X break;
- X case PD09_MSG:
- X sprintf(s, "exec %s -b %s 2> /dev/null", SX, cd);
- X break;
- X case PD10_MSG:
- X sprintf(s, "exec %s %s 2> /dev/null", SB, cd);
- X break;
- X case PD11_MSG:
- X sprintf(s, "exec %s %s 2> /dev/null", SZ, cd);
- X break;
- X }
- X system( s );
- X
- X time(&tn); tn = tn - ts;
- X
- X /*
- X stat(cd, &fst);
- X USER.downratio += ((long) fst.st_size / 1024);
- X */
- X sprintf(tmp, "%s/dnl.%d", TMP, getpid());
- X sprintf(s, "wc -c %s > %s", cd, tmp);
- X system( s );
- X fp = fopen( tmp, "r" );
- X if(fp == NULL){
- X nerror("pd.c", 154, "pd", "Can't read from", tmp);
- X }
- X while(fgets(s, STRING, fp) != 0) bytes += atoi(s);
- X fclose(fp);
- X unlink( tmp );
- X
- X ansi2( "md", 0, 0 );
- X
- X if(tn < 1) tn = 1;
- X /*
- X cps = fst.st_size / tn;
- X */
- X cps = bytes / tn;
- X bps = cps * 11;
- X
- X BAUDRATE = baudrate( bps );
- X
- X eff = ((100000 / BAUDRATE) * bps) / 1000;
- X
- X if(bps > BAUDRATE){
- X printf("\n\n%s\n", PD14_MSG);
- X ok = -1;
- X }
- X else{
- X /*
- X printf("\n\n%ld %s.\n", fst.st_size, PD15_MSG);
- X */
- X printf("\n\n%d %s.\n", bytes, PD15_MSG);
- X ok = 0;
- X }
- X
- X ansi2( "me", 0, 0 );
- X printf("%s %d cps (ca. %d bps).", PD16_MSG, cps, bps);
- X sprintf(tmp, "%s/%d.pd", TMP, getpid());
- X ff = fopen( tmp, "w" );
- X
- X
- X if(ok == 0){
- X fprintf(ff, "%s %c %-40.40s", mydate( 1 ), protokoll, cd);
- X if((bps < BAUDRATE) && (bps > 0)){
- X fprintf(ff, " %6d %6d %2d%% OK\n", cps, bps, eff);
- X }
- X else{
- X fprintf(ff, " %6d %6d %2d%% BRK\n", cps, bps, eff);
- X }
- X }
- X
- X i = 0;
- X
- X fp = fopen( PDLOG, "r" );
- X if(fp != NULL){
- X while((fgets(s, STRING, fp) != NULL) && (i < PRO_ENTRIES)){
- X fputs(s, ff);
- X i++;
- X }
- X fclose(fp);
- X }
- X
- X fclose(ff);
- X
- X sprintf(cd, "mv %s %s", tmp, PDLOG);
- X system( cd );
- X
- X printf("\n");
- X}
- X
- X
- X
- X
- X
- X
- X/* #ST - Show users preferences. */
- X
- Xvoid status()
- X{
- X UNSIGNED char s[STRING];
- X UNSIGNED char t[STRING];
- X UNSIGNED char d[STRING];
- X UNSIGNED char ex[255];
- X int a, b;
- X int i;
- X
- X
- X sprintf(s, " %s %d) %s ", PD18_MSG, USER.id, USER.name);
- X headline(s);
- X printf("\n");
- X
- X ansi2("md", 0, 0);
- X printf("%s", PD19_MSG);
- X ansi2("me", 0, 0);
- X
- X printf("\n");
- X
- X sprintf(ex, "%s ", USER.name);
- X ex[27] = '\0';
- X strcat(ex, USER.nick);
- X strcat(ex, " ");
- X ex[45] = '\0';
- X strcat(ex, USER.geburtsdatum);
- X strcat(ex, " ");
- X ex[62] = '\0';
- X strcat(ex, USER.telefon1);
- X printf("%s\n", ex);
- X
- X sprintf(ex, "%s ", USER.strasse);
- X ex[27] = '\0';
- X strcat(ex, USER.sh_name);
- X strcat(ex, " ");
- X ex[45] = '\0';
- X strcat(ex, " ");
- X ex[62] = '\0';
- X strcat(ex, USER.telefon2);
- X printf("%s\n", ex);
- X
- X printf("%s\n\n", USER.wohnort);
- X ansi2("md", 0, 0);
- X printf("%s", PD20_MSG);
- X ansi2("me", 0, 0);
- X printf("\n");
- X
- X s[0] = '\0'; strcat(s, datereconv( LASTLOG ));
- X strcat(s, "-"); strcat(s, timereconv( LASTTIME ));
- X s[16] = '\0';
- X
- X sprintf(ex, " %1d %1d %5d %1d %1d %1d %1d %6d %s",
- X USER.terminal, USER.editor, USER.level, USER.bell, USER.prompt, USER.more, USER.intro, USER.seq, s);
- X printf("%s\n\n", ex);
- X
- X ansi2("md", 0, 0);
- X printf("%s", PD21_MSG);
- X ansi2("me", 0, 0);
- X sprintf(ex, "\n%06.6d %06.6d %06.6d",
- X (USER.elapsed / 60), USER.upratio, USER.downratio);
- X printf("%s\n\n", ex);
- X
- X ansi2("md", 0, 0);
- X printf("%s", PD22_MSG);
- X ansi2("me", 0, 0);
- X
- X i = 0;
- X strcpy(s, (UNSIGNED char *) USER.name);
- X while (s[i] != '\0') {
- X if (s[i] == ' ') s[i] = '.';
- X i++;
- X }
- X
- X sprintf(t, "%s: %s@%s", PD23_MSG, s, UUCPID);
- X strcpy(d, USER.account); d[10] = '\0';
- X strcpy(s, (UNSIGNED char *) strcopy(USER.account, 11, 16));
- X i = atoi(s);
- X sprintf(s, "%s %3d.%02d", d, fix(i), flt(i));
- X sprintf(ex, "%-54.54s%s DM\n%s: %s%s", t, s, PD24_MSG, UUCPBANG, USER.nick);
- X printf("\n%s\n", ex);
- X if (USER.sh_name[0] != '\0')
- X printf("%s: %s!%s\n", PD25_MSG, UUCPSITE, USER.sh_name);
- X
- X printf("\n");
- X
- X ansi2("md", 0, 0);
- X printf("%s\n", PD26_MSG);
- X
- X ansi2("me", 0, 0);
- X
- X i = 1;
- X while(newsgrp[i][0] != '\0'){
- X if(i != 1) printf(", ");
- X printf("%s", newsgrp[i]);
- X i++;
- X }
- X
- X printf("\n\n");
- X}
- X
- X
- X
- X
- X
- X/* #MX - Converting a file [s] to unix format (i.e. deleting CRs).
- X
- X This function doesn't return anything. The file [s] itself is changed. */
- X
- Xvoid mkix( pfad )
- XUNSIGNED char pfad[];
- X{
- X FILE *fp;
- X FILE *ff;
- X
- X UNSIGNED char s[LONGSTRING];
- X UNSIGNED char p[LONGSTRING];
- X
- X int i, ok = 0;
- X
- X
- X sprintf(p, "%sabc", pfad);
- X
- X fp = fopen( pfad, "r" );
- X if(fp == NULL){
- X return;
- X }
- X
- X ff = fopen( p, "w" );
- X if(ff == NULL){
- X nerror("pd.c", 243, "mkix", "Can't write to", p);
- X }
- X
- X while((ok == 0) && (fgets(s, LONGSTRING, fp) != NULL)){
- X i = 0;
- X while(s[i] != '\0'){
- X if(s[i] == CTRL_Z){
- X ok++;
- X break;
- X }
- X i++;
- X }
- X if(ok == 0){
- X i = strlen(s) -2;
- X if(s[i] == CR){
- X s[i] = LF;
- X s[i +1] = '\0';
- X }
- X fputs(s, ff);
- X }
- X }
- X fclose(fp);
- X fclose(ff);
- X
- X unlink(pfad);
- X mbrename(p, pfad);
- X}
- X
- X
- X
- X
- X
- X/* #SK - Develope a graphical statistic from the CALLS file. */
- X
- Xvoid statistik()
- X{
- X FILE *fp;
- X
- X struct tm *tp;
- X time_t tt;
- X
- X UNSIGNED char s[STRING];
- X UNSIGNED char od[MAX_TAGE][STRING];
- X UNSIGNED char t[STRING];
- X UNSIGNED char r[STRING];
- X
- X UNSIGNED char ex[LONGSTRING];
- X
- X int v18u[MAX_TAGE];
- X int n18u[MAX_TAGE];
- X int v18g = 0;
- X int n18g = 0;
- X
- X int zeit = 0;
- X int tage = 0;
- X int max = 0;
- X
- X int i, a;
- X int toggle = 0;
- X int sonntag;
- X
- X int sdep = 7;
- X
- X
- X if(USER.terminal == ISO6429) sdep -= 3;
- X
- X fp = fopen( CALLS, "r" );
- X if(fp == NULL){
- X nerror("pd.c", 288, "statistik", "Can't read", CALLS);
- X }
- X
- X od[0][0] = '\0';
- X
- X headblock( PD27_MSG, PD28_MSG );
- X
- X while((fgets(s, (STRING *2), fp) != NULL) && (tage < (MAX_SCR_LINES -sdep))){
- X strcpy(t, (UNSIGNED char *) strcopy(s, 64, 71));
- X
- X if(strcomp(t, od[tage]) != 0){
- X if(tage != 0){
- X if((v18u[tage] + n18u[tage]) > max){
- X max = v18u[tage] + n18u[tage];
- X }
- X v18g += v18u[tage];
- X n18g += n18u[tage];
- X }
- X tage++;
- X od[tage][0] = '\0'; strcat(od[tage], t);
- X v18u[tage] = 0;
- X n18u[tage] = 0;
- X }
- X zeit = atoi(strcopy(s, 74, 75));
- X if((zeit > 6) && (zeit < 18)) v18u[tage]++;
- X if((zeit >= 18) || (zeit <= 6)) n18u[tage]++;
- X }
- X
- X sprintf(s, "%s", "ooooooooooooooooooooooooooooooooooooooooooooooooooooo");
- X
- X time(&tt);
- X tp = localtime(&tt);
- X sonntag = tp->tm_wday;
- X
- X for(i = 1; i < tage; i++){
- X sprintf(t, "%s", s);
- X a = (290 / max * (v18u[i] + n18u[i])) / 10;
- X t[a] = '\0';
- X strcpy(r, " ");
- X if(sonntag == 0){
- X strcpy(r, PD29_MSG);
- X toggle++;
- X ansi2( "md", 0, 0 );
- X }
- X if(sonntag == 6)
- X strcpy(r, PD30_MSG);
- X sonntag--;
- X if(sonntag == -1) sonntag = 6;
- X
- X printf("%s %s %4d %5d %5d %s\n",
- X od[i], r, v18u[i], n18u[i], v18u[i]+n18u[i], t);
- X if(toggle != 0) ansi2( "me", 0, 0 );
- X toggle = 0;
- X }
- X
- X if(USER.terminal != ISO6429){
- X printf("-------------------------------------------------------------------------------\n");
- X if((tage-1) > 0){
- X printf("%s %5d %5d %5d %s (%d %s)\n",
- X PD31_MSG, v18g, n18g, v18g+n18g, PD32_MSG, (v18g+n18g)/(tage-1), PD32aMSG);
- X }
- X else{
- X printf("%s %5d %5d %5d %s\n",
- X PD31_MSG, v18g, n18g, v18g+n18g, PD32_MSG);
- X }
- X printf("===============================================================================\n");
- X }
- X else{
- X if((tage-1) > 0){
- X sprintf(ex, (UNSIGNED char *) "%s %5d %5d %5d %s (%d %s)",
- X PD31_MSG, v18g, n18g, v18g+n18g, PD32_MSG, (v18g+n18g)/(tage-1), PD32aMSG);
- X }
- X else{
- X sprintf(ex, (UNSIGNED char *) "%s %5d %5d %5d %s",
- X PD31_MSG, v18g, n18g, v18g+n18g, PD32_MSG);
- X }
- X ansi2( "X1", 0, 0 );
- X strcat(ex, (UNSIGNED char *) " ");
- X ex[79] = '\0';
- X printf("%s\n", ex);
- X ansi2( "me", 0, 0 );
- X }
- X
- X printf("\n%s %d %s.\n", PD33_MSG, (tage -1), PD34_MSG);
- X
- X fclose(fp);
- X}
- X
- X
- X
- X
- X
- X
- X
- X/* #AR - Select a packer / compresser and treat a list of articles [arg].
- X
- X This function returns the name/path of the new "package". */
- X
- XUNSIGNED char *archivieren( arg )
- XUNSIGNED char arg[];
- X{
- X FILE *fp;
- X int i, c;
- X
- X struct stat fstat;
- X
- X UNSIGNED char s[LONGSTRING+STRING];
- X UNSIGNED char t[STRING];
- X UNSIGNED char packers[10][STRING];
- X UNSIGNED char adds[10][STRING];
- X UNSIGNED char tar[10][STRING];
- X UNSIGNED char en[10][STRING];
- X UNSIGNED char cd[LONGSTRING];
- X
- X int fpid;
- X
- X
- X headline( PD37_MSG );
- X printf("\n");
- X
- X sprintf(s, "%s/%s", HOME, PACKERS);
- X fp = fopen(s, "r");
- X if (fp == NULL) {
- X nerror("pd.c", 495, "archivieren", "Can't read", s);
- X }
- X
- X printf(" 1 - Text/ASCII\n\n");
- X strcpy(packers[1], (UNSIGNED char *) "cat");
- X strcpy(adds[1], (UNSIGNED char *) "?");
- X strcpy(tar[1], (UNSIGNED char *) "-");
- X en[1][0] = '\0';
- X
- X i = 1;
- X while((fgets(s, 80, fp) != NULL) && (s[0] != '='));
- X while((i < 10) && (fscanf(fp, "%s %s %s %s %s", s, packers[i], adds[i], tar[i], en[i]) > 0)){
- X i++;
- X printf(" %d - %s\n\n", i, s);
- X }
- X fclose(fp);
- X
- X ansi2("md", 0, 0);
- X printf("\n%s > ", PD38_MSG);
- X ansi2("me", 0, 0);
- X
- X c = getint();
- X if(c > 32) printf("%c", c);
- X c -= 49;
- X
- X if((c > i) || (c < 0)) return (UNSIGNED char *) "Noe!";
- X
- X
- X printf("\n\n%s .", PD39_MSG);
- X
- X switch( (fpid = fork()) ){
- X case -1 :
- X break;
- X case 0 :
- X while(1){
- X printf(".");
- X sleep(2);
- X }
- X break;
- X }
- X
- X strcpy(cd, (UNSIGNED char *) arg);
- X
- X
- X if(c != 0){
- X
- X if(tar[c][0] != '-'){
- X sprintf(t, "%s.tar", mytime(0));
- X t[5] = '-';
- X t[2] = '-';
- X sprintf(s, "exec %s %s %s > /dev/null 2>&1", TAR, t, cd);
- X system( s );
- X strcpy(cd, (UNSIGNED char *) t);
- X }
- X else{
- X sprintf(t, "%s", mytime(0));
- X t[5] = '-';
- X t[2] = '-';
- X }
- X
- X if(adds[c][0] == '?')
- X sprintf(s, "exec %s %s > /dev/null 2>&1", packers[c], cd);
- X else
- X sprintf(s, "exec %s %s %s %s > /dev/null 2>&1", packers[c], adds[c], t, cd);
- X
- X system( s );
- X
- X unlink( t );
- X
- X strcat(t, (UNSIGNED char *) en[c]);
- X
- X }
- X else{ /* Text/ASCII */
- X
- X sprintf(t, "%s", mytime(0));
- X t[5] = '-';
- X t[2] = '-';
- X
- X sprintf(s, "exec %s %s > %s", packers[c], cd, t);
- X
- X system( s );
- X }
- X
- X kill( fpid, SIGKILL );
- X (void) wait( &fpid );
- X
- X clearline();
- X
- X if(tar[c][0] != '-'){
- X ansi2( "md", 0, 0 );
- X printf( PD40_MSG );
- X ansi2( "me", 0, 0 );
- X printf("%s\n", PD41_MSG);
- X }
- X
- X stat(t, &fstat);
- X printf("%s \"%s\" %s %ld %s.", PD42_MSG, t, PD43_MSG, fstat.st_size, PD44_MSG);
- X
- X
- X return (UNSIGNED char *) t;
- X}
- X
- X
- X
- X
- X
- X
- X/* #DL - Transfer one or a couple of article(s) [arg] to a user. */
- X
- X#define MAX_DL_FILES 50
- X
- Xvoid download( arg )
- XUNSIGNED char arg[];
- X{
- X int i, k, l, m;
- X int von, bis;
- X int ALLE;
- X int protokoll, ok;
- X int cps, bps, eff;
- X
- X long ts, tn;
- X long bytes_total = 0L;
- X
- X struct stat fst;
- X
- X UNSIGNED char s[STRING];
- X UNSIGNED char cd[LONGSTRING];
- X UNSIGNED char t[(LONGSTRING+STRING)];
- X UNSIGNED char tmp[STRING];
- X
- X UNSIGNED char files[MAX_DL_FILES][STRING];
- X int mdlp = 1;
- X
- X int art[MAX_PER_NG];
- X int artp = 0;
- X int lastart;
- X
- X int havetokill = 0;
- X
- X
- X FILE *fp, *ff;
- X
- X
- X if(arg[0] == '\0'){
- X ansi( "md" );
- X printf(" <- %s\n", PD35_MSG);
- X ansi( "me" );
- X return;
- X }
- X
- X tmp[0] = '\0';
- X
- X i = 0;
- X k = -1;
- X l = -1;
- X m = -1;
- X
- X while (arg[i] != '\0') {
- X if (arg[i] == '-') k = i;
- X if (arg[i] == '*') l = i;
- X if ((arg[i] > 48) && (arg[i] < 58) && (m == -1)) m = i;
- X i++;
- X }
- X
- X von = 1;
- X bis = 32000;
- X
- X if ((m == -1) && (l == -1) && (k == -1)) {
- X ansi2( "md", 0, 0 );
- X if(atoi(arg) != 0)
- X printf(" %s\n", PD44aMSG);
- X else
- X printf(" %s\n", PD44bMSG);
- X ansi2( "me", 0, 0 );
- X return;
- X }
- X
- X if ((m != -1) && (l == -1) && (k == -1)) {
- X strcpy(s, (UNSIGNED char *) strcopy(arg, m, strlen(arg)));
- X von = atoi(s);
- X bis = von;
- X }
- X if (k != -1) {
- X strcpy(s, (UNSIGNED char *) strcopy(arg, 0, (k - 1)));
- X von = atoi(s);
- X strcpy(s, (UNSIGNED char *) strcopy(arg, (k + 1), strlen(arg)));
- X bis = atoi(s);
- X
- X if (von == 0) von = 1;
- X if (bis == 0) bis = 32000;
- X }
- X
- X if(von > bis){
- X i = bis;
- X bis = von;
- X von = i;
- X }
- X
- X maybe_locked(INHALT, "r");
- X fp = fopen(INHALT, "r");
- X if (fp == NULL) {
- X nerror("pd.c", 504, "download", "Can't read", INHALT);
- X }
- X while (fgets(cd, LONGSTRING, fp) != NULL){
- X i = atoi(cd);
- X if((i >= von) && (i <= bis)){
- X art[artp] = i;
- X artp++;
- X if(artp > MAX_PER_NG){
- X printf("This is a known bug ;-)");
- X exit(0);
- X }
- X }
- X }
- X fclose(fp);
- X
- X
- X printf("\n\n");
- X
- X ansi2("mr", 0, 0);
- X printf("%c[%s] %c, %c, %c, %c ? > ", CR, PD07_MSG, PD08_MSG, PD09_MSG, PD10_MSG, PD11_MSG);
- X ansi2("me", 0, 0);
- X
- 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, PD12_MSG);
- X ansi2("me", 0, 0);
- X }
- X if ((protokoll != PD08_MSG) && (protokoll != PD09_MSG) &&
- X (protokoll != PD10_MSG) && (protokoll != PD11_MSG))
- X protokoll = 0;
- X } while (protokoll == 0);
- X
- X
- X printf("%c", protokoll);
- X
- X
- X if (strcomp(CDROMNG, NG) != 0) {
- X
- X if (strcomp(BRETT, "PM") != 0) {
- X sprintf(s, "%s", BRETT);
- X }
- X else {
- X sprintf(s, "%s/usr/%c/%d", HOME, USER.name[0], USER.id);
- X }
- X chdir( s );
- X
- X cd[0] = '\0';
- X printf("\n\n%s .", PD36_MSG);
- X
- X lastart = artp;
- X
- X for( i = 0; i < artp; i++){
- X
- X sprintf(s, "%d", art[i]);
- X
- X fp = fopen(s, "r");
- X if(fp != 0){
- X printf(".");
- X
- X while ((fgets(t, LONGSTRING, fp) != NULL) && (t[0] > 32));
- X while ((fgets(t, LONGSTRING, fp) != NULL) && (t[0] < 32));
- X
- X ok = 0;
- X
- X if (strcomp("BINFILE", t) == 0) {
- X fgets(t, STRING, fp);
- X strcpy(s, (UNSIGNED char *) stripped(t));
- X ok++;
- X }
- X if(((2 + strlen(s) + strlen(cd)) < LONGSTRING) && (mdlp < MAX_DL_FILES)){
- X stat(s, &fst);
- X bytes_total += (long) fst.st_size;
- X
- X if(ok != 0){
- X strcpy(files[mdlp], s);
- X mdlp++;
- X USER.downratio += ((long) fst.st_size / 1024);
- X }
- X
- X strcat(cd, s);
- X strcat(cd, " ");
- X lastart = i;
- X }
- X fclose(fp);
- X }
- X }
- X }
- X else{ /* Download from CDROM */
- X
- X chdir( BRETT );
- X
- X cd[0] = '\0';
- X printf("\n\n%s .", PD36_MSG);
- X
- X lastart = artp;
- X
- X fp = fopen( INHALT, "r" );
- X fgets(s, STRING, fp);
- X fgets(s, STRING, fp);
- X
- X for( i = 0; i < artp; i++){
- X
- X rewind( fp );
- X printf(".");
- X
- X while((fgets(s, STRING, fp) != 0) && (art[i] != atoi(s)));
- X
- X l = 6;
- X while((s[l] != ' ') && (s[l] != '\0')) l++;
- X strcpy(s, (UNSIGNED char *) strcopy(s, 6, (l - 1)));
- X
- X if(((2 + strlen(s) + strlen(cd)) < LONGSTRING) && (mdlp < MAX_DL_FILES)){
- X stat(s, &fst);
- X
- X bytes_total += (long) fst.st_size;
- X
- X sprintf(files[mdlp], "%s/%s", BRETT, s);
- X mdlp++;
- X USER.downratio += ((long) fst.st_size / 1024);
- X
- X strcat(cd, s);
- X strcat(cd, " ");
- X lastart = i;
- X }
- X }
- X fclose(fp);
- X }
- X
- X if(cd[0] == '\0'){
- X ansi2("md", 0, 0);
- X printf("%c%s\n", CR, PD35_MSG);
- X ansi2("me", 0, 0);
- X chdir( HOME );
- X return;
- X }
- X
- X if((protokoll != PD08_MSG) && (strcomp(PDNG, NG) != 0) && (strcomp("cdrom", NG) != 0)){
- X strcpy(s, (UNSIGNED char *) archivieren( cd ));
- X if(strcomp("Noe!", s) != 0){
- X strcpy(cd, (UNSIGNED char *) s);
- X havetokill++;
- X }
- X }
- X
- X printf("\n\n");
- X ansi2("md", 0, 0);
- X printf("%s\n\n", PD13_MSG);
- X ansi2("me", 0, 0);
- X
- X time(&ts);
- X
- X switch (protokoll) {
- X case PD08_MSG:
- X sprintf(t, "exec cat %s", cd);
- X break;
- X case PD09_MSG:
- X sprintf(t, "exec %s -b %s 2> /dev/null", SX, cd);
- X break;
- X case PD10_MSG:
- X sprintf(t, "exec %s %s 2> /dev/null", SB, cd);
- X break;
- X case PD11_MSG:
- X sprintf(t, "exec %s %s 2> /dev/null", SZ, cd);
- X break;
- X }
- X system( t );
- X
- X if(havetokill != 0) unlink( cd );
- X
- X time(&tn); tn = tn - ts;
- X
- X chdir( HOME );
- X
- X ansi2( "md", 0, 0 );
- X
- X if(tn < 1) tn = 1;
- X cps = bytes_total / tn;
- X bps = cps * 11;
- X
- X BAUDRATE = baudrate( bps );
- X
- X eff = ((100000 / BAUDRATE) * bps) / 1000;
- X
- X if((bps > BAUDRATE) || (bps < 1)){
- X printf("\n\n%s\n", PD14_MSG);
- X ok = -1;
- X }
- X else{
- X printf("\n\n%ld %s.\n", fst.st_size, PD15_MSG);
- X ok = 0;
- X }
- X
- X ansi2( "me", 0, 0 );
- X printf("%s %d cps (ca. %d bps).", PD16_MSG, cps, bps);
- X
- X if(ok != -1){
- X
- X sprintf(tmp, "%s/%d.pd", TMP, getpid());
- X ff = fopen( tmp, "w" );
- X
- X for(i = 1; i < mdlp; i++){
- X fprintf(ff, "%s %c %-40.40s", mydate( 1 ), protokoll, files[i]);
- X fprintf(ff, " %6d %6d %2d%% DNL\n", cps, bps, eff);
- X }
- X
- X i = 0;
- X
- X fp = fopen( PDLOG, "r" );
- X if(fp != NULL){
- X while((fgets(s, STRING, fp) != NULL) && (i < (PRO_ENTRIES * 4))){
- X fputs(s, ff);
- X i++;
- X }
- X fclose(fp);
- X }
- X
- X fclose(ff);
- X
- X sprintf(cd, "mv %s %s", tmp, PDLOG);
- X system( cd );
- X }
- X else{
- X if(ff != 0) fclose(ff);
- X if(tmp[0] != '\0') unlink(tmp);
- X }
- X
- X if(lastart != (artp-1)){
- X ansi2( "md", 0, 0 );
- X printf("\n%s", PD40_MSG);
- X ansi2( "me", 0, 0 );
- X printf("%s %d %s %d %s!", PD45_MSG, art[0], PD46_MSG, art[lastart], PD47_MSG);
- X }
- X
- X printf("\n\n");
- X}
- X
- X
- X
- X/* #AT - Make up a statistic out of CALLS and ALLTIME files. */
- X
- Xvoid alltime()
- X{
- X FILE *fp;
- X FILE *ff;
- X
- X UNSIGNED char s[STRING];
- X UNSIGNED char z[STRING];
- X UNSIGNED char t[STRING];
- X UNSIGNED char m[STRING];
- X UNSIGNED char o[STRING];
- X
- X UNSIGNED char monat[13][STRING];
- X
- X int fpid;
- X int maxval = 0;
- X int i, a;
- X int toggle = 0;
- X
- X strcpy(monat[ 1], PD51_MSG);
- X strcpy(monat[ 2], PD52_MSG);
- X strcpy(monat[ 3], PD53_MSG);
- X strcpy(monat[ 4], PD54_MSG);
- X strcpy(monat[ 5], PD55_MSG);
- X strcpy(monat[ 6], PD56_MSG);
- X strcpy(monat[ 7], PD57_MSG);
- X strcpy(monat[ 8], PD58_MSG);
- X strcpy(monat[ 9], PD59_MSG);
- X strcpy(monat[10], PD60_MSG);
- X strcpy(monat[11], PD61_MSG);
- X strcpy(monat[12], PD62_MSG);
- X
- X
- X sprintf(t, "%s/all.%d", TMP, getpid() );
- X sprintf(m, "%s/al2.%d", TMP, getpid() );
- X
- X headblock( PD48_MSG, PD49_MSG );
- X printf("%s ..", PD50_MSG);
- X
- X switch( (fpid = fork()) ){
- X case -1 :
- X break;
- X case 0 :
- X while(1){
- X printf(".");
- X sleep(4);
- X }
- X break;
- X }
- X sprintf(s, "cp %s %s", ALLTIME, t );
- X system( s );
- X sprintf(s, "sort %s >> %s", CALLS, t );
- X system( s );
- X
- X sprintf(s, THIRDCUT, t, m );
- X system( s );
- X
- X kill( fpid, SIGKILL );
- X (void) wait( &fpid );
- X printf("%c", CR);
- X
- X fp = fopen( m, "r" );
- X ff = fopen( t, "w" );
- X
- X while(fgets(s, STRING, fp) != NULL){
- X if(atoi(s) > maxval) maxval = atoi(s);
- X }
- X
- X rewind(fp);
- X
- X while(fgets(o, STRING, fp) != NULL){
- X sscanf(o, "%s %s", s, z);
- X if(strlen(z) > 3){
- X i = atoi(z);
- X a = atoi(s);
- X fprintf(ff, "%12.12s '%2.2s [%4.4d] ", monat[i], strcopy(z, 3, 4), a);
- X i = ((54000L / maxval) * a) / 1000;
- X if(i < 1) i = 1;
- X strcpy(s, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
- X s[i] = '\0';
- X if(toggle == 0){
- X strcpy(z, (UNSIGNED char *) termansi( "us" ));
- X toggle++;
- X }
- X else{
- X z[0] = '\0';
- X toggle = 0;
- X }
- X fprintf(ff, "%s%s", z, s);
- X strcpy(z, (UNSIGNED char *) termansi( "me" ));
- X fprintf(ff, "%s\n", z);
- X }
- X }
- X
- X if(USER.terminal != ISO6429){
- X fprintf(ff, "===============================================================================\n");
- X }
- X else{
- X strcpy(z, (UNSIGNED char *) termansi( "X1" ));
- X fprintf(ff, "%s%s\n", z, " ");
- X strcpy(z, (UNSIGNED char *) termansi( "me" ));
- X fprintf(ff, "%s", z);
- X }
- X
- X fclose(ff);
- X fclose(fp);
- X
- X show( t, 9999, USER.more + 100 );
- X
- X unlink( t );
- X unlink( m );
- X}
- X
- X
- X/* #AU - Print the usage of terminal ports */
- X
- Xvoid auslastung()
- X{
- X FILE *fp;
- X
- X UNSIGNED char s[STRING];
- X UNSIGNED char d[STRING];
- X UNSIGNED char t[STRING];
- X UNSIGNED char dat[STRING];
- X
- X int zeit = 0, i, l = 5, cal = 0;
- X int std, min, sec, per;
- X
- X
- X headblock( PD63_MSG, PD64_MSG );
- X
- X strcpy(dat, (UNSIGNED char *) "00.00.00");
- X
- X fp = fopen( MBSTAT, "r" );
- X if(fp == NULL){
- X }
- X while(fgets(s, STRING, fp) != NULL){
- X sscanf(s, "%s %s %d", &d, &t, &i);
- X
- X if(strcomp("00.00.00", dat) == 0){
- X strcpy(dat, (UNSIGNED char *) d);
- X }
- X
- X if(strcomp(dat, d) != 0){
- X
- X std = zeit / 3600;
- X min = (zeit - (std * 3600)) / 60;
- X sec = zeit - (std * 3600) - (min * 60);
- X per = 10000 / 864 * zeit / 10000;
- X
- X printf("%s %2d:%02d:%02d ", dat, std, min, sec);
- X ansi( "md", 0, 0 );
- X printf("%3d%%", per);
- X ansi( "me", 0, 0 );
- X printf(" %4d\n", cal);
- X l++;
- X
- X strcpy(dat, (UNSIGNED char *) d);
- X zeit = 0; cal = 0;
- X
- X if(l > USER.tlines){
- X fclose(fp);
- X goto MUST_LEAVE;
- X }
- X }
- X zeit += i;
- X cal++;
- X }
- X fclose(fp);
- X
- X std = zeit / 3600;
- X min = (zeit - (std * 3600)) / 60;
- X sec = zeit - (std * 3600) - (min * 60);
- X per = 10000 / 864 * zeit / 10000;
- X
- X
- X printf("%s %2d:%02d:%02d ", dat, std, min, sec);
- X ansi( "md", 0, 0 );
- X printf("%3d%%", per);
- X ansi( "me", 0, 0 );
- X printf(" %4d\n", cal);
- X
- X MUST_LEAVE:
- X
- X printf("\n%s\n%s ", PD65_MSG, PD66_MSG);
- X ansi( "md", 0, 0 );
- X printf("200%%");
- X ansi( "me", 0, 0 );
- X printf(" %s\n", PD67_MSG);
- X}
- END_OF_FILE
- if test 23193 -ne `wc -c <'mbox/src/pd.c'`; then
- echo shar: \"'mbox/src/pd.c'\" unpacked with wrong size!
- fi
- # end of 'mbox/src/pd.c'
- fi
- if test -f 'mbox/src/xmd.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'mbox/src/xmd.c'\"
- else
- echo shar: Extracting \"'mbox/src/xmd.c'\" \(17585 characters\)
- sed "s/^X//" >'mbox/src/xmd.c' <<'END_OF_FILE'
- X/* ix/MBox (xmd.c) by Volker Schuermann, 04.12.1993
- X
- X This C source code contains the following functions:
- X
- X #ET elapsed_time() calculate the delivering time
- X #BR brief() mail a letter to a BBS user
- X #IS is_external() old gateway stuff (forget about it)
- X #MI mailing() find users BBS username
- X #MA main() XMD main function
- 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#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/* #ET - Calculates the delivering time out of a "Date:" header line [hd].
- X
- X This function returns a "X-Delivering-Time:" header line. */
- X
- XUNSIGNED char *elapsed_time( hd )
- XUNSIGNED char hd[];
- X{
- X UNSIGNED char tag[STRING];
- X UNSIGNED char monat[STRING];
- X UNSIGNED char jahr[STRING];
- X UNSIGNED char zeit[STRING];
- X UNSIGNED char zone[STRING];
- X
- X UNSIGNED char s[STRING];
- X UNSIGNED char t[STRING];
- X
- X UNSIGNED char mon[12][4];
- X
- X UNSIGNED char tzcode[STRING];
- X UNSIGNED char tzfact[STRING];
- X UNSIGNED char tzname[STRING];
- X
- X int i = 0, a = 0;
- X
- X long ljahr, lzeit;
- X long njahr, nzeit;
- X
- X FILE *fp;
- X
- X
- X strcpy(mon[ 1], "Jan");
- X strcpy(mon[ 2], "Feb");
- X strcpy(mon[ 3], "Mar");
- X strcpy(mon[ 4], "Apr");
- X strcpy(mon[ 5], "May");
- X strcpy(mon[ 6], "Jun");
- X strcpy(mon[ 7], "Jul");
- X strcpy(mon[ 8], "Aug");
- X strcpy(mon[ 9], "Sep");
- X strcpy(mon[10], "Oct");
- X strcpy(mon[11], "Nov");
- X strcpy(mon[12], "Dec");
- X
- X while((a == 0) && (hd[i] != '\0')){
- X if((hd[i] >= '0') && (hd[i] <= '9')) a = i;
- X i++;
- X }
- X
- X strcpy(s, (UNSIGNED char *) strcopy(hd, a, (strlen(hd))));
- X
- X sscanf(s, "%s %s %s %s %s", tag, monat, jahr, zeit, zone);
- X
- X for(i = 1; i <= 12; i++){
- X if(strcomp(mon[i], monat) == 0) a = i;
- X }
- X
- X sprintf(s, "%02.2d.%02.2d.%02.2d", atoi(tag), a, atoi(jahr));
- X ljahr = dateconv( (UNSIGNED char *) s );
- X
- X lzeit = (long) (atol( strcopy(zeit, 0, 1) ) * 60) + (atol(strcopy(zeit, 3, 4)));
- X
- X strcpy(s, (UNSIGNED char *) mydate( 0 ));
- X njahr = dateconv( (UNSIGNED char *) s );
- X
- X strcpy(s, (UNSIGNED char *) mytime( 0 ));
- X nzeit = (long) (atol( strcopy(s, 0, 1) ) * 60) + (atol(strcopy(s, 3, 4)));
- X
- X if((zone[1] >= '0') && (zone[1] <= '9')){ /* +0500, -0100, ... */
- X strcpy(tzfact, (UNSIGNED char *) zone);
- X tzname[0] = '\0';
- X }
- X else{ /* GMT, CET, EET, ... */
- X fp = fopen( TIMEZONES, "r" );
- X if(fp == NULL){
- X sprintf(t, "XMD-FILE-NOT-FOUND: %s\n", (UNSIGNED char *) TIMEZONES);
- X return (UNSIGNED char *) t;
- X }
- X while((fgets(s, STRING, fp) != NULL) && (s[0] != '='));
- X while(fgets(s, STRING, fp) != NULL){
- X sscanf(s, "%s", t);
- X if(strcomp(zone, t) == 0){
- X sscanf(s, "%s %s", tzcode, tzfact);
- X strcpy(tzname, (UNSIGNED char *) stripped(strcopy(s, 19, strlen(s))));
- X }
- X }
- X fclose(fp);
- X }
- X
- X strcpy(s, (UNSIGNED char *) GMT_DIFF);
- X if(s[0] == '-'){
- X s[0] = ' ';
- X nzeit += (long) (atol(s) * 60 / 100);
- X }
- X else{
- X s[0] = ' ';
- X nzeit -= (long) (atol(s) * 60 / 100);
- X }
- X
- X if(tzfact[0] == '-'){
- X tzfact[0] = ' ';
- X lzeit += (long) (atol(tzfact) * 60 / 100);
- X }
- X else{
- X tzfact[0] = ' ';
- X lzeit -= (long) (atol(tzfact) * 60 / 100);
- X }
- X
- X njahr -= ljahr;
- X
- X if(njahr > 30){
- X njahr -= 70;
- X }
- X if(njahr > 30){
- X return( (UNSIGNED char *) "X-Delivering-Time: Not able to calculate!\n" );
- X }
- X
- X nzeit -= lzeit;
- X
- X if(nzeit < 0){
- X nzeit += (24 * 60);
- X njahr -= 1;
- X }
- X
- X if(njahr > 0){
- X sprintf(s, "X-Delivering-Time: %ld day(s), %ld hour(s) and %ld minute(s)",
- X (long) njahr,
- X (long) (nzeit / 60),
- X (long) (nzeit - ((nzeit / 60) * 60)));
- X }
- X else{
- X sprintf(s, "X-Delivering-Time: %ld hour(s) and %ld minute(s)",
- X (long) (nzeit / 60),
- X (long) (nzeit - ((nzeit / 60) * 60)));
- X }
- X
- X if(tzname[0] != '\0'){
- X sprintf(t, "; %s", tzname);
- X strcat(s, t);
- X }
- X
- X strcat(s, "\n");
- X
- X
- X return (UNSIGNED char *) s;
- X}
- X
- X
- X
- Xvoid log_it( s1, s2, s3 )
- XUNSIGNED char s1[], s2[], s3[];
- X{
- X FILE *ff;
- X
- X
- X ff = fopen( XMDLOG, "a" );
- X if(ff == NULL){
- X printf("\nCan't open %s\n", XMDLOG);
- X return;
- X }
- X fprintf(ff, "%5.5s %5.5s > %-29.29s [%s %s]\n",
- X (UNSIGNED char *) mydate( 1 ), (UNSIGNED char *) mytime( 1 ),
- X (UNSIGNED char *) s1, s2, s3);
- X fclose(ff);
- X}
- X
- X
- X
- X/* #BR - Mail to a BBS user [arg]. */
- 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 int yet_new = 0;
- 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[LONGSTRING];
- 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 log_it( "Can't read:", UDBASE, "!" );
- X printf("\nCan't read %s\n", UDBASE);
- 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 maybe_locked(s, "r"); mblock(s);
- X fp = fopen(s, "r");
- X if(fp == NULL){
- X yet_new = 1;
- X sprintf(s, "%s/usr/%c/%d/seq", HOME, rec_char[0], receiver);
- X fp = fopen(s, "r");
- X if(fp == NULL){
- X log_it( "Can't read:", s, "!" );
- X printf("\nCan't read %s\n", s);
- X exit(-1);
- X }
- X }
- X fgets(s, STRING, fp);
- X mail_id = atoi( s );
- X fclose(fp);
- X
- X if(yet_new == 0)
- X sprintf(destination, "%s/usr/%d/%d", HOME, receiver, mail_id);
- X else
- X sprintf(destination, "%s/usr/%c/%d/%d", HOME, rec_char[0], receiver, mail_id);
- X
- X fp = fopen(destination, "w");
- X if(fp == NULL){
- X log_it( "Can't write to:", destination, "!" );
- X printf("\nCan't write to %s\n", destination);
- X }
- 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, STRING, ff) != NULL) {
- X i = 0;
- X
- X if(strcomp("*From ", s) == 0){
- X strcpy(s, (UNSIGNED char *) stripped(strcopy(s, 1, STRING)));
- X strcat(s, "\n");
- X }
- X if(strcomp("Date: ", s) == 0){
- X fputs(elapsed_time( s ), fp);
- 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, STRING)));
- X }
- X if((strcomp("From: ", s) == 0) && ((autor[0] == '\0') || (local = 1))){
- X strcpy(autor, (UNSIGNED char *) stripped(strcopy(s, 6, STRING)));
- X local = 0;
- X }
- X if(strcomp("From ", s) == 0){
- X strcpy(autor, (UNSIGNED char *) stripped(strcopy(s, 5, STRING)));
- X local = 1;
- X }
- X if(strcomp("*From ", s) == 0){
- X strcpy(autor, (UNSIGNED char *) stripped(strcopy(s, 6, STRING)));
- X local = 1;
- X }
- X if(strcomp("Return-Receipt-To: ", s) == 0){
- X strcpy(receipt, (UNSIGNED char *) stripped(strcopy(s, 19, STRING)));
- X }
- X if(strcomp("X-Return-Receipt-To: ", s) == 0){
- X strcpy(receipt, (UNSIGNED char *) stripped(strcopy(s, 19, STRING)));
- 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 if(fp == NULL){
- X printf("\nCan't append to %s\n", XMDLOG);
- X return;
- X }
- X fprintf(fp, "%-29.29s %33.33s\n", (UNSIGNED char *) stripped(arg), subject);
- X fclose(fp);
- X return;
- X }
- X
- X if(yet_new == 0)
- X sprintf(s, "%s/usr/%d/INDEX", HOME, receiver);
- X else
- X sprintf(s, "%s/usr/%c/%d/INDEX", HOME, rec_char[0], receiver);
- X
- X fp = fopen(s, "a");
- X if(fp == NULL){
- X log_it( "Can't append to:", s, "!" );
- X printf("\nCan't append to %s\n", s);
- X return;
- X }
- 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 sprintf(s, "%s\n", LE215_MSG);
- X fputs(s, fp);
- X
- X fclose(fp);
- X
- X if(yet_new == 0)
- X sprintf(s, "%s/usr/%d/seq", HOME, receiver);
- X else
- X sprintf(s, "%s/usr/%c/%d/seq", HOME, rec_char[0], receiver);
- X
- X fp = fopen(s, "w");
- X if(fp == NULL){
- X log_it( "Can't write to:", s, "!" );
- X printf("\nCan't write to %s\n", s);
- X }
- X rewind(fp);
- X fprintf(fp, "%d\n", (int) (mail_id + 1));
- X fclose(fp);
- X mbunlock(s);
- X
- X if(INTERACT == 0) printf("%s\n", arg);
- X
- X ff = fopen( XMDLOG, "a" );
- X if(ff == NULL){
- X printf("\nCan't append to %s\n", XMDLOG);
- X return;
- X }
- 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 if(ff == NULL){
- X log_it( "Can't write to:", t, "!" );
- X printf("\nCan't write to %s\n", t);
- X }
- 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 %s/etc/rmail.sh %s %s", HOME, t, receipt);
- X system(s);
- X unlink( t );
- X }
- X}
- X
- X
- X
- X
- X/* #IS - Old gateway stuff. */
- 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/* #MI - Finding a BBS username in a UUCP address and calling "brief()"
- X with this address. */
- X
- Xmailing()
- X{
- X FILE *fp;
- X FILE *ff;
- X UNSIGNED char s[LONGSTRING];
- X UNSIGNED char t[STRING];
- X int i, j;
- X int toggle = 0;
- X
- X fp = fopen(tmp, "r");
- X if (fp == NULL) {
- X log_it( "Can't read:", tmp, "!" );
- X printf("\nCan't read %s\n", tmp);
- X exit(-1);
- X }
- X while (fgets(s, STRING, 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), strlen(s)));
- X }
- X
- X if(t[0] == '"'){
- X j = 1;
- X while((t[j] != '\0') && (t[j] != '"')){
- X j++;
- X }
- X j--;
- X strcpy(t, (UNSIGNED char *) strcopy(t, 1, j));
- X }
- 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 if(ff == NULL){
- X printf("\nCan't open %s\n", XMDLOG);
- X return;
- X }
- 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
- X
- X
- X
- X/* #MA - XMD main function.
- X
- X This is able to forward mails to addresses such as "Real.Name@UUCPID".
- X
- X It also understands "Real.Name -" command lines. This is used by smail
- X in the "aliases" file. The mailing text has to come from stdin than. */
- X
- Xmain(argc, argv)
- Xint argc;
- XUNSIGNED char *argv[];
- X{
- X FILE *fp;
- X FILE *ff;
- X UNSIGNED char s[LONGSTRING];
- X UNSIGNED char t[LONGSTRING];
- X UNSIGNED char u[LONGSTRING];
- 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
- X setuid(0);
- X setgid(0);
- X umask(0000);
- X
- X chdir(HOME);
- X
- X
- X
- X if(argc < 2){
- X maybe_locked(ERRMBOX, "r"); 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 if(fp == NULL){
- X log_it( "Can't write to:", maildrop, "!" );
- X log_it( "Mail LOST! No SETUID for XMD!!!", "CHMOD ug+s xmd", "IMMEDIATLY!!!" );
- X printf("\nCan't write to %s\n", maildrop);
- X return;
- X }
- X c = 0;
- X do{
- X c = fgetc(stdin);
- X if((c != EOF) && (c != 4)){
- X fputc(c, fp);
- 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, "r"); 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, STRING, ff) != 0){
- X if((s[0] > 64) && (l < MAX_XMD_ALIAS)){
- X strcpy(alias[l][1], (UNSIGNED char *) stripped(s));
- X fgets(s, STRING, 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 if(ff == NULL){
- X log_it( "Can't write to:", dump, "!" );
- X printf("\nCan't write to %s\n", dump);
- X return;
- X }
- X
- X toggle = 0;
- X
- X while (fgets(s, STRING, fp) != NULL) {
- X l = 2;
- X if (s[0] == '>') {
- X if(s[1] != ' ') l = 1;
- X strcpy(t, (UNSIGNED char *) strcopy(s, l, strlen(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, STRING, 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 if(fp == NULL){
- X log_it( "Can't read:", dump, "!" );
- X printf("\nCan't read %s\n", dump);
- X return;
- X }
- X
- X sprintf(tmp, "%s/%d.XMD", TMP, getpid());
- X
- X ff = fopen(tmp, "w");
- X if(ff == NULL){
- X log_it( "Can't write to:", tmp, "!" );
- X printf("\nCan't write to %s\n", tmp);
- X return;
- X }
- X
- X toggle = 0;
- X
- X while (fgets(s, STRING, 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 if(ff == NULL){
- X log_it( "Can't write to:", tmp, "!" );
- X printf("\nCan't write to %s\n", tmp);
- X return;
- X }
- 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 17585 -ne `wc -c <'mbox/src/xmd.c'`; then
- echo shar: \"'mbox/src/xmd.c'\" unpacked with wrong size!
- fi
- # end of 'mbox/src/xmd.c'
- fi
- echo shar: End of archive 5 \(of 12\).
- cp /dev/null ark5isdone
- 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...
-