10 REM Program ViewCon to convert VIEW files to plain text without carriage retuns (unless multiple) 20 REM for text submissions to 8bs 30 REM derived from VIEWASC 40 REM this draft 5/9/1992 50 REM by H. L. Clarke 60 oscli=&FFF7:OSBYTE=&FFF4:OSWORD=&FFF1:OSWRCH=&FFEE:OSNEWL=&FFE7:OSASCI=&FFE3:OSRDCH=&FFE0:OSFILE=&FFDD 70 HIMEM=&7000 80 ftop=&7700 90 FOR pass%=0 TO 3 STEP 3 100 P%=&7780 110 [OPT pass% 120 JMP setup 130 JSR blank:JMP load 140 JSR blank:JMP savefile 150 EQUW 0:EQUS"(C) 1992 - H.L.Clarke":BRK 160 .setup:CLD 170 LDA #22:JSR OSWRCH:LDA #7:JSR OSWRCH 180 LDA #&83:JSR OSBYTE\get OSHWM 190 STY getad+1:STY putad+1:INC getad+1\store MSB of addresses for start of old and new files 200 LDA #0:STA getad:LDA #2:STA putad\edited file starting @ OSHWM+2 to preserve on 210 \print header and soft key instructions 220 LDX #(header MOD 256):LDY #(header DIV 256):JSR print 230 LDX #&30:JSR skey:LDX #(mkey0 MOD 256):LDY #(mkey0 DIV 256):JSR print 240 LDX #&31:JSR skey:LDX #(mkey1 MOD 256):LDY #(mkey1 DIV 256):JSR print 250 LDX #9:LDA #32:JSR repeat:LDX #&32:JSR skey:LDX #(mkey2 MOD 256):LDY #(mkey2 DIV 256):JSR print 260 JSR OSNEWL:JSR OSNEWL:LDA #60:LDX #20:JSR repeat:LDA #62:LDX #20:JSR repeat 270 LDA #28:JSR OSWRCH\set up text window 280 LDA #0:JSR OSWRCH:LDA #24:JSR OSWRCH 290 LDA #39:JSR OSWRCH:LDA #6:JSR OSWRCH 300 LDA #(ftop MOD 256):SEC:SBC getad:STA room 310 LDA #(ftop DIV 256):SBC getad+1:STA room+1 320 LDX #(fk0 MOD 256):LDY #(fk0 DIV 256):JSR oscli 330 LDX #(fk1 MOD 256):LDY #(fk1 DIV 256):JSR oscli 340 LDX #(fk2 MOD 256):LDY #(fk2 DIV 256):JSR oscli 350 \ 360 \ 370 \ 380 \ 390 .load:LDX #(old MOD 256):LDY #(old DIV 256):JSR print:JSR OSNEWL 400 LDX #8:LDA #32:JSR repeat:LDX #(word MOD 256):LDY #(word DIV 256):LDA #0:JSR OSWORD 410 LDA #5:LDX #(file MOD 256):LDY #(file DIV 256):JSR OSFILE\get file length from catalogue 420 \ 430 \ 440 \ 450 .checklen:LDA room:CMP startad:LDA room+1:SBC startad+1:LDA room+2:SBC startad+2:LDA room+3:SBC startad+3 460 BCC toolong:JMP fload\check file not too long for available memory 470 .toolong:BRK 480 EQUB 129 490 EQUS"File too long" 500 BRK 510 .fload:LDA getad:STA loadad\set up parameter block for OSFILE 520 LDA getad+1:STA loadad+1 530 LDA #0:STA exad 540 LDA #&FF:LDX #(file MOD 256):LDY #(file DIV 256):JSR OSFILE\load file 550 LDA startad:CLC:ADC getad:STA endad 560 LDA startad+1:ADC getad+1:STA endad+1\identify end of file 570 LDA endad:STA &72:LDA endad+1:STA &73:LDY #0:LDA #0:STA (&72),Y\put zero byte after end of file 580 \ 590 \ 600 .edit:LDA #0:STA gety:STA puty:STA &72:LDA #2:STA &74 610 LDA getad+1:STA &73:LDA putad+1:STA &75 620 .editloop:LDY gety:LDA (&72),Y:BEQ finish:BMI negative\identify ruler & edit commands 630 CMP #&D:BNE notcr 640 JSR addall:JMP editloop 650 .notcr:CMP #32:BCC less\identify soft spaces, &c 660 INY:STY gety 670 LDY puty:STA (&74),Y:INY:STY puty 680 JMP editloop 690 .less:INY:STY gety:JMP editloop 700 .negative:CMP #&80:BNE discard 710 INY:LDA (&72),Y:CMP #67:BNE discard 720 INY:LDA (&72),Y:CMP #69:BNE discard:INY:STY gety:JMP editloop\Command is CE 730 .discard:LDY gety 740 .disloop:LDA (&72),Y:CMP #13:BEQ endruler 750 INY:JMP disloop 760 .endruler:STY gety:JSR addget:JMP editloop 770 .finish:JSR addall 780 .savefile:JSR OSNEWL 790 LDX #(new MOD 256):LDY #(new DIV 256):JSR print 800 LDX #8:LDA #32:JSR repeat:LDX #(word MOD 256):LDY #(word DIV 256):LDA #0:JSR OSWORD 810 LDA name:CMP #42:BNE sroutine\check for '*' as first character 820 JSR comd:JMP savefile 830 .sroutine:LDA #0:STA loadad:STA loadad+1:STA loadad+2:STA loadad+3:STA exad:STA exad+1:STA exad+2:STA exad+3 840 STA startad+2:STA startad+3:STA lastbyte+2:STA lastbyte+3 850 LDA &74:STA lastbyte 860 LDA &75:STA lastbyte+1:LDA putad:STA startad:LDA putad+1:STA startad+1\set yp parameter block for OSFILE 870 LDA #0:LDX #(file MOD 256):LDY #(file DIV 256):JSR OSFILE\save file 880 JSR OSNEWL 890 LDX #(mback MOD 256):LDY #(mback DIV 256):JSR print 900 LDX #(mquery MOD 256):LDY #(mquery DIV 256):JSR print 910 LDA #32:LDX #8:JSR OSRDCH 920 AND #&5F:CMP #89:BNE final 930 JMP savefile 940 .final:RTS 950 \ 960 \ 970 \ 980 .print:STX &70:STY &71:LDY #0 990 .printloop:LDA (&70),Y:BEQ endprint 1000 JSR OSASCI:INY:JMP printloop 1010 .endprint:RTS 1020 \ 1030 \ 1040 .blank:LDA #11:JSR OSWRCH:LDA #13:JSR OSWRCH 1050 LDX #10:LDA #32 1060 .blankloop:JSR OSWRCH:DEX:BNE blankloop 1070 LDA #&D:JSR OSWRCH:RTS 1080 \ 1090 \ 1100 .skey:LDA #129:JSR OSWRCH 1110 LDA #157:JSR OSWRCH:LDA #135:JSR OSWRCH 1120 LDA #102:JSR OSWRCH 1130 TXA:JSR OSWRCH 1140 LDA #32:JSR OSWRCH:JSR OSWRCH 1150 LDA #156:JSR OSWRCH 1160 LDA #32:JSR OSWRCH:RTS 1170 \ 1180 \ 1190 .addall:STY gety:LDY puty:BEQ mult:LDA #32:JMP insert 1200 .mult:LDA &74:SEC:SBC #1:STA &76 1210 LDA &75:SBC #0:STA &77 1220 LDA #13:STA (&76),Y 1230 .insert:STA (&74),Y:INY:TYA:CLC 1240 ADC &74:STA &74 1250 LDA #0:STA puty:ADC &75:STA &75 1260 .addget:LDY gety:INY:TYA:CLC 1270 ADC &72:STA &72 1280 LDA #0:STA gety:ADC &73:STA &73 1290 RTS 1300 \ 1310 \ 1320 .comd:LDX #(name MOD 256):LDY #(name DIV 256):JSR oscli:RTS 1330 \ 1340 \ 1350 .repeat:JSR OSWRCH 1360 DEX:BNE repeat 1370 RTS 1380 \ 1390 \ 1400 .word:EQUW name\parameter block for OSWORD 0 1410 EQUB 32\maximum line length 1420 EQUB 32\lowest acceptable character 1430 EQUB 126\highest acceptable character 1440 BRK 1450 .file:EQUW name\parameter block for OSFILE 1460 .loadad:EQUD 0 1470 .exad:EQUD 0 1480 .startad:EQUD 0 1490 .lastbyte:EQUD 0\end address + 1 1500 BRK 1510 BRK 1520 .header:EQUB 132:EQUB 157:EQUB 135 1530 EQUS"VIEW to text conversion for 8bs " 1540 EQUB 156:EQUB 13:BRK 1550 .mkey0:EQUS"Restart ":BRK 1560 .mkey1:EQUS"Load/Edit":EQUB 13:BRK 1570 .mkey2:EQUS"Save/" 1580 .mback:EQUS"Backup":BRK 1590 .old:EQUS"Name of file to be converted :":EQUB &D:BRK 1600 .new:EQUS"Name of converted file to be saved":EQUB &D:EQUS"OR * command if required":EQUB &D:BRK 1610 .fk0:EQUS"KEY 0 CALL &7780 |M":EQUB 13 1620 .fk1:EQUS"KEY 1 CALL &7783 |M":EQUB 13 1630 .fk2:EQUS"KEY 2 CALL &7789 |M":EQUB 13 1640 .name:EQUS" " 1650 .mquery:EQUS" ? Y/N":EQUB &0D:BRK 1660 .getad:EQUW 0 1670 .putad:EQUW 0 1680 .gety:BRK 1690 .puty:BRK 1700 .room:EQUD 0 1710 .endad:EQUW 0 1720 ] 1730 NEXT 1740 VDU3 1750 INPUT"Save ViewCon ? Y/N ",yn$ 1760 IF LEFT$(yn$,1)="Y" OR LEFT$(yn$,1)="y" THEN 1770 ELSE END 1770 PRINT'"Press Space Bar when ready" 1780 IF GET=32 THEN 1790 ELSE 1770 1790 *SAVE ViewCon 7780 7C00 1800 INPUT"Backup copy ? Y/N ",yn$ 1810 IF LEFT$(yn$,1)="Y" OR LEFT$(yn$,1)="y" THEN 1770 1820 END