Q #X;SAVE#D:MDUP2.M65 MYDOS module9X; Copyright 1984, Charles Marslett, Wordmark SystemsX;(IX; Permission is granted by the author for any use whatsoever of this2HX; code, so long as this notice remains in the source code, and so<LX; long as the source to this routine, however modified or unmodified,F.X; is made available for a nominal cost.PX;ZKX;======================================================================dX;n-X; START OF NONRESIDENT PORTION OF DUP.SYSxX;.DATAP;;ALLOCATE BUFFER FOR BIT MAP, ETC. DELIM!PAR2P;;another bug fixed RP PAR3PX; DATA UNNO PTR PTRSAV IPTR IPSAV CBYTE SECTOR CSRC CDES CPYTYP" SWPFLG, RCNT6 SECSIZ@ FNPTJ FNPT2T!PARP;;REAL PARAMETER (LAST)^ DUPBASE hDOSSYS AD1:DOS.SYSA=rX;|2X; CLOSE (BRUTALLY) ALL IOCBS AND REOPEN SCREENX;INITIO CIOINV$>" SOPEN;;OPEN SCREEN AS IOCB #0   OPEN EC&CDTMV3;;CLEAR TIMER #3&CDTMV3%>Q>$PCDTMF3;;SET TIMER NOT DONE FLAG SETVBVWAITIMQCDTMF3;;DONE?!HWAITIM;;NO, CONTINUE LOOPING:&X;0 X; DISK UTILITY PROGRAM ENTRY:X;D DOSOS,N-X$>b&BRKKEY;;ENABLE BREAK KEYlX;vQ>MDINITPDOSINIQ>MDINIT PDOSINIX;Q>PLMARGN;;SET MARGINSQ>' PRMARGN QDUPFLAG LSTATEM>R> HNOSWF PWARMST  NOSWFQ>@ LSTATE !PSTATE;;ELSE, SAY IT WAS DONE*Q>4 LPOKMSK>#PPOKMSK;;ALLOW BREAK INTERRUPTSH PIRQENR INITIO;;CLOSE ALL FILES\X;f QSTATEpM>z FSHMEN+ ERRXIT;;MEM.SAV ERROR CAN NOW BE SHOWN- AError loading MEM.SAV or memory!A==X;SHMENQDFUNITL> 0 PDEFAULT$>%>DKSLPQ> ;;spacePD1STAT9 PD1STAT9PD1STAT9PD1STAT9 )RAMDKUHCKHCD;;IF NOT RAM DISKQ> R$ HSETUNI.X;8CKHCDQHDTAB8BFGENDCD;;IF NOT HARD DISKLQ> HVSETUNIPD1STAT9` HDKUNINjX;tGENDCDQDKTYPE8~ FNXTDKSV?;;DOUBLE DENSITY?Q> SEDKSNGD;;NO, SINGLEQ> D;;YES, DOUBLEDKSNGDPD1STAT9QDRVDEF8V?Q> - DDKSSDQ> =DKSSDPD1STAT9 DKUNINCL> 0  PD1STAT9 NXTDKS00(020<1F HDKSLPP PRINTZ };;CLEAR SCREENd, AMYDOS 4.50 -- Copyright 1988,An =ADisks Ax0D1STAT A1S 2S 3S 4S 5S 6S 7S 8S A= AD: = DADEFAULT A1:A=Q>FNAME$>FNAME PRTMSGX; PRINT =) A1-8.Dir of D1:-D8: *. Dir of D:A=+ AA. Disk Directory K. Save MemoryA=+ AB. Run Cartridge L. Load MemoryA=. AC. Copy File(s) M. Run at AddressA=, AD. Delete File(s) N. Load MEM.SAVA=. AE. Rename File(s) O. Change Config.A=+ AF. Lock File(s) P. Set DensityA=. AG. Unlock File(s) Q. Make DirectoryA=". AH. Write DOS Files R. Pick DirectoryA=,- AI. Initialize Disk S. Set RAMdisk #A=6/ AJ. Duplicate Disk V. Set Verify FlagA=@ A A==J %CBSAVT IMENUSL^% CIOER1;;IF LOAD ERROR, REPORT IThX;rX; SELECT MENU FUNCTION|X;MENUSL$>B2&OPT;;OPT=00 IF NO OPTIONS &SWPFLG)&CBSAV;;FOR DIR SCANS, SKIP NO EXTNS.! CLOSX;;CLOSE IOCBs 10 AND 20$>0 CLOS2;;AND IOCB 30 PRINT( ASelect Item ( for menu):A=Q>@;;FORCE UPPER CASE PSHFLOK LSTATE!PSTATE;;SAY DUP.SYS IN MEMORY CHRGET&R>0 HCKITEM: !SHMENDX;NCKFDIRR> 1X DCKFDDb !FASTDIRl CKFDDR> *v HBADITM !FASTDDX;CKITEMR> 9 DCKFDIRR> ANFUNC EBADITM S> A EITEMVBADITMQ>NFUNC ITEMVT?? QDUPJT8 PRAMLOQDUPJT8  PRAMLO+!PRTMEN;;GO TO MENU EXIT (WITH MESSAGE) X;* TCOMND 4 UCOMND >NSI ANo such item!A==H !MENUSLRX;\DUPJT DIRLST=STCARf CPYFIL=DELFILp RENFIL=LKFILz ULKFIL=WBOOT FMTDSK=DUPDSK SAVFIL=LDFIL BRUN=MEMSAV CONFGR=CHDISK MKDIR=SETDIR RAMDRV=TCOMND UCOMND=VERIFYNFUNC DUPJT  NSIX;%X; * AND 1-8. FAST DIRECTORY LISTX;FASTDDPPAR Q> : PPAR HDOFDD$ X;. FASTDIRPPAR8 Q> :B PPARL DOFDDQ> *V PPAR` PPARj Q> Dt PPAR~ Q> 'PPAR;;fix the 174 errors in menu PCPYTYP PDELIM HDODIRL X; X; A. DIRECTORY LIST X; /DIRLST AFiles to list, Destination?A== Q> PCPYTYP GETFN DEFPAR DODIRLQ>PAR %>PAR DBUF10 $>( &CSRC;;IOCB10 IS SOURCE2 $ OPDIR;;OPEN IOCB10 AS DIRECTORY< X;F Q>DATA& P PBUFADZ Q>DATA& d PBUFADn X;x Q>& PBUFLEN Q> PBUFLEN X; $>;;CDES=IOCB00 QDELIM GCPY1FSP QDELIM GSGFCPY GETFN2 'IBUF PIBUF SGFCPY$>  Q>GETCHR HDOCALL X;" CPY1FSPQ>GETREC, DOCALL&CDES6 COPYF@ %!MENUSL;;THEN RETURN TO CMD. LINEJ X;T BADRN ERRXIT^ ANeed new file name!A==h CANTDV ERRXITr 9 ANo drive or directories allowed in new name!A==| X; LKMSG ALock A= ULMSG AUnlock A= DELMSG ADelete A= X; X; F. LOCK FILES X; #LKFIL ALock which file?A== %>LKMSG $>LKMSG Q>LOCK 'HDOCMD2;;GET FILE NAME THEN LOCK IT X; X; G. UNLOCK FILES X; &ULKFIL AUnlock which file?A== %>ULMSG& $>ULMSG0 Q>UNLOCK: X;D 'DOCMD2'SECSIZ;;do mass lock/unlockN &&SECSIZ;;unless /Q is specifiedX 5b GETFNl CKDSKv $OPT (> Q;;Query? FDOPRM HAFTCHK;;branch either way X; X; D. DELETE FILE(S) X; %DELFIL ADelete what file?A== %>DELMSG $>DELMSG Q>DELETE X; DOCMD'SECSIZ &SECSIZ 5 GETFN CKDSK $OPT* ((> N;;IF '/N' THEN DO IT THE EASY WAY4 FAFTCHK> DOPRM PRINTH  AAnswer 'Y' or 'N'A==R 7\ SETSCNf X;p RDFN SCNDIRz EDELX;;IF END OF DIRECTORY QSECSIZ $SECSIZ PRTMSG Q>PAR $>PAR PRTMSG PRINT A?A= CHRGET R> Y HNODELT $> CIOCL;;DELETE THE FILE THENNODELT!RDFNX; SMPLCMD5$ GETFN;;GET FILE NAME. CKDSK;;VERIFY A DISK FILE8 AFTCHK7BISSCMDPICMDL$>V CIOCL` QICMDjR>)t FSETFNJ~DELX!MENUSLSETFNJ!SETFNMJCANTDV!CANTDVJBADRN!BADRNX;X; E. RENAME FILE(S)X;-RENFIL AFile to rename, new name?A== GETFN CKDSK%PTR QDELIMR> , FCKNAM2 R> ;;space HJBADRN CKNAM23( Q@FNPTR72R> :< FJCANTDVFR> >;;check for sparta typeP FJCANTDVZR> 0d DDORENn R> zx DCKNAM2DORENQ>RENAME HISSCMDX;X; Q. MAKE A DIRECTORYX;'MKDIR AFull directory name?A==$> &IAUXQ>";;MAKE DIR. COMMAND !SMPLCMDX;X; R. SET DIRECTORYX;1SETDIR ADirectory to be used as 'D:'?A== GETFN CKDSK"%PTR;;DRIVE OR NULL?,)>6 DCPYDNE@Q>)J !ISSCMDTX;^SETFNM$>hQPTRrN>| FZAPNAM%>Q> : R@FNPTR7 HALLNEW;;IF NOT SUBDIRECTORY FNDEND2%FNAME9HFNDEND;;END OF OLD DIR?PFNAME9X; ALLNEW3 FCPYDNE R@FNPTR7 HALLNEW0;;POINT BACK AT ':')FCPY1ST;;IF START, NO ':' TO PRESERVEX;& CPYNAM20 CPY1ST3: Q@FNPTR7DZAPNAMPFNAME9N HCPYNAMX !MENUSLbX;lCPYDNE ERRXITv AInvalid directory!A==X;X; SINGLE FILE (DEVICE) COPYX;TOERR1!CIOER1SGCOPY$>&CSRC;;SOURCE IS IOCB10 SOPEN ;;INPUT OPEN;;OPEN FUNCTION PAR;;INPUT DEVICE NAM GTOERR1 !SGFCPYX;X; C. COPY FILES X; DUPFIL -CPYFIL AFile source, destination?A==*Q> ;;space4*PPAR3;;DEFINE CHAR 3 OF DEVICE NAME>Q>H PCPYTYPR GETFN;;GET SOURCE FILE NAME\X;fQ>DUPENDp PBUFADzQ>DUPEND PBUFADX; QMEMTOP;S>DUPEND PBUFLENQMEMTOPS>DUPENDPBUFLENX; DEFPAR QDELIM GSFNAME GETFN2Q>SFNAMEPSWPFLG$ TWARMST. QFNPTR8PIBUF B QFNPTRL PIBUF VQPAR;;DISK DEVICE?`R> Dj HSGCOPYt Q>PAR~ %>PAR DBUF10X;Q> ?%> QQQPPAR281HQQQX; CWFSD$>$ OPDIR;;OPEN IOCB10 AS DIRECTORYX;%>  CPSCL13 Q@FNPTR7 PPAR38( HCPSCL12 CPSCL21< Q@FNPTR7FR> :P FCPSCL3Z R> >;;account for sparta typed HCPSCL2n CPSCL33x 'FNPT2 Q@FNPTR7 FOPINPX;)$>;;SCAN -PAR- STARTING AT 1-ST BYTEMVMSKQ@FNPTR7GWCOPYB;;1 FILESPEC COPY??R> * FMVNMLR> . DWCOPYB HDOSTORQ> ;;space1DOSTORPPAR293 MVNML2"(>, DMVMSK6 SKPPRD3@MVEXTQ@FNPTR7J FWCOPYBTR> .^&FSKPPRD;;IF A PERIOD, SKIP OVER IThR> *r FOPINP|R> ;;space FWCOPYBR> , FWCOPYBR> FWCOPYB3SAVBLKPPAR292(>  DMVEXT EOPINPX;WCOPY CWFSDOPINP SCNDIR *CBYTE GOPINP& DWCNEXT0 !MENUSL:X;DWCOPYBQ> ;;spaceN HSAVBLKXWCNEXTQ>PAR3bPIBUF0l Q>PAR3v PIBUF0X;$> %FNPT2WCNBLDQPAR29 FTERMXR> ? HSTWCC QDATA9STWCCPPAR38R> ;;space FOVWRTC3 OVWRTC2(>  DWCNBLDQ> .  PPAR38*34WCEBLDQPAR29> FTERMXHR> ?R HSTWCEC\ QDATA9fSTWCECPPAR38pR> ;;spacez FOVWRTE3 OVWRTE2(>  DWCEBLD TERMXQ> . RPAR38 HNOTOVP1NOTOVPQ>$OPT(> Q HNOQUERYQ> ?NOQUERYPPAR38Q> PPAR38$X;. QCPYTYP8 HDOONEB Q>PARL $>PARV PRTMSG` PRINTj A-->A=t Q>PAR3~$>PAR3 PRTMSGQOPTR> Q HDOONE CHRGETR> Y HSKPCOPDOONEQIAUXPIAUX $>  &CSRCQ> PIAUX9  Q>PAR %>PAR DEFBUF( Q>OPEN2 SCMD< GCPYERRFX;P$>ZCKFDOSQCKDTST9d RPAR39n HNOXDOSx0 HCKFDOS QPAR3PDOSRNMPDOSSYSQ>` PPAR3NOXDOSQ>PAR3PIBUF0 Q>PAR3 PIBUF0X;$> &IAUX0$>0 &CDES Q>GETCHR" COPYF;;COPY FILE,X;6SKPCOPQCPYTYP@ HTOEXITJ !WCOPYTTOEXIT!MENUSL^CPYERR!CIOER1hX;rX; I. FORMAT A DISK|X;FMT1050Q> HDOFMTX; FMTDSK ADisk to FORMAT:A=$ GETDN;;GET DRIVE NUMBER OR NAME DEFPARX; Q>PARPIBUF Q>PAR PIBUFX;%> Q@FNPTR7 PFMTDVNX;&"X; MAKE SURE ABOUT DRIVE NUMBER0X;: PRINTD& A(Press for Enhanced Dns)A=N AType to Format Drive AXFMTDVN A0:A=bX;l CHRGETvR> A FFMT1050N> Y HALFMTDDOFMTPIAUXQ>$OPT;;REAL FORMAT?(> N HRELFMTW?RELFMTPIAUXX; Q>FORMAT PICMD$>  CIOV;;DO FORMAT OF DISK IALFMTD $WBERR!CIOER1;;IF ERROR, SAY SO!*ALFMTD!MENUSL4X;>X; H. WRITE DOS/DUP TO DISKHX;RDUPFNM AD1:DUP.SYSA=\,WBOOT ADrive to write DOS files to?A=f GETDNpQDUPSYSz5Q> 1PDUPSYS PNMSAV%> Q@FNPTR7R> : HCANWB QDEFAULTCANWBPDOSSYSPDUPFNMX;%1;;SET UP INITIAL VALUES OF PARMS.'OPTQ> PSTATEX;$Q>DOSSYS.%>DOSSYS8 DBUF10B"Q>;;OPEN OUTPUT=WRITE DOS.SYSL PIAUXV1 ANYDEN;;OPEN AND WRITE DOS.SYS (ANY DENSITY)` CLOS10j7t PNMSAV~PDUPSYSX;"X; **** WRITE DUP.SYS HERE ****X;%>pQ>DUPBASE$>DUPBASE D2B8AQ>DUPFNMPIBUFQ>DUPFNMPIBUF;;Bugs fixed RPQ>DUPEND  PHDBUF Q>DUPEND  PHDBUFQ>DUPLEN( PHDBUF2Q>DUPLEN< PHDBUFFQ>PPTEMP;;CLEAR 'RUN' FLAGZ!WRDUP;;WRITE DUP.SYSdX;nX; J. DUPLICATE A DISKxX;2DUPDSK ASource, Destination (Sectors)?A== GETDN%> Q@FNPTR7M>;;GET DRIVE NUMBER PCSRC PCDES QDELIM;;IF SINGLE DRIVE DUP.R> (FSETSSZ;;GO SET SECTOR SIZE( GETDN2;;ELSE, GET SECOND DRIVE NAME%> Q@FNPTR7M> PCDESRCSRC;;SAME DRIVE?"#HSETSSZ;;YES, SINGLE DRIVE DUP.,$>6 &SWPFLG@ SETSSZ>J %CSRCT QSWPFLG^L>@;;SET DUP-DISK FLAGh PSWPFLGr GDODKDP| PRINT( AInsert both disks, type A= CHRGETX;DODKDP CWFSD QCSRC;;POINT TO SOURCE DRIVE0 GETDEN;;IDENTIFY DENSITY OF SOURCE DISKETTE%CDES;;ELSE, TWO DRIVE DUP. $CSRCQDKTYPE9RDKTYPE8 FSAME 'UNNO SETDEN %CDES $CSRC QDKTYPE9& RDKTYPE80 FSAME: ERRXITD # ADrives not compatible!A==N SAMETWARMSTX V?b PSECSIZl W?v )PSECSIZ;;SET SECTOR SIZE (128 OR 256) &DUNIT;;READ SOURCE VTOC X; QDELIM 5 Q> > INIBMPPDATA9 PDATA9 0 HINIBMP 7;;BOOT COPY? R> ( 'FBLDVTOC;;YES, BUILD IMAGINARY VTOC!R> !FRDVTOC;;NO, DOS COPY!OOPS ERRXIT;;ELSE, ERROR ! AInvalid options!A==*!BLDVTOC GETNUM4!)> ->! HOOPSH! PDATAR! &DATA\! GETNUMf!)> )p! HOOPSz! PDATA! &DATA!%>!'PTR! 'DATA! 'DATA!Q>DATA ! PBUFAD!Q>DATA ! PBUFAD!Q>!D26BB$DATA! (DATA! HD26CB" $DATA" (DATA" ED26D2$" D26CB;."U?8" NXTSCTB" HD26BBL"X;V"D26D2$DATA`" (DATAj" DD26EAt" HD26E4~" $DATA" (DATA" DD26EA" D26E4T?" NXTSCT" HD26D2"X;" D26EA;"U?" ED26EA" P@BUFAD7"X;" RDVTOC;# QMEMTOP # SSECSIZ# PBUFLEN#QMEMTOP(#SSECSIZ2#PBUFLEN<#X;F# QBUFLENP#R>DUPENDZ#QBUFLENd#S>DUPENDn# EENUFx# ERRXIT# ANot enough memory!A==#X;#NXTSCTED272E# P@BUFAD7#Q># #BUFAD# HD272E# #BUFAD#D272E#DATA# HD2736# #DATA# D2736:#X;$ ENUFQPTR$&FSKRDVT;;IF POS, SKIP READING VTOC$ Q>h"$ $>h,$ PDAUX6$ &DAUX@$ Q>DATAJ$$>DATAT$ PDBUF^$ &DBUFh$ RSEC1r$ INOERFD|$ !CIOER1$ NOERFD,$ QDATA$-O> ;;ADD IN THE BOOT, MAP AND DIR SECTORS$ PDATA$5DCK2BIT;;THEN TAKE CARE OF SECOND BIT MAP IF NEC.$##DATA;;ELSE, BUMP UPPER BYTE$CK2BITQDATA$R>$2DSKRDVT;;IF SINGLE SECTOR, SKIP READING SECOND$ #DATA$,$ QDBUF$ ODLEN% PDBUF% QDBUF% ODLEN&% PDBUF0% "DAUX:% RSEC1D%X;N%SKRDVTQ>X% PDAUXb%Q>l% PDAUXv% QDATA % PCBYTE%Q>% PIPTR%Q>DATA %PVECTOR%Q>DATA % PVECTOR%X;%DORDQVECTOR% PPTRSAV%QVECTOR%PPTR% QIPTR& PIPSAV & QCBYTE& PCBSAV & QDAUX*& PSECTOR4& QDAUX>&PSECTORH&Q>R&$PCPYTYP;;SET OPERATION TO 'READ'\&LRSQ>DUPENDf& PDBUFp&Q>DUPENDz& PDBUF&LRS1TCBYTE& "IPTR& HCBIT& #VECTOR& HPAGE1&#VECTOR& PAGE1%>& Q@VECTOR7& PCBYTE&$>& &IPTR&CBIT*CBYTE& GASPT' QCPYTYP'T?;;CY=0, READ; CY=1, WRITE' QCSRC$'DRSECIN;;ACC=DRIVE #.' QCDES8'!RSECIN SECTIO;;READ OR WRITEB'IOD,L' QDBUFV' OSECSIZ`' PDBUFj' QDBUFt'OSECSIZ~' PDBUF'ASPTQDAUX' RDATA' QDAUX' SDATA' DASPN'X;'QCPYTYP;;END OF DRIVE'ISTDD2;;IF READ, DO WRITE'!!MENUSL;;IF WRITE, THEN DONE!'X;'ASPN#DAUX' HASPX( #DAUX (*ASPXQBUFLEN;;ELSE, END OF THE BUFFER?( RDBUF(QBUFLEN(( SDBUF2(ELRS1;;NO, GET NEXT SECTOR<(X;F( QCPYTYPP("ISTDD2;;IF WRITE, DO NEXT READZ( CWFSDd( !DORDn(X;x(STDD2*SWPFLG( ICKFORM( PRINT(3IDD AInsert DESTINATION disk, press A=( CHRGET(CKFORMQ> N(ROPT( FNOFORM(POPT($> ;;IF FORMAT REQ., DO IT(Q>DOSSYS(%>DOSSYS( DEFBUF( Q>FORMAT) PICMD ) QCDES)#L> 0;;CONVERT DRIVE NO. TO ASCII")PDOSSYS,) CIOCL6)&NOFORM"CPYTYP;;THEN, MAKE A WRITE@) QPTRSAVJ) PVECTORT)QPTR^)PVECTORh) QSECTORr) PDAUX|)QSECTOR) PDAUX) QIPSAV) PIPTR) QCBSAV) PCBYTE)!LRS)X;)X; P. CHANGE DISK FORMAT)X;)$CHDISK ADrive, new density:A=) GETDN;;GET DRIVE NO.) QDELIM)R>;;DRIVE NUMBER ONLY?*"HCHDSK2;;IF SO, CHANGE DEFAULT*BADPCMD ERRXIT* ADrive unchanged.A==&*CHDSK2%PTR0* Q@FNPTR7:*>D*%>N* Q@FNPTR7X*R> 9b* EBADPCMDl* S> 1v* DBADPCMD*?*3* 'UNNO*Q>*(> S* FTOSGL*(> D* HBADPCMD*T?*TOSGLPDKTYPE8* DOFSIN*"!SHMEN;;THEN SHOW CHANGED MENU*X;+(X; O. CONFIGURE SYSTEM OR DISK DRIVE +X;+ CHKBANKS= +%>;;This is BOB code...*+';;uncommented as4+';;per usual...H+QR+5\+$>f+ ?L1'p+Q@z+ PMAPBUF8+&@+A+PMAPBUF8+3+H?L1+0+&+&+&@+&+&+$>+ ?L2',Q@,R>, H?NOT$,2.,&@8,AB,?NOTPMAPBUF8L,3V,H?L2`, &RDKLMTj,X;t,$>~,?L8A,%>,?L6RMAPBUF8,F?FO,1,)>,H?L6,4;;was a DEY, ?L9', QMAPBUF8,P@,1,)>-H?L9 -7-P-Q>(-P2-Q<-PF-.P-:Z-X;d-?FOCn-PMAPAGE9x-2-(>A-D?L8-%>-H?L9-X;-X;-GETRDK PRINT- ARAM disk present?A=- CHRGET-%>-R> N- HRAMDSU- !NOFAST.RAMDSU PRINT.' Axlon or E type RAMdisk?A=. CHRGET". %>,. $>6.R> A@. HSAVADRJ. %>T. $>^.SAVADR'RDAD1h. 'RDAD2r. 'RDAD3|. &RDAD1. &RDAD2. &RDAD3.R> A. FOKP0. CHKBANKS. QRDKLMT. HOKP1. PRINT.' ANo extra memory available!A==.%>. !NOFAST.OKP0!RAMDSU2.X;/ OKP1$>/ &NMLMAP/ &FR0&/T?0/T?:/ UFR0D/T?N/ UFR0X/T?b/PFR0l/ UFR0v/ IFP/ FASCII/ PRINT/! AUse default config for A=/%>/OKP2Q@INBUFF7/ GOKP3/3/ HOKP2/ OKP3M>/ P@INBUFF7/3/Q>/ P@INBUFF70 QINBUFF 0$INBUFF0 PRTMSG 0 PRINT*0 AK?A=40 CHRGET>0R> NH0 FRAMDSU2R0 !DVNOQ\0X;f0RAMDSU2 PRINTp0 ASize(K)?A=z0 GETLIN0 GETNUM0VVECTOR0W?0VVECTOR0W?0VVECTOR0W?0VVECTOR0W?0 HSAVRDS0Q>0SAVRDSPRDKLMT0X;1X;1GETSEQN PRINT1 APage sequence?A=$1 GETLIN.1 GETNO281)>CRB1 HFSNUML1 FRSEQV1DVNOQ PRINT`1 ARAM disk drive no?A=j1GETRDRV CHRGETt1%> ;;ASSUME 9~1R> 01*DNOFAST;;IF DIGIT, CHANGE RAMDISK CODE1R> 91 ENOFAST1M>1?1(NOFAST'RAMDKU;;SET RAMDISK UNIT NO.1:1X;1 RSEQ?1 $PGMAP81 &NMLMAP1)>2 ECPAXSQ 2 QSQMAP82$>2 CPY0U?(2U?225<2U?F2U?P2U?Z2M> d2?n2CPY1QSQTAB8x2 PMAPAGE922232A2M>2 HCPY1272(>2 HCPY02CPSEQQSQTAB92 PMAPAGE9222(>@2 HCPSEQ3 FDVNOQ3X;3CPAXSQ$>@"3 AXSQL0,3A63 PMAPAGE9@3 HAXSQLJ3 FDVNOQT3X;^3 FSNUM$>h35r3A|3FSNCLPDATA9323 HFSNCL373FSLP1&UNNO3)>CR3 FTONML3PDATA@93>3QDATA93 HBADSEQ3"DATA93%PTR3 Q@FNPTR74R>CR4 HFSLP44 GETLIN&4FSLP4 GETNO204 $UNNO:42D4(>@N4 HFSLP1X4TONML(RDKLMTb4 HWRONGl4 PNMLMAPv4 UPDLP104QDATA@94 PMAPAGE94A4 HUPDLP14 !DVNOQ4BADSEQ PRINT4( ADuplicated sequence number!A==4 !GETSEQN4X;4WRONG PRINT4% AWrong number of entries!A==4 !GETSEQN4X;5PGMAP ===== 5SQMAP ==K===5X; 5SQTAB ===*5 ===45 ===>5 ===H5X;R5 ===\5 ===f5 ===p5 ===z5X;5 ===5 ===Θ5 ===5 ===5X;5 ===5 ===5 ===5 ===5X;5CONSYS PRINT5 AVerify WRITEs?A=5 DOVRFY6 PRINT6! ANumber of File Buffers?A=6 GETLIN$6 GETNUM.6>86 FSKPFCTB6R>L6 ESKPFCTV6&PFILES;;SET NUMBER OF FILES (0-16)`6SKPFCT GETRDKj6 MDINIT;;REINITIALIZE DOS3t6 !DOSOS~6X;6ZAPDRVQ>Ғ6 ,;;SKIP 2 BYTES6 SET52Q>R6 %UNNO6PDRVDEF86 CLRHDS6CONXIT!MENUSL6X;6(CONFGR ADrive number or :A=6 CHRGET;;GET DRIVE NUMBER6.R>;;IF RETURN, GO TO SYSTEM CONFIGURATION6 HCONDRIV7 !CONSYS 7CONDRIVR> 97 DSAVDVN7TOBADP!BADPCMD(7SAVDVNS> 127 DTOBADP<7?F73P7 'UNNOZ7%Q>;;THEN ZERO CONFIGURATION BYTEd7PDRVDEF8n7X;x7 PRINT7 ARemove drive?A=7 CHRGET7R> Y7 FZAPDRV7 PRINT7 AIs drive configurable?A=7 CHRGET7#R> Y;;IF NO, SET TO $52 AND EXIT7 HSET527 PRINT7 AHigh capacity drive?A=7 CHRGET7R> Y8 FGETHCD8 PRINT8 AIs drive double sided?A="8 CHRGET,8R> Y68 HSETSS@8Q>J8 ORDRVT8SETSS PRINT^8 ATracks/side?A=h8 GETLINr8 GETNUM|8R>#8 FSET358?8Q>08)>M8 FSETTKS8Q> 8)>P8 FSETTKS8Q>8)>(8 HSETSS8SETTKS ORDRV8SET35 PRINT9 AStep rate?A=9 CHRGET9R> 4&9 ESET3509 S> 0:9 DSET35D9T?N9 ORDRVX9 CLRHDSb9 !MENUSLl9X;v9GETHCD PRINT9" ADrive size (in sectors)?A=9 GETLIN9 GETNUM9(>9FGETHCD;;INVALID SIZE959 %UNNO9Q>9PDRVDEF89Q>9PDKTYPE8979 SETHDS: !MENUSL :X;:#X; S. Set RAMdisk Drive Number :X;*:#RAMDRV ARAM disk drive no?A=4: GETRDRV>: !MENUSLH:X;R:$X; V. Set Verify Flag ON or OFF\:X;f:VERIFY AVerify WRITEs?A=p: DOVRFYz: !MENUSL:X;:DOVRFY CHRGET:$>W;;ASSUME YES!:R> N: HDOVFY:$>P:/DOVFY&WRCMD;;SAVE THE WRITE COMMAND IN DOS:::X;:ORDRV%UNNO:LDRVDEF8:PDRVDEF8::;X;;CLRHDS$>;A$;SETHDS%UNNO.;PHDTAB88;AB;PHDTAB8L; !DOFSIN