: EIX;X;macwdg 5.87(X;don lebow 70717,7202X;<X;xe/xl..mac65 cart..DOS 2.xFX;PX;Z BOOT? dCOLDSTDn RUNADx DINITX; MEMLO DOSVEC DOSINI X; LBUFF!DIRTABLBUFF ;;sort buffer INBUFF-EDIT_BUFFENDSHADOW;;move buffer address2BUFF_LENEDIT_BUFF;;move buffer lengthX;ICCOMB;;commandICSTAC;;statusICBADRD;;addressICBLENH;;lengthICAUX1J;;aux"$NUM1AUXICAUX1;;number 1 aux, CIOVV6X;͠@ OPENJ READT GETREC^GETCHARh WRITEr PUTREC |PUTCHAR  CLOSE  RENAME  ERASE! X; FR0ԸZ1;;program equates Z2Z1LENZ1 COUNTHOLD1COUNTHOLD2COUNTFLAGCOUNTFILENUMCOUNTHOLDLENHOLDTOP X;& PORTB0CVFPA;;fp to asc:CVIFP;;integer to fpD ZFR0DNINTLBFQXEPUT;;E: put bytebKGET$;;K: get bytel X;vTXT;;text colorBAK;;background ROWCRST COLCRSUCRSINH X;INVFLGSHFLOKKRPDELKEYDEL CHX;STOP;;print terminatorCR;;RETURN GINTLK;;cartridge detect 'MCREG;;MAC color (thanks, bill)X;  X;*X;4X;get address>X;GET_WORD LABELHGET_WORD R Q>4 \ %>5 fpX;peek labelzX;DPEEK (to a,y from) LABEL DPEEK Q  % X;poke labelX;DPOKE (a,y to) LABEL DPOKE P  ' 2X;text print..max 256 chars...end string with 0X;PRINT LABEL PRINT GET_WORD  SHOWME$=X;insert os routine...cf pp 81-82,221 in Ian's Revised MAP.X;NO EXCUSES!!8X;BX;GETOS VECTOR,LABELL GETOS V  ` AGETOS ERRORAjt,~Q O> P  Q O> P X;X;X;TXT = ;;colorsX; X;X;(X;2WARM< MACON;;cart onF RESETP ;;old dosiniZ SHADOWSd"GET_WORD GOWEDGE;;new dosvecnDPOKE DOSVECxQ>;;speed up keys%> PKRPDEL 'KEYDELQ>;;new colors%>  PMCREG 'MCREG:X;X;X; X;to cartX; GOMAC MACON;;re-enable mac!@:;;warmstart"X;,X;to DUP.SYS6X;@ GODUPJ MACON;;helloT DUPEXIT^!hX;rX;à| X;mahalo to the folks at oss!X; MACOFF CHEKTIK=;;no interrupts QPORTBL>;;no basic, either! PPORTBQ;;save status PHOLDCARTP;;cart off!Q>PGINTLK;;flag os .;;enable :;;byeX;X;& MACON0 CHEKTIK:=D QPORTBNM>;;no shadow ramX PPORTBb#$HOLDCART;;retrieve cart statuslP9;;cart on!vQ>PGINTLK;;alert os. :;;byeX;synchronicityX; CHEKTIK Q;;tik TLOOPR FTLOOP :;;tok!X;X; GOWEDGE  MACOFF;;open shadow ram!TOP;;run wedge X;*X;4HOLDCART>X;HIRX;free ram starts here\ ENDCODEfEIpX;zX; DINIT MACOFFX;X;X; ;(heh)X;X;><TOP-@;;save stack pointer&HOLDSTACK INTLBF;;set lbuff M>;;clear aux PNUM1AUX;;#1 PNUM1AUX$ PNUM1AUX;;#2. PNUM1AUX8 $>;;close #1B CLOSEMEL $> V  CLOSEME;;close #2` Cj PCRSINH;;no cursort M>~ PINVFLG;;no inverse L>@ PSHFLOK;;all caps X; PRINT XMENU;;command line  A_KEY;;key? X; 5;;'scuse me ZAPLINE;;clear command line 7;;retrieve key >;;save 1%>JMPTABLEKEYTABLE;;number of legal keys NUMLOOP RKEYTABLE8;;match? FFOUNDKEY;;yes 1;;no INUMLOOP( EXIT12 UPONE< !TOP;;start overF X;P X;Z FOUNDKEYd )>;;directory?n DFINDCOM;;yesx M>;;no PCRSINH;;turn on cursor FINDCOM C;;y T?;;*2 ?;;indexes jmptable *QJMPTABLE8;;hi byte of routine address 5 3 QJMPTABLE8;;lo byte 5 :;;go run routine X; DODIR &DEFAULT;;key=drive# &XDRIVE Q>};;clear screen" POPCHAR, DIRAUX6 %>@ 'NUM1AUX;;set directory auxJ STUFFITT QDEFAULT8;;directory spec^ P@INBUFF7;;to lbuffh 1r ISTUFFIT| Q>OPEN  ICHIBAN;;kudasai X; PRINT XDRIVE;;show source PCOUNT;;init filecount at 0 ? 3 'ROWCRS;;start at row 1 READER $>  GETLINE;;get filename GGOTIT;;end of directory %>;;default length #COUNT QCOUNT M>;;check column HCOL1;;left side& Q>;;right side0 HPRINTNAME: COL1D 1;;to strip CRN Q>X PRINTNAMEb PCOLCRS;;set positionl Q>STOPv #P@INBUFF7;;terminate print line DPEEK INBUFF;;point  SHOWME;;and print IREADER;;always X; GOTIT QCOUNT;;how many names? R>;;not enough FEXIT1 R>);;too many EEXIT1 V?;;divide by 2 PHOLD1 PHOLD2  SCREENTOP;;init pointers $>  MAKETABLE;;first column QCOUNT* ;4 &SHOLD2;;remainder in second column> PHOLD1H  SCREENTOPR QFR0\ ,f O>;;point to second columnp PFR0z DFINISH #FR0 FINISH  MAKETABLE X; SORTINIT %> 'FLAG;;clear pass %COUNT 1;;0 offset 1;;ignore 'FREE SECTORS' 'FILENUM;;master counter X;main loop X; NEXTPAIR QFILENUMFCHECK;;pass completed$' FINDME;;address of 'bottom' string.DPOKE Z28 "FILENUMB QFILENUML FINDME;;and the 'top' oneVDPOKE Z1`%>;;init pointerj 'HOLD2tX;parse names~ CHEKTOP3;;top first)> EYOURTURN;;end search Q@Z17FCHEKTOP;;ignore spacesPFR0 YOURTURN 'HOLD1%HOLD2;;bottom name CHEKBOT3)>  ENEXTPAIR  Q@Z27FCHEKBOT;;no spaces'HOLD2;;save index(RFR0;;compare characters2DSWAP;;got one!<FNEXTCHAR;;try againFENEXTPAIR;;move onP NEXTCHARZ %HOLD1dICHEKTOP;;alwaysnSWAPx%>'FLAG;;pass not clear MOVECHAR Q@Z175Q@Z27;;new characterP@Z17;;moves up7;;old characterP@Z27;;moves down1 IMOVECHAR GNEXTPAIR CHECKQFLAG;;clear pass?HSORTINIT;;no EXIT2!TOP;;dot's it"X;, FINDME6/X;entry: a=filenum..exit: a,y=screen address@X;JT?;;index*2T>^QDIRTAB9;;low byteh2r%DIRTAB9;;high byte| :;;slickX; SCREENTOP'X;load pointers to top of screen ram"DPEEK X;;where's the screen?DPOKE FR0:;;thank youX; MAKETABLE9X;construct address table for file names in screen ramDX;entry: FR0=first screen address, HOLD1=number of entries to add1X;x=table index...exit:x=last index position+1X; ADDMOREQFR0;;current address,O>(;;down one line&PFR00PDIRTAB9;;to table: DHIGHD #FR0NHIGHX2b QFR0l PDIRTAB9v2"HOLD1;;counter HADDMORE:;;finishedX;X; DOERASEPRINT XERASE;;prompt Q>ERASE HDOXIOX; DORENAMEPRINT XRENAME;;prompt Q>RENAMEX;  DOXIOPHOLD1;;save command  GETNAME;;get filename*'CRSINH;;no cursor4PRINT XCONFIRM;;OK?> WAITKEYHQHOLD1;;fetch commandR! ICHIBAN;;call cio through #1\IEXIT3;;errors trappedfX;p X;z DOCART UPONE!GOMAC;;exit to MACX;dup.sys exit DODUP!DPEEK DUPEXIT;;zap wedge)DPOKE DOSVEC;;by restoring defaultsDPEEK RESETDPOKE DOSINI!GODUP;;aloha! EXIT3!TOP;;upvectorEND1X;X; DOMOVE%GET_WORD EDIT_BUFF;;find buffer$DPOKE HOLDTOP.#GET_WORD BUFF_LEN;;set length8DPOKE HOLDLENBX;L X;initVM>;;clear...`PFLAG;;swapjPHOLD1;;statustPHOLD2;;dest open~X;get 'from' filePRINT XMOVE;;prompt GETNAME;;get source%> MOVEFROMQ@INBUFF7;;save itPFROMNAME83R>CR;;done?HMOVEFROM;;noX;get 'to' namePRINT XTO* GETNAME;; colon required for devices!X; QLBUFF;;destination devicePCRSINH;;zap cursorR> D;;moving to disk?(HNOSWAP;;no2X;same name?< CHEKSAMEF%>P)Q@INBUFF7;;first character after specZR>CR;;none..use same named HCHEKSWAPn CLOOPxQFROMNAME8;;source nameP@INBUFF7;; to dest 3;;clikR>CR;;done?HCLOOP;;no SHOWSPEC;;reprintX;duplicate file (1 drive)? CHEKSWAP%>Q@INBUFF7;;device #RFROMNAME8;;same for both?FREADY;;yes..swap NOSWAPL>;;no..set bit 7PFLAG;;no swapX;X;" READY,QFLAG;;swap?6 GMSG2;;no@MSG1J!PRINT XFROMIN;;'FROM disk?'T IOPEN1^MSG2hPRINT XCONFIRMr OPEN1| WAITKEY;;standby)GET_WORD FROMNAME;;set name addressDPOKE INBUFFQ>READ;;set aux PNUM1AUX Q>OPEN ICHIBAN;;open #1 for readX; READ1$>;;channel 1 Q>GETCHARPICCOM9;;set command QHOLDLENPICBLEN9;;max lenQHOLDLENPICBLEN9 MOVECIO;;do it& X;READ pau0'HOLD1;;save status:)>;;ok but not finishedDHCHEKERR;;what?NFWRITE2;;move onX CHEKERRb)>;;eof:read completelFWRITE2;;okv BADMOVE!ERROR;;quit, errnum in yX; WRITE2%QICBLEN9;;how many bytes came in? PZ2;;saveQICBLEN9 PZ2" INTLBF;;'to' remains in lbuffQFLAG;;swap?GCHEKOPEN;;noPRINT XTOIN;;prompt swap WAITKEYX; CHEKOPEN $> QHOLD2;;#2 open? HGOWRITE;;yes*Q>WRITE;;else4PNUM1AUX;;set aux> Q>OPENH TOCIO;;and do itR'HOLD2;;set open flag\X;f GOWRITEpQ>PUTCHAR;;setzPICCOM9;;command QZ2;;setPICBLEN9;;length QZ2PICBLEN9 MOVECIO;;helloGBADMOVE;;oops!QHOLD1;;are we done?GENDMOVE;;yesQFLAG;;swap?GMOICHIDO;;no"PRINT XFROMIN;;prompt source WAITKEY MOICHIDO!READ1;;do it again!X; ENDMOVE$!TOP;;quit.X;8X;ϠBX;L X;closeV CLOSEME` Q>CLOSEj PICCOM9t HCIO2~X;MOVE cio vector MOVECIOQHOLDTOP;;setPICBADR9;;MOVE bufferQHOLDTOPPICBADR9HCIO2;;do itX;print asc number in lbuff SHOWASC%>L13Q@INBUFF7;;characterIL1;;last one is inverseM>;;strip P@INBUFF7;;and restore3Q>CR;;terminate( P@INBUFF72X;string printer<PRINTSTRINGF Q>PUTRECP$>;;to E:ZITOCIO;;branchdX;select #1n ICHIBANx$>X;ϠKX;entry: x=channel, a=command, inbuff=address, aux bytes set, length=$20 TOCIOPICCOM9;;set commandQINBUFF;;default address PICBADR9QINBUFFPICBADR9Q> ;;max len PICBLEN9M>PICBLEN9CIO2 CIOV;;do itGERROR;;whoops!:" X;, ERROR6 )>;;BRK@FCLEANEXIT;;can handleJ)>;;eof is okTHSHOWERR;;uh-oh^L>;;reset N flagh :;;back!rX;| SHOWERRC5;;save codePRINT XBUG;;attention! ZFR0;;clear7;;retrievePFR0;;for translation CVIFP;;to fp CVFPA;;to asc SHOWASC;;print itX;Major Exit CLEANEXIT$HOLDSTACK;;clear B;;stack!TOP;;start overX; X;& GETINPUT0$>;;input from E:: GETLINEDQ>GETREC;;input stringN HTOCIOXX;bX;l SHOWMEvKX;print single characters..entry: a,y=text address (256 characters max!)X;exit: a=0X;DPOKE FR0;;set pointer%> POPONE'LEN;;save indexQ@FR07;;get characterFPRINTED;;end of text POPCHAR;;print char%LEN;;get index3HPOPONE;;always PRINTED: X;X; X;*X;4 UPONE>Q>;;cursor upHX;R POPCHAR\!;;os print charfX;p A_KEYzQ>PCH KEY_LOOPRCH FKEY_LOOP GETKEY!;;os get keyX; ZAPLINEQ>;;delete line HPOPCHARX;X; WAITKEY A_KEY;;waiting..)>;;BREAK!FQUIT;;quit$R>;;ESCape?.FQUIT;;quit8 R> N;;NO?BHKEYOK;;else proceedLQUITV ZAPLINE;;clear`!CLEANEXIT;;and quitjX;t KEYOK~#!ZAPLINE;;clear text and returnX;X;Ԝ GETNAMEQCOLCRS;;savecolumn PCOUNT GETINPUT;;get inputX; X;parser!X;entry: input string in lbuffX;exit: legal filespec PARSEQLBUFF;;first charGQUIT;;CR..do not pass go %ICBLEN9;;INPUT length 1;;adjust'LEN;;and save(LOOK2 Q@INBUFF7<R> :;;legal spec?FFLEGAL;;yupP1ZHLOOK;;againd X;no specn ADJUSTxQLEN;;input length>;;index old pos,O>;;spaces to move?;;index new pos SHIFT3QLBUFF9;;input characterP@INBUFF7;;3 spaces right10 ISHIFT3INSERTSPECQDEFAULT8;;insert default P@INBUFF71;;backwards!IINSERTSPECX;check device number" LEGAL, QLBUFF6R> D;;disk?@HSHOWSPEC;;noJ)>;;dnum present?THSHOWSPEC;;yes^QLEN;;no..as aboveh>r,|O>;;adding 1 space? SHIFT1 QLBUFF9P@INBUFF7;;move over10 HSHIFT1 INSERTNUMQ> 1;;default numberP@INBUFF7;;to inputX;print full spec SHOWSPECQCOUNT;;restore column PCOLCRS  UPONE;;cursor up !PRINTSTRING;;printit& X;0 X;: X;D XMENUN  CR=A1 2 AX D8b * A8 Erase Rename Move Cart @DOSA=STOPl X;v XDRIVE  AD1:A=STOP;;drive text XBUG  =AError A=STOP XERASE  A >A=STOP XRENAME  A >A=STOP XMOVE  A A=CR XFROM  A FROM >A=STOP XTO  A TO >A=STOP! XFROMIN ! A FROM disk?A=STOP! XTOIN ! A TO disk?A=STOP*! XCONFIRM4! A OK?A=STOP>! X;H! KEYTABLER! A128ERMC@A;;legal keys\!X;f! JMPTABLEp!k DODIR=DODIR=DODIR=DOERASE=DORENAME=DOMOVE=DOCART=DODUP;;command vectorsz!X;! DEFAULT! AD1:*.*A=CR;;default spec!X;! X;!FROMNAME!HOLDSTACK;;stack pointer!X;!X;! ENDSHADOW!X;!X;!X;back to ram!!X;" ENDCODE"X;"X;bottom of free memory$" X;following code is wiped out."X;8" INITWEDGEB"X;reset routineL"DPEEK DOSINI;;old oneV"DPOKE RESET;;to wedge`"GET_WORD WARM;;new onej"DPOKE DOSINI;;to ost"X;save DUP.SYS run address~"DPEEK DOSVEC"DPOKE DUPEXIT"X;install os vectors"GETOS EPUT=POPCHAR"GETOS KGET=GETKEY"X;check dos version"Q "ICHEKD8;;dos 2.5"Q>"PDIRAUX;;set for 2.0"X;check for Ramdisk" CHEKD8"Q ;;DRVBYT#!GD8OK;;ramdisk.com sets bit 7 #Q>;;else replace 8#PD8;;in menu#Q> 1(#PKEYTABLE;;and keytable2# X;install<#D8OKF#GET_WORD ENDCODEP#DPOKE MEMLOZ# SHADOWS;;take overd#'CRSINH;;zap cursorn#)PRINT HELLODERE;;print title screenx#PRINT XWARNING# A_KEY;;wait#X;# MACON;;cart on#$>#&COLDST;;warstart ok#&CRSINH;;cursor on#2#&BOOT?;;disk booted#!@:;;go run mac#X;# HELLODERE#' AMACWDG 5.87 don lebowA=CR=CR#> AԠA=CR=CR=ATEXT $1D15 BACK $1D17A=CR=CR$0 AKEY DELAY $1D0B KEY REPEAT $1D0DA=CR=CR$R A˿A=CR=CR=ABRK,ESC, or N to STOPA=CR=CR=Aany other key to GOA=CR=CR$5 AĠٺ $1CFC-$1D6EA=CR=CR=CR=STOP"$ XWARNING,$] A>>ϠԠԠ͠Šա<