þþÐ A‰BLOAD.M65AdX; BINARY LOAD MENU PROGRAMn$X; NAME OBJECT FILE D:AUTORUN.SYSoEIxX;y!X; adapted from an article by:‚X; RICHARD J. KALAGHERŒ X; Analog Computing Issue #17–X;ªX;´ X; EQUATES¾X;È‚SLÀ;;PAGE ZERO TEMPORARYÒ‚SHÁ;;LOCATIONS. LAST܃STLÂ;;LETTER "L" FOR LOWæƒSTHÃ;;"H" FOR HIGH.ð ƒENLÄú ƒENHÅ ƒBLLÆ ƒBLHÇh(†ROWCRST;;ROW FOR NEXT SCREEN WRITEr+†COLCRSU;;COLUMN FOR NEXT SCREEN WRITE|†CRSINHð;;CURSOR INHIBIT†X;|;;***SEE TEXT***‘>ŒD:SYSEQU.M65’>ŽD:GRAPHICS.LIB“>ŒD:EPRINT.M65šX;¤(„MENU †OPENSC;;OPEN THE SCREEN/EDITOR®& †HEADER;;PUT A TITLE ON THE SCREEN¸$ †OPEDIR;;OPEN THE DIRECTORY FILEÂ%‚GG †GETDIR;;GET A DIRECTORY ENTRYÌ(G„FOOT;;IF END OF DIRECTORY THEN JUMPÖ2 †DIRSCN;;PUT THE DIRECTORY ENTRY ON THE SCREENà !‚GG;;GO BACK AND GET ANOTHERê„FOOTô! †CLOSE2;;CLOSE DIRECTORY FILEþ †CLOSE3;;CLOSE THE SCREEN# …SETUP;;SET RUN AND INIT TO RTS …OPENK;;OPEN THE KEYBOARD †GETLET;;GET A SINGLE LETTER& †CLOSE3;;CLOSE THE KEYBOARD0/ †FINDNA;;FIND THE FILE NAME FOR THAT LETTER: †OPEFIL;;OPEN THE FILED †GETFIL …READ2;;GET TWO BYTESN „INIT;;SET INIT DEFAULTX …CHKFF;;CHECK IF HEADERb …STRAD;;PUT START ADDRESS INl …READ2;;GET TWO MORE BYTESv …ENDAD;;PUT END ADDRESS IN€$ †BUFLEN;;CALCULATE BUFFER LENGTHŠ †GETDAT;;GET THE DATA RECORD”!G†JSTART;;START PROGRAM IF EOFž" …JINIT;;ATTEMPT INITIALAZATION¨!†GETFIL;;DO NEXT SEGMENT²"…JINIT!@â:;;DO INITIALIZATION¼"†JSTART †CLOSE2;;CLOSE THE FILEÆ!@à:;;START THE PROGRAMÐR:;;FOR INIT CODEÚX;äX; START OF SUBROUTINESîX;ø#X; SET INITIALIZATION TO DEFAULTX; „INITQ>RÿPâ  Q>R*Pã4:>X;HX; OPEN THE DIRECTORY FILERX;\†OPEDIR$> ;;IOCB#2fQ>;;OPEN COMMANDp P…ICCOM9zQ>;;DIRECTORY„ P†ICAUX19Ž Q>‚B1ÿ˜ P†ICBADR9¢ Q>‚B1¬P†ICBADR9¶ ƒCIOÀ:ÊX;Ô‚B1 A†D1:*.*AÞ$…FNAME ;;BUFFER FOR FILE NAMEè ›;;PROBABLY NO NEEDEDòƒBAL ;;TWO BYTE BUFFER FORü#ƒBAH ;;FILE HEADER AND ADDRESSX;X; OPEN FILE FOR READINGX;$†OPEFIL$> .Q>8 P…ICCOM9BQ>…FNAMEÿL P†ICBADR9VQ>…FNAME`P†ICBADR9jQ>;;OPEN FOR READt P†ICAUX19~ ƒCIOˆ:’X;œ!X; GET A SEGMENT FROM THE FILE¦X;°†GETREC$> ºQ>;;GET BYTESÄ P…ICCOM9ÎQ‚SLØ P†ICBADR9âQ‚SHìP†ICBADR9öQƒBLL P†ICBLEN9 QƒBLHP†ICBLEN9 ƒCIO(:2X;<$X; READ TWO BYTES INTO BUFFER $C0FX;P…READ2Q>ƒBALÿZP‚SLd Q>ƒBALnP‚SHxQ>‚PƒBLLŒQ>–PƒBLH  †GETREC;;GO GET THEMª:´X;¾X; CALCULATE BUFFER LENGTHÈX;Ò†BUFLENQƒENLÜ;æSƒSTLðPƒBLL;;LOW BYTEúQƒENHSƒSTHPƒBLH;;HIGH BYTE,;;NOW ADD ONE"QƒBLL,O>6PƒBLL@QƒBLHJO>;;TAKE CARE OF ANY CARRYTPƒBLH^:hX;r%X; PUT START ADDRESS IN PROPER PL.|X;†…STRADQƒBALPƒSTLšQƒBAH¤PƒSTH®:¸X;ÂX; DO SAME FOR END ADDRESSÌX;Ö…ENDADQƒBALàPƒENLêQƒBAHôPƒENHþ:X;X; CHECK IF HEADERX;&…CHKFF$ƒBAL02;;MAKE IT 0 IF ITS $FF:F…TEST2;;TEST NEXT BYTED:;;NOT A HEADERN…TEST2$ƒBAHX2bF…ITSFF;;IT'S $FFl:v$…ITSFF …READ2;;GET TWO MORE BYTES€:ŠX;”X; GET DATA BYTESžX;¨†GETDATQƒSTL²P‚SL¼QƒSTHÆP‚SHÐ †GETRECÚ:äX;îX; CLOSE IOCBSøX;†CLOSE3$>0 !ƒCLB†CLOSE2$>  ƒCLBQ> * P…ICCOM94 ƒCIO>:HX;RX; GET A DIRECTORY RECORD\X;f†GETDIR$> ;;IOCB 2pQ>;; GET BYTESz P…ICCOM9„Q>…FNAMEÿŽ P†ICBADR9˜Q>…FNAME¢P†ICBADR9¬"Q>;;LENGTH OF DIRECTORY ENTRY¶ P†ICBLEN9ÀQ>ÊP†ICBLEN9Ô ƒCIOÞ:èX;òX; OPEN THE SCREENüX; †OPENSC$>0 Q>;;OPEN P…ICCOM9$ Q>‚B4ÿ. P†ICBADR98 Q>‚B4B P†ICBADR9L Q>;;WRITEV P†ICAUX19` Q>;;MODE 0j P†ICAUX29t  ƒCIO~ Q>;;ANY NONZEROˆ P†CRSINH;;INHIBIT CURSOR’ :œ X;¦ ‚B4 A‚E:A;;SCREEN DEVICE° X;º X; WRITE TO THE SCREENÄ X;Î †WRITES$>0Ø Q> ;;PUT CHARACTERSâ P…ICCOM9ì QƒSTLö P†ICBADR9 QƒSTH P†ICBADR9 QƒBLL P†ICBLEN9( QƒBLH2 P†ICBLEN9<  ƒCIOF :P X;Z X; PUT HEADER ON SCREENd X;e *…TITL1 AšMUSIC16 DEMONSTRATION DISKA=›f ,…TITL2 AœPermission to copy this diskA=›g …TITL3 Ais hereby givenA=›h …TITL4 AŽ-Roger HofmannA=›i &…TITL5 A–*** ENTER A LETTER ***A=›n †HEADERŠ@GRAPHICS o Q>®;; light blue/grayp P†COLOR2q Q>r P†COLOR1;; BLACKs P†COLOR0t P†COLOR3x Š@POSITION =‚ ‡EPRINT …TITL1Œ Š@POSITION = ‡EPRINT …TITL2Ž Š@POSITION  = ‡EPRINT …TITL3 Š@POSITION =‘ ‡EPRINT …TITL4’ Š@POSITION  =“ ‡EPRINT …TITL5” Š@POSITION =• Q>– P†CRSINH;; turn off cursorú : X; ‚B5 ABinary Load MenuA †NUMKEY AAA" $†OFFSET ;;OFFSET FOR FILE NAMES, X;6 $X; WRITE DIRECTORY ENTRIES ON SCR@ X;J '†DIRSCN †CHKSYS;;CHECK IF A SYS FILET ) †CHKFRE;;CHECK IF "FREE SECTOR" ENTRY^ Q>…FNAMEÿh PƒSTLr Q>…FNAME| PƒSTH† Q> ;;ONLY USE NAME, NOT EXT PƒBLLš Q>¤ PƒBLH® #†ROWCRS¸ %> Q†NUMKEYÌ R>NÖ D†FIRCOLà %>;;SECOND COLUMNê Q†ROWCRSô R>þ H†FIRCOL Q> P†ROWCRS †FIRCOL'†COLCRS& Q†NUMKEY;;LETTER OF ENTRY0 P…FNAME;;PUT IN BUFFER: Q>-;;DASHD P…FNAMEN  †PUTBUF;;PUT NAME IN BUFFERX  †WRITES;;PUT IT ON SCREENb #†NUMKEY;;ADVANCE FOR NEXTl :v X;€ X; CHECK IF SYS FILEŠ X;” †CHKSYSQ…FNAME ž R> B;' ; binary files only¨ H†NOTBIN² …CKSY2Q…FNAME ¼ R> I;' ;½ H†NOTBINÐ …CKSY3Q…FNAME Ú R> N;' ;ä F…BIN.Fî 6†NOTBIN7;; NOT.BIN FILE, SO PULL RETURN ADDRESS ANDø 7;;DON'T WRITE IT ON SCREEN …BIN.F: X; "X; CHECK IF "FREE SECTOR" ENTRY X;* †CHKFREQ…FNAME4 R> ;;IT SHOULD BE A SPACE> F†NOTFREH 7R 7;;SKIP REST OF DIRSCREEN\ †NOTFRE:f X;p $X; WRITE PROMPT MESSAGE ON SCREENz X;„ †FOOTER:X;$X;.X; OPEN KEYBOARD8X;B …OPENK$>0L Q>;;OPENV P…ICCOM9` Q>‚B7ÿj P†ICBADR9t Q>‚B7~P†ICBADR9ˆ Q>;;READ’ P†ICAUX19œ ƒCIO¦:°X;º‚B7 A‚K:A;;KEYBOARD DEVICEÄX;Î X; PUT FILE NAMES IN A BUFFERØX;â†PUTBUF%>ì"$†OFFSET;;FIND CURRENT LOCATIONö Q@ƒSTL7L>€;;SET LAST BIT  P…NBUFF923;;FIRST LETTER DONE(3;;SKIP THE DASH2 ‚P1Q@ƒSTL7< P…NBUFF9FR> ;;SPACE?PF‚P2;;YES, THEN DONEZ2d3n)> xD‚P1‚Q> ŒP…NBUFF9;;MAKE LAST A SPACE–"‚P2&†OFFSET;;SAVE FOR NEXT TIME #†OFFSET;;FOR NEXT TIMEª:´X;¾ †LETTER ÈX;ÒX; FIND FILE NAME IN BUFFERÜX;æ†FINDNA$>ð‚L1Q…NBUFF9ú2 R†LETTERH‚L1 Q>D;;D" P…FNAME,Q>:;;COLON6 P…FNAME@%>J‚L2Q…NBUFF9TP…FNAME8^2h3rR> ;;SPACE?|H‚L2†1Q>.;;PERIODšP…FNAME8¤3®Q>*;;ASTERISK¸P…FNAME8Â3ÌQ> ;;SPACEÖP…FNAME8à:êX;ô$X; GET A LETTER FROM THE KEYBOARDþX;†GETLET$>0;;IOCBQ>;;GET BYTES P…ICCOM9&Q>0 P†ICBLEN9:#P†ICBLEN9;;BUFFER LENGTH ZEROD# ƒCIO;;A REG WILL CONTAIN LETTERNR>A;;LESS THAN "A"?X D†GETLETb(R†NUMKEY;;GREATER THAN HIGHEST LETTERl E†GETLETvL>€;;SET LAST BIT€P†LETTER;;SAVE ITŠ:”X;žX; SET RUN ADDRESS TO RTS¨X;²…SETUPQ>Rÿ¼Pà;;RUN LOWÆ Q>RÐPáÚ:äX;î"X; BUFFER WITH NAMES WILL BE ATø"X; END OF PROGRAM. LETTER WILL%X; HAVE LAST BIT SET & BE FOLLOWED X; BY A HYPHEN.X;  …NBUFF *X;4â;;INIT ADDRESS>X;H „MENU;;INIT ADDRESS DATARX;\