
1       ! TALK -- INTER TERMINAL COMMUNICATIONS FOR RSTS V4A
        ! EDIT 1        BY G. CRIM      7/73
500     ! NOTE:  LINE 900 DESCRIBES A LOCATION WHICH IS TO BE USED
                FOR DISABLING AND RE-ENABLING THE 'SEND' OPTION.
                IF THESE TWO COMMANDS ARE NOT DESIRED, THEN SET
510     !       THE VARIABLE P%=0% OR REMOVE THE LINE; ELSE ENTER
                A DIFFERENT LOCATION FOR P%  (MAKE SURE IT IS AN
                UNUSED LOCATION--CHECK WITH A SOFTWARE EXPERT)
900  ! P%=112%    (E.G., THIS LOCATION IS UNUSED ON OUR SYSTEM)
1000 PRINT "'TALK' - COMMUNICATIONS PROGRAM" :
        K%=ASCII(RIGHT(SYS(CHR$(6%)+CHR$(9%)),2%))/2%
1010 DEF FNF$(C%)=MID(NUM$(C%),2%,LEN(NUM$(C%))-2%)
1020 CHANGE SYS(CHR$(6%)+CHR$(-3%)) TO M0% :
        M0%(I%)=M0%(I%)+SWAP%(M0%(I%+1%)) FOR I%=11% TO 25% STEP 2%
1030 CHANGE SYS(CHR$(6%)+CHR$(14%)) TO M% : L1%=M%(8%) :
        L2%=M%(7%) : N%(0%)=4%
1040 ON ERROR GOTO 1430 : FOR I%=1% TO 3% : READ N%(X%)
        FOR X%=1% TO 4% : CHANGE N% TO N$(I%) : NEXT I%
1050 DIM M%(30),M0%(30),N%(4) : OPEN "KB:" FOR INPUT AS FILE 1%
1060 M$=SYS(CHR$(0%)) : WAIT0% : PRINT : PRINT"#"; :
        J%,J8%=0% : INPUT#1%,M$
1070 IF ASCII(M$)=83% THEN 1110 ELSE IF ASCII(M$)=76% THEN 1250
        ELSE IF ASCII(M$)=72% THEN 1520 ELSE IF ASCII(M$)=69% THEN 1810
1080 IF P%=0% OR L1%<>1% THEN 1090 ELSE IF M$="DISABLE"
        THEN 1450 ELSE IF M$="RE-ENABLE" THEN 1460
1090 IF D%=0% THEN GOSUB 1640 ELSE PRINT
        "UNRECOGNIZED COMMAND - ";M$
1100 GOTO 1060
1110 IF P%<>0% AND L1%<>1% AND PEEK(P%) THEN PRINT
        "SEND OPTION HAS BEEN TEMPORARILY DISABLED." : GOTO 1060
1120 INPUT "KB# TO SEND TO";K$ : IF K$="ALL" AND L1%=1% THEN
        K2%=0% : K3%=M0%(3%) : GOTO 1190
1130 K1%=INSTR(1%,K$,"KB") : K$=RIGHT(K$,K1%+2%) IF K1% :
        K1%=INSTR(1%,K$,":") : K$=LEFT(K$,K1%-1%) IF K1% :
        K2%,K3%=VAL(K$):IF K2%>-1% AND K2%<=M0%(3%) THEN 1150
1140 PRINT "ILLEGAL KB" : GOTO 1110
1150 IF L1%=1% THEN 1190 ELSE D1%=1% : GOTO 1260
1160 IF J2%<>K2% THEN 1150 ELSE J8%=1%
1170 D1%=0% : IF J8%=0% THEN 1190
1180 GOSUB 1350 : IF J9% THEN PRINT
        "** TERMINAL BUSY WITH OUTPUT.  TRY AGAIN LATER." : GOTO 1060
1190 PRINT "MESSAGE TO SEND (HIT 'RETURN' TO STOP)" : T%=0%
1200 WAIT60% : INPUT LINE#1%,M1$ : GOSUB 1390
1210 IF K2%=K3% THEN M1$="<<KB"+RIGHT(NUM$(K%),2%)+"["+FNF$(L1%)+
        ","+FNF$(L2%)+"]>> "+M1$ ELSE M1$="--> ATTENTION: "+M1$
1220 M1$=CHR$(7%)+CHR$(7%)+CHR$(13%)+CHR$(10%)+M1$
1230 IF L1%<>1% AND J8%=1% THEN GOSUB 1350 : IF J9% THEN
        GOSUB 1470 : IF J9% THEN 1060
1240 M$=SYS(CHR$(6%)+CHR$(-5%)+CHR$(K1%)+M1$) FOR K1%=K2% TO K3% :
        PRINT "MESSAGE SENT" : GOTO 1060
1250 PRINT "TERMINALS CURRENTLY IN USE ARE:" : PRINT
1260 J%=J%+2% : J0%=PEEK(J%+M0%(11%)) : IF J0%=0% THEN
        1260 ELSE IF J0%<0% THEN IF D1% THEN 1170 ELSE 1060
1270 J1%=PEEK(PEEK(J0%)) : J2%=ASCII(CHR$(SWAP%(PEEK(J1%+28%))))/2%
1280 IF ASCII(CHR$(PEEK(J1%+2%)))<>J% THEN 1260
1290 IF D1% THEN 1160 ELSE PRINT "KB"+RIGHT(NUM$(J2%),2%);
1300 PRINT "[YOURS]"; IF J2%=K% : PRINT,
1310 J1%=PEEK(J0%+20%) : IF J1%=0% THEN PRINT "**,**", ELSE
        PRINT FNF$(ASCII(CHR$(SWAP%(J1%))))+","+FNF$(ASCII(CHR$(J1%))),
1320 PRINT RAD$(PEEK(J%+M0%(23%)));RAD$(PEEK(J%+M0%(25%))),
1330 GOSUB 1350 : IF J9% THEN PRINT"** (BUSY) **" ELSE PRINT
1340 GOTO 1260
1350 J9%=0% : J1%=PEEK(J%+M0%(15%)) : J6%=1% : IF J1% AND
        PEEK(J%+M0%(13%)) THEN 1370 ELSE J6%=J6%+2% :
        IF J1%<0% THEN 1370 ELSE J1%=J1%/4%
1360 J6%=J6%+2% : IF J1% AND 1% THEN 1370 ELSE J1%=J1%/2% :
        IF J1% THEN 1360
1370 J9%=1% IF J6%=1% OR J6%=25% : RETURN
        ! SET APPROPRIATE BIT IF HE'S IN RN OR TT STATE
1390 FOR I%=1 TO 3 : IF INSTR(1%,M1$,N$(I%)) THEN 1410
1400 NEXT I% : RETURN
1410 PRINT "THIS PROGRAM WAS NOT MEANT TO SEND OBSCENE COMMENTS !!" :
        M%(I%)=0% FOR I%=0% TO 30%
1420 M%(0%)=30% : M%(1%)=6% : M%(2%)=8% : M%(3%)=
        ASCII(SYS(CHR$(6%)+CHR$(9%)))/2% : M%(28%)=255% :
        CHANGE M% TO M$ : PRINT "PLEASE SAY HELLO" : M$=SYS(M$)
1430 IF ERR=52% AND ERL=1130% THEN RESUME 1140 ELSE
        IF ERR=11% THEN RESUME 1810 ELSE S$=
        RIGHT(SYS(CHR$(6%)+CHR$(9%)+CHR$(ERR)),3%) :
        PRINT"SORRY - ";LEFT(S$,INSTR(1%,S$,CHR$(0%))) :
        RESUME 1060
1440 DATA 70,85,67,75,83,85,67,75,83,72,73,84
1450 S$=SYS(CHR$(6%)+CHR$(-6%)+CHR$(P%)+CHR$(SWAP%(P%))
        +CHR$(255%)) : PRINT"SEND DISABLED." : GOTO 1060
1460 S$=SYS(CHR$(6%)+CHR$(-6%)+CHR$(P%)+CHR$(SWAP%(P%))
        +CHR$(0%)) : PRINT"SEND RE-ENABLED." : GOTO 1060
1470 PRINT "OOPS, TERMINAL'S BUSY NOW...YOU'VE BEEN PLACED ON 'HOLD'."
1480 FOR N%=1% TO 8% : SLEEP 5%
1490 PRINT "ATTEMPT #";N% : GOSUB 1350 : IF J9%=0% THEN RETURN
1500 NEXT N%
1510 PRINT "WOW !! THIS GUY'S REALLY WORKING HARD! BETTER TRY ";
        "AGAIN LATER." : RETURN
1520 PRINT : PRINT "THIS IS A PROGRAM WHICH WILL ALLOW YOU TO SEND A"
1530 PRINT"ONE-LINE MESSAGE TO A TERMINAL.  IT IS PROVIDED FOR"
1540 PRINT"THE PURPOSE OF ALLOWING EVERYONE A SIMPLE WAY OF COMMUNICATIN
G"
1550 PRINT"WITH EACH OTHER IN CASE OF EMERGENCY, TROUBLE WITH THE"
1560 PRINT"TERMINAL, ETC.  THE PROCEDURE FOR USE IS AS FOLLOWS:"
1570 PRINT"     (1) AFTER THE '#' (POUND SIGN), TYPE ONE OF THE"
1580 PRINT"         VALID OPTIONS LISTED BELOW."
1590 PRINT"     (2) IF THE OPTION IS 'S' OR 'SEND', THEN YOU"
1600 PRINT"         MAY INPUT THE MESSAGE TO SEND WHEN INDICATED."
1610 PRINT"         THE MESSAGE, WHEN IT IS SENT, WILL"
1620 PRINT"         BEAR THE IDENTIFICATION OF YOUR TERMINAL THUS:"
1630 PRINT"             <<KB";RIGHT(NUM$(K%),2%);"[";FNF$(L1%);
        ",";FNF$(L2%);"]>> MESSAGE" : GOSUB 1640 : GOTO 1690
1640 D%=1% : PRINT:PRINT"LEGAL OPTIONS ARE:"
1650 PRINT"     SEND    SEND A MESSAGE TO A TERMINAL"
1660 PRINT"     LIST    GET A LIST OF TERMINALS WHICH ARE IN USE"
1670 PRINT"     HELP    TYPE A COMPLETE HELP MESSAGE
1680 PRINT"     EXIT    LEAVE THE PROGRAM" : RETURN
1690 PRINT:PRINT"A MESSAGE MAY BE SENT TO ANY TERMINAL, PROVIDED
1700 PRINT"THAT THE TERMINAL IS NOT BUSY WITH TELETYPE"
1710 PRINT"OUTPUT IN SOME FORM."
1720 PRINT:PRINT"ASK ABOUT THE NUMBERS OF THE MAIN SYSTEM TERMINALS."
1730 PRINT"IN CASE OF SOME URGENT MATTER, EITHER CONTACT ONE OF THEM"
1740 PRINT"VIA THIS PROGRAM, OR REPORT THE MATTER IN PERSON AS SOON"
1750 PRINT"AS POSSIBLE."
1760 PRINT:PRINT"A WORD OF ADVICE: THIS PROGRAM IS FOR THE CONVENIENCE"
1770 PRINT"OF ALL WHO USE THE SYSTEM, AND IS NOT INTENDED TO BE"
1780 PRINT"A TOY.  NO RESTRICTIONS HAVE BEEN IMPOSED WITH RESPECT"
1790 PRINT"TO WHICH TERMINALS MAY RECEIVE MESSAGES, SO THE KEY WORD"
1800 PRINT"HERE IS RESPECT....." : GOTO 1060
1810 CLOSE 1%,2% : END
