ZEHX;X; =========================X;X; MULTICOPY 2.0X;$X; (C) 1986.X; by Charles F. Johnson and8X; Little Green FootballsBX;LX; Last revision: 03/29/86VX;`X; =========================jX;tX;~X; ------------------------X; Operating system equatesX; ------------------------X; BOOT?  DOSVEC  DOSINI  RTCLOK LMARGNR ROWCRST COLCRSU SAVMSCX OLDCHR] RAMTOPj SDLSTL0SDLSTH1COLDSTD(STICK0x2STRIG0<COLOR0FCOLOR1PCOLOR2ZCOLOR3dCOLOR4nCRSINHx CH ICCOMB ICSTAC ICBALD ICBAHE ICBLLH ICBLHI ICAX1JCOLPF0COLPF2COLPF3CONSOL AUDF1 AUDC1 SKCTLDLISTLDLISTH" CIOVV,X;6X; --------------------@X; IOCB command equatesJX; --------------------TX;^ OPENh CLOSE r GETREC| GETCHR PUTREC  PUTCHR X;X; -------------------X; Page zero variablesX; -------------------X; SRC DST RCNT WCNT NUM FLAG OPN PAGE COUNT& POS0 STHOLD: KBHOLDD TEMPN MULTX PCNTb TOPl ADDRv FLEN DIRSCR PNTR1 PNTR2X;X; Screen memoryX;SCREEN1BEGINSCREEN2SCREEN1X;X; ------------------------X; SYSTEM RESET will vectorX; through hereX; ------------------------X; %X;  RESET* ;;DOS init4 RESET2>Q>4OPTIONS;;Make OS runHPDOSVEC;;MULTICOPYRQ>5OPTIONS;;instead of\PDOSVEC;;DOSf:pX;zX; -------------X; Option screenX; -------------X; OPTIONSQ>;;Clear choice$>?;;arrayCLCH PCHOICE90 ICLCHX;PCOLDST;;No coldstart PPCNT PPCNT Q>;;Turn off cursor PCRSINH$ PBOOT?.  CLSCRN;;Clear screen8  SETSC1;;Set page 1B  SETDL;;Colors & D.L.L X;V PROPT` Q>;;Print optionsj PCOLCRSt Q>~ PROWCRS Q>5OPTLEN PICBLH Q>4OPTLEN $>4OPTMSG %>5OPTMSG PRINT0 &ICBLH X; GET1 Q>;;Clear keypress PCH GETOPT QSTRIG0;;Button pressed? HG1.2;;No, skip !CONT2;;Yes, continue G1.2( QCH2 R>;;Key pressed?< FGETOPT;;No, go backF R> ;;Is it RETURN?P HG1.3;;No, skipZ !CONT2;;Yes, continued G1.3n $>x GET2 RDIRKEY9;;Is it 1,2,3,4? HG2.1;;No, skip QDIRASC9;;Get ASC value HG2.2;;Skip G2.1 0;;Count down IGET2;;Do more GGET3;;No match, skip G2.2  DIREC;;Show directory  SETSC1;;Reset screen HGET1;;Go back GET3 R>>;;Is it "S"? HGET4;;No, skip #SRC;;SRC=SRC+1" QSRC;;If SRC is >3,, R>;;set to zero6 HG3.2@ Q>J G3.2T PSRC^ ,;;Add value forh O>;;screen coder PSM1;;Set all source| PSM2;;numbers in PSM3;;message lines PSM4 PSM5 PSM6 ; S> PSM7 HGOGET1;;Skip to JMP GET4 R>:;;Is it "D"? HGET5;;No, skip #DST;;DST=DST+1 QDST;;If DST is >3, R>;;set to zero HG4.2 Q>& G4.20 PDST: ,D O>N PDM1;;Set all destX PDM2;;numbers inb PDM3;;message linesl PDM5v O>@ PDM6 ; S> PDM7 HGOGET1;;Skip to JMP GET5 R>;;Is it CTRL-ESC? HGET6;;No, skip Q>;;Cancel key PCH $> RESDOS QDVSAVE9;;Restore DOS PDOSVEC9;;vectors 0 IRESDOS !@DOSVEC:;;Go to DOS* X;4 GET6> $>H G6.2R RCOLKEY9;;Is it one of\ FG6.3;;the colorf 0;;changing keys?p HG6.2z FGOGET1;;No match, skip G6.3 (>;;If 3, make it 4 HG6.4 2 G6.4 #COLOR09;;Change color #COLOR09;;register #COLSAV9 #COLSAV9 GOGET1 !GET1;;Back to the top X; CONT2QSTRIG0;;Wait until keyFCONT2;;or button isQSKCTL;;released$R>. FCONT28X;BX; -----------------LX; Display filenamesVX; -----------------`X;jQ>;;Cancel keypresstPCH~QSRC;;Set directory,;;filenameO>1PDIRNAMQ>PCOUNT;;Clear filecountPPAGE;;& page index CLSCRN;;Clear screenQ>;;Set printingPCOLCRS;;column & rowQ> PROWCRSQSRC;;SRC=DST?RDST HDISPLAY;;No, skipQ>4SLINE4;;Yes, prompt PLINEAD( Q>5SLINE42PLINEAD< BUTRETF DISPLAYPQ>4FNBUF;;Set pointer toZPPNTR1;;filename bufferd Q>5FNBUFn PPNTR1xX; OPDIR;;Open directoryX; READNAMES$>;;Read names fromQ>GETREC;;the source disk PICCOM9 Q>4FNAME PICBAL9 Q>5FNAME PICBAH9Q> PICBLL9 CIOVX;%> CKDOS"QFNAME8;;Is this file,RDOSNAM8;;DOS.SYS?6HCKFRE;;No, skip@3J)> T HCKDOS^FREADNAMES;;Yes, ignorehX;r CKFRE|$>QFNAME9;;Is this "FREER> S;;SECTORS"?HCKF2;;No, skip!SELECT;;Yes, continueCKF2#COUNT;;Count files$PAGE;;Also count the#PCNT9;;# per page%>  TRANSFERQFNAME8;;Move thisP@PNTR17;;name to the1;;filename buffer ITRANSFERX;,;;Increment the&QPNTR1;;pointer to the0O> ;;filename buffer: PPNTR1DDTR2N #PNTR1XTR2b QCOUNTlR>;;Done 1 column?vHTR3;;No, skipQ>;;Print name$>4FNAME%>5FNAME PRINT0X;Q>;;Set to top ofPLMARGN;;second column PCOLCRSQ> PROWCRS!READNAMES;;Do the restX;TR3R>0;;Done 2 columns? HTR4;;No, skipQ> $>4FNAME;;Print name*%>5FNAME4 PRINT0>X;H#PAGE;;Set page indexRQ>4SCREEN2\PSAVMSC;;Set screen tofPSCRNAD;;2nd pagepQ>5SCREEN2zPSAVMSCPSCRNADQ>;;Set position toPLMARGN;;top left PCOLCRSQ> PROWCRS!READNAMES;;Do the restX;TR4$>;;Print filenames Q>PUTREC PICCOMQ>4FNAME PICBALQ>5FNAME PICBAH$Q>. PICBLL8 CIOVB!READNAMES;;Do the restLX;VX; --------------------`X; Select files to copyjX; --------------------tX;~ SELECT$>;;Close ch 1 Q>CLOSE PICCOM9 CIOVQ>;;Set margin PLMARGNQCOUNT;;More thanR>1;;48 names?DSEL2;;No, skipQ>4PAGLIN;;Set page$>5PAGLIN;;message HSEL3SEL2 Q>4SLINE2;;No page$>5SLINE2;;messageSEL3( PLINEAD2&LINEAD<Q>4SCREEN1FPSCRNAD;;Set screen toPPSAVMSC;;page 1ZQ>5SCREEN1dPSCRNADnPSAVMSCxQ>PPAGE;;Set page indexPPOS;;& screen pos PRNT1$>&ROWCRS;;Print pointer2;;at top name &COLCRSQ>  $>4POINTR %>5POINTR PRINT0S1Q>;;Clear keypressPCHX; SLOOP"QSTRIG0;;Button pressed?,FCHOSEN;;Yes, skip6QCH@R> ;;RETURN pressed?JHS2;;No, skipT CHOSEN^QSTRIG0;;Wait until keyhFCHOSEN;;or button isrQSKCTL;;released|R> FCHOSENX; INVNAM;;Register choice,;;Force branchDS1;;Go backX;S2 QCONSOLR>;;START pressed?HS3;;No, skip!PRECOPY;;Yes, continueS3QCH;;Get keyR>;;Is it ESC?HS4;;No, skip!OPTIONS;;Restart&S40QSTICK0;;Get stick:PSTHOLD;;Save itDR>;;Center?NHINPUT;;No, skipXQCH;;Get keybPKBHOLD;;Save itlR>;;If arrows orvFINPUT;;space bar,R>;;go ahead FINPUTR> FINPUTR> FINPUTR>!HSLOOP;;Not legal keyX; INPUT SETPOSQ> ;;Erase old$>4BLANK;;pointer %>5BLANK  PRINT0X; QKBHOLD;;Get key*R>!;;Is it SPACE?4HNOTSPC;;No, skip>QCOUNT;;Get file countHR>1;;More than 48?RDNOTSPC;;No, skip\QPAGE;;Toggle pagefN>;;indexp PPAGEzQ>;;Set position toPPOS;;zero $PAGEQSCLO9;;Flip screen PSAVMSC PSCRNAD QSCHI9PSAVMSCPSCRNAD!PRNT1;;Back to the topX; NOTSPCQSTHOLD;;Get stickR> ;;Down?FINPOS;;Yes, skipQKBHOLD;;Get keyR>;;Down arrow?$HCKUP;;No, skip. INPOS8#POS;;POS=POS+1BCKUPLQSTHOLD;;Get stickV R>;;Up?`FDEPOS;;Yes, skipjQKBHOLD;;Get keytR>;;Up arrow?~HCKRT;;No, skip DEPOS"POS;;POS=POS-1CKRTQSTHOLD;;Get stickR>;;Right?FADD24;;Yes, skipQKBHOLD;;Get keyR>;;Right arrow?HCKLT;;No, skip ADD24QPOS;;Is POS already R>;;>23?ECKLT;;Yes, skip ,O>;;Add 24$PAGE;;More than the(RPCNT9;;# of filenames?2ECKLT;;Yes, skip<PPOS;;Set positionFCKLTPQSTHOLD;;Get stickZR> ;;Left?dFSUB24;;Yes, skipnQKBHOLD;;Get keyxR>;;Left arrow?HCKLIM;;No, skip SUB24QPOS;;Is POS already R>;;<24?DCKLIM;;Yes, skip;S>;;Subtract 24R>;;Less than zero?DCKLIM;;Yes, skipPPOS;;Set position CKLIM $PAGEQPOS;;Is POS <0?ICKL2;;No, skipQPCNT9;;Set to last;;;name on page"S>,PPOS6CKL2@QPOS;;Is POS > lastJRPCNT9;;name on page?TDPRPNT;;No, skip^Q>;;Set to zerohPPOSr PRPNT| SETPOS;;Set positionQ> ;;Print pointer $>4POINTR %>5POINTR PRINT0QSTHOLD;;Get stickR>;;Center?FGOS1;;Yes, skipQ>;;Wait for 5/60 ,;;secondORTCLOK DELAYRRTCLOK HDELAYGOS1!S1;;Back to the topX;&X; -------------0X; Start copying:X; -------------DX;N PRECOPYXQCONSOL;;Wait til STARTbR>;;is releasedl FPRECOPYvX; CNVCHC;;Convert CHOICEQNUM;;Files to copy?HPRE2;;Yes, skip!FINISH;;No, exitPRE2Q>4COPYDL;;Install copyPSDLSTL;;screen displayPDLISTL;;list Q>5COPYDL PSDLSTH PDLISTH$> PRE2.1QCOLOR09;;Save colors  PCOLSAV9QCPYCOL9;;Set message PCOLOR09;;colors* PCOLPF0940> IPRE2.1HQ>;;Clear readRPRCNT;;counter & write\PWCNT;;counterfPFLAG;;Clear flagspPOPNzPTOPQRAMTOP;;Find end of;;;data bufferS> PTOP CLOOP1Q>4BUFFER;;Find startPADDR;;of data buffer Q>5BUFFER PADDRQSRCRDST;;SRC=DST?HC2;;No, skip SPROMT;;Show promptC2Q>4CLIN;;Set top line PTOPLIN$ Q>5CLIN.PTOPLIN8$>BC2.1LQRDMSG9;;Print READINGV PRWLINE9`0j IC2.1tQ>;;Set character~PCOLOR3;;colorsPCOLPF3;;(also setQ> ;;hardware regsPCOLOR2;;cuz I/O canPCOLPF2;;delay change)X;C3$RCNT;;Save start addrQADDR;;of file PADLO9 QADDR PADHI9;QTOP;;Calculate free SADDR;;memory & usePFLEN;;as file length QTOP( SADDR2 PFLEN<HC4;;Not zero, skipF!WRITE1;;Go writePC4ZQFLAG;;File open?dFC5;;No, skipn$>xC4.1QN1HOLD9;;Display open;;;filenameS>  PNAMLIN90 IC4.1 !DOREADX;C5 CLN2;;Clear name$RCNT;;Find name & FINDNM;;convert itQSRC;;Print name PRNAMEX;$>;;Open file for"Q>OPEN;;input, PICCOM96 Q>4DNUM@ PICBAL9J Q>5DNUMT PICBAH9^Q>h PICAX19r CIOV|X; DOREAD$>;;Read data intoQ>;;buffer PICCOM9 QADDR PICBAL9 QADDR PICBAH9 QFLEN PICBLL9 QFLEN PICBLH9 CIOV X; %RCNT QICBLL9;;Save length of& PLLO8;;data in table0 QICBLH9: PLHI8D QICSTA9;;Get statusN R>;;End of file?X FRD2;;Yes, skipb Q>;;No, set flagl PFLAG;;and save namev %> SVN1 QDNUM8;;Save filename PN1HOLD8 1 ISVN1 !WRITE1;;Go write X; RD2 $>;;Close file Q>CLOSE PICCOM9 CIOV Q>;;Clear flag! PFLAG ! $RCNT!, !QADDR;;Calculate*!OLLO9;;buffer address4!PADDR;;for next file>! QADDRH! OLHI9R! PADDR\!#RCNT;;RCNT=RCNT+1f! QRCNTp!RNUM;;All files read?z!EWRITE1;;Yes, skip!!C3;;Read more!X;! WRITE1!QSRC!RDST;;SRC=DST?!HW2;;No, skip! DPROMT;;Show prompt!W2!Q>4CLIN;;Set top line! PTOPLIN! Q>5CLIN!PTOPLIN!$>"WRLP"QWRMSG9;;Print WRITING" PRWLINE9$"0." IWRLP8"Q>;;Set characterB"PCOLOR2;;colorsL" PCOLPF2V"Q> `" PCOLOR3j" PCOLPF3t"X;~"QOPN;;File open?"FW3;;No, skip"$>"W2.1"QN2HOLD9;;Display open";;;filename"S> " PNAMLIN9"0" IW2.1"!DOWRIT;;Skip ahead"X;"W3# CLN2;;Clear name #$WCNT;;Find name and# FINDNM;;convert it#QDST(# PRNAME;;Print name2#X;<#$> ;;Open file forF#Q>OPEN;;outputP# PICCOM9Z# Q>4DNUMd# PICBAL9n# Q>5DNUMx# PICBAH9#Q># PICAX19# CIOV#Q>;;Set flag#POPN#X;# DOWRIT#$> ;;Write data from#Q>PUTCHR;;buffer# PICCOM9#%WCNT;;Get write count#QADLO8;;Get address of#PICBAL9;;data from table$ QADHI8$ PICBAH9$QLLO8;;Get length of"$PICBLL9;;data from table,$ QLHI86$ PICBLH9@$ CIOVJ$X;T$QWCNT;;Written all^$RRCNT;;that were read?h$HW7;;No, skipr$QFLAG;;Partial read?|$FW7;;No, skip$%>$SVN2$QDNUM8;;Save name$ PN2HOLD8$1$ ISVN2$!CLOOP1;;Back to the top$X;$W7$$> ;;Close file$ Q>CLOSE$ PICCOM9$ CIOV%Q>;;Clear flag%POPN%#WCNT;;WCNT=WCNT+1&%QWCNT;;Written all0%RRCNT;;that were read?:%DJW3;;No, skipD%QFLAG;;Partial read?N%FW8;;No, skipX%JW3b%!W3;;Write morel%W8v%QWCNT;;Done copying?%RNUM%EFINISH;;Yes, exit%!CLOOP1;;No, do the rest%X;% FINISH% CLSCRN;;Clear screen%Q>4SCREEN1;;Reset screen%PSCRNAD;;and display%PSAVMSC;;FINISHED msg%Q>5SCREEN1%PSCRNAD%PSAVMSC% Q>4FINLIN& PLINEAD & Q>5FINLIN&PLINEAD & SETDL*&X;4&Q>>& PCOLCRSH&Q>R& PROWCRS\&Q>!f&$>4RETMSG;;Print promptp& %>5RETMSGz& PRINT0& BUTRET;;Wait&!OPTIONS;;Restart&X;&X; -----------&X; SUBROUTINES&X; -----------&X;& CLSCRN&Q>4SCREEN1& PPNTR1&Q>5SCREEN1& PPNTR1&$>;;Clear the'%>;;screen area'C;;(8 pages)'CLS2$' P@PNTR17.'38' HCLS2B' #PNTR1L'0V' HCLS2`' POLDCHRj':t'X;~' SETPOS'$>;;Set the cursor'QPOS;;position'R>;;Less than 24?'DSETP2;;Yes, skip',' A;;21 + 1'O>;;Set to 2nd col'>;;Set column' SETP2' &COLCRS'QPOS;;Get position'R>;;> 1st column?(DSETP3;;No, skip (;(S>( SETP3((PROWCRS;;Set row2(:<(X;F( PRINT0P(PICBLL;;Print to E:Z(&ICBAL;;A=String lengthd('ICBAH;;X=Lo addressn(Q>PUTCHR;;Y=Hi addressx( PICCOM($>( !CIOV(X;( SETSC1(Q>4SLINE1;;Set OPTIONS(PLINEAD;;screen (top(Q>5SLINE1;;line and main(PLINEAD;;screen area)(Q>4SCREEN1( PSAVMSC( PSCRNAD(Q>5SCREEN1(PSAVMSC)PSCRNAD):)X;") SETDL,)$>6)SDL2@)QCOLSAV9;;Set screenJ)PCOLOR09;;colorsT)0^) ISDL2h)Q>4DLIST;;Install ourr)PSDLSTL;;display list|) Q>5DLIST) PSDLSTH):)X;) OPDIR)$>;;Open IOCB #1)Q>CLOSE;;for a directory)PICCOM9;;read) CIOV) Q>OPEN) PICCOM9) Q>4DIRNAM) PICBAL9) Q>5DIRNAM* PICBAH9*Q>* PICAX19&* !CIOV0*X;:* DIRECD*PDIRNAM;;Store drv #N*,;;Convert toX*O>`;;screen codeb*PDIRNUM1;;Display drv #l* PDIRNUM2v*QDIRSCR;;Flip to*PSAVMSC;;directory screen*PSCRNAD;;(original E:*QDIRSCR;;screen address)*PSAVMSC*PSCRNAD*Q>4DIRLIN1;;Set top line* PLINEAD*Q>5DIRLIN1*PLINEAD*Q>;;Clear the screen* $>4CLEAR* %>5CLEAR* PRINT0+ OPDIR;;Open directory +$>;;Set up to input+Q>GETREC;;filenames from +PICCOM9;;IOCB #1 and*+Q>PUTREC;;print them to4+PICCOM;;IOCB #0 (E:)>+ Q>4FNAMEH+ PICBAL9R+ PICBAL\+ Q>5FNAMEf+ PICBAH9p+ PICBAHz+Q>+ PICBLL9+ PICBLL+Q>;;Set to top of+PROWCRS;;screen+ NLOOP+QSKCTL;;Key pressed?+R>+FNL2;;No, skip ahead+QSTRIG0;;Trigger?+HNL3;;No, skip+NL2+ DW2;;Wait for release+NL3,$>;;IOCB #1, CIOV;;Get filename,GCDIR;;End, skip$,Q> ;;Set position., PCOLCRS8,$>;;IOCB #0B, CIOV;;Print nameL,INLOOP;;Always branchV,CDIR`,Q>CLOSE;;Close dirj, PICCOM9t, CIOV~,Q>4DIRLIN2;;Print,PLINEAD;;prompt message,Q>5DIRLIN2;;on top line,PLINEAD, DWAIT,QSKCTL;;Wait for key,R>;;or trigger,HDW2;;press, QSTRIG0, HDWAIT,DW2,QSKCTL;;Wait for,R>;;release-FDW2 - QSTRIG0-FDW2-:(-X;2-CLN2<-$> ;;Clear nameF-Q> ;;storage area toP- CLN2.2Z-PN29;;spacesd-0n- ICLN2.2x-:-X;- PRNAME-,;;Store drive #-O>1- PDNUM-$>- PRNAM2-QDNUM9;;Print filename-;;;being copied-S> ;;directly to-PNAMLIN9;;screen memory-0- IPRNAM2.:.X;. SPROMT".Q>4SRCLIN;;Set for,.$>5SRCLIN;;source prompt6.HPROMP2;;Skip ahead@. DPROMTJ.Q>4DSTLIN;;Set forT.$>5DSTLIN;;dest prompt^. PROMP2h.PTOPLIN;;Show promptr.&TOPLIN|.$>. PROMP3.QRBMSG9;;Now prompt.PNAMLIN9;;for RETURN.0;;or button. IPROMP3. BUTRET.Q>;;Clear key.PCH;;buffer.BR2.QSTRIG0;;Get trigger.FBR3;;Pressed, skip.QCH;;Get key.R> ;;RETURN?/HBR2;;No, go back/BR3/QSTRIG0;;Wait til&/FBR3;;trigger or key0/QSKCTL;;is released:/R>D/FBR3N/Q>X/PCHb/:l/X;v/ INVNAM/QPOS;;Current position/R>;;2nd column?/DINV2;;No, skip/S>/INV2/PTEMP;;Multiply the/Q>(;;current row/PMULT;;by 40 to get/Q>;;the offset/PPNTR1;;into screen/%>;;memory/INV3/T?0 UPNTR1 0 TMULT0 DINV4 0,*0 OTEMP40 DINV4>0 #PNTR1H0INV4R01\0 HINV3f0,p0O>z0 DINV50 #PNTR10INV50PPNTR1;;Set offset0QPOS;;to screen area0R>;;If in 2nd0DINV6;;column, adjust0,;;the pointer0 QPNTR10O>0 PPNTR10 DINV60 #PNTR10INV61,1$PAGE;;Get page index1QPNTR1;;Add the address$1OSCLO9;;of the start of.1PPNTR1;;the current81QPNTR1;;page to screenB1OSCHI9;;pointerL1 PPNTR1V1%> ;;11 characters`1 INVLOOPj1Q@PNTR17;;Get chart1N>;;Invert it~1P@PNTR17;;Put it back11;;Count 'em1IINVLOOP;;More to do1QPAGE;;Get current pg1FINV7;;Skip if page 11Q>0;;Add 481INV71,1OPOS1>;;Use for index1QCHOICE9;;Get choice flag1N>;;Toggle bit 01PCHOICE9;;Put it back2Q>x 2 PTEMP2Q>2 PAUDC1(2 SOUND22QTEMP;;Make a sound<2PAUDF1;;to registerF2;;;the choiceP2S>Z2 PTEMPd2 GSND2n2Q>x2,2ORTCLOK2 SNDWAIT2RRTCLOK2 HSNDWAIT2 FSOUND2SND22:2X;2 CNVCHC2$>2&NUM2CNV22A;;This section3?;;converts the3QCHOICE8;;choice array3FCNV3;;to sequential"3%NUM;;form, and also,3#NUM;;counts the63A;;chosen files@3 PCHOICE8J3CNV3T32^3(>@h3 HCNV2r3:|3X;3X; This routine finds the3X; name of the file being3X; operated on, and converts3 X; it to DOS filename format.3X; (Dn:FILENAME.EXT)3X; Enter with X set to3X; current file index.3X;3 FINDNM3Q>;;Clear TEMP3 PTEMP3QCHOICE9;;Multiply by 113,4 T?;;*24 UTEMP4 T?;;*4&4 UTEMP04,:4OCHOICE9;;*5D4 DFIND2N4 #TEMPX4 FIND2b4,l4 T?;;*10v4 UTEMP4,4OCHOICE9;;*114 DFIND34 #TEMP4 FIND34,;;Add start of4O>4FNBUF;;filename array4PPNTR2;;and set pointer4 QTEMP4 O>5FNBUF4 PPNTR24%> ;;11 characters4 FIND45Q@PNTR27;;Move name 5PN18;;to buffer51 5 IFIND4*5NAME45$>>5 &TEMPH5NM2R5A;;Search name\5?;;field forf5QN18;;space characterp5R> z5FPERIOD;;Got space, skip5%TEMP;;Store char in5PN28;;name area5#TEMP;;Count up525(>;;Done 8?5HNM2;;No, more to do5 PERIOD5%TEMP;;Get index and5Q> .;;store period5PN285#TEMP;;Inc index5$>5NM36 A;;Search6?;;extension field6QN18;;for space char$6R> .6FNM4;;Got space, skip86 %TEMPB6PN28;;Store charsL6 #TEMPV62`6(> ;;At end of name?j6HNM3;;No, go backt6NM4~6(>;;If no extension6HNM5;;erase the6"TEMP;;period6 %TEMP6Q> 6PN286NM56:6X;6"X; Data, tables, messages, etc.6X;6 DLIST6 p=p= 7 B 7 LINEAD7 SLINE17 (7 B27 SCRNAD<7 SCREEN1F7 ===P7 ===Z7 ===d7 ===n7 ===x7 ==7 A7 DLIST7X;7 COPYDL7 p=p=p=p7 G7 TOPLIN7 CLIN7 p=0=G7 NAMLIN7 A7 COPYDL7X;8 SLINE18 AӽA8SM1"8 AĽA,8DM168 AίA@8 SLINE2J8 AӽAT8SM2^8 AĽAh8DM2r8 AýԽA|8 FINLIN8 AӽA8SM38 AĽA8DM38 AA8 CPYLIN8 AġA8 SLINE48 AŠA8SM48 AԯA8 PAGLIN8 AӽA9SM59 AĽA9DM5&9 AýýA+9 AԽA09X;:9 DIRLIN1D9 A٠AN9 DIRNUM1X9 AA]9 A堠Ab9 DIRLIN2l9 A٠Av9 DIRNUM29 AA9 A堠A9X;9CLIN9 AӽA9SM69 AA9DM69 A A9 RWLINE9 Areading A9X;9 NAMLIN9! =========:! ========= :X;: SRCLIN : APUT SRC DISK IN DA*:SM74: A1 A>: DSTLINH: APUT DST DISK IN DAR:DM7\: A2 Af:X;p: RBMSGz: AHIT RET/BUTTON A:X;: OPTMSG: AӂA===: A ӂ Change SOURCEA: A driveA==: A Ă Change DESTINA: AATION driveA==: A - Disk DireA: ActoryA==: A ̭ Exit A: Ato DOSA==: A ̭Ԃ Text BriA: AghtnessA=: A ̭Ƃ ForegrouA: And colorA=: A ̭‚ BackgrouA: And colorA===: A ΠA: AA:OPTLEN OPTMSG:X;; RDMSG; AreadingA; WRMSG$; AwritingA.;X;8; RETMSGB; APress RETURN or AG; Abutton to restartAL;X;V; BLANK`; A  Aj; POINTRt; AA~;X;; CLEAR; };X;; CPYCOL; H===X=;X;; DIRKEY; ===; DIRASC; A1234A;X;; COLKEY< == <X;< COLSAV< ====(<X;2< DVSAVE<< ===F<X;P< FNBUFZ< @ d<LLOn<@x<LHI<@<ADLO<@<ADHI<@< CHOICE<@<SCLO< 4SCREEN1=4SCREEN2<SCHI< 5SCREEN1=5SCREEN2< DIRNAM< AD1:*.*A== DOSNAM= ADOS SYSA= FNAME"= A A,=DNUM6= AD1:A@=N2J= A AT=N1^= A Ah= N1HOLDr= A A|= N2HOLD= A A=X;= BUFFER =X;=X; -------------=X; Program start=X; -------------=X;=  =X;= BEGIN=QDOSVEC;;Save the DOS=PDVSAVE;;vectors>QDOSVEC>PDVSAVE>QDOSINI;;Put DOSINI&>PRESET;;vector after0>PDVSAVE;;the JSR in our:>QDOSINI;;code - alsoD>PRESET;;save it...N>PDVSAVEX>Q>4RESET;;Put our codeb>PDOSINI;;address inl>Q>5RESET;;DOSINI tov>PDOSINI;;trap RESET>X;>QSAVMSC;;Save OS screen>PDIRSCR;;address for>QSAVMSC;;directory>PDIRSCR;;screen>Q>4TITLDL;;Install title>PSDLSTL;;display list> Q>5TITLDL> PSDLSTH>$>> SETCOL>QCOLORS9;;Set screen>PCOLOR09;;colors?0 ? ISETCOL? STRTWT ?QCONSOL;;Get console reg*?R>;;Any key?4?HCONTIN;;Yes, go ahead>?QSKCTL;;Check keyboardH?R>;;Key pressed?R?HCONTIN;;Yes, continue\?QSTRIG0;;Get triggerf?FCONTIN;;If pressed, skipp?HSTRTWT;;No input...z? CONTIN?QCONSOL;;Wait for key,?R>;;button, or?HCONTIN;;console to be?QSKCTL;;released?R>? HCONTIN? QSTRIG0? FCONTIN?X;?$>;;Init source?&SRC;;and destination? 2;;drives?&DST@!OPTIONS;;Jump to start@X;@ TITLDL$@ p=p=p.@ G8@ TDATAB@ p=p=p=p=pL@ =p=pV@ =p=`@ p=p=pj@ p=p=pt@ p=p=p~@ @ A@ TITLDL@@ TDATA@ A -MULTICOPY- A@ A é A@ A A@ A A@ A press start A@@ COLORS@ =4= ==A AX;AA BEGIN(AX;2AEI