IMD 1.18: 11/10/2014 15:18:03 sd basic compiler, asm for mdos 9/3/80 C software dynamics s/n 5d00 0000 0000 001b  SDBASIC S10A090680SDBASIC \lxNEX CM2SDASM CMOSOV0 SY\2RGE CM2QUICKIE LXOS SY2IOMDOS MKSDBCOM CMOSOV6 SY2SDBRTP13MKQUICKIE BAtGENSDON0CFxBIN CM2OSOV1 SYl2IOMDOS4 SASDASM13 MKSDBCOM13MKOSOV3 SY2L CM2SDRUN CMPY CM2OSOV2 SYx2|uu+XHYHYwvz{67xHY & M& &S66~m? ~SM S10A4800BD2000132E481334 S11E48130C48071101190D00640D000143710A480734450A48075C3435444851 S105482E07314C S9  }O'0&'L/&04315X%;$*IZ062Y06336;!~nWnceg !*-9bdkt  _a[]aqwFIik'llll}*26'}O&/7606 Z&nn#Z&9 &Z&900l&l90l&l9 Z&9A%6290%62%9$l9@%j96hiJ&296dfJ&29$&P+O?'& ?% ?.' 9 '? ?6 ' 29'' 9O'9**  $ && ?$~ 09 I &KE?$~09   9090~_0 h0629_?&?.062 C06 0&9  & 90gf90hi9 440J&0 6290   J&110 ކOi ON670$1'24'.8'*9'& 320$'90? ?0j'&?.Y$u Vx~>?*?/% 629~/' '  k "uS~DK8LPECRRCP_CNlHRyr 1 )Qze W T  Q NS*"' "!$%3l&l && l&l"!$E011n0~Ao'  ''   9? "! '  9&' ++& +|$~( 66?240?311116L6*5i+`32P@$Z73$O_ ?(?!I% ~B~*|_?3?*67)*0l&ll&l&&11~%0 09 |?3?+?$~B?26 HYHY01674 0+??31111  +  l&l 9    }* |S6]3&l f09~~  U Rz (&}* V (H7F $9ц 1 ' G$ 9 9W (}*7 _ 011n~϶?}& W~ J~ d~ ~ ~ & }*] &9 |b}*0 b}*9OZ& 2OZ&     $0 011n&~  V$]&u0  !' m& Y ˋHHH0 0'l >0 !' ]'~ ]&& '~ } &~ ~ #_ HHHH?( &   m&~  &  0 ? 'B_9 & ?'0 && ~ 0 ?'~ D'~  '~ ?0  0?"$ ? ?  ~ !'~ &\0 '   0 @'o o ooo?!]''?'; ? ?_B   ?0* '~  9       DDD   } &? ? 9 _  %*_  Yz &VFFFF# "GY9' V$]'~ &Ġ''P& &' '0@& ?$ &~ ? ? &~ & x9?)%  $~ Š& '?(%%' _?]&' 'G &C&7vŀ& ' 7}n7676~m  '2m '%''0n00&_9 90 9    ?z9?$?/$11 ?&?/%9  &ŀ' ?-9Š&   ?.9 90uv9v'# ?u'J$|911~ oc' 9Š' h9& SS90}629ŀ'hvŠ&9S#Mٽnp{' {j?' &&l ) #_HY?)?# *'>&~0Ӧ'_\'0է }&|ަm'С&~  Ӧm''?' |&|  Ն ) $! 9?ۆ.?ۆ:9ַ$|ն&ٽ99צٷGط$| 0 ~f626 29DDDD09#90 &1f38 "#$ % &  ' ( )*+,-.5BbINVALID MESSAGE \3 AT \8UNIF. I/O ERROR-STATUS=\3 AT \8PROM I/O ERROR-STATUS=\3 AT XXXX ON DRIVE X-PSN XXXX0MDOSOV SYo6 6 6 660_\$ H/,6@?% 20 229V S          ؽؽؽؽؽؽؽؽؽ ~m       | M'  / /| ~?%( ~& ? ? ? |9V S   oo~~ؽؽؽؽؽؽؽ'н$~y ?   '; Z9 ?_$~w?'  ?'~b&.%,M%& %  \ \~M$~%' &~$'M$ &~}?&$ &m &m ' ' '~} &? &ƀO?Z?1?1 ?m+ 'K_ $?,?) &~ w &  _?&$?,?(~y&^wXXZ?'gʀ? & _9 ۽wXX?'~ 9      &~ut?'~fTTT-#~?XXXX?''~o o m*~;?* ?~;w%SZ& ?0?0*~yw%R?.&ǽʀt?)' oo ?~?(~$9 ?( 9TFVFVD6YYYO FZ,299$ 9g|WW\7g?%39ZXX7g?%3O?*9?-g?)9н$11~u?m+ \:/11~u'9  ( ooؽ~~~~~!~~90909X0o]''d*&ց.&PƂ]' *&ʍ:& 0? 0?090 ;' ' 0 l&l9u #'zƀ ?6ŀ& '@'?$ @?%?0]'Z0Y?%0 ?')760' ?0 ?23*& ?$?$*1906?290?ƈ~ 6'-  ?-?&0 5?&?)   ?/%(?/$! 0m& _2W9 @&- $*?%$ ?%'?/' ~~~'DK&~J0 %Z]' ?(Z 'oo' 00  @ ? 09 0  $ ?(z& ~q6 @'' ?2oo?3oo  29'~n '~q&~q|'''~t&'| &&o o  's$~w?@}&~ʶ'~}*~M%xl&l&' &}/%}& |&Ľ[ 0}& }'7[3%!&' &  0$~h~0$6~h&%}'  '!}, & '  $~h%~}}&| &P09 0%}. 0%09E}+ H}'D0$~hO}+ ?.]'~z$L}&| '0%C}*~~}'7TTTT3% 90:%9ʀ  ' 73]' 9`~~ _'~ۆ&~߆ &$~}&'''~~)'| - Z.$~%_ 3$~}'Z& 'M&ZJ?%$~&~&(%?/'% '& &8}'}& $~}'~}'~o_9'&|]*' z' ~B3$~}'H' ' E&| D' }&t&i~%&~}'&}'&z' ~% ~%}&̽3% &&'m&jj~ 0] 9  0 &}&   7399@ 9󆀪 3%%"$1111~XXXXi3% %i 90%% *% 9}+39>997 &39 % 9?/9}&M&ZJ97%3g9399   ~~~'~ & o_9''  '~p''&?8'~@' D &'8&]'/?/')!"?/%o  ?ߤ]'~oo&~ &Q'~ DDD-#~?XXXX?'? ? ?'?"%~0] 9   &0o_90?&\TTT-R# L ?0XXXX?'''0 ?'6 ?20?90 9  &~{0' &?$~'M  '~&& ?_9?%~'   ?'?'??@?%!?&~ 9   ??9ÄHHHH?(VVV9"(~%&~φ@ &~? ''~ &.~׽o_9 '?'&~~|?  &~۽  &~I ?'?$' ? ?&~~' '~oo oo# %"?%*~ %:m+Z&~~b}?'~b?6'~m ' ?'#% #?&# ?'%#?~b ?' ' '  @&~۽ & & 62''&  &~ &~> ?'?$&~&~&~ ? ?~' ''~}?'~b;= ?'?$?%?'?$?7;<=>m&~e~ &~׆``& ~0] 9           9 $11~9$X~%~= jS9@1"COPY RLOAD.LO:1,.CM:0;V D MANUALLY FROM 0 TO 1 UP;A END CHAINHHHHC'1~#? $0 K(? ?. ?' (K? %S@'C\&(0$ ']'Z 09)~#*((*9*'..'*J'tC'fL'_, S&~v. T'%2 6*'S? 2.&4:? ? $~U #6+?,-.?/  2~}+* .|+S@L&S.&+ Ҷ,-*+ O 6.?&%2M' *&S? ((,$#_?S9 &4+'3~#+4 //9.?& ?&0? ~%~s?'((((6:2&*9 ? .???oo0+( # + . (7x+y*Z&++3Z&9&~ !q?o_!l?!o!B&%!o !E&!q!!s!q?' RI S ? '~ U~ H @'E @' {'3j? , ?%?%E?%?%j?%?%! L&|%= ݁N&|%? ԁF'~""'$~"%a#"%@# '.&"'%%a #c"%A#~ $#%t##?%}##?$%#?'~"?&'~"}%>'%? %d? ?'%}%=' L$(P$)$ ?'~"?&S%C&%D$ $8}%?'$@#$$}%?'$8?$<#%[##%#?': &/}%Z'}%='}%]' %A%]##?S%C'%N'~"~" '~"L%C&:%[%\%D?/$-? %%[%[}%N&~!qL%N& %O%P?/$~!$ }%]&3%q#%X#%X#%%d$$%$&#g&1#%]$8$$#$&%Z#g&|%]%]%A-%]~!? #?   ? ?     %Q%^%F_## '0-9.\# %F%F %^]'&%)}%`& 9O9'e#fL'S' 9m&%^%b_ '\L#f'. . %^]'цL#f'& &)%%`%a%b#fL&' 9$&$$$%?-_%@?/$ $$J?($&$$ ' #%?$$?/$?% ? $11~!$ ?9$ ###9#?''_? #?''_? 9%$$%$&$ 7?3Z&9$8$DK0 SA$%<CNPB PAGE XXX XXXXXXXX.XX:X %ENTER HEADING:  ]&~&l&l&&&&&&&o%&l &670 'Z&32&l&ll&lj ,& m&jj&l&lj&&O9'd ]'G&&oo &HY%5HY%1%+HY%'&l&l?%_%z&&O9 ]'+'oo''l&l'!%'<Z&'9A% 62% 0%62%96hiJ&29 48 0204'*U''?'&~! &~%*VDK&~%*S*4*4*z''?'&  '*{DK'*x*4*4'_ 'W;' ' 'G '*<&3'D&=&**''7?''_~%3 ',& ' m&~%*7UDŀ'*4'*V'''*{'~%&*4'*V' '*{' &~%' & *z&*'*4'~# *z&*U*z*&*^**{&*V'*{''?PS*7'~%P*7' *L*L *q*q*K?'~%?&*7@'~"S*b**c**d**^*&d*q*q*p?&?'}*&}*'&** %*K?'U &*b&C*\**K?&?'*(**p?&,''('' ?**p?& %?*p?'~%'*(**p&E%*K?'L '~%*p?'d &*b'~"D*\**K?&*p?&''('' ?' &*p?' '~%' ''''ƀ?&~"e*\}*K& '+ ''+ *? Ɓ?#~"D*7ŀ'S*:*?*:$&~%&~%&~%~%*7'*96*8644446n *z&0*z*4&~$*V'*{'' ?*K?'~%?&*b''~%޶*7'~%օ ' @&HP*x&'& '*bx**7'&dž*q*q |'*7@&R*q*q*p&'?'~%?&*7 '%*K?' &~"D}'& *O*M'|'*M*v*p?& CN*x&~%)**t*3*v*7&|'&E%*K?' &*p?' &~"D*? ~#}'&*M'*p?' '~$}'& *r'|'*O'*t'''&*r& '*M' ''*M'' CN*S&~%*7('~%'*4'*L*L*b |'*V*4' *&SA**{'*V'' ?*K&'?'~%?&*b' ''~%*bx**4&*V'*{'' ?*7@'~$N&d~#? %? *      *z ? $%?9*K&&*q&*q&*{'*q*q*p&&9&C?''_? &C?''_? 9*p&'?& ?&*? 9~%*z?'9*ŀ'~%*b' '~%&*4& **b&*7'9*{'*''?***z**? '? 'Y'ƀ?#%?H& R&*5*6 @ o9U& D&** +#bNCWH V@DM( ))DK0 SA' '( ))DK  ' '0 LO' 'VERIFY IN PROGRESSXXXXXXXX.XX:X EXISTS. OVERWRITE? VERIFY FAILEDVERIFY FAILED AT LSN XXXX]'/l&l+?+? #0m&jj+? Z&+?96dfJ&29  +q +$ 0 011n++oo<+9++Ǧ4< ++Φ+ +&z+& %0& +9+M  ; 0200O$%&#L- $$$j0$Y$Z ?%$Y%%? _%ئ '@;& '5E&  $ A&  $$ ܁L& ԁS& ́ ' !_$Y$z' \J'~#)$Y ' %$%%?$~#)$%$%%?$r$% $Y& '~" &&" "? $~#"$Y?$~##'#&"J& !&$f &|&#!&~"#$d%$%%ν&O$j'('%$%%ν&$Y$d%%E%%?$~#)$%E'+|$?''*$%$?)$$%$%%ν&!&~"%E*&"%$% %?~"00$ $?%E)(''?'%$%%ν&)(''%$%%ν&$$%$ '$$?$'$57&)+*@Ɓ?#&$% ))+? $~#~"$$%"'~#-~ _+, $Z&z+  &+ |+$b'&$b&z,  & |,$d'&|#$Z%%%% ?~ &ƀ@?#&-$% s' ? i&'!',$%&c%%ν&$%&h%%ν&&F$%&(''%&%%ν&'%&%%ν&&j$%!'-Z'$>?$Z%$%%?.$$b$9++$Z%%%%?&,*O J'$b% $b%9%%$%%?.$f$H%$&$f9!&? 9z-&<-?49?2% Z' %?5?390 $%DDRIVE : DISK I.D. : . !WDSCN0 *NO SDW'S* NO DIRECTORY ENTRY FOUND TOTAL NUMBER OF SECTORS : /$ TOTAL DIRECTORY ENTRIES SHOWN : /$ NO TERMINATOR FOUND IN FILE'S R.I.B. ]'/l&l&& #0m&jj& Z&&96dfJ&29]&~'l&l'''''''o%'l '670 'Z&32'l&ll&lj ,' m&jj'l&lj&'O9'd $0 Z&9|@|`| TITLE I/OPACKAGEFORMOTOROLAMDOSBYSOFTWAREDYNAMICS NAME IOMDOS * --IRABAXTER EDITDATE EQU $0906 /80 * * 0906FIX"MDOSFAILSTOEXTENDFILEPROPERLY"BUG * OTHERNOTES:IFYOUHAVE2FILESOPEN,BOTHOFTHESAMENAME, * ANDYOUEXTENDONEOFTHEM,WHETHERTHEEXTENSIONWILLBEREMEMBERED * DEPENDSONWHETHERYOUCLOSETHEEXTENDEDONEFIRSTORLAST...BEWARE * TOTEST:  =LOADSDRUN.CM;(SDRUNFILEID) * WHATFOLLOWSISLIFTEDFROMTHE"MDOS"MANUAL * ****SYSTEMEQUATEFILE****FORMDOS * * MDOSVERSION2.01--SYSTEMEQUATEFILE--APRIL29,1977 * * DEFINEMULTI-SECTOR/SINGLESECTORI/O * MULTS EQU 0 0=>SINGLESECTOR,1=>MULTIPLESECTOR * SKIP2,SKIP1,SCALL,UCALL,SEQMACROSINTENTIONALLYLEFTOUT * SCALL EQU $3F SYSTEMCALL * * SYSTEMFUNCTIONDEFINITIONS * * * SETLOCATIONCOUNTERTO0FORTHEEQUATEDEFINITIONS * :SAV SET * SAVEOLDLOCATIONCOUNT ORG $0 * * * .RESRV RMB 1 .RESERVEADEVICE .RELES RMB 1 .RELEASEADEVICE .OPEN RMB 1 .OPENAFILE .CLOSE RMB 1  .CLOSEAFILE .GETRC RMB 1 .READARECORD .PUTRC RMB 1 .WRITEARECORD .REWND RMB 1 .POSITIONTOBEGINNINGOFFILE .GETLS RMB 1 .READLOGICALSECTOR .PUTLS RMB 1 .WRITELOGICALSECTOR .KEYIN RMB 1 .CONSOLEINPUT .DSPLY RMB 1 .CONSOLEOUTPUT(TERMW/CR) .DSPLX RMB 1 .CONSOLEOUTPUT(TERMW/EOT) .DSPLZ RMB 1 .CONSOLEOUTPUT(TERMW/EOT,NOCR/LFATEND) .CKBRK RMB 1 .CHECKCONSOLEFORBREAKKEY .DREAD RMB 1 .EROMDISKREAD .DWRIT RMB 1 .EROMDISKWRITE .MOVE RMB 1 .MOVEASTRING .CMPAR RMB 1  .COMPARESTRINGS .STCHB RMB 1 .STOREBLANKS .STCHR RMB 1 .STORECHARACTERS .ALPHA RMB 1 .CHECKALPHABETICCHARACTER .NUMD RMB 1 .CHECKDECIMALDIGIT .ADDAM RMB 1 .INCREMENTMEMORY(DOUBLEBYTE)BYA .SUBAM RMB 1 .DECREMENTMEMORY(DOUBLEBYTE)BYA .MMA RMB 1 .MULTIPLY(SHIFTLEFT)MEMORYBYA(COUNT) .DMA RMB 1 .DIVIDE(SHIFTRIGHT)MEMORYBYA(COUNT) .MDENT RMB 1 .ENTERMDOSWITHOUTRELOADING .LOAD RMB 1 .LOADAFILEFROMDISK .DIRSM RMB 1 .DIRECTORYSEARCHANDMODIFY .PFNAM RMB 1 .PROCESSFILENAME .ALUSM RMB 1 .ALLOCATEUSERMEMORY .CHANG RMB 1 .CHANGENAME/ATTRIBUTES .MDERR RMB 1 .MDOSERRORMESSAGEHANDLER .ALLOC RMB 1 .ALLOCATEDISKSPACE .DEALC RMB 1 .RETURNDISKSPACE .EWORD RMB 1 .SETERRORSTATUSWORDFORCHAIN .TXBA RMB 1 .TRANSFERXTOB,A .TBAX RMB 1 .TRANSFERB,ATOX .XBAX RMB 1 .EXCHANGEB,AANDX .ADBX RMB 1 .ADDBTOX .ADAX RMB 1 .ADDATOX .ADBAX RMB 1 .ADDB,ATOX .ADXBA RMB 1 .ADDXTOB,A .SUBX RMB 1 .SUBTRACTBFROMX .SUAX RMB 1 .SUBTRACTAFROMX .SUBAX RMB 1 .SUBTRACTB,AFROMX .SUXBA RMB 1 .SUBTRACTXFROMB,A .CPBAX RMB 1 .COMPAREB,ATOX .ASRX RMB 1 .SHIFTXRIGHT(ARITHMETIC) .ASLX RMB 1 .SHIFTXLEFT(ARITHMETIC/LOGICAL) .PSHX RMB 1 .PUSHXONSTACK .PULX RMB 1 .PULLXFROMSTACK .PRINT RMB 1 .PRINT-TERMINATEWITHCR .PRINX RMB 1 .PRINT-TERMINATEWITHEOT .GETFD RMB 1 .READFDR .PUTFD RMB 1 .WRITEFDR .PUTEF RMB 1 .WRITEEOF .EREAD RMB 1 .DISKREADW/ERRRETN .EWRIT RMB 1 .DISKWRITEW/ERRRETN RMB 1 RMB 1 RMB 1 RMB 1 .BOOT RMB 1 .RELOADMDOS ORG :SAV RESTORELOACTIONCOUNTER * * * ASCIICONTROLCHARACTERS * NULL EQU 0 NULL SOH EQU 1 STARTOFHEADING STX EQU 2 STARTOFTEXT ETX EQU 3 ENDOFTEXT EOT EQU 4 ENDOFTEXT ENQ EQU 5 ENQUIRY(WRU-WHOAREYOU) ACK EQU 6 ACKNOWLEDGE BEL EQU 7 BELL BS EQU 8 BACKSPACE HT EQU 9 HORIZONTALTAB LF EQU $A LINEFEED VT EQU $B VERTICALTAB FF EQU $C FORMFEED CR EQU $D CARRIAGERETURN SO EQU $E SHIFTOUT SI EQU $F SHIFTIN DLE EQU $10 DATALINKESCAPE DC1 EQU $11 DEVICECONROL1 DC2 EQU $12 DEVICECONTROL2 DC3 EQU $13 DEVICECONROL3 DC4 EQU $14 DEVICECONTROL4 NAK EQU $15  NEGATIVEACKNOWLEDGE SYN EQU $16 SYNCHRONOUSIDLE ETB EQU $17 ENDOFTRANSMISSIONBLOCK CAN EQU $18 CANCEL EM EQU $19 ENDOFMEDIUM SUB EQU $1A SUBSTITUTE ESC EQU $1B ESCAPE FS EQU $1C FISLESEPERATOR GS EQU $1D GROUPSEPERATOR RS EQU $1E RECORDSEPERATOR US EQU $1F UNITSEPERATOR SPACE EQU $20 SPACE(WORDSEPERATOR) RUBOUT EQU $7F DELETE(RUBOUT) * * SPECIALCHARACTEREQUATES * SUFDLM EQU '. SUFFIXDELIMITER OPTDLM EQU '; OPTIONSDELIMITER DRVDLM EQU ': LOGICALDRIVERDELIMITER DEVDLM EQU '# GENERICDEVICENAMEDELIMITER FAMDLM EQU '* FAMILYNAME/SUFFIXDELIMITER E$FATL EQU 1##7 FATALERRORBIT PAGE * * MDOSSECTOREQUATES * SC$DID EQU 0 DISKIDPHYSICALSECTORNUMBER SC$CAT EQU 1 CLUSTERALLOCATIONTABLEPHYSICALSECTORNUMBER SC$LOK EQU 2 LOCKOUTCLUSTERTABLEPHYSICALSECTORNUMBER SC$DIR EQU 3 DIRECTORYSTARTPHYSICALSECTORNUMBER SC$DRE EQU $16 DIRECTORYENDPHYSICALSECTORNUMBER SC$BB EQU $17 BOOTBLOCKPHYSICALSECTORNUMBER SC$DOS EQU $18 OPERATINGSYSTEMPHYSICALSECTORNUMBER(RIBADDRESS) SC$SIZ EQU 128 SECTORSIZEINBYTES SC$TRK EQU $26 NUMBEROFSECTORS/TRACK SC$CLS EQU 4 NUMBEROFSECTORS/CLUSTER SC$MAX EQU 2000 MAXIMUMNUMBEROFUSABLESECTORS DFCLS$ EQU 32 DEFAULTNUMBEROFCLUSTERS * * DISKIDSECTOROFFSETS * DID$ID EQU 0 OFFSETTODISKID(8BYTES) DID$VN EQU 8 OFFSETTOVERSIONNUMBER(2BYTES) DID$RN EQU 10 OFFSETTOREVISIONNUMBER(2BYTES) DID$DT EQU 12 OFFSETTODATE(6BYTES) DID$NM EQU 18 OFFSETTOUSERNAME(20BYTES) DID$RB EQU 38 OFFSETTORIBADDRESS(20BYTES) * * DIRECTORYENTRYOFFSETS * DIR$NM EQU 0 OFFSETTONAME(8BYTES) DIR$SX EQU 8 OFFSETTOSUFFIX(2BYTES) DIR$RB EQU 10 OFFSETTORIBADDRESS DIR$AT EQU 12 OFFSETTOATTRIBUTES(2BYTES) DIR$NU EQU 14 OFFSETTONOTUSEDAREA(2BYTES) * * RIBBINARYFILEOFFSETS * RIB$LB EQU 117 NUMBEROFBYTESINLASTSECTOR RIB$SL EQU 118 NUMBEROFSECTORSTOLOAD RIB$LA EQU 120 MEMORYLOADADDRESS RIB$SA EQU 122 STARTEXECUTIONADDRESS PAGE * UNIFIEDI/OCONTROLBLOCK * * OFFSETS * IOCSTA EQU 0 ERRORSTATUS IOCDTT EQU 1 DATATRANSFERTYPE IOCDBP EQU 2 DATABUFFERPOINTER IOCDBS EQU 4 DATABUFFERSTARTADDRESS IOCDBE EQU 6 DATABUFFERENDADDRESS IOCGDW EQU 8 GENERICDEVICETYPE/CONTROLDESCRIPTORADDRESS IOCLUN EQU 10 LOGICALUNITNUMBER IOCNAM EQU 11 FILENAME IOCMLS EQU 11 MAXIMUMREFERENCEDLOGICALSECTORNUMBER IOCSDW EQU 13 CURRENTSEGMENTDESCRIPTORWORD IOCSLS EQU 15 1STLOGICALSECTOROFCURRENTSEGMENT IOCLSN EQU 17 CURRENTLOGICALSECTORNUMBER IOCSUF EQU 19 FILENAMESUFFIX IOCEOF EQU 19 LOGICALENDOFFILE IOCRIB EQU 21 PHYSICALDISKADDRESSOFRIB IOCFDF EQU 23 FILEDESCRIPTORFLAGS IOCDEN EQU 27 DIRECTORYENTRYNUMBER IOCSBP EQU 29 SECTORBUFFERPOINTER/INITIALALLOCATION IOCSBS EQU 31 SECTORBUFFERSTARTADDRESS IOCSBE EQU 33 SECTORBUFFERENDADDRESS IOCSBI EQU 35 SECTORBUFFERINTERNALPTR IOCBLN EQU IOCSBI+2-IOCSTA IOCBLENGTH * * UNIFIEDI/OERRORSTATUSES * :SAV SET * REMEMBERTHECURRENTLOCATIONCOUNTER ORG $0 RESETITTOZEROTTOUSETHESEQMACKR * I$NOER RMB 1 NOERRORS,NORMALRETURN I$NODV RMB 1 NOSUCHDEVICE I$RESV RMB 1 DEVICERESERVEDALREADY I$NORV RMB 1  DEVICENOTRESERVED I$NRDY RMB 1 DEVICENOTREADY I$IVDV RMB 1 INVALIDDEVICE I$DUPE RMB 1 DUPLICATEFILENAME I$NONM RMB 1 FILENAMENOTFOUND I$CLOS RMB 1 FILENAMENOTOPEN/ORFILENOTCLOSED I$EOF RMB 1 ENDOFFILE I$FTYPE RMB 1 INVALIDFILETYPE I$DTYP RMB 1 INVALIDDATATRANSFERTYPE I$EOM RMB 1 ENDOFMEDIA I$BUFO RMB 1 BUFFEROVERFLOW I$CKSM RMB 1 CHECKSUMERROR I$WRIT RMB 1 FILEISWRITEPROTECTED I$DELT RMB 1 FILEISDELETEPROTECTED I$RANG RMB 1 LOGICALSECTORNUMBEROUTOFRANGE I$FSPC RMB 1 NODISKFILESPACEAVAILABLE I$DSPC RMB 1 NODIRECTORYSPACEAVAILABLE I$SSPC RMB 1 NOSEGMENTDESCRIPTORSPACEAVAILABLE I$IDEN RMB 1 INVALIDDIR.ENTRYNO. I$RIB RMB 1 INVALIDRIB I$DEAL RMB 1 CAN'TDEALLOCATEALLSPACE I$RECL RMB 1 BINARYRECORDLENGTHTOOLARGE ORG :SAV RESTORETHELOCATIONCOUNTER PAGE * * MDOSINTERNALVARIABLES * * ANDLOCATIONEQUATES * MDOS$ EQU $100 STARTOFMDOSASECT CBUFL$ EQU 80 COMMANDBUFFERLENGTH CBUFF$ EQU MDOS$-CBUFL$-2 COMMANDBUFFERLOCATION CBUFP$ EQU CBUFF$+CBUFL$ COMMANDBUFFERSCANPOINTER VERS$$ EQU MDOS$ VERSION# REVS$$ EQU VERS$$+2 REVISION# KYI$SV EQU REVS$$+2 SAVEAREAFORKEYIN$VECTOR ENDOS$ EQU KYI$SV+2 ENDOFMDOS ENDUS$ EQU ENDOS$+2 ENDOFUSERPROGRAMAREA ENDSY$ EQU ENDUS$+2 ENDOFSYSTEM(MDOS)RAN RIBBA$ EQU ENDSY$+4 RIBBUFFERADDRESS ENDRV$ EQU RIBBA$+2 ENDOFMDOSROMVARIABLES GDBA$ EQU ENDRV$+2 GENERICDEVICETABLEADDRESS SYERR$ EQU GDBA$+2 SYSTEMERRORSTATUSWORD SWI$SV EQU SYERR$+2 SWIVECTORSAVEAREA SWI$UV EQU SWI$SV+2 SWIUSERVECTOR IRQ$UV EQU SWI$UV+2 IRQUSERVECTOR IRQ$SV EQU IRQ$UV+2 IRQVECTORSAVEAREA CHFLG$ EQU IRQ$SV+2 CHAINFUNCTIONFLAGWORD SYIOCB EQU CHFLG$+2 CHAINFUNCTIONFLAGWORD SYPOCB EQU SYIOCB+IOCBLN SYSTEMPRINTERIOCB SYEOCB EQU SYPOCB+IOCBLN ERRMSGFILE PAGE * * LOGICALUNITNUMBER--BITDEFINITIONS * LU$RES EQU %01000000 IOCBRESERVEDFLAG * * IOCDTT--BITDEFINITIONS * DT$OPP EQU %00000000 OPENUPDATE/INPUT DT$OPI EQU %00000001 OPENINPUTMODE DT$OPO EQU %00000010 OPENOUTPUTMODE DT$OPU EQU %00000011 OPENUPDATEMODE DT$NFF EQU %00000100 NON-FILEFORMATI/OFLAG DT$TRU EQU %00001000 TRUNCATEFLAG DT$CLS EQU %00010000 FILEOPEN/CLOSEFLAG DT$SIO EQU %00100000 SECTORI/OFLAG DT$OUT EQU %01000000 OUTPUTTRANSFERTYPE DT$INP EQU %10000000 INPUTTRANSFERTYPE * * IOCFDF--BITDEFINITIONS * FD$FMU EQU %00000000 USERDEFINEDFORMAT(SECTORI/OONLY) FD$FMD EQU %00000001 DEFAULTOBJECTREC'DFORMAT(DEVICEDEPENDENT) FD$FML EQU %00000010 BINARYLOADFORMAT--ABSOLUTEMEMORYIMAGE FD$FMB EQU %00000011 BINARYRECORDFORMAT--RASMOUTPUT,RLOADINPUT FD$FMR EQU %00000100 BINARYLOADFORMAT--RELOCATABLEMEMORYIMAGE FD$FMA EQU %00000101 ASCIIRECORDFORMAT--INCLUDESEXORCISORLOADFORMAT FD$FMC EQU %00000111 ASCII-CONVERTED-BINARYRECORDFORMAT FD$CMP EQU %00001000 SPACECOMPRESSIONFLAG FD$CON EQU %00010000 CONTIGUOUSALLOCATIONFLAG FD$SYS EQU %00100000 SYSTEMFILEATTRIBUTE FD$DEL EQU %01000000 DELETEPROTECTIONATTRIBUTE FD$WRT EQU %10000000 WRITEPROTECTIONATTRIBUTE * * UNIFIEDI/OCONTROLDESCRIPTOR * * BLOCKOFFSETS * CDBIOC EQU 0 ADDRESSOFIOCB CDBSDA EQU 2 SOFTWAREDRIVERADDRESS CDBHAD EQU 4 HARDWARE  ADDRESS CDBDDF EQU 6 DEVICEDESCRIPTORFLAGS CDBVDT EQU 7 VALIDDATATYPE CDBDDA EQU 8 DEVICEDEPENDENTAREA CDBWST EQU 10 WORKINGSTORAGE * * CDBDDF--BITDEFINITIONS * DD$FMC EQU %00000001 ASCII-CONVERTED-BINARYISDEFAULTOBJECTRECORD DD$LOG EQU %00000010 LOGICALSECTORI/OFLAG DD$CNS EQU %00000100 CONSOLEFLAG DD$RWD EQU %00001000 REWINDFLAG DD$OCF EQU %00010000 OPEN/CLOSEFLAG DD$INP EQU %00100000 INPUTDEVICEFLAG DD$OUT EQU %01000000 OUTPUTDEVICEFLAG DD$RES EQU %10000000 RESERVABLEDEVICEFLAG * * CDBVDT--BITDEFINITIONS * VD$BIN EQU %00000100 BINARYOBJECTFLAG VD$GDB EQU %00001000 TEMPGDBPOINTERFLAG VD$SDA EQU %00010000 TEMPSDAPOINTERFLAG VD$NFF EQU %10000000 NON-FILEFORMATFLAG * * DEVICEDRIVERENTRYOFFSETS * DV$ON EQU 0 DEVICEONOFFSET DV$OFF EQU 3 DEVICEOFFOFFSET DV$INT EQU 6 DEVICEINITIALIZATIONOFFSET DV$TRM EQU 9 DEVICETERMINATIONOFFSET DV$IO EQU 12 DEVICECHARACTERINPUT/OUTPUTOFFSET PAGE * * DISKEROMEQUATES * CURDRV EQU 0 CURRENTDRIVENUMBER STRSCT EQU 1 STARTINGPHYSICALSECTORNUMBER NUMSCT EQU 3 NUMBEROFSECTORSTOOPERATEUPON LSCTLN EQU 5 NUMBERROFBYTESTOBEREADFROMLASTSECTOR CURADR EQU 6 MEMORYADDRESSFORDISKTRANSFER FDSTAT EQU 8 DISKTRANSFERSTATUS SCTCNT EQU 11 SECTORCOUNTUSEDINDETERMININGERRORS PGMDRV EQU $1D DRIVEFROMWHICHLASTPROGRAMWASLOADED PGMPSN EQU $1E PHYSICALSECTORNUMBEROFRIBOFLASTLOADPROGRAM * * EROMENTRYPOINTS * OSLOAD EQU $E800 BOOTSTRAPTHEOPERATINGSYSTEM FDINIT EQU $E822 INITIALIZETHEDISK'SPIAANDSSDA CHKERR EQU $E853 CHECKANDPRINTERRORFROMFDSTAT PRNTER EQU $E85A PRINTERRORFROMFDSTAT READSC EQU $E869 READSECTOR(S) READPS EQU $E868 READPARTIALSECTOR RDCRC EQU $E86F READANDCHECKFORCRC RWTEST EQU $E872 READ/WRITETEST RESTOR EQU $E875 MOVEHEADTOTRACK0 SEEK EQU $E878 POSITIONHEADTOTRACKOF"STRSCT" WRTEST EQU $E87B WRITETEST WRDDAM EQU $E87E WRITEDELETEDDATAMARK WRVERF EQU $E881 WRITEANDVERIFYCRC WRITSC EQU $E884 WRITESECTOR(S) * * EROMERROREQUATES * ER$CRC EQU '1 DATACRCERROR ER$WRT EQU '2 WRITEPROTECTEDDISK ER$RDY EQU '3 DISKNOTREADY ER$MRK EQU '4 DELETEDDATAMARKENCOUNTERED ER$TIM EQU '5 TIMEOUT ER$DAD EQU '6 INVALIDDISKADDRESS ER$SEK EQU '7 SEEKERROR ER$DMA EQU '8 DATAADDRESSMARKERROR ER$ACR EQU '9 ADDRESSMARKCRCERROR * * MISCELLANEOUSEROMEQUATES * RETRY$ EQU 5 RETRYCOUNTFORDISKREAD/WRITEERRORS * * LINEPRINTEREROMEQUATES * LPINIT EQU $EBC0 INITPRINTERPIA LIST EQU $EBCC PRINTCONTENTSOF'A' LDATA EQU $EBE4 PRINTSTRING,CR/LF LDATA1 EQU $EBF2 PRINTSTRING,NOCR/LF * * EXBUGEQUATESFORMDOS * INCHNP EQU $F015 INPUTCHARACTER(NOPARITY) OUTCH EQU $F018 OUTPUTONECHARACTER PCRLF EQU $F021 PRINTLF/CR PDATA EQU $F024 PRINTSTRING SBIT$ EQU $FCFD BIT7INDICATESIRQOCCURRED(IFCLEARED) BRKPT$ EQU $FF1F MAID'SBREAKPOINTTABLE(8FDB'S) BKPIN$ EQU $FF4F EXBUGBREAKPOINTSINMEMORY(FROMCONTINUECMD) AECHO EQU $FF53 INPUTCHARACTERECHOFLAG(0=>ECHO) IRQ$SVC EQU $FFF8 IRQVECTOR SWI$VC EQU $FFFA SWIVECTOR NMI$VC EQU $FFFC NMIVECTOR XSTAK$ EQU $FF8A EXBUGSTACK MAID$ EQU $F0F3 MAIDENTRYPOINT XREG$P E QU $FF16 MAIDP-REG XREG$X EQU $FF18 MAIDX-REG XREG$A EQU $FF1A MAIDA-REG XREG$B EQU $FF1B MAIDB-REG XREG$C EQU $FF1C MAIDC-REG XREG$S EQU $FF1D MAIDS-REG BRKPE$ EQU $FF63 ENDOFMAIDBREAKPOINTTABLE CNACI$ EQU $FCF4 CONSOLEACIA * * SPECIALMACROFORTHECENTRONIXPRINTERSTOPRINTTITLES * *TITLE MACR * TTL \0 * ENDM PAGE SOFTWAREDYNAMICS'I/OPACKAGEFORMDOS2.01 * * SUBROUTINEDEFINITIONSTAKENFROMSDCOMPILERBASICMANUAL * IFUND CODE CODE EQU $2000 DEFAULTSDSOFTWAREORIGINUNDERMDOS FIN MDOSERRTAG EQU $FF00 ADDITIVETAGTODIFFERENTIATESDERRSFROMMDOSERRS BUFFERSIZE EQU SC$SIZ SIZEOFSECTORINBYTES IFUND NCHANNELS NCHANNELS EQU 8 NUMBEROFI/OCHANNELSSUPPORTED FIN NSPCHANNELS EQU 2 #OFSPECIALPURPOSEIOCBS(FORRENAMEANDDELETE) IOCBSP1N EQU NCHANNELS "CHANNEL"NUMBEROF1STSPECIALPURPOSEIOCB IOCBSP2N EQU IOCBSP1N+1 "CHANNEL"NUMBEROF2NDSPECIALPURPOSEIOCB ESTIOPKSIZE EQU $B00 ESTIMATEDI/OPACKAGESIZE EST:RUNST EQU $C0 ESTIMATEDSIZEOFRUNSTARTCODE OUCH EQU 25 ATTEMPTTOPOKEI/OORRUNTIMEPACKAGE * * IOCBEXTENSIONSFORI/OPACKAGE * IOSDCOL EQU IOCBLN COLUMNCOUNTERFORTHISIOCB IOSDEOF EQU IOSDCOL+1 ENDOFFILEHITFLAG IOSDWSPC EQU IOSDEOF+1 COMPRESSEDSPACEWRITECOUNTER IOSDRSPC EQU IOSDWSPC+1 COMPRESSEDSPACEREADCOUNTER IOSDPTR EQU IOSDRSPC+1 POINTERTONEXTBUFFERBYTE IOSDMF EQU IOSDPTR+2 "THISBUFFERMODIFIED"FLAG IOCBXSIZE EQU IOSDMF+1 SIZEOFEXTENDEDIOCB'S ****************************************************************************** SIZEIOPACK SET ESTIOPKSIZE+(NCHANNELS+NSPCHANNELS)*(IOCBXSIZE+2) SIZEIOPACK SET SIZEIOPACK+(NCHANNELS+NSPCHANNELS)*BUFFERSIZE SIZEIOPACK SET SIZEIOPACK+$10 FOR"JMPRUNSTART",EXBUGSTACKATEND IFUND MEMSIZE MEMSIZE EQU 32 FIN K EQU 1024 =#BYTESIN"1K"OFMEMORY IOPKGBASE EQU MEMSIZE*K-SIZEIOPACK PAGE * IFUND VSDEPTH VSDEPTH EQU 50 VALUESTACKDEPTH FIN IFUND FNDEPTH FNDEPTH EQU 20 MAXNUMBEROFNESTEDFOR-NEXTLOOPS FIN IFUND GSBDEPTH GSBDEPTH EQU 10 GOSUB/RETURNSTACKSIZE FIN IFUND CATSIZ CATSIZ EQU 132 MAXSIZEOFCONCATENATEDSTRINGS FIN STKESZ EQU 6 6BYTESPERVALUE(MACHINESTACKENTRY FSTKESZ EQU 16 16BYTESPERNEXTEDFOR-NEXTLOOP GSTKESZ EQU 4 2BYTEENTRIESFORTHEGOSUBSTACK IFUND RTPVERSION RTPVERSION EQU $13 FIN PAGE ---IOPACKAGEENTRYPOINTS--- ENTRYPOINTEQU CODE PROGRAMSTARTUPENTRYPOINT IOERROR EQU ENTRYPOINT+3 ENTRYPOINTINRTPFORIOERRORHANDLING ORG ENTRYPOINT+6 FDB IOPKGBASE JMP OPEN JMP CLOSE JMP CREATE JMP DELETE JMP RENAME JMP CHAIN JMP RASCII JMP RBIN JMP WASCII JMP WBIN JMP POSITION JMP EXIT JMP EOF JMP GETCOL JMP RESET JMP DATE JMP TIME FDB STACK FDB STACKM STACKMAX FDB SWBLOCK JMP DEBUG DEBUGENTRYPOINT(BASIC) DBGRET RTS DEBUGRETURNPOINT JMP ERROR ERRORPROCESSORENTRYPOINT(BASIC) JMP LINE ESCAPEENTRYPOINT(BASIC) FDB CATBUF CATENATIONBUFFER(BASIC) FDB CATSIZ CATINATIONBUFFERMAXSIZE(BASIC) FDB FSTACK FOR-STACK(BASIC) FCB FNDEPTH FOR-STACKMAXENTRYCOUNT(BASIC) FDB GOSUBSTK FDB GOSUBMAX DEBUG EQU MAID$ MDOSDEBUGGER PAGE ---RUNTIMEINITIALIZATIONROUTINE--- ORG IOPKGBASE-EST:RUNST ACTUAL:RUNST SET * * *RUNSTART-STARTHEREFORRUNTIMEPACKAGE * THISCODEREADSFILENAMEINCOMMANDBUFFERINTO  * SETSSWITCHES(IFANY)ANDTHEN * CHAINSTOTHEPROGRAMSPECIFIED. * *INPUTLINEFORMAT: * * RUNFILENAME[;[]] * RUNSTART EQU * ORG MEMSIZE*K-$10 PUTJUMPTOHEREASLAST$10BYTESOFMEMORY JMP RUNSTART ORG RUNSTART LDS #STACK WEBETTERUSESOMETHINGREASONABLE LDX #CBUFF$ COPYCOMMANDLINETOCATBUFFORSAFEKEEPING STX MOVEPACKET (FROMADDRESS) LDX #CATBUF+10 (TOADDRESS;"10"ISFOR"#CN;"... STX MOVEPACKET+2 THATISMOVEDINTOCATBUFBYRESET) LDAB #CATSIZ+4-10-1 #BYTESTOCOPY LDX #MOVEPACKET DON'TFORGETTHIS,ORTHINGSWILLGOTOHELL SCALL,.MOVE MOVEIT,BUDDY! LDX MOVEPACKET+2 PLACETOMOVENEXTBYTETO LDAA #CR JUSTINCASEWECHOPPEDTHELINEOFF STAA 0,X (JES'DON'TRUSNOBODDANOHOW) JSR CODE WAKEUPTHERUNTIMEPACKAGE... FCB RTPVERSION (VERSION#)JUSTINCASECHAINGETSANERROR FCB $81 (STARTINLINEEXECUTION) LDAB #26 GETSIZEOFWSBUFFTOCLEARIT LDX #SWBLOCK+4 GETSTARTINGADDR SWCLR CLR 0,X CLEARALLSWITCHES INX DECB BNE SWCLR *NOW,GETFILENAME LDX #CATBUF+10 POINTERTOCOMMANDBUFFER RUNSKIP LDAA 0,X SCANUNTILWEHIT"RUN"COMMAND INX CMPA #SPACE BEQ RUNSKIP RUNSCAN EQU * LDAA 0,X SKIPOVER"RUN"WORD INX CMPA #CR HITENDOFLINE? BEQ RUNPARSE B/YES,GOCAUSEANERROR CMPA #SPACE FOUNDSPACETHATTERMINATES"RUN"? BNE RUNSCAN B/NO,KEEPLOOKING RUNPARSE DEX BACKPOINTERUPTOCHARACTERTHATTERMINATEDSCAN STX STRING THISISWHEREFILENAMESTARTS STX NAMEP SETUPFILENAMESCANPOINTER CLR COUNT =LENGTHOFFILENAME NRUNC LDX NAMEP GETNEXTFILENAMEBYTE LDAA 0,X INX STX NAMEP CMPA #CR ENDOFLINE? BEQ GOTNAME IFSO,GOTNAME CMPA #'; SWITCHESCOMINGUP? BEQ GETSW IFSO,GETTHEM INC COUNT OFFILENAMELENGTH BRA NRUNC * GETSW LDX NAMEP GETASWITCHBYTE LDAA 0,X INX STX NAMEP CMPA #CR DONE? BEQ GOTNAME IFSO,CHAIN CMPA #'Z LEGALSWITCH? BGT SWERR IFNOT,ERROR SUBA #'A-1 BLE SWERR ERRIFEST:RUNST ?RUNTIMEINITIALIZATIONROUTINETOOBIGFORESTIMATEDSIZE? FIN PAGE ---EXTERNALLYRECOGNIZEDSPACE--- * * SETTHEI/OPACKAGEADDRESS * ORG IOPKGBASE FDB EDITDATE PUTEDITDATEASFIRSTBYTE * * THISISTHECATENATIONBUFFER * CATBUF RMB CATSIZ+4 4OVERHEADBYTES * * THISISTHEFOR-NEXTSTACK * RMB FNDEPTH*FSTKESZ FSTACK EQU *-1 POINTSTOTHELASTBYTEOFFOR-NEXTSTACK * * THISISTHEGOSUBSTACK * GOSUBMAX RMB GSBDEPTH*GSTKESZ GOSUBSTK RMB 1 FORTHOSETEMPTEDTOUSE'LDSGOSUBSTK' * * THISISTHESWITCHBLOCKSTRING * FIRSTTWOBYTESAREMAXLENGTH * NEXTTWOBYTESARECURLENGTH * SWBLOCK FDB 26 FDB 26 RMB 26 * * THISISTHEVALUESTACK * RMB 25 SLOPFORDEBUGGERANDINTERRUPTS STACKM RMB VSDEPTH*STKESZ STACK RMB 1 FORPEOPLEWHOUSE'LDSSTACK' * PAGE  ; * * LINE--CHECKSYSTEMCONSOLEACIAFORLINECONTROLFLAGS * LINE CLRA BEOPTIMISTIC,NOBODYHITAKEY LDAB CNACI$ GETACIASTATUS BITB #%10000 BREAKKEYHIT? BNE LINEABORT B/YES,DOABORT RORB DIDDATAARRIVE? BCC LINERTS NO,JUSTEXIT LDAB CNACI$+1 YES,GETTHEDATA ANDB #$7F TODUMPPARITY CMPB #$2 ^B? BEQ LINEB CMPB #$7 ^G? BEQ LINEG CMPB #$13 ^S? BEQ LINES CMPB #$14 ^T? BEQ LINET CMPB #ESC BEQ LINEABORT LINERTS RTS LINEB LDAA #%100000 RTS LINEG LDAA #%1000 RTS LINES LDAA #%10000 RTS LINET LDAA #%1000000 RTS LINEABORT LDAA #%10000000 RTS PAGE * OPEN--XISFILENAME * AISLENGTH * BISCHANNEL# OPEN JSR FINDIOCB COMPUTEPOINTERTOIOCBFORCHANNEL JSR CHECKCLOSED ITBETTERBE... JSR PARSENAME ANDCOPYINTOTHEIOCB LDX IOCBPTR FORCHANNEL SCALL,.RESRV RESERVETHEDEVICESPECIFIED JSR CHECKIOCBSTATUS ANDBITCHIFSOMETHINGISWRONG! LDX IOCGDW,X GETPOINTERTODEVICEDRIVER LDAA CDBDDF,X GETDEVICEDESCRIPTORFLAGS BITA #DD$LOG LOGICALSECTORI/ODEVICE? BNE OPENUPDATE B/YES,OPENFORUPDATE BITA #DD$INP ANINPUTDEVICE? BNE OPENINPUT B/YES,OKTOOPEN JMP ERR:CANTOPENFILE NO,CAN'TOPENANON-INPUTDEVICE OPENINPUT EQU * LDAA #DT$NFF!DT$OPI!DT$CLS OPENDEVICEFORINPUTONLY BRA OPEN1 ASANON-FILEINPUTDEVICE OPENUPDATE EQU * LDAA #DT$SIO!DT$OPP!DT$CLS OPENDEVICEINFILEMODE,FORUPDATEINSECTORMODE OPEN1 LDX IOCBPTR RESTOREPOINTERTOI/OCONTROLBLOCK STAA IOCDTT,X SETTHETRANSFER/OPENTYPE LDAA #FD$FMA  SELECTASCIIRECORDFORMAT STAA IOCFDF,X CLR IOCFDF+1,X ORMDOSWON'TLIKEME,EVENTHOUGHITDOESN'TCARE LDAA IOCDBS,X SETUP"IOCDBE"TODELIMITBUFFER LDAB IOCDBS+1,X ADDB #(BUFFERSIZE-1)&$FF (IOCDBEPOINTSTOLASTBYTEOFBUFFER) ADCA #(BUFFERSIZE-1)/256 STAA IOCDBE,X STAB IOCDBE+1,X CLR IOCSBP,X USEDEFAULTALLOCATION... CLR IOCSBP+1,X ONNEWLYCREATEDFILES SCALL,.OPEN TOQUOTE,"SESAME.." JSR CHECKIOCBSTATUS ANDBITCHIFWEGOTANERROR CLR IOSDPTR,X FLAG"NOSECTORREADINYET" CLR IOSDPTR+1,X CLR IOSDMF,X FLAG"SECTORNOTMODIFIED" CLR IOSDRSPC,X ZEROTHECOMPRESSEDSPACEREADCOUNT CLR IOSDWSPC,X ZEROTHECOMPRESSEDSPACESWRITTENCOUNT LDAA #1 SET#SECTORSTOINITIALLYALLOCATEIFNEWDISKFILE STAA IOCSBP+1,X CLR IOCSBP,X LDAA IOCDBS,X NOWSETUPIOCDBE... LDAB IOCDBS+1,X SOIFFILEISIMMEDIATELYCLOSED... SUBB #1 ANDITISANOUTPUTDEVICE... SBCA #0 NODATAISWRITTENOUT STAA IOCDBE,X (I.E.,IOCDBE=IOCDBS-1) STAB IOCDBE+1,X LDAA IOCEOF,X SETMAXLOGICALSECTORTOEOF LDAB IOCEOF+1,X TURKEYMDOSTRUNCATEFLAG!! STAA IOCMLS,X STAB IOCMLS+1,X RTS OK,LET'SBOOGIEOUTOFHERE! PAGE * * CREATE--XISAFILENAME * AISLENGTHOFNAME * BISCHANNEL# * CREATE JSR FINDIOCB FORTHISCHANNELNUMBER JSR CHECKCLOSED ITBETTERBE! JSR PARSENAME SELECTDEFAULTS,ETC. LDX IOCBPTR FORTHISIOCB SCALL,.RESRV RESERVETHEDEVICEDRIVER JSR CHECKIOCBSTATUS ANDBITCHIFSOMETHINGWENTWRONG LDX IOCGDW,X LOOKATDEVICEDRIVER LDAA CDBDDF,X GETDEVICEDESCRIPTORFLAGS BITA #DD$LOG LOGICALSECTORI/ODEVICE? BNE CREATEUPDATE B/YES BITA #DD$OUT OUTPUTI/ODEVICE? BNE CREATEOUTPUT B/YES JMP ERR:CANTCREATEFILE CREATEOUTPUT EQU * LDAA #DT$NFF!DT$OPO!DT$CLS OPENFOROUTPUTONLY   BRA CREATE1 GOTRYIT.. CREATEUPDATE EQU * LDAA #DT$SIO!DT$OPU!DT$CLS OPENFORUPDATEONDISK CREATE1 EQU * BSR OPEN1 GOOPENTHEFILE LDAA #$FF ANDSETIOCMLSTO-1 STAA IOCMLS,X STAA IOCMLS+1,X RTS PAGE * * CLOSE--(B)CONTAINSCHANNELNUMBER * CLOSE JSR FINDIOCB FORDESIREDCHANNEL JSR CHECKOPEN IHOPE,IHOPE... LDAA IOCDTT,X GETOPENMODE BITA #DT$SIO SECTORI/OMODE(I.E.,DISK?) BEQ CLOSE1 B/NO,JUSTGOCLOSETHEFILE JSR DUMPCOMPRESSEDSPACES GETRIDOFANYCOMPRESSEDSPACESWRITTENTOFILE JSR DUMPSECTOR YES,GETRIDOFSECTORIFMODIFIED LDAA IOCDTT,X YES,SET"TRUNCATE"FLAG ORAA #DT$TRU STAA IOCDTT,X THENCLOSEFILE CLOSE1 SCALL,.CLOSE NOWCLOSETHEFILE JSR CHECKIOCBSTATUS ANDBITCHIFAPROBLEMOCCURRED SCALL,.RELES RELEASETHEDEVICEDRIVER JSR CHECKIOCBSTATUS YOUGUESS.. RTS PAGE * * POSITION--(X)POINTSTO4BYTESOFPOSITIONINGINFORMATION * (B)SELECTSCHANNELNUMBER * POSITION EQU * JSR FINDIOCB FORTHISCHANNEL JSR CHECKOPEN IFNOT,DIE LDAA IOCDTT,X LOOKATI/OTRANSFERTYPE BITA #DT$SIO DISKI/O? BEQ J1ERR:ILLDVOP B/NO,ILLEGALDEVICEOPERATION JSR DUMPCOMPRESSEDSPACES IFANYWEREOUTPUT JSR DUMPSECTOR YES,ITHINKWECANDOIT.. LDX STRING GETPOINTERTODESIREDBYTEPOSITION LDAA 0,X TOP8BITSMUSTBEZERO! BNE J1ERR:POSITIONERR B/CAN'TPOSITIONTOTHERE! LDAA 1,X COMPUTEDESIREDLOGICALSECTOR# BMI J1ERR:POSITIONERR (MSBWILLBELOST,BETTERNOTBEZERO!) LDAB 2,X ASL 3,X LEAVINGBYTEDISPLACEMENTDOUBLED ROLB (A,B):=DESIREDLSN ROLA BMI J1ERR:POSITIONERR B/>32767SECTORSOF128BYTES!!? LDX IOCBPTR SETUPFORREAD STAA IOCLSN,X STAB IOCLSN+1,X JSR READSECTOR GOGETTHEDESIREDSECTOR LDX STRING GETDISPLACEMENTINTOSECTOR LDAB 3,X LSRB TOUNDOTHEDOUBLEWEDIDPREVIOUSLY CLRA (A,B)=16BITDISPLACEMENTINTOSECTOR LDX IOCBPTR GRABPOINTERTOIOCBAGAIN ADDB IOCSBS+1,X COMPUTEPOINTERTOBYTE ADCA IOCSBS,X STAA IOSDPTR,X UPDATESECTORSCANPOINTER STAB IOSDPTR+1,X CLR IOSDCOL,X ZAPTHECOLUMNCOUNTER CLR IOSDRSPC,X ANDTHECOMPRESSEDSPACEREADCOUNT RTS ANDEXIT J1ERR:ILLDVOP EQU * JMP ERR:ILLDVOP J1ERR:POSITIONERR EQU * JMP ERR:POSITIONERR PAGE * RASCII--READASCIIBYTEFROMFILE * BCONTAINSCHANNELNUMBER * RASCII JSR FINDIOCB HOHUM... JSR CHECKOPEN CAN'TREADFROMACLOSEDONE,YAKNOW JSR DUMPCOMPRESSEDSPACES SIGH... INC IOSDCOL,X ASSUMEWE'LLREADAPRINTINGCHARACTER LDAA IOSDEOF,X HITEOFRECENTLY? BNE RASCII5 B/HITEOFRECENTLY LDAA IOSDRSPC,X STILLEXPANDINGACOMPRESSEDSSPACE? BNE RASCII3 B/YES,OUTPUTANOTHERSPACE RASCII1 JSR RBYTE NO,GETNEXTBYTEFROMFILE BCC RASCII4 B/OOPS,WEHITEOFANDHURTOURWIDDLENOSEY TSTA STRIPNULLS BEQ RASCII1 **POOF** BMI RASCII2 (B/COMPRESSEDSPACESENCOUNTERED) CMPA #LF STRIPLF'S BEQ RASCII1 **POOF** CMPA #RUBOUT THESETOO,GETTHEHEAVE BEQ RASCII1 CMPA #DC4 ANDALLTHEDEVICECONTROLS BHI RASCIICK B/NOTADEVICECONTROL,RETURNIT CMPA #DC1-1 BHI RASCII1 B/ITSDC1,DC2,DC3ORDC4...BYE! RASCIICK EQU * CMPA #SPACE-1 PRINTINGCHARACTER? BLS RASCII6 NO,ZAPTHECOLUMNCOUNTONWAYOUT RTS RASCII2 ANDA #$7F MASKOFFTHE"COMPRESSEDSPACES"FLAG STAA IOSDRSPC,X STOREINIOCB RASCII3 DEC IOSDRS PC,X REMEMBERNUMBEROFSPACESEXPANDEDTO LDAA #$20 GETASPACECODELIKEAGOODLITTLEBOY RTS ANDGOHOME RASCII4 BSR SETEOFHIT REMEMBERTHATWEHITEOF RASCII5 LDAA #CR RETURNTHISWHENWEHITEOF RASCII6 CLR IOSDCOL,X RESETCOLUMNCOUNTTOZERO RTS PAGE * * RBIN--READBINARY * (B)CONTAINSCHANNELNUMBER * RBIN JSR FINDIOCB ORWECAN'TDOANYTHING JSR CHECKOPEN CLR IOSDRSPC,X ZAPTHEEXPANDEDSPACECOUNTER JSR DUMPCOMPRESSEDSPACES INCASESOMEBODYJUSTFINISHEDWRITINGTHEM LDAA IOSDEOF,X EOFHITALREADY? BNE RBIN1 B/YES,JUSTQUIT JSR RBYTE NO,READABYTEFROMTHEFILE BCC RBIN1 B/EOFHIT,NOMOREDATAINFILE RTS RETURNWITHDATABYTE RBIN1 BSR SETEOFHIT REMEMBERWHAHOPPEN CLRA RETURNAZERO RTS * * SETEOF--REMEMBERSTHATEOFGOTHIT * SETEOFHIT EQU * LDAA #1 "TRUE" STAA IOSDEOF,X RTS PAGE * * RBYTE--READNEXTBYTEFROMFILE"IOCBPTR" * RETURNSCARRYCLEARIFEOFHIT * RESTURNSCARRYSETIFEOFNOTHIT,AND * 8BITBYTERETURNEDIN(A) * PARITYISNOTSTRIPPEDORTOUCHED * RETURNSIOCBPTRIN(X) * RBYTE LDAA IOCDTT,X GETTRANSFERTYPE TAB (SAVEIT) ANDA #3 MASKTOGETOPENMODE CMPA #DT$OPO INPUTTRANSFEROK? BEQ J2ERR:ILLDVOP OPENEDONLYFOROUTPUT??? BITB #DT$SIO DISKI/ODEVICE? BEQ RBYTED B/NO,DOINPUTFROMDEVICE LDX IOSDPTR,X YES,READFROMDISK BNE RBYTE2 B/SECTORALREADYREADIN JSR READSECTOR READINTHESECTOR BCS RBYTE1 B/NOERROR RBYTEEOF EQU * CLC FLAG"EOFHIT" RTS ANDEXIT RBYTE1 LDX IOSDPTR,X GETPOINTERTO1STBYTE RBYTE2 LDAA 0,X GETABYTEFROMTHEBUFFER LDX IOCBPTR NOWUPDATETHEBUFFERPOINTER INC IOSDPTR+1,X BNE RBYTE3 INC IOSDPTR,X RBYTE3 JSR CHECKFORLASTBYTE WASTHISLASTBYTEOFBUFFER? RBYTEOK SEC SAY"WEGOTABYTE" RTS J2ERR:ILLDVOP EQU * JMP ERR:ILLDVOP PAGE RBYTED LDX IOSDPTR,X READBYTEFROMNON-DISKDEVICE BNE RBYTE4 B/ALREADYREADBUFFERFULFROMDEVICE LDX IOCBPTR GETPOINTERTOIOCB LDX IOCGDW,X GETPOINTERTODEVICEDRIVER LDAB CDBDDF,X GETDEVICEDESCRIPTORBITS LDX IOCBPTR WE'LLNEEDTHISAGAIN BITB #DD$CNS THECONSOLEDEVICE? BEQ RBYTE8 B/NO,DOUNIFIEDI/O LDX IOCDBS,X YES,USE.KEYINCOMMANDINSTEAD LDAB #BUFFERSIZE #BYTESTOREAD,MAX SCALL,.KEYIN INPUTALINEFROMCONSOLEWITHEDITING LDX IOCBPTR GETIOCBPOINTERAGAIN CLRA SETUPIOCDBEASTHOUGHWEDIDA.GETRC ADDB IOCDBS+1,X (B)=#BYTES-1INKEYINBUFFER ADCA IOCDBS,X (A,B)NOWPOINTTOINKEYINBUFFER STAA IOCDBE,X STAB IOCDBE+1,X BRA RBYTE5 GOSETUPBUFFERSCANPOINTERS RBYTE8 LDAA IOCDBS,X SETUPIOCDBE=POINTERTOLASTBYTEINBUFFER LDAB IOCDBS+1,X (THISPREVENTSRUNNINGOFFFENDOFBUFFER) ADDB #(BUFFERSIZE-1)&$FF ADCA #(BUFFERSIZE-1)/256 STAA IOCDBE,X STAB IOCDBE+1,X SCALL,.GETRC NO,READASCIIBUFFERLOADFROMDEVICE LDX IOCBPTR DID.GETRCSUCCEED? LDAA IOCSTA,X BEQ RBYTE5 B/YES,GRABBUFFERBYTE CMPA #I$BUFO IFBUFFEROVERFLOWED... BEQ RBYTE5 YOUJUSTLOSESOMESTUFF,TOOBAD! CMPA #I$EOF BEQ RBYTEEOF B/HITEOF JMP MDOSERROR B/OTHERKINDOFERROR RBYTE5 LDAA IOCDBS,X SETUPBUFFERSCANPOINTER STAA IOSDPTR,X MOTOROLASEZBUFFERALWAYSHASCRINIT! LDAA IOCDBS+1,X STAA IOSDPTR+1,X LDX IOSDPTR,X GETBUFFERSCANPOINTER RBYTE4 LDAA 0,X FET CHBUFFERBYTE LDX IOCBPTR UPDATEBUFFERSCANPOINTER IF BUFFERSIZE>/256 ?RBYTECHECKERROR? ELSE LDAB IOSDPTR+1,X HITENDOFBUFFERYET? CMPB IOCDBE+1,X BEQ RBYTE7 B/YES,GOFLAG"BUFFERISEMPTY" FIN INC IOSDPTR+1,X NOWBUMPBUFFERSCANPOINTER BNE RBYTE6 INC IOSDPTR,X RBYTE6 CMPA #CR ENDOFBUFFER? BNE RBYTEOK B/NOPE RBYTE7 CLR IOSDPTR,X YES,ZEROTHESCANPOINTER... CLR IOSDPTR+1,X TOFLAG"NEEDANOTHERBUFFERFULFROMDEVICE" SEC FLAG"GOTDATABYTE" RTS ANDEXIT PAGE * WBIN--WRITEBINARY(A) * (B)CONTAINSCHANNELNUMBER * WBIN JSR FINDIOCB SHOULDBEOBVIOUSBYNOW JSR CHECKOPEN BSR DUMPCOMPRESSEDSPACES COPYCOMPRESSEDSPACETOFILE CLR IOSDCOL,X ZAPTHECOLUMNCOUNTER LDAA COUNT (THEDATABYTETOWRITE)  JSR WBYTE GOWRITEBYTETOFILE RTS * * DUMPCOMPRESSEDSPACES--COPIESCOMPRESSEDSPACESTODISKFILE * DUMPCOMPRESSEDSPACES EQU * PSHA SAVE(A),ITMAYBESOMEBODY'SMOTHER LDX IOCBPTR JUSTTOBESAFE LDAA IOSDWSPC,X ANYCOMPRESSEDSPACES? BEQ DUMP1 B/NO,GETOUT! ORAA #$80 TAGASCOMPRESSEDSPACE JSR WBYTE GETRIDOFITTOTHEFILE CLR IOSDWSPC,X FORGETTHECOMPRESSEDSPACEFLAG DUMP1 PULA GETSOMEBODY'SMOTHERBACK RTS ANDEXIT PAGE * * WASCII--WRITEASCII(A) * (B)CONTAINSCHANNELNUMBER * WASCII JSR FINDIOCB JSR CHECKOPEN INC IOSDCOL,X ASSUMEAPRINTINGCHARACTER,BUMPCOLCOUNT LDAA COUNT (THEDATABYTETOWRITE) CMPA #SPACE ABLANK? BNE WASCII2 NO,GOWRITETOFILEIFNOTCR LDAB IOCDTT,X DISKI/ODEVICE? BITB #DT$SIO ...? BEQ WASCII2 B/NO,DON'TCOMPRESSSPACES INC IOSDWSPC,X YETANOTHERSPACEFOUND,COMPRESSIT LDAB IOSDWSPC,X GETCOMPRESSEDSPACECOUNT CMPB #$7F HITMAXCOUNT? BNE WASCII1 B/NO LDAA #$FF YES,WRITEOUTMAXCOMPRESSEDBLANKCODE CLR IOSDWSPC,X RESETTHECOMPRESSEDBLANKSFLAG WASCII3 JSR WBYTE COPY(A)TOFILE WASCII1 RTS ALLDONE WASCII2 BSR DUMPCOMPRESSEDSPACES INCASETHEREAREANY CMPA #SPACE-1 WASITREALLYAPRINTINGCHARACTER? BHI WASCII3 YES,LEAVECOLUMNCOUNTERBUMPED CLR IOSDCOL,X CONTROLCHARACTER,ZEROTHECOLUMNCOUNT BRA WASCII3 ANDGOOUTPUTTHECHARACTERTOTHEFILE PAGE * * WBYTE--WRITE(A)TOFILE"IOCBPTR" * (A)COPIEDTOFILEASIS * WBYTE LDAB IOCDTT,X GETOPENMODE  ANDB #3 (MASKOFFTHEOTHERTRASH) CMPB #DT$OPI INPUTONLYMODE? BEQ WBCRTQ B/CAN'TDOOUTPUTTOINPUTONLYDEVICE! LDAB IOCDTT,X DISKI/O? BITB #DT$SIO ...? BEQ WBYTED NO,GOWRITEBYTETODEVICE LDX IOSDPTR,X YES,AREWEFILLINGABUFFER? BNE WBYTE1 B/YES,GOINSERTBYTEINTOBUFFER PSHA NO,SAVETHEBYTETOWRITE JSR READSECTOR READINNEXTDISKSECTOROFFILE PULA GETOURDATABYTEBACK WBYTE1 LDX IOCBPTR CHECKFORBUFFERFULL CLR IOSDMF,X SETTHE"BUFFERMODIFIED"FLAG INC IOSDMF,X INC IOSDPTR+1,X BUMPTHESECTORFILLPOINTER BNE WBYTE3 INC IOSDPTR,X WBYTE3 LDX IOSDPTR,X POKEBYTEINTOSECTOR DEX (DUETOPRE-INCREMENTWEJUSTDID) STAA 0,X STUFFIT! JSR CHECKFORLASTBYTE SEEIFBUFFERISFILLED RTS  ANDEXIT J3ERR:ILLDVOP EQU * JMP ERR:ILLDVOP PAGE WBCRTQ EQU * ILLEGALWRITE,PERHAPSTOCONSOLE? LDX IOCGDW,X GETPOINTERTODEVICEDRIVER LDAB CDBDDF,X GETDEVICEDESCRIPTORBITS BITB #DD$CNS OUTPUTTOCONSOLEDEVICE? BEQ J3ERR:ILLDVOP  B/NOTSYSTEMCONSOLE,TOOBAD! STAA CONSOLECHAR YES,SETUP1BYTEOUTPUTSTRING LDX #CONSOLECHAR ANDMAKEMDOSCOPYBYTETOCONSOLE SCALL,.DSPLZ "WHICHMAKESITHIGHLY.DSPLZED" RTS WBYTED LDX IOCBPTR WRITETODEVICE,SOMEBODYSTEPPEDONTHIS  LDX IOSDPTR,X WRITEBYTETODEVICEBUFFER BNE WBYTE4 B/BUFFERISBEINGFILLED WBYTE5 LDX IOCBPTR BUFFERISEMPTY LDAB IOCDBS,X SETUPBUFFERFILLPOINTER STAB IOSDPTR,X LDAB IOCDBS+1,X STAB IOSDPTR+1,X LDX IOSDPTR,X PUTTHEBYTEINTOTHEBUFFER WBYTE4 STAA 0,X LDX IOCBPTR KEEPIOCDBEUPTODATE LDAB IOSDPTR,X =POINTERTOLASTBYTEPUTINTOBUFFER STAB IOCDBE,X LDAB IOSDPTR+1,X STAB IOCDBE+1,X CMPA #CR TIMETODUMPTHEBUFFER? BEQ WBYTEW ITSACR,TIMETODUMPTHEBUFFER IF BUFFERSIZE>/256 ?WBYTETESTERROR? ELSE SUBB IOCDBS+1,X ISBUFFERFULL? CMPB #BUFFERSIZE-1 (DOESIOSDPTR=IOCDBS+BUFFERSIZE-1?) BEQ WBYTEW B/YES,DUMPIT***NOW*** FIN INC IOSDPTR+1,X NO,BUMPBUFFERFILLPOINTER BNE WBYTEX INC IOSDPTR,X RTS  WBYTEW LDX IOCBPTR TOBESAFE SCALL,.PUTRC PUTTHERECORDTOTHEDEVICE JSR CHECKIOCBSTATUS ANDBITCHIFAPROBLEMOCCURRED CLR IOSDPTR,X FLAG"EMPTYBUFFER" CLR IOSDPTR+1,X LDAA IOCDBS,X NOWSETUPIOCDBE... LDAB IOCDBS+1,X SOBUFFERAPPEARSTOBEEMPTY SUBB #1 (I.E.,IOCDBE=IOCDBS-1) SBCA #0 STAA IOCDBE,X STAB IOCDBE+1,X WBYTEX RTS PAGE * READSECTOR--READINSECTORSPECIFIEDBYIOCLSN * RESETSIOSDEOF;SETSITIFI$EOFERROROCCURS * ALSOSETSUPBUFFERSCANPOINTERS * IFI$EOFOCCURS,ZEROSTHEBUFFERCONTENTS * READSECTOR EQU * LDX IOCBPTR GETIOCBPOINTER LDAA IOCSBS,X SETUPBUFFERSCANPOINTER  STAA IOSDPTR,X LDAA IOCSBS+1,X STAA IOSDPTR+1,X CLR IOSDEOF,X ASSUMENOEOFWILLBEHIT LDAA IOCMLS,X ISIOCLSN>IOCMLS? BMI READSECTOREOF B/IOCMLS=-1 LDAB IOCMLS+1,X (ISTHISTHEFIRSTTIMETHISSECTORHASBEENREAD?) SUBB IOCLSN+1,X (0>IOCMLS-IOCLSN?) SBCA IOCLSN,X BCS READSECTOREOF B/YES,ZEROTHESECTORINSTEADOFUSINGDISKGARBAGE SCALL,.GETLS READINSECTOR"IOCLSN" LDX IOCBPTR CHECKTOSEEIFREADOFFENDOFFILE LDAA IOCSTA,X GETSTATUSOFREAD BEQ READSECTOR1 B/NOERRORS CMPA #I$EOF ISLOGICALSECTORNUMBEROUTOFRANGE? BNE J1MDOSERROR B/NOTANERRORIUNDERSTAND READSECTOREOF EQU * INC IOSDEOF,X WEHITENDOFFILE,REMEMBERTHAT INC IOCLSN+1,X BUMPTHIS... BNE READSECTOR2 SOITLOOKSLIKEWEDID...  INC IOCLSN,X SUCCESSFUL".GETLS" READSECTOR2 EQU * LDX IOCSBS,X YES,ZEROTHEBUFFER LDAB #BUFFERSIZE NUMBEROFBYTESTOZERO CLRA WHATTOSTOREINTOBUFFER SCALL,.STCHR ZEROTHEBUFFEROUT LDX IOCBPTR BENICETOWHOEVERCALLEDUS CLC TELLHIMWEHITEOF RTS READSECTOR1 EQU * SEC SAY"NOEOFHIT" RTS PAGE * CHECKFORLASTBYTE--CHECKTOSEEIFWEJUSTFILLEDLASTBYTEOFSECTOR * IFSO,WRITESECTORTODISKIFMODIFIED * OTHERWISE,DONADA * CHECKFORLASTBYTE EQU * LDX IOCBPTR THISCANONLYHELP LDAB IOSDPTR+1,X (DOESBUFFERPOINTERPOINTTOENDOFBUFFER?) SEC BECAUSEENDOFBUFFERPOINTERPOINTSTOLASTBYTE SBCB IOCSBE+1,X COMPUTEBUFFEREND-BUFFERPOINTER LDAB IOSDPTR,X SBCB IOCSBE,X BCS CHECKFORLASTRTS B/NO,GETOUT! * * DUMPSECTOR--WRITESECTORBACKTODISKIFMODIFIED * DOESNOTCHECKFORCOMPRESSEDBLANKS * DUMPSECTOR EQU * LDX  IOCBPTR NEVERHURTSTOBESAFE LDAB IOSDMF,X WASTHISSECTORMODIFIED? BEQ DUMPSECTORXIT B/NO,GETOUT PSHA JUSTTOBENICE TST IOCLSN+1,X DECREMENTLOGICALSECTORNUMBER BNE DUMPSECTOR1 (BECAUSEWHENWEGOTTHESECTOR...) DEC IOCLSN,X (.GETLSBUMPEDTHESECTORNUMBER) DUMPSECTOR1 EQU * DEC IOCLSN+1,X SCALL,.PUTLS WRITESECTORTODISK JSR CHECKIOCBSTATUS ANDBITCHIFAPROBLEMOCCURRED ************************************************************* *********MDOS2.0,3.0BUGFIX******************************* LDAA IOCMLS,X UPDATEIOCEOFIFIOCMLS>IOCEOF LDAB IOCMLS+1,X CMPA IOCEOF,X BNE *+4 CMPB IOCEOF+1,X BCS *+6 STAA IOCEOF,X STAB IOCEOF+1,X ************************************************************** PULA RESTORE(A) CLR IOSDMF,X MARK"SECTORNOTMODIFIED" DUMPSECTORXIT EQU * CLR IOSDPTR,X FLAG"NOSECTORINBUFFER" CLR IOSDPTR+1,X CHECKFORLASTRTS EQU * RTS J1MDOSERROR EQU * JMP MDOSERROR PAGE * DELETE--(X)POINTSTONAME * (A)ISLENGTH * DELETE LDAB #IOCBSP1N SAVEPARAMSANDGET... JSR FINDSPIOCB SPECIALPURPOSE(RESERVED)IOCBADDRESS JSR PARSENAME LDX IOCBPTR SCALL,.RESRV RESERVE,OPEN,TAG"DELETE"ANDCLOSEFILE JSR CHECKIOCBSTATUS LDX IOCGDW,X GETPTRTODEVICEDESCIPTORFLAGS LDAA CDBDDF,X LOGICALSECTORI/OOK? BITA #DD$LOG (ISITADISK?) BEQ J1ERR:CANTDELETE NO,CAN'TDELETEADEVICE LDAA #DT$SIO!DT$OPP!DT$CLS YES,OPENFOROUTPUTASSECTOREDDEVICE LDX IOCBPTR GETPOINTERTOIOCBAGAIN STAA IOCDTT,X SCALL,.OPEN OPENTHEFILE JSR CHECKIOCBSTATUS LDAA IOCDTT,X ALLISOK,SET"TRUNCATE"FLAG ORAA #DT$TRU STAA IOCDTT,X LDAA #$FF SETMAXLOGICALSECTOR=-1 STAA IOCMLS,X (JUSTLIKEMDOSMANUALSEZ) STAA IOCMLS+1,X SCALL,.CLOSE CLOSE(ANDDELETE)THEFILE JSR CHECKIOCBSTATUS RTS ALLDONE. J1ERR:CANTDELETE EQU * JMP ERR:CANTDELETE PAGE * * RENAME--RENAMEFILE(X,A)TO(TOS-1,TOS) * RENAME LDAB #IOCBSP1N USE1STGENERALPURPOSEIOCB JSR FINDSPIOCB CHEAPTRICK JSR PARSENAME DON'TCAREIFOPENORCLOSED LDX IOCGDW+IOCBSP1 RENAMINGAFILEONDISKDEVICE? CPX #'D*256+'K BNE J1ERR:CANTRENAME NO,CAN'TRENAMEAPERIPHERAL TSX GETNEWNAMEPARAMETERS LDAA 0,X GETNEWFILENAMELENGTH LDX 1,X ANDPOINTERTONAME INS POPPARAMETERSOFFTHESTACK INS INS LDAB #IOCBSP2N GET2NDSPIOCBADDRESS JSR FINDSPIOCB ANDSAVEPARAMETERS JSR PARSENAME COLLECTNEWFILENAME LDX IOCGDW+IOCBSP1 CHECKCOMPATIBILITYOFFILEID'S CPX IOCGDW+IOCBSP2 RENAMEFILETOSAMEDEVICE? BNE J1ERR:CANTRENAME  DEVICESDON'TMATCH! LDAA IOCLUN+IOCBSP1 CHECKLOGICALUNITNUMBERMATCH CMPA IOCLUN+IOCBSP2 BNE J1ERR:CANTRENAME B/LOGICALUNIT#SDON'TMATCH LDAB #1 "CHANGENAMEONLY"(SEE.CHANGWRITEUP) LDX #RENAMEPACKET POINTERTOOLDNAME,NEWNAME SCALL,.CHANG CHANGETHEFILENAMES TSTB CHECKRESULTS BNE J1ERR:CANTRENAME SOMETHINGWENTWRONG,YOULOSE! RTS ALLDONE! RENAMEPACKET EQU * FDB IOCLUN+IOCBSP1 RENAMEFROM... FDB IOCLUN+IOCBSP2 RENAMETO... J1ERR:CANTRENAME EQU * JMP ERR:CANTRENAME PAGE * * EXIT$--CLOSEALLTHEFILESANDQUIT * EXIT BSR EXITS CAUSECHAINDOESTHISTOO SCALL,.MDENT AND"ENTERMDOS" EXITS LDAB #NCHANNELS-1 GETNUMBEROFCHANNELSTOCLOSE EXITL JSR FINDIOCB GETIOCBADDRESS LDAA IOCDTT,X ISTHISCHA T,HUH? EXIT1 DEC CHANNEL DOWNCOUNT#CHANNELSPROCESSED LDAB CHANNEL BECAUSEFINDIOCBWANTSITIN(B) BPL EXITL B/HAVEN'TPROCESSEDALLTHECHANNELSYET RTS * PAGE ---CHAIN--- * * CHAINTHEMOTHER * CHAIN PSHA REMEMBERTHESTRINGLENGTH STX STRING ANDTHEFILENAME LDAA STRING ONTHESTACK LDAB STRING+1 PSHB PSHA BSR EXITS JSR RESET0 OPENCHANNEL0TOTHECONSOLEAGAIN TSX RESTOREFILENAMEANDLENGTH LDX 0,X INS INS PULA LDAB #1 JSR OPEN LDX #0 STX LOADADDR * * HEREWEGO... * LOAD EQU * LDAB #1 GETCH# JSR EOF EOF? TSTA BNE LOADE ERRIFSO LDAB #1 LOADCH# JSR RASCII READACH CMPA #'S LOOKFORALEADING'S'CODE BNE LOAD THISWASN'TIT,IGNOREIT LDAB #1 JSR RASCII CMPA #'9 DONE? BEQ LOADX B/YES CMPA #'1 DATABLOCK? BNE LOAD B/NO,IGNORE CLR CHECKSUM BSR LBYTE GETBYTECOUNT+2(FORADDRESS) SUBA #2 STAA LOOPCT SAVE#OFBYTESTOREAD BSR LBYTE GETADDRESSHIGHBYTE STAA LOADPTR BSR LBYTE STAA LOADPTR+1 LDX LOADADDR BNE LOAD1 LDX LOADPTR SAVEADDRESSOFFIRSTBYTE(STARTADDRESS) STX LOADADDR LOAD1 BSR LBYTE GETDATABYTE DEC LOOPCT ALLDATABYTESLOADED? BEQ LOADC YES,GOCHECKCHECKSUM LDAB LOADPTR SEEIFHE'STRYINGTOLOADOVERUS CMPB #IOPKGBASE/$100 COMPAREHIGHERBYTES BHI LOADPOKE ERRORIFPOKINGTHEIOPACKAGE BNE AOK IF?2 ' !!?&?39~&b&&l ?'~%? $~% '& 'rS&%0'ҁ1'9&_6 ''&g%O*%%G&'&g%;)%*%) "29'1'&g%*$%%""z&&- 9 '~&b 9"JƁ~&: &) && ~%*"yƃ '&g%Ԗ*C%&2 2  29 '9 7/+ݽ&%+&,,Z&ɗ121/]9?#? 'J'J' J'!?!? ? ??_? ]'+&oo&&l&l1 &%&Z&&96hiJ&29A% 62% 0%62%9676&Ӷ&&?%2329?8 0203%'% ' '%?''~$}&&~$~!%&h';&j&h?*|&}&'&' &&-~$\&SA0 '&''&''?'' ? ?}&&~$|&~!}&'~!>&&'#'' ''~$'#&'#''$''&''' O%Y'#&&`&%&&b& %+ &\' 'N?)'N&ZX&l?''''~ '#&'~$}&&/&' O%Y&`&&?/%&%&&?/$& }&&A&'#ƀ'#'~$&l&'''&& }&'~$|& |&&&-% 'h;' % 'XW&|&% '_'% -~$\ ]' %?+&h&h'y%&j&&?/$~$?$&?/%&& }&&B}&&=}&&8'&h'V&j&h?''_''b'V? &h? &hY'ƀ?#?%'&h';&j&h ?&''H&&~#'1?'~$?'}'N&}'O'&'N'O }&''D'B'%%?|&&&,%%x%O' ?' &?&?'~$'1?& ޽$?&&&?-&h?$&&&h?&h&'N&h'P&'R'1?'~$?&6' ''F&';{$z' &2' #' ' ? $?2%x' O%Y&`&&^ ' ' ?' &]?''&'&?.' '_x' IY'B'C%%O' ?'~$'+')')')'N'N' ''&'N'R'S?/$ '1?&Ƚ%')'-'.?/$ '1?&' ?&?&|&&&,~#'1O%Y&&&&&&&&'1%Y~#? $?? ?'  '    ' ' ' $'2&'<''2'2'1$9%?''_? %?''_? 9&v'. %M%M?&u'J%N%N$|%M&x%M%N?)%911~$? $$?96&&2 &&M&?9?9'%SA'0'DK'%?' ? $?' ?'~$?&9}'& ''?/$'1?'~$}'C&z'Bz'C'P'?''N'9 1DK0 %&g3DK0 SA%&gXXXXXXXX.XX:X EXISTS. OVERWRITE? ]'+'oo''l&l'%'ŪZ&'9A% 62% 0%62%96hiJ&29}DAdx ~!z~;Sn$~q~rI~r~u~u@~u~r~r~s~s~rl~u~vw~v~v~v~vqzpNp~9~w~q{n&opoCOPYRIGHT (C) 1976 TERRILL M. MOORE ; 22 --q"#'~,Z]'"}&ކ'y'9-59|"=;'"ލ(+2"L " "*!;! !2"L " ";! ! 떙'2i09!..! " " 2("9_2"L " ";! !( $9*z|99011' m&nn011-.nm&n>:62.* &@" @0116v&vw&wx%x29011'm&nm&ny&5ކ'+3(ކ ߆. ߆9"~#߆(9-~5@~5)n3T&/3c&*8#u&&#'@ 9' 9*#+#+##+b#+K#+J#+Z#)#*,Z##|&"z &y-zy.8+J& .79;].|y~#0"~,Z'z ɗyz ~$~$$&3T&,'T`T&% dAT&T&xa& b&c' #f UV.OT,!3i1)&31&.AO`'L`& TV642"&3iV0%B$&V,"O $&T-'3&S8:'642'63i2' |&z6"2'ڠנ '@ڠנ:62'@&1~54$(Z2"L+%$-%$#%;2)@]W&M'8͖^8ͽ1)~52.(]'&^+" ܽ.(] &9%P&& &'&=&TDFFUUU'%%& ]' }^,C'"OU8ͽ1^8~5h~&&' #&._99&15&:&O]^11]'" U8 &(1(н1)&ɍ&&,'ͽ. X`&~1 .W&]&11~%tT- 'OU~%~3i%.0U8͖] ŖU"'%&O T ѽ.,&"W'R'^]Ђ^'- "^~%sC&S], ABAADCADDANDASLHASRGBCC$BCS%BEQ'BGE,BGT.BHI"BITBLE/BLS#BLT-BMI+BNE&BPL*BRA BSRBVC(BVS)CBACLC CLICLROCLV CMPCOMCCPXDAADECJDES4DEX EORINCLINS1INXJMPNJSRLDALDSLDXLSRDNEG@NOPORAPSH6PUL2ROLIRORFRTI;RTS9SBASBCSEC SEISEV SK1SK2STASTSSTXSUBSWI?TABTAPTBATPATSTMTSX0TXS5WAI>'')BEQU')BSET()RMB()FCB().FDB(#)BORG(,*BNAM(6*BNAME(@+~WITH(I,ZEND(S*JPAGE(^*JTITLE(i* SPACE(r* SPC({)FCC()T LIST()PCC() PSR() PGEN() PCA()&RPT(*2DO(+K ELSE(+Z FIN(+2IF(+J ELSEIF(+b2CASE(+#2IFUND)*I TABS) ,ZMON)?OPT+]' C&^-"^8ͽ1)9]8͖^8ͽ1)91)|Z&]^9~.(C &R'7.(3W&]/ 7" 2  @  ν.=&],߆ .=&1]߁4ս9~9;.(14 .=14 )@.?9^]9 ]0&0',&H&15],"22 &]/O ] 8 2' &" 7ʀ83] ] &( >zߓ>y.(^]' "7ߓ9ޓ/ߓ>'o1)>y > #> ".=]. ^]'S#I C? h :4]&(2 '*;& 4'R'_4\4]' 24 &o9S'օ'6752J.9.=]-&^#" .=].OLy~9;]^1)&1&3&'|^ ۽" }'OJy9~"'J9.=]']-^*" ؗy91)&,'9'" +˽3& 61)&5'|Z9.(]& 254^492~"++;%MCM+;(NMCM+;%LN+;(NLN+;% LF,;(NLF, ;%@DMP,;(NDMP,;%EL,&;(NEL,.+WI,6+DE,?;%LST,I;(NLST,Q;-DO;0NDOކ-"'"R'59斅<;5 ;-9ѽ-V~!|pa757578|x'%'&&,߽8|Ox8,ս8|:7p~*, , No Errors. At Least One Error. 'ux'q*-H8|75t'aֈ78-7tt8ֈ2  " 7Z. # Error Lines: ?4' 4Z&9po&P֙S &~z7ߓ>q9 o&>`o@G&  ߋ4-6446-&?tߝ7:p9?@EB7??@GOLRΗ~:&('Z O]^W~"1)|Z'(9'1)|Z'~"3iȌW'O]^W"L9*OW6`..x...*O]^|Z~"4D_3 WW^]670..k.k|Z[0[#8&2[7 1)' 1)~"LQ'"AB$S&p ٖց ~.k"L0 A/1B/AQ0R0$a/I!/k$/s"/{T0(S086/5/2/3/1/4/q/r/s/t/7/8/:/9/~.kP111~.@ 8m, TFl&l- .m'HYj&j  č  09;'L 4' .. (- ", / % " # $ 0&_729O_0~/=0  _O00.L ~.[&2]3^19%k100  102' 32 O0,0.M'9.&02~",02h1i0i3i23/62.%223l11Z&90O_.2XIi3i2$-,j0.012' 92"bAZ0az00900~299:$@%'() ;,. 011X77011n$|Z&,9'~"&, '|Z 9Z' XYZ9(001?2@1222r22222OXO]^@'" .!7x^y]$"T&3^^ 'XY(96'2X' 12" 70"b091AZ1Z'3~270_39(40^]0&!06]^XI76XIXI0]^111 ؽ2&XY0''XY' 2"~12-2)4 (7~1VHOQB$@%~1U262(``40'& `'\4 2~1( '(^]~1"O (( 9( (9 ' '(  Ն 2 - _.3%( ],P 30m,2]& )&90770$l119+-&*#/!\ <>=#a6/TR!"!<:S<8=42>7/9=31<4>35$15&1)9'~3&15 "1)'&,'&9[OIZ&H6?60119֋67қ"119011ߋ9Ì8`8'#&84a664&4J&8O989`73&"4>u4>w>r>t1 ,?43[6446Z&8ދoo893' _]_]'"'"9~3O__3' R'" '<'>8&(&_&$8]'"8_]^9_&~"ށ]OWOW_"15|Z.44~"},'94z : R'Yօp&'K5g''>m&ޕ8|8& 7}|858|ލ8| '75& p9@@5tvvw$B78|B8|B75B M.'ٍ ŖR'!'t44'4z&4|&93'6ooz{|}4679Illegal Label.Syntax Error.Illegal Argument.Undefined Symbol.Double Definition.Use of Doubly-defined Symbol.Nesting Error.End of Source File Encountered.Overflow.BRA/BSR Out of Range.Illegal Value.Illegal Digit.Out of Memory.Illegal String.Phase Error.Register Field Missing. *** 739M+ '] ' .@6^2 R': '5֑ш#.S& 6֒S8 2 -|֙'6 2p' ֚'~:79zS9ш# 'ޓ_'"\m&]' %-5=>`4 5 4 86644J&o9972 ~7 MAL/6800 1.3: ; Page ; Form (S "S9p6p668ߓ7ߍR>C><75>`47/~A~"=7{z07? 7575222p9&9@A7@77011 76_ 76 090697@0&'7@Z2&972Z&9֣&6F29kށ߁ޡ%o''ߡ95ޕߡo9 62DDDD09/9ޡ  ϖ *S*9ޡ& ޡ]^ 0116ޡ'ߡ6 6nޝ?&*|9011'  n97~::R'/֙')6֟##S1L?t&LCƍ 6?toߝ29֙'S9 9\& , M' &֙ &\9:~ &6 ' ,6^2@297< 7< M'3<9011&n_ާ'\ &o9:P SOFTWARE DYNAMICS MAL/6800, Version 1.3 / 77E4 *:߉:PSource File=^' :߉:PListing File=?&F  8:߉:PBinary File=&   )߉9ލ:`ލZ999 ' ' )7:PI/O Error #3OZ&9:":":P މ*n4 ލ s&AR&)6>:":`Z'-3'&4q45I~8|****889 5 6 7 qzx n0x}x ?x  poZ&n0 ' ' & wwwww '+;'|w ww 'Z.@/pJ& wwun ww' w_s ~uILLEGAL SWITCH  8 O&)V$''''' 9 999@99vww5w?w& &~w 0wooo?wo)o*o+o(o'o 9vww5w?w& @&~w 3 9vw+ ' stצ?w?w9vw+ ':stw&0+,hYI+$wtwTOw )*o%o(9~w~wvw+sl%&&.(&#s$#M'+ ''""#9(j( 9 o%9vw+o(s&&s$9O9&9'! ' )& t% 9)wl*&l)t 9~w)&Lww'ƀ? wO ?w'  ' '~w)*)w*' l*&l) &o)o* 9vw+ o%wt96w''to'29vw+l%w & 'l''&o't9ȁ"o% '( '3)&6t2wo+l+l*&l)) t9~w'xx? 9w)& w)*)w)* ' 'l*&l)9w?wo)o*9w) *o& + % ?w' &Ql&l&lƀO?w 9 9w* ")!%,w+'!6m&jj?w &%2o+o)o*9~wvw5w?w'0w?w ?w9~wvw5yDK&/0111 vw5yy&yy&u{?]&9yy~w?v&wrIzww*96www76ؽv0112qxvwM&\rS&r9'R1&xSxLxGxx&xx7zx'xn"&$x#xx |x'~w~wrIxnr$HHHH6r$ 3xx911 Ɂ9#G% 90%0 9A%7 9vw+&9vw+%9v9v99-06-7812:01 AM ywvww w?'wwwww!"zww*v_q9#CNw"wwwwXx?'w9~w'o%o&o'o(o)o*o+9~w&9~wwDK SA0 ?'x ?wx w'M"In'xx ?x; n&n&x x ?&#&ŀ&9w  9M*_w? 9$"  011JTOw~ Ow~ w&9x%xQx}xxyy-yYyy9 ~md}uAx ~"~,n$~q~rI~r~u~u@~u~r~r~s~s~rl~u~vw~v~v~v~vqzpNp~9~w~q{n&opo FGG$|FFDDH%edngfnDDH%ednEE$|DDH%ӗednCOPYRIGHT (C) 1977 SOFTWARE DYNAMICS ALL RIGHTS RESERVED""""""""""""##"""#)&&d&((r(()t))#$$##$N$Z$~$r$$%% %%*Z*e*l*^*+3,x++1%0 0=0%&4c&'&'556245-9-4u/;4.4%%!%'%-%3%9*w$f- ,&0:Y9_9U8e7#Q76#;#E5 45A45,&7q,,4E#@+#,'B&0&T"b4?+X+*5[5x'%%33%).99#~+3 h,|00h ;$ߏߑA*.248;,!d"f Ob R^ Q@aO`&'= 2h'~,x~ jDQDDQQZ&D~ jDA%0 ='M~ D6666660 =',~ 00o~ hDOA  D0 ='~ ~,0111111666666~ hD6O666660 ='~ hD76444O60 ='~ 0 ;JA%0 ='~ h4 . 0*~ h0'%E0+E  C  0'C 4O6~ h0'* ;~"'oo~ h23Z[0&30&;3A%Zn$< $4<(~ h6S  0 ~ Y0&# '$4@ ԍ=  #$4> $ $ #$4> % ~ Y~,0& 911n   Ӎ   Ǎ   0&cc~ h0&*7;jA%>0*FEĽ;C  !2333&]'0DfZ& (7 o o ~ hM&]'0hIZ& ~ Y0&3ڽ;~ hQ&C~ hC~ h@& :- 4/ .. (, ܍^' ֍X& ЍR- ʍL/ čF. @, 23\]0&' & '$F GG$|FF\Mn#; 23\]0/K0 &0IK'JLIKF:* I' :K'"0Q0MMQ&Q &: 8 F6_7G6F647~ h 5 0/F0111111FG/w ~,0/F0ߏFGېג~ YDo&ߏOېג~ ~,DOEDDE~ D7O6EDFGED76FD4O60 ='~ ~,66 @ ? 66 K L76O660 ='~ h~,YW7XV6VW D6676O660 ='~ D~# Koo M NX0/'2 K"&&" 0FFXX &~ Y~,0/K'l0 &0IJILK%NFG0M0QQSKM: MOOS&S &0MN  ~ YF F&_O0  (7  ~,0"&"~ Y^  U$OFG0GF%>0FG~ h-  $0"&"0O~ h ~,23Z[0'&;jA%>0+C 111111Zn23%' 111123Zn  0  FG0' 0%"&"0FG~ h:(7  3XI%/GFXI%':%!GF%0%"&"0~ h ~,:(7  FG(7  06F"&G$26S  GF D322222]'*FE  !A%C 111111 2323&Fo~ 0 322222]'%FE  A%C ~ V2323&Fo~ Y0'~,&~ V0M0Q0/K0F &0FIIJLK%KF'MNRQ$QQMM &~ VMNMNQRQRQ QM M & ΖC& D~ kC&~ _C&SC~ h(7 D $  F~ k(7    DF :XI%ED%%D" &'"FG9011nDDED^ T' ^AB~+~,(7 '^ R'7^ &  R^~ h^ R'AB^DE~ ~,DFA%½;F;DE764444½A%0 ='F~ j~,½;0 D;111111½A%~ 0F ;~ D66 &@'@&'& '%8Sq BREAK ON LINE? 6HF} hD &~ h  ,,- &#O ;89A2;,ޏߑ*';A*~ kD*~ 892 E8&,~ k,~ kq STOP6.,q ERROR6^4 AT LINE6j45~ )0&1~"0&%&F "& " &  ~ V~,0'#0bu O'&&6b' 6|`|a'Hcc%zbb22222222 2 2 2 2 2DE~ Y~,6FGG$|FF29zaz`cc$|bb9Dbϼ O'¡&&F&+F%}F  $~ kb&~ ^666666FA%->F;FA%F6 6 6 6 6 6;'.F* F+ F F&66O66CF;F&66O66CF222222F6 6O66CF2 2 2 2 2 2~.7D( KVF MU& H''+ U FF ' &F X~,(~,uXYWVV0 )U'~,/X~ k INPUT ERROR 6U( ;~ kV~ hFG23Z[FGA ] lFA ':&[O—׼A0-*9.0 A-F.7HHHHHyy%(Z& '77444_7 ,' Z[769Zn?_ ~ hޏ' ߏU 9 U ~ h0&09'0FFU &~ YהOݗW$&|N-& | -'>#& L #/.&|ݖ " #& L #ֆڇ&6-&| C  10oo0U &1111~ h<~,H2U #zH&~ h0& 0'0FU FF &~ Y0/'0FFU # &~ Y߯߷'xy% h$ۙ%Z&&ָۖ9011nօ76660XyyyXyyy XyyXyyXy׃߄C;zA%<(~ h~,0+& '3ڽ8S0@Gp$@H8W}p p p ; zH&8W}p}v p~8;8S}v}j_[}p%C'p& 8W}v ohD~8e8S}j_[}p='XB>y4D>$yw?9 5?V?33a@ffg@ffff@PAApvAqp&>8@ttvu$8W vt'8W v}v ޖj*8W}p ; p h~ jj* O0 ~,Dh23DE~ ~,0+& '30@O@6666XIXI0C8S}p ;'+8 ; p ; .8 ;  ; 8Ax1q |AA%1AQA#V'5 pAUhY' 8W v.7~8;0&3|;DDA%D'D|A%0 ='<(DA%> ~ k~,8S ;Z.9b8S ;}j_ ;Z [ ; [ ;}puG$ 8W ; 8W=4(y0G?hQyi&&@E@pyc' j p ! ; ~8;8S}j_ ;Z [ ; [ ;}p ;ZuG$ 8W ;Z8W ;Z ?RDEUvb7pA!P |@Q2aAE)3  ;  ; j p ; ~8;8S}j_ ; (+:p ;.:} ;  ; ;}pF&@$8(ABAAT#yCA8&$ |AA%hAQTuA8&$ p j~8;A  !$' $(26Ae %05@EAW3$06BHT@P!(5BIVc<ef$2@HVdrA '6ETcrAA@xS5@1b'v`0'923222222n+ 00++'& & & & & ' "Ā$|0Mn23;½;;߷߹߻߽߿'V—'Mz Ό'1'Ǎ%ƍ!ōčÍ͗ Ό&~@j')8׷$$ 9$ 9'  9רʦ֨ʦ_$שXXXXתDDDD֨HHHHʦ֨TTTTʖ9& 63vɩy 9ַ%ָֹֺֻ &ּ~@ji'a_\ǍƍōčÍv%3ǫ  Ʃ  ũ  ĩé$͖͗99&ק|$9'#9TFvTFvTFvTFvʐ|$$햧HHHHJÛ62yIYyIYyIYyIY|$$90230'*W3333333ׯM&]'Z3װ3ױ3ײ3׳3״ ?3L&ױ3ײ3׳3״_ *L& ײ3׳3״_ L& ׳3״_ .L&״_2׳2ײ2ױ2װ„? l11111~A+1111~A=33J&333_ (J& 33_ J&3_ J&_22223ׯ3װ3ױ3ײ3׳3״?+~@<߽߿ƙǛƛśěÛ%P%B%Y 0 G_$!׷_&\&; ;'▶?.@'+ֵĀ ;:A%0n p23½;;;߽߿''L̖o&&xyyyyxyyyyyZ&~=z23צ666666naE .&&L HHHH& |*11~C9011n2 .&&L<   Ё0- 9.߀0923769' ڦ9O Oܗݗ߷߹߻΁ '+'-&0&ߖ'z+~C.& ތAC  Ar  z&鍁A &~C_׵׶E&>A+'-& A AA  ֶX% X% ۶%X$ ޖ&ږ& *&Uֶ'*POOYGV͙' 'M*/; =GV$tvvvvJ&\)@) /ڷ׷ *;* ;:2323ӽA%76 9237690F,i@. O RODDDDM  BC  8Z&0*)1111n011nHIII%xyyy%xyyy%$ %923O2222_*ƀ׵ xyyy%Z&;~A+xyyyZ&Ζ'ּ7ֻ7ֺ7ֹ76E @'_7ּ7ֻ7ֺ76D ,'_77ּ7ֻ76C ' _777ּ76B _77776A6n2322DDDD00z&+*-.E +H+- 0&z z&6*@OxZ&ږ0DDDD00  0&Zz&2]&On';&+&!&& @"!23769A" B" C" D" E"9230׵D"@"111111*; ;A%nE0 ڭ׭oJ&*喭';A%> F9= > ? qzx n0x}x ?x  poZ&n0 ' ' & wwwww '+;'|w ww 'Z.@/pJ& wwun ww' w_s ~uILLEGAL SWITCH  O&)V$''''' 9 999@99vww5w?w& &~w 0wooo?wo)o*o+o(o'o 9vww5w?w& @&~w 3 9vw+ ' stצ?w?w9vw+ ':stw&0+,hYI+$wtwTOw )*o%o(9~w~wvw+sl%&&.(&#s$#M'+ ''""#9(j( 9 o%9vw+o(s&&s$9O9&9'! ' )& t% 9)wl*&l)t 9~w)&Lww'ƀ? wO ?w'  ' '~w)*)w*' l*&l) &o)o* 9vw+ o%wt96w''to'29vw+l%w & 'l''&o't9ȁ"o% '( '3)&6t2wo+l+l*&l)) t9~w'xx? 9w)& w)*)w)* ' 'l*&l)9w?wo)o*9w) *o& + % ?w' &Ql&l&lƀO?w 9 9w* ")!%,w+'!6m&jj?w &%2o+o)o*9~wvw5w?w'0w?w ?w9~wvw5yDK&/0111 vw5yy&yy&u{?]&9yy~@ 7zx'xn"&$x#xx |x'~w~wrIxnr$HHHH6r$ 3xx911 Ɂ9#G% 90%0 9A%7 9vw+&9vw+%9v9v99-06-7812:01 AM ywvww w?'wwwww!"zww*v_q9#CNw"wwwwXx?'w9~w'o%o&o'o(o)o*o+9~w&9~wwDK SA0 ?'x ?wx w'M"In'xx ?x; n&n&x x ?&#&ŀ&9w  9M*_w? 9$"  011JTOw~ Ow~ w&9x%xQx}xxyy-yYyy~md}Aƀx ~"!~&n$~q~rI~r~u~u@~u~r~r~s~s~rl~u~vw~v~v~v~vqzpNp~9~w~q{n&opo_~ $;""### #l######$$$M$S$[$A $""#*$$% %B%q%y%#1###`%,#["### =IJ~#<~ )'OQ_ OO '|Q*'Q9K:@F2& B%2!'&Y'!&"2 c%H~"&Y!. !-~$Ž!@ @zF2 :%P0&02 +%P0&0 &0C %2:K"347633G''"3XOZ ./.n~'93D7%B н"3476356767657..I"&/J"~%2&P7'H.//$|..2723562334. ;."& /.$ |7+%H~" ~$%2!'&Y'!&"~""~"Խ%2~#<)3476 3~#<2334@:F9!7/~'97H.//$|..9ݽ&~# V29  )/)kJSOFTWARE DYNAMICS BASIC VERSION 1.3-  )d )d.. )d.. )d.. )d )d )] )d&& )0 )v )l )  ) )AZ )AZ )09 ) )$$AZ )AZ )09 ) )$$09 )09 ).. )EE05 )09 ) )79 * 09 *09 *09 * * * *66 *04 *Q09 *L09 *G09 *F *K *P *55 *04 *v09 *q09 *p *u *55 *02 *09 * *33 *05 * *49 * *69 *09 * * *69 *09 *09 * * * *.. *EE *09-- + +m09 +$09 + +$.. +# +0.. +009 +m09 +4 +mEE +h++ +U-- +U +h09 +h09 +_ +l09 +zAF +09 +AF +~'' +'' + + + +'' +"" +"" + + + +""'' +'' + + +'' ,"" ,"" , , ,"" ,09 ,  ,M ,6  ,, ,MDD ,MII ,MMM09 ,P , ,f  ,\ ,RR ,~EE ,~MM ,!!09 , , ,  , ,EE ,NN ,DD ,  , , , ,  , ,EE ,LL ,SS ,EE[(])!,O -5, .` -.` - * COMPILED BY 01/24/78 SOFTWARE DYNAMICS BASIC VERSION 1.3PROGRAM -ORIGIN : +o .` B JS$ -JS$4800  JSR 8192J[$13:: SET 0!,O -5, .` -DATA -ORIGIN : +o .` : EQU $!.A - .'!.A .GJs*+2+:::JJc:: !.z .),   HJ, .K0 .X,O .X5, ._.`   .y  .u  .u  .f,$ .. .JHJ{3; .6m .. .6m .. ..` ) . .DOUBLY DEFINED LINE NUMBER . / .\ .; / .LET / 3l IF /; WHILE /';Z GOTO /53 PRINT /D8 FOR /Q4 NEXT /_4b GOSUB /n4r RETURN /~4 STOP /4 INPUT /7[ READ /:J WRITE /: RESTORE /79 OPEN /6 CREATE /6 CLOSE /6 DELETE 07 RENAME 07& ON 0"4 REM 0.! 055, CHAIN 0D58 CALL 0R5C POKE 0`6P DEBUG 0o6c ERROR 0~6h 3l0 0, 00 0) 1 0DOUBLY DEFINED STRING VARIABLE 0 J$J., 19) - / 1"J-*-1J{J{J-*-22 JJJ>4+/ 182J{J>4+ 1/ 1J-*-1JJJ{J-*-4J{J-*-22 JJJ>*-J/ ) 2 1DOUBLY DEFINED NUMERIC VARIABLE 1 J$, 2a) - 2%J.2JK::+7+6*J>8+6* 2`, 2`) - %J.4JK::+3+6*(+1)*(+1)J{+1J>4+6*(+1)*(+1) 2/ 2) 2J.6J{0J{0J{ 2* 2G6Js:+GBJk''J[$DG~ 2: 2+o J.6J{0J{0J{$ / 2 2J>6 3 3, 3 3 3+ 3Jk) 3'J[: 3:+o J[$FORMAT 3k+ IJ[J-*-1JkJJLEN( 3F ) = ? IF 3, 3? , 3? - = GlE G 3- 3= Gf? G 3= 3E G C 3= ? G~) 4 GJsJELN 4JD 4aG6JKGN= ? G~TO ? STEP 4M? 4\G<J{1 HzD 4qHJK) 4HJsJPOP 4? IqHHERROR 4GOTO I\Js0 40 4) 4J ? 5+GOTO 4H 4GOSUB 4I JsJ) JsJ, 5) JsJ 5 JJ54 5,,E 5BI@) 5L) 5 5V 5xALREADY DEFINED AS A VARIABLE 5| ( 55 , 55 5) 5 HJsC 5+ 5- 5! 5XOR 5** 5* 5/ 5& 5^ 5 5G0B' Fo 6B 6 FEkF 6K, 6F? , 60? - Gl 6E- 6EGfB 6D 6J ?? 6b, ? HI:IUDEF 6)  6 6NAME ALREADY DEFINED 6GJsJJ( D ) JK= ? IJJ 7L 6, E I(7L 6, E I47L 7I., 77L I. 7E 7%IEX 78, E I7L 7K, ? H\# 7Z? H>F 7iIH, 77L 7v, 7IH 7H7 77 7, 77 7 F 7, 7? , 7? - GlH8G 7- 7GfHG 7H8G C 8HG~7L 8$, 89d 88= 8#H& I9d 8;8= 8;H& ELSE 8Fo 8_B 8V9/ 8^8 8F 8l8 8TAB( 8? ) ; H8= 8 8Ek 88 8F 8, 8? , 8? - Gl8 8- 8GfGHB' 8 9/ 88 8? 89/ 8H,, 9H8= 9 9-; 9%8= 9$ 9-H& H , 9EH8= 9D 9b; 9ZH28= 9Y 9bH& USING :I) 9IJsJ 9F 9H 9F 9FR H , :2Fo 9B 9H  9H, :1F 9H, :1Ek 9H, :1F :$, :? , :? - GlH, :- :GfB' : H  :#H, :1? :1H  9; :@J  :HH& 7L :f, :g , :b:g :XF :, :? , :?C  - GlHt :- :GfHnG :Ht C :HnG~7L :, : , :: :Ek :HhF ;), ; ? , ; ? - GlHh ;- ;GfGHHb ;(Hh Fo ;CB ;:Hb ;BHh F ;NHh? ;YHbJJ$ ) =N? =N) =<B' =5>O =;>O =M>O =M>$ ) =Ek =bE$ > F =, =? , =? - GlE$ > =- =GfGHB' =>O =>O =E$ => Fo =B =>O =E$ => F =E$ > ? =>O NOT( > #? ) HAND >@< OR >;< >? OR >L< = >]? G<> >m? G<= >}? G>= >? G< >? G> >? GG<J{0G= >E H<> >E H<= >E H>= >E H< ? E H> ?E H?m ?$?% + ?3?m G ?h- ?D?m G ?h! ?U?m G ?hXOR ?h?m H ?%? ?w?x ** ?? G ?* ?? G ?/ ?? G ?& ?? G ?x? ?^ ?? IN ?( ?? ) LEN( @G ) G`JKCOM( @? ) GATN( @-? ) HSIN( @C? ) HCOS( @Y? ) HTAN( @o? ) ILOG( @? ) HEXP( @? ) ISQR( @? ) IINT( @? ) I ABS( @? ) I"SGN( @? ) ICOL( A ? ) IcVAL( AE ) IPEEK( A6? ) HFIND( AYF FR , EX ) IRND AfIERR AsIELN AIjPI AIx) AG$) AG<J{- A? G* AGBJk''J[$D+ AG<J[0JkF AGHD: B+o G<J{$+ B&) G<J{+ B9?m G?% - BL?m G?% ! B_?m G?% XOR Bt?m H?% ** B? G?x ?% * B? G?x ?% / B? G?x ?% & B? G?x ?% ^ B? IN?x ?% + BGH?m G?% - CGH?m G?% ! C-GH?m G?% XOR CFGH?m H?% ** CbGH? G?x ?% * C}GH? G?x ?% / CGH? G?x ?% & CGH? G?x ?% ^ CGH? IN?x ?% ) D CD D CD D CG6JK DUNDEFINED VARIABLE ) D D*D G0 D D:D G0 D DKG*JK D Di( ? ) IJs DUNDEFINED VARIABLE ) D D DNO SUBSCRIPTED VARIABLES ALLOWED HERE D DUNDEFINED VARIABLE G6JK, ? - GrG6JK, ? , ? - GxEX E#E$ CAT E0E3 HDEX HJCAT EOEX HJ E?HPEkF EfFR FDATE$ E}IFR TIME$ EIFR NUM$( E? ) INUMF$( EE , ? ) IMID$( EF , ? , ? ) GlLEFT$( FF , G<J{1? ) GlRIGHT$( F:F , ? ) HVHEX$( FQ? ) I, Fl? , ? - Gl+ FGZJ[1Jk+ FGZJ[J-*-1JkJJSWITCHES$ FIG FF F, ? - GfFSWITCHES$ FIGG GGTJK) G# G"UNDEFINED VARIABLE  0+ 10 11 12 13 14 16 17 18 19 20 21 22 23 24 D 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 126 128 130 132 133::: EQU * EQU ::IJK::J[:: SET ::+Js:+ ORG  FCB  RMB  FCC  FDB  FDB  ENDE F qzx n0x}x ?x  poZ&n0 ' ' & wwwww '+;'|w ww 'Z.@/pJ& wwun ww' w_s ~uILLEGAL SWITCH  G O&)V$''''' 9 999@99vww5w?w& &~w 0wooo?wo)o*o+o(o'o 9vww5w?w& @&~w 3 9vw+ ' stצ?w?w9vw+ ':stw&0+,hYI+$wtwTOw )*o%o(9~w~wvw+sl%&&.(&#s$#M'+ ''""#9(j( 9 o%9vw+o(s&&s$9O9&9'! ' )& t% 9)wl*&l)t 9~w)&Lww'ƀ? wO ?w'  ' '~w)*)w*' l*&l) &o)o* 9vw+ o%wt96w''to'29vw+l%w & 'l''&o't9ȁ"o% '( '3)&6t2wo+l+l*&l)) t9~w'xx? 9w)& w)*)w)* ' 'l*&l)9w?wo)o*9w) *o& + % ?w' &Ql&l&lƀO?w 9 9w* ")!%,w+'!6m&jj?w &%2o+o)o*9~wvw5w?w'0w?w ?w9~wvw5yDK&/0111 vw5yy&yy&u{?]&9yy~w?v&wrIzww*96www76ؽv0112qxvwM&\rS&r9'R1&xSxLxGxx&xx7zx'xn"&$x#xx |x'~w~wrIxnr$HHHH6r$ 3xx911 Ɂ9#G% 90%0 9A%7 9vw+&9vw+%9v9v99-06-7812:01 AM ywvww w?'wwwww!"zww*v_q9#CNw"wwwwXx?'w9~w'o%o&o'o(o)o*o+9~w&9~wwDK SA0 ?'x ?wx w'M"In'xx ?x; n&n&x x ?&#&ŀ&9w  9M*_w? 9$"  011JTOw~ Ow~ w&9x%xQx}xxyy-yYyyH ~mdI J K L