[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_2011 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 ifname 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_2011 at nemesis.lonestar.org]