* FRMSDOS UTILITY FOR SK*DOS /68K * THIS UTILITY TRANSFERS A FILE FROM MSDOS FORMAT * COPYRIGHT (C) 1986 BY PETER A. STARK * EQUATES TO SK*DOS LIB SKEQUATE FRMSDO BRA.S START GO TO START DC.W $0104 VERSION NUMBER * START OF ACTUAL PROGRAM START DC GETNXT GET INPUT DRIVE NUMBER SUB.B #$30,D5 CONVERT FROM ASCII CMP.B #MAXDRV(A6),D5 CHECK IF VALID BHI.L HELP PRINT HELP MESSAGE ON ERROR LEA INFCB(PC),A4 MOVE.B D5,FCBDRV(A4) STORE INTO INPUT FCB MOVE.W #$0100,FCBCTR(A4) POINT BEFORE TRACK 1 SECTOR 1 LEA INFCB+FCBDAT+512(PC),A1 POINT PAST INPUT FCB DATA AREA MOVE.L A1,A2 DITTO MOVE.L A6,A4 POINT TO SYSTEM FCB DC GETNAM GET FILE SPEC INTO FCB BCS.L HELP PRINT HELP MESSAGE ON ERROR * FILE SPEC WAS OK; DEFAULT TO .TXT MOVE.B #1,D4 DEFAULT EXTENSION CODE DC DEFEXT DEFAULT TO .TXT * NOW ACTUALLY OPEN THE OUTPUT FILE MOVE.L A6,A4 DC FOPENW GO OPEN THE FILE FOR WRITING BNE.S ERROR IF NOT ZERO (Z = 0) CLR.B D3 CLEAR F6 FLAG * MAIN LOOP TO READ AND OUTPUT EACH CHARACTER MAIN BSR.S GETMSD GO GET MSDOS CHARACTER CMP.B #$0A,D4 LF? BEQ.S MAIN YES, IGNORE IT CMP.B #$1A,D4 EOF? BEQ.S CLOSE YES, CLOSE SK*DOS FILE AND QUIT ADD.B #1,D3 INCREMENT F6 COUNTER CMP.B #$F6,D4 F6? BEQ.S ISANF6 YES IT IS; CHECK COUNTER CLR.B D3 NO, CLEAR COUNTER AND CONTINUE CMP.B #$09,D4 IS IT A TAB? BNE.S CONTIN NO MOVE.B #$20,D4 YES, SUBSTITUTE SPACE BRA.S CONTIN ISANF6 TST.B D3 CHECK F6 COUNTER BEQ.S CLOSE QUIT AFTER 256 CONSECUTIVE F6'S CONTIN MOVE.L A6,A4 POINT TO SYSTEM FCB DC FWRITE WRITE NEXT CHARACTER TO SK*DOS FILE BNE.S ERROR QUIT ON ERROR BRA.S MAIN ELSE DO NEXT * GETMSD - GET CHARACTER FROM MSDOS FILE GETMSD CMP.L A1,A2 PAST END OF FCB? BNE.S NEXT NO, READ NEXT CHARACTER LEA INFCB(PC),A4 POINT TO INPUT FCB ADD.B #1,FCBCSE(A4) GO TO NEXT SECTOR MOVE.W FCBCTR(A4),D7 TRACK AND SECTOR CMP.B #10,D7 PAST SECTOR 9? BNE.S RDNEXT NO, OK TO EXIT ADD.W #$0100,D7 YES, SO NEXT TRACK MOVE.B #1,D7 AND SECTOR 1 MOVE.W D7,FCBCTR(A4) CMP.W #$2801,D7 PAST TRACK $27? BNE.S RDNEXT NO, OK TO CONTINUE LEA EMTMSG(PC),A4 DC PSTRNG PRINT "AT END OF MSDOS DISK BRA.S CLOSE AND QUIT RDNEXT DC SREAD GO READ NEXT SECTOR OF MSDOS DISK BNE.S ERROR LEA INFCB+FCBDAT(PC),A1 POINT TO DATA AREAA NEXT MOVE.B (A1)+,D4 GET NEXT CHARACTER RTS AND EXIT * HELP ROUTINE HELP LEA HLPMSG(PC),A4 DC PSTRNG PRINT HELP MESSAGE DC WARMST * ERROR ROUTINE ERROR DC PERROR PRINT ERROR CODE CLOSE MOVE.L A6,A4 POINT TO FCB DC FCLOSE GO CLOSE THE FILE BEQ.S QUIT DC PERROR IF THERE IS AN ERROR QUIT DC WARMST AND RETURN TO SK*DOS * TEXT STRINGS HLPMSG DC.B 'FROMSDOS reads a text file from a specially-formatted' DC.B $0D,$0A DC.B 'MSDOS disk to SK*DOS. Before using, you must' DC.B $0D,$0A DC.B "first format a disk with MSDOS's FORMAT A: /1 command." DC.B $0D,$0A DC.B 'Then copy the desired text file to this fresh disk (only' DC.B $0D,$0A DC.B 'one file per disk is allowed). Finally, remove the disk' DC.B $0D,$0A DC.B 'from your MSDOS system, place it into your SK*DOS system,' DC.B $0D,$0A DC.B 'and use FROMSDOS. The correct syntax is' DC.B $0D,$0A DC.B ' FROMSDOS ' DC.B $0D,$0A DC.B 'where is the drive which holds' DC.B $0D,$0A DC.B 'the MSDOS disk, and is the name of' DC.B $0D,$0A DC.B 'the desired SK*DOS file.',4 ODRMSG DC.B 'INVALID INPUT DRIVE NUMBER',4 EMTMSG DC.B 'ERROR - REACHED END OF MSDOS DISK.',4 * DATA AREA EVEN MAKE SURE IT STARTS ON EVEN ADDR INFCB DS.B 608 INPUT FCB END FRMSDO