5  REM     THIS PROGRAM ENABLES YOU TO WRITE LETTERS IN
10  REM    BLOCK STYLE    BY JERRY LEE & GARRICK LOUIE
20  DIM A$[72],B$[72],C$[72],Q$[9],X$[20],V$[11],Y$[72],Z$[72]
25  DIM M$[16]
30  V$=" ,.?!:;-)'>"
35  RESTORE 1460
40  PRINT "INSTRUCTIONS";
45  INPUT A$
50  IF A$[1,1]="Y" THEN 1425
55  PRINT '10"USERS FILE";
60  INPUT A$
65  RESTORE 
70  FILES *,*
75  ASSIGN A$,1,R
80  ASSIGN A$,2,R
85  IF R=0 THEN 115
90  IF R=1 THEN 105
95  PRINT "FILE DOES NOT EXIST OR IS PROTECTED."
100  GOTO 55
105  PRINT "FILE IS ONLY AVAILABLE ON A READ-ONLY BASIS,"
110  PRINT "EXCEPT FOR ACCOUNTS FROM A000, THROUGH A999."
115  READ #1,1
120  GOTO TYP(1) OF 125,135,145
125  READ #1;A
130  GOTO 665
135  READ #1;A$
140  GOTO 665
145  REM   ************  LOAD LETTER   ****************
150  READ #1,1
155  A=0
160  IF A=7 THEN 290
165  READ A$
170  A=A+1
175  PRINT #1;A
180  PRINT '10A$
185  ENTER 255,Z9,B$
190  PRINT 
195  IF LEN(B$)#0 THEN 210
200  PRINT #1;"<LINE>"
205  GOTO 185
210  IF B$="STOP" THEN 160
215  IF A=5 THEN 230
220  PRINT #1;B$
225  GOTO 185
230  REM  BODY LOAD
235  F=1
240  FOR S=2 TO LEN(B$)
245  IF B$[S,S]#" " THEN 265
250  IF B$[S+1,S+1]=" " THEN 265
255  PRINT #1;B$[F,S-1]
260  F=S+1
265  NEXT S
270  PRINT #1;B$[F,LEN(B$)]
275  GOTO 185
280  DATA "HEADING:","INSIDE ADDRESS:","ATTENTION LINE (IF ANY):"
285  DATA "SALUTATION:","BODY:","COMPLIMENTARY CLOSE:","SIGNATURE:"
290  READ #1,1
295  READ #2,1
300  RESTORE 
305  F8=1
310  GOTO 1220
315  REM L=LEN BODY, L5=MAX LEN HEADING, L9=NO. LINES IN LET.
320  L=L1=L5=L9=0
325  READ #1,1
330  GOTO TYP(1) OF 335,345,380
335  READ #1;A
340  GOTO 330
345  READ #1;A$
350  IF A#5 THEN 365
355  L=L+LEN(A$)+1
360  GOTO 330
365  IF A#1 AND A#6 AND A#7 THEN 330
370  L5=L5 MAX LEN(A$)
375  GOTO 330
380  REM *****************  PRINT OUT  **********************
385  PRINT "HOW MANY COPIES";
390  INPUT C8
395  PRINT "DO YOU WANT SEMI-BLOCK OR FULL-BLOCK";
400  INPUT M$
401  PRINT "INSERT PAPER AND PRESS RETURN."
402  ENTER 255,R,D$
405  REM M= MULTIPLIER FOR MARGINS 0,1,2 = SHORT,MED,LONG
410  M=0
415  IF L<377 THEN 440
420  IF L>752 THEN 435
425  M=1
430  GOTO 440
435  M=2
440  FOR C7=1 TO C8
445  REM  TOP MARGIN
450  PRINT LIN(3*M-6)
455  L9=7-M*3
460  READ #1,1
465  GOTO TYP(1) OF 470,515,650
470  REM A: 1=HEAD 2=IN. ADD. 3=ATTEN. 4=SALU 5=BODY 6=CLOSE 7=SIG
475  READ #1;A
480  IF TYP(1)#2 THEN 465
485  PRINT LIN(-1)
490  L9=L9+2
495  IF A#7 AND A#6 THEN 465
500  PRINT LIN(-1)
505  L9=L9+2
510  GOTO 465
515  READ #1;C$
520  IF C$#"<LINE>" THEN 550
525  L1=0
530  IF A=5 THEN 485
535  PRINT LIN(0)
540  L9=L9+1
545  GOTO 465
550  GOTO A OF 555,580,580,580,600,555,555
555  REM  HEADING, COMPLIMENTARY CLOSE, SIGNATURE
560  IF M$[1,1]="F" THEN 585
565  PRINT TAB((60+M*3)-L5);C$
570  L9=L9+1
575  GOTO 465
580  REM  INSIDE ADDRESS, ATTENTION LINE, SALUTATION
585  PRINT TAB(12-M*3);C$
590  L9=L9+1
595  GOTO 465
600  REM  BODY
605  IF L1#0 THEN 615
610  PRINT TAB(12-M*3);
615  L1=L1+LEN(C$)+1
620  IF L1 <= 48+M*6 THEN 640
625  PRINT '13'10;TAB(12-M*3);
630  L9=L9+1
635  L1=LEN(C$)
640  PRINT C$;" ";
645  GOTO 465
650  REM LETTER FINISHED
655  PRINT LIN(L9-65)
660  NEXT C7
665  REM  ***************** EDIT AND ERASE ******************:
670  READ #1,1
675  PRINT '10"LIST, EDIT OR 'RELOAD ENTIRE' LETTER";
680  T=T1=0
685  INPUT A$
690  IF A$[1,1]="R" THEN 145
695  IF A$[1,1]="L" THEN 315
700  IF A$="STOP" THEN 1420
705  PRINT "IS ERASURE IN THE BODY OF THE LETTER";
710  X$=""
715  T=T1=F8=0
720  INPUT Q$
725  IF Q$="STOP" THEN 675
730  IF Q$[1,1]="N" THEN 820
735  PRINT "ERASE OR INSERT WORD(S)";
740  INPUT A$
745  IF A$[1,1]="I" THEN 1270
750  REM  ERASE- BODY
755  PRINT '10"ERASE: (START,END) OR (ONE WORD):";
760  INPUT A$
765  IF A$[1,1]="," THEN 755
770  FOR K=1 TO LEN(A$)
775  IF A$[K,K]#"," THEN 785
780  IF A$[K+1,K+1]#"," THEN 805
785  NEXT K
790  REM  ONE WORD
795  X$="<ONEWORD>"
800  GOTO 835
805  X$=A$[K+1,LEN(A$)]
810  A$=A$[1,K-1]
815  GOTO 835
820  REM  ERASE- NOT BODY
825  PRINT "ERASE WHAT";
830  INPUT A$
835  READ #1,1
840  READ #2,1
845  GOTO TYP(1) OF 850,865,985
850  READ #1;A1
855  READ #2;A4
860  GOTO 845
865  READ #1;B$
870  IF A1#5 THEN 915
875  IF Q$[1,1]="Y" THEN 885
880  GOTO 925
885  IF A$#B$[1,LEN(A$)] THEN 925
890  IF A$=B$ THEN 935
895  FOR B=1 TO LEN(V$)
900  IF B$[LEN(A$)+1,LEN(A$)+1]=V$[B,B] THEN 935
905  NEXT B
910  GOTO 925
915  IF Q$[1,1]="Y" THEN 925
920  IF A$=B$[1,LEN(A$)] THEN 935
925  READ #2;Y$
930  GOTO 845
935  REM T=NO INCORRECT ERASURES, T1=PRESENT COUNT
940  IF T=T1 THEN 955
945  T1=T1+1
950  GOTO 925
955  REM TO ERASE OF NOT
960  IF X$="<INSERT>" THEN 1345
965  IF Q$[1,1]#"Y" THEN 1060
970  IF X$="<ONEWORD>" THEN 1045
975  C$=B$
980  IF TYP(1)#1 THEN 995
985  PRINT "NON-EXISTENT WORD(S)"
990  GOTO 705
995  IF X$#B$[1,LEN(X$)] THEN 1020
1000  IF X$=B$ THEN 1030
1005  FOR K=1 TO LEN(V$)
1010  IF B$[LEN(X$)+1,LEN(X$)+1]=V$[K,K] THEN 1030
1015  NEXT K
1020  READ #1;B$
1025  GOTO 980
1030  READ #1;Z$
1035  PRINT "ERASE: ";Y$;" [";C$;"...";B$;"] ";Z$;
1040  GOTO 1065
1045  READ #1;Z$
1050  PRINT "ERASE: ";Y$;" [";B$;"] ";Z$;
1055  GOTO 1065
1060  PRINT "ERASE: ";B$;
1065  INPUT C$
1070  IF C$[1,1]="Y" THEN 1095
1075  T=T+1
1080  T1=0
1085  GOTO 835
1090  REM  ERASE-  REPLACE SUB-PROG
1095  PRINT "REPLACE WITH WHAT (IF ANY):"
1100  ENTER 255,Z9,C$
1105  PRINT 
1110  IF C$="STOP" THEN 1190
1115  IF LEN(C$)#0 THEN 1130
1120  PRINT #2;"<LINE>"
1125  GOTO 1100
1130  IF A1#5 THEN 1180
1135  F=1
1140  FOR S=1 TO LEN(C$)
1145  IF C$[S,S]#" " THEN 1165
1150  IF C$[S+1,S+1]=" " THEN 1165
1155  PRINT #2;C$[F,S-1]
1160  F=S+1
1165  NEXT S
1170  PRINT #2;C$[F,LEN(C$)]
1175  GOTO 1100
1180  PRINT #2;C$
1185  GOTO 1100
1190  REM  ERASE AND RESTORE FILES
1195  IF X$#"<INSERT>" THEN 1210
1200  PRINT #2;B$
1205  GOTO 1220
1210  IF Q$[1,1]="N" THEN 1220
1215  PRINT #2;Z$
1220  GOTO TYP(1) OF 1225,1240,1255
1225  READ #1;A
1230  PRINT #2;A
1235  GOTO 1220
1240  READ #1;A$
1245  PRINT #2;A$
1250  GOTO 1220
1255  PRINT #2; END 
1260  IF F8=1 THEN 315
1265  GOTO 705
1270  REM  INSERT
1275  T=T1=0
1280  PRINT "INSERT BETWEEN WHAT: (WORD,NEXT-WORD):";
1285  INPUT C$
1290  IF C$[1,1]="," THEN 1280
1295  IF C$="STOP" THEN 675
1300  X$="<INSERT>"
1305  FOR A=1 TO LEN(C$)
1310  IF C$[A,A]#"," THEN 1320
1315  IF C$[A+1,A+1]#"," THEN 1330
1320  NEXT A
1325  GOTO 1280
1330  Z$=C$[A+1,LEN(C$)]
1335  A$=C$[1,A-1]
1340  GOTO 835
1345  READ #2;Y$
1350  REM  CHECK: IF NEXT WORD IS AS INPUT
1355  IF TYP(1)=2 THEN 1370
1360  PRINT "WORD(S) NON-EXISTENT OR NOT IN BODY OF LETTER."
1365  GOTO 705
1370  READ #1;B$
1375  IF B$="<LINE>" THEN 1370
1380  IF Z$#B$[1,LEN(Z$)] THEN 1405
1385  IF Z$=B$ THEN 1410
1390  FOR B=1 TO LEN(V$)
1395  IF B$[LEN(Z$)+1,LEN(Z$)+1]=V$[B,B] THEN 1410
1400  NEXT B
1405  GOTO 1360
1410  PRINT "INSERT WHAT:"
1415  GOTO 1100
1420  STOP 
1425  GOTO TYP(0) OF 1430,1445,55
1430  PRINT "     ";
1435  READ A0
1440  GOTO 1425
1445  READ A$
1450  PRINT A$
1455  GOTO 1425
1460  DATA 1,"ANYONE CAN USE MSTS TO WRITE LETTERS IN ALMOST ANY"
1465  DATA "FORM OR STYLE.  THE MOST CONVENTIONAL FORM IS 'BLOCK' STYLE"
1470  DATA "IN WHICH MARGINS, PAGING AND LINE FEEDING ARE DONE AUTO-"
1475  DATA "MATICALLY.",1
1480  DATA "TYPE YOUR LETTER AS YOU WOULD NORMALLY.  FOR A LINE FEED"
1485  DATA "OR A NEW PARAGRAPH YOU TYPE '<LINE>' OR PUSH THE RETURN"
1490  DATA "KEY.  WHEN YOU NO LONGER WISH TO WRITE FOR THAT SPECFIC"
1495  DATA "SECTION YOU MUST TYPE 'STOP'.",1
1500  DATA "WHEN YOU FINISHED THE LETTER MSTS WILL ASK IF YOU WANT TO"
1505  DATA "ERASE OR INSERT ANYMORE MATERIAL.",1
1510  DATA "TO INSERT NEW MATERIAL, YOU NEED ONLY TYPE THE WORK IN"
1515  DATA "WHICH THE NEW MATERIAL FOLLOWS.",1
1520  DATA "TO ERASE YOU TYPE IN THE FIRST AND THE LAST WORD OF ANY"
1525  DATA "PART OF THE PHRASE.",1
1530  DATA "MSTS ALSO NEEDS A FILE; THE NUMBER OF RECORDS TO RESERVED"
1535  DATA "ARE AS FOLLOWS:"
1540  DATA "FOR SHORT LETTERS UP TO 75 WORDS OR 8 LINES ; 1.2 RECORDS."
1545  DATA "A MEDIMUM LETTER UP TO 150 WORDS OR 14 INES; 2 RECORDS."
1550  DATA "FOR LOGN LETTERS UP TO 1125 WORDS OR 19 LINES; 3 RECORDS."
1555  END 
