* TOMSDOS UTILITY FOR SK*DOS / 68K * THIS UTILITY TRANSFERS A TEXT FILE TO MSDOS FORMAT * COPYRIGHT (C) 1986 BY PETER A. STARK * EQUATES TO SK*DOS LIB SKEQUATE TOMSDO BRA.S START GO TO START DC.W $0101 VERSION NUMBER * START OF ACTUAL PROGRAM START CLR.B D3 PREVIOUS CHARACTER WAS NONE DC VPOINT POINT TO SK*DOS DATA AREA 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 GET OUTPUT DRIVE NUMBER DC GETNXT GET NEXT CHARACTER SUB.B #$30,D5 CONVERT FROM ASCII CMP.B MAXDRV(A6),D5 CHECK IF VALID BHI.L HELP IF ERROR LEA OUTFCB(PC),A4 POINT TO OUTPUT FCB MOVE.B D5,FCBDRV(A4) STORE DRIVE INTO OUTPUT FCB MOVE.W #$0006,FCBCTR(A4) READY TO READ TRACK 0 SECTOR 6 DC SREAD READ SECTOR FROM MSDOS DISK BNE.L ERROR 68K MUST BE ABLE TO READ MOVE.L FCBDAT+4(A4),D7 CHECK BYTES 5-8 BNE.S ISMSDO MUST NOT BE ZERO! NOTMSD LEA NOTMSG(PC),A4 ZERO MEANS PROBABLY SK*DOS DC PSTRNG PRINT "NOT A MSDOS DISK - CONTINUE? DC GETCH GET ANSWER AND.B #$DF,D5 CVT TO UPPER CASE CMP.B #$59,D5 CHECK FOR Y BEQ.S ISMSDO DC WARMST NO, QUIT ISMSDO LEA OUTFCB(PC),A4 POINT TO OUTPUT FCB MOVE.W #$0101,FCBCTR(A4) START AT TRACK 1 SECTOR 1 LEA OUTFCB+FCBDAT(PC),A1 POINT TO OUTPUT FCB DATA AREA LEA 512(A1),A2 AND PAST IT * NOW ACTUALLY OPEN THE INPUT FILE MOVE.L A6,A4 POINT TO USER FCB DC FOPENR AND GO OPEN THE FILE BNE.L ERROR IF ERROR * MAIN LOOP TO READ AND OUTPUT EACH CHARACTER MAIN MOVE.L A6,A4 POINT TO USER FCBJ DC FREAD GO READ NEXT CHARACTER BEQ.S CHAROK GO ON IF NO ERROR * IF THERE WAS AN ERROR, SEE IF END OF FILE MOVE.B FCBERR(A4),D7 GET ERROR CODE CMP.B #8,D7 COMPARE WITH END OF FILE ERROR BNE.L ERROR NOT END OF FILE, SO REAL ERROR MOVE.B #$1A,D5 ELSE FINISH WITH CONTROL-Z * CONTINUE IF CHARACTER IS OK CHAROK CMP.B #$0A,D5 IS IT LINE FEED? BNE.S OUTPUT NO, JUST OUTPUT IT CMP.B #$0D,D3 WAS PREV CHAR A CR? MOVE.B D5,D3 YES, SAVE PREVIOUS CHARACTER BRA.S MAIN YES, SO SWALLOW IT OUTPUT MOVE.B D5,D3 SAVE CHARACTER BSR.S PUTFCB AND PUT INTO OUTPUT FCB CMP.B #$1A,D5 END OF FILE? BEQ.S QUIT YES, JUST QUIT CMP.B #$0D,D5 WAS IT RETURN? BNE.S MAIN NO, SO JUST CONTINUE MOVE.B #$0A,D5 BSR.S PUTFCB FOLLOW WITH LF BRA.S MAIN AND ALSO CONTINUE * PUTFCB - PUT CHARACTER INTO OUTPUT FCB, AND WRITE IT OUT IF FULL PUTFCB MOVE.B D5,(A1)+ PUT INTO FCB CMP.B #$1A,D5 END OF FILE? BEQ.S WRITE YES, GO WRITE IT CMP.L A1,A2 PAST END? BNE.S RTS NO, EXIT WRITE MOVE.B D5,D2 TEMP SAVE CHARACTER LEA OUTFCB(PC),A4 POINT TO OUTPUT FCB DC SWRITE WRITE IT OUT BNE.S ERROR IF ERROR MOVE.L A6,A4 POINT BACK TO USER FCB LEA OUTFCB(PC),A0 POINT TO OUTPUT FCB LEA FCBDAT(A0),A1 POINT TO OUTPUT FCB DATA AREA ADD.B #1,FCBCSE(A0) GO TO NEXT SECTOR MOVE.W FCBCTR(A0),D7 CURRENT TRACK AND SECTOR CMP.B #10,D7 PAST SECTOR 9? BNE.S ALMRTS NO, OK TO EXIT ADD.W #$0100,D7 YES, SO NEXT TRACK MOVE.B #1,D7 AND SECTOR 1 MOVE.W D7,FCBCTR(A0) PUT BACK INTO FCB CMP.W #$2801,D7 PAST TRACK $27? BNE.S ALMRTS NO, OK TO CONTINUE LEA FULMSG(PC),A4 DC PSTRNG PRINT "DISK IS FULL BRA.S QUIT AND QUIT ALMRTS MOVE.B D2,D5 RESTORE CHARACTER INTO A RTS RTS AND EXIT * CLOSE SUBROUTINE CLOSE MOVE.L A6,A4 POINT TO FCB DC FCLOSE GO CLOSE THE FILE RTS AND THEN RETURN W/O ERROR MESSAGE * HELP ROUTINE HELP LEA HLPMSG(PC),A4 DC PSTRNG PRINT HELP MESSAGE DC WARMST * ERROR ROUTINE ERROR DC PERROR PRINT ERROR CODE QUIT BSR.S CLOSE CLOSE THE FILE DC WARMST AND RETURN TO SK*DOS * TEXT STRINGS HLPMSG DC.B 'TOMSDOS writes a text file to a specially-formatted' DC.B $0D,$0A DC.B 'MSDOS disk. Before using, you must first format' DC.B $0D,$0A DC.B "a transfer disk with MSDOS's FORMAT A: /1 command." DC.B $0D,$0A DC.B "Then run the following Basic program using the PC's" DC.B $0D,$0A DC.B 'Basic (it takes a few minutes):' DC.B $0D,$0A DC.B ' 10 OPEN "A:TEXT.TXT" FOR OUTPUT AS 1' DC.B $0D,$0A DC.B ' 20 PRINT #1, "EMPTY"' DC.B $0D,$0A DC.B ' 30 GOTO 20' DC.B $0D,$0A DC.B 'Now take the disk to your SK*DOS system and run TOMSDOS' DC.B $0D,$0A DC.B 'to copy the desired file to the disk (only one file can' DC.B $0D,$0A DC.B 'be copied to this disk; if you have more than one, you' DC.B $0D,$0A DC.B 'must start with another formatted disk.) The syntax' DC.B $0D,$0A DC.B 'for using TOMSDOS is' DC.B $0D,$0A DC.B ' TOMSDOS ' DC.B $0D,$0A DC.B 'where is the name of the text file to' DC.B $0D,$0A DC.B 'convert, and is the drive containing' DC.B $0D,$0A DC.B 'the MSDOS disk. The disk can now be read on your MSDOS system.' DC.B $0D,$0A DC.B 'If you wish to copy the file to another disk, you must use the' DC.B $0D,$0A DC.B "/A option of MS/PC-DOS's COPY command.",4 NOTMSG DC.B 'OUTPUT DISK IS PROBABLY NOT A MSDOS DISK - CONTINUE? ',4 FULMSG DC.B 'MSDOS DISK IS FULL.',4 * DATA AREA EVEN MAKE SURE TO BE ON EVEN ADDRESS OUTFCB DS.B 576 END TOMSDO