1! MESSAG EDIT 6B-01 MARCH, 1977 Peter Mullen 20! MESSAG is designed to work with MESMAN to send messages from one account to another. 21! OPERATING INSTRUCTIONS: The program will first ask which account this message should be sent to RESPONSES: X,Y- where (X,Y) is the account of the person who will receive 22! this message. When someone logs in under that account they will get a prompt to RUN $RECEIVE. 23! X,*- where X is the project number to send a group message to. Each programmer will have the message printed at terminal the first time they log in. 24! *,*- To change the system notice. When a user logs on, he will be sent this notice if he has not received it since it was changed. GRIPE - To send a gripe message to account [1,0] 25! Any of the above responses may be followed by a / where contains the message to be sent. 26! If the user did not include a / then he will be asked to enter his message from the termminal, ending with Control/Z. 27! The user will then be prompted with; SEND, LIST, DELETE, OR RESTART? SEND- will send the message just entered. LIST- will list the message as it will be received. 28! DELETE- will delete the message and end the program. RESTART- will delete the message and restart the program. 30! The program also has the ability to VERIFY if another account has a message waiting from this user. In response to the first question type VERIFY 31! The program will ask to which account the message was sent to. RESPONSES: X,Y- where (X,Y) is an account number. The program will check how many messages that account has waiting from this user. 32! X,*- where X is the number of a group that has group messages waiting. The program will list out the programmers who have not received the notice yet. 33! The program is able to delete all messages that were sent to a given account. Answer DELETE to the first question. The second question is answered the same way as for VERIFY, and *,* is also meaningful. 40! HOW IT WORKS: To create a message MESSAG opens a file whose name is keyed on where the message is directed. The program then sends a message to MESMAN, who puts the contents of the file into it's storage file. 41! To VERIFY the program opens the files of MESMAN and reads then. To DELETE the program sends a message to MESMAN telling it what to do. 1000 ON ERROR GOTO 19000 \ PRINT 'MESSAG V06B-1A ';TIME$(0%);' ';DATE$(0%) \ PRINT \ A9$='(1,3)' \ A8$='(1,4)' ! PRINT HEADER ! A9$- ACOUNT THAT ALL MASTER FILES ARE STORED ON ! A8$- ACCOUNT THAT TEMP MESSAGE FILES ARE STORED ON 1010 A1%=PEEK(PEEK(PEEK(520%)+8%)+24%) \ A2%=A1% AND 255% \ A1%=SWAP%(A1%) AND 255% ! GET USER'S PPN 1020 C1$=CHR$(13%)+CHR$(10%) \ I$=SYS(CHR$(6%)+CHR$(-7%)) ! SET UP CONTROL C TRAP 1030 F4%=4% \ GOSUB 10300 ! TEST TO SEE IF 'MESMAN' IS RUNNING 2000 ON ERROR GOTO 19000 \ PRINT 'ACCOUNT TO SEND TO'; \ INPUT LINE T$ \ GOSUB 10000 \ ON B% GOTO 2000, 2010, 3000, 4000, 6000 ! GET INPUT 2010 ON ERROR GOTO 2100 \ IF FNP%(T3$)=0% THEN 2090 ELSE OPEN T3$ FOR INPUT AS FILE 1% \ PRINT 'TYPE YOUR MESSAGE (END WITH CONTROL Z)' IF (STATUS AND 255%) = 2% \ GOSUB 10100 \ GOSUB 10200 \ ON ERROR GOTO 2100 2020 INPUT 'SEND, LIST, DELETE, OR RESTART';I$ \ I$=CVT$$(I$,255%) \ IF I$='LIST' THEN 2040 ELSE IF I$='DELETE' OR I$='RESTART' THEN 2050 ELSE IF I$<>'SEND' THEN PRINT 'INVALLED COMMAND- 'I$ \ GOTO 2020 ! GET WHAT TO DO 2030 F4%=3% \ CLOSE 5% \ ON ERROR GOTO 19000 \ GOSUB 10300 \ GOTO 32760 ! SEND OPTION, DONE 2040 T%=ASCII(C5$(0%))-1% \ PRINT RIGHT(C5$(0%),2%); \ PRINT C5$(I%); FOR I%=1% TO T% \ PRINT\ PRINT \ I$=SYS(CHR$(0%)) \ GOTO 2020 ! LIST 2050 CLOSE 5% \ KILL F1$ \ IF I$='RESTART' THEN 2000 ELSE 32760 ! DELETE AND RESTART OPTIONS 2090 PRINT 'INVALLED FILE NAME- ';T3$ \ GOTO 2000 ! ALL FILE OPENING ERRORS GO THROUGH HERE 2100 IF ERR=28% OR ERR=11% THEN RESUME 32750 ELSE IF ERR=5% AND ERL=2010 THEN RESUME 2090 ELSE IF ERR=5% AND ERL=2050 THEN RESUME 32760 ELSE ON ERROR GOTO 0 3000 ! V E R I F Y THIS ROUTINE WILL VERIFY THAT A GIVEN ACCOUNT HAS RECEIVED A A MESSAGE FROM THIS USER 3010 ON ERROR GOTO 3500 \ PRINT \ PRINT 'TO WHICH ACCOUNT WAS THE MESSAGE SENT'; \ INPUT LINE T$ \ GOSUB 10000 \ ON ERROR GOTO 3500 \ IF B%=5% THEN 6000 ELSE IF B%<>2% THEN 3010 ! GET ACCOUNT TO VERIFY 3020 OPEN T3$ FOR OUTPUT AS FILE 1% IF FNP%(T3$) \ IF F3%=1% THEN 1000 ELSE IF F3%=2% THEN 3100 ELSE F%=F1%+SWAP%(F2%) \ PRINT ! DETERMINE WHAT TYPE OF ACCOUNT TO VERIFY 3030 OPEN A9$+'MESMAN.PT2' FOR INPUT AS FILE 2% \ DIM #2%, L3%(3587%) \ A%=A1%+SWAP%(A2%) \ T%=1% \ T4$='ACCOUNT ('+CVT$$(NUM$(F1%)+','+NUM$(F2%),255%)+') HAS' ! PREPARE FOR LINKED LIST SEARCH 3040 T%=L3%(T%) WHILE L3%(T%+1%)<>F% AND T%<>-1% \ IF T%=-1% THEN PRINT T4$;' NO MESSAGES' \ GOTO 3060 ! SEARCH THROUGH PPNS WITH MESSAGES WAITING FOR THIS ONE 3050 T%=T%+2% \ T1%=0% \ GOSUB 3070 WHILE T%<>-1% \ T4$=T4$+' NO MESSAGE' IF T1%=0% \ T4$=T4$+NUM$(T1%)+'MESSAGE' IF T1%>0% \ T4$=T4$+'S' IF T1%=0% OR T1%>1% \ PRINT #1%,T4$;' FROM THIS ACCOUNT' ! SEARCH MESSAGE LIST FOR THIS ACCOUNT 3060 CLOSE 1,2 \ GOTO 32760 3070 T1%=T1%+1% IF L3%(T%+2%)=A% \ T%=L3%(T%) \ RETURN ! ADD UP MESSAGES WAITING. 3100 OPEN A9$+'MESMAN.PT1' FOR INPUT AS FILE 2% \ DIM #2%, L1%(1023%),L2%(1023%) \ PRINT #1 \ GOTO 3110 IF L2%(I%)=F1% FOR I%=1% TO L2%(0%) \ PRINT #1%, 'NO GROUP MESSAGE FOR PROJECT (';F1%;',*) \ GOTO 32760 ! CHECK FOR PROJECT IN LIST 3110 PRINT #1%, 'THESE PROGRAMMERS HAVE NOT RECEIVED THE GROUP MESSAGE' \ I%=I%*16%+96% \ T%,T1%=0% ! INITIALIZE FOR LISTING 3120 FOR I1%=0% TO 255% \ I2%=I1%/16% \ IF L2%(I%+I2%) AND 2^(I1%-I2%*16%) THEN IF T1% THEN 3140 ELSE PRINT #1%, I1%; \ T%=I1% \ T1%=-1% \ GOTO 3140 3130 IF T1% THEN PRINT #1%, '-';I1%-1%; UNLESS I1%-1%=T% \ PRINT #1% \ T1%=0% 3140 NEXT I1% \ PRINT #1%, '-';I1%; \ PRINT #1% \ CLOSE 1%,2% \ GOTO 32760 3500 IF ERR<>9% THEN RESUME 19010 ELSE PRINT 'ILLEGAL FILE NAME ';I3$ \ GOTO 32750 ! ERROR HANDLING FOR VERIFY OPTION 4000 ! ! D E L E T E O P T I O N ! ! 4020 PRINT 'TO WHICH ACCOUNT WAS THE MESSAGE SENT'; \ INPUT LINE T$ \ GOSUB 10000 \ IF B%=5% THEN 6000 ELSE IF B%<>2% THEN 4020 ! GET ACCOUNT 4030 F4%=6% \ ON ERROR GOTO 19000 \ GOSUB 10300 \ GOTO 32760 ! SEND MESSAGE, DONE 6000 ON ERROR GOTO 6100 \ OPEN A9$+'MESMAN.TXT' FOR INPUT AS FILE 2% ! HELP MESSAGE 6010 WHILE -1% \ INPUT LINE #2%, T$ \ PRINT CVT$$(T$,4%) \ NEXT ! PRINT MESSAGE 6020 I$=SYS(CHR$(0%)) \ GOTO 2000 ! RETURN TO BEGINING 6030 PRINT 'HELP NOT AVAILABLE NOW' \ GOTO 2000 6100 IF ERR=11% THEN RESUME 6020 ELSE IF ERR=5% THEN RESUME 6030 ELSE IF ERR=28% THEN 32760 ELSE ON ERROR GOTO 0 9999 ! ! G E T A C C O U N T N U M B E R ! ! 10000 ON ERROR GOTO 10070 \ T$=CVT$$(T$,255%) \ T$="1,0" IF T$="GRIPE" \ T%=INSTR(1%,T$,',') \ IF T%=0% THEN 10050 ELSE T2$=RIGHT(T$,T%+1%) \ T1$=LEFT(T$,T%-1%) ! DIVIDE STRING INTO PROJECT AND PROGRAMMER STRINGS 10010 T%=INSTR(1%,T2$,'/') \ IF T%=0% THEN T3$='KB:' ELSE T3$=RIGHT(T2$,T%+1%) \ T2$=LEFT(T2$,T%-1%) ! GET I/O FILE IF THERE IS ONE 10020 F1%,F2%,F3%=0% \ IF T1$='*' AND A1%=1% THEN F3%=1% ELSE F1%=VAL(T1$) \ GOTO 10060 IF F1%>255% ! CONVERT PROJECT NUMBER, ONLY 1,* CAN SPECIFY *,* 10030 IF T2$='*' AND (A1%=1% OR (A2%=0% AND A1%=F1%)) THEN F3%=2% UNLESS F3%=1% ELSE F2%=VAL(T2$) \ F3%=3% \ GOTO 10060 IF F2%>255% ! CONVERT PROGRAMMER NUMBER, ONLY X,0 OR 1,* CAN SPECIFY X,* 10040 I$=SYS(CHR$(6%)+CHR$(14%)+STRING$(4%,0%)+CHR$(F2%)+CHR$(F1%)) IF F3%=3% \ B%=2% \ RETURN ! TEST DESTINATION ACCOUNT FOR EXISTANCE B%- INDICATES RESULTS OF THIS SUBROUTINE 10050 IF T$='VERIFY' THEN B%=3% ELSE IF T$='DELETE' THEN B%=4% ELSE IF T$='?' OR T$='HELP' THEN B%=5% ELSE 10060 ! WHAT WAS INPUT? 10055 RETURN 10060 PRINT 'INVALLED ACCOUNT- 'T$ \ PRINT 'ACCOUNT MUST BE IN THE FORM XX,YY' \ PRINT "TYPE '?' FOR HELP" \ PRINT \ B%=1% \ RETURN ! ALL ERRORS GO THROUGH HERE 10070 IF ERR=28% THEN RESUME 32760 ELSE IF ERR=52% OR ERR=5% THEN RESUME 10060 ELSE ON ERROR GOTO 0 10099 ! ! O P E N T E M P . F I L E ! ! 10100 ON ERROR GOTO 10150 \ T%=0% \ T$=A8$+NUM$(200%+F1%)+NUM$(200%+F2%)+'.' \ DIM #5%, C5$(254%)=32% ! OPEN TEMP FILE ON CHANNEL 5 10110 WHILE -1% \ T%=T%+1% \ T1$=T$+NUM$(200%+T%) \ OPEN T1$ FOR INPUT AS FILE 5% \ CLOSE 5% \ NEXT ! OPEN FILES UNTIL THERE IS NOT ONE 10120 F5%=T% \ F1$=CVT$$(T1$,-1%) \ OPEN F1$ FOR OUTPUT AS FILE 5% \ RETURN 10150 IF ERR=28% THEN RESUME 32750 ELSE IF ERR=5% THEN RESUME 10120 ELSE ON ERROR GOTO 0 10199 ! ! G E T M E S S A G E T E X T ! ! 10200 ON ERROR GOTO 10290 \ I%=0% ! PREPARE TO GET MESSAGE 10210 IF F3%=1% THEN T$=' ' ELSE IF F3%=2% THEN T$=' '+C1$ ELSE T$=' '+C1$+C1$+'FROM ACCOUNT ('+NUM$(A1%)+','+NUM$(A2%)+ ') ON '+DATE$(0%)+' AT '+TIME$(0%)+C1$ ! BUILD HEADER TO MESSAGE 10220 WHILE LEN(T$)<=32% \ INPUT LINE #1%, T1$ \ T$=T$+T1$ \ NEXT \ C5$(I%)=LEFT(T$,32%) \ T$=RIGHT(T$,33%) \ I%=I%+1% \ GOTO 10220 ! STORE MESSAGE 10230 IF LEN(T$)=0% THEN I%=I%-1% ELSE C5$(I%)=T$ !STORE LAST STRING 10240 C5$(0%)=CHR$(I%+1%)+RIGHT(C5$(0%),2%) \ CLOSE 1%\ PRINT \ RETURN ! STORE LENGTH OF MESSAGE 10250 PRINT 'TEXT TRUNCATED' \ I%=I%-1% \ GOTO 10230 ! SUBSCRIPT OUT OF RANGE 10290 IF ERR=28% THEN RESUME 32750 ELSE IF ERR=11% THEN RESUME 10230 ELSE IF ERR=55% THEN RESUME 10250 ELSE IF ERR<>5% THEN ON ERROR GOTO 0 ELSE PRINT "CAN'T FIND FILE"\ RESUME 32750 10300 I$=SYS(CHR$(6%)+CHR$(18%)+CHR$(-1%)+CHR$(0%)+ MID(SYS(CHR$(6%)+CHR$(-10%)+'MESMAN'),7%,4%)+CHR$(F4%)+ CHR$(F2%)+CHR$(F1%)+CHR$(F3%)+CHR$(F5%)) \ RETURN ! SEND MESSAGE TO 'MESMAN' 15000 DEF FNP%(A$) \ FNP%=0% \ FNP%=-1% IF A1%=1% OR CVT$%(RIGHT(SYS(CHR$(6%)+CHR$(-10%) +A$),5%))=0% 15010 FNEND ! FUNCTION TESTS FALSE IF NON PRIVALIDGED USER SPECIFIES FILE NOT ON HIS ACCOUNT 19000 E%=ERR \ RESUME 19010 19010 IF ERL=32750 THEN 32760 ELSE IF E%=28% THEN GOTO 32750 ELSE IF E%=5% AND ERL=10300 THEN GOTO 32740 ELSE 32750 ! ERROR HANDLING 32740 PRINT "'MESMAN' NOT RUNNING CAN'T SEND MESSAGE" \ PRINT 'TRY AGAIN LATER' \ GOTO 32750 ! CAN'T FIIND FILE OR ACCOUNT 32750 CLOSE 5% \ ON ERROR GOTO 19000 \ KILL F1$ ! KILL TEMPFILE IF CONTROL C 32760 I$=SYS(CHR$(9%)) ! SET UP NONAME 32767 END