1REM Bugs: Top left char not copied to top right (or reversed - 0,0 lost) 2REM Fails if cursor editing 3REM Argh! Spool file, printer etc! 4REM And vdu 21? 5REM Turn off cursor during swap & restore to prev state after? 10osbyte=&FFF4 20oswrch=&FFEE 30REM This program reads and echoes 40REM like a dumb typewriter. 50REM On input of a special key, it 60REM reverses the screen so that 70REM arabic input will be read the 80REM correct way round! This simple 90REM scheme replaces ALL the daft 100REM *commands in the Arabic rom. 110PROCAss 120REPEAT 130C%=GET 140IF C%=ASC("*") THEN PROCSwapScr ELSE VDU C% 150IF C%=13 THEN VDU 10 160UNTIL0 170DEFPROCSwapScr 180 CALL swap 190ENDPROC 200 210DEFPROCAss 220DIM Code 511 230FOR Pass = 4 TO 6 STEP 2 240P%=Code:O%=Code 250[OPT Pass 260.swap 270 OPT FNinit \ -> MaxX,MinX,MaxY,MinY 280 Lda MaxY:Sec:Sbc MinY:Sta MaxYMinY 290 Clc:Adc #1:Sta LastYP1 300 Lda MaxX:Sec:Sbc MinX:Sta MaxXMinX 310 Clc:Adc #1:Sta LastXP1 320 Clc:Ror LastXP1 330 Ldy #0 340.YLoop 350 Ldx #0 360 Lda MaxXMinX 370 Sta RightX 380.XLoop 390 Stx XParm:Sty YParm:Jsr RdScr \ X,Y -> A 400 Sta LeftChar 410 Lda RightX:Sta XParm:Jsr RdScr \ MaxX-MinX-X,Y -> A 420 Sta RightChar 430 Lda #31:Jsr oswrch 440 Txa: Jsr oswrch 450 Tya: Jsr oswrch 460 Lda RightChar: Jsr oswrch 470 Lda #31:Jsr oswrch 480 Lda RightX:Jsr oswrch 490 Tya: Jsr oswrch 500 Lda LeftChar: Jsr oswrch 510 Dec RightX: Inx: Cpx LastXP1:Bne XLoop 520 Iny: Cpy LastYP1:Bne YLoop 521 OPT FNrestore 530 Rts 540.MaxX EQUB 79 550.MaxY EQUB 30 560.MinX EQUB 0 570.MinY EQUB 0 580.OldX NOP 590.OldY NOP 600.LastXP1 NOP 610.LastYP1 NOP 620.MaxXMinX NOP 630.MaxYMinY NOP 640.LeftChar NOP 650.RightChar NOP 660.RightX NOP 670.XParm NOP 680.YParm NOP 690.OldVDUvar NOP 700 OPT FNrdscr 710 OPT FNvduvar 720] 730NEXT Pass 740ENDPROC 750PROCrestore 760ENDPROC 770DEFFNinit 780[OPT Pass 790 Lda #160:Ldx #&66: Jsr osbyte \ Read VDU Variable 800 Stx OldVDUvar 810 Lda #23:Jsr oswrch 820 Lda #16:Jsr oswrch 830 Lda #1:Jsr oswrch 840 Lda #254:Jsr oswrch 850 Lda #134 860 Jsr osbyte 870 Sty OldY:Stx OldX 880 Lda #&08:Jsr vduvar:Sta MinX 890 Lda #&09:Jsr vduvar:Sta MaxY 900 Lda #&0A:Jsr vduvar:Sta MaxX 910 Lda #&0B:Jsr vduvar:Sta MinY 920] 930=Pass 940 950DEFFNrdscr:REM (X%,Y%) 960[OPT Pass 970.RdScr 980 Phx:Phy 990 Lda #31:Jsr oswrch 1000 Lda XParm:Jsr oswrch 1010 Lda YParm:Jsr oswrch 1020 Lda #135 \ Read text at cursor 1030 Jsr osbyte 1040 Txa 1050 Ply:Plx 1060 Cmp #0:Bne notweak:Lda #32:.notweak \ Cell contained graphics 1070 Rts 1080] 1090=Pass 1100DEFFNrestore 1110[OPT Pass 1120 Lda #23:jsr oswrch 1130 Lda #16:jsr oswrch 1140 Lda OldVDUvar:jsr oswrch 1150 Lda #0:jsr oswrch:jsr oswrch:jsr oswrch:jsr oswrch:jsr oswrch:jsr oswrch:jsr oswrch:jsr oswrch:jsr oswrch 1170 Lda #23:jsr oswrch 1180 Lda #16:jsr oswrch 1190 Lda #2:jsr oswrch 1200 Lda #255:jsr oswrch 1210 Lda #0:jsr oswrch:jsr oswrch:jsr oswrch:jsr oswrch:jsr oswrch:jsr oswrch:jsr oswrch:jsr oswrch:jsr oswrch 1230 Lda #31:jsr oswrch 1240 Lda OldX:jsr oswrch 1250 Lda OldY:jsr oswrch 1260] 1270=Pass 1280ENDPROC 1290DEFFNvduvar 1300[OPT Pass 1310.vduvar 1320 Phx:Pha:Lda #160:Plx:Jsr osbyte:Txa:Plx 1330 Rts 1340] 1350=Pass