@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} PPLQ00000000 *+-.0123456789:<>?ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZDIT}RT Version 1.0Copyright 1990 Charles K. HughesVolume: Directory: Free Sectors: 00000 . U}..... P&Q - - gQnQDD:*.*QR??????????? U ѥ i?хР&QɛgQLvSV} @`QȱɛH!Q ``O`&Q'Q&Q QîQQй&Q`&Q'QgQLvS'Q+-DW}QȾ'QPIHIAISI DI@ `QgQLvSȹ(Q:RS)Q: (QiQ@ 'QiQgQ'QɛX}LvSP&Q'Q><\ PP(ȌPP'QkQP*kQmQ.lQnQ'Q*&Q'Q.-.Q&Qة QY}QQ3 Q&Q߹'Q*Q&Q Q/QhmgQST Qp V`QPZ}QQQQQhmgQp V`%p V UQP BsDPE^HI V` )UL[}U :TL,T QPʈ. Q dP. sP. aP. hP. pPTUQ P UPP P ЩQ\} P#QQ P U PЈ8а P׭Q0 Q BDPE%HI Vhh` Qp V䬳]}`hh` U` Q)ꭢQQ+ Q-Q Q-Q̠ QQ? QQ쭟Q͠QЩ`U6VQ P UPP ^}BэDPEHI V p V` P8 i: Pi0 P`PPP. P. P. P.P8P P. P. P. PPPi0P_}P¢P0 P`Q DIRT Version 1.0 Copyright 1990 Charles K. Hughes This is the version 1.0 release of DIRT - a new director a}y lister forSpartaDOS. Though meant specifically for 4.0+ it will work with anyversion of SpartaDOS except for 1.1. DIR b}T will give a listing of files similar to the standard DIR command inSpartaDOS, however, instead of giving the time a file w c}as created, it givesa listing of the attributes for that file. Why use DIRT? Well, it is faster, shows the attributes, a d}nd is betterthan the standard DIR command in two ways. The first way is with regardto very large files - DIRT will show th e}e full 8 bytes of file size (filescan be up to 16,000,000 bytes long) where the normal DIR command only showsthe lower 6 by f}tes of file size (any file greater than 999,999 bytes willhave the upper digits truncated). The second benefit is that DIRT g} can betold to NOT display certain files, regardless of their attributes. The standard form of the command is: DIRT h}[+|-phasd] [!] [] The options are used as follows: [+|-phasd] This option is used to spe i}cify the attributes of the files you wish to see. If you start the option with a '+' then ONLY those files that ma j}tch the filename mask and have the attribute(s) specified will be listed. If you start the option with a '-' then ALL t k}he files that match the filename mask EXCEPT those with the specified attribute(s) set will be listed. This option l} must appear before the path and filename. The letters refer to the following attributes: p - protected, bi m}t 0 of the status byte. h - hidden, bit 1 of status byte. a - archived, bit 2 of the status byte. n} s - subdirectory, bit 5 of the status byte. d - defragmented, bit 6 of the status byte. (see note at end o}) [!] This is the NOT option and it tells DIRT to show only those files that DO NOT match the filename mask. This p}option can be placed anywhere on the command line, even inside the other options. [Dx:] or [D:] This option selects q} the drive. If the Dx: format is used, x is the drive looked at. If the D: format is used then the default drive r}is looked at, EXCEPT under SDX. [A-I:] or [1-9:] or [Da:] This option is valid only under SDX and is used instead of s}the drive options above. Regardless of the option, the drive (if given) must end with a colon or the results will t}be unpredicatable. If no drive specifier is given then the default drive is used. [pathname] The pathname must imm u}ediately follow the drive (if any). The pathname must be a valid pathname and end with a \, < or >. If no pathname v} is given then the current path is assumed. REMEMBER: Under SDX << and >> are not valid in a pathname. [filename ma w}sk] The filename mask must immediately follow the pathname or the drive specifier if either is given. The mask can be x}any combination of wildcards and valid filename characters. If no filename mask is given, then *.* is assumed. y} NOTE: There must be a space between 'DIRT' and any options in order forSpartaDOS to recognize the DIRT command. Likewise, z}there must be a spacebetween the attribute option and the drive/pathname/mask option. Theexclamation option can be placed {}anywhere and does not need to be set offby spaces. The filename and options can be in upper, lower, or mixed case, DIRTd |}oesn't care because it makes them all upper case before reading them.DIRT also ignores extra spaces between options EXCEPT t }}here can be nospaces embedded in or between the drive, path, and filename. The source code is included with this file. ~}It is in MAC65 format andwell commented (though not commented well :) so feel free to look throughit. Anyone who wishes to } modify it is free to do so but if you wish todistribute the modified version you can only do so under these conditions: } 1) You must distribute the modified source code with the object code. 2) You must give proper credit (to me and previo }us authors if any). 3) You cannot sell the program though a small fee (less than $5) maybe charged for copying & distri }bution. [Anyone who wishes to sell theprogram may contact me via the address below.] 4) You must include this same set }of conditions in your distribution. ADVANCED USERS NOTE: The defragmentation bit doesn't officially exist but bit 6 o }f the statusbyte is unused by SpartaDOS so I decided that was the best way to keeptrack of a file that is not fragmented. }This is of no particular valueto DIRT, but is very important to the defragmentation program that I amworking on. This bit }is only valid as long as the file is not modifiedafter being defragmented. In addition, SpartaDOS may zero this flag butis } unlikely to set it. If you feel this utility is something you could never live without,and have a burning desire to li }ghten your load and enrich the author,please feel free to send some of that green stuff burning a hole in yourpocket [pluto }nium is perfectly acceptable :) ]. If you have any questions or comments I can be reached at:BOB PUFFS BBS (716) 2 }47-8355CLOSER TO HOME BBS (419) 368-4413ATARI BASE BBS (408) 745-5306BAAUG BBS (408) 986-0215PORTAL }BB$ (408) 725-0561Usenet: Ordania-DM@cup.portal.com or Charles_Hughes@cup.portal.comOr USnail: Charles Hughes 555 E }. Washington Ave. #301 Sunnyvale, CA 94086 Phone: (408) 732-7749 D8EIX; X;DIRT SOURCE CODE X; X; PROTCT;; Protected bit $HIDDEN;; Hidden bit .ARCHIV;; Ar}chived bit 8!SUBDIR ;; Subdirectory bit B!DEFRAG@;; Defragmented bit L$EOL;; set end of line marker V/COMTAB} ;; where to look for Sparta stuff `CIOVV;; CIO Vector j INDEXt.BRKKEY;; Break key location, 0=pressed ~X; },P;; get it up real high so it doesn't '!START;; interfere with anything. X; NUMBUF A00000000AX; DVEN}D ==  DLP X;  POINT  POINT2 X; X; #VALID A A======= ==A*+A==A}-.A=# A0123456789:A==A?A( =AABCDEFGHIJKLMNOA2# APQRSTUVWXYZA==A\A===< =AABCDEFGHIJKLMNO}AF! APQRSTUVWXYZA=====PX; Z HEADERd& EOL=EOL=ADIRT Version 1.0A=EOLn1 ACopyright 1990 Charles K. Hughe}sA=EOL=EOLx AVolume: A VOLBUF A A=EOL ADirectory: A DIRBUF A A=EOL=EOLPRFS A } Free SectorAFRESCT As: 00000A=EOLX; HLENPRFSHEADERX; FNAME A . AFATTR A..... AFL}EN A AFMM A -AFDD A -AFYY A A=EOL"X; , ENTRY6STAT ==@LEN ==JNAME A } ATDATE =====^DMIX ==hX; r#COUNT ;; position into lbuff |.LBUFF@;; command line buffer} (64 bytes)  DFLAG  DEVICE ADD:A;; device name PATH A*.*A=EOL$;; pathname X; FMASK A???????????A}X; .SFLAG ;; Previous char was a space flag NFLAG ;; NOT flag %IFLAG ;; Invalid filename flag 'ATTRIB };; Attribute compare byte &ATYPE ;; type of attribute mask 4FSECT ==;; number of free sectors on disk X; }X; Start of program X; &*X; Close IOCB #7 (Of course I cheat! :)0X; : STARTD CLOSE7NX; X.X; Copy command line b}uffer to DIRT buffer bX; l4QCOMTAB;; Get index to the SpartaDOS command vPINDEX;; line buffer  QCOMTAB,}O>?DONE #INDEXONE PINDEXX; X; Do the copy and: :X; skip the file name of the command & first sp}ace (X; make all lowercase into upper 8X; set NOT flag if an exclamation point is found "X; delete all extr}a spaces X; .%>;; Start at beginning of Sparta buffer 5'COUNT;; and at the beginning of the DIRT buffer TWO* Q}@INDEX74!R>EOL;; look for end of line >HT1H #DFLAGR !COM_EXIT\T1fR> ;; look for first space pFPT3z31)>}@;; check for end of buffer, error if yes. HTWO%>:X; X; X; PT3 #SFLAG THREE'3;; increment t}o the next character  Q@INDEX7$R>EOL;; if at end of line, exit  FEXIT "R> !;; look for the NOT option  HFIVE$ Q}>. PNFLAG;; set the nflag = ! 8 +ITHREE;; always jump to next character B FIVEL R> ;; if <$20 V EF1;; then ERROR }` %>j :t F1~ Q@INDEX7;; if >=$80 IF2;; then ERROR %> : F2 ,>;; else use character as index into the } #QVALID 9;; translation table -HF3;; if the character doesn't translate %>;; then ERROR : F3 '$COUNT;; ge}t the DIRT buffer count !PLBUFF9;; save the character !#COUNT;; increment the count *R> ;; check to see if this is a} space  FSIX Q>;; not a space, so reset ( PSFLAG;; the space flag 2 FTHREE;; and always branch < SIXF /$SFLAG;;} check to see if previous char was P 'HSEVEN;; a space, branch if it was Z #SFLAG;; set sflag d HTHREE;; always branch n} SEVENx !"COUNT;; delete second space 0ITHREE;; always branch, if count = negative )%>;; then it is an error anyway}. :) : X; X; Look for switches X; EXIT $COUNT PLBUFF9 HN0 #DFLAG !COM_EXIT N0 %> Q>} $LBUFF" (> +, FEIGHT6 (> -@ HNINEJ EIGHTT &ATYPE^ ATEh 3r $LBUFF8| (> P HN1 !N>PROTCT;; Bit 0 = prot}ected N1 (> H HN2 N>HIDDEN;; Bit 1 = Hidden N2 (> A HN3 N>ARCHIV;; Bit 2 = Archived N3 (> S H}N4 N>SUBDIR;; Bit 5 = Subdir  N4 (> D& HN50 $N>DEFRAG;; Bit 6 = Defragmented : N5D (> ;; compare to a space N} FELEVEN;; in order to exit X (>EOL;; compare to EOL b FELEVEN;; also to exit l %HATE;; always get next character v X}; ELEVEN !R>;; if there were no flags HE1;; then ERROR %> : E1 PATTRIB 2(>EOL;; if end of line, the}n use default mask HTWELVE #DFLAG !COM_EXIT TWELVE 3;; skip the space  X; 7X; Here only if there is some }sort of mask or path  X; NINE* X; 4 X; Check for device first > X; H QLBUFF8R R> :\ FDEV_ONEf QLBUFF8p }R> :z HNO_DEV QLBUFF8 PDEVICE 3 3 3 HD1;; always jump DEV_ONE Q -R>@;; Check to see if Spa}rta version 4.x FV4 3 3 HNO_DEV;; always jump V4 QLBUFF8PDEVICE$3.38HD1;; always jump B NO_}DEVL#DFLAG;; Set D: flag VD1` QLBUFF8j R>EOLtHP1~ !COM_EXITX; X; Search for a path X; P1*'POI}NT;; save current point in buffer (%COUNT;; get length of input buffer S11 QLBUFF8R> >FS3R> <FS3 }R> \FS3 )POINT(HS12,< %POINTFDS2;; branch if no path PS3Z-3;; inc y so it points to char after path d}'POINT2;; save y n %POINTx$>S4 QLBUFF8 PPATH932/)POINT2;; has entire path has been copied? HS4}'Q> *;; Add *.* to end of path.  PPATH9 PPATH9Q> . PPATH9 Q>EOL PPATH9X; X; Copy and e}xpand mask "X; ,X; first do filename 6X; @S2J$>TEX7^ QLBUFF8hR> *rHEX2|X; #X; Found a wildcard, so} skip to +X; extension by searching for a period X; EX03 )COUNTFNO_EXT;; else clobber it QLBUFF8R> }.;; if we find it FEX4;; then expand it HEX0X; EX2R> . FDO_EXT(>;; if we get too many&EEX3;; the}n ignore them0-PFMASK9;; save the character in the mask :EX3D2N3X )COUNTb'HEX7;; continue until end of bufferl}X; v,X; if no extension, then we must assume ,X; that none is wanted. So, we clobber X; the extension. X;  NO}_EXTQ> ;; grab a space PFMASK;; and clobber PFMASK ;; the extension  PFMASK HCOM_EXIT;; always exit} X;  DO_EXT(>FEX4Q> ;; clobber the rest PFMASK9;; of the filename 2  HDO_EXT*EX44$>>3;; }skip past the . H)COUNT;; if at the end RFNO_EXT;; then clobber it \EX5f QLBUFF8pR> *;; check for wildcard z F}COM_EXITPFMASK92(> FCOM_EXIT3 )COUNTHEX5EX6Q> PFMASK92(>HEX6X; 0X}; VOILA! The command line has been parsed, #X; wasn't that great fun! YUCK! $X; .+X; Now, lets do what we were told to }do 8X; and stop wasting time. BX; L COM_EXITVX; `3X; do like normal DIR and execute a chkdsk call jX; tQ>/;; Ch}kdsk function ~P;; ICCOM, IOCB #7 3Q>5DEVICE;; Tell CIO where to find the filenameP Q>4DEVICE, ODFLAG}P DSKPR#SKPR1Q>4ENTRY;; Tell CIO where to put chkdsk info P Q>5ENTRYP Q>PP}($>p;; Use IOCB #7 2 CIOV<ICE2;; Check for error F:;; Exit with an error PCE2Z*%>;; Copy Volume name to vol}buf area dCE3nQENTRY8x PVOLBUF81ICE30QENTRY;; Save the number of free sectors  PFSECT QENTRY} PFSECTX; ?X; Open the appropriate directory so that we can read it in 5X; the raw format. This is absolutely n}ecessary. X; 1Q>5DEVICE;; Point to our device and pathname P Q>4DEVICE, ODFLAGDCE4"#,CE46P}@0Q>;; Indicate read [4] raw [+16] directory JPT)Q>;; Indicate open channel function ^Ph$>p;; use IOCB }#7 r CIOV|ICE5;; check for error :;; exit with error CE5Q>PPPQ>%;; Point command P}$>p CIOV. GET_ENTRY;; get first entry in directory X; ;; Copy directory name to dirbuf CE6& QNAME80 PDIRBUF8:1DICE6NX; XX; Print the header out}. bX; l>X; Since we have the volume name, and the directory name, v;X; we can print them out right now, and not worry ab}out X; it later. X; Q> ;; Print the header PB*Q>4HEADER;; tell E: the start address PD Q>5HEADER}PE Q>HLEN;; give it the length PHQ>PI$>;; Use IOCB #0  CIOV X; =X; If an error occurs here,} we don't give a damn because 2X; it would mean the user has bigger problems. *X; 4#)>;; But check for a break key>H}@BK1;; anyway, so that weH%>;; can exit smoothlyR:\@BK1f=X; So, here is the main loop for reading in and printing} p%X; the directory. Short, huh? :) zX; TOP GET_VALID0IMN1;; an error here means end of directory  !DIR_END}MN1 PRINT_ENTRY!TOPX; 8X; print_entry is easier, so I'll do that one first. X; PRINT_ENTRYX; (X;} copy filename and extension first X; %> $> $PE1. QNAME88 PFNAME9B0L(>VHPE2`0jPE2t1~IPE1}X; X; set attributes list X; $> . QSTATT?;; skip bit 7 T?;; check bit 6 DSA1$> d;; defrag bit }SA1&FATTR;; flag it :) $> .T?;; check bit 5 DSA2$> s;; subdir bit SA2( &FATTR2$> .<T?;; ski}p bit 4 FT?;; skip bit 3 PT?;; check bit 2 ZDSA3d$> a;; archive bit nSA3x &FATTR$> .T?;; check bit 1 }DSA4$> h;; hidden bit SA4 &FATTR$> .T?;; check bit 0 DPE5$> p;; protected bit PE5 &FATTR}X; (X; That wasn't so hard, now was it? X; X; "-X; Okay, now we get to the hard parts... ,7X; I need to turn t}he file length into a its ascii 64X; equivalent and do the same for the 3 parts of @7X; the date. Coding this myself would} be a pain in J,X; SpartaDOS routine just wouldn't work. TX; ^X; watch carefully. :) hX; rX; |X; Now convert the }length. X; %>CR2 QLEN8 PDVEND81ICR2 B2ASC;; convert! +%>;; copy ASCII number to output line }CR4 QNUMBUF8 PFLEN81ICR4X; X &DVENDb Q>4FYYl PINDEX}v Q>5FYY PINDEXCV0 %DVEND $DMIX8QDATE9;; Get date PDVEND SB2ASC%>CV1QNUMBUF8} P@INDEX71ICV1 QINDEX ;S>  PINDEX*ECV24 "INDEX>CV2H "DVENDRICV0\QFMMfR>0pHCV}3zQ> PFMMCV3X; 7X; Well, that's the hard part, now we just need to X; print it. X; !Q> ;; select pu}t buf command PB3Q>4FNAME;; give E: start address of the header PD Q>5FNAMEPEQ>%;; give it the lengt}h PHQ>PI$$>;; Use IOCB #0 . CIOV8X; B=X; If an error occurs here, we don't give a damn because L2X}; it would mean the user has bigger problems. VX; `)>;; However, check forjH@BK2;; break key errort7;; and exit if} found~7%>@BK2 :;; exit print_entry routine X; X; X; Now, a simple routine... X; ;; number of byteS to get PQ>P( Q>4ENTRY2P< Q>5ENTRYFPPQ>}ZPd$>pn CIOVx%:X; X; =X; Now comes the hard part, validating an entry with the X; options giv}en. X; .X; This routine has to do several things: #X; 1) read in a 23 byte entry 1X; 2) ensure that the attribu}tes are correct,X; 3) ensure the filename fits the maskX;  GET_VALID*QBRKKEY;; Check for break key pressed. H}@BK377":,@BK36 GET_ENTRY@IGV1J :;; exit if end of directory TGV1^X; check attribs first h QSTATr4F}GET_VALID;; should never happen (0=end of dir) |3M>;; mask out all except deleted & write open -HGET_VALID;; skip entry} if either is set  QATYPE FCHKMSK QATYPER> + FPLUSX; 2X; minus compare, any bit on rejects the entry X};  QSTAT MATTRIBHGET_VALID FCHKMSK X;  1X; plus compare, any bit on accepts the entry  X; & PLUS0 QSTAT}: MATTRIBD FGET_VALIDN X; X X; check the mask b X; l CHKMSKv %> Q> PIFLAG CK1 QFMASK8 R> ? FCM2} RNAME8 FCM2 Q> PIFLAG CM2 1 ICK1!X; !9X; Examine the NOT flag. If the filename is a valid !3X; on}e given the mask, then IFLAG will equal 0. !7X; The NOT flag equals 0 when it is not being used. *!-X; If the NOT flag and I}FLAG are the same,4!$X; then the entry is a good one. >!X; H!QNFLAG;; Get NOT flag R!,RIFLAG;; Check for fname match/no m}atch \!1HGET_VALID;; If not equal then invalid entry f!X; p!X; Boy, was that hard! :) z!X; !Q>!:;; exit with good }flag set !X; !4X; What to do at the end of the directory? This !X; is what you do.... !X; ! DIR_END!X; !&X; Con}vert the free sector count. !X; !%>!IF2! QFSECT8" PDVEND8"1"IIF2$" B2ASC."%>8"ED1B" QNUMBUF8L" PFR}ESCT8V"1`")>j"HED1t"X; ~"&X; Print out the free sector count "X; "Q> "PB" Q>4PRFS"PD" Q>5PRFS"PE}"Q>"PH"Q>"PI"># CIOV #X; #X; Close IOCB #7 #X; (# CLOSE72#Q> <#PF#$>pP# CIOVZ# %>;; In}dicate a good close.d# :;; All done, return to DOS. n#X;x#+X; SB2ASC - Converts a byte to 2 digits.#X;# SB2ASC#$># }QDVEND#SB0#2#;#S> #ESB0#O>:#PNUMBUF#A#,$O>0$PNUMBUF$:"$X; ,$7X; This routine converts} a 3 byte number to ascii. 6$X; @$ B2ASCJ$(Q>;; Set loop counter so that all T$*PDLP;; 8 possible digits are figured. ^}$X; h$X; divide by 10 r$X; |$UDIV$Q>$ PDVEND$ PDVEND$ OKUDIV$$>$ DIVLP$ UDVEND$ UDVEND$ U}DVEND$ UDVEND$ CHKLT$;$ QDVEND%S> % DDECCNT% PDVEND&% DECCNT0%0:% HDIVLPD% UDVENDN% UDVEND}X% UDVENDb%X; l%$DLPv%,% QDVEND%O>0% PNUMBUF9%"DLP% IUDIV%X; %$>%BA3% QNUMBUF9%R> 0%HB}A4%Q> % PNUMBUF9&2 &(>&HBA3 &BA4*&:4&X; >&X; Set the run addressH&X; R&\& STARTf&m The source code for DIRT has not been greatly optimized, certain thingsare redundant, slow, and perhaps even badly designe}d. Since I did theentire project from start to finish in one week you'll have to excuse theinelegant code. If anyone ha}s a better method of converting a 24 bit binary number intoan 8 byte ASCII number, I'm all ears. Speeding up that conversio}n alonewill make the program faster. No comments about not using the IOCB names and the names of otherlocations, please. } I was in a hurry and didn't feel like pulling outan equate file. The program has been optimized a little, so you'll see a} few weirdthings like: ldy dvend ldx dmix,y lda date,xCouldn't be helped, the code to make that more und}erstandable was about30 lines long, and I prefer 3 lines to 30. No comments about my comments (or lack thereof) either - }most of thecode is pretty straight-forward, so you can suffer through the otherconvoluted messes if you want to know exactl}y how this program works. Also, this was the first time I've written a program that acceptedoptions from the command line }, so if it looks terrible, at least youknow why. Can't think of anything else at the moment but I'm sure somebody willth }ink of something for me. :)Charles Hughes- DIRT Version 1.0 Copyright 1990 Charles K. Hughes* This is the version 1.0 release of DIRT - a new directo }ry lister forSpartaDOS. Though meant specifically for 4.0+ it will work with anyversion of SpartaDOS except for 1.1. DI }RT will give a listing of files similar to the standard DIR command inSpartaDOS, however, instead of giving the time a file }was created, it givesa listing of the attributes for that file. Why use DIRT? Well, it is faster, shows the attributes, }and is betterthan the standard DIR command in two ways. The first way is with regardto very large files - DIRT will show t}he full 8 bytes of file size (filescan be up to 16,000,000 bytes long) where the normal DIR command only showsthe lower 6 b}ytes of file size (any file greater than 999,999 bytes willhave the upper digits truncated). The second benefit is that DIR}T can betold to NOT display certain files, regardless of their attributes. The standard form of the command is: DIRT} [+|-phasd] [!] [] The options are used as follows: [+|-phasd] This option is used to sp}ecify the attributes of the files you wish to see. If you start the option with a '+' then ONLY those files that m}atch the filename mask and have the attribute(s) specified will be listed. If you start the option with a '-' then ALL }the files that match the filename mask EXCEPT those with the specified attribute(s) set will be listed. This optio}n must appear before the path and filename. The letters refer to the following attributes: p - protected, b}it 0 of the status byte. h - hidden, bit 1 of status byte. a - archived, bit 2 of the status byte. } s - subdirectory, bit 5 of the status byte. d - defragmented, bit 6 of the status byte. (see note at en}d) [!] This is the NOT option and it tells DIRT to show only those files that DO NOT match the filename mask. This} option can be placed anywhere on the command line, even inside the other options. [Dx:] or [D:] This option select}s the drive. If the Dx: format is used, x is the drive looked at. If the D: format is used then the default drive} is looked at, EXCEPT under SDX. [A-I:] or [1-9:] or [Da:] This option is valid only under SDX and is used instead of} the drive options above. Regardless of the option, the drive (if given) must end with a colon or the results will} be unpredicatable. If no drive specifier is given then the default drive is used. [pathname] The pathname must im }mediately follow the drive (if any). The pathname must be a valid pathname and end with a \, < or >. If no pathnam!}e is given then the current path is assumed. REMEMBER: Under SDX << and >> are not valid in a pathname. [filename m"}ask] The filename mask must immediately follow the pathname or the drive specifier if either is given. The mask can be#} any combination of wildcards and valid filename characters. If no filename mask is given, then *.* is assumed.$} NOTE: There must be a space between 'DIRT' and any options in order forSpartaDOS to recognize the DIRT command. Likewise,%} there must be a spacebetween the attribute option and the drive/pathname/mask option. Theexclamation option can be placed&} anywhere and does not need to be set offby spaces. The filename and options can be in upper, lower, or mixed case, DIRT'}doesn't care because it makes them all upper case before reading them.DIRT also ignores extra spaces between options EXCEPT (}there can be nospaces embedded in or between the drive, path, and filename. The source code is included with this file. )} It is in MAC65 format andwell commented (though not commented well :) so feel free to look throughit. Anyone who wishes t*}o modify it is free to do so but if you wish todistribute the modified version you can only do so under these conditions: +} 1) You must distribute the modified source code with the object code. 2) You must give proper credit (to me and previ,}ous authors if any). 3) You cannot sell the program though a small fee (less than $5) maybe charged for copying & distr-}ibution. [Anyone who wishes to sell theprogram may contact me via the address below.] 4) You must include this same set.} of conditions in your distribution. ADVANCED USERS NOTE: The defragmentation bit doesn't officially exist but bit 6 /}of the statusbyte is unused by SpartaDOS so I decided that was the best way to keeptrack of a file that is not fragmented. 0} This is of no particular valueto DIRT, but is very important to the defragmentation program that I amworking on. This bit1} is only valid as long as the file is not modifiedafter being defragmented. In addition, SpartaDOS may zero this flag buti2}s unlikely to set it. If you feel this utility is something you could never live without,and have a burning desire to l3}ighten your load and enrich the author,please feel free to send some of that green stuff burning a hole in yourpocket [plut4}onium is perfectly acceptable :) ]. If you have any questions or comments I can be reached at:BOB PUFFS BBS (716) 5}247-8355CLOSER TO HOME BBS (419) 368-4413ATARI BASE BBS (408) 745-5306BAAUG BBS (408) 986-0215PORTAL 6} BB$ (408) 725-0561Usenet: Ordania-DM@cup.portal.com or Charles_Hughes@cup.portal.comOr USnail: Charles Hughes 555 7}E. Washington Ave. #301 Sunnyvale, CA 94086 Phone: (408) 732-7749 * All rights reserved. This text may be freely distri8}buted under thefollowing conditions - the text is not modified, no charge other than anominal copying fee is imposed, and i9}f used in a printed or onlinepublication a copy of said publication be sent to the author's addressgiven above. Commercial:} non-Atari-user-group publications must getspecific written permission from the author in order to use this material. In o;}ther words, if your publication isn't directly affiliated with anAtari User Group, I reserve the right to charge you for pri<}nting mymaterial. Atari specific online publications are exempt from thisrequirement (Zmag, STReport, etc).p DIRT.ARC should contain the following files: DIRT.DOC - Tells you how to use DIRT.COM and even more! :) DIRT.COM - Th>}e actual program. DIRT.M65 - The Mac65 source code to DIRT.COM. DIRTY.TLK - A disclaimer... README.NOW - This file.?} That's enough, go read the doc file now.Charles Hughes?B%DOS SYSB*)DUP SYSB SDIRT COMB-`DIRT DOCBsDIRT M65B DIRTY TLKB2 DIRT_DOCUPDB=README NOW