purdon@athena.mit.edu (James R. Purdon III) (12/21/90)
The slugnet program is a multiple-user, interactive conferencing facility. It currently runs under a variety of System V-based and BSD-based operating systems (although certain functions may not be possible under some of these operating systems). Cut here------------------------------------------------------------------- #!/bin/sh # to extract, remove the header and type "sh filename" if `test ! -s ./slugnet.n` then echo "writing ./slugnet.n" cat > ./slugnet.n << '\End\Of\Shar\' PROC,SLUGINS*I"SLUGINS: SLUGNET INSTALLATION PROCEDURE", SVRUN"SERVER'S USER NUMBER "=(*F,*S7(ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789)), MXUSR"MAXIMUM NUMBER OF USERS "=(*N=64,*S3(0123456789)), INACT"INACTIVE USER TIME LIMIT"=(*N=2,*S1(123456789)), ORGNM"ORGANIZATION NAME "=(*A). HELP SLUGINS IS THE INSTALLATION PROCEDURE FOR SLUGNET. FOUR PARAMETERS MAY BE SPECIFIED, SVRUN, MXUSR, INACT, AND ORGNM. SVRUN AND ORGNM ARE REQUIRED. ON INSTALLATION, SLUGNET WILL CREATE FOUR INDIRECT ACCESS FILES ( SLUGCON, SLUGHLP, SLUGNET, AND SLUGNEW ), AND ONE DIRECT ACCESS FILE ( SLUGUSR ). HELP,SVRUN THIS IS THE SERVER USER NUMBER. SLUGNET MUST BE INSTALLED FROM THIS USER NUMBER. THIS PARAMETER IS REQUIRED. HELP,MXUSR THIS IS THE MAXIMUM NUMBER OF USERS + 1 ALLOWED TO USE SLUGNET AT THE SAME TIME. THIS NUMBER SHOULD BE A MULTIPLE OF 64. THE DEFAULT IS 64. HELP,INACT THIS IS THE MAXIMUM TIME A USER IS ALLOWED TO REMAIN INACTIVE IN THE USER DIRECTORY IN HOURS. THE DEFAULT IS 2 HOURS. HELP,ORGNM THIS IS A STRING FIELD THAT CAN HOLD ANYTHING. IT IS SUGGESTED THAT YOU USE THIS FIELD TO HOLD THE NAME OF YOUR ORGANIZATION, INSTALLATION, OR SYSTEM. ENDHELP $NOTE./ /* BUILDING SLUGNET... $REWIND,*. $NOTE./ /* COMPILING SLUGNET... $FTN5,I=SLUGSRC,B=SLUGBIN,L=SLUGLST,E=SLUGLST,OPT=2. $NOTE./ /* LOADING SLUGNET... $LDSET,PRESET=ZERO. $LOAD,SLUGBIN. $NOGO,SLUGNET. $NOTE./ /* SAVING SLUGNET... $PURGE,SLUGNET,SLUGNEW,SLUGHLP,SLUGCON,SLUGUSR/NA. $SAVE,SLUGNET/AC=Y,CT=S,M=E. $SAVE,SLUGHLP,SLUGNEW/AC=N,CT=S,M=R. $SAVE,SLUGCON/AC=Y,CT=S,M=R. $RETURN,SLUGHLP,SLUGLST,SLUGBIN,SLUGNEW,SLUGSRC,SLUGCON. $NOTE./ /* EXECUTING SLUGNET... $NOTE./ /* TYPE 'EXIT' TO LEAVE SLUGNET. SLUGNET. $ATTACH,SLUGUSR. $RETURN,SLUGUSR. $NOTE./ /* SLUGNET INSTALLATION SUCCESSFUL. $REVERT,NOLIST. $EXIT. $NOTE./ /* SLUGNET INSTALLATION FAILED. $REVERT,NOLIST. DATA,SLUGSRC BLOCK DATA C C SLUGNET LICENSE AGREEMENT C C C IMPORTANT: THIS PROGRAM IS PROVIDED ONLY ON THE CONDITION THAT THE C INSTALLER AGREE TO THE TERMS OF THIS LICENSE. BY ACCESSING ANY OF C THE FILES IN THIS PACKAGE, THE INSTALLER AGREES TO BE BOUND BY THE C TERMS OF THIS LICENSE. IF THE INSTALLER DOES NOT WISH TO BE BOUND C BY THE TERMS OF THIS LICENSE, THE INSTALLER MUST DESTROY ALL FILES C CREATED, COPIED, OR DERIVED FROM THIS PACKAGE. C C LICENSE C C 1. THIS PROGRAM IS COPYRIGHTED MATERIAL. YOU ARE LICENSED TO INSTALL C NUMBER OF COPIES OF THE PROGRAM ON AANY NUMBER OF MACHINES AND USE C IT AND ALLOW OTHERS TO USE IT. SUCH USE MAY INCLUDE COPYING OF THE C PROGRAM AND FILES FOR ARCHIVAL PURPOSES AND DISTRIBUTION. YOU MUST C REPRODUCE THE PROGRAM'S COPYRIGHT AND TRADEMARK NOTICES ON ALL COPIES. C THE SOURCE CODE MAY BE FREELY DISTRIBUTED TO OTHER PARTIES AS LONG AS C NO CHARGE IS MADE, OTHER THAN MEDIA COSTS. C C 2. NO PROMISES ARE MADE REGARDING THE SUITABILITY OF THIS SOFTWARE FOR C ANY PURPOSE, AND IN NO EVENT WILL JAMES R. PURDON III OR HIS EMPLOYER C OR ASSOCIATES BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, EVEN C THEY HAVE BEEN ADVISED OF THE POSSIBLITY OF SUCH DAMAGES, NOR SHALL C JAMES R. PURDON III OR HIS EMPLOYERS OR ASSOCIATES BE LIABLE FOR A C CLAIM MADE BY ANY OTHER PARTY. C COMMON /COPY/ RIGHT CHARACTER*46 RIGHT DATA RIGHT / 'SLUGNET: COPYRIGHT 1987 BY JAMES R. PURDON III'/ END PROGRAM SLUGNET (SLUGPRO=/162,TAPE97=SLUGPRO) C C -- MAXSIZ - 1: MAXIMUM NUMBER OF USERS C -- MAXTIM : MAXIMUM TIME IN HOURS FOR #INACTIVE ENTRY C PARAMETER (MAXSIZ=MXUSR) PARAMETER (MAXTIM=INACT) IMPLICIT INTEGER (A-Z) C COMMON /C1/ BYE COMMON /C2/ EOL COMMON /C3/ JSN COMMON /C4/ MESSAG COMMON /C5/ TOLC COMMON /C6/ UN COMMON /C7/ EOB COMMON /C8/ BUFFER COMMON /C9/ COLONS COMMON /C10/ FAMILY COMMON /C11/ DING COMMON /COPY/ RIGHT C CHARACTER*1 ASTER,BLANK,COLON,DOLLAR,LEFTA,LEFTP,PERIOD,RIGHTA, * RIGHTP,SLASH,USTAT,STAT,HAT,NSTAT CHARACTER*2 BYE,EOL,TOLC CHARACTER*2 EOB,ESC CHARACTER*4 DING CHARACTER*5 ENDHLP CHARACTER*7 MSGFIL,NULFIL,PSSWRD,UPSSWR,CPSWRD,EDTFIL,NEWFIL, * CONFIL,SCRFIL,INPNAM,OUTNAM,PROFIL,PRONAM CHARACTER*10 CJSN,CUN,INPFIL,JSN,OUTFIL,RCVFIL,SNDFIL,USRFIL,UN, * URCVFL,UUN,UJSN,TJSN,STKFIL,CMDFIL,HLPFIL,DATE,FAMILY,TIME, * UFAMLY,UTIME CHARACTER*17 EDITOR CHARACTER*26 ALPHA CHARACTER*40 CONFER,CNAME,NAME,NCONFR,UNAME,SCONFR,UCONFR,STRING CHARACTER*46 RIGHT CHARACTER*162 BLANKS,MESSAG,BUFFER,COLONS C DIMENSION FAMILY(3) C LOGICAL PRIVAT,MSGFLG,BYEFLG,SWITCH,SELF,NAMFLG,STAFLG LOGICAL ALLFLG,MEMFLG,CONFLG,EXTFLG,OK,OLD,START LOGICAL ERRFLG,NOVICE,PROMPT,HLPFLG,FNDHLP,ECHO LOGICAL BELL,RING,WAIT,TIMER,BRDCST C C DATA ASTER / '*'/ ,BLANK / ' '/ ,COLON / ':'/ ,DOLLAR / '$'/ , * LEFTA / '<'/ ,LEFTP / '('/ ,PERIOD / '.'/ ,RIGHTA / '>'/ , * RIGHTP / ')'/ ,SLASH / '/'/ ,HAT / '^' / DATA INPFIL / 'INPUT '/ ,OUTFIL / 'OUTPUT '/ ,RCVFIL / * 'ZZZZRCV '/ ,SNDFIL / 'ZZZZSND '/ ,USRFIL / 'SLUGUSR '/ , * STKFIL / 'ZZZZSTK '/ ,CMDFIL / 'ZZZZCMD '/ ,HLPFIL / * 'SLUGHLP '/ DATA INPUNI / 1 / ,OUTUNI / 2 / ,RCVUNI / 3 / ,SNDUNI / 4 / , * USRUNI / 5 / ,PROUNI / 97 / ,STKUNI / 7 / ,CMDUNI / 8 / ,HLPUNI * / 9 / DATA CNAMLN / 11 / ,CUNLEN / 7 / ,CONLEN / 7 / DATA MSGLEN / 33 / ,NAMLEN / 0 / ,UNLEN / 0 / DATA MASK18 / O"777777"/ ,PRIVAT / .FALSE. / ,MSGFLG / .FALSE. / DATA NULFIL / 'ZZZZNUL'/ ,NULUNI / 99 / ,ERRUNI / 98 / ,MSGFIL / * 'SLUGMSG'/ ,MSGUNI / 10 / ,EDTFIL / 'ZZZZEDT'/ ,EDTUNI / 11 / , * NEWFIL / 'SLUGNEW'/ ,NEWUNI / 12 / ,CONFIL / 'SLUGCON'/ ,CONUNI * / 13 / ,SCRFIL / 'ZZZZSCR'/ ,SCRUNI / 6 / DATA FL / 7 / ,ECHO / .TRUE. / DATA LIMIT / MAXTIM / ,DELAY / 15 / DATA EDITOR / 'FSE,SLUGMSG,OP=A.'/ DATA NOVICE / .TRUE. / ,PROMPT / .TRUE. / ,WAIT / .FALSE. / DATA BELL / .TRUE. / ,TIMER / .TRUE. / DATA ALPHA / 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/ DATA ENDHLP / '*EOF:'/ ,INPNAM / 'INPUT '/ ,OUTNAM / 'OUTPUT '/ , * PRONAM / 'SLUGPRO'/ C C -- GET USER INFO C PPREQ = O"03201520005700000000".OR.(LOCF(FAMILY(1)).AND.MASK18) CALL REQPP (PPREQ) FAMLEN = INDEX(FAMILY(1),COLON)-1 PPREQ = O"03201520003200000000".OR.(LOCF(UN).AND.MASK18) CALL REQPP (PPREQ) UNLEN = INDEX(UN,COLON)-1 PPREQ = O"03201520001300000000".OR.(LOCF(JSN).AND.MASK18) CALL REQPP (PPREQ) C C -- CREATE RECEIVER FILE PASSWORD C PPREQ = O"03201520001300000000".OR.(LOCF(I).AND.MASK18) CALL REQPP (PPREQ) CALL RANSET (I) DO 10 I = 1, 7 PSSWRD(I:I) = CHAR(INT(RANF()*25.)+1) 10 CONTINUE C C -- INITIALIZE VARIABLES C DO 20 I = 1, 162 BLANKS(I:I) = BLANK COLONS(I:I) = COLON 20 CONTINUE C CJSN(1:4) = JSN(1:4) MESSAG(1:MSGLEN) = 'W^E^L^C^O^M^E ^T^O S^L^U^G^N^E^T!' CNAME(1:CNAMLN) = 'S^E^R^V^E^R' CUN(1:CUNLEN) = '_SVRUN_' NAME(1:15) = 'N^E^W ^U^S^E^R:' NAMLEN = INDEX(NAME,COLON)-1 CMDFIL(1:4) = JSN(1:4) EDTFIL(1:4) = JSN(1:4) NULFIL(1:4) = JSN(1:4) RCVFIL(1:4) = JSN(1:4) SNDFIL(1:4) = JSN(1:4) STKFIL(1:4) = JSN(1:4) SCRFIL(1:4) = JSN(1:4) CONFER(1:CONLEN) = 'R^O^O^T' BYE = ':D' DING = ':G5G' EOB = ':E' EOL = '::' TOLC = ':I' STRLEN = 8 STRING(1:STRLEN) = 'F^R^O^M:' C C -- SEE IF NEW USER C OPEN (UNIT=CMDUNI,FILE=CMDFIL,STATUS='NEW',IOSTAT=IOSTAT,RECL=162) IF (IOSTAT.EQ.0) THEN INQUIRE (UNIT=PROUNI,NAME=PROFIL) WRITE (CMDUNI,1000) JSN(1:4),CUN(1:CUNLEN),PROFIL,JSN(1:4), 1 JSN(1:4),JSN(1:4),PROFIL,JSN(1:4) 1000 FORMAT ('.PROC,',A4,'CMD.',/, 1 '$GET,SLUGNET=SLUGNET/UN=',A7,'.',/, 2 'SLUGNET,',A7,'.',/, 3 '$NOTE,NR./ / ',/, 4 '$WHILE,FILE(',A4,'STK,AS),LOOP.',/, 5 '$SETFS,',A4,'CMD,',A4,'STK,SLUGNET/FS=NAD.',/, 6 'SLUGNET,',A7,'.',/, 7 '$ENDW,LOOP.',/, 8 '$NOTE,NR./ /* SLUGNET TERMINATED.',/, 9 '$REVERT,NOLIST.',/, A '$EXIT.',/, B A4,'CMD.',/, C '$REVERT,NOLIST.',/, D '$EXIT.',/, E '$NOTE,NR./ /* SLUGNET TERMINATED.',/, F '$REVERT,NOLIST.' ) REWIND CMDUNI CLOSE (UNIT=CMDUNI,STATUS='KEEP') BUFFER(1:160) = COLONS(1:160) BUFFER(1:9) = '!XXXXXXX.' BUFFER(2:8) = CMDFIL(1:FL) START = .TRUE. GO TO 450 C ENDIF CLOSE (UNIT=CMDUNI,STATUS='KEEP') C C -- CREATE SERVER FILE PASSWORD C J = 0 DO 30 I = 1, 7 J = ICHAR(CUN(I:I)) 30 CONTINUE CALL RANSET (J) DO 40 I = 1, 7 CPSWRD(I:I) = CHAR(INT(RANF()*25.)+1) 40 CONTINUE C C -- SEE IF USER IS RETURNING C OPEN (UNIT=STKUNI,FILE=STKFIL,STATUS='OLD',IOSTAT=IOSTAT,FORM= * 'UNFORMATTED') IF (IOSTAT.EQ.0) THEN REWIND STKUNI READ (STKUNI) NUMLIN,OUTFIL,EDITOR,CONFIL,NOVICE,PROMPT,INPFIL, * ECHO,DELAY,PROFIL,BELL,STRING,TIMER,BRDTIM OLD = .TRUE. REWIND STKUNI ELSE INQUIRE (UNIT=PROUNI,NAME=PROFIL) CALL PF ('GET',PROFIL,PROFIL,'UN',UN,'RC',PFERR) IF (PFERR.EQ.0) THEN INPFIL(1:FL) = PROFIL CLOSE (UNIT=PROUNI,STATUS='KEEP') ELSE CLOSE (UNIT=PROUNI,STATUS='DELETE') CALL PF ('GET','SLUGPRO','SLUGPRO','UN',CUN,'RC',PFERR) IF (PFERR.EQ.0) THEN INPFIL(1:FL) = 'SLUGPRO' ENDIF ENDIF ENDIF IF (INPFIL(1:FL).EQ.INPNAM.OR.INPFIL(1:FL).EQ.PROFIL) THEN CLOSE (UNIT=STKUNI,STATUS='DELETE') ELSE CLOSE (UNIT=STKUNI,STATUS='KEEP') ENDIF C C -- SET UP FILES FOR INPUT AND OUTPUT C OPEN (UNIT=INPUNI,FILE=INPFIL(1:FL),STATUS='UNKNOWN',RECL=162) OPEN (UNIT=OUTUNI,FILE=OUTFIL(1:FL),STATUS='UNKNOWN',RECL=162) C C -- CREATE AN EMPTY FILE C OPEN (UNIT=NULUNI,FILE=NULFIL,STATUS='UNKNOWN',RECL=162) REWIND NULUNI WRITE (NULUNI,*) BLANK REWIND NULUNI CLOSE (UNIT=NULUNI,STATUS='KEEP') C C -- SET UP RECEIVE FILE C OPEN (UNIT=RCVUNI,FILE=RCVFIL(1:FL),STATUS='UNKNOWN',RECL=162) OPEN (UNIT=SNDUNI,FILE=SNDFIL(1:FL),STATUS='UNKNOWN',RECL=162) C C -- INITALIZE FILES C WRITE (RCVUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP,BLANK * ,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I),I=1,4), * BLANK,RIGHTP,COLON C 1010 FORMAT (A2,'F^R^O^M ',80A1) C WRITE (RCVUNI,1020) TOLC,BLANK,(MESSAG(I:I),I=1,MSGLEN) 1020 FORMAT (A2,160A1) WRITE (RCVUNI,1020) TOLC,BLANK C C -- GET NEWS FILE AND ADD TO RECEIVER FILE C CALL PF ('GET',NEWFIL,NEWFIL,'UN',CUN(1:CUNLEN),'RC',PFERR) OPEN (UNIT=NEWUNI,FILE=NEWFIL,STATUS='UNKNOWN',RECL=162) 50 READ (NEWUNI,1450,END=60) MESSAG(1:160) WRITE (RCVUNI,1460) TOLC,MESSAG(1:160) GO TO 50 C 60 CLOSE (UNIT=NEWUNI,STATUS='DELETE') WRITE (RCVUNI,1020) TOLC,BLANK C C -- MAKE THE PERMANENT RECEIVE FILE C REWIND RCVUNI CLOSE (UNIT=RCVUNI,STATUS='KEEP') C C -- IF OLD, SKIP NEXT STEP C IF (OLD) GO TO 70 C CALL PF ('PURGE',RCVFIL(1:FL),'RC',PFERR) CALL PF ('SAVE',RCVFIL(1:FL),RCVFIL(1:FL),'CT','S','M','A','PW', * PSSWRD) C C -- LOAD THE USER INTO THE DIRECTORY ( OR UPDATE HIS CONFERENCE ) C 70 CALL PF ('ATTACH',USRFIL(1:FL),USRFIL(1:FL),'UN',CUN(1:CUNLEN), * 'PW',CPSWRD,'RC',PFERR,'M','M') C C -- IF A CONFERENCE SHIFT INPROGRESS, OPEN UP SNDFIL C IF (SWITCH) THEN OPEN (UNIT=SNDUNI,FILE=SNDFIL(1:FL),STATUS='UNKNOWN',RECL=162) REWIND SNDUNI ENDIF C C -- NO ACCESS TO FILE C IF (PFERR.EQ.2) THEN C C -- IF CONFERENCE UN, CREATE NEW DIRECTORY C IF (UN(1:UNLEN).EQ.CUN(1:CUNLEN)) THEN C C -- DESTROY ANY DIRECTORY FILE PRESENT C OPEN (UNIT=USRUNI,FILE=USRFIL(1:FL),STATUS='UNKNOWN') REWIND USRUNI CLOSE (UNIT=USRUNI,STATUS='DELETE') C C -- CREATE NEW DIRECTORY FILE C CALL PF ('DEFINE',USRFIL(1:FL),USRFIL(1:FL),'PW',CPSWRD,'CT' * ,'S','M','M','AC','N','RC',PFERR) IF (PFERR.NE.0) THEN WRITE (OUTUNI,1030) TOLC,PFERR 1030 FORMAT (A2,'*PF ^E^R^R^O^R ',I3,'.') CALL EXIT ENDIF OPEN (UNIT=USRUNI,FILE=USRFIL(1:FL),STATUS='NEW',ACCESS= * 'DIRECT',RECL=16,FORM='UNFORMATTED') C C -- BLANK OUT FILE C DO 80 J = 1, MAXSIZ WRITE (USRUNI,REC=J) BLANKS(1:160) 80 CONTINUE NUMBER = MAXSIZ-1 WRITE (USRUNI,REC=1) NUMBER,DATE(),TIME(),BLANKS(1:130) CLOSE (UNIT=USRUNI,STATUS='KEEP') C C -- FLUSH THE BUFFER C OPEN (UNIT=USRUNI,FILE=USRFIL(1:FL),STATUS='UNKNOWN') REWIND USRUNI CLOSE (UNIT=USRUNI,STATUS='KEEP') C C -- RELEASE THE FILE C CALL PF ('ATTACH',USRFIL(1:FL),USRFIL(1:FL),'UN',CUN(1: * CUNLEN),'PW',CPSWRD,'RC',PFERR,'M','R') C IF (PFERR.NE.0) THEN WRITE (OUTUNI,1030) TOLC,PFERR CALL EXIT ENDIF C OPEN (UNIT=USRUNI,FILE=USRFIL,STATUS='UNKNOWN',ACCESS= * 'DIRECT',RECL=16,FORM='UNFORMATTED') CLOSE (UNIT=USRUNI,STATUS='DELETE') GO TO 70 C ELSE MSGLEN = 17 MESSAG(1:MSGLEN) = '*U^N ^I^S ^N^O^T ' WRITE (OUTUNI,1020) TOLC,(MESSAG(I:I),I=1,MSGLEN),(CUN(I:I), * I=1,CUNLEN),PERIOD CALL EXIT ENDIF C C -- FILE IS BUSY C ELSEIF (PFERR.EQ.1) THEN GO TO 70 C C -- OTHER ERROR C ELSEIF (PFERR.GT.2.OR.PFERR.LT.0) THEN WRITE (OUTUNI,1030) TOLC,PFERR CALL EXIT C C -- ADD USER TO DIRECTORY C ELSE OPEN (UNIT=USRUNI,FILE=USRFIL(1:FL),STATUS='UNKNOWN',ACCESS= * 'DIRECT',RECL=16,FORM='UNFORMATTED') C C -- NUMBER MAY BE NUMBER OF USERS, BUT IS MOST LIKELY THE NUMBER C OF RECORDS C READ (USRUNI,REC=1) NUMBER C C -- LOOK FOR FREE SLOT IN DIRECTORY C DO 90 J = 1, 2 DO 90 I = 2, NUMBER C C -- READ THE UN, FILENAME, PASSWORD, CONFERENCE, AND STATUS C READ (USRUNI,REC=I) UTIME,UNAME,UJSN,UUN,URCVFL,UPSSWR, * UCONFR,USTAT,UFAMLY C C -- BUST GHOSTS C IF (UUN(1:1).NE.BLANK) THEN READ (UTIME,1040) ITIME1 1040 FORMAT (I3) UTIME = TIME() READ (UTIME,1040) ITIME2 IF (ITIME1.GT.ITIME2) ITIME2 = ITIME2+24 IF (IABS(ITIME1-ITIME2).GT.LIMIT) THEN WRITE (USRUNI,REC=I) BLANKS(1:160) UUN(1:1) = BLANK ENDIF ENDIF C C -- IF THE UN IS BLANK, THE RECORD IS OK TO USE C IF (UUN(1:1).EQ.BLANK.AND.(.NOT.SWITCH).AND.(.NOT.OLD) * .AND.(.NOT.NAMFLG).AND.(.NOT.STAFLG).AND.(.NOT.EXTFLG) * .AND.J.GT.1) THEN WRITE (USRUNI,REC=I) TIME(),NAME,JSN,UN,RCVFIL,PSSWRD, * CONFER,STAT,FAMILY(1) GO TO 100 C ENDIF C C -- IF THE USER IS ALREADY THERE, EXTRACT INFO AND UPDATE CONFER C IF (UUN.EQ.UN.AND.JSN.EQ.UJSN) THEN IF (NAMFLG) UNAME = NAME NAME = UNAME NAMLEN = INDEX(NAME,COLON)-1 RCVFIL = URCVFL PSSWRD = UPSSWR IF (SWITCH) THEN UCONFR = NCONFR SWITCH = .FALSE. ENDIF CONFER = UCONFR CONLEN = INDEX(CONFER,COLON)-1 IF (USTAT.EQ.'S') THEN USTAT = COLON ENDIF IF (STAFLG) THEN USTAT = NSTAT ENDIF STAT = USTAT IF (EXTFLG) THEN UN = BLANKS(1:7) ENDIF WRITE (USRUNI,REC=I) TIME(),NAME,JSN,UN,RCVFIL,PSSWRD, * CONFER,STAT,FAMILY(1) GO TO 100 C ENDIF 90 CONTINUE C C -- IF WE GET HERE, ITS FULL! C EXTFLG = .TRUE. WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP, * BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I),I=1 * ,4),BLANK,RIGHTP,COLON WRITE (OUTUNI,1050) TOLC 1050 FORMAT (A2,' U^S^E^R ^D^I^R^E^C^T^O^R^Y ^I^S ^F^U^L^L - ', * 'T^R^Y ^A^G^A^I^N ^L^A^T^E^R.') WRITE (OUTUNI,1140) TOLC C C -- CLOSE THE FILE AND RELEASE IT C 100 CLOSE (UNIT=USRUNI,STATUS='KEEP') C C -- FLUSH THE BUFFER C OPEN (UNIT=USRUNI,FILE=USRFIL(1:FL),STATUS='UNKNOWN') REWIND USRUNI CLOSE (UNIT=USRUNI,STATUS='KEEP') C CALL PF ('ATTACH',USRFIL(1:FL),USRFIL(1:FL),'UN',CUN(1:CUNLEN), * 'PW',CPSWRD,'RC',PFERR,'M','R') C IF (PFERR.NE.0) THEN WRITE (OUTUNI,1030) TOLC,PFERR CALL EXIT ENDIF C OPEN (UNIT=USRUNI,FILE=USRFIL,STATUS='UNKNOWN',ACCESS='DIRECT', * RECL=16,FORM='UNFORMATTED') CLOSE (UNIT=USRUNI,STATUS='DELETE') ENDIF C C -- BRANCH IF NAME CHANGE C IF (NAMFLG) THEN NAMFLG = .FALSE. GO TO 200 C ENDIF C C -- BRANCH IF STATUS CHANGE C IF (STAFLG) THEN STAFLG = .FALSE. GO TO 200 C ENDIF C C -- STOP IF EXIT C IF (EXTFLG) THEN CALL PF ('PURGE',RCVFIL,'RC',PFERR) OPEN (UNIT=NULUNI,FILE=NULFIL,STATUS='UNKNOWN') CLOSE (UNIT=NULUNI,STATUS='DELETE') OPEN (UNIT=CMDUNI,FILE=CMDFIL,STATUS='UNKNOWN') CLOSE (UNIT=CMDUNI,STATUS='DELETE') OPEN (UNIT=STKUNI,FILE=STKFIL,STATUS='UNKNOWN') CLOSE (UNIT=STKUNI,STATUS='DELETE') OPEN (UNIT=MSGUNI,FILE=MSGFIL,STATUS='UNKNOWN') CLOSE (UNIT=MSGUNI,STATUS='DELETE') OPEN (UNIT=HLPUNI,FILE=HLPFIL,STATUS='UNKNOWN') CLOSE (UNIT=HLPUNI,STATUS='DELETE') OPEN (UNIT=RCVUNI,FILE=RCVFIL,STATUS='UNKNOWN') CLOSE (UNIT=RCVUNI,STATUS='DELETE') OPEN (UNIT=SNDUNI,FILE=SNDFIL,STATUS='UNKNOWN') CLOSE (UNIT=SNDUNI,STATUS='DELETE') OPEN (UNIT=PROUNI,FILE=PROFIL,STATUS='UNKNOWN') CLOSE (UNIT=PROUNI,STATUS='DELETE') PPREQ = O"24143020000300000002" CALL REQPP (PPREQ) IF (BYEFLG) WRITE (OUTUNI,1060) BYE 1060 FORMAT (A2) CALL EXIT ENDIF C C -- BRANCH IF OLD C IF (OLD) THEN OLD = .FALSE. OPEN (UNIT=MSGUNI,FILE=MSGFIL,STATUS='UNKNOWN',RECL=162) NUMLIN = 0 110 READ (MSGUNI,1060,END=120) NUMLIN = NUMLIN+1 GO TO 110 C 120 GO TO 200 C ENDIF C C -- WRITE NOTICE C MSGLEN = 24 MESSAG(1:MSGLEN) = ' ^L^O^G^G^E^D ^O^N ^T^O ' C WRITE (SNDUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP,BLANK * ,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I),I=1,4), * BLANK,RIGHTP,COLON C WRITE (SNDUNI,1070) TOLC,(NAME(I:I),I=1,NAMLEN),BLANK,LEFTP,BLANK, * (UN(I:I),I=1,UNLEN),BLANK,SLASH,BLANK,(JSN(I:I),I=1,4),BLANK, * RIGHTP,(MESSAG(I:I),I=1,MSGLEN),(CONFER(I:I),I=1,CONLEN),PERIOD C 1070 FORMAT (A2,1X,80A1) WRITE (SNDUNI,1070) TOLC,BLANK REWIND SNDUNI CLOSE (UNIT=SNDUNI,STATUS='KEEP') C C -- ATTACH THE CONFERENCE DIRECTORY C 130 CALL PF ('ATTACH',USRFIL(1:FL),USRFIL(1:FL),'UN',CUN(1:CUNLEN), * 'PW',CPSWRD,'RC',PFERR,'M','R') IF (PFERR.EQ.1) GO TO 130 C C -- OPEN IT AS A DIRECT ACCESS DEVICE C OPEN (UNIT=USRUNI,FILE=USRFIL,STATUS='OLD',ACCESS='DIRECT',RECL=16 * ,FORM='UNFORMATTED') C C -- THE FIRST LINE IS THE NUMBER OF ENTRIES C READ (USRUNI,REC=1) NUMBER C C -- GHOST FLAG C SELF = .FALSE. C C -- CYCLE THROUGH THE LIST, APPENDING THE MESSAGE TO THE USERS' C RECEIVE FILES C DO 150 I = 2, NUMBER C C -- READ THE UN, FILENAME, PASSWORD, CONFERENCE, AND STATUS C READ (USRUNI,REC=I) UTIME,UNAME,UJSN,UUN,URCVFL,UPSSWR,UCONFR, * USTAT,UFAMLY C C -- MAKE SURE RECORD ISN'T EMPTY C IF (UUN(1:1).EQ.BLANK) GO TO 150 C C -- MAKE SURE FAMILY IS THE SAME C IF (FAMILY(1)(1:FAMLEN).NE.UFAMLY(1:FAMLEN)) GO TO 150 C C -- CALCULATE UUNLEN C UUNLEN = INDEX(UUN,COLON)-1 IF (UUNLEN.LE.0) UUNLEN = 7 C C -- SEE IF SELF C IF (UUN(1:UUNLEN).EQ.UN(1:UNLEN).AND.JSN(1:4).EQ.UJSN(1:4)) * SELF = .TRUE. C C -- TRY THE APPEND C 140 PFERR = 0 IF ((.NOT.PRIVAT).AND.(.NOT.BRDCST)) THEN IF (((CONFER(1:CONLEN).EQ.UCONFR(1:CONLEN).OR.USTAT.EQ.'M') * .AND.JSN(1:4).NE.UJSN(1:4)).OR.(JSN(1:4).EQ.UJSN(1:4) * .AND.ECHO)) CALL PF ('APPEND',SNDFIL,URCVFL,'UN',UUN(1: * UUNLEN),'PW',UPSSWR,'RC',PFERR) ELSEIF (.NOT.PRIVAT) THEN IF ((USTAT.EQ.'M'.AND.JSN(1:4).NE.UJSN(1:4)).OR.(JSN(1:4) * .EQ.UJSN(1:4).AND.ECHO)) CALL PF ('APPEND',SNDFIL,URCVFL, * 'UN',UUN(1:UUNLEN),'PW',UPSSWR,'RC',PFERR) ELSE IF (CONFER(1:CONLEN).EQ.UCONFR(1:CONLEN).AND.(USTAT.EQ.'M' * .OR.UJSN(1:4).EQ.TJSN(1:4).OR.(JSN(1:4).EQ.UJSN(1:4).AND. * ECHO).OR.UUN(1:UUNLEN).EQ.CUN(1:CUNLEN))) CALL PF ( * 'APPEND',SNDFIL,URCVFL,'UN',UUN(1:UUNLEN),'PW',UPSSWR, * 'RC',PFERR) ENDIF IF (PFERR.EQ.1) GO TO 140 C 150 CONTINUE C C -- RETURN THE DIRECTORY C CLOSE (UNIT=USRUNI,STATUS='DELETE') C C -- DESTROY SNDFIL C OPEN (UNIT=SNDUNI,FILE=SNDFIL,STATUS='UNKNOWN') CLOSE (UNIT=SNDUNI,STATUS='DELETE') C C -- RESET PRIVATE STATUS C PRIVAT = .FALSE. C C -- RESET BROADCAST STATUS C BRDCST = .FALSE. C C -- IF SELF IS MISSING, PRINT MESSAGE AND EXIT C IF (.NOT.SELF) THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP, * BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I),I=1 * ,4),BLANK,RIGHTP,COLON WRITE (OUTUNI,1080) TOLC,LIMIT 1080 FORMAT (A2,' U^S^E^R ^D^I^R^E^C^T^O^R^Y ^E^N^T^R^Y ', * '^I^N^A^C^T^I^V^E ^F^O^R ',I2,' ^H^O^U^R^S - J^O^B ', * '^T^E^R^M^I^N^A^T^E^D. ') EXTFLG = .TRUE. ENDIF C C STOP C C -- IF AN EXIT IS IN PROGRESS, GO BLANK OUT THE UN C IF (EXTFLG) GO TO 70 C C -- IF A JOIN IS IN PROGRESS, DO A SWITCH C IF (SWITCH) THEN CONFER = NCONFR CONLEN = NCONLN GO TO 70 C ENDIF C C -- GET AND DISPLAY THE USER'S OWN RECEIVER FILE C 160 CALL PF ('GET',RCVFIL,RCVFIL,'PW',PSSWRD,'RC',PFERR) IF (PFERR.EQ.1) GO TO 160 C C -- CLEAR OUT THE RCVFIL C CALL PF ('REPLACE',NULFIL,RCVFIL,'PW',PSSWRD,'RC',PFERR) IF (PFERR.EQ.1) GO TO 160 C C -- SEE IF THE MESSAGE FILE EXISTS C C C -- OPEN THE MESSAGE BUFFER C OPEN (UNIT=MSGUNI,FILE=MSGFIL,STATUS='UNKNOWN',RECL=162) REWIND MSGUNI C C -- DISPLAY THE RECEIVER FILE C OPEN (UNIT=RCVUNI,FILE=RCVFIL,STATUS='UNKNOWN',RECL=162) REWIND RCVUNI 170 MSGFLG = .FALSE. READ (RCVUNI,1090,END=180,ERR=190,IOSTAT=IOSTAT) MESSAG(1:162) ERRFLG = .FALSE. 1090 FORMAT (A162) IF (WAIT) THEN IF (INDEX(MESSAG(1:162),STRING(1:STRLEN)).GT.0) WAIT = .FALSE. ENDIF IF (MESSAG(1:1).EQ.DOLLAR) THEN IF (MESSAG(2:5).EQ.JSN(1:4)) THEN MESSAG(1:156) = MESSAG(6:162) MSGFLG = .TRUE. GO TO 210 C ELSEIF (UN(1:UNLEN).NE.CUN(1:CUNLEN)) THEN GO TO 170 C ENDIF ENDIF C ENDMSG = INDEX(MESSAG,EOL)-1 IF (ENDMSG.LE.0) ENDMSG = 162 WRITE (OUTUNI,1100) MESSAG(1:2),(MESSAG(I:I),I=3,ENDMSG) 1100 FORMAT (A2,160A1) C IF (OUTFIL(1:FL).EQ.OUTNAM) REWIND OUTUNI GO TO 170 C C -- MAKE SURE WE ARE AT EOI C 180 IF (ERRFLG) GO TO 190 CLOSE (UNIT=RCVUNI,STATUS='KEEP') OPEN (UNIT=RCVUNI,FILE=RCVFIL,STATUS='UNKNOWN',RECL=162) ERRFLG = .TRUE. GO TO 170 C C -- DESTROY OLD RECEIVE FILE C 190 CLOSE (UNIT=RCVUNI,STATUS='DELETE') C C -- ACCEPT USER MESSAGES C NUMLIN = 0 C C -- BUILD THE PROMPT C 200 MESSAG(1:162) = COLONS(1:162) MESSAG(1:2) = TOLC IF (PROMPT) THEN MODLEN = MOD(CONLEN,2) MESSAG(3:2+CONLEN) = CONFER(1:CONLEN) I = 3+CONLEN ELSE I = 3 MODLEN = 0 ENDIF MESSAG(I:I) = RIGHTA IF (MODLEN.EQ.0) THEN I = I+1 MESSAG(I:I) = BLANK ENDIF I = I+1 MESSAG(I:I+1) = EOB I = I+2 MESSAG(I:I+1) = EOL I = I+1 C C -- IF IN SCAN MODE OR IN WAIT MODE SKIP INPUT REQUEST C IF (STAT.EQ.'S'.OR.WAIT) THEN MESSAG = BLANKS I = DELAY PPREQ = O"03201520000600000000".OR.(LOCF(I).AND.MASK18) CALL REQPP (PPREQ) IF (TIMER) WRITE (OUTUNI,1110) TIME() 1110 FORMAT (A10) GO TO 210 C ENDIF C C -- WRITE THE PROMPT C IF (INPFIL(1:FL).EQ.INPNAM) THEN PRINT 1120,MESSAG(1:162) 1120 FORMAT (A162) ENDIF C PPREQ = O"24143020000300000001" CALL REQPP (PPREQ) READ (INPUNI,1130,END=240) MESSAG(1:160) IF (INPFIL(1:FL).NE.INPNAM) THEN IF (ECHO) WRITE (OUTUNI,1460) TOLC,MESSAG(1:160) ENDIF PPREQ = O"24143020000300000000" CALL REQPP (PPREQ) C 210 ENDMSG = INDEX(MESSAG(1:160),EOL)-1 IF (ENDMSG.LE.0) ENDMSG = 160 DO 220 I = 1, ENDMSG IF (MESSAG(I:I).EQ.HAT) THEN I2 = I+1 IF (I2.GT.ENDMSG) GO TO 230 IF (INDEX(ALPHA,MESSAG(I2:I2)).LE.0) MESSAG(I:I2) = BLANKS(1 * :2) ENDIF 220 CONTINUE 230 IF (MESSAG(1:1).EQ.BLANK.AND.MESSAG(1:162).NE.BLANKS) THEN WRITE (MSGUNI,1130) MESSAG(1:160) 1130 FORMAT (A160) NUMLIN = NUMLIN+1 GO TO 200 C ENDIF C C -- COMMANDS C C -- BLANK LINE: BROADCAST MESSAGE C IF (MESSAG.NE.BLANKS) GO TO 300 GO TO 250 C 240 CLOSE (UNIT=INPUNI,STATUS='KEEP') INPFIL(1:FL) = INPNAM OPEN (UNIT=INPUNI,FILE=INPFIL(1:FL),STATUS='UNKNOWN',RECL=162) 250 IF (NUMLIN.EQ.0.AND.(.NOT.SWITCH)) GO TO 160 REWIND MSGUNI C C -- POSITION SNDFIL AT END C OPEN (UNIT=SNDUNI,FILE=SNDFIL,STATUS='UNKNOWN',RECL=162) 260 READ (SNDUNI,1130,END=270) MESSAG(1:160) GO TO 260 C C -- PREPARE MESSAGE C C C -- IF SWITCH AND NUMLIN .EQ. 0, SKIP HEADER C 270 IF (SWITCH.AND.NUMLIN.EQ.0) GO TO 280 IF ((.NOT.PRIVAT).AND.(.NOT.BRDCST)) THEN WRITE (SNDUNI,1010) TOLC,(NAME(I:I),I=1,NAMLEN),BLANK,LEFTP, * BLANK,(UN(I:I),I=1,UNLEN),BLANK,SLASH,BLANK,(JSN(I:I),I=1,4) * ,BLANK,RIGHTP,COLON ELSEIF (.NOT.BRDCST) THEN MSGLEN = 37 MESSAG(1:MSGLEN) = '< ^P^R^I^V^A^T^E ^M^E^S^S^A^G^E ^T^O ' WRITE (SNDUNI,1010) TOLC,(NAME(I:I),I=1,NAMLEN),BLANK,LEFTP, * BLANK,(UN(I:I),I=1,UNLEN),BLANK,SLASH,BLANK,(JSN(I:I),I=1,4) * ,BLANK,RIGHTP,BLANK,(MESSAG(I:I),I=1,MSGLEN),(TJSN(I:I),I=1, * 4),BLANK,RIGHTA,COLON ELSE MSGLEN = 37 MESSAG(1:MSGLEN) = '< ^B^R^O^A^D^C^A^S^T ^M^E^S^S^A^G^E >' WRITE (SNDUNI,1010) TOLC,(NAME(I:I),I=1,NAMLEN),BLANK,LEFTP, * BLANK,(UN(I:I),I=1,UNLEN),BLANK,SLASH,BLANK,(JSN(I:I),I=1,4) * ,BLANK,RIGHTP,BLANK,(MESSAG(I:I),I=1,MSGLEN) ENDIF C 280 READ (MSGUNI,1130,END=290) MESSAG(1:160) IF (MESSAG(1:1).EQ.'1') MESSAG(1:1) = BLANK WRITE (SNDUNI,1140) TOLC,MESSAG(1:160) 1140 FORMAT (A2,A160) GO TO 280 C 290 WRITE (SNDUNI,1140) TOLC CLOSE (UNIT=MSGUNI,STATUS='DELETE') REWIND SNDUNI CLOSE (UNIT=SNDUNI,STATUS='KEEP') GO TO 130 C C -- COPY MESSAG TO BUFFER, REMOVING HATS C 300 BUFLEN = 0 BUFFER = BLANKS DO 310 I = 1, 160 IF (MESSAG(I:I).NE.HAT) THEN BUFLEN = BUFLEN+1 BUFFER(BUFLEN:BUFLEN) = MESSAG(I:I) ENDIF 310 CONTINUE C C -- SEND JSN: SENDS MESSAGE TO JSN ONLY C IF (BUFFER(1:4).EQ.'SEND') THEN I = INDEX(BUFFER,BLANK)+1 TJSN(1:4) = BUFFER(I:I+3) IF (INDEX(TJSN(1:4),BLANK).EQ.0) PRIVAT = .TRUE. GO TO 250 C ENDIF C C -- BROADCAST: SENDS MESSAGE TO ALL JSN, REGARDLESS OF CONFERENCE C IF (BUFFER(1:9).EQ.'BROADCAST') THEN BUFFER(1:10) = TIME() READ (BUFFER(1:10),1150) HOURS,MINUTE,SECOND 1150 FORMAT (1X,I2,1X,I2,1X,I2) NEWTIM = HOURS*3600+MINUTE*60+SECOND IF (NEWTIM-BRDTIM.LT.60) THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP * ,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I) * ,I=1,4),BLANK,RIGHTP,COLON WRITE (OUTUNI,1160) TOLC 1160 FORMAT (A2,' Y^O^U ^M^A^Y ^B^R^O^A^D^C^A^S^T ^O^N^L^Y ', * '^O^N^C^E ^P^E^R ^M^I^N^U^T^E.') WRITE (OUTUNI,1140) TOLC GO TO 200 C ELSE BRDTIM = NEWTIM BRDCST = .TRUE. GO TO 250 C ENDIF ENDIF C C -- REWIND COMMAND C IF (BUFFER(1:6).EQ.'REWIND') THEN REWIND INPUNI GO TO 200 C ENDIF C C -- SET COMMAND C IF (BUFFER(1:4).EQ.'SET ') THEN IF (BUFFER(5:9).EQ.'NAME ') THEN I = INDEX(MESSAG,BLANK) MESSAG(I:I) = COLON I = INDEX(MESSAG,BLANK)+1 BUFFER = BLANKS BUFFER(1:39) = MESSAG(I:I+38) DO 320 I = 1, 40 IF (BUFFER(I:I+1).EQ.BLANKS(1:2)) THEN BUFFER(I:I+1) = EOL GO TO 330 C ENDIF 320 CONTINUE 330 NAME(1:40) = BUFFER(1:40) NAMLEN = INDEX(NAME,COLON)-1 IF (NAMLEN.LE.0) THEN NAME(1:19) = 'A^N^O^N^Y^M^O^U^S::' NAMLEN = INDEX(NAME,COLON)-1 ENDIF NAMFLG = .TRUE. WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP * ,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I) * ,I=1,4),BLANK,RIGHTP,COLON WRITE (OUTUNI,1170) TOLC,(NAME(I:I),I=1,NAMLEN),PERIOD 1170 FORMAT (A2,' C^H^A^N^G^I^N^G ^N^A^M^E ^T^O ',42A1) WRITE (OUTUNI,1140) TOLC IF (OUTFIL(1:FL).EQ.OUTNAM) REWIND OUTUNI GO TO 70 C ENDIF C C -- SET MESSAGE BUFFER EDITOR C IF (BUFFER(5:11).EQ.'EDITOR ') THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP * ,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I) * ,I=1,4),BLANK,RIGHTP,COLON IF (BUFFER(12:16).EQ.'XEDIT') THEN EDITOR = 'XEDIT,SLUGMSG,AS.' WRITE (OUTUNI,1180) TOLC 1180 FORMAT (A2,' E^D^I^T^O^R ^S^E^T ^T^O X^E^D^I^T.') ELSEIF (BUFFER(12:14).EQ.'FSE') THEN EDITOR = 'FSE,SLUGMSG,OP=A.' WRITE (OUTUNI,1190) TOLC 1190 FORMAT (A2,' E^D^I^T^O^R ^S^E^T ^T^O FSE.') ELSEIF (BUFFER(12:14).EQ.'TED') THEN EDITOR = 'TED,SLUGMSG. ' WRITE (OUTUNI,1200) TOLC 1200 FORMAT (A2,' E^D^I^T^O^R ^S^E^T ^T^O T^E^D.') ELSEIF (BUFFER(12:15).EQ.'EDIT') THEN EDITOR = 'EDIT,SLUGMSG,AS. ' WRITE (OUTUNI,1210) TOLC 1210 FORMAT (A2,' E^D^I^T^O^R ^S^E^T ^T^O E^D^I^T.') ELSE WRITE (OUTUNI,1220) TOLC 1220 FORMAT (A2,' I^N^V^A^L^I^D ^O^R ^O^B^S^O^L^E^T^E ', * '^E^D^I^T^O^R ^S^E^L^E^C^T^E^D.') ENDIF WRITE (OUTUNI,1140) TOLC GO TO 200 C ENDIF C C -- SET USER FILE C IF (BUFFER(5:9).EQ.'USER ') THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP * ,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I) * ,I=1,4),BLANK,RIGHTP,COLON CALL PF ('GET',BUFFER(10:16),BUFFER(10:16),'UN',UN(1:UNLEN), * 'RC',PFERR) IF (PFERR.EQ.0) THEN CONFIL(1:FL) = BUFFER(10:16) OPEN (UNIT=CONUNI,FILE=CONFIL,STATUS='UNKNOWN',RECL=162) CLOSE (UNIT=CONUNI,STATUS='DELETE') WRITE (OUTUNI,1230) TOLC,CONFIL 1230 FORMAT (A2,' U^S^E^R ^F^I^L^E ^C^H^A^N^G^E^D ^T^O ',A7) ELSE WRITE (OUTUNI,1240) TOLC 1240 FORMAT (A2,' I^N^V^A^L^I^D ^U^S^E^R ^F^I^L^E ', * '^S^E^L^E^C^T^E^D.') ENDIF WRITE (OUTUNI,1140) TOLC GO TO 200 C ENDIF C C -- SET NOVICE MODE C IF (BUFFER(5:11).EQ.'NOVICE ') THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP * ,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I) * ,I=1,4),BLANK,RIGHTP,COLON IF (BUFFER(12:13).EQ.'ON') NOVICE = .TRUE. IF (BUFFER(12:14).EQ.'OFF') NOVICE = .FALSE. IF (NOVICE) BUFFER(1:7) = '^O^N. ' IF (.NOT.NOVICE) BUFFER(1:7) = '^O^F^F.' WRITE (OUTUNI,1250) TOLC,(BUFFER(I:I),I=1,7) 1250 FORMAT (A2,' N^O^V^I^C^E ^M^O^D^E ^I^S ',7A1) WRITE (OUTUNI,1140) TOLC GO TO 200 C ENDIF C C -- SET TIMER MODE C IF (BUFFER(5:10).EQ.'TIMER ') THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP * ,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I) * ,I=1,4),BLANK,RIGHTP,COLON IF (BUFFER(11:12).EQ.'ON') TIMER = .TRUE. IF (BUFFER(11:13).EQ.'OFF') TIMER = .FALSE. IF (TIMER) BUFFER(1:7) = '^O^N. ' IF (.NOT.TIMER) BUFFER(1:7) = '^O^F^F.' WRITE (OUTUNI,1260) TOLC,(BUFFER(I:I),I=1,7) 1260 FORMAT (A2,' T^I^M^E^R ^M^O^D^E ^I^S ',7A1) WRITE (OUTUNI,1140) TOLC GO TO 200 C ENDIF C C -- SET ECHO MODE C IF (BUFFER(5:9).EQ.'ECHO ') THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP * ,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I) * ,I=1,4),BLANK,RIGHTP,COLON IF (BUFFER(10:11).EQ.'ON') ECHO = .TRUE. IF (BUFFER(10:12).EQ.'OFF') ECHO = .FALSE. IF (ECHO) BUFFER(1:7) = '^O^N. ' IF (.NOT.ECHO) BUFFER(1:7) = '^O^F^F.' WRITE (OUTUNI,1270) TOLC,(BUFFER(I:I),I=1,7) 1270 FORMAT (A2,' E^C^H^O ^M^O^D^E ^I^S ',7A1) WRITE (OUTUNI,1140) TOLC GO TO 200 C ENDIF C C -- SET PROMPT MODE C IF (BUFFER(5:11).EQ.'PROMPT ') THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP * ,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I) * ,I=1,4),BLANK,RIGHTP,COLON IF (BUFFER(12:13).EQ.'ON') PROMPT = .TRUE. IF (BUFFER(12:14).EQ.'OFF') PROMPT = .FALSE. IF (PROMPT) BUFFER(1:7) = '^O^N. ' IF (.NOT.PROMPT) BUFFER(1:7) = '^O^F^F.' WRITE (OUTUNI,1280) TOLC,(BUFFER(I:I),I=1,7) 1280 FORMAT (A2,' P^R^O^M^P^T ^M^O^D^E ^I^S ',7A1) WRITE (OUTUNI,1140) TOLC GO TO 200 C ENDIF C C -- SET RING MODE C IF (BUFFER(5:9).EQ.'RING ') THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP * ,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I) * ,I=1,4),BLANK,RIGHTP,COLON IF (BUFFER(10:11).EQ.'ON') BELL = .TRUE. IF (BUFFER(10:12).EQ.'OFF') BELL = .FALSE. IF (BELL) BUFFER(1:7) = '^O^N. ' IF (.NOT.BELL) BUFFER(1:7) = '^O^F^F.' WRITE (OUTUNI,1290) TOLC,(BUFFER(I:I),I=1,7) 1290 FORMAT (A2,' R^I^N^G ^M^O^D^E ^I^S ',7A1) WRITE (OUTUNI,1140) TOLC GO TO 200 C ENDIF C C -- SET DELAY TIME C IF (BUFFER(5:10).EQ.'DELAY ') THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP * ,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I) * ,I=1,4),BLANK,RIGHTP,COLON I = -1 OPEN (UNIT=SCRUNI,STATUS='SCRATCH',RECL=162) WRITE (SCRUNI,1300) BUFFER(11:14) 1300 FORMAT (A4) REWIND SCRUNI READ (SCRUNI,*,ERR=340) I 340 CLOSE (UNIT=SCRUNI,STATUS='DELETE') IF (I.GE.0.AND.I.LE.9999) THEN DELAY = I WRITE (OUTUNI,1310) TOLC,DELAY 1310 FORMAT (A2,' D^E^L^A^Y ^T^I^M^E ^S^E^T ^T^O ',I4,'.') ELSE WRITE (OUTUNI,1320) TOLC 1320 FORMAT (A2, * ' I^N^V^A^L^I^D ^D^E^L^A^Y ^S^P^E^C^I^F^I^E^D.') ENDIF WRITE (OUTUNI,1140) TOLC GO TO 200 C ENDIF C C -- SET WAIT COMMAND C IF (BUFFER(5:9).EQ.'WAIT ') THEN I = INDEX(MESSAG,BLANK) MESSAG(I:I) = COLON I = INDEX(MESSAG,BLANK)+1 BUFFER = BLANKS BUFFER(1:39) = MESSAG(I:I+38) DO 350 I = 1, 40 IF (BUFFER(I:I+1).EQ.BLANKS(1:2)) THEN BUFFER(I:I+1) = EOL GO TO 360 C ENDIF 350 CONTINUE 360 STRING(1:40) = BUFFER(1:40) STRLEN = INDEX(STRING,COLON)-1 IF (NAMLEN.LE.0) THEN STRING(1:8) = 'F^R^O^M:' STRLEN = INDEX(STRING,COLON)-1 ENDIF WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP * ,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I) * ,I=1,4),BLANK,RIGHTP,COLON WRITE (OUTUNI,1330) TOLC,(STRING(I:I),I=1,STRLEN),PERIOD 1330 FORMAT (A2,' W^A^I^T ^S^T^R^I^N^G ^S^E^T ^T^O ',42A1) WRITE (OUTUNI,1140) TOLC IF (OUTFIL(1:FL).EQ.OUTNAM) REWIND OUTUNI GO TO 200 C ENDIF ENDIF C C -- DO SCROLL C IF (BUFFER(1:6).EQ.'SCROLL') THEN STAFLG = .TRUE. NSTAT = 'S' WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP, * BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I),I=1 * ,4),BLANK,RIGHTP,COLON WRITE (OUTUNI,1340) TOLC 1340 FORMAT (A2,' E^N^T^E^R^I^N^G ^S^C^R^O^L^L ^M^O^D^E.') WRITE (OUTUNI,1140) TOLC IF (OUTFIL(1:FL).EQ.OUTNAM) REWIND OUTUNI C C -- CREATE STACK FILE C OPEN (UNIT=STKUNI,FILE=STKFIL,STATUS='UNKNOWN',FORM= * 'UNFORMATTED') REWIND STKUNI WRITE (STKUNI) NUMLIN,OUTFIL,EDITOR,CONFIL,NOVICE,PROMPT,INPFIL * ,ECHO,DELAY,PROFIL,BELL,STRING,TIMER,BRDTIM REWIND STKUNI CLOSE (UNIT=STKUNI,STATUS='KEEP') GO TO 70 C ENDIF C C -- MONITOR MODE C IF (BUFFER(1:7).EQ.'MONITOR'.AND.UN(1:UNLEN).EQ.CUN(1:CUNLEN)) * THEN STAFLG = .TRUE. NSTAT = 'M' WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP, * BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I),I=1 * ,4),BLANK,RIGHTP,COLON WRITE (OUTUNI,1350) TOLC 1350 FORMAT (A2,' E^N^T^E^R^I^N^G ^M^O^N^I^T^O^R ^M^O^D^E.') WRITE (OUTUNI,1140) TOLC IF (OUTFIL(1:FL).EQ.OUTNAM) REWIND OUTUNI GO TO 70 C ENDIF C C -- DO DELAY C IF (BUFFER(1:5).EQ.'DELAY') THEN I = DELAY PPREQ = O"03201520000600000000".OR.(LOCF(I).AND.MASK18) CALL REQPP (PPREQ) GO TO 200 C ENDIF IF (BUFFER(1:4).EQ.'WAIT') THEN WAIT = .TRUE. GO TO 200 C ENDIF C C -- JOIN CONFERENCE: CHANGES USER'S CONFERENCE C IF (BUFFER(1:5).EQ.'JOIN ') THEN BUFFER = BLANKS I = INDEX(MESSAG,BLANK)+1 BUFFER(1:39) = MESSAG(I:I+38) DO 370 I = 1, 40 IF (BUFFER(I:I+1).EQ.BLANKS(1:2)) THEN BUFFER(I:I+1) = EOL GO TO 380 C ENDIF 370 CONTINUE 380 NCONFR(1:40) = BUFFER(1:40) NCONLN = INDEX(NCONFR,COLON)-1 IF (NCONLN.LE.0) THEN NCONFR(1:9) = 'R^O^O^T::' NCONLN = INDEX(NCONFR,COLON)-1 ENDIF SWITCH = .TRUE. WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP, * BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I),I=1 * ,4),BLANK,RIGHTP,COLON WRITE (OUTUNI,1360) TOLC,(NCONFR(I:I),I=1,NCONLN),PERIOD 1360 FORMAT (A2,' J^O^I^N^I^N^G ^C^O^N^F^E^R^E^N^C^E ',42A1) WRITE (OUTUNI,1140) TOLC IF (OUTFIL(1:FL).EQ.OUTNAM) REWIND OUTUNI C C -- FLUSH MESSAGE BUFFER AND ADD NOTICE C MSGLEN = 26 C C -- MAKE SURE MESSAGE EXITS C INQUIRE (FILE=MSGFIL,OPENED=OK) IF (.NOT.OK) OPEN (UNIT=MSGUNI,FILE=MSGFIL,STATUS='UNKNOWN', * RECL=162) C MESSAG(1:MSGLEN) = ' ^L^O^G^G^E^D ^O^F^F ^O^F ' BUFFER(1:7) = 'F^R^O^M' C WRITE (MSGUNI,1370) (BUFFER(I:I),I=1,7),BLANK,(CNAME(I:I),I=1, * CNAMLN),BLANK,LEFTP,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH, * BLANK,(CJSN(I:I),I=1,4),BLANK,RIGHTP,COLON C WRITE (MSGUNI,1370) BLANK,(NAME(I:I),I=1,NAMLEN),BLANK,LEFTP, * BLANK,(UN(I:I),I=1,UNLEN),BLANK,SLASH,BLANK,(JSN(I:I),I=1,4) * ,BLANK,RIGHTP,(MESSAG(I:I),I=1,MSGLEN),(CONFER(I:I),I=1, * CONLEN),PERIOD WRITE (MSGUNI,1370) BLANK 1370 FORMAT (160A1) GO TO 240 C ENDIF C C -- SHOW: MEMBERS, CONFERENCES, ALL C IF (BUFFER(1:5).EQ.'SHOW ') THEN C C -- RESET FLAGS C MEMFLG = .FALSE. CONFLG = .FALSE. ALLFLG = .FALSE. C IF (BUFFER(6:12).EQ.'MEMBERS') THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP * ,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I) * ,I=1,4),BLANK,RIGHTP,COLON WRITE (OUTUNI,1380) TOLC 1380 FORMAT (A2,' J^S^N U^N N^A^M^E') MEMFLG = .TRUE. ENDIF C IF (BUFFER(6:8).EQ.'ALL'.AND.UN.EQ.CUN) THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP * ,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I) * ,I=1,4),BLANK,RIGHTP,COLON WRITE (OUTUNI,1390) TOLC 1390 FORMAT (A2,' J^S^N U^N S^T^A^T^U^S P^A^S^S^W^R^D ', * 'C^O^N^F^E^R^E^N^C^E') ALLFLG = .TRUE. ENDIF C IF (BUFFER(6:11).EQ.'CONFER') THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP * ,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I) * ,I=1,4),BLANK,RIGHTP,COLON WRITE (OUTUNI,1400) TOLC 1400 FORMAT (A2,' U^S^E^R^S C^O^N^F^E^R^E^N^C^E ^N^A^M^E') CONFLG = .TRUE. ENDIF C C -- IF NO OPTION IS SELECTED, BRANCH C IF (.NOT.(MEMFLG.OR.ALLFLG.OR.CONFLG)) GO TO 450 C C -- DO REQUEST C I = I+1 IF (CONFLG) THEN OPEN (UNIT=SCRUNI,FILE=SCRFIL,STATUS='UNKNOWN',ACCESS= * 'DIRECT',FORM='UNFORMATTED',RECL=5) NEXREC = 1 WRITE (SCRUNI,REC=NEXREC) BLANKS(1:50) ENDIF C 390 CALL PF ('ATTACH',USRFIL(1:FL),USRFIL(1:FL),'UN',CUN(1:CUNLEN), * 'PW',CPSWRD,'RC',PFERR,'M','R') IF (PFERR.EQ.1) GO TO 390 C C -- OPEN IT AS A DIRECT ACCESS DEVICE C OPEN (UNIT=USRUNI,FILE=USRFIL,STATUS='OLD',ACCESS='DIRECT',RECL * =16,FORM='UNFORMATTED') C C -- THE FIRST LINE IS THE NUMBER OF ENTRIES C READ (USRUNI,REC=1) NUMBER C C -- CYCLE THROUGH THE LIST, EXTRACTING INFO C DO 420 I = 2, NUMBER C C -- READ THE UN, FILENAME, PASSWORD, CONFERENCE, AND STATUS C READ (USRUNI,REC=I) UTIME,UNAME,UJSN,UUN,URCVFL,UPSSWR, * UCONFR,USTAT,UFAMLY C C -- MAKE SURE RECORD ISN'T EMPTY C IF (UUN(1:1).EQ.BLANK) GO TO 420 C C -- CLEAR COLONS FROM VALUES C J = INDEX(UUN,COLON) UUN(J:10) = BLANKS(J:10) J = INDEX(UNAME,COLON) UNAME(J:40) = BLANKS(J:40) J = INDEX(UCONFR,COLON) UCONFR(J:40) = BLANKS(J:40) C C -- IF ALL, WRITE THE WORKS C IF (ALLFLG) THEN WRITE (OUTUNI,1410) TOLC,UJSN(1:4),UUN(1:7),USTAT,UPSSWR( * 1:7),UCONFR(1:39) 1410 FORMAT (A2,1X,A4,1X,A7,3X,A1,3X,A7,1X,A39) ENDIF C C -- IF MEMBERS, ONLY SHOW PERSONS ON THE SAME CONFERENCE C IF (MEMFLG) THEN C C IF( UCONFR( 1: CONLEN + 1 ) .EQ. BLANK .AND. C IF (UCONFR(1:CONLEN).EQ.CONFER(1:CONLEN).AND.USTAT.NE.'M' * .AND.UFAMLY(1:FAMLEN).EQ.FAMILY(1)(1:FAMLEN)) THEN WRITE (OUTUNI,1420) TOLC,UJSN(1:4),UUN(1:7),UNAME(1:40 * ) 1420 FORMAT (A2,1X,A4,1X,A7,1X,A40) ENDIF ENDIF C C -- SHOW CONFERENCES ( EXCEPT FOR INVISIBLES ) C IF (CONFLG) THEN IF (UCONFR(1:1).NE.'-') THEN DO 400 K = 1, NEXREC READ (SCRUNI,REC=K) SCONFR,NUMCON IF (UCONFR(1:39).EQ.SCONFR(1:39)) THEN NUMCON = NUMCON+1 WRITE (SCRUNI,REC=K) UCONFR,NUMCON GO TO 410 C ENDIF 400 CONTINUE NUMCON = 1 WRITE (SCRUNI,REC=NEXREC) UCONFR,NUMCON NEXREC = NEXREC+1 410 CONTINUE ENDIF ENDIF 420 CONTINUE C C -- RETURN THE DIRECTORY C CLOSE (UNIT=USRUNI,STATUS='DELETE') C C -- IF CONFLG, PRINT CONFERENCES C IF (CONFLG) THEN NEXREC = NEXREC-1 DO 430 K = 1, NEXREC READ (SCRUNI,REC=K) SCONFR,NUMCOM WRITE (OUTUNI,1430) TOLC,NUMCOM,SCONFR(1:39) 1430 FORMAT (A2,2X,I3,2X,A39) 430 CONTINUE ENDIF C C -- DESTROY SCRFIL C CLOSE (UNIT=SCRUNI,STATUS='DELETE') C WRITE (OUTUNI,1140) TOLC IF (OUTFIL(1:FL).EQ.OUTNAM) REWIND OUTUNI GO TO 200 C ENDIF C C -- BYE COMMAND C 440 IF (BUFFER(1:3).EQ.'BYE') THEN BYEFLG = .TRUE. BUFFER(1:4) = 'EXIT' ENDIF C C -- EXIT COMMAND C IF (BUFFER(1:4).EQ.'EXIT') THEN EXTFLG = .TRUE. SWITCH = .TRUE. C C -- FLUSH MESSAGE BUFFER AND ADD NOTICE C MSGLEN = 26 C C -- MAKE SURE MESSAGE EXITS C INQUIRE (FILE=MSGFIL,OPENED=OK) IF (.NOT.OK) OPEN (UNIT=MSGUNI,FILE=MSGFIL,STATUS='UNKNOWN', * RECL=162) C MESSAG(1:MSGLEN) = ' ^L^O^G^G^E^D ^O^F^F ^O^F ' BUFFER(1:7) = 'F^R^O^M' C WRITE (MSGUNI,1370) (BUFFER(I:I),I=1,7),BLANK,(CNAME(I:I),I=1, * CNAMLN),BLANK,LEFTP,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH, * BLANK,(CJSN(I:I),I=1,4),BLANK,RIGHTP,COLON C WRITE (MSGUNI,1370) BLANK,(NAME(I:I),I=1,NAMLEN),BLANK,LEFTP, * BLANK,(UN(I:I),I=1,UNLEN),BLANK,SLASH,BLANK,(JSN(I:I),I=1,4) * ,BLANK,RIGHTP,(MESSAG(I:I),I=1,MSGLEN),(CONFER(I:I),I=1, * CONLEN),PERIOD WRITE (MSGUNI,1370) BLANK GO TO 240 C ENDIF C C -- EDIT MESSAG BUFFER C IF (BUFFER(1:4).EQ.'EDIT') THEN BUFFER(1:160) = BLANKS(1:160) BUFFER(1:13) = '!XXXXEDT.' BUFFER(2:5) = JSN(1:4) REWIND MSGUNI CLOSE (UNIT=MSGUNI,STATUS='KEEP') OPEN (UNIT=EDTUNI,FILE=EDTFIL,STATUS='UNKNOWN',RECL=162) REWIND EDTUNI WRITE (EDTUNI,1440) JSN(1:4),EDITOR,JSN(1:4),JSN(1:4),JSN(1:4), * JSN(1:4),JSN(1:4),JSN(1:4) 1440 FORMAT ('.PROC,',A4,'EDT.',/,'$',A17,/,'$RETURN,',A4,'TMP.',/, * '$COPYSBF,SLUGMSG,',A4,'TMP.',/,'$REWIND,',A4,'TMP,SLUGMSG.' * ,/,'$COPY,',A4,'TMP,SLUGMSG.',/,'$RETURN,',A4,'TMP,',A4, * 'EDT.',/,'$REWIND,SLUGMSG.',/,'$REVERT,NOLIST.') REWIND EDTUNI CLOSE (UNIT=EDTUNI,STATUS='KEEP') PPREQ = O"24143020000300000001" CALL REQPP (PPREQ) ENDIF C C -- WRITE STACK FILE FOR NOS PASS THROUGH C 450 IF (BUFFER(1:1).EQ.'!') THEN ICOMMA = INDEX(BUFFER,',') IF (INDEX(BUFFER,'BYE').GT.0.OR.INDEX(BUFFER,'HELLO').GT.0) * THEN IF (ICOMMA.EQ.0) THEN BUFFER(1:3) = 'BYE' GO TO 440 C ELSE MESSAG(ICOMMA:160) = BUFFER(ICOMMA:160) BUFFER(2:7) = '$APPSW' BUFFER(8:81) = MESSAG(ICOMMA:ICOMMA+72) ENDIF ENDIF BUFFER(1:159) = BUFFER(2:160) BUFFER(160:160) = '.' IF (.NOT.START) THEN OPEN (UNIT=STKUNI,FILE=STKFIL,STATUS='UNKNOWN',FORM= * 'UNFORMATTED') REWIND STKUNI WRITE (STKUNI) NUMLIN,OUTFIL,EDITOR,CONFIL,NOVICE,PROMPT, * INPFIL,ECHO,DELAY,PROFIL,BELL,STRING,TIMER,BRDTIM REWIND STKUNI CLOSE (UNIT=STKUNI,STATUS='KEEP') ENDIF C C PRINT *, BUFFER( 1: 160 ) C REWIND OUTUNI C PPREQ = O"24032320000500000000".OR.(LOCF(BUFFER).AND.MASK18) CALL REQPP (PPREQ) C CALL EXIT ENDIF C C -- DO HELP C IF (BUFFER(1:4).EQ.'HELP') THEN CALL PF ('GET',HLPFIL,HLPFIL,'UN',CUN(1:CUNLEN),'RC',PFERR) WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP, * BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I),I=1 * ,4),BLANK,RIGHTP,COLON C C -- SEE WHAT THE SUBJECT IS C IEND = INDEX(BUFFER,BLANKS(1:2)) IF (IEND.LE.0) IEND = 160 BUFFER(IEND:IEND) = COLON IF (BUFFER(5:5).NE.COLON) THEN BUFFER(5:5) = ASTER ELSE BUFFER(5:9) = ENDHLP ENDIF IF (BUFFER(5:8).EQ.'*ALL') BUFFER(6:6) = COLON LRQST = INDEX(BUFFER,COLON)-1 C C -- SET FLAGS C HLPFLG = .FALSE. FNDHLP = .FALSE. C OPEN (UNIT=HLPUNI,FILE=HLPFIL,STATUS='UNKNOWN',RECL=162) 460 READ (HLPUNI,1450,END=470) MESSAG(1:160) 1450 FORMAT (A160) IF (MESSAG(1:1).NE.ASTER) THEN IF (HLPFLG) WRITE (OUTUNI,1460) TOLC,MESSAG(1:160) 1460 FORMAT (A2,A160) ELSE IF (MESSAG(1:5).EQ.ENDHLP) THEN IF (FNDHLP) THEN GO TO 470 C ELSE HLPFLG = .TRUE. ENDIF ELSEIF (BUFFER(5:LRQST).EQ.MESSAG(1:LRQST-4)) THEN HLPFLG = .TRUE. FNDHLP = .TRUE. ELSE HLPFLG = .FALSE. ENDIF ENDIF GO TO 460 C 470 CLOSE (UNIT=HLPUNI,STATUS='KEEP') WRITE (OUTUNI,1140) TOLC IF (OUTFIL(1:FL).EQ.OUTNAM) REWIND OUTUNI GO TO 200 C ENDIF C C -- INPUT REDIRECTION C IF (BUFFER(1:1).EQ.LEFTA) THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP, * BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I),I=1 * ,4),BLANK,RIGHTP,COLON C C -- SEE IF DEFAULT C IF (BUFFER(2:2).EQ.COLON.OR.BUFFER(2:2).EQ.BLANK) BUFFER(2:8) = * INPNAM C C -- TEST SPECIFIED FILE C OPEN (UNIT=SCRUNI,FILE=BUFFER(2:8),STATUS='UNKNOWN',IOSTAT= * IOSTAT,RECL=162) IF (IOSTAT.EQ.0) THEN CLOSE (UNIT=SCRUNI,STATUS='KEEP') CLOSE (UNIT=INPUNI,STATUS='KEEP') INPFIL(1:FL) = BUFFER(2:8) WRITE (OUTUNI,1470) TOLC,INPFIL(1:FL) 1470 FORMAT (A2,' I^N^P^U^T ^U^S^I^N^G ',A7) OPEN (UNIT=INPUNI,FILE=INPFIL(1:FL),STATUS='UNKNOWN',RECL= * 162) ELSE CLOSE (UNIT=SCRUNI,STATUS='DELETE') WRITE (OUTUNI,1480) TOLC,BUFFER(2:8) 1480 FORMAT (A2,' I^N^V^A^L^I^D ^F^I^L^E ^N^A^M^E ',A7) ENDIF WRITE (OUTUNI,1140) TOLC GO TO 200 C ENDIF C C -- OUTPUT REDIRECTION C IF (BUFFER(1:1).EQ.RIGHTA) THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP, * BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I),I=1 * ,4),BLANK,RIGHTP,COLON C C -- SEE IF DEFAULT C IF (BUFFER(2:2).EQ.COLON.OR.BUFFER(2:2).EQ.BLANK) BUFFER(2:8) = * OUTNAM C C -- TEST SPECIFIED FILE C OPEN (UNIT=SCRUNI,FILE=BUFFER(2:8),STATUS='UNKNOWN',IOSTAT= * IOSTAT,RECL=162) IF (IOSTAT.EQ.0) THEN CLOSE (UNIT=SCRUNI,STATUS='KEEP') OUTFIL(1:FL) = BUFFER(2:8) WRITE (OUTUNI,1490) TOLC,OUTFIL(1:FL) 1490 FORMAT (A2,' O^U^T^P^U^T ^U^S^I^N^G ',A7) WRITE (OUTUNI,1140) TOLC CLOSE (ERRUNI,STATUS='KEEP') CLOSE (UNIT=OUTUNI,STATUS='KEEP') OPEN (UNIT=OUTUNI,FILE=OUTFIL,STATUS='UNKNOWN',RECL=162) OPEN (UNIT=ERRUNI,FILE=OUTNAM,STATUS='UNKNOWN',RECL=162) ELSE CLOSE (UNIT=SCRUNI,STATUS='DELETE') WRITE (OUTUNI,1480) TOLC,BUFFER(2:8) WRITE (OUTUNI,1140) TOLC ENDIF GO TO 200 C ENDIF C C -- BELL COMMAND C IF (BUFFER(1:4).EQ.'BELL') THEN IF (BUFFER(5:5).EQ.'=') THEN IF (BELL) THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK, * LEFTP,BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK, * (CJSN(I:I),I=1,4),BLANK,RIGHTP,COLON WRITE (OUTUNI,1500) TOLC,BUFFER(6:9) 1500 FORMAT (A2,1X,A4,' ^I^S ^R^I^N^G^I^N^G ^Y^O^U.') ELSE GO TO 200 C ENDIF ENDIF WRITE (OUTUNI,1510) DING 1510 FORMAT (A4) WRITE (OUTUNI,1140) TOLC GO TO 200 C ENDIF C C -- COMMENT FILTER C IF (BUFFER(1:1).EQ.ASTER) GO TO 200 C C -- RING COMMAND C IF (BUFFER(1:5).EQ.'RING ') THEN RING = .TRUE. UJSN(1:4) = BUFFER(6:9) WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP, * BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I),I=1 * ,4),BLANK,RIGHTP,COLON WRITE (OUTUNI,1520) TOLC,UJSN(1:4) 1520 FORMAT (A2,' R^I^N^G^I^N^G ',A4,'.') WRITE (OUTUNI,1140) TOLC BUFFER(1:1) = DOLLAR MESSAG(1:14) = '$XXXXBELL=XXXX' MESSAG(2:5) = UJSN(1:4) MESSAG(11:14) = JSN(1:4) ENDIF C C -- MSGFLG COMMAND C IF (BUFFER(1:1).EQ.DOLLAR.AND.(UN(1:UNLEN).EQ.CUN(1:CUNLEN).OR. * RING)) THEN RING = .FALSE. OPEN (UNIT=SNDUNI,FILE=SNDFIL,STATUS='UNKNOWN',RECL=162) REWIND SNDUNI WRITE (SNDUNI,1530) MESSAG(1:160) 1530 FORMAT (A160) REWIND SNDUNI CLOSE (UNIT=SNDUNI,STATUS='KEEP') CLOSE (UNIT=MSGUNI,STATUS='KEEP') GO TO 130 C ENDIF C C -- SEE IF ENTRY IS A USER-DEFINED COMMAND C CALL PF ('GET',CONFIL,CONFIL,'UN',UN(1:UNLEN),'RC',PFERR) C C -- IF NO USER FILE, GET THE SYSTEM FILE C IF (PFERR.NE.0) THEN CONFIL = 'SLUGCON' CALL PF ('GET',CONFIL,CONFIL,'UN',CUN(1:CUNLEN),'RC',PFERR) ENDIF C C -- ALL IS WELL C OPEN (UNIT=CONUNI,FILE=CONFIL,STATUS='UNKNOWN',RECL=162) 480 READ (CONUNI,1530,END=490) BUFFER(1:160) C C -- SEE IF SYNTAX IS CORRECT C IEQ = INDEX(BUFFER(1:160),'=')+1 ISEMI = INDEX(BUFFER(1:160),';')-1 ILEN = ISEMI-IEQ+1 IF (IEQ.EQ.0.OR.ISEMI.EQ.0.OR.IEQ.GT.ISEMI.OR.ILEN.LT.0) GO TO 480 C C -- SEE IF COMMAND MATCHES C IF (MESSAG(1:IEQ-2).NE.BUFFER(1:IEQ-2)) GO TO 480 C C -- IF IT MATCHES, REBUILD COMMAND LINE C BUFFER(1:ILEN) = BUFFER(IEQ:ISEMI) ILEN = ILEN+1 BUFFER(ILEN:ILEN) = BLANK ILEN = ILEN+1 BUFFER(ILEN:162) = COLONS(ILEN:162) C C -- FIND BLEN AND MLEN C LB = 162-ILEN+1 LM = 162-IEQ+1 BLEN = ILEN+MIN(LB,LM)-1 MLEN = IEQ+MIN(LB,LM)-1 C C -- COPY COMMAND AND ARGUMENTS C BUFFER(ILEN:BLEN) = MESSAG(IEQ:MLEN) MESSAG(1:162) = BUFFER(1:162) CLOSE (UNIT=CONUNI,STATUS='DELETE') GO TO 210 C 490 CLOSE (UNIT=CONUNI,STATUS='DELETE') C C -- SUGGEST HELP COMMAND, IF NOVICE C IF (NOVICE) THEN WRITE (OUTUNI,1010) TOLC,(CNAME(I:I),I=1,CNAMLN),BLANK,LEFTP, * BLANK,(CUN(I:I),I=1,CUNLEN),BLANK,SLASH,BLANK,(CJSN(I:I),I=1 * ,4),BLANK,RIGHTP,COLON WRITE (OUTUNI,1540) TOLC 1540 FORMAT (A2,' T^Y^P^E "^H^E^L^P" ^F^O^R ^A ^L^I^S^T ^O^F ', * '^C^O^M^M^A^N^D^S.') WRITE (OUTUNI,1140) TOLC IF (OUTFIL(1:FL).EQ.OUTNAM) REWIND OUTUNI C GO TO 200 C C -- IF NOT A NOVICE, ASSUME ITS MESSAGE TEXT. C ELSE BUFFER(1:159) = MESSAG(1:159) MESSAG(1:1) = BLANK MESSAG(2:160) = BUFFER(1:159) GO TO 210 C ENDIF END IDENT BOGUS ENTRY REQPP SYSCOM B1 REQPP BSS 1 SB1 1 SB2 X1 SA2 B2 SX7 0 IX7 X2+X7 SA7 RA.MTR NO XJ RA.MTR NO EQ REQPP END DATA,SLUGHLP *BELL: B^E^L^L S^E^N^D ^A ^C^O^N^T^R^O^L-G ^T^O ^T^H^E ^U^S^E^R'^S ^T^E^R^M^I^N^A^L. *BROADCAST: B^R^O^A^D^C^A^S^T S^E^N^D^S ^A ^M^E^S^S^A^G^E ^T^O ^A^L^L ^C^O^N^F^E^R^E^N^C^E^S. T^H^I^S ^C^O^M^M^A^N^D ^M^A^Y ^B^E ^U^S^E^D ^O^N^L^Y ^O^N^C^E ^P^E^R ^M^I^N^U^T^E. *BYE: B^Y^E L^O^G ^O^F^F S^L^U^G^N^E^T ( ^A^N^D ^S^Y^S^T^E^M ). *DELAY: D^E^L^A^Y R^O^L^L^S ^O^U^T ^T^H^E ^T^E^R^M^I^N^A^L ^F^O^R ^A ^P^E^R^I^O^D ^O^F ^T^I^M^E ( ^D^E^F^A^U^L^T ^I^S 15 ^S^E^C^O^N^D^S ). T^H^I^S ^T^I^M^E ^C^A^N ^B^E ^C^H^A^N^G^E^D ^U^S^I^N^G ^T^H^E 'S^E^T ^D^E^L^A^Y' ^C^O^M^M^A^N^D. *EDIT: E^D^I^T E^D^I^T ^M^E^S^S^A^G^E ^B^U^F^F^E^R. T^H^E ^D^E^F^A^U^L^T ^E^D^I^T^O^R ^I^S FSE. T^O ^C^H^A^N^G^E ^T^H^E ^D^E^F^A^U^L^T ^E^D^I^T^O^R, ^S^E^E ^T^H^E 'S^E^T ^E^D^I^T^O^R' ^C^O^M^M^A^N^D. *EXIT: E^X^I^T E^X^I^T S^L^U^G^N^E^T ^B^U^T ^R^E^M^A^I^N ^O^N ^S^Y^S^T^E^M. *HELP: H^E^L^P ^N D^I^S^P^L^A^Y^S ^H^E^L^P ^F^O^R ^N, ^W^H^E^R^E ^N ^I^S ^A S^L^U^G^N^E^T ^C^O^M^M^A^N^D ^O^R ^T^O^P^I^C. A ^L^I^S^T ^O^F ^T^O^P^I^C^S ^C^A^N ^B^E ^O^B^T^A^I^N^E^D ^B^Y ^T^Y^P^I^N^G '^H^E^L^P' ^W^I^T^H ^N^O ^A^R^G^U^M^E^N^T^S. T^O ^D^I^S^P^L^A^Y ^A^L^L ^A^V^A^I^L^A^B^L^E ^H^E^L^P, ^S^P^E^C^I^F^Y '^A^L^L' ^F^O^R ^N. *JOIN: J^O^I^N ^N L^E^A^V^E ^C^U^R^R^E^N^T ^C^O^N^F^E^R^E^N^C^E ^A^N^D ^J^O^I^N ^O^R ^C^R^E^A^T^E ^N, ^W^H^E^R^E ^N ^I^S ^A ^C^O^N^F^E^R^E^N^C^E ^N^A^M^E. J^O^I^N ^W^I^L^L ^C^R^E^A^T^E ^N^E^W ^C^O^N^F^E^R^E^N^C^E^S. I^F ^A ^C^O^N^F^E^R^E^N^C^E ^N^A^M^E ^B^E^G^I^N^S ^W^I^T^H '-', ^I^T ^W^I^L^L ^N^O^T ^B^E ^D^I^S^P^L^A^Y^E^D ^B^Y ^A "S^H^O^W ^C^O^N^F^E^R^E^N^C^E^S" ^C^O^M^M^A^N^D. I^F ^N^O ^C^O^N^F^E^R^E^N^C^E ^N^A^M^E ^I^S ^G^I^V^E^N, ^T^H^E ^C^O^N^F^E^R^E^N^C^E "R^O^O^T" ^I^S ^J^O^I^N^E^D. *REWIND: R^E^W^I^N^D R^E^W^I^N^D^S ^T^H^E ^I^N^P^U^T ^S^T^R^E^A^M. *RING: R^I^N^G ^N S^E^N^D^S ^A ^C^O^N^T^R^O^L-G ^S^E^Q^U^E^N^C^E ^T^O ^N, ^W^H^E^R^E ^N ^I^S ^T^H^E JSN. *SCROLL: S^C^R^O^L^L E^N^T^E^R^S ^S^C^R^O^L^L ^M^O^D^E. S^L^U^G^N^E^T ^W^I^L^L ^C^H^E^C^K ^A^N^D ^D^I^S^P^L^A^Y ^A^N^Y ^N^E^W ^M^E^S^S^A^G^E^S ^A^F^T^E^R ^W^A^I^T^I^N^G ^F^O^R ^A ^P^E^R^I^O^D ^O^F ^T^I^M^E ( ^D^E^F^A^U^L^T ^I^S 15 ^S^E^C^O^N^D^S ). T^H^E ^T^I^M^E ^C^A^N ^B^E ^C^H^A^N^G^E^D ^W^I^T^H ^T^H^E 'S^E^T ^D^E^L^A^Y' ^C^O^M^M^A^N^D. U^S^E ^T^H^E ^U^S^E^R ^B^R^E^A^K 2 ^C^H^A^R^A^C^T^E^R ( ^U^S^U^A^L^L^Y C^O^N^T^R^O^L-T ) ^T^O ^E^X^I^T ^S^C^R^O^L^L ^M^O^D^E. *SEND: S^E^N^D ^N S^E^N^D ^A ^P^R^I^V^A^T^E ^M^E^S^S^A^G^E ^T^O ^N, ^W^H^E^R^E ^N ^I^S ^A JSN. I^F ^N ^I^S ^B^L^A^N^K, ^M^E^S^S^A^G^E ^W^I^L^L ^B^E ^B^R^O^A^D^C^A^S^T ^T^O ^A^L^L ^C^O^N^F^E^R^E^N^C^E ^M^E^M^B^E^R^S. *SET DELAY: S^E^T ^D^E^L^A^Y ^N S^E^T ^T^H^E ^D^E^L^A^Y ^T^I^M^E ^T^O ^N ^S^E^C^O^N^D^S, ^W^H^E^R^E ^N ^I^S ^A^N ^I^N^T^E^G^E^R ^B^E^T^W^E^E^N 0 ^A^N^D 9999> T^H^E ^D^E^L^A^Y ^T^I^M^E ^I^S ^U^S^E^D ^B^Y ^S^C^R^O^L^L ^M^O^D^E ^A^N^D ^T^H^E ^D^E^L^A^Y ^C^O^M^M^A^N^D. *SET ECHO: S^E^T ^E^C^H^O ^N S^E^T ^E^C^H^O ^M^O^D^E ^T^O ^N, ^W^H^E^R^E ^N ^I^S ON ^O^R OFF. I^F ^E^C^H^O ^M^O^D^E ^I^S ^S^E^T ^T^O OFF, ^M^E^S^S^A^G^E^S ^S^E^N^T ^B^Y ^T^H^E ^U^S^E^R ^A^N^D ^L^I^N^E^S ^F^R^O^M ^A ^R^E^D^I^R^E^C^T^E^D ^I^N^P^U^T ^F^I^L^E ^A^R^E ^N^O^T ^E^C^H^O^E^D. *SET EDITOR: S^E^T ^E^D^I^T^O^R ^N S^E^T ^T^H^E ^M^E^S^S^A^G^E ^E^D^I^T^O^R ^T^O ^N, ^W^H^E^R^E ^N ^I^S EDIT, FSE, ^O^R XEDIT. T^H^E ^M^E^S^S^A^G^E ^E^D^I^T^O^R ^I^S FSE ^B^Y ^D^E^F^A^U^L^T. *SET NAME: S^E^T ^N^A^M^E ^N S^E^T ^T^H^E ^U^S^E^R'^S ^N^A^M^E ^T^O ^N, ^W^H^E^R^E ^N ^I^S ^A ^T^E^X^T ^S^T^R^I^N^G. I^F ^N^O ^N^A^M^E ^I^S ^S^P^E^C^I^F^I^E^D, ^T^H^E ^N^A^M^E ^W^I^L^L ^B^E ^S^E^T ^T^O 'A^N^O^N^Y^M^O^U^S'. *SET NOVICE: S^E^T ^N^O^V^I^C^E ^N S^E^T ^N^O^V^I^C^E ^M^O^D^E ^T^O ^N, ^W^H^E^R^E ^N ^I^S ON ^O^R OFF. W^H^E^N ^N^O^V^I^C^E ^M^O^D^E ^I^S OFF, ^I^T ^I^S ^N^O ^L^O^N^G^E^R ^N^E^C^E^S^S^A^R^Y ^T^O ^P^R^E^C^E^D^E ^M^E^S^S^A^G^E ^T^E^X^T ^W^I^T^H ^A ^B^L^A^N^K. *SET PROMPT: S^E^T ^P^R^O^M^P^T ^N S^E^T ^P^R^O^M^P^T ^M^O^D^E ^T^O ^N, ^W^H^E^R^E ^N ^I^S ON ^O^R OFF. W^H^E^N ^P^R^O^M^P^T ^M^O^D^E ^I^S OFF, ^T^H^E ^N^A^M^E ^O^F ^T^H^E ^C^U^R^R^E^N^T ^C^O^N^F^E^R^E^N^C^E ^I^S ^N^O ^L^O^N^G^E^R ^P^R^I^N^T^E^D ^O^N ^A^N ^I^N^P^U^T ^R^E^Q^U^E^S^T. *SET RING: S^E^T ^R^I^N^G ^N S^E^T ^R^I^N^G ^M^O^D^E ^T^O ^N, ^W^H^E^R^E ^N ^I^S ON ^O^R OFF. W^H^E^N ^R^I^N^G ^M^O^D^E ^I^S OFF, ^T^H^E ^U^S^E^R'^S ^T^E^R^M^I^N^A^L ^W^I^L^L ^N^O^T ^R^E^S^P^O^N^D ^T^O 'R^I^N^G' ^C^O^M^M^A^N^D^S ^G^I^V^E^N ^B^Y ^O^T^H^E^R ^U^S^E^R^S. *SET TIMER: S^E^T ^T^I^M^E^R ^N S^E^T^S ^T^I^M^E^R ^M^O^D^E ^T^O ^N, ^W^H^E^R^E ^N ^I^S ON ^O^R OFF. W^H^E^N ^T^I^M^E^R ^M^O^D^E ^I^S ON, ^A ^T^I^M^E ^S^T^A^M^P ^I^S ^S^E^N^T ^T^O ^T^H^E ^O^U^T^P^U^T ^S^T^R^E^A^M ^W^H^I^L^E ^I^N ^S^C^R^O^L^L ^A^N^D ^W^A^I^T ^W^A^I^T ^M^O^D^E^S. *SET USER: S^E^T ^U^S^E^R ^N S^E^T^S ^T^H^E ^U^S^E^R ^C^O^N^F^I^G^U^R^A^T^I^O^N ^F^I^L^E ^N^A^M^E ^T^O ^N. T^H^E ^D^E^F^A^U^L^T ^N^A^M^E ^I^S SLUGCON. T^H^E ^U^S^E^R ^C^O^N^F^I^G^U^R^A^T^I^O^N ^F^I^L^E ^S^H^O^U^L^D ^A^L^R^E^A^D^Y ^E^X^I^S^T ^A^N^D ^B^E ^A ^P^E^R^M^A^N^E^N^T ^F^I^L^E ( ^S^E^E ^T^H^E ^H^E^L^P ^E^N^T^R^Y ^F^O^R ^A ^D^E^S^C^R^I^P^T^I^O^N ^O^F ^T^H^E ^U^S^E^R ^C^O^N^F^I^G^U^R^A^T^I^O^N ^F^I^L^E ). *SET WAIT: S^E^T ^W^A^I^T ^N S^E^T^S ^T^H^E ^S^T^R^I^N^G ^U^S^E^D ^B^Y ^T^H^E '^W^A^I^T' ^C^O^M^M^A^N^D ^T^O ^N. T^H^E ^D^E^F^A^U^L^T ^S^T^R^I^N^G ^I^S "F^R^O^M". *SHOW CONFERENCES: S^H^O^W ^C^O^N^F^E^R^E^N^C^E^S D^I^S^P^L^A^Y^S ^A^C^T^I^V^E ^C^O^N^F^E^R^E^N^C^E^S ( ^E^X^C^E^P^T ^F^O^R ^C^O^N^F^E^R^E^N^C^E^S ^W^H^O^S^E ^N^A^M^E ^B^E^G^I^N^S ^W^I^T^H '-' ). *SHOW MEMBERS: S^H^O^W ^M^E^M^B^E^R^S D^I^S^P^L^A^Y^S ^T^H^E JSN, UN, ^A^N^D ^N^A^M^E ^O^F ^A^L^L ^M^E^M^B^E^R^S ^O^F ^Y^O^U^R ^C^U^R^R^E^N^T ^C^O^N^F^E^R^E^N^C^E. *WAIT: W^A^I^T E^N^T^E^R^S ^S^C^R^O^L^L ^M^O^D^E ^U^N^T^I^L ^A ^S^P^E^C^I^F^I^E^D ^T^E^X^T ^S^T^R^I^N^G ^I^S ^R^E^C^E^I^V^E^D. T^H^E ^D^E^F^A^U^L^T ^T^E^X^T ^S^T^R^I^N^G ^I^S "F^R^O^M". T^H^E ^S^T^R^I^N^G ^C^A^N ^B^E ^S^E^T ^W^I^T^H ^T^H^E 'S^E^T ^W^A^I^T' ^C^O^M^M^A^N^D. *NOS COMMANDS: !^N. P^A^S^S ^N ^T^O NOS ^F^O^R ^P^R^O^C^E^S^S^I^N^G, ^W^H^E^R^E ^N ^I^S ^A NOS ^C^O^M^M^A^N^D ( ^N ^S^H^O^U^L^D ^B^E ^F^O^L^L^O^W^E^D ^B^Y ^A ^P^E^R^I^O^D ). A^F^T^E^R ^T^H^E ^C^O^M^M^A^N^D ^H^A^S ^B^E^E^N ^P^R^O^C^E^S^S^E^D, S^L^U^G^N^E^T ^W^I^L^L ^R^E^S^U^M^E. *ENTERING COMMANDS AND TEXT: E^N^T^E^R^I^N^G C^O^M^M^A^N^D^S ^A^N^D M^E^S^S^A^G^E T^E^X^T A^L^L ^I^N^P^U^T ^S^T^A^R^T^I^N^G ^I^N ^C^O^L^U^M^N 1 ^W^I^L^L ^B^E ^I^N^T^E^R^P^R^E^T^E^D ^A^S S^L^U^G^N^E^T ^C^O^M^M^A^N^D^S. I^N^P^U^T ^I^N^T^E^N^D^E^D ^A^S ^M^E^S^S^A^G^E ^T^E^X^T ^S^H^O^U^L^D ^B^E^G^I^N ^I^N ^C^O^L^U^M^N 2. A ^B^L^A^N^K ^L^I^N^E ^O^R ^A "S^E^N^D" ^C^O^M^M^A^N^D ^W^I^L^L ^F^L^U^S^H ^T^H^E ^M^E^S^S^A^G^E ^B^U^F^F^E^R ^A^N^D ^S^E^N^D ^T^H^E ^T^E^X^T. I^F ^N^O^V^I^C^E ^M^O^D^E ^I^S ^S^E^T ^T^O OFF, ^M^E^S^S^A^G^E ^T^E^X^T ^D^O^E^S ^N^O^T ^H^A^V^E ^T^O ^B^E^G^I^N ^I^N ^C^O^L^U^M^N 2. H^O^W^E^V^E^R, ^I^F ^T^H^E ^T^E^X^T ^C^O^N^T^A^I^N^S ^A^N ^E^M^B^E^D^E^D ^C^O^M^M^A^N^D ^S^T^R^I^N^G ^S^T^A^R^T^I^N^G ^I^N ^C^O^L^U^M^N 1, S^L^U^G^N^E^T ^W^I^L^L ^A^T^T^E^M^P^T ^T^O ^P^R^O^C^E^S^S ^T^H^E ^C^O^M^M^A^N^D. *RESERVED CHARACTERS: R^E^S^E^R^V^E^D C^H^A^R^A^C^T^E^R^S S^L^U^G^N^E^T ^R^E^S^E^R^V^E^S ^T^H^E ^C^H^A^R^A^C^T^E^R^S '<', '>', '*', ^A^N^D '!' ^I^N ^C^O^L^U^M^N 1 ^F^O^R ^I^N^P^U^T ^R^E^D^I^R^E^C^T^I^O^N, ^O^U^T^P^U^T ^R^E^D^I^R^E^C^T^I^O^N, ^C^O^M^M^E^N^T^S, ^A^N^D N^O^S ^C^O^M^M^A^N^D ^F^L^A^G. *FILE REDIRECTION: F^I^L^E R^E^D^I^R^E^C^T^I^O^N S^L^U^G^N^E^T ^A^L^L^O^W^S ^R^E^D^I^R^E^C^T^I^O^N ^O^F ^T^H^E ^I^N^P^U^T ^A^N^D ^O^U^T^P^U^T ^S^T^R^E^A^M^S, ^U^S^I^N^G <^N ^O^R >^N, ^W^H^E^R^E ^N ^I^S ^A ^V^A^L^I^D ^N^A^M^E ^O^F ^A ^L^O^C^A^L N^O^S ^F^I^L^E ( >^N ^W^I^L^L ^C^R^E^A^T^E ^T^H^E ^F^I^L^E ). T^H^E ^O^U^T^P^U^T ^S^T^R^E^A^M ^I^S ^R^E^S^T^O^R^E^D ^T^O ^T^H^E ^T^E^R^M^I^N^A^L ^B^Y ^E^N^T^E^R^I^N^G '>^O^U^T^P^U^T' ^O^R '>'. T^H^E ^I^N^P^U^T ^S^T^R^E^A^M ^I^S ^R^E^S^T^O^R^E^D ^T^O ^T^H^E ^T^E^R^M^I^N^A^L ^W^H^E^N ^A ^F^I^L^E ^P^A^R^T^I^T^I^O^N, '<^I^N^P^U^T', ^O^R '<' ^I^S ^E^N^C^O^U^N^T^E^R^E^D ^I^N ^A^N ^I^N^P^U^T ^S^T^R^E^A^M. *USER CONFIGURATION FILE: T^H^E U^S^E^R C^O^N^F^I^G^U^R^A^T^I^O^N F^I^L^E S^L^U^G^N^E^T ^A^L^L^O^W^S ^T^H^E ^U^S^E^R ^T^O ^D^E^F^I^N^E ^H^I^S ^O^R ^H^E^R ^O^W^N ^C^O^M^M^A^N^D ^P^H^R^A^S^E^S ^B^Y ^M^E^A^N^S ^O^F ^A ^C^O^N^F^I^G^U^R^A^T^I^O^N ^F^I^L^E. W^H^E^N S^L^U^G^N^E^T ^E^N^C^O^U^N^T^E^R^S ^A ^C^O^M^M^A^N^D ^I^T ^D^O^E^S ^N^O^T ^U^N^D^E^R^S^T^A^N^D, ^I^T ^A^T^T^E^M^P^T^S ^T^O GET ^A ^C^O^N^F^I^G^U^R^A^T^I^O^N ^F^I^L^E ^I^N ^T^H^E ^U^S^E^R'^S ^I^N^D^I^R^E^C^T ^A^C^C^E^S^S ^C^A^T^A^L^O^G ^C^A^L^L^E^D SLUGCON ( SLUG^N^E^T CON^F^I^G^U^R^A^T^I^O^N ^F^I^L^E ). I^F ^S^U^C^C^E^S^S^F^U^L, ^I^T ^S^C^A^N^S ^T^H^E ^C^O^N^T^E^N^T^S ^O^F ^T^H^E ^F^I^L^E ^F^O^R ^A ^M^A^T^C^H ^W^I^T^H ^T^H^E ^U^S^E^R'^S ^C^O^M^M^A^N^D, ^A^N^D ^R^E^P^L^A^C^E^S ^T^H^E ^U^S^E^R'^S ^C^O^M^M^A^N^D ^W^I^T^H ^T^H^E ^D^E^F^I^N^I^T^I^O^N. T^H^I^S ^A^L^L^O^W^S ^F^O^R ^A ^G^R^E^A^T ^D^E^A^L ^O^F ^F^R^E^E^D^O^M ^O^N ^T^H^E ^P^A^R^T ^O^F ^T^H^E ^U^S^E^R. F^O^R ^E^X^A^M^P^L^E, ^A ^U^S^E^R ^W^H^O ^W^A^S ^U^S^E^D ^T^O ^T^H^E "/" ^C^O^M^M^A^N^D ^S^I^G^N^A^L ^O^F ^M^A^N^Y ^C^O^N^F^E^R^E^N^C^E ^P^R^O^G^R^A^M^S ^M^I^G^H^T ^M^A^K^E ^T^H^E ^F^O^L^L^O^W^I^N^G ^C^O^N^F^I^G^U^R^A^T^I^O^N ^F^I^L^E: * * "/" ^C^O^N^F^I^G^U^R^A^T^I^O^N ^F^I^L^E ^F^E^A^T^U^R^I^N^G ^U^P^P^E^R ^A^N^D ^L^O^W^E^R ^C^A^S^E * ^C^O^M^M^A^N^D^S * /^W^H^O=^S^H^O^W ^M^E^M^B^E^R^S; /WHO=^S^H^O^W ^M^E^M^B^E^R^S; /W=^S^H^O^W ^M^E^M^B^E^R^S; /^W=^S^H^O^W ^M^E^M^B^E^R^S; * /^N^A^M^E=^S^E^T ^N^A^M^E; /NAME=^S^E^T ^N^A^M^E; /N=^S^E^T ^N^A^M^E; /^N=^S^E^T ^N^A^M^E; * /H=^H^E^L^P; /^H=^H^E^L^P; * /S=^S^E^N^D; /^S=^S^E^N^D; * /B=^B^Y^E; /^B=^B^Y^E; W^I^T^H ^T^H^I^S ^F^I^L^E, ^T^H^E ^U^S^E^R ^W^O^U^L^D ^B^E ^A^B^L^E ^U^S^E /^B, /^H, /^N, /^S, ^A^N^D /^W ^A^S ^C^O^M^M^A^N^D^S. I^F ^S^E^V^E^R^A^L ^D^I^F^F^E^R^E^N^T ^U^S^E^R^S ^S^H^A^R^E ^T^H^E ^S^A^M^E UN, ^T^H^E^Y ^C^A^N ^C^R^E^A^T^E ^C^O^N^F^I^G^U^R^A^T^I^O^N ^F^I^L^E^S ^W^I^T^H ^N^A^M^E^S ^O^T^H^E^R ^T^H^A^N SLUGCON ^A^N^D ^U^S^E ^T^H^E 'S^E^T ^U^S^E^R' ^C^O^M^M^A^N^D ^T^O ^S^E^T ^T^H^E ^C^O^N^F^I^G^U^R^A^T^I^O^N ^F^I^L^E ^N^A^M^E. D^E^F^I^N^I^T^I^O^N^S ^S^H^O^U^L^D ^S^T^A^R^T ^I^N ^C^O^L^U^M^N 1 ^O^F ^T^H^E ^C^O^N^F^I^G^U^R^A^T^I^O^N ^F^I^L^E ^A^N^D ^T^E^R^M^I^N^A^T^E ^W^I^T^H ^A ^S^E^M^I^C^O^L^O^N ( ';' ). T^H^E ^U^S^E^R'^S ^C^O^M^M^A^N^D ^S^H^O^U^L^D ^B^E ^S^E^P^A^R^A^T^E^D ^B^F^R^O^M ^T^H^E ^D^E^F^I^N^I^T^I^O^N ^B^Y ^A^N ^E^Q^U^A^L ^S^I^G^N ( '=' ). N^E^I^T^H^E^R ^T^H^E ^U^S^E^R'^S ^C^O^M^M^A^N^D ^O^R ^T^H^E ^D^E^F^I^N^I^T^I^O^N ^S^O^U^L^D ^C^O^N^T^A^I^N ^E^Q^U^A^L ^S^I^G^N^S ^O^R ^S^E^M^I^C^O^L^O^N^S, ^O^T^H^E^R ^T^H^A^N ^T^H^E ^S^E^P^A^R^A^T^O^R ^A^N^D ^T^E^R^M^I^N^A^T^O^R. T^H^E ^D^E^F^I^N^I^T^I^O^N ^D^O^E^S ^N^O^T ^H^A^V^E ^T^O ^B^E ^A S^L^U^G^N^E^T ^C^O^M^M^A^N^D, ^B^U^T ^M^A^Y ^B^E ^A^N^Y ^T^E^X^T ^S^T^R^I^N^G ( ^I^T ^W^I^L^L ^B^E ^I^N^T^E^R^P^E^T^E^D ^J^U^S^T ^T^H^E ^S^A^M^E ^A^S ^I^F ^T^H^E ^U^S^E^R ^E^N^T^E^R^E^D ^I^T ^D^I^R^E^C^T^L^Y ). *ADDITIONAL NOTES: A^D^D^I^T^I^O^N^A^L N^O^T^E^S 1. S^L^U^G^N^E^T S^E^R^V^E^R ^M^E^S^S^A^G^E^S ^M^A^Y ^B^E ^R^E^C^O^G^N^I^Z^E^D ^B^E^C^A^U^S^E ^T^H^E^Y ^H^A^V^E ^T^H^E S^E^R^V^E^R'^S ^U^S^E^R ^N^U^M^B^E^R ^I^N ^T^H^E "F^R^O^M" ^M^E^S^S^A^G^E. 2. S^L^U^G^N^E^T ^C^R^E^A^T^E^S ^S^E^V^E^R^A^L ^L^O^C^A^L ^F^I^L^E^S ^A^N^D ^O^N^E ^I^N^D^I^R^E^C^T ^A^C^C^E^S^S ^F^I^L^E ^P^E^R ^S^E^S^S^I^O^N. W^I^T^H ^A ^F^E^W ^E^X^C^E^P^T^I^O^N^S, ^T^H^E^S^E ^F^I^L^E^S ^C^A^N ^B^E ^R^E^C^O^G^N^I^Z^E^D ^B^E^C^A^U^S^E ^T^H^E^Y ^A^R^E ^P^R^E^F^I^X^E^D ^B^Y ^T^H^E ^U^S^E^R'^S JSN. T^H^E ^E^X^C^E^P^T^I^O^N^S ^A^R^E ^P^R^E^F^I^X^E^D ^B^Y ^T^H^E ^L^E^T^T^E^R^S SLUG. 3. I^F ^Y^O^U^R ^S^E^S^S^I^O^N ^I^S ^A^B^N^O^R^M^A^L^L^Y ^T^E^R^M^I^N^A^T^E^D ^A^N^D ^Y^O^U ^A^R^E ^U^N^A^B^L^E ^T^O ^R^E^C^O^V^E^R ^T^H^E ^D^I^S^C^O^N^N^E^C^T^E^D JSN, ^Y^O^U ^M^A^Y ^W^I^S^H ^T^O ^P^U^R^G^E ^T^H^E ^F^I^L^E ^A^S^S^O^C^I^A^T^E^D ^W^I^T^H ^T^H^A^T JSN ^I^N ^Y^O^U^R ^I^N^D^I^R^E^C^T ^A^C^C^E^S^S ^C^A^T^A^L^O^G. 4. U^S^E^R^S ^W^H^O^S^E ^D^I^R^E^C^T^O^R^Y ^E^N^T^R^Y ^R^E^M^A^I^N^S ^I^N^A^C^T^I^V^E ^F^O^R ^A ^S^E^T ^T^I^M^E ^W^I^L^L ^B^E ^D^E^L^E^T^E^D ^F^R^O^M ^T^H^E ^D^I^R^E^C^T^O^R^Y. A ^U^S^E^R ^W^H^O^S^E ^E^N^T^R^Y ^H^A^S ^B^E^E^N ^D^E^L^E^T^E^D ^W^I^L^L ^H^A^V^E ^H^I^S ^O^R ^H^E^R ^S^E^S^S^I^O^N ^T^E^R^M^I^N^A^T^E^D ^W^I^T^H ^A ^M^E^S^S^A^G^E ^F^R^O^M ^T^H^E S^E^R^V^E^R ^T^O ^T^H^A^T ^E^F^F^E^C^T. F^R^E^Q^U^E^N^T ^D^I^R^E^C^T^O^R^Y ^A^C^T^I^V^I^T^Y ( ^S^U^C^H ^A^S ^E^N^T^E^R^I^N^G ^A^N^D ^E^X^I^T^I^N^G ^S^C^R^O^L^L ^M^O^D^E, ^C^H^A^N^G^I^N^G ^Y^O^U^R ^N^A^M^E ^O^R ^C^O^N^F^E^R^E^N^C^E ) ^C^A^N ^A^V^O^I^D ^T^H^I^S. I^F ^Y^O^U^R ^S^E^S^S^I^O^N ^I^S ^T^E^R^M^I^N^A^T^E^D ^Y^O^U ^C^A^N ^A^L^W^A^Y^S ^R^E^S^U^M^E ^I^T. *USER PROLOGUE FILE: T^H^E U^S^E^R P^R^O^L^O^G^U^E F^I^L^E A ^U^S^E^R ^P^R^O^L^O^G^U^E ^F^I^L^E ^I^S ^A^N ^I^N^D^I^R^E^C^T ^A^C^C^E^S^S ^F^I^L^E ^O^F S^L^U^G^N^E^T ^C^O^M^M^A^N^D^S ^T^H^A^T ^T^H^E ^U^S^E^R ^W^A^N^T^S ^E^X^E^C^U^T^E^D ^W^H^E^N S^L^U^G^N^E^T ^I^S ^S^T^A^R^T^E^D. B^Y ^D^E^F^A^U^L^T, S^L^U^G^N^E^T ^L^O^O^K^S ^F^O^R ^T^H^E ^I^N^D^I^R^E^C^T ^A^C^C^E^S^S ^F^I^L^E SLUGPRO, ^B^U^T ^T^H^E ^U^S^E^R ^M^A^Y ^S^P^E^C^I^F^Y ^H^I^S ^O^W^N ^F^I^L^E ^N^A^M^E ^B^Y ^E^N^T^E^R^I^N^G ^I^T ^A^F^T^E^R ^T^H^E S^L^U^G^N^E^T ^C^O^M^M^A^N^D, ^P^R^E^C^E^D^E^D ^B^Y ^A ^C^O^M^M^A ^A^S ^F^O^L^L^O^W^S: SLUGNET,JOEUSER I^N ^T^H^E ^A^B^O^V^E ^E^X^A^M^P^L^E, ^T^H^E ^U^S^E^R ^S^P^E^C^I^F^I^E^D ^T^H^E ^F^I^L^E JOEUSER. T^H^E ^F^I^L^E JOEUSER ^C^O^U^L^D ^H^A^V^E ^C^O^N^T^A^I^N^E^D ^T^H^E ^F^O^L^L^O^W^I^N^G: ^S^E^T ^N^A^M^E J^O^E U^S^E^R ^S^E^T ^U^S^E^R JOESCON T^H^I^S ^F^I^L^E ^W^O^U^L^D ^S^E^T ^T^H^E ^U^S^E^R'^S ^N^A^M^E ^T^O J^O^E U^S^E^R ^A^N^D ^H^I^S ^C^O^N^F^I^G^U^R^A^T^I^O^N ^F^I^L^E ^T^O JOESCON. *EOF: H^E^L^P ^I^S ^A^V^A^I^L^A^B^L^E ^F^O^R ^T^H^E ^F^O^L^L^O^W^I^N^G ^C^O^M^M^A^N^D^S ^A^N^D ^T^O^P^I^C^S: A^D^D^I^T^I^O^N^A^L ^N^O^T^E^S B^E^L^L B^R^O^A^D^C^A^S^T B^Y^E D^E^L^A^Y E^D^I^T E^N^T^E^R^I^N^G ^C^O^M^M^A^N^D^S ^A^N^D ^T^E^X^T E^X^I^T F^I^L^E ^R^E^D^I^R^E^C^T^I^O^N H^E^L^P J^O^I^N N^O^S ^C^O^M^M^A^N^D^S R^E^S^E^R^V^E^D ^C^H^A^R^A^C^T^E^R^S R^E^W^I^N^D R^I^N^G S^C^R^O^L^L S^E^N^D S^E^T ^D^E^L^A^Y S^E^T ^E^C^H^O S^E^T ^E^D^I^T^O^R S^E^T ^N^A^M^E S^E^T ^N^O^V^I^C^E S^E^T ^P^R^O^M^P^T S^E^T ^R^I^N^G S^E^T ^T^I^M^E^R S^E^T ^U^S^E^R S^E^T ^W^A^I^T S^H^O^W ^C^O^N^F^E^R^E^N^C^E^S S^H^O^W ^M^E^M^B^E^R^S U^S^E^R ^C^O^N^F^I^G^U^R^A^T^I^O^N ^F^I^L^E U^S^E^R ^P^R^O^L^O^G^U^E ^F^I^L^E W^A^I^T T^O ^V^I^E^W ^T^H^E ^H^E^L^P ^F^O^R ^A ^P^A^R^T^I^C^U^L^A^R ^T^O^P^I^C, ^T^Y^P^E '^H^E^L^P ^N', ^W^H^E^R^E ^N ^I^S ^T^H^E ^T^O^P^I^C. DATA,SLUGNEW N^E^W^S ^I^T^E^M 1: S^L^U^G^N^E^T ^I^N^S^T^A^L^L^E^D ^B^Y _ORGNM_ DATA,SLUGCON * * "/" ^C^O^N^F^I^G^U^R^A^T^I^O^N ^F^I^L^E ^F^E^A^T^U^R^I^N^G ^U^P^P^E^R ^A^N^D ^L^O^W^E^R ^C^A^S^E * ^C^O^M^M^A^N^D^S * /^S^C^A^N=^S^H^O^W ^C^O^N^F^E^R^E^N^C^E^S; /SCAN=^S^H^O^W ^C^O^N^F^E^R^E^N^C^E^S; /SC=^S^H^O^W ^C^O^N^F^E^R^E^N^C^E^S; /^S^C=^S^H^O^W ^C^O^N^F^E^R^E^N^C^E^S; * /^W^H^O=^S^H^O^W ^M^E^M^B^E^R^S; /WHO=^S^H^O^W ^M^E^M^B^E^R^S; /W=^S^H^O^W ^M^E^M^B^E^R^S; /^W=^S^H^O^W ^M^E^M^B^E^R^S; * /^N^A^M^E=^S^E^T ^N^A^M^E; /NAME=^S^E^T ^N^A^M^E; /N=^S^E^T ^N^A^M^E; /^N=^S^E^T ^N^A^M^E; * /H=^H^E^L^P; /^H=^H^E^L^P; * /S=^S^E^N^D; /^S=^S^E^N^D; * /B=^B^Y^E; /^B=^B^Y^E; * #EOR #EOI \End\Of\Shar\ else echo "will not over write ./slugnet.n" fi chmod 400 ./slugnet.n if [ `wc -c ./slugnet.n | awk '{printf $1}'` -ne 75692 ] then echo `wc -c ./slugnet.n | awk '{print "Got " $1 ", Expected " 75692}'` fi echo "Finished archive 2 of 6" exit