[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: LF/CR conversion



Dave Althoff, Jr. wrote:
mmphosis <markstock@mail.com> wrote:
: REM convert linefeed to return
: REM * Applesoft BASIC, DOS 3.3 (might work with PRODOS)
: REM * maximum line length limited to 255 characters
: REM * use of GET may be slow
: : 10 FR$ = "SOURCE.TXT"
: 20 FW$ = "DESTINATION.TXT"
: 30 D$ = CHR$(4) : M$ = CHR$(13) : J$ = CHR$(10) : ?
: D$"OPEN"FR$M$D$"OPEN"FW$
: 40 ONERR GOTO 80
: 50 ? D$"READ"FR$
: 60 GET C$ : IF C$ <> J$ THEN T$ = T$ + C$: IF LEN(T$) < 255 THEN 60
: 70 ? M$D$"WRITE"FW$M$T$ : T$ = "" : GOTO 50
: 80 POKE 216,0 : E = PEEK(222) : IF E = 5 THEN IF LEN(T$) THEN ?
: M$D$"WRITE"FW$T$
: 90 ? D$"CLOSE"FW$M$D$"CLOSE"FR$ : IF E <> 5 THEN ? "ERROR "E : STOP

A couple of ideas here...
I believe this code should work in ProDOS. In DOS 3.3, you should add a naked "PRINT" before the write instruction in line 70. Alternatively, in 30 set D$=CHR$(13)+CHR$(4). The trouble with that approach is that while it solves the problem of GET preventing a DOS command from executing in DOS 3.3, it will also prevent BASIC.SYSTEM from recognizing the ^D as a ProDOS command. So to keep the code DOS-independent, just fix line 70:

70 PRINT:PRINT M$;D$"WRITE "FW$;M$;T$ : T$ = "" : GOTO 50 Here's another thought...ProDOS will allow you to load any file as a binary image. So why not do it this quick way:

10 HOME:PRINT "Input pathname:  ";:INPUT "";IP$
20 PRINT "Output pathname:  ";:INPUT "";OP$
30 PRINT CHR$(4);"BLOAD ";IP$;",A$2000,TTXT"
40 L = PEEK(48858)*256+PEEK(48857)+1
50 CALL 768
60 PRINT CHR$(4);"CREATE ";OP$;",TTXT"
70 PRINT CHR$(4);"BSAVE ";OP$;",A$2000,L";L;",TTXT"
80 HOME : END

combined with...
0300:        CLC
0301:        LDA $BEDA
0304:        ADC #$20
0306:        STA $07
0308:        LDA #$00
030A:        STA $06
030C:        LDY $BED9
030F: lp1    LDA ($06),Y
0310:        CMP #$0A
0312:        BNE $0318      ; skip
0314:        LDA #$0D
0316:        STA ($06),Y
0318: skip   CMP #$8A
031A:        BNE $0320      ; skip2
031C:        LDA #$8D
031E:        STA ($06),Y
0320: skip2  DEY
0321:        BNE $30F       ; lp1
0323:        DEC $07
0325:        LDA #$1F
0327:        CMP $07
0329:        BNE $30F
032B:        RTS

My programming skills are really rusty in both Applesoft and in 6502, and I have probably missed something. But that should load the text file as a binary image into the hires screen space, then start at the end of the file and work backward, changing all of the ^J's into ^M's, respecting the status of the high bit. Having walked the entire image (index sits at $1FFF), control returns to Applesoft which saves the processed file.

That was the approach I used, except I scanned forward.  ;-)

I only replaced characters, never altering the length of the file.  I
replaced CR/LF with blank/CR and LF alone with CR.  a cheap hack, but
it did what I needed.

-michael

NadaNet networking for Apple II computers!
Home page:  http://members.aol.com/MJMahon/

"The wastebasket is our most important design
tool--and it's seriously underused."