eric@sactoh0.SAC.CA.US (Eric J. Nihill) (11/26/90)
#! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create: # source # This archive created: Sun Nov 25 13:03:54 1990 export PATH; PATH=/bin:/usr/bin:$PATH if test ! -d 'source' then echo shar: "creating directory 'source'" mkdir 'source' fi echo shar: "entering directory 'source'" cd 'source' echo shar: "extracting 'bsd.patches'" '(80248 characters)' if test -f 'bsd.patches' then echo shar: "will not over-write existing file 'bsd.patches'" else cat << \SHAR_EOF > 'bsd.patches' Dcitadel.c 644 465 1770 51145 4472360466 6101 *** ORIG/citadel.c Mon Aug 14 17:18:33 1989 --- citadel.c Tue Aug 15 16:42:21 1989 *************** *** 7,13 **** #include <fcntl.h> #include <stdio.h> ! #include <ctype.h> #include <time.h> #include <sys/types.h> #include <sys/stat.h> --- 7,13 ---- #include <fcntl.h> #include <stdio.h> ! #include "ctype.h" #include <time.h> #include <sys/types.h> #include <sys/stat.h> *************** *** 15,21 **** --- 15,25 ---- #include <signal.h> #include <pwd.h> #include <setjmp.h> + #ifdef BSD + #include <sgtty.h> + #else #include <termio.h> + #endif #define CITADEL_C #include "citadel.h" *************** *** 40,51 **** --- 44,65 ---- int curr_rm; /* Room NUMBER of current room. */ int hold_rm; /* Temporary room number */ /* 0=Lobby 1=Mail 2=Aide 3-up=other */ + #ifdef BSD + int newnow; + int upass; /* Nonzero if pw is managed by UNIX */ + #else char newnow; char upass; /* Nonzero if pw is managed by UNIX */ + #endif long yourpos; /* position of your usersupp record */ char temp[50]; /* Name of general temp file */ int twitroom; /* Room num of TWIT room (if enabled) */ + #ifdef BSD + struct sgttyb stty0; /* holds old flags settings */ + struct tchars stty1; /* holds old special settings */ + #else struct termio stty0; /* holds old termio settings */ + #endif jmp_buf nextbuf; int ugnum; long uglsn; /* holds <u>ngoto info */ *************** *** 52,57 **** --- 66,74 ---- int (*backnext())() { signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); + #ifdef BSD + printf("\n\r"); + #endif longjmp(nextbuf,1); } *************** *** 58,73 **** int (*backstop())() { signal(SIGQUIT,SIG_IGN); signal(SIGINT,SIG_IGN); longjmp(nextbuf,2); } int (*sleeping())() { struct calllog rtmp; ! printf("Sleeping? Call again.\n"); strcpy(rtmp.CLfullname,ttyname(0)); rtmp.CLflags=CL_SLEEPING; rec_log(&rtmp); ! logoff(1); } int (*dropcarr())() { struct calllog rtmp; --- 75,94 ---- int (*backstop())() { signal(SIGQUIT,SIG_IGN); signal(SIGINT,SIG_IGN); + #ifdef BSD + printf("\n\r"); + #endif longjmp(nextbuf,2); } int (*sleeping())() { struct calllog rtmp; ! printf("Sleeping? Call again.\n\r"); strcpy(rtmp.CLfullname,ttyname(0)); rtmp.CLflags=CL_SLEEPING; rec_log(&rtmp); ! logoff(1); ! } int (*dropcarr())() { struct calllog rtmp; *************** *** 87,93 **** --- 108,119 ---- } setsane() { + #ifdef BSD + ioctl(0,TIOCSETP,&stty0); + ioctl(0,TIOCSETC,&stty1); + #else ioctl(0,TCSETA,&stty0); + #endif } char *months[12]={ *************** *** 115,120 **** --- 141,148 ---- sttybbs(1); fmout(usersupp.screenwidth,aaa); sttybbs(0); + signal(SIGINT,SIG_IGN); + signal(SIGQUIT,SIG_IGN); return(0); } *************** *** 188,199 **** char mtsflag,twit; chdir(BBSDIR); /* go to the right directory */ ioctl(0,TCGETA,&stty0); /* Store the old terminal parameters and */ sttybbs(0); /* install the new ones */ signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); signal(SIGHUP,(*dropcarr)); /* Cleanup gracefully if carrier is dropped */ ! printf("\nCitadel/UX release 3.01-1b\n"); twit=0; /* By default, user is not a problem user */ usersupp.screenwidth=80; formout("messages/hello"); /* print the opening greeting */ --- 216,232 ---- char mtsflag,twit; chdir(BBSDIR); /* go to the right directory */ + #ifdef BSD + ioctl(0,TIOCGETP,&stty0); /* Store the old terminal parameters and */ + ioctl(0,TIOCGETC,&stty1); /* Store the old special parameters and */ + #else ioctl(0,TCGETA,&stty0); /* Store the old terminal parameters and */ + #endif sttybbs(0); /* install the new ones */ signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); signal(SIGHUP,(*dropcarr)); /* Cleanup gracefully if carrier is dropped */ ! printf("\n\rCitadel/UX release 3.01-1b\n\r"); twit=0; /* By default, user is not a problem user */ usersupp.screenwidth=80; formout("messages/hello"); /* print the opening greeting */ *************** *** 202,207 **** --- 235,244 ---- a=getuid(); passwd=(struct passwd *)getpwuid(a); strcpy(fullname,passwd->pw_gecos); + #ifdef BSD + for (b=0; b<strlen(fullname); b++) + if (fullname[b] == ';') fullname[b]=0; + #endif upass=1; if (a==BBSUID) upass=0; twitroom=(-1); *************** *** 254,268 **** } file=eopen("eternal",O_RDWR); /* get a new user number */ ! read(file,&aa,4); usersupp.eternal=aa; aa=aa+1L; lseek(file,0L,0); ! write(file,&aa,4); close(file); formout("messages/newuser"); ! printf(" (setting up an account. please wait)\n"); /* Add user to the */ file=eopen("usersupp",O_RDONLY); /* usersupp file, keeping */ file2=creat("/tmp/usersupp",0666); /* the file in */ --- 291,305 ---- } file=eopen("eternal",O_RDWR); /* get a new user number */ ! read(file,&aa,sizeof(aa)); usersupp.eternal=aa; aa=aa+1L; lseek(file,0L,0); ! write(file,&aa,sizeof(aa)); close(file); formout("messages/newuser"); ! printf(" (setting up an account. please wait)\n\r"); /* Add user to the */ file=eopen("usersupp",O_RDONLY); /* usersupp file, keeping */ file2=creat("/tmp/usersupp",0666); /* the file in */ *************** *** 279,286 **** --- 316,327 ---- close(file); close(file2); signal(SIGHUP,SIG_IGN); unlink("usersupp"); + #ifdef BSD + system("mv /tmp/usersupp usersupp"); + #else link("/tmp/usersupp","usersupp"); unlink("/tmp/usersupp"); + #endif chmod("usersupp",0600); signal(SIGHUP,(*dropcarr)); strcpy(calllog.CLfullname,usersupp.fullname); *************** *** 298,305 **** USOK: /* make sure that if it's a shell user, they log in from the shell */ if (upass==0) if (usersupp.USuid!=BBSUID) { ! printf("Please log in by running Citadel from the shell.\n"); ! printf("(press any key to continue)\n"); inkey(); logoff(0); } --- 339,346 ---- USOK: /* make sure that if it's a shell user, they log in from the shell */ if (upass==0) if (usersupp.USuid!=BBSUID) { ! printf("Please log in by running Citadel from the shell.\n\r"); ! printf("(press any key to continue)\n\r"); inkey(); logoff(0); } *************** *** 312,318 **** pwcrypt(usersupp.password,PWCRYPT); goto PWOK; } ! printf("Wrong password...\n"); strcpy(calllog.CLfullname,usersupp.fullname); calllog.CLflags=CL_BADPW; rec_log(&calllog); --- 353,359 ---- pwcrypt(usersupp.password,PWCRYPT); goto PWOK; } ! printf("Wrong password...\n\r"); strcpy(calllog.CLfullname,usersupp.fullname); calllog.CLflags=CL_BADPW; rec_log(&calllog); *************** *** 346,357 **** calllog.CLflags=CL_LOGIN; rec_log(&calllog); ! printf("%s\nAccess level: %s\nUser #%ld / Call #%d\n", usersupp.fullname,axdefs[usersupp.axlevel], usersupp.eternal,usersupp.timescalled); if ((REGISCALL!=0)&&((usersupp.flags&US_REGIS)==0) &&(usersupp.timescalled>=REGISCALL)) { ! printf("*** Registration is requested.\n"); formout("messages/register"); a=entregis(usersupp.eternal); if (a==0) { --- 387,398 ---- calllog.CLflags=CL_LOGIN; rec_log(&calllog); ! printf("%s\n\rAccess level: %s\n\rUser #%ld / Call #%d\n\r", usersupp.fullname,axdefs[usersupp.axlevel], usersupp.eternal,usersupp.timescalled); if ((REGISCALL!=0)&&((usersupp.flags&US_REGIS)==0) &&(usersupp.timescalled>=REGISCALL)) { ! printf("*** Registration is requested.\n\r"); formout("messages/register"); a=entregis(usersupp.eternal); if (a==0) { *************** *** 366,379 **** read(file,&msgmain,sizeof(struct msgmain)); close(file); if (msgmain.MMflags&MM_VALID) ! printf("*** New users need to be validated\n"); } b=0; /* check for mail */ for (a=0; a<MAILSLOTS; ++a) if (usersupp.mailnum[a]>usersupp.lastseen[1]) ++b; ! if (b==1) printf("*** You have a new private message in Mail>\n"); ! if (b>1) printf("*** You have %d new private messages in Mail>\n",b); sprintf(temp,"/tmp/cit%d",getpid()); /* make up a temp file name */ --- 407,420 ---- read(file,&msgmain,sizeof(struct msgmain)); close(file); if (msgmain.MMflags&MM_VALID) ! printf("*** New users need to be validated\n\r"); } b=0; /* check for mail */ for (a=0; a<MAILSLOTS; ++a) if (usersupp.mailnum[a]>usersupp.lastseen[1]) ++b; ! if (b==1) printf("*** You have a new private message in Mail>\n\r"); ! if (b>1) printf("*** You have %d new private messages in Mail>\n\r",b); sprintf(temp,"/tmp/cit%d",getpid()); /* make up a temp file name */ *************** *** 403,409 **** MAIN: signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); a=room_prompt(&quickroom); ! printf("\n%s%c ",quickroom.QRname,a); /* room prompt */ getcmd(aaa); MAINFAKE: if (!strcmp(aaa,"h")) goto HELP; --- 444,450 ---- MAIN: signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); a=room_prompt(&quickroom); ! printf("\n\r%s%c ",quickroom.QRname,a); /* room prompt */ getcmd(aaa); MAINFAKE: if (!strcmp(aaa,"h")) goto HELP; *************** *** 468,479 **** a=fork(); if (a==0) { execlp("chat","chat",usersupp.fullname,NULL); ! printf("Chat program not available.\n"); exit(0); } } do { b=wait(); } while((b!=a)&&(b!=(-1))); if (!strcmp(aaa,"*")) { --- 509,524 ---- a=fork(); if (a==0) { execlp("chat","chat",usersupp.fullname,NULL); ! printf("Chat program not available.\n\r"); exit(0); } } do { + #ifdef BSD + b=wait(0); + #else b=wait(); + #endif } while((b!=a)&&(b!=(-1))); if (!strcmp(aaa,"*")) { *************** *** 515,521 **** lseek(file,aa,0); write(file,&tempUS,sizeof(struct usersupp)); } ! else printf("No such user.\n"); close(file); } --- 560,566 ---- lseek(file,aa,0); write(file,&tempUS,sizeof(struct usersupp)); } ! else printf("No such user.\n\r"); close(file); } *************** *** 540,556 **** if (usersupp.flags&US_NOPROMPT) goto RNEXT; printf("<A>gain, <N>ext, <S>top -> "); RPROMPT2: b=inkey(); b=(b&127); b=tolower(b); ! if (b=='a') { printf("Again\n"); goto RAGAIN; } ! if (b=='n') { printf("Next\n"); goto RNEXT; } ! if (b=='s') { printf("Stop\n"); goto RSTOP; } if((usersupp.axlevel>=6)||(usersupp.eternal==quickroom.QRroomaide)) if ((b=='d')&&(curr_rm!=1)) { ! printf("Delete\n"); goto RDELETE; } if((usersupp.axlevel>=6)||(usersupp.eternal==quickroom.QRroomaide)) if ((b=='m')&&(curr_rm!=1)) { ! printf("Move\n"); move_message(fullroom.FRpos[a]); delete_message(fullroom.FRnum[a]); goto RNEXT; --- 585,601 ---- if (usersupp.flags&US_NOPROMPT) goto RNEXT; printf("<A>gain, <N>ext, <S>top -> "); RPROMPT2: b=inkey(); b=(b&127); b=tolower(b); ! if (b=='a') { printf("Again\n\r"); goto RAGAIN; } ! if (b=='n') { printf("Next\n\r"); goto RNEXT; } ! if (b=='s') { printf("Stop\n\r"); goto RSTOP; } if((usersupp.axlevel>=6)||(usersupp.eternal==quickroom.QRroomaide)) if ((b=='d')&&(curr_rm!=1)) { ! printf("Delete\n\r"); goto RDELETE; } if((usersupp.axlevel>=6)||(usersupp.eternal==quickroom.QRroomaide)) if ((b=='m')&&(curr_rm!=1)) { ! printf("Move\n\r"); move_message(fullroom.FRpos[a]); delete_message(fullroom.FRnum[a]); goto RNEXT; *************** *** 583,597 **** if (usersupp.flags & US_NOPROMPT) goto VNEXT; printf("<A>gain, <N>ext, <S>top -> "); VPROMPT2: b=inkey(); b=(b&127); b=tolower(b); ! if (b=='a') { printf("Again\n"); goto VAGAIN; } ! if (b=='n') { printf("Next\n"); goto VNEXT; } ! if (b=='s') { printf("Stop\n"); goto VSTOP; } if((usersupp.axlevel>=6)||(usersupp.eternal==quickroom.QRroomaide)) if ((b=='d')&&(curr_rm!=1)) ! { printf("Delete\n"); goto VDELETE; } if((usersupp.axlevel>=6)||(usersupp.eternal==quickroom.QRroomaide)) if ((b=='m')&&(curr_rm!=1)) { ! printf("Move\n"); move_message(fullroom.FRpos[a]); delete_message(fullroom.FRnum[a]); goto VNEXT; --- 628,642 ---- if (usersupp.flags & US_NOPROMPT) goto VNEXT; printf("<A>gain, <N>ext, <S>top -> "); VPROMPT2: b=inkey(); b=(b&127); b=tolower(b); ! if (b=='a') { printf("Again\n\r"); goto VAGAIN; } ! if (b=='n') { printf("Next\n\r"); goto VNEXT; } ! if (b=='s') { printf("Stop\n\r"); goto VSTOP; } if((usersupp.axlevel>=6)||(usersupp.eternal==quickroom.QRroomaide)) if ((b=='d')&&(curr_rm!=1)) ! { printf("Delete\n\r"); goto VDELETE; } if((usersupp.axlevel>=6)||(usersupp.eternal==quickroom.QRroomaide)) if ((b=='m')&&(curr_rm!=1)) { ! printf("Move\n\r"); move_message(fullroom.FRpos[a]); delete_message(fullroom.FRnum[a]); goto VNEXT; *************** *** 602,613 **** ENTMSG: if ((usersupp.axlevel<2)&&(curr_rm!=1)) { ! printf("Need to be validated to enter\n"); ! printf("(except in Mail> to Sysop)\n"); goto MAIN; } if ((usersupp.axlevel<4)&&(quickroom.QRflags&QR_NETWORK)) { ! printf("Need net privileges to enter here\n"); goto MAIN; } mtsflag=0; --- 647,658 ---- ENTMSG: if ((usersupp.axlevel<2)&&(curr_rm!=1)) { ! printf("Need to be validated to enter\n\r"); ! printf("(except in Mail> to Sysop)\n\r"); goto MAIN; } if ((usersupp.axlevel<4)&&(quickroom.QRflags&QR_NETWORK)) { ! printf("Need net privileges to enter here\n\r"); goto MAIN; } mtsflag=0; *************** *** 623,645 **** e=alias(buf); /* alias and mail type */ if (buf[0]==0) goto MAIN; if (e==M_ERROR) { ! printf("Bad address - can't send message\n"); goto MAIN; } if ((e!=M_LOCAL)&&(usersupp.axlevel<4)) { ! printf("Need net privileges for network mail\n"); goto MAIN; } if (!strucmp(buf,"sysop")) { mtsflag=1; goto SKFALL; } if (e!=M_LOCAL) goto SKFALL; /* don't search local file if remote */ if (!strucmp(buf,usersupp.fullname)) { ! printf("Can't send mail to yourself!\n"); goto MAIN; } file=eopen("usersupp",O_RDONLY); /* check to make sure the */ aa=finduser(file,buf); /* user exists; also get */ if (aa==(-1)) { /* the right upper/lower */ ! printf("No such user.\n"); /* casing of the name */ close(file); goto MAIN; } read(file,&tempUS,sizeof(struct usersupp)); --- 668,690 ---- e=alias(buf); /* alias and mail type */ if (buf[0]==0) goto MAIN; if (e==M_ERROR) { ! printf("Bad address - can't send message\n\r"); goto MAIN; } if ((e!=M_LOCAL)&&(usersupp.axlevel<4)) { ! printf("Need net privileges for network mail\n\r"); goto MAIN; } if (!strucmp(buf,"sysop")) { mtsflag=1; goto SKFALL; } if (e!=M_LOCAL) goto SKFALL; /* don't search local file if remote */ if (!strucmp(buf,usersupp.fullname)) { ! printf("Can't send mail to yourself!\n\r"); goto MAIN; } file=eopen("usersupp",O_RDONLY); /* check to make sure the */ aa=finduser(file,buf); /* user exists; also get */ if (aa==(-1)) { /* the right upper/lower */ ! printf("No such user.\n\r"); /* casing of the name */ close(file); goto MAIN; } read(file,&tempUS,sizeof(struct usersupp)); *************** *** 696,702 **** } if ( (curr_rm==0) && (b>0) ) { for (c=0; c<MAXROOMS; ++c) if (skipping[c]==1) skipping[c]=0; ! curr_rm=0; printf("*** You have skipped rooms.\n"); } if ( (curr_rm==0) && (d>0) ) { for (c=0; c<MAXROOMS; ++c) if (skipping[c]==2) skipping[c]=0; --- 741,747 ---- } if ( (curr_rm==0) && (b>0) ) { for (c=0; c<MAXROOMS; ++c) if (skipping[c]==1) skipping[c]=0; ! curr_rm=0; printf("*** You have skipped rooms.\n\r"); } if ( (curr_rm==0) && (d>0) ) { for (c=0; c<MAXROOMS; ++c) if (skipping[c]==2) skipping[c]=0; *************** *** 716,722 **** sttybbs(0); signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); ! printf("\n"); goto MAIN; ZLIST: --- 761,767 ---- sttybbs(0); signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); ! printf("\n\r"); goto MAIN; ZLIST: *************** *** 730,736 **** sttybbs(0); signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); ! printf("\n"); goto MAIN; DOTGOTO: /* .Goto a new room */ --- 775,781 ---- sttybbs(0); signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); ! printf("\n\r"); goto MAIN; DOTGOTO: /* .Goto a new room */ *************** *** 738,744 **** strcpy(aaa,&aaa[2]); for (a=0; a<strlen(aaa); ++a) aaa[a]=tolower(aaa[a]); IFNAIDE if(!strucmp(aaa,"aide")) { ! printf("Need aide access to enter Aide> room\n"); goto MAIN; } --- 783,789 ---- strcpy(aaa,&aaa[2]); for (a=0; a<strlen(aaa); ++a) aaa[a]=tolower(aaa[a]); IFNAIDE if(!strucmp(aaa,"aide")) { ! printf("Need aide access to enter Aide> room\n\r"); goto MAIN; } *************** *** 772,778 **** printf("Enter room password: "); getline(aaa,9); if (strucmp(aaa,QRscratch.QRpasswd)) { ! printf("Wrong password.\n"); goto MAIN; } } curr_rm=a; goto DGFOUNDIT; } } --- 817,823 ---- printf("Enter room password: "); getline(aaa,9); if (strucmp(aaa,QRscratch.QRpasswd)) { ! printf("Wrong password.\n\r"); goto MAIN; } } curr_rm=a; goto DGFOUNDIT; } } *************** *** 795,801 **** ) { curr_rm=a; close(file); goto DGFOUNDIT; } } close(file); ! printf("No room '%s'.\n",aaa); goto MAIN; DGFOUNDIT: /* goto room currently in main() variable curr_rm */ --- 840,846 ---- ) { curr_rm=a; close(file); goto DGFOUNDIT; } } close(file); ! printf("No room '%s'.\n\r",aaa); goto MAIN; DGFOUNDIT: /* goto room currently in main() variable curr_rm */ *************** *** 808,814 **** if (fullroom.FRnum[a]>usersupp.lastseen[curr_rm]) ++c; } } if (f==1) printf("%s - ",quickroom.QRname); ! printf("%d new of %d messages.\n",c,b); readyerself(); usersupp.forget[curr_rm]=(-1); usersupp.generation[curr_rm]=quickroom.QRgen; --- 853,859 ---- if (fullroom.FRnum[a]>usersupp.lastseen[curr_rm]) ++c; } } if (f==1) printf("%s - ",quickroom.QRname); ! printf("%d new of %d messages.\n\r",c,b); readyerself(); usersupp.forget[curr_rm]=(-1); usersupp.generation[curr_rm]=quickroom.QRgen; *************** *** 822,831 **** goto MAIN; TERMINATE: ! printf("%s logged out.\n",usersupp.fullname); if (a==1) { if (upass==0) ! printf("\n\nType 'off' to hang up, or next user...\n"); goto GSTA; } else { --- 867,876 ---- goto MAIN; TERMINATE: ! printf("%s logged out.\n\r",usersupp.fullname); if (a==1) { if (upass==0) ! printf("\n\r\n\rType 'off' to hang up, or next user...\n\r"); goto GSTA; } else { *************** *** 841,847 **** /* will only change password if it's maintained by Citadel */ PASSWD: if (upass!=0) { ! printf("Use the shell 'passwd' command.\n"); goto MAIN; } IFNEXPERT formout("messages/changepw"); printf("Enter new password: "); --- 886,892 ---- /* will only change password if it's maintained by Citadel */ PASSWD: if (upass!=0) { ! printf("Use the shell 'passwd' command.\n\r"); goto MAIN; } IFNEXPERT formout("messages/changepw"); printf("Enter new password: "); *************** *** 849,861 **** b=ccc[0]+ccc[6]+ccc[8]; pwcrypt(ccc,PWCRYPT); if (ccc[0]==0) { ! printf("Password unchanged.\n"); goto MAIN; } readyerself(); strcpy(usersupp.password,ccc); if (b==256) usersupp.axlevel=6; writeyerself(); ! printf("Password changed.\n"); goto MAIN; } --- 894,906 ---- b=ccc[0]+ccc[6]+ccc[8]; pwcrypt(ccc,PWCRYPT); if (ccc[0]==0) { ! printf("Password unchanged.\n\r"); goto MAIN; } readyerself(); strcpy(usersupp.password,ccc); if (b==256) usersupp.axlevel=6; writeyerself(); ! printf("Password changed.\n\r"); goto MAIN; } *************** *** 912,919 **** if (mtsflag) goto ENTFIN; if (mailtype!=M_LOCAL) { if (fork()==0) { execl("netmailer","netmailer",mtmp,&mailtype); ! printf("*** Netmailer not installed.\n"); exit(0); } } --- 957,968 ---- if (mtsflag) goto ENTFIN; if (mailtype!=M_LOCAL) { if (fork()==0) { + #ifdef BSD + execl("netmailer","netmailer",mtmp,&mailtype,NULL); + #else execl("netmailer","netmailer",mtmp,&mailtype); ! #endif ! printf("*** Netmailer not installed.\n\r"); exit(0); } } *************** *** 961,967 **** --- 1010,1020 ---- strcpy(wtmpsupp.WSname,""); write(file,&wtmpsupp,sizeof(struct wtmpsupp)); close(file); + #ifdef BSD + while (wait(0)!=(-1)) ; /* wait for child processes to finish */ + #else while (wait()!=(-1)) ; /* wait for child processes to finish */ + #endif unlink(temp); /* remove temporary file, in case it's still around */ setsane(); /* return the old terminal settings */ exit(code); /* exit with the proper exit code */ ******* *** 602,613 **** ENTMSG: if ((usersupp.axlevel<2)&&(curr_rm!=1)) { ! printf("Need to be validated to enter\n"); ! printf("(except in Mail> to Sysop)\n"); goto MAIN; } if ((usersupp.axlevel<4)&&(quickroom.QRflags&QR_NETWORK)) { ! printf("Need net privileges to enter here\n"); goto MAIN; } mtsflag=0; --- 647,658 ---- ENTMSG: if ((usersupp.axlevel<2)&&(curr_rmDcommands.c 644 465 1770 555 4472360466 6234 *** ORIG/commands.c Wed Aug 9 15:46:01 1989 --- commands.c Tue Aug 15 13:26:02 1989 *************** *** 6,12 **** */ #include <stdio.h> ! #include <ctype.h> #include "citadel.h" #define IFAIDE if(usersupp.axlevel>=6) --- 6,12 ---- */ #include <stdio.h> ! #include "ctype.h" #include "citadel.h" #define IFAIDE if(usersupp.axlevel>=6) ** sttybbs(0); signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); ! printf("\n"); goto MAIN; DOTGOTO: /* .Goto a new room */ --- 77Dmessages.c 644 465 1770 20310 4472360467 6272 *** ORIG/messages.c Wed Aug 9 15:40:31 1989 --- messages.c Wed Aug 16 13:42:23 1989 *************** *** 12,18 **** #include <fcntl.h> #include <stdio.h> ! #include <ctype.h> #include <time.h> #include <sys/types.h> #include <sys/stat.h> --- 12,18 ---- #include <fcntl.h> #include <stdio.h> ! #include "ctype.h" #include <time.h> #include <sys/types.h> #include <sys/stat.h> *************** *** 20,26 **** #include <signal.h> #include <pwd.h> #include <setjmp.h> - #include <termio.h> #include "citadel.h" #define IFEXPERT if (usersupp.flags&US_EXPERT) --- 20,25 ---- *************** *** 47,53 **** a=setjmp(nextbuf); sttybbs(0); if ((a==1)||(a==2)) { ! printf("\n\n"); return(a); } signal(SIGINT,(*backnext)); --- 46,52 ---- a=setjmp(nextbuf); sttybbs(0); if ((a==1)||(a==2)) { ! printf("\n\r\n\r"); return(a); } signal(SIGINT,(*backnext)); *************** *** 63,68 **** --- 62,68 ---- struct smreturn *retbuf; /* return information */ { + unsigned char ab; int file,a,c,d,file2; long bb,cc,templen,hibytes,origpos; char sbuf[BUFSIZ]; *************** *** 116,122 **** d=read(file2,sbuf,3); write(file,sbuf,d); write(file,mid,strlen(mid)); ! d=0; write(file,&d,1); do { d=read(file2,sbuf,BUFSIZ); write(file,sbuf,d); --- 116,122 ---- d=read(file2,sbuf,3); write(file,sbuf,d); write(file,mid,strlen(mid)); ! ab=0; write(file,&d,sizeof(ab)); do { d=read(file2,sbuf,BUFSIZ); write(file,sbuf,d); *************** *** 151,157 **** int mode; /* 0 for normal, 1 for ASCII */ { FILE *fp; ! int a,b,old; long aa,beg,now; char aaa[100],bbb[100]; --- 151,158 ---- int mode; /* 0 for normal, 1 for ASCII */ { FILE *fp; ! unsigned char a,b,old; ! int bb; long aa,beg,now; char aaa[100],bbb[100]; *************** *** 161,170 **** putc(type,fp); /* Normal or anonymous, see MES_ flags */ putc(mode,fp); /* Formatted or unformatted */ strcpy(aaa,author->fullname); ! for (a=0; a<strlen(aaa); ++a) { ! aaa[a]=tolower(aaa[a]); ! if (aaa[a]==32) aaa[a]='_'; ! if (aaa[a]=='!') strcpy(&aaa[a],&aaa[a+1]); } fprintf(fp,"P%s",aaa); putc(0,fp); /* path */ fprintf(fp,"T%ld",now); putc(0,fp); /* date/time */ --- 162,171 ---- putc(type,fp); /* Normal or anonymous, see MES_ flags */ putc(mode,fp); /* Formatted or unformatted */ strcpy(aaa,author->fullname); ! for (bb=0; bb<strlen(aaa); ++bb) { ! aaa[bb]=tolower(aaa[bb]); ! if (aaa[bb]==32) aaa[bb]='_'; ! if (aaa[bb]=='!') strcpy(&aaa[bb],&aaa[bb+1]); } fprintf(fp,"P%s",aaa); putc(0,fp); /* path */ fprintf(fp,"T%ld",now); putc(0,fp); /* date/time */ *************** *** 175,184 **** fflush(fp); msgform(usersupp.screenwidth,0L,filename); putc('M',fp); ! if (mode==1) printf("(Press ctrl-d when finished)\n"); beg=ftell(fp); old=1; if (mode==1) goto ME2; ME1: a=inkey(); a=(a&127); aa=ftell(fp); if ((a==8)&&(aa>beg)) { back(1); fseek(fp,-1L,1); goto ME1; } --- 176,188 ---- fflush(fp); msgform(usersupp.screenwidth,0L,filename); putc('M',fp); ! if (mode==1) printf("(Press ctrl-d when finished)\n\r"); beg=ftell(fp); old=1; if (mode==1) goto ME2; ME1: a=inkey(); a=(a&127); + #ifdef BSD + if (a==10) a=13; + #endif aa=ftell(fp); if ((a==8)&&(aa>beg)) { back(1); fseek(fp,-1L,1); goto ME1; } *************** *** 198,209 **** MECR: putc(0,fp); fseek(fp,-1L,1); fflush(fp); printf("<A>bort <C>ontinue <P>rint <S>ave -> "); MECR2: b=inkey(); b=(b&127); b=tolower(b); ! if (b=='a') { printf("Abort\n"); goto MEABT; } ! if (b=='c') { printf("Continue\n"); if (mode==0) goto ME1; if (mode==1) goto ME2; } ! if (b=='s') { printf("Save buffer\n"); goto MEFIN; } ! if (b=='p') { printf("Print formatted\n"); msgform(usersupp.screenwidth,0L,filename); goto MECR; } goto MECR2; --- 202,213 ---- MECR: putc(0,fp); fseek(fp,-1L,1); fflush(fp); printf("<A>bort <C>ontinue <P>rint <S>ave -> "); MECR2: b=inkey(); b=(b&127); b=tolower(b); ! if (b=='a') { printf("Abort\n\r"); goto MEABT; } ! if (b=='c') { printf("Continue\n\r"); if (mode==0) goto ME1; if (mode==1) goto ME2; } ! if (b=='s') { printf("Save buffer\n\r"); goto MEFIN; } ! if (b=='p') { printf("Print formatted\n\r"); msgform(usersupp.screenwidth,0L,filename); goto MECR; } goto MECR2; *************** *** 240,251 **** fseek(fp,spos,0); e=getc(fp); if (e!=255) { ! printf("*** CANNOT LOCATE MESSAGE / pos=%ld\n",spos); goto END; } mtype=getc(fp); aflag=getc(fp); ! printf("\n "); ! if (mtype==MES_ANON) printf("****\n"); if (mtype==MES_AN2) printf("<anonymous> "); goto BONFGM; A: if (aflag==1) goto AFLAG; --- 244,255 ---- fseek(fp,spos,0); e=getc(fp); if (e!=255) { ! printf("*** CANNOT LOCATE MESSAGE / pos=%ld\n\r",spos); goto END; } mtype=getc(fp); aflag=getc(fp); ! printf("\n\r "); ! if (mtype==MES_ANON) printf("****\n\r"); if (mtype==MES_AN2) printf("<anonymous> "); goto BONFGM; A: if (aflag==1) goto AFLAG; *************** *** 255,273 **** if ( ((a==13)||(a==10)) && (old!=13) && (old!=10) ) a=32; if ( ((old==13)||(old==10)) && ((real==32)||(real==13)||(real==10))) { ! printf("\n"); c=1; } if (a!=32) { if ( ((strlen(aaa)+c)>(width-4)) && (strlen(aaa)>(width-4)) ) ! { printf("\n%s",aaa); c=strlen(aaa); aaa[0]=0; } b=strlen(aaa); aaa[b]=a; aaa[b+1]=0; } if (a==32) { if ((strlen(aaa)+c)>(width-5)) { ! printf("\n"); c=1; } printf("%s ",aaa); ++c; c=c+strlen(aaa); strcpy(aaa,""); goto A; } if ((a==13)||(a==10)) { ! printf("%s\n",aaa); c=1; strcpy(aaa,""); goto A; } goto A; --- 259,277 ---- if ( ((a==13)||(a==10)) && (old!=13) && (old!=10) ) a=32; if ( ((old==13)||(old==10)) && ((real==32)||(real==13)||(real==10))) { ! printf("\n\r"); c=1; } if (a!=32) { if ( ((strlen(aaa)+c)>(width-4)) && (strlen(aaa)>(width-4)) ) ! { printf("\n\r%s",aaa); c=strlen(aaa); aaa[0]=0; } b=strlen(aaa); aaa[b]=a; aaa[b+1]=0; } if (a==32) { if ((strlen(aaa)+c)>(width-5)) { ! printf("\n\r"); c=1; } printf("%s ",aaa); ++c; c=c+strlen(aaa); strcpy(aaa,""); goto A; } if ((a==13)||(a==10)) { ! printf("%s\n\r",aaa); c=1; strcpy(aaa,""); goto A; } goto A; *************** *** 277,288 **** goto AFLAG; END: fclose(fp); ! printf("\n"); return(0); BONFGM: b=getc(fp); if (b<0) goto END; if (b=='M') { ! printf("\n"); goto A; } fpgetfield(fp,bbb); --- 281,292 ---- goto AFLAG; END: fclose(fp); ! printf("\n\r"); return(0); BONFGM: b=getc(fp); if (b<0) goto END; if (b=='M') { ! printf("\n\r"); goto A; } fpgetfield(fp,bbb); *************** *** 321,328 **** long spos; /* position in master file */ char *flnm; /* file to write to */ { ! int a,b,c; ! int file,file2; long cc; char field[512]; char fwork[512]; --- 325,332 ---- long spos; /* position in master file */ char *flnm; /* file to write to */ { ! unsigned char b,c; ! int file,file2,a; long cc; char field[512]; char fwork[512]; *************** *** 332,348 **** lseek(file,spos,0); for (a=0; a<3; ++a) { ! read(file,&b,1); ! write(file2,&b,1); } ! PI: b=0; read(file,&b,1); if (b=='M') { ! write(file2,&b,1); goto B; } getfield(file,field); if (b!='I') { ! write(file2,&b,1); write(file2,field,strlen(field)+1); } goto PI; --- 336,352 ---- lseek(file,spos,0); for (a=0; a<3; ++a) { ! read(file,&b,sizeof(b)); ! write(file2,&b,sizeof(b)); } ! PI: b=0; read(file,&b,sizeof(b)); if (b=='M') { ! write(file2,&b,sizeof(b)); goto B; } getfield(file,field); if (b!='I') { ! write(file2,&b,sizeof(b)); write(file2,field,strlen(field)+1); } goto PI; *************** *** 349,356 **** B: cc=lseek(file,0L,1); C: if (cc>=MM_FILELEN) cc=lseek(file,0L,0); ! c=0; read(file,&c,1); ++cc; ! write(file2,&c,1); if (c!=0) goto C; close(file); close(file2); --- 353,360 ---- B: cc=lseek(file,0L,1); C: if (cc>=MM_FILELEN) cc=lseek(file,0L,0); ! c=0; read(file,&c,sizeof(c)); ++cc; ! write(file2,&c,sizeof(c)); if (c!=0) goto C; close(file); close(file2); ",O_RDONLY); /* check to make sure the */ aa=finduser(file,buf); /* user exists; also get */ if (aa==(-1)) { /* the right upper/lower */ ! printf("No such user.\n\r"); /* casing of the name */ close(file); goto MAIN; } read(file,&tempUS,sizeof(struct usersupp)); *************** ***Drooms.c 644 465 1770 40415 4472360470 5624 *** ORIG/rooms.c Wed Aug 9 15:36:51 1989 --- rooms.c Wed Aug 16 14:20:22 1989 *************** *** 2,8 **** #include <fcntl.h> #include <stdio.h> ! #include <ctype.h> #include <time.h> #include <sys/types.h> #include <sys/stat.h> --- 2,8 ---- #include <fcntl.h> #include <stdio.h> ! #include "ctype.h" #include <time.h> #include <sys/types.h> #include <sys/stat.h> *************** *** 10,16 **** #include <signal.h> #include <pwd.h> #include <setjmp.h> - #include <termio.h> #include "citadel.h" #define IFEXPERT if (usersupp.flags&US_EXPERT) --- 10,15 ---- *************** *** 36,42 **** struct quickroom QRscratch; b=1; ! printf("\n Rooms with unread messages:\n"); file=open("./quickroom",O_RDONLY); if (file<0) return(1); for (a=0; a<MAXROOMS; ++a) { c=read(file,&QRscratch,sizeof(struct quickroom)); --- 35,41 ---- struct quickroom QRscratch; b=1; ! printf("\n\r Rooms with unread messages:\n\r"); file=open("./quickroom",O_RDONLY); if (file<0) return(1); for (a=0; a<MAXROOMS; ++a) { c=read(file,&QRscratch,sizeof(struct quickroom)); *************** *** 59,74 **** ) { if (d>=(USgiven->screenwidth)) { ! printf("\n"); b=1; } c=room_prompt(&QRscratch); printf("%s%c ",QRscratch.QRname,c); b=b+strlen(QRscratch.QRname)+3; } } ! if (b!=1) printf("\n"); b=1; ! printf("\n No unseen messages in:\n"); lseek(file,0L,0); for (a=0; a<MAXROOMS; ++a) { c=read(file,&QRscratch,sizeof(struct quickroom)); --- 58,73 ---- ) { if (d>=(USgiven->screenwidth)) { ! printf("\n\r"); b=1; } c=room_prompt(&QRscratch); printf("%s%c ",QRscratch.QRname,c); b=b+strlen(QRscratch.QRname)+3; } } ! if (b!=1) printf("\n\r"); b=1; ! printf("\n\r No unseen messages in:\n\r"); lseek(file,0L,0); for (a=0; a<MAXROOMS; ++a) { c=read(file,&QRscratch,sizeof(struct quickroom)); *************** *** 91,103 **** ) { d=strlen(QRscratch.QRname)+3+b; if (d>=(USgiven->screenwidth)) { ! printf("\n"); b=1; } c=room_prompt(&QRscratch); printf("%s%c ",QRscratch.QRname,c); b=b+strlen(QRscratch.QRname)+3; } } ! if (b!=1) printf("\n"); close(file); return(0); --- 90,102 ---- ) { d=strlen(QRscratch.QRname)+3+b; if (d>=(USgiven->screenwidth)) { ! printf("\n\r"); b=1; } c=room_prompt(&QRscratch); printf("%s%c ",QRscratch.QRname,c); b=b+strlen(QRscratch.QRname)+3; } } ! if (b!=1) printf("\n\r"); close(file); return(0); *************** *** 110,116 **** struct quickroom QRscratch; b=1; ! printf("\n Forgotten public rooms:\n"); file=open("./quickroom",O_RDONLY); if (file<0) return(1); for (a=0; a<MAXROOMS; ++a) { c=read(file,&QRscratch,sizeof(struct quickroom)); --- 109,115 ---- struct quickroom QRscratch; b=1; ! printf("\n\r Forgotten public rooms:\n\r"); file=open("./quickroom",O_RDONLY); if (file<0) return(1); for (a=0; a<MAXROOMS; ++a) { c=read(file,&QRscratch,sizeof(struct quickroom)); *************** *** 126,138 **** ) { d=b+strlen(QRscratch.QRname)+3; if (d>=(USgiven->screenwidth)) { ! printf("\n"); b=1; } c=room_prompt(&QRscratch); printf("%s%c ",QRscratch.QRname,c); b=b+strlen(QRscratch.QRname)+3; } } ! if (b!=1) printf("\n"); close(file); return(0); } --- 125,137 ---- ) { d=b+strlen(QRscratch.QRname)+3; if (d>=(USgiven->screenwidth)) { ! printf("\n\r"); b=1; } c=room_prompt(&QRscratch); printf("%s%c ",QRscratch.QRname,c); b=b+strlen(QRscratch.QRname)+3; } } ! if (b!=1) printf("\n\r"); close(file); return(0); } *************** *** 142,157 **** char aaa[50]; long aa; struct usersupp tempUS; if (curr_rm<3) { ! printf("Can't edit this room.\n"); return(0); } file=open("quickroom",O_RDWR); if (file<0) interr(34); lseek(file,(long)(curr_rm*sizeof(struct quickroom)),0); a=read(file,&quickroom,sizeof(struct quickroom)); if (a<1) interr(35); ! printf("Room name is currently: %s\n",quickroom.QRname); printf("New name <return=same>? "); getline(aaa,19); if (aaa[0]!=0) strcpy(quickroom.QRname,aaa); --- 141,164 ---- char aaa[50]; long aa; struct usersupp tempUS; + #ifdef TWITDETECT + if (curr_rm<4) { + printf("Can't edit this room.\n\r"); + return(0); + } + #else if (curr_rm<3) { ! printf("Can't edit this room.\n\r"); return(0); } + #endif + file=open("quickroom",O_RDWR); if (file<0) interr(34); lseek(file,(long)(curr_rm*sizeof(struct quickroom)),0); a=read(file,&quickroom,sizeof(struct quickroom)); if (a<1) interr(35); ! printf("Room name is currently: %s\n\r",quickroom.QRname); printf("New name <return=same>? "); getline(aaa,19); if (aaa[0]!=0) strcpy(quickroom.QRname,aaa); *************** *** 163,178 **** printf(" room"); if ((quickroom.QRflags&QR_PASSWORDED)==QR_PASSWORDED) printf(", password: %s",quickroom.QRpasswd); ! printf(".\n"); ! if (quickroom.QRflags&QR_PREFONLY) printf("PREFERRED USERS ONLY.\n"); if (quickroom.QRflags&QR_DIRECTORY) { printf("Directory room"); if (quickroom.QRflags&QR_UPLOAD) printf(", uploading allowed"); if (quickroom.QRflags&QR_DOWNLOAD) printf(", downloading allowed"); if (quickroom.QRflags&QR_VISDIR) printf(", visible directory"); ! printf(".\nDirectory name: %s\n",quickroom.QRdirname); } if (quickroom.QRflags&QR_ANONONLY) ! printf("Anonymous-only room.\n"); quickroom.QRflags=(quickroom.QRflags|QR_PRIVATE|QR_PASSWORDED|QR_GUESSNAME); quickroom.QRflags=(quickroom.QRflags|QR_DIRECTORY|QR_UPLOAD|QR_DOWNLOAD); --- 170,185 ---- printf(" room"); if ((quickroom.QRflags&QR_PASSWORDED)==QR_PASSWORDED) printf(", password: %s",quickroom.QRpasswd); ! printf(".\n\r"); ! if (quickroom.QRflags&QR_PREFONLY) printf("PREFERRED USERS ONLY.\n\r"); if (quickroom.QRflags&QR_DIRECTORY) { printf("Directory room"); if (quickroom.QRflags&QR_UPLOAD) printf(", uploading allowed"); if (quickroom.QRflags&QR_DOWNLOAD) printf(", downloading allowed"); if (quickroom.QRflags&QR_VISDIR) printf(", visible directory"); ! printf(".\n\rDirectory name: %s\n\r",quickroom.QRdirname); } if (quickroom.QRflags&QR_ANONONLY) ! printf("Anonymous-only room.\n\r"); quickroom.QRflags=(quickroom.QRflags|QR_PRIVATE|QR_PASSWORDED|QR_GUESSNAME); quickroom.QRflags=(quickroom.QRflags|QR_DIRECTORY|QR_UPLOAD|QR_DOWNLOAD); *************** *** 182,188 **** do { b=inkey()-48; } while ((b<1)||(b>4)); ! printf("%d\n",b); if (b!=2) quickroom.QRflags=(quickroom.QRflags-QR_GUESSNAME); if (b!=3) quickroom.QRflags=(quickroom.QRflags-QR_PASSWORDED); if (b==1) quickroom.QRflags=(quickroom.QRflags-QR_PRIVATE); --- 189,195 ---- do { b=inkey()-48; } while ((b<1)||(b>4)); ! printf("%d\n\r",b); if (b!=2) quickroom.QRflags=(quickroom.QRflags-QR_GUESSNAME); if (b!=3) quickroom.QRflags=(quickroom.QRflags-QR_PASSWORDED); if (b==1) quickroom.QRflags=(quickroom.QRflags-QR_PRIVATE); *************** *** 215,221 **** do { a=inkey()-48; } while((a<1)||(a>3)); ! printf("%d\n",a); if ((a==1)||(a==3)) quickroom.QRflags=(quickroom.QRflags-QR_ANONONLY); if ((a==1)||(a==2)) quickroom.QRflags=(quickroom.QRflags-QR_ANON2); RANSU: file2=open("usersupp",O_RDONLY); /* (gee, thanks a lot!) */ --- 222,228 ---- do { a=inkey()-48; } while((a<1)||(a>3)); ! printf("%d\n\r",a); if ((a==1)||(a==3)) quickroom.QRflags=(quickroom.QRflags-QR_ANONONLY); if ((a==1)||(a==2)) quickroom.QRflags=(quickroom.QRflags-QR_ANON2); RANSU: file2=open("usersupp",O_RDONLY); /* (gee, thanks a lot!) */ *************** *** 224,233 **** a=read(file2,&tempUS,sizeof(struct usersupp)); } while((a>0)&&(quickroom.QRroomaide!=tempUS.eternal)); close(file2); ! if (a>0) printf("Room aide is currently: %s\nNew ", tempUS.fullname); } ! else printf("No room aide.\n"); printf("Room aide (RETURN to leave unchanged): "); getline(aaa,29); if (aaa[0]!=0) { --- 231,240 ---- a=read(file2,&tempUS,sizeof(struct usersupp)); } while((a>0)&&(quickroom.QRroomaide!=tempUS.eternal)); close(file2); ! if (a>0) printf("Room aide is currently: %s\n\rNew ", tempUS.fullname); } ! else printf("No room aide.\n\r"); printf("Room aide (RETURN to leave unchanged): "); getline(aaa,29); if (aaa[0]!=0) { *************** *** 236,245 **** read(file2,&tempUS,sizeof(struct usersupp)); close(file2); if (aa==(-1L)) { ! printf("No such user.\n"); goto RANSU; } quickroom.QRroomaide=tempUS.eternal; } ! printf("\n\nSave changes (y/n)? "); if (yesno()==0) { lseek(file,(long)(curr_rm*sizeof(struct quickroom)),0); b=read(file,&quickroom,sizeof(struct quickroom)); --- 243,252 ---- read(file2,&tempUS,sizeof(struct usersupp)); close(file2); if (aa==(-1L)) { ! printf("No such user.\n\r"); goto RANSU; } quickroom.QRroomaide=tempUS.eternal; } ! printf("\n\r\n\rSave changes (y/n)? "); if (yesno()==0) { lseek(file,(long)(curr_rm*sizeof(struct quickroom)),0); b=read(file,&quickroom,sizeof(struct quickroom)); *************** *** 287,293 **** --- 294,304 ---- sprintf(bbb,"files/%s/%s",quickroom.QRdirname,aaa); if (c==0) formout(bbb); if (c==1) { + #ifdef BSD + sprintf(aaa,"download %s",bbb); + #else sprintf(aaa,"wcsend %s",bbb); + #endif system(aaa); } if (c==2) { *************** *** 296,306 **** sprintf(aaa,"cat <%s",bbb); system(aaa); sttybbs(0); unlink("core"); /* just in case the core was dumped */ } } else ! printf("Not in this room.\n"); return(0); } --- 307,320 ---- sprintf(aaa,"cat <%s",bbb); system(aaa); sttybbs(0); + #ifdef BSD + signal(SIGQUIT,SIG_IGN); + #endif unlink("core"); /* just in case the core was dumped */ } } else ! printf("Not in this room.\n\r"); return(0); } *************** *** 309,319 **** if ((quickroom.QRflags&QR_DIRECTORY) &&(quickroom.QRflags&QR_VISDIR)) { sprintf(aaa,"./files/%s",quickroom.QRdirname); ! printf("Directory of %s!%s/%s\n",NODENAME,BBSDIR,&aaa[2]); directory(aaa); } else ! printf("Not in this room.\n"); return(0); } --- 323,333 ---- if ((quickroom.QRflags&QR_DIRECTORY) &&(quickroom.QRflags&QR_VISDIR)) { sprintf(aaa,"./files/%s",quickroom.QRdirname); ! printf("Directory of %s!%s/%s\n\r",NODENAME,BBSDIR,&aaa[2]); directory(aaa); } else ! printf("Not in this room.\n\r"); return(0); } *************** *** 323,329 **** long aa; struct usersupp USscratch; if ((quickroom.QRflags&QR_PRIVATE)==0) { ! printf("Not a private room.\n"); return(0); } printf("Name of user? "); --- 337,343 ---- long aa; struct usersupp USscratch; if ((quickroom.QRflags&QR_PRIVATE)==0) { ! printf("Not a private room.\n\r"); return(0); } printf("Name of user? "); *************** *** 339,345 **** USscratch.forget[curr_rm]=(-1); write(file,&USscratch,sizeof(struct usersupp)); } ! else printf("No such user.\n"); close(file); return(0); --- 353,359 ---- USscratch.forget[curr_rm]=(-1); write(file,&USscratch,sizeof(struct usersupp)); } ! else printf("No such user.\n\r"); close(file); return(0); *************** *** 351,357 **** long aa; struct usersupp USscratch; if ((quickroom.QRflags&QR_PRIVATE)==0) { ! printf("Not a private room.\n"); return(0); } printf("Name of user? "); --- 365,371 ---- long aa; struct usersupp USscratch; if ((quickroom.QRflags&QR_PRIVATE)==0) { ! printf("Not a private room.\n\r"); return(0); } printf("Name of user? "); *************** *** 365,371 **** USscratch.generation[curr_rm]=(-1); write(file,&USscratch,sizeof(struct usersupp)); } ! else printf("No such user.\n"); close(file); return(0); } --- 379,385 ---- USscratch.generation[curr_rm]=(-1); write(file,&USscratch,sizeof(struct usersupp)); } ! else printf("No such user.\n\r"); close(file); return(0); } *************** *** 374,380 **** int file; long aa; char aaa[100]; ! if (curr_rm<3) { printf("Can't kill this room.\n"); return(0); } printf("Are you sure you want to kill this room? "); if (yesno()==0) return(0); file=open("quickroom",O_RDWR); if (file<0) interr(42); --- 388,398 ---- int file; long aa; char aaa[100]; ! #ifdef TWITDETECT ! if (curr_rm<4) { printf("Can't kill this room.\n\r"); return(0); } ! #else ! if (curr_rm<3) { printf("Can't kill this room.\n\r"); return(0); } ! #endif printf("Are you sure you want to kill this room? "); if (yesno()==0) return(0); file=open("quickroom",O_RDWR); if (file<0) interr(42); *************** *** 392,402 **** } forget() { /* forget the current room */ if (curr_rm<3) { ! printf("Cannot forget this room.\n"); return(0); } ! IFAIDE { printf("Aides cannot forget rooms.\n"); return(0); } printf("Are you sure you want to forget this room? "); if (yesno()==0) return(0); readyerself(); --- 410,427 ---- } forget() { /* forget the current room */ + #ifdef TWITDETECT if (curr_rm<3) { ! printf("Cannot forget this room.\n\r"); return(0); } ! #else ! if (curr_rm<3) { ! printf("Cannot forget this room.\n\r"); ! return(0); ! } ! #endif ! IFAIDE { printf("Aides cannot forget rooms.\n\r"); return(0); } printf("Are you sure you want to forget this room? "); if (yesno()==0) return(0); readyerself(); *************** *** 415,421 **** struct quickroom QRscratch; if (usersupp.axlevel<3) { ! printf("You need higher access to create rooms.\n"); return(0); } --- 440,446 ---- struct quickroom QRscratch; if (usersupp.axlevel<3) { ! printf("You need higher access to create rooms.\n\r"); return(0); } *************** *** 432,438 **** && (!strucmp(QRscratch.QRname,aaa)) ) b=1; } close(file); if (b==1) { ! printf("'%s' already exists.\n",aaa); return(0); } bb=(-1L); file=open("quickroom",O_RDONLY); if (file<0) interr(64); --- 457,463 ---- && (!strucmp(QRscratch.QRname,aaa)) ) b=1; } close(file); if (b==1) { ! printf("'%s' already exists.\n\r",aaa); return(0); } bb=(-1L); file=open("quickroom",O_RDONLY); if (file<0) interr(64); *************** *** 444,470 **** } close(file); if (bb==(-1L)) { ! printf("No room space available.\n"); return(0); } IFNEXPERT formout("messages/roomaccess"); ! ACSEL: printf("<?>Help\n<1>Public room\n<2>Guess-name room\n"); ! printf("<3>Passworded room\n<4>Invitation-only room\n"); printf("Enter room type: "); ACSE2: b=inkey(); b=tolower(b); ! if (b=='?') { printf("?\n"); formout("messages/roomaccess"); goto ACSEL; } b=b-48; if ((b<1)||(b>4)) goto ACSE2; if (b==3) { ! printf("Enter a room password: "); ! getline(bbb,9); } ! printf("%d\n\042%s\042, a",b,aaa); ! if (b==1) printf(" public room."); ! if (b==2) printf(" guess-name room."); ! if (b==3) printf(" passworded room, password: %s",bbb); ! if (b==4) printf("n invitation-only room."); ! printf("\nInstall it? (y/n) : "); a=yesno(); if (a==0) return(0); curr_rm=(int)(bb/sizeof(struct quickroom)); --- 469,495 ---- } close(file); if (bb==(-1L)) { ! printf("No room space available.\n\r"); return(0); } IFNEXPERT formout("messages/roomaccess"); ! ACSEL: printf("<?>Help\n\r<1>Public room\n\r<2>Guess-name room\n\r"); ! printf("<3>Passworded room\n\r<4>Invitation-only room\n\r"); printf("Enter room type: "); ACSE2: b=inkey(); b=tolower(b); ! if (b=='?') { printf("?\n\r"); formout("messages/roomaccess"); goto ACSEL; } b=b-48; if ((b<1)||(b>4)) goto ACSE2; + printf("%d\n\r\042%s\042, a",b,aaa); + if (b==1) printf(" public room.\n\r"); + if (b==2) printf(" guess-name room.\n\r"); if (b==3) { ! printf(" pasworded room."); ! printf(" Enter a room password: "); ! getline(bbb,9); } ! if (b==4) printf("n invitation-only room.\n\r"); ! printf("Install it? (y/n) : "); a=yesno(); if (a==0) return(0); curr_rm=(int)(bb/sizeof(struct quickroom)); *************** *** 548,554 **** || (quickroom.QRgen==(temp.generation[curr_rm])) ) ! ) printf("%s\n",temp.fullname); close(file); return(0); } --- 573,579 ---- || (quickroom.QRgen==(temp.generation[curr_rm])) ) ! ) printf("%s\n\r",temp.fullname); close(file); return(0); } if (aaa[0]!=0) { *************** *** 236,245 **** read(file2,&tempUS,sizeof(struct usersupp)); close(file2); if (aa==(-1L)) { ! printf("No such user.\n"); goto RANSU; } quickroom.QRroomaide=tempUS.eternal; } ! printf("\Droutines.c 644 465 1770 26001 4472360470 6330 *** ORIG/routines.c Wed Aug 9 15:44:42 1989 --- routines.c Tue Aug 15 14:59:02 1989 *************** *** 2,8 **** #include <fcntl.h> #include <stdio.h> ! #include <ctype.h> #include <time.h> #include <sys/types.h> #include <sys/stat.h> --- 2,8 ---- #include <fcntl.h> #include <stdio.h> ! #include "ctype.h" #include <time.h> #include <sys/types.h> #include <sys/stat.h> *************** *** 10,16 **** --- 10,21 ---- #include <signal.h> #include <pwd.h> #include <setjmp.h> + #ifdef BSD + #include <sys/dir.h> + #include <sgtty.h> + #else #include <termio.h> + #endif #define ROUTINES_C *************** *** 53,60 **** int a; while (1) { a=inkey(); a=tolower(a); ! if (a=='y') { printf("Yes\n"); return(1); } ! if (a=='n') { printf("No\n"); return(0); } } } --- 58,65 ---- int a; while (1) { a=inkey(); a=tolower(a); ! if (a=='y') { printf("Yes\n\r"); return(1); } ! if (a=='n') { printf("No\n\r"); return(0); } } } *************** *** 61,77 **** edituser(structure) struct usersupp *structure; { int a,b; ! do { printf("Current access level: %d [%s]\n",structure->axlevel, axdefs[structure->axlevel]); printf("New level (? to list them): "); a=inkey(); if (a=='?') { ! printf("list\n"); ! for (b=0; b<7; ++b) printf("%d %s\n",b,axdefs[b]); } a=a-48; } while((a<0)||(a>6)); ! printf("%d\n",a); structure->axlevel=a; return(0); } --- 66,82 ---- edituser(structure) struct usersupp *structure; { int a,b; ! do { printf("Current access level: %d [%s]\n\r",structure->axlevel, axdefs[structure->axlevel]); printf("New level (? to list them): "); a=inkey(); if (a=='?') { ! printf("list\n\r"); ! for (b=0; b<7; ++b) printf("%d %s\n\r",b,axdefs[b]); } a=a-48; } while((a<0)||(a>6)); ! printf("%d\n\r",a); structure->axlevel=a; return(0); } *************** *** 83,89 **** printf("Enter your screen width: "); getline(aaa,3); a=atoi(aaa); if ((a<20)||(a>132)) ! printf("...must be between 20 and 132.\n"); } while((a<20)||(a>132)); structure->screenwidth=a; printf("Are you an experienced Citadel user? "); --- 88,94 ---- printf("Enter your screen width: "); getline(aaa,3); a=atoi(aaa); if ((a<20)||(a>132)) ! printf("...must be between 20 and 132.\n\r"); } while((a<20)||(a>132)); structure->screenwidth=a; printf("Are you an experienced Citadel user? "); *************** *** 103,109 **** getfield(file,string) /* Break out next null-terminated string */ int file; char string[]; { ! int a,b,c; strcpy(string,""); a=0; do { --- 108,115 ---- getfield(file,string) /* Break out next null-terminated string */ int file; char string[]; { ! int a,b; ! unsigned char c; strcpy(string,""); a=0; do { *************** *** 116,122 **** getstring(file,string) /* get a line of text from a file */ int file; char string[]; { /* ignores lines beginning with # */ ! int a,b,c; do { strcpy(string,""); a=0; --- 122,129 ---- getstring(file,string) /* get a line of text from a file */ int file; char string[]; { /* ignores lines beginning with # */ ! int a,b; ! unsigned char c; do { strcpy(string,""); a=0; *************** *** 145,159 **** interr(errnum) /* display internal error as defined in errmsgs */ int errnum; { ! printf("INTERNAL ERROR %d\n",errnum); ! printf("(Press any key to continue)\n"); inkey(); logoff(errnum); } directory(path) char *path; { struct directx { int d_ino; char d_name[15]; --- 152,205 ---- interr(errnum) /* display internal error as defined in errmsgs */ int errnum; { ! printf("INTERNAL ERROR %d\n\r",errnum); ! printf("(Press any key to continue)\n\r"); inkey(); logoff(errnum); } + #ifdef BSD directory(path) char *path; { + struct direct *dp; + struct stat statbuf; + struct filecomment filecomment; + DIR *dirp; + char fname[20],tname[50]; + int file,a; + long aa; + if ((dirp = opendir(path)) == NULL) return(1); + printf(" Filename Size\n"); + printf("-------------- --------\n"); + sprintf(tname,"%s/filedir",path); + file=open(tname,O_RDONLY); + while ((dp = readdir(dirp)) != NULL) { + if (*dp->d_name == '.') continue; + strcpy(fname,dp->d_name); + if (strcmp("filedir",fname)==0) continue; + sprintf(tname,"%s/%s",path,fname); + stat(tname,&statbuf); aa=(long)statbuf.st_size; + if (file >= 0) { + lseek(file,0L,0); + do { + a=read(file,&filecomment,sizeof(struct filecomment)); + } while ((a>0)&&(strucmp(filecomment.FCname,fname))); + } else a=0; + + if (a<1) + filecomment.FCcomment[0]=0; + printf("%-14s %8ld %s\n",fname,aa,filecomment.FCcomment); + } + close(file); + closedir(dirp); + return(0); + } + #else + directory(path) + char *path; + { + struct directx { int d_ino; char d_name[15]; *************** *** 164,170 **** FILE *fp; if ((fd=open(path,0))==(-1)) return(1); dlink.d_name[14]=0; ! printf("-----------------------\n"); read(fd,&dlink,16); read(fd,&dlink,16); while ((nread=read(fd,&dlink,16)) > 0) { --- 210,216 ---- FILE *fp; if ((fd=open(path,0))==(-1)) return(1); dlink.d_name[14]=0; ! printf("-----------------------\n\r"); read(fd,&dlink,16); read(fd,&dlink,16); while ((nread=read(fd,&dlink,16)) > 0) { *************** *** 184,195 **** } while(!feof(fp)); FND: fclose(fp); } ! printf("%-14s %8ld %s\n",dlink.d_name,aa,&comment[strlen(dlink.d_name)+1]); } } close(fd); return(0); } fpgetfield(fp,string) /* level-2 break out next null-terminated string */ FILE *fp; --- 230,242 ---- } while(!feof(fp)); FND: fclose(fp); } ! printf("%-14s %8ld %s\n\r",dlink.d_name,aa,&comment[strlen(dlink.d_name)+1]); } } close(fd); return(0); } + #endif fpgetfield(fp,string) /* level-2 break out next null-terminated string */ FILE *fp; *************** *** 219,225 **** fp=fopen(flname,"rb"); if (fp==NULL) { ! printf("No file %s.\n",flname); return(1); } strcpy(aaa,""); old=255; --- 266,272 ---- fp=fopen(flname,"rb"); if (fp==NULL) { ! printf("\n\rNo file %s.\n\r",flname); return(1); } strcpy(aaa,""); old=255; *************** *** 230,255 **** if ( ((a==13)||(a==10)) && (old!=13) && (old!=10) ) a=32; if ( ((old==13)||(old==10)) && (isspace(real)) ) { ! printf("\n"); c=1; } if (a>126) goto FMTA; if (a>32) { if ( ((strlen(aaa)+c)>(width-5)) && (strlen(aaa)>(width-5)) ) ! { printf("\n%s",aaa); c=strlen(aaa); aaa[0]=0; } b=strlen(aaa); aaa[b]=a; aaa[b+1]=0; } if (a==32) { if ((strlen(aaa)+c)>(width-5)) { ! printf("\n"); c=1; } printf("%s ",aaa); ++c; c=c+strlen(aaa); strcpy(aaa,""); goto FMTA; } if ((a==13)||(a==10)) { ! printf("%s\n",aaa); c=1; strcpy(aaa,""); goto FMTA; } goto FMTA; FMTEND: fclose(fp); ! printf("\n"); return(0); } --- 277,302 ---- if ( ((a==13)||(a==10)) && (old!=13) && (old!=10) ) a=32; if ( ((old==13)||(old==10)) && (isspace(real)) ) { ! printf("\n\r"); c=1; } if (a>126) goto FMTA; if (a>32) { if ( ((strlen(aaa)+c)>(width-5)) && (strlen(aaa)>(width-5)) ) ! { printf("\n\r%s",aaa); c=strlen(aaa); aaa[0]=0; } b=strlen(aaa); aaa[b]=a; aaa[b+1]=0; } if (a==32) { if ((strlen(aaa)+c)>(width-5)) { ! printf("\n\r"); c=1; } printf("%s ",aaa); ++c; c=c+strlen(aaa); strcpy(aaa,""); goto FMTA; } if ((a==13)||(a==10)) { ! printf("%s\n\r",aaa); c=1; strcpy(aaa,""); goto FMTA; } goto FMTA; FMTEND: fclose(fp); ! printf("\n\r"); return(0); } *************** *** 293,300 **** --- 340,370 ---- return(0); } + + #ifdef BSD sttybbs(sflag) int sflag;{ + struct sgttyb live; + struct tchars special; + + ioctl(0,TIOCGETP,&live); + live.sg_flags= CBREAK | CRMOD ; + if (sflag==1) { + printf("\n\r"); + ioctl(0,TIOCFLUSH); + } + ioctl(0,TIOCSETP,&live); + /* + ioctl(0,TIOCGETC,&special); + special.t_intrc= -1; + special.t_quitc= -1; + ioctl(0,TIOCSETC,&special); + */ + return(0); + } + #else + sttybbs(sflag) + int sflag;{ struct termio live; ioctl(0,TCGETA,&live); live.c_iflag=ISTRIP|IXON|IXANY; *************** *** 313,318 **** --- 383,389 ---- ioctl(0,TCSETA,&live); return(0); } + #endif long finduser(file,name) /* binary search for a user */ int file; *************** *** 345,354 **** int file,a,b; time(&record->CLtime); file=open("calllog.pos",O_RDWR); ! read(file,&a,2); b=a; ++a; if (a==CALLLOG) a=0; lseek(file,0L,0); ! write(file,&a,2); close(file); file=open("calllog",O_RDWR); --- 416,425 ---- int file,a,b; time(&record->CLtime); file=open("calllog.pos",O_RDWR); ! read(file,&a,sizeof(a)); b=a; ++a; if (a==CALLLOG) a=0; lseek(file,0L,0); ! write(file,&a,sizeof(a)); close(file); file=open("calllog",O_RDWR); *************** *** 358,366 **** --- 429,454 ---- return(0); } + + #ifdef BSD log_carr() /* use rec_log to record the connection */ { struct calllog temp; + struct sgttyb stty; + strcpy(temp.CLfullname,ttyname(0)); + temp.CLflags=CL_INOTHER; + ioctl(0,TIOCGETP,&stty); + if ((stty.sg_ispeed&B300)==B300) temp.CLflags=CL_IN300; + if ((stty.sg_ispeed&B1200)==B1200) temp.CLflags=CL_IN1200; + if ((stty.sg_ispeed&B2400)==B2400) temp.CLflags=CL_IN2400; + if ((stty.sg_ispeed&B9600)==B9600) temp.CLflags=CL_INOTHER; + rec_log(&temp); + return(0); + } + #else + log_carr() /* use rec_log to record the connection */ + { + struct calllog temp; struct termio stty; strcpy(temp.CLfullname,ttyname(0)); temp.CLflags=CL_INOTHER; *************** *** 372,377 **** --- 460,466 ---- rec_log(&temp); return(0); } + #endif alias(name) /* process alias and routing info for mail */ char name[]; { *************** *** 399,411 **** if (strucmp(name,aaa)) goto GNA; fclose(fp); strcpy(name,bbb); ! printf("*** Mail is being forwarded to %s\n",name); DETYPE: /* determine local or remote type, see citadel.h */ for (a=0; a<strlen(name); ++a) if (name[a]=='!') return(M_UUCP); b=0; for (a=0; a<strlen(name); ++a) if (name[a]=='@') ++b; if (b>1) { ! printf("Too many @'s in address\n"); return(M_ERROR); } if (b==1) { --- 488,500 ---- if (strucmp(name,aaa)) goto GNA; fclose(fp); strcpy(name,bbb); ! printf("*** Mail is being forwarded to %s\n\r",name); DETYPE: /* determine local or remote type, see citadel.h */ for (a=0; a<strlen(name); ++a) if (name[a]=='!') return(M_UUCP); b=0; for (a=0; a<strlen(name); ++a) if (name[a]=='@') ++b; if (b>1) { ! printf("Too many @'s in address\n\r"); return(M_ERROR); } if (b==1) { *************** *** 433,439 **** sprintf(name,"%s @%s",aaa,bbb); return(M_BINARY); } ! printf("Error in network/mail.sysinfo file\n"); return(M_ERROR); } return(M_LOCAL); --- 522,528 ---- sprintf(name,"%s @%s",aaa,bbb); return(M_BINARY); } ! printf("Error in network/mail.sysinfo file\n\r"); return(M_ERROR); } return(M_LOCAL); (" Filename Size\n"); + printf("-------------- --------\n"); + sprintf(tname,"%s/filedir",path); + file=open(tname,O_RDONLY); + while ((dp = readdir(dirp)) != NULL) { + if (*dp->d_name == '.') continue; + strcpy(fname,dp->d_name); + if (strcmp("filedir",fname)==0) continue; + sprintf(tname,"%s/%s",path,fname); + stat(tname,&statbuf); aa=(long)statbuf.st_size; + if (file >= 0) { + lseek(file,0L,0); + do { + a=read(file,&filecomment,sizeof(struct filecomment)); + } while ((Droutines2.c 644 465 1770 23127 4472360471 6421 *** ORIG/routines2.c Wed Aug 9 15:45:21 1989 --- routines2.c Wed Aug 16 13:28:02 1989 *************** *** 4,10 **** #include <fcntl.h> #include <stdio.h> ! #include <ctype.h> #include <time.h> #include <sys/types.h> #include <sys/stat.h> --- 4,10 ---- #include <fcntl.h> #include <stdio.h> ! #include "ctype.h" #include <time.h> #include <sys/types.h> #include <sys/stat.h> *************** *** 12,18 **** #include <signal.h> #include <pwd.h> #include <setjmp.h> - #include <termio.h> #include "citadel.h" long atol(); --- 12,17 ---- *************** *** 82,88 **** b=strlen(regis.RGphone); regis.RGphone[b]=pbuf[a]; regis.RGphone[b+1]=0; } ! printf("\n"); f=fork(); /* register in the background */ if (f<0) { fprintf(stderr,"citadel: cannot fork-registration not filed\n"); --- 81,87 ---- b=strlen(regis.RGphone); regis.RGphone[b]=pbuf[a]; regis.RGphone[b+1]=0; } ! printf("\n\r"); f=fork(); /* register in the background */ if (f<0) { fprintf(stderr,"citadel: cannot fork-registration not filed\n"); *************** *** 132,137 **** --- 131,139 ---- if (lim<0) { lim=(0-lim); flag=1; } strcpy(string,""); GLA: a=inkey(); a=(a&127); + #ifdef BSD + if (a==10) a=13; + #endif if ((a==8)&&(strlen(string)==0)) goto GLA; if ((a!=13)&&(a!=8)&&(strlen(string)==lim)) goto GLA; if ((a==8)&&(string[0]!=0)) { *************** *** 152,158 **** int file,a,b; char aaa[100]; if (curr_rm==1) { ! printf("Can't delete mail.\n"); return(1); } sprintf(aaa,"./rooms/fullrm%d",curr_rm); file=eopen(aaa,O_RDWR); --- 154,160 ---- int file,a,b; char aaa[100]; if (curr_rm==1) { ! printf("Can't delete mail.\n\r"); return(1); } sprintf(aaa,"./rooms/fullrm%d",curr_rm); file=eopen(aaa,O_RDWR); *************** *** 178,236 **** b=write(file,&quickroom,sizeof(struct quickroom)); if (b<1) interr(83); close(file); ! printf("Message deleted.\n"); return(0); } upload(c) /* c = upload mode */ ! int c; { char buf[151],aaa[100],bbb[60],ccc[60]; ! int a,b,file; ! long cc; FILE *fp; if ( ((quickroom.QRflags&QR_DIRECTORY)==0) || ((quickroom.QRflags&QR_UPLOAD)==0) ) { ! printf("Not in this room.\n"); return(1); } printf("Enter filename: "); getline(aaa,15); ! for (a=0; a<strlen(aaa); ++a) aaa[a]=tolower(aaa[a]); sprintf(bbb,"./files/%s/%s",quickroom.QRdirname,aaa); ! file=open(bbb,O_RDONLY); ! if (file>(-1)) { ! printf("There already is a file by that name.\n"); ! close(file); return(1); } ! printf("Enter a short description of the file:\n: "); ! getline(buf,150); ! sprintf(ccc,"./files/%s/filedir",quickroom.QRdirname); ! fp=fopen(ccc,"r+"); ! if (fp==NULL) fp=fopen(ccc,"w"); ! fseek(fp,0L,2); ! fprintf(fp,"%s %s\n",aaa,buf); ! fclose(fp); ! file=creat(bbb,0666); ! if (file<0) { ! printf("Can't create that file?\n"); ! return(1); } ! if (c>0) { ! close(file); ! goto ETUX; } ! a=0; ! printf("Now recieving. ESC to end.\n"); ! do { ! b=inkey(); ! if (b==13) { b=10; printf("\r"); } ! if (b!=27) { printf("%c",b); write(file,&b,1); } } while(b!=27); close(file); ! ETPRF: printf("File recieved.\n"); time(&cc); /* put together an upload notice */ ! fp=fopen(temp,"wb"); if (fp==NULL) interr(22); putc(255,fp); putc(MES_NORMAL,fp); putc(0,fp); --- 180,276 ---- b=write(file,&quickroom,sizeof(struct quickroom)); if (b<1) interr(83); close(file); ! printf("Message deleted.\n\r"); return(0); } upload(c) /* c = upload mode */ ! int c; ! { ! struct stat statbuf; ! struct filecomment filecomment; char buf[151],aaa[100],bbb[60],ccc[60]; ! unsigned char b; ! int file,a; ! long aa,cc; FILE *fp; if ( ((quickroom.QRflags&QR_DIRECTORY)==0) || ((quickroom.QRflags&QR_UPLOAD)==0) ) { ! printf("Not in this room.\n\r"); return(1); } printf("Enter filename: "); getline(aaa,15); ! for (a=0; a<strlen(aaa); ++a) { ! if (isupper(aaa[a])) aaa[a]=tolower(aaa[a]); ! if (aaa[a]<48) aaa[a]='_'; ! if (aaa[a]>122) aaa[a]='_'; ! if ((aaa[a]>57) && (aaa[a]<65)) aaa[a]='_'; ! } sprintf(bbb,"./files/%s/%s",quickroom.QRdirname,aaa); ! ! if (stat(bbb,&statbuf) == 0) { ! printf("There already is a file by that name.\n\r"); ! return(1); ! } ! if (c==0) { ! file=creat(bbb,0666); ! if (file<0) { ! printf("Can't create that file?\n\r"); ! return(1); } ! a=0; ! printf("Now recieving. ESC to end.\n\r"); ! do { ! b=inkey(); ! if (b==13) { b=10; printf("\r"); } ! if (b!=27) { printf("%c",b); write(file,&b,sizeof(b)); } } while(b!=27); + close(file); + } + if (c==1) { + #ifdef BSD + sprintf(ccc,"upload %s",bbb); + #else + sprintf(ccc,"wcreceive %s",bbb); + #endif + system(ccc); + } + + stat(bbb,&statbuf); + aa=(long)statbuf.st_size; + if (aa==0) { + printf("\n\rFile was not recieved.\n\r"); + sprintf(ccc,"rm %s",bbb); + system(ccc); + return(1); + } + printf("\n\rFile recieved.\n\r"); + + REASK: printf("Enter a short description of the file:\n\r: "); + getline(buf,150); + if (strlen(buf) < 9) goto REASK; + + bzero(filecomment.FCname,sizeof(filecomment.FCname)); + bzero(filecomment.FCcomment,sizeof(filecomment.FCcomment)); + strcpy(filecomment.FCname,aaa); + strcpy(filecomment.FCcomment,buf); + + sprintf(ccc,"./files/%s/filedir",quickroom.QRdirname); + file=open(ccc,O_RDWR); + if (file<0) + file=creat(ccc,0644); + lseek(file,0L,2); + write(file,&filecomment,sizeof(struct filecomment)); close(file); ! time(&cc); /* put together an upload notice */ ! fp=fopen(temp,"wb"); ! if (fp==NULL) ! interr(22); putc(255,fp); putc(MES_NORMAL,fp); putc(0,fp); *************** *** 244,255 **** fclose(fp); save_message(temp,buf,0,M_LOCAL); return(0); - - ETUX: if (c==1) { - sprintf(ccc,"wcreceive %s",bbb); - system(ccc); - } - goto ETPRF; } move_message(pos) --- 284,289 ---- *************** *** 309,315 **** read(file,&MMtemp,sizeof(struct msgmain)); close(file); if ((MMtemp.MMflags&MM_VALID)==0) { ! printf("There are no unvalidated users.\n"); return(0); } do { --- 343,349 ---- read(file,&MMtemp,sizeof(struct msgmain)); close(file); if ((MMtemp.MMflags&MM_VALID)==0) { ! printf("There are no unvalidated users.\n\r"); return(0); } do { *************** *** 325,347 **** file=eopen("usersupp",O_RDWR); while(read(file,&UStemp,sizeof(struct usersupp))>0) { if (UStemp.axlevel==1) { ! printf("\n\n\nUser #%-5ld %s ", UStemp.eternal,UStemp.fullname); ! if (usersupp.screenwidth<=40) printf("\n"); pwcrypt(UStemp.password,PWCRYPT); ! printf("PW: %s\n",UStemp.password); dis_regis(&UStemp); printf("Access level (? for list): "); do { a=inkey(); if (a=='?') { ! printf("list\n"); for (b=0; b<7; ++b) ! printf("%d %s\n",b,axdefs[b]); } a=a-48; } while((a<0)||(a>6)); ! printf("%d\n",a); UStemp.axlevel=a; pwcrypt(UStemp.password,PWCRYPT); lseek(file,(0L-sizeof(struct usersupp)),1); --- 359,381 ---- file=eopen("usersupp",O_RDWR); while(read(file,&UStemp,sizeof(struct usersupp))>0) { if (UStemp.axlevel==1) { ! printf("\n\r\n\r\n\rUser #%-5ld %s ", UStemp.eternal,UStemp.fullname); ! if (usersupp.screenwidth<=40) printf("\n\r"); pwcrypt(UStemp.password,PWCRYPT); ! printf("PW: %s\n\r",UStemp.password); dis_regis(&UStemp); printf("Access level (? for list): "); do { a=inkey(); if (a=='?') { ! printf("list\n\r"); for (b=0; b<7; ++b) ! printf("%d %s\n\r",b,axdefs[b]); } a=a-48; } while((a<0)||(a>6)); ! printf("%d\n\r",a); UStemp.axlevel=a; pwcrypt(UStemp.password,PWCRYPT); lseek(file,(0L-sizeof(struct usersupp)),1); *************** *** 349,355 **** } } close(file); ! printf("\n*** End of registration.\n"); return(0); } --- 383,389 ---- } } close(file); ! printf("\n\r*** End of registration.\n\r"); return(0); } *************** *** 359,365 **** int a,b,file; char pbuf[20]; if (!((userdata->flags)&US_REGIS)) { ! printf("No registration online.\n"); return(1); } file=open("registration",O_RDONLY); --- 393,399 ---- int a,b,file; char pbuf[20]; if (!((userdata->flags)&US_REGIS)) { ! printf("No registration online.\n\r"); return(1); } file=open("registration",O_RDONLY); *************** *** 366,374 **** if (file<0) return(2); while(read(file,®is,sizeof(struct registration))>0) { if (userdata->eternal==regis.RGeternal) { ! printf("%-29s\n",regis.RGname); ! printf("%-29s\n",regis.RGaddr); ! printf("%-14s %2s %6s\n", regis.RGcity,regis.RGstate,regis.RGzip); strcpy(pbuf,regis.RGphone); regis.RGphone[0]=0; --- 400,408 ---- if (file<0) return(2); while(read(file,®is,sizeof(struct registration))>0) { if (userdata->eternal==regis.RGeternal) { ! printf("%-29s\n\r",regis.RGname); ! printf("%-29s\n\r",regis.RGaddr); ! printf("%-14s %2s %6s\n\r", regis.RGcity,regis.RGstate,regis.RGzip); strcpy(pbuf,regis.RGphone); regis.RGphone[0]=0; *************** *** 385,391 **** strcat(regis.RGphone,pbuf); } ! printf("(%c%c%c) %c%c%c-%c%c%c%c\n", regis.RGphone[0],regis.RGphone[1], regis.RGphone[2],regis.RGphone[3], regis.RGphone[4],regis.RGphone[5], --- 419,425 ---- strcat(regis.RGphone,pbuf); } ! printf("(%c%c%c) %c%c%c-%c%c%c%c\n\r", regis.RGphone[0],regis.RGphone[1], regis.RGphone[2],regis.RGphone[3], regis.RGphone[4],regis.RGphone[5], { ! printf("\n"); c=1; } printf("%s ",aaa); ++c; c=c+strlen(aaa); strcpy(aaa,""); goto FMTA; } if ((a==13)||(a==10)) { ! printf("%s\n",aaa); c=1; strcpy(aaa,""); goto FMTA; } goto FMTA; FMTEND: fclose(fp); ! printf("\n"); return(0); } --- 277,302 ---- if ( ((a==13)||(a==10)) && (old!=13) && (old!=10) ) a=32; if ( ((old==13)||(old==10)) && (isspac b=inkey(); ! if (b==13) { b=10; printf("\r"); } ! if (b!=27) { printf("%c",b); write(file,&b,1); } } while(b!=27); close(file); ! ETPRF: printf("File recieved.\n"); time(&cc); /* put together an upload notice */ ! fp=fopen(temp,"wb"); if (fp==NULL) interr(22); putc(255,fp); putc(MES_NORMAL,fp); putc(0,fp); --- 180,276 ---- b=write(file,&quickroom,sizeof(struct quickroom)); if (b<1) interr(83); close(file); ! printf("Message deleted.\n\r"); return(0); } upload(c) /* c = upload mode */ ! int c; ! { ! struct stat statbuf; ! struct filecomment filecomment; char buf[151],aaa[100],bbb[60],ccc[60]; ! unsigned char b; ! int file,a; ! long aa,cc; FILE *fp; if ( ((quickroom.QRflags&QR_DIRECTORY)==0) || ((quickroom.QRflags&QR_UPLOAD)==0) ) { ! printf("Not in this room.\n\r"); return(1); } printf("Enter filename: "); getline(aaa,15); ! for (a=0; a<strlen(aaa); ++a) { ! if (isupper(aaa[a])) aaa[a]=tolower(aaa[a]); ! if (aaa[a]<48) aaa[a]='_'; ! if (aaa[a]>122) aaa[a]='_'; ! if ((aaa[a]>57) && (aaa[a]<65)) aaa[a]='_'; ! } sprintf(bbb,"./files/%s/%s",quickroom.QRdirname,aaa); ! ! if (stat(bbb,&statbuf) == 0) { ! printf("There already is a file by that name.\n\r"); ! return(1); ! } ! if (c==0) { ! file=creat(bbb,0666); ! if (file<0) { ! printf("Can't create that file?\n\r"); ! return(1); } ! a=0; ! printf("Now recieving. ESC to end.\n\r"); ! do { ! b=inkey(); ! if (b==13) { b=10; printf("\r"); } ! if (b!=27) { printf("%c",b); write(file,&b,sizeof(b)); } } while(b!=27); + close(file); + } + if (c==1) { + #ifdef BSD + sprintf(ccc,"upload %s",bbb); + #else + sprintf(ccc,"wcreceive %s",bbb); + #endif + system(ccc); + } + + stat(bbb,&statbuf); + aa=(long)statbuf.st_size; + if (aa==0) { + printf("\n\rFile was not recieved.\n\r"); + sprintf(ccc,"rm %s",bbb); + system(ccc); + return(1); + } + printf("\n\rFile recieved.\n\r"); + + REASK: printf("Enter a short description of the file:\n\r: "); + getline(buf,150); + if (strlen(buf) < 9) goto REASK; + + bzero(filecomment.FCname,sizeof(filecomment.FCname)); + bzero(filecomment.FCcomment,sizeof(filecomment.FCcomment)); + strcpy(filecomment.FCname,aaa); + strcpy(filecomment.FCcomment,buf); + + sprintf(ccc,"./files/%s/filedir",quickroom.QRdirname); + file=open(ccc,O_RDWR); + if (file<0) + file=creat(ccc,0644); + lseek(file,0L,2); + write(file,&filecomment,sizeof(struct filecomment)); close(file); ! time(&cc); /* put together an upload notice */ ! fp=fopen(temp,"wb"); ! if (fp==NULL) ! interr(22); putc(255,fp); putc(MES_NORMAL,fp); putc(0,fp); *************** *** 244,255 **** fclose(fp); save_message(temp,buf,0,M_LOCAL); return(0); - - ETUX: if (c==1) { - sprintf(ccc,"wcreceive %s",bbb); - system(ccc); - } - goto ETPRF; } move_message(pos) --- 284,289 ---- *************** *** 309,315 **** read(file,&MMtemp,sizeof(struct msgmain)); close(file); if ((MMtemp.MMflags&MM_VALID)==0) { ! printf("There are no unvalidated users.\n"); return(0); } do { --- 343,349 ---- read(file,&MMtemp,sizeof(struct msgmain)); close(file); if ((MMtemp.MMflags&MM_VALID)==0) { ! printf("There are no unvalidated users.\n\r"); return(0); } do { *************** *** 325,347 **** file=eopen("usersupp",O_RDWR); while(read(file,&UStemp,sizeof(struct usersupp))>0) { if (UStemp.axlevel==1) { ! printf("\n\n\nUser #%-5ld %s ", UStemp.eternal,UStemp.fullname); ! if (usersupp.screenwidth<=40) printf("\n"); pwcrypt(UStemp.password,PWCRYPT); ! printf("PW: %s\n",UStemp.password); dis_regis(&UStemp); printf("Access level (? for list): "); do { a=inkey(); if (a=='?') { ! printf("list\n"); for (b=0; b<7; ++b) ! printf("%d %s\n",b,axdefs[b]); } a=a-48; } while((a<0)||(a>6)); ! printf("%d\n",a); UStemp.axlevel=a; pwcrypt(UStemp.password,PWCRYPT); lseek(file,(0L-sizeof(struct usersupp)),1); --- 359,381 ---- file=eopen("usersupp",O_RDWR); while(read(file,&UStemp,sizeof(struct usersupp))>0) { if (UStemp.axlevel==1) { ! printf("\n\r\n\r\n\rUser #%-5ld %s ", UStemp.eternal,UStemp.fullname); ! if (usersupp.screenwidth<=40) printf("\n\r"); pwcrypt(UStemp.password,PWCRYPT); ! printf("PW: %s\n\r",UStemp.password); dis_regis(&UStemp); printf("Access level (? for list): "); do { a=inkey(); if (a=='?') { ! printf("list\n\r"); for (b=0; b<7; ++b) ! printf("%d %s\n\r",b,axdefs[b]); } a=a-48; } while((a<0)||(a>6)); ! printf("%d\n\r",a); UStemp.axlevel=a; pwcrypt(UStemp.password,PWCRYPT); lseek(file,(0L-sizeof(struct usersupp)),1); *************** *** 349,355 **** } } close(file); ! printf("\n*** End of registration.\n"); return(0); } --- 383,389 ---- } } close(file); ! printf("\n\r*** End of registration.\n\r"); return(0); } *************** *** 359,365 **** int a,b,file; char pbuf[20]; if (!((userdata->flags)&US_REGIS)) { ! printf("No registration online.\n"); return(1); } file=open("registration",O_RDONLY); --- 393,399 ---- int a,b,file; char pbuf[20]; if (!((userdata->flags)&US_REGIS)) { ! printf("No registration online.\n\r"); return(1); } file=open("registration",O_RDONLY); *************** *** 366,374 **** if (file<0) return(2); while(read(file,®is,sizeof(struct registration))>0) { if (userdata->eternal==regis.RGeternal) { ! printf("%-29s\n",regis.RGname); ! printf("%-29s\n",regis.RGaddr); ! printf("%-14s %2s %6s\n", regis.RGcity,regis.RGstate,regis.RGzip); strcpy(pbuf,regis.RGphone); regis.RGphone[0]=0; --- 400,408 ---- if (file<0) return(2); while(read(file,®is,sizeof(struct registration))>0) { if (userdata->eternal==regis.RGeternal) { ! printf("%-29s\n\r",regis.RGname); ! printf("%-29s\n\r",regis.RGaddr); ! printf("%-14s %2s %6s\n\r", regis.RGcity,regis.RGstate,regis.RGzip); strcpy(pbuf,regis.RGphone); regis.RGphone[0]=0; *************** *** 385,391 **** strcat(regis.RGphone,pbuf); } ! printf("(%c%c%c) %c%c%c-%c%c%c%c\n", regis.RGphone[0],regis.RGphone[1], regis.RGphone[2],regis.RGphone[3], regis.RGphone[4],regis.RGphone[5], --- 419,425 ---- strcat(regis.RGphone,pbuf); } ! printf("(%c%c%c) %c%c%c-%c%c%c%c\n\r", regis.RGphone[0],regis.RGphone[1], regis.RGphone[2],regis.RGphone[3], regis.RGphone[4],regis.RGphone[5], { ! printf("\n"); c=1; } printf("%s ",aaa); ++c; c=c+strlen(aaa); strcpy(aaa,""); goto FMTA; } if ((a==13)||(a==10)) { ! printf("%s\n",aaa); c=1; strcpy(aaa,""); goto FMTA; } goto FMTA; FMTEND: fclose(fp); ! printf("\n"); return(0); } --- 277,302 ---- if ( ((a==13)||(a==10)) && (old!=13) && (old!=10) ) a=32; if ( ((old==13)||(old==10)) && (isspac SHAR_EOF fi echo shar: "done with directory 'source'" cd .. exit 0 # End of shell archive -- Some do, some don't. | eric@sactoh0.SAC.CA.US Some will, some won't. | ames!pacbell!sactoh0!eric I might! | ucbvax!csusac!sactoh0!eric | ( A Home For Unwanted 3B's )