100 ! THE WRITER'S FRIEND 110 ! TEXT FILE CONVERSION UTILITY 120 ! VERSION 3.2 130 ! 140 ! 11/84 RICHARD MINUTILLO 150 ! 160 ! SET-UP 170 ! 180 CALL CLEAR :: CALL INIT 190 CALL CHAR(127,"0000005A52DAD2DB",128,"00000010000000000000000000000000E080808EEA0E0C0A007C9494947C1414") 200 CALL CHAR(134,"3C4299A1A199423C",136,"F090F087880B090F6090402795650704",143,"FFFFC3C3C3C3FFFF") :: CALL SCREEN(15) :: CALL COLOR(14,8,9) 210 DI$ = RPT$( CHR$(143) ,28) 220 RESTORE 2000 :: FOR I = 1 TO 8 :: READ A,B :: EASUB$ = EASUB$ & CHR$(B) :: COMPSUB$ = COMPSUB$ & CHR$(A) :: NEXT I 230 DISPLAY DI$,," THE WRITER'S FRIEND text file conversion utility" 240 DISPLAY ,,,,,, CHR$(134) & "1984 - RICHARD G. MINUTILLO a product of the fine-arts bluesband & poetry press" 250 DISPLAY ,,DI$,,,,,,,,,,, :: FOR D = 1 TO 1000 :: NEXT D :: CALL CLEAR :: CALL COLOR(14,2,1) 260 ! 270 ! GET DRIVE NUMBERS: 280 ! TI-WRITER DISK IN DRIVE A 290 ! companion DISK IN DRIVE B 300 ! 310 DISPLAY ,,"TI-Writer DRIVE #(1-3):" 320 ACCEPT AT(23,25) SIZE (1) BEEP VALIDATE ( NUMERIC ) :A 330 IF A < 1 OR A > 3 THEN 310 340 DISPLAY "companion" & CHR$(127) & " DRIVE #(1-3):" 350 ACCEPT AT(23,25) SIZE (1) VALIDATE ( NUMERIC ) BEEP :B 360 IF B < 1 OR B > 3 THEN 340 370 ! 380 ! SELECT TI TO companion 390 ! OR companion TO TI 400 ! 410 DISPLAY ,,"SELECT OPTION:",,,"[1] TI-Writer TO companion" & CHR$(127) & " [2] companion" & CHR$(127) & " TO TI-Writer",,, 420 DISPLAY "OPTION:" :: ACCEPT AT(23,8) VALIDATE ( NUMERIC ) SIZE (1) BEEP :AN 430 IF AN = 2 THEN 1060 ELSE IF AN < > 1 THEN 410 440 ! 450 ! *************************************************** 460 ! * READ TI-WRITER FILE AND WRITE AS companion FILE * 470 ! *************************************************** 480 ! 490 DISPLAY ,,"TI-Writer FILENAME?","DSK" & STR$(A) & "." 500 ACCEPT AT(23,6) SIZE (10) BEEP :EAFNAME$ 510 IF EAFNAME$ = " THEN 500 ELSE EADRIVE$ = "DSK" & STR$(A) & "." & EAFNAME$ 520 DISPLAY ,,"companion" & CHR$(127) & " FILENAME?","DSK" & STR$(B) & "." 530 ACCEPT AT(23,6) SIZE (10) BEEP :COMFNAME$ 540 IF COMFNAME$ = " THEN 530 ELSE CDRIVE$ = "DSK" & STR$(B) & "." & COMFNAME$ 550 DISPLAY ,,"CARRIAGE RETURN AT END OF EACH E/A RECORD? (Y/N):N" :: ACCEPT AT(23,24) VALIDATE ("YN") SIZE ( -1) BEEP :AN$ 560 IF AN$ = "Y" THEN LINEFEED_ON = 1 ELSE LINEFEED_ON = 0 570 DISPLAY ,,"WORKING....",,"PLEASE TRY NOT TO INTERRUPT",,, 580 OPEN #1:EADRIVE$, DISPLAY , INPUT , VARIABLE 80 :: OPEN #2:"DSK" & STR$(B) & ".TEMP$$$$$$", INTERNAL , OUTPUT , VARIABLE 254 590 ! 600 ! INSERT SIX BLANKS AT START OF companion ON RECORD #1 610 ! 620 FOR K = 1 TO 6 :: INSERT$ = CHR$(0) :: GOSUB 840 :: NEXT K 630 ! 640 ! LOOP THROUGH E/A RECORDS 650 ! 660 LINPUT #1:EA$ 670 LEADING = 1 680 FOR EA_SEG = 1 TO LEN(EA$) :: INSERT$ = SEG$(EA$,EA_SEG,1) :: IF INSERT$ = CHR$(32) AND LEADING THEN 700 ELSE LEADING = 0 690 GOSUB 820 700 NEXT EA_SEG 710 ! 720 ! INSERT SPACE OR LINEFEED AFTER EACH DISPLAY 80 RECORD 730 ! 740 IF LINEFEED_ON THEN INSERT$ = CHR$(130) ELSE INSERT$ = CHR$(128) 750 GOSUB 840 760 ! 770 IF EOF(1) THEN 900 ELSE GOTO 660 780 ! 790 ! SUBROUTINE TO SUBSTITUTE CHARACTERS IF NECESSARY 800 ! AND ADD TO COMP_OUT$ AND TEST FOR LENGTH 810 ! 820 IF INSERT$ = CHR$(94) THEN INSERT$ = CHR$(137) :: GOTO 840 ELSE IF ASC(INSERT$) > 33 AND ASC(INSERT$) < 127 THEN 840 830 IF POS(EASUB$,INSERT$,1) THEN INSERT$ = SEG$(COMPSUB$, POS(EASUB$,INSERT$,1) ,1) ELSE RETURN 840 COMP_OUT$ = COMP_OUT$ & INSERT$ :: COMPLEN = COMPLEN + 1 850 IF COMPLEN = 253 THEN PRINT #2:COMP_OUT$ :: DISPLAY ,,"RECORD #";LENGTH + 1,,COMP_OUT$ :: COMP_OUT$ = " :: COMPLEN = 0 :: LENGTH = LENGTH + 1 860 RETURN 870 ! 880 ! EXIT SEQUENCE 890 ! 900 CCOUNT = (253 * LENGTH) + COMPLEN 910 PRINT #2:COMP_OUT$ :: DISPLAY ,,"RECORD #";LENGTH + 1,,COMP_OUT$ :: CLOSE #1 :: CLOSE #2 920 ! 930 ! REWRITE TEMP FILE WITH companion 'SIGNATURE' 940 ! 950 OPEN #1:"DSK" & STR$(B) & ".TEMP$$$$$$", INTERNAL , INPUT , VARIABLE 254 :: OPEN #2:CDRIVE$, INTERNAL , OUTPUT , VARIABLE 254 960 INPUT #1:FIRSTREC$ 970 NFIRSTREC$ = RPT$( CHR$(0) ,4) & CHR$( INT(CCOUNT/256) ) & CHR$(CCOUNT -( INT(CCOUNT/256) ) * 256) & SEG$(FIRSTREC$,7, LEN(FIRSTREC$) -6) 980 PRINT #2:NFIRSTREC$ :: IF EOF(1) THEN CLOSE #1: DELETE :: CLOSE #2 :: GOTO 1550 990 INPUT #1:NEXTREC$ :: IF EOF(1) THEN PRINT #2:NEXTREC$ :: CLOSE #1: DELETE :: CLOSE #2 :: GOTO 1550 1000 PRINT #2:NEXTREC$ :: GOTO 990 1010 ! 1020 ! *************************************************** 1030 ! * READ companion FILE AND WRITE AS TI-WRITER FILE * 1040 ! *************************************************** 1050 ! 1060 DISPLAY ,,"companion" & CHR$(127) & " FILENAME?","DSK" & STR$(B) & "." 1070 ACCEPT AT(23,6) SIZE (10) BEEP :COMFNAME$ 1080 IF COMFNAME$ = " THEN 1070 ELSE CDRIVE$ = "DSK" & STR$(B) & "." & COMFNAME$ 1090 DISPLAY ,,"TI-Writer FILENAME?","DSK" & STR$(A) & "." 1100 ACCEPT AT(23,6) SIZE (10) BEEP :EAFNAME$ 1110 IF EAFNAME$ = " THEN 1100 ELSE EADRIVE$ = "DSK" & STR$(A) & "." & EAFNAME$ 1120 DISPLAY ,,"CONTROL CHARACTERS IN YOUR DISPLAY 80 FILE? (Y/N):Y" :: ACCEPT AT(23,24) VALIDATE ("YN") SIZE ( -1) BEEP :AN$ 1130 IF AN$ = "N" THEN CCAR = 0 :: GOTO 1160 ELSE CCAR = 1 1140 DISPLAY ,,"SUBSTITUTE "~" [TILDE] FOR CONTROL CHARACTERS? (Y/N):Y" :: ACCEPT AT(23,27) SIZE ( -1) BEEP VALIDATE ("YN") :T$ 1150 IF T$ = "Y" THEN TILDE = 1 ELSE TILDE = 0 1160 DISPLAY ,,"RIGHT MARGIN POSITION? (34-79):71" :: ACCEPT AT(23,9) SIZE ( -2) BEEP VALIDATE ( NUMERIC ) :MAXLEN 1170 IF MAXLEN < 34 OR MAXLEN > 79 THEN 1160 1180 DISPLAY ,,"NUMBER OF LEADING SPACES? (0-10):8" :: ACCEPT AT(23,8) SIZE ( -2) BEEP VALIDATE ( NUMERIC ) :LEADER 1190 IF LEADER < 0 OR LEADER > 10 THEN 1180 1200 DISPLAY ,,"WORKING....",,"PLEASE TRY NOT TO INTERRUPT",,, 1210 OPEN #1:CDRIVE$, INTERNAL , INPUT , VARIABLE 254 :: OPEN #2:EADRIVE$, DISPLAY , OUTPUT , VARIABLE 80 1220 ! 1230 ! LOOP THROUGH companion RECORDS 1240 ! 1250 LENGTH,LINEN = 0 :: EA_OUT$ = RPT$( CHR$(32) ,LEADER) 1260 INPUT #1:C$ :: LENGTH = LENGTH + 1 1270 ! 1280 FOR C_SEG = 1 TO LEN(C$) 1290 INSERT$ = SEG$(C$,C_SEG,1) :: IF LENGTH = 1 AND C_SEG < 7 THEN 1300 ELSE GOSUB 1360 1300 NEXT C_SEG 1310 IF EOF(1) THEN 1540 ELSE 1260 1320 ! 1330 ! SUBROUTINE TO SUBSTITUTE CHARACTERS IF NECESSARY 1340 ! AND ADD TO EA_OUT$ AND TEST FOR LENGTH 1350 ! 1360 IF ASC(INSERT$) > 32 AND ASC(INSERT$) < 127 THEN 1410 1370 IF POS(COMPSUB$,INSERT$,1) THEN INSERT$ = SEG$(EASUB$, POS(COMPSUB$,INSERT$,1) ,1) :: GOTO 1410 1380 IF CCAR AND TILDE THEN INSERT$ = CHR$(126) ELSE IF CCAR THEN INSERT$ = CHR$(32) ELSE RETURN 1390 GOTO 1410 1400 IF INSERT$ = CHR$(32) THEN 1410 ELSE IF CCAR = 0 THEN GOSUB 1450 :: RETURN ELSE EA_OUT$ = EA_OUT$ & INSERT$ :: GOSUB 1450 :: RETURN 1410 EA_OUT$ = EA_OUT$ & INSERT$ 1411 IF LEN(EA_OUT$) > MAXLEN OR INSERT$ = CHR$(10) OR INSERT$ = CHR$(12) OR INSERT$ = CHR$(13) THEN GOSUB 1450 :: RETURN ELSE RETURN 1420 ! 1430 ! WORD WRAP 1440 ! 1450 LINEN = LINEN + 1 :: IF INSERT$ = CHR$(32) OR INSERT$ = CHR$(10) OR INSERT$ = CHR$(13) OR INSERT$ = CHR$(12) THEN P_EA_OUT$ = EA_OUT$ :: N_EA_OUT$ = " :: GOTO 1500 1460 FOR II = LEN(EA_OUT$) -1 TO 1 STEP -1 1470 IF SEG$(EA_OUT$,II,1) = CHR$(32) THEN P_EA_OUT$ = SEG$(EA_OUT$,1,II) :: N_EA_OUT$ = SEG$(EA_OUT$,II + 1, LEN(EA_OUT$) -II) :: GOTO 1500 1480 NEXT II 1490 P_EA_OUT$ = EA_OUT$ :: N_EA_OUT$ = " 1500 PRINT #2:P_EA_OUT$ :: DISPLAY ,,"LINE #";LINEN,,P_EA_OUT$ :: EA_OUT$ = N_EA_OUT$ & RPT$( CHR$(32) ,LEADER) :: RETURN 1510 ! 1520 ! EXIT SEQUENCE 1530 ! 1540 PRINT #2:EA_OUT$ :: DISPLAY ,,"LINE #";LINEN + 1,,EA_OUT$ :: EA_OUT$ = " :: CLOSE #1 :: CLOSE #2 1550 DISPLAY ,,"DO ANOTHER FILE? (Y/N):" 1560 ACCEPT AT(23,24) BEEP VALIDATE ("YN") SIZE (1) :AN$ 1570 IF AN$ = "Y" THEN 310 1580 CALL PEEK(2,A,B) :: CALL LOAD( -31804,A,B) 1590 ! 1600 ! ERROR TRAP 1610 ! 1620 DISPLAY ,,,,"DISK ACCESS ERROR!","CHECK DRIVES AND FILENAMES:",,,EADRIVE$,,CDRIVE$ 1630 FOR D = 1 TO 2000 :: NEXT D 1640 RUN 2000 DATA 128,32,130,13,136,12,130,10,131,13,137,94,132,13,129,13