[Copyright 1999,2002 Frank Durda IV, All Rights Reserved. Mirroring of any material on this page in any form is expressly prohibited. The official web site for this material is: http://nemesis.lonestar.org Contact this address for use clearances: clearance at nemesis.lonestar.org Comments and queries to this address: web_software at nemesis.lonestar.org]
MISOSYS EDAS-4.3 04/19/99 21:20:56 CONV - LS-DOS 6.2 Page 00001
00001 ;CONV/ASM - Convert TRSDOS 1.2, 1.3 Disks
00003 ;
001C 00004 HOME EQU 1CH
001F 00005 CLR EQU 1FH
0003 00006 ETX EQU 03H
000D 00007 CR EQU 0DH
000A 00008 LF EQU 10
00009 ;
0040 00010 FLAG EQU 01000000B
0010 00011 ABB EQU 00010000B
00012 ;
0000 00013 *GET SVCMAC:3 ;SVC Macro equivalents
00014 ;SVCMAC/ASM - LS-DOS Version VI
00015 *LIST OFF
00407 *LIST ON
0000 00409 *GET COPYCOM:3 ;Copyright message
00410 ; COPYCOM - File for Copyright COMment block
00411 ;
0000 00412 *GET BUILDVER/ASM:3
00413 ;
00414 ; Buildver/asm is a bit of a kludge since not all utilities can load
00415 ; equates from LDOS60 and still compile. LOWCORE and everybody else
00416 ; relies on this setting, and it eventually ends up in LDOS60/EQU
00417 ; for programs that can use that.
00418 ;
FFFF 00419 @BLD631 EQU -1 ;<631>Build 631 distribution (LEVEL 1B)
00420 ; These switches activate patches made since the 1B release.
00421 ; It is important that all earlier patches be enabled when a higher
00422 ; patch is enabled.
00423 ; Patches C thru F were published in TMQ IV.iv, page 32 (NOTE: the
00424 ; patch addresses listed for SPOOL in SPOOL1/FIX are 19H high.)
FFFF 00425 @BLD631C EQU -1 ;<631>Apply 1C patches (SETKI)
FFFF 00426 @BLD631D EQU -1 ;<631>Apply 1D patches (DIR)
FFFF 00427 @BLD631E EQU -1 ;<631>Apply 1E patches (DIR & MEMDISK/DCT)
FFFF 00428 @BLD631F EQU -1 ;<631>Apply 1F patches (SPOOL)
00429 ; Patches G and H were published in TMQ V.i, pages 10 and 18/19.
FFFF 00430 @BLD631G EQU -1 ;<631>Apply 1G patches (//KEYIN,DIR,DO *)
FFFF 00431 @BLD631H EQU -1 ;<631>Apply 1H patches (MEMORY)
00432 ;
00433 ;End of BUILDVER/ASM
00434 IF @BLD631
00436 ELSE
00437 COM '<*(C) 1982,3,4,6 by LSI*>'
00438 ENDIF
00439 ;
2600 00440 ORG 2600H
00441 ;
00442 BEGIN
00443 IF @BLD631
2600 ED734226 00444 LD (STACK),SP ;<631>Save entry stack
2604 00445 @@CKBRKC ;<631>Check for break
2604+3E6A 00446 LD A,106
2606+EF 00447 RST 40
2607 203C 00448 JR NZ,$ABORT ;<631>abort
00449 ELSE
00450 @@CKBRKC
00451 JR Z,BEGINA ;Continue if no break
00452 LD HL,-1
00453 RET ; else abort
00454 ;
00455 BEGINA
00456 LD (STACK),SP ;Save entry stack
00457 ENDIF
2609 E5 00458 PUSH HL ;Save ptr to CMD buffer
260A 00459 @@DSPLY HELLO$ ;Display the signon
00460 IFEQ 01H,1
260A+21A52A 00461 LD HL,HELLO$
00462 ENDIF
260D+3E0A 00463 LD A,10
260F+EF 00464 RST 40
2610 210000 00465 LD HL,0 ;Set up to get HIGH$
2613 45 00466 LD B,L
2614 00467 @@FLAGS ;IY => flag table base
2614+3E65 00468 LD A,101
2616+EF 00469 RST 40
2617 FDCB024E 00470 BIT 1,(IY+'C'-'A') ;OK if not CMDR
261B 2801 00471 JR Z,NOTCMDR ;Use LOW$ otherwise
261D 04 00472 INC B
261E 00473 NOTCMDR @@HIGH$ ;P/u HIGH$/LOW$
261E+3E64 00474 LD A,100
2620+EF 00475 RST 40
2621 22B928 00476 LD (MYHIGH),HL ;Store away
2624 FDE5 00477 PUSH IY ;Trans to HL
2626 D1 00478 POP DE
2627 210A00 00479 LD HL,'K'-'A' ;Offset to KFLAG$
262A 19 00480 ADD HL,DE ;HL=>KFLAG$
262B 222227 00481 LD (KFLG),HL ;Store pointer
262E CB86 00482 RES 0,(HL) ;Kick break bit off
2630 211200 00483 LD HL,'S'-'A' ;SFLAG$ offset
2633 19 00484 ADD HL,DE
2634 22CF27 00485 LD (SFLG),HL ;Store away
2637 E1 00486 POP HL ;Restore cmd pointer
2638 CD5326 00487 CALL PGRM ; and continue
00488 ;
00489 ; Exit routines
00490 ;
263B 210000 00491 $EXIT LD HL,0 ;Init to no error
263E 00492 $QUIT @@CKBRKC ;Clear out break bit
263E+3E6A 00493 LD A,106
2640+EF 00494 RST 40
2641 310000 00495 LD SP,$-$ ;P/u original stack
2642 00496 STACK EQU $-2
2644 C9 00497 RET
00498 ;
2645 21FFFF 00499 $ABORT LD HL,-1 ;Set abort code
2648 18F4 00500 JR $QUIT ; and quit
00501 ;
00502 IF @BLD631
264A 3E0D 00503 $CR LD A,CR ;<631>
00504 ENDIF
264C C5 00505 $DSP PUSH BC ;Display a character,
264D 4F 00506 LD C,A ; saving BC
264E 00507 @@DSP
264E+3E02 00508 LD A,2
2650+EF 00509 RST 40
2651 C1 00510 POP BC
2652 C9 00511 RET
00512 ;
00513 ; Pick up drive numbers and partial filespec
00514 ;
00515 PGRM:
2653 7E 00516 LD A,(HL) ;Check for NOT filespec
2654 FE2D 00517 CP '-' ; char used
2656 2006 00518 JR NZ,MVNAM1 ;Go if not NOT
2658 3EFF 00519 LD A,0FFH ;TRUE value
265A 32992A 00520 LD (NOTPRM),A ;Set if specified
265D 23 00521 INC HL
265E 119A2A 00522 MVNAM1 LD DE,PATTRN ;Point to possible partspec
2661 0608 00523 LD B,8 ;Max 8 chars in name
2663 CDA929 00524 CALL SKIPSP ;Skip spaces
2666 CDB829 00525 CALL MOVELT ;Move letters/digits/$
2669 CDB029 00526 CALL SKIPLT ;Skip letters/digits/$
266C 7E 00527 LD A,(HL) ;Check for extension
266D FE2F 00528 CP '/'
266F 200C 00529 JR NZ,NOEXT ;Go if none
2671 23 00530 INC HL
2672 11A22A 00531 LD DE,PATEXT ;Point to ext field
2675 0603 00532 LD B,3 ;Max 3 chars in ext
2677 CDB829 00533 CALL MOVELT ;Move letters/digits/$
267A CDB029 00534 CALL SKIPLT ;Skip letters/digits/$
267D CD9A29 00535 NOEXT CALL GETDRV ;Get source drive #
2680 32232C 00536 LD (SDRIVE),A ;Store drive #
2683 A7 00537 AND A ;Be sure not drive 0
2684 11532B 00538 LD DE,NOT0 ;Error msg
2687 EB 00539 EX DE,HL
2688 CA3329 00540 JP Z,PERR1 ;Param error source is 0
268B EB 00541 EX DE,HL ;Restore cmd line ptr
268C CDA929 00542 CALL SKIPSP ;Skip spaces
268F CD9429 00543 CALL GETDRV2 ;Get destination drive
2692 32242C 00544 LD (DDRIVE),A ;0FFH if no dest drv
2695 CDA929 00545 CALL SKIPSP ;Move to '('
00546 ;
00547 ; Scan parameters
00548 ;
2698 11642A 00549 LD DE,PRMTBL$ ;Check parameters entered
269B 00550 @@PARAM
269B+3E11 00551 LD A,17
269D+EF 00552 RST 40
269E C22F29 00553 JP NZ,PRMERR ;Quit on parm error
26A1 210000 00554 DPARM LD HL,$-$ ;DIR only?
26A4 7C 00555 LD A,H
26A5 B5 00556 OR L
26A6 2805 00557 JR Z,SPARM ;Go if not
26A8 3EFF 00558 LD A,0FFH ;Set flag at DDRIVE
26AA 32242C 00559 LD (DDRIVE),A ;If dest is ff, read DIR
26AD 210000 00560 SPARM LD HL,$-$ ;Check if no parms S,I,V
26B0 110000 00561 VPARM LD DE,$-$
26B3 010000 00562 IPARM LD BC,$-$
26B6 7D 00563 LD A,L
26B7 B3 00564 OR E
26B8 B1 00565 OR C
26B9 323927 00566 LD (SIV+1),A ;Save S!I!V
26BC 21FFFF 00567 QPARM LD HL,0FFFFH ;P/u Q,N,O parms
26BF 110000 00568 NPARM LD DE,0
26C2 010000 00569 OPARM LD BC,0
26C5 7B 00570 LD A,E ;Form N!O
26C6 B1 00571 OR C
26C7 32E027 00572 LD (NORO+1),A ;Save that
00573 ;
00574 ; Save old DCT
00575 ;
26CA 3A232C 00576 LD A,(SDRIVE) ;Pick up source drive #
26CD 4F 00577 LD C,A ;Move to C reg
26CE 3A242C 00578 LD A,(DDRIVE) ;Be sure not single drive
26D1 B9 00579 CP C
26D2 21282B 00580 LD HL,NOTONE ;=>error msg
26D5 CA3329 00581 JP Z,PERR1 ;Go if same
26D8 00582 @@GTDCT ;Point to DCT
26D8+3E51 00583 LD A,81
26DA+EF 00584 RST 40
26DB C5 00585 PUSH BC ;Save drive #
26DC FDE5 00586 PUSH IY ;Move DCT to HL reg
26DE E1 00587 POP HL
26DF 112C2C 00588 LD DE,SAVDCT ;Point to save area
26E2 010A00 00589 LD BC,10
26E5 EDB0 00590 LDIR ;Move it
26E7 C1 00591 POP BC
00592 ;
00593 ; Find directory track
00594 ;
26E8 110100 00595 LD DE,0001 ;Track 0, sector 1
26EB 21002D 00596 LD HL,DBUFF ;Buffer for sector
26EE 00597 @@RDSEC
26EE+3E31 00598 LD A,49
26F0+EF 00599 RST 40
26F1 2808 00600 JR Z,OK0 ;Go if no error
26F3 FE06 00601 CP 6 ;Was it DAM error?
26F5 C21429 00602 JP NZ,IOERR ;Go if some other
26F8 CD452A 00603 CALL CKEARLY ;Can we do this type?
26FB 23 00604 OK0 INC HL ;Point to dir cyl #
26FC 56 00605 LD D,(HL) ;Get it
26FD 24 00606 INC H ;Point to TRSDOS
26FE 2B 00607 DEC HL ; version number
26FF 2B 00608 DEC HL
2700 2B 00609 DEC HL
2701 7E 00610 LD A,(HL) ;Pick it up
2702 328328 00611 LD (TRSDOS+1),A ;Save for later
00612 ;
00613 ; Read directory records into memory
00614 ;
2705 1E03 00615 LD E,3 ;Skip GAT and HIT
2707 0610 00616 LD B,16 ;Read 16 sectors
2709 21002D 00617 LD HL,DBUFF
270C FD360712 00618 DREAD LD (IY+7),18 ;Chg # sectors/trk for
2710 00619 @@RDSEC ; TRSDOS & Read a sector
2710+3E31 00620 LD A,49
2712+EF 00621 RST 40
2713 2805 00622 JR Z,OK1 ;Go if no error
2715 FE06 00623 CP 6 ;Ignore record type
2717 C21429 00624 JP NZ,IOERR ;Go if error
271A 24 00625 OK1 INC H ;Bump buffer pointer
271B 1C 00626 INC E ;Bump sector number
271C 10EE 00627 DJNZ DREAD ;Loop till done
00628 ;
00629 ; Loop through all entries
00630 ;
271E 21002D 00631 LD HL,DBUFF ;Point to first entry
2721 00632 ELOOP EQU $
2721 3A0000 00633 LD A,($-$) ;Check system break bit
2722 00634 KFLG EQU $-2 ;Address of KFLAG
2724 CB47 00635 BIT 0,A
2726 C24526 00636 JP NZ,$ABORT ;Abort if set
2729 46 00637 LD B,(HL) ;P/U attributes
272A E5 00638 PUSH HL
272B DDE1 00639 POP IX
272D E5 00640 PUSH HL
272E CB60 00641 BIT 4,B ;Alive?
2730 CAF128 00642 JP Z,SKIPIT ;Skip it if dead
2733 CB78 00643 BIT 7,B ;FXDE?
2735 C2F128 00644 JP NZ,SKIPIT ;Skip it if so
00645 ;
00646 ; Check file's attributes
00647 ;
2738 3E00 00648 SIV LD A,$-$ ;S, I, or V given?
273A A7 00649 AND A
273B 2821 00650 JR Z,NOSIV ;Go if none given
273D CB70 00651 BIT 6,B ;SYS file?
273F 2809 00652 JR Z,NOTSYS ;Go if not
2741 3AAE26 00653 LD A,(SPARM+1) ;S parm given?
2744 A7 00654 AND A
2745 CAF128 00655 JP Z,SKIPIT ;Skip file if not
2748 1814 00656 JR NOSIV ; else possible match
274A CB58 00657 NOTSYS BIT 3,B ;Visible or invisible?
274C 2009 00658 JR NZ,INV ;Go if inv
274E 3AB126 00659 LD A,(VPARM+1) ;V parm given?
2751 A7 00660 AND A
2752 CAF128 00661 JP Z,SKIPIT ;Skip file if not
2755 1807 00662 JR NOSIV ; else possible match
2757 3AB426 00663 INV LD A,(IPARM+1) ;I parm given?
275A A7 00664 AND A
275B CAF128 00665 JP Z,SKIPIT ;Skip file if not
00666 ;
00667 ; Check if name matches wildcard
00668 ;
275E 110500 00669 NOSIV LD DE,5 ;Offset to name field
2761 19 00670 ADD HL,DE
2762 E5 00671 PUSH HL ;Compare with pattern
2763 119A2A 00672 LD DE,PATTRN ; of user partspec
2766 060B 00673 LD B,11
2768 1A 00674 CPLOOP LD A,(DE) ;P/U pattern byte
2769 13 00675 INC DE
276A FE24 00676 CP '$' ;Matchall?
276C 2803 00677 JR Z,MATCH
276E BE 00678 CP (HL) ;Match?
276F 2003 00679 JR NZ,NMATCH ;Go if not
2771 23 00680 MATCH INC HL
2772 10F4 00681 DJNZ CPLOOP
2774 E1 00682 NMATCH POP HL ;Z if match, NZ if not
2775 CDE529 00683 CALL NOTCHK ;Reverse flag if NOT entered
2778 C2F128 00684 JP NZ,SKIPIT ;Skip file if no match
00685 ;
277B 11E32B 00686 LD DE,FCB ;Point to FCB
277E 0608 00687 LD B,8
2780 7E 00688 MVNAME LD A,(HL) ;Move name
2781 FE20 00689 CP ' ' ;Space?
2783 2805 00690 JR Z,GOTNAM ;Go if hit one
2785 23 00691 INC HL
2786 12 00692 LD (DE),A ;Put to FCB
2787 13 00693 INC DE
2788 10F6 00694 DJNZ MVNAME
278A 48 00695 GOTNAM LD C,B ;Offset to ext field
278B 0600 00696 LD B,0
278D 09 00697 ADD HL,BC
278E 7E 00698 LD A,(HL) ;No extension?
278F FE20 00699 CP ' '
2791 2810 00700 JR Z,GOTEXT ;Go if so
2793 3E2F 00701 LD A,'/' ;Put in slash
2795 12 00702 LD (DE),A
2796 13 00703 INC DE
2797 0603 00704 LD B,3
2799 7E 00705 EXLOOP LD A,(HL) ;Move extension
279A 23 00706 INC HL
279B FE20 00707 CP ' ' ;Finished?
279D 2804 00708 JR Z,GOTEXT
279F 12 00709 LD (DE),A
27A0 13 00710 INC DE
27A1 10F6 00711 DJNZ EXLOOP ;Loop till done
00712 ;
00713 IF @BLD631
27A3 D5 00714 GOTEXT: PUSH DE ;<631>Save current spot in FCB
27A4 21C32B 00715 LD HL,FNAME ;<631>Move name to buffer
27A7 CD572A 00716 CALL CPYFCB ;<631>Do 32 byte LDIR
00717 ELSE
00718 GOTEXT LD A,ETX ;Put ETX at end for dsply
00719 LD (DE),A
00720 PUSH DE ;Save current spot in FCB
00721 LD HL,FCB ;Move name to buffer
00722 LD DE,FNAME ; for printing
00723 LD BC,32
00724 LDIR
00725 ENDIF
27AA D1 00726 POP DE ;Get back where we were
00727 ;
00728 ;Print filenames if no destination drive (DDRIVE=0FFH)
00729 ;
27AB 3A242C 00730 LD A,(DDRIVE) ;Check for just printing DIR
27AE 3C 00731 INC A ;Set Z if FF
27AF 2006 00732 JR NZ,MOVING ;Go if not FF
27B1 CDF629 00733 CALL SHOW ;Print entry
27B4 C3F128 00734 JP SKIPIT ; and go on to next
00735 ;
00736 ; Check if file exists on destination disk
00737 ;
27B7 3E3A 00738 MOVING LD A,':' ;Now put the drive separator
27B9 12 00739 LD (DE),A ; in the FCB
27BA 13 00740 INC DE
27BB 3A242C 00741 LD A,(DDRIVE) ;Put in drive spec
27BE F630 00742 OR '0' ;Change number to ASCII
27C0 12 00743 LD (DE),A
27C1 13 00744 INC DE
00745 IF @BLD631
27C2 21032C 00746 LD HL,FCB2 ;<631>Copy into 2nd FCB
27C5 E5 00747 PUSH HL ;<631>
27C6 CD572A 00748 CALL CPYFCB ;<631>
27C9 D1 00749 POP DE ;<631>
27CA 21003D 00750 LD HL,TBUFF ;Point to transfer buffer
00751 ELSE
00752 LD A,ETX ;Put in ETX to end
00753 LD (DE),A
00754 LD HL,FCB ;Copy into 2nd FCB
00755 LD DE,FCB2
00756 LD BC,32
00757 LDIR
00758 LD DE,FCB2 ;Point to start of FCB
00759 LD HL,TBUFF ;Point to transfer buffer
00760 LD B,0 ;LRL=256
00761 ENDIF
27CD E5 00762 PUSH HL
27CE 210000 00763 LD HL,$-$ ;HL => SFLAG
27CF 00764 SFLG EQU $-2
27D1 CBC6 00765 SET 0,(HL) ;Set the open inhibit bit
27D3 E1 00766 POP HL
27D4 00767 @@OPEN ;Do the open
27D4+3E3B 00768 LD A,59
27D6+EF 00769 RST 40
27D7 47 00770 LD B,A ;Save return code
27D8 2805 00771 JR Z,NORO ;Go if opened okay
27DA FE18 00772 CP 18H ;File not found?
27DC C21429 00773 JP NZ,IOERR ; else an error
00774 ;
00775 ; Check New and Old parms
00776 ;
27DF 3E00 00777 NORO LD A,0 ;N or O specified?
27E1 A7 00778 AND A
27E2 2815 00779 JR Z,CHECKQ ;Go if neither
27E4 3AC326 00780 LD A,(OPARM+1) ;O parm given?
27E7 A7 00781 AND A
27E8 2804 00782 JR Z,CKNEW ;Go if not
27EA AF 00783 XOR A
27EB B0 00784 OR B ;Did file exist?
27EC 280B 00785 JR Z,CHECKQ ;Go if so (ok)
27EE 3AC026 00786 CKNEW LD A,(NPARM+1) ;N parm given?
27F1 A7 00787 AND A
00788 IF @BLD631
27F2 2802 00789 JR Z,TOSKIP1 ;<631>Skip file if not
00790 ELSE
00791 JP Z,SKIPIT ;Skip file if not
00792 ENDIF
27F4 AF 00793 XOR A
27F5 B0 00794 OR B ;Be sure it was new
00795 IF @BLD631
00796 TOSKIP1: ;<631>
00797 ENDIF
27F6 CAF128 00798 JP Z,SKIPIT ;Go if it wasn't
00799 ;
00800 ; Ask question if Q parm was given
00801 ;
27F9 3ABD26 00802 CHECKQ LD A,(QPARM+1) ;Check Q parm
27FC A7 00803 AND A
27FD 2011 00804 JR NZ,QUERY ;Query if so
27FF 21A42B 00805 LD HL,CONVS ;"Converting..."
2802 00806 @@DSPLY
00807 IFEQ 00H,1
00808 LD HL,
00809 ENDIF
2802+3E0A 00810 LD A,10
2804+EF 00811 RST 40
2805 21C32B 00812 LD HL,FNAME ;Filename
2808 00813 @@DSPLY
00814 IFEQ 00H,1
00815 LD HL,
00816 ENDIF
2808+3E0A 00817 LD A,10
280A+EF 00818 RST 40
00819 IF @BLD631
280B CD4A26 00820 CALL $CR ;<631>Display carriage return
00821 ELSE
00822 LD A,CR ;Carriage return
00823 CALL $DSP
00824 ENDIF
280E 1841 00825 JR TAKEIT1 ;Go & move it
00826 ;
2810 21B62B 00827 QUERY LD HL,CONVQ ;"Convert file
2813 00828 @@DSPLY ;Display it
00829 IFEQ 00H,1
00830 LD HL,
00831 ENDIF
2813+3E0A 00832 LD A,10
2815+EF 00833 RST 40
2816 21A12B 00834 LD HL,QMARK ;"?"
2819 00835 @@DSPLY
00836 IFEQ 00H,1
00837 LD HL,
00838 ENDIF
2819+3E0A 00839 LD A,10
281B+EF 00840 RST 40
281C 21272C 00841 LD HL,ABUFF ;Get answer
281F 010003 00842 LD BC,3<8 ;3 char max
2822 00843 @@KEYIN
2822+3E09 00844 LD A,9
2824+EF 00845 RST 40
2825 DA4526 00846 JP C,$ABORT ;Abort if BREAK hit
2828 7E 00847 LD A,(HL) ;Check for 'Y'
2829 CBAF 00848 RES 5,A ;Force upper case
282B FE59 00849 CP 'Y'
282D C2F128 00850 JP NZ,SKIPIT ;Skip it if not 'Y'
00851 ;
00852 ; If file exists, query user
00853 ;
2830 3A032C 00854 LD A,(FCB2) ;Was file opened ok?
2833 CB7F 00855 BIT 7,A ;Z = not found
2835 281A 00856 JR Z,TAKEIT1 ;Go if it does not exist
2837 21862B 00857 LD HL,EXISTQ ;"File exists, replace?
283A 00858 @@DSPLY ;Print question
00859 IFEQ 00H,1
00860 LD HL,
00861 ENDIF
283A+3E0A 00862 LD A,10
283C+EF 00863 RST 40
283D 21272C 00864 LD HL,ABUFF
2840 010003 00865 LD BC,3<8
2843 00866 @@KEYIN ;Get answer
2843+3E09 00867 LD A,9
2845+EF 00868 RST 40
2846 DA4526 00869 JP C,$ABORT ;Abort if break
2849 7E 00870 LD A,(HL) ;Check answer
284A CBAF 00871 RES 5,A ;Force uppercase
284C FE59 00872 CP 'Y'
284E C2F128 00873 JP NZ,SKIPIT ;Skip if 'no'
00874 ;
00875 ; Init file if it didn't exist
00876 ;
2851 11032C 00877 TAKEIT1 LD DE,FCB2
2854 1A 00878 LD A,(DE) ;Was file opened?
2855 CB7F 00879 BIT 7,A ;Z = not opened
2857 2803 00880 JR Z,$+5 ;Remove existing file
2859 00881 @@REMOV ; for new LRL
2859+3E39 00882 LD A,57
285B+EF 00883 RST 40
285C 11E32B 00884 LD DE,FCB ;Use other FCB now
285F 21003D 00885 LD HL,TBUFF ;Create file
2862 DD4604 00886 LD B,(IX+4) ;P/U Mod III LRL
2865 00887 @@INIT ;Create the file
2865+3E3A 00888 LD A,58
2867+EF 00889 RST 40
00890 IF @BLD631
2868 203D 00891 JR NZ,TOIOERR ;<631>Go if error
00892 ELSE
00893 JP NZ,IOERR ;Go if error
00894 ENDIF
286A D5 00895 PUSH DE ;Change LRL to 0 for copy
286B DDE3 00896 EX (SP),IX ;IX to FCB start
286D DDCB01BE 00897 RES 7,(IX+1) ;Show full sector ops
2871 DD360900 00898 LD (IX+9),0 ;Show LRL=0
2875 DDE3 00899 EX (SP),IX ;Switch back
2877 D1 00900 POP DE
00901 ;
00902 ; Initialize to read from source file
00903 ;
2878 E1 00904 TAKEIT2 POP HL ;Point to dir entry
2879 E5 00905 PUSH HL
287A 111400 00906 LD DE,20 ;Point to ERN
287D 19 00907 ADD HL,DE
287E 5E 00908 LD E,(HL) ;P/U ERN
287F 23 00909 INC HL
2880 56 00910 LD D,(HL)
2881 23 00911 INC HL ;Leave ptg to extents
2882 3E00 00912 TRSDOS LD A,0 ;1.3 or later?
2884 FE13 00913 CP 13H
2886 3807 00914 JR C,EARLY ;Go if earlier than 1.3
2888 DD7E03 00915 LD A,(IX+3) ;Pick up EOF offset
288B A7 00916 AND A ;Zero?
288C 2801 00917 JR Z,EARLY ;No adjustment if so
288E 13 00918 INC DE ;If nonzero, adjust ERN
288F 0600 00919 EARLY LD B,0 ;# sectors left in extent
2891 D5 00920 PUSH DE ;Save ERN
2892 D9 00921 EXX ;Switch to alternate regs
00922 ;
00923 ; Preallocate file
00924 ;
2893 C1 00925 POP BC
2894 78 00926 LD A,B ;Empty file?
2895 B1 00927 OR C
2896 281C 00928 JR Z,READ ;Go if so
2898 0B 00929 DEC BC
2899 11E32B 00930 LD DE,FCB ;Point to FCB
289C 00931 @@POSN ;Position to last sector
289C+3E42 00932 LD A,66
289E+EF 00933 RST 40
289F 2809 00934 JR Z,OK3
28A1 FE1C 00935 CP 1CH ;Ignore EOF errors
28A3 2805 00936 JR Z,OK3
28A5 FE1D 00937 CP 1DH ; or past end errors
00938 IF @BLD631
00939 TOIOERR:
00940 ENDIF
28A7 C21429 00941 JP NZ,IOERR ;Quit on any others
28AA 00942 OK3 @@WRITE ;Write it
28AA+3E4B 00943 LD A,75
28AC+EF 00944 RST 40
00945 IF @BLD631
28AD 20F8 00946 JR NZ,TOIOERR ;<631>Quit on write error
00947 ELSE
00948 JP NZ,IOERR ;Quit on write error
00949 ENDIF
28AF 00950 @@REW ;Position to start
28AF+3E44 00951 LD A,68
28B1+EF 00952 RST 40
00953 IF @BLD631
28B2 20F3 00954 JR NZ,TOIOERR ;<631>
00955 ELSE
00956 JP NZ,IOERR
00957 ENDIF
00958 ;
00959 ; Read sectors
00960 ;
00961 IF @BLD631
28B4 21003D 00962 READ LD HL,TBUFF ;<631>Point to transfer buffer
28B7 45 00963 LD B,L ;<631>Count sectors read (L=0)
00964 ELSE
00965 READ LD B,0 ;Count sectors read
00966 LD HL,TBUFF ;Point to transfer buffer
00967 ENDIF
28B8 110000 00968 LD DE,$-$
28B9 00969 MYHIGH EQU $-2 ;Stuff HIGH$ value
28BB 15 00970 DEC D ;256 bytes back
28BC CD3929 00971 GETONE CALL GETSEC ;Get next sector
28BF 200B 00972 JR NZ,WRITE ;Go if EOF
28C1 04 00973 INC B ;Count sector
28C2 24 00974 INC H ;Point to next spot
28C3 CDDF29 00975 CALL CPHLDE ;Compare HL and DE
28C6 3E00 00976 LD A,0 ;No error code
28C8 3002 00977 JR NC,WRITE ;Go if mem full
28CA 18F0 00978 JR GETONE ; else loop for more
00979 ;
00980 ; Write sectors to destination file
00981 ;
28CC F5 00982 WRITE PUSH AF ;Save completion type
28CD 11E32B 00983 LD DE,FCB ;Point to file fcb
28D0 21003D 00984 LD HL,TBUFF ;Point to transfer buffer
28D3 22E62B 00985 WRLOOP LD (FCB+3),HL ;Point FCB to buffer
28D6 78 00986 LD A,B ;Zero to write?
28D7 A7 00987 AND A
28D8 2808 00988 JR Z,WRDUN ;Go if so
28DA 00989 @@WRITE ;Write to file
28DA+3E4B 00990 LD A,75
28DC+EF 00991 RST 40
00992 IF @BLD631
28DD 2010 00993 JR NZ,TOIOER2 ;<631>Quit on write error
00994 ELSE
00995 JP NZ,IOERR ;Quit on write error
00996 ENDIF
28DF 24 00997 INC H
28E0 10F1 00998 DJNZ WRLOOP ;Loop till done
00999 ;
01000 ; Were we at EOF?
01001 ;
28E2 F1 01002 WRDUN POP AF ;Restore completion type
28E3 A7 01003 AND A ;At end of file?
28E4 28CE 01004 JR Z,READ ;Go if not
01005 ;
01006 ; Copy over EOF offset
01007 ;
28E6 DD7E03 01008 LD A,(IX+3) ;P/U offset from dir
28E9 32EB2B 01009 LD (FCB+8),A ;Put into FCB
28EC 01010 @@CLOSE ; and close the file
28EC+3E3C 01011 LD A,60
28EE+EF 01012 RST 40
01013 IF @BLD631
28EF 2023 01014 TOIOER2:JR NZ,IOERR ;<631>Quit on close error
01015 ELSE
01016 JP NZ,IOERR ;Quit on close error
01017 ENDIF
01018 ;
01019 ; Increment to next entry and loop if not done
01020 ;
28F1 E1 01021 SKIPIT POP HL
28F2 113000 01022 LD DE,48 ;48 bytes per entry
28F5 19 01023 ADD HL,DE
28F6 7D 01024 LD A,L ;End of sector?
28F7 FEF0 01025 CP 0F0H
28F9 2002 01026 JR NZ,NOTEOS ;Go if not
28FB 24 01027 INC H
01028 IF @BLD631
28FC 6A 01029 LD L,D ;<631>D==0
01030 ELSE
01031 LD L,0
01032 ENDIF
28FD 11003D 01033 NOTEOS LD DE,TBUFF ;Done?
2900 CDDF29 01034 CALL CPHLDE ;CP HL,DE
2903 DA2127 01035 JP C,ELOOP ;Loop back if not done
01036 ;
01037 ; Finished
01038 ;
01039 IF @BLD631
2906 CD4A26 01040 CALL $CR ;<631>Blank line
01041 ELSE
01042 LD A,CR ;Blank line
01043 CALL $DSP
01044 ENDIF
2909 CD2329 01045 CALL BYEBYE ;Restore DCT
290C C33B26 01046 JP $EXIT
01047 ;
290F CD2329 01048 QUIT CALL BYEBYE ;Restore DCT
01049 IF @BLD631
2912 1822 01050 JR TOABORT ;<631>
01051 ELSE
01052 JP $ABORT
01053 ENDIF
01054 ;
01055 ; Error routines
01056 ;
2914 CD2329 01057 IOERR CALL BYEBYE ;Restore DCT
2917 6F 01058 IOERR1 LD L,A ;Entry from PRMERR
2918 2600 01059 LD H,0
291A F6C0 01060 OR 0C0H ;Abbrev, return
291C 4F 01061 LD C,A ;Error code to C
291D 01062 @@ERROR ; for error display
291D+3E1A 01063 LD A,26
291F+EF 01064 RST 40
2920 C33E26 01065 JP $QUIT
01066 ;
2923 FDE5 01067 BYEBYE PUSH IY ;Move back DCT
2925 D1 01068 POP DE
2926 212C2C 01069 LD HL,SAVDCT ;Point to save area
2929 010A00 01070 LD BC,10
292C EDB0 01071 LDIR
292E C9 01072 RET
01073 ;
292F 3E2C 01074 PRMERR LD A,44 ;Init "parameter error
2931 18E4 01075 JR IOERR1
2933 01076 PERR1 @@LOGOT ;Display and log
01077 IFEQ 00H,1
01078 LD HL,
01079 ENDIF
2933+3E0C 01080 LD A,12
2935+EF 01081 RST 40
01082 IF @BLD631
01083 TOABORT: ;<631>
01084 ENDIF
2936 C34526 01085 JP $ABORT
01086 ;
01087 ; Sector read routine
01088 ;
2939 D9 01089 GETSEC EXX ;P/U alt registers
293A 7A 01090 LD A,D ;Any records left?
293B B3 01091 OR E
293C 2005 01092 JR NZ,NOTEND ;Go if so
293E D9 01093 BDEXT EXX
293F 3E1C 01094 LD A,1CH ;EOF code
2941 A7 01095 AND A ;Set NZ condition
2942 C9 01096 RET
01097 ;
2943 AF 01098 NOTEND XOR A ;Check if used up ext
2944 B0 01099 OR B
2945 2021 01100 JR NZ,MORE ;Go if not used up
2947 7E 01101 LD A,(HL) ;Check next trk#
2948 FEFF 01102 CP 0FFH ;Non-allocated?
294A 28F2 01103 JR Z,BDEXT ;Then consider EOF
294C D5 01104 PUSH DE ;Save DE'
294D 56 01105 LD D,(HL) ;P/U track number
294E 23 01106 INC HL
294F 46 01107 LD B,(HL) ;P/U other stuff
2950 23 01108 INC HL
2951 78 01109 LD A,B ;Get starting gran
2952 07 01110 RLCA
2953 07 01111 RLCA ;Move to bits 0-2
2954 07 01112 RLCA
2955 E607 01113 AND 7 ;Mask off other garbage
2957 5F 01114 LD E,A ;Multiply by 3
2958 07 01115 RLCA
2959 83 01116 ADD A,E
295A 3C 01117 INC A ;Offset from 0
295B 5F 01118 LD E,A ; and move to E reg
295C ED53252C 01119 LD (TRKSEC),DE ;Save for later
2960 D1 01120 POP DE ;Restore DE'
2961 78 01121 LD A,B ;Get number of grans
2962 E61F 01122 AND 1FH
2964 47 01123 LD B,A ;Multiply by 3
2965 07 01124 RLCA
2966 80 01125 ADD A,B
2967 47 01126 LD B,A ;And put in B reg
01127 ;
01128 ; Read sector
01129 ;
2968 05 01130 MORE DEC B ;Count down # sec in ext
2969 1B 01131 DEC DE ;Count down # records
296A D9 01132 EXX ;Restore primary set
296B D5 01133 PUSH DE ;Save DE
296C C5 01134 PUSH BC ;Save BC
296D ED5B252C 01135 LD DE,(TRKSEC) ;P/U track and sector #
2971 3A232C 01136 LD A,(SDRIVE) ;P/U source drive
2974 4F 01137 LD C,A
2975 FD360712 01138 LD (IY+7),18 ;Reset sec/trk each time
2979 01139 @@RDSEC ;Read sector to (HL)
2979+3E31 01140 LD A,49
297B+EF 01141 RST 40
297C 2805 01142 JR Z,OK2 ;Go if no errors
297E FE06 01143 CP 6 ; or address mark differs
2980 C21429 01144 JP NZ,IOERR ;Quit on any other
2983 1C 01145 OK2 INC E ;Step to next sector
2984 7B 01146 LD A,E
2985 FE13 01147 CP 19D ;End of track?
2987 2003 01148 JR NZ,NOTEOT ;Go if not
2989 1E01 01149 LD E,1 ;Reset to sector 1
298B 14 01150 INC D ;Next track
298C ED53252C 01151 NOTEOT LD (TRKSEC),DE
2990 C1 01152 POP BC
2991 D1 01153 POP DE
2992 AF 01154 XOR A
2993 C9 01155 RET
01156 ;
01157 ; Parsing subroutines
01158 ;
2994 7E 01159 GETDRV2 LD A,(HL)
2995 FE3A 01160 CP ':'
2997 3EFF 01161 LD A,0FFH ;'Not entered' value
2999 C0 01162 RET NZ ;If no second drive, give DIR
01163 ;
299A 7E 01164 GETDRV LD A,(HL) ;Parse drivespec
299B FE3A 01165 CP ':'
299D 2090 01166 JR NZ,PRMERR ;Go if missing
299F 23 01167 INC HL
29A0 7E 01168 LD A,(HL) ;P/U drivespec
01169 IF @BLD631
29A1 D630 01170 SUB '0' ;<631>
29A3 FE08 01171 CP 7+1 ;<631>Be sure it is a digit
29A5 3088 01172 JR NC,PRMERR ;<631>
29A7 23 01173 INC HL ;<631>Bump cmdline ptr
01174 ELSE
01175 CP '0' ;Be sure digit
01176 JR C,PRMERR
01177 CP '7'+1
01178 JR NC,PRMERR
01179 INC HL ;Bump cmdline ptr
01180 AND 7 ;Make drive # binary
01181 ENDIF
29A8 C9 01182 RET
01183 ;
29A9 7E 01184 SKIPSP LD A,(HL) ;Skip spaces
29AA FE20 01185 CP ' '
29AC C0 01186 RET NZ
29AD 23 01187 INC HL
29AE 18F9 01188 JR SKIPSP
01189 ;
29B0 7E 01190 SKIPLT LD A,(HL) ;Skip letters/digits/$
29B1 CDC229 01191 CALL CHKLET ;Check letter/digit/$
29B4 C0 01192 RET NZ
29B5 23 01193 INC HL
29B6 18F8 01194 JR SKIPLT
01195 ;
29B8 7E 01196 MOVELT LD A,(HL) ;Move letters/digits/$
29B9 CDC229 01197 CALL CHKLET
29BC C0 01198 RET NZ
29BD 23 01199 INC HL ;Inc from buffer
29BE 12 01200 LD (DE),A ;Store
29BF 13 01201 INC DE ;Inc to buffer
29C0 18F6 01202 JR MOVELT
01203 ;
29C2 CB7F 01204 CHKLET BIT 7,A ;Graphic?
29C4 C0 01205 RET NZ
29C5 FE61 01206 CP 'a' ;Lowercase?
29C7 3802 01207 JR C,NOTLC ;Go if not
29C9 CBAF 01208 RES 5,A ; else make upper case
29CB FE24 01209 NOTLC CP '$' ;Dollar sign?
29CD C8 01210 RET Z
29CE FE30 01211 CP '0' ;Digit?
29D0 D8 01212 RET C ;Return (NZ) if less
29D1 FE3A 01213 CP '9'+1
29D3 3002 01214 JR NC,NOTDIG ;Go if not digit
29D5 BF 01215 CP A ;Mark as letter/digit/$
29D6 C9 01216 RET
29D7 FE41 01217 NOTDIG CP 'A' ;Letter?
29D9 D8 01218 RET C ;Return (NZ) if less
29DA FE5A 01219 CP 'Z'
29DC D0 01220 RET NC ;Z if =Z, NZ if >Z
29DD BF 01221 CP A ;Z if name
29FE 7E 01252 NMDSP LD A,(HL) ;Get a character
29FF FE03 01253 CP ETX ;Are we done?
2A01 2807 01254 JR Z,NMEND ;Finish if so
2A03 CD4C26 01255 CALL $DSP ;Print this char
2A06 0C 01256 INC C ;Count it
2A07 23 01257 INC HL ;=>next char
2A08 18F4 01258 JR NMDSP ;Until ETX
01259 ;
2A0A 210000 01260 NMEND LD HL,$-$ ;P/u line/char count
2A0B 01261 CCOUNT EQU $-2
2A0D 79 01262 LD A,C ;Count for this entry
2A0E 85 01263 ADD A,L ;Add to previous
2A0F 6F 01264 LD L,A ;Save posn
2A10 3E10 01265 LD A,16 ;Spaces for entry
2A12 91 01266 SUB C ;Less used
2A13 47 01267 LD B,A ;Remaining to B
2A14 3E20 01268 SPLP LD A,' ' ;Pad remaining w/spaces
2A16 CD4C26 01269 CALL $DSP
2A19 2C 01270 INC L ;Count it
2A1A 7D 01271 LD A,L ;Check char posn
2A1B FE4E 01272 CP 78 ;End of line?
2A1D 2809 01273 JR Z,ELINE ;Then print CR
2A1F 10F3 01274 DJNZ SPLP ; else keep going
01275 ;
2A21 220B2A 01276 ESHOW LD (CCOUNT),HL ;Save line/char posn
2A24 C1 01277 POP BC ;Restore regs
2A25 D1 01278 POP DE
2A26 E1 01279 POP HL
2A27 C9 01280 RET ;Done w/entry
01281 ;
01282 IF @BLD631
2A28 CD4A26 01283 ELINE: CALL $CR ;<631>Hit end of line
01284 ELSE
01285 ELINE LD A,CR ;Hit end of line
01286 CALL $DSP
01287 ENDIF
2A2B 24 01288 INC H ;Bump line posn
2A2C 2E00 01289 LD L,0 ;Start on next
2A2E 3E17 01290 LD A,23 ;Max lines
2A30 BC 01291 CP H ;There yet?
2A31 20EE 01292 JR NZ,ESHOW ;Nope
2A33 01293 @@KEY ;Wait for a key
2A33+3E01 01294 LD A,1
2A35+EF 01295 RST 40
01296 IF @BLD631
2A36 3E1C 01297 LD A,HOME ;<631>Cursor home
2A38 CD4C26 01298 CALL $DSP ;<631>
2A3B 3E1F 01299 LD A,CLR ;<631>Clear to end-of-frame
2A3D CD4C26 01300 CALL $DSP ;<631>
01301 ELSE
01302 CALL $CLS ;Clear the display
01303 ENDIF
2A40 210000 01304 LD HL,0 ;Restart count
2A43 18DC 01305 JR ESHOW
01306 ;
01307 IF @BLD631
01308 ELSE
01309 $CLS LD A,HOME ;Cursor home
01310 CALL $DSP
01311 LD A,CLR ;Clear to end-of-frame
01312 JP $DSP
01313 ENDIF
01314 ;
2A45 00 01315 CKEARLY DB 0
2A46 3A222D 01316 LD A,(DBUFF+22H) ;Get type byte
2A49 FEFF 01317 CP 0FFH ;Do we know this one?
2A4B C8 01318 RET Z ;OK to continue
2A4C 3A242C 01319 LD A,(DDRIVE) ;Doesn't matter if
2A4F 3C 01320 INC A ; only doing DIR
2A50 C8 01321 RET Z
2A51 216C2B 01322 LD HL,EARLYD ;Err msg
2A54 C33329 01323 JP PERR1 ;Quit
01324 ;
01325 IF @BLD631
2A57 3E03 01326 CPYFCB: LD A,ETX ;<631>
2A59 12 01327 LD (DE),A ;<631>
2A5A EB 01328 EX DE,HL ;<631>
2A5B 21E32B 01329 LD HL,FCB ;<631>
2A5E 012000 01330 LD BC,32 ;<631>
2A61 EDB0 01331 LDIR ;<631>
2A63 C9 01332 RET ;<631>
01333 ;
01334 ENDIF
2A64 80 01335 PRMTBL$ DB 80H
2A65 55 01336 DB ABB!FLAG!5
2A66 51 01337 DB 'QUERY',0
55 45 52 59 00
2A6C BD26 01338 DW QPARM+1
2A6E 53 01339 DB ABB!FLAG!3
2A6F 53 01340 DB 'SYS',0
59 53 00
2A73 AE26 01341 DW SPARM+1
2A75 53 01342 DB ABB!FLAG!3
2A76 49 01343 DB 'INV',0
4E 56 00
2A7A B426 01344 DW IPARM+1
2A7C 53 01345 DB ABB!FLAG!3
2A7D 56 01346 DB 'VIS',0
49 53 00
2A81 B126 01347 DW VPARM+1
2A83 53 01348 DB ABB!FLAG!3
2A84 4F 01349 DB 'OLD',0
4C 44 00
2A88 C326 01350 DW OPARM+1
2A8A 53 01351 DB ABB!FLAG!3
2A8B 4E 01352 DB 'NEW',0
45 57 00
2A8F C026 01353 DW NPARM+1
2A91 53 01354 DB ABB!FLAG!3
2A92 44 01355 DB 'DIR',0
49 52 00
2A96 A226 01356 DW DPARM+1
2A98 00 01357 NOP
01358 ;
01359 ; Messages and buffers
01360 ;
2A99 00 01361 NOTPRM DB 0
2A9A 24 01362 PATTRN DB '$$$$$$$$'
24 24 24 24 24 24 24
2AA2 24 01363 PATEXT DB '$$$'
24 24
2AA5 43 01364 HELLO$ DB 'CONV'
4F 4E 56
2AA9 01365 *GET CLIENT:3
01366 ;CLIENT/ASM - File to establish sign-on headers
01367 ; and version numbers.
01368 ;
01369 ; EACH STRING SHOULD CONTAIN ONLY 63 CHARACTERS !!
01370 ;
01371 IF @BLD631
01372 ; 12345678901234567890123456789012345678901234567890
2AA9 20 01373 DB ' - 6.3.1 - Copyright 1982/83/84/86/90 by MISOSYS, ';<631>
2D 20 36 2E 33 2E 31 20
2D 20 43 6F 70 79 72 69
67 68 74 20 31 39 38 32
2F 38 33 2F 38 34 2F 38
36 2F 39 30 20 62 79 20
4D 49 53 4F 53 59 53 2C
20
2ADB 49 01374 DB 'Inc., ',10 ;<631>
6E 63 2E 2C 20 20 20 20
20 20 20 0A
01375 ELSE
01376 DB ' - 6.3.0 - Copyright 1982/83/84/86 by Logical Syst'
01377 DB 'ems, Inc. ',10
01378 ENDIF
01379 ;
01380 ; DB 'All Rights Reserved. Licensed 1982/83/84 to Tandy '
01381 ; DB 'Corporation.',10,13
01382 ;
01383 ; DB 'All Rights Reserved. Beta-TEST Level/AD, DO NOT DI'
01384 ; DB 'STRIBUTE !! ',10,13
01385 ; DB 'All Rights reserved by LSI, 8970 N. 55th St. Milwa'
01386 ; DB 'ukee, Wisc. ',10,13
2AE8 41 01387 DB 'All Rights Reserved. Unauthorized duplication is p'
6C 6C 20 52 69 67 68 74
73 20 52 65 73 65 72 76
65 64 2E 20 55 6E 61 75
74 68 6F 72 69 7A 65 64
20 64 75 70 6C 69 63 61
74 69 6F 6E 20 69 73 20
70
2B1A 72 01388 DB 'rohibited. ',10,13
6F 68 69 62 69 74 65 64
2E 20 20 0A 0D
2B28 53 01389 NOTONE DB 'Source and Destination drives are the same',CR
6F 75 72 63 65 20 61 6E
64 20 44 65 73 74 69 6E
61 74 69 6F 6E 20 64 72
69 76 65 73 20 61 72 65
20 74 68 65 20 73 61 6D
65 0D
2B53 53 01390 NOT0 DB 'Source cannot be drive 0',CR
6F 75 72 63 65 20 63 61
6E 6E 6F 74 20 62 65 20
64 72 69 76 65 20 30 0D
01391 IF @BLD631
2B6C 43 01392 EARLYD DB 'Can''t CONV Protected Disk',CR
61 6E 27 74 20 43 4F 4E
56 20 50 72 6F 74 65 63
74 65 64 20 44 69 73 6B
0D
01393 ELSE
01394 EARLYD DB 'Cannot CONV Protected Diskette',CR
01395 ENDIF
01396 IF @BLD631
2B86 20 01397 EXISTQ DB ' File exists -- replace it' ;<631>
20 46 69 6C 65 20 65 78
69 73 74 73 20 2D 2D 20
72 65 70 6C 61 63 65 20
69 74
2BA1 3F 01398 QMARK DB '? ',ETX ;<631>
20 03
01399 ELSE
01400 QMARK DB '? ',ETX
01401 EXISTQ DB ' File exists -- replace it? ',ETX
01402 ENDIF
2BA4 43 01403 CONVS DB 'Converting file: ',ETX
6F 6E 76 65 72 74 69 6E
67 20 66 69 6C 65 3A 20
03
2BB6 43 01404 CONVQ DB 'Convert file '
6F 6E 76 65 72 74 20 66
69 6C 65 20
2BC3 01405 FNAME DS 32 ;Must follow CONVQ
2BE3 01406 FCB DS 32 ;For INIT/WRITE
2C03 01407 FCB2 DS 32 ;For OPEN (test for already existing)
2C23 01408 SDRIVE DS 1
2C24 01409 DDRIVE DS 1
2C25 01410 TRKSEC DS 2
2C27 01411 ABUFF DS 5
2C2C 01412 SAVDCT DS 10
2D00 01413 ORG $<-8+1<8
2D00 01414 DBUFF DS 1000H ;16 sectors of directory
3D00 01415 TBUFF EQU $ ;To end of memory
01416 ;
2600 01417 END BEGIN
2600 is the transfer address
00000 Total errors
[Copyright 1999,2002 Frank Durda IV, All Rights Reserved. Mirroring of any material on this page in any form is expressly prohibited. The official web site for this material is: http://nemesis.lonestar.org Contact this address for use clearances: clearance at nemesis.lonestar.org Comments and queries to this address: web_software at nemesis.lonestar.org]