ser2net port tcp,2000 device serialdev, /dev/ttyUSB0, 4800n81,local=false [4800N81,HANGUP_WHEN_DONE] (Debian GNU/Linux) >pr 0010 ; 0020 ; Directory Sort V.I 0030 ; 0040 ; For Symbiosys with B.D.O.S. Ver. V 0050 ; 0060 ; House Harris 0070 ; November MMXXV 0080 ; 0090 ; 0100 .os 0110 osflags .de $39f ;DOS control flags 0120 cwd .de $39d ;2 bytes for future expansion 0130 filenum .de $39c 0140 sectnum .de $39b 0150 bytenum .de $39a 0160 xfer.bytes .de $398 ; 16 bits bytes to transfer 0170 xfer.addr .de $396 ; 16 bits start addr for transfer 0180 dta.ptr .de $394 ; disk transfer buffer pointer 0190 ilba24 .de $393 0200 ilba16 .de $392 0210 ilba8 .de $391 0220 ilba0 .de $390 0230 compacptr .de $3fc 0240 path.user .de $3f8 0250 ; 0260 argc .de $37f ;$a60f 0270 argv[0] .de $380 ;$a610 0280 argv[1] .de $382 ;$a612 0290 argv[2] .de $384 ;$a614 0300 argv[3] .de $386 ;$a616 0310 argv[4] .de $388 ;$a618 0320 argv[5] .de $38a ;$a61a 0330 ; 0340 zargc .de $4f 0350 zargv[0] .de $50 0360 zargv[1] .de $52 0370 zargv[2] .de $54 0380 zargv[3] .de $56 0390 zargv[4] .de $58 0400 zargv[5] .de $5a 0410 zargv[6] .de $5c 0420 zargv[7] .de $5e 0430 ; 0440 ; 0450 call.bdos .de $9006 ; Call BDOS function held in reg x 0460 disk.init .de $00 0470 load.sect .de $02 0480 dump.sect .de $04 0490 writebytes .de $06 0500 readbytes .de $08 0510 writefile .de $0a 0520 readfile .de $0c 0530 wrt.dirent .de $0e 0540 rd.dirent .de $10 0550 findfile .de $12 0560 findnext .de $14 0570 execfile .de $16 0580 delfile .de $18 ;delete file from directory & 0590 openfile .de $1a 0600 rwsectfh .de $1c 0610 rwdirfh .de $1e 0620 ; 0630 symbiosys .de $9003 0640 hex.dump .de $9f03 0650 ; 0660 errorhndlr .de $9010 0670 lib.puts .de $9013 0680 date.prnt .de $901c 0690 rtc.read .de $901f 0700 rtc.write .de $9022 0710 dir.prnt .de $9025 0720 istr.prnt .de $9028 0730 lib.atoi .de $902b 0740 ptrn.match .de $902e 0750 proc.flist .de $9031 0760 verify .de $9034 0770 ver.prompt .de $9037 0780 lba.prnt .de $903a 0790 lib.parsfn .de $903d 0800 ; 0810 ; 0820 warment .de $8003 0830 usrent .de $8035 0840 outbyte .de $82fa 0850 ascnib .de $8275 0860 getchar .de $8a58 0870 outchar .de $8a47 0880 outxah .de $82f4 0890 crlf .de $834d 0900 space .de $8342 0910 pshove .de $8208 0920 parnr .de $a649 0930 par3 .de $a64a 0940 par2 .de $a64c 0950 par1 .de $a64e 0960 techo .de $a653 0970 ; 0980 buffer.ptr .de $a0 0990 word.rtrn .de $a2 1000 genbuf.pt2 .de $a4 1010 fsave.x .de $a6 1020 ztemp .de $eb 1030 ZT1 .de $b0 1040 ZT2 .de $b2 ;2 byte variables 1050 ; 1060 sectr.buff .de $0200 1070 osctrlblk .de $0300 1080 cli.buffer .de osctrlblk ;size 80 1090 pattern .de cli.buffer+80 ;size 32 1100 date.buff .de pattern+32 ;size 10 1110 byte.count .de date.buff+10 ;size 2 1120 ; 1130 ivmp.addr .de $37c 1140 ; 1150 of.bvffer .de $3a0 1160 of.lba .de $00 ;size 3 1170 of.size .de of.lba+3 ;size 2 1180 of.flptr .de of.size+2 ;size 2 1190 of.flags .de of.flptr+2 ;size 1 1200 ; 1210 of.rae .de $3ef ;temporary open file for RAE 1220 ; 1230 ; 1240 ;dir.entry .de dirnt.buff 1250 file.color .de $00 ;size 1 1260 file.name .de file.color+1 ;size 30 1270 file.ver .de file.name+30 ;size 1 1280 file.size .de file.ver+1 ;size 8 1290 file.ctime .de file.size+8 ;size 8 1300 file.mtime .de file.ctime+8 ;size 8 1310 file.atrib .de file.mtime+8 ;size 4 1320 file.load .de file.atrib+4 ;size 4 1330 file.loc .de file.load+4 ;size 4 1340 file.comnt .de file.loc+4 1350 ; 1360 ; osflag values 1370 ; 1380 showprgrs .de %10000000 1390 readfrwrd .de %00000001 1400 verifymode .de %00000010 1410 fullpath .de %00000100 1420 ; 1430 !!!rstosfl .md (mask) 1440 lda #mask 1450 eor #$ff 1460 and osflags 1470 sta osflags 1480 .me 1490 !!!setosfl .md (mask) 1500 lda #mask 1510 ora osflags 1520 sta osflags 1530 .me 1540 ; 1550 !!!cmpdbl .md (first second) 1560 sec 1570 lda first 1580 sbc second 1590 sta *ztemp 1600 lda first+1 1610 sbc second+1 1620 ora *ztemp 1630 .me 1640 ; 1650 ; 1660 !!!cmpdblz .md (first second) 1670 lda second 1680 sta ZT1 1690 lda second+1 1700 sta ZT1+1 1710 ldy #$00 1720 lda first 1730 sec 1740 sbc (ZT1),y 1750 sta *ztemp 1760 lda first+1 1770 iny 1780 sbc (ZT1),y 1790 ora *ztemp 1800 .me 1810 ; 1820 !!!puts .md (strng) 1830 lda #l,strng 1840 ldy #h,strng 1850 jsr lib.puts 1860 .me 1870 ; 1880 !!!stdbl .md (src dst) 1890 pha 1900 lda #l,src 1910 sta dst 1920 lda #h,src 1930 sta dst+1 1940 pla 1950 .me 1960 ; 1970 !!!pshdbl .md (src) 1980 lda src 1990 pha 2000 lda src+1 2010 pha 2020 .me 2030 ; 2040 !!!puldbl .md (dst) 2050 pla 2060 sta dst+1 2070 pla 2080 sta dst 2090 .me 2100 ; 2110 !!!dprintf .md (src) 2120 pha 2130 lda #l,src 2140 sta *buffer.ptr 2150 lda #h,src 2160 sta *buffer.ptr+1 2170 jsr date.prnt 2180 pla 2190 .me 2200 ; 2210 !!!getdate .md (dest) 2220 pha 2230 lda #l,dest 2240 sta *buffer.ptr 2250 lda #h,dest 2260 sta *buffer.ptr+1 2270 jsr rtc.read 2280 pla 2290 .me 2300 ; 2310 !!!datecpy .md (source dest) 2320 ldx #8 2330 ...loop lda source-1,x 2340 sta dest-1,x 2350 dex 2360 bne ...loop 2370 .me 2380 ; 2390 !!!bdos .md (funct) 2400 ldx #funct 2410 jsr call.bdos 2420 .me 2430 ; 2440 !!!zrgatoi .md (zargv dest) 2450 ldx #zargv-zargv[0] 2460 lda #l,dest 2470 ldy #h,dest 2480 jsr lib.atoi 2490 .me 2500 ; 2510 !!!zrgputs .md (indic.zarg) 2520 ldy #$ff 2530 ...loop iny 2540 lda (indic.zarg),y 2550 jsr outchar 2560 bne ...loop 2570 .me 2580 ; 2590 !!!zargcpy .md (indic.zarg locvs.dest) 2600 ldy #$ff 2610 ...loop iny 2620 lda (indic.zarg),y 2630 sta locvs.dest,y 2640 bne ...loop 2650 .me 2660 ; 2670 !!!fopen .md (mode indic.zarg) 2680 ldy #$ff 2690 ...loop iny 2700 lda (indic.zarg),y 2710 sta pattern,y 2720 bne ...loop 2730 ldx #openfile 2740 lda #mode 2750 jsr call.bdos 2760 .me 2770 ; 2780 !!!parsefn .md (zarg) 2790 lda *zarg 2800 sta *buffer.ptr 2810 lda *zarg+1 2820 sta *buffer.ptr+1 2830 jsr lib.parsfn 2840 bcs ...exit 2850 adc *zarg 2860 sta *zarg 2870 clc 2880 ...exit .me 2890 ; 2900 !!!strcpy .md (src dst) 2910 ldx #$ff 2920 ...loop inx 2930 lda src,x 2940 beq ...exit 2950 sta dst,x 2960 jmp ...loop 2970 ...exit sta dst,x 2980 .me 2990 ; 3000 !!!strcpyz .md (src dst) 3010 lda dst 3020 sta ZT1 3030 lda dst+1 3040 sta ZT1+1 3050 ldy #$0 3060 ldx #$ff 3070 ...loop inx 3080 lda src,x 3090 beq ...exit 3100 sta (ZT1),y 3110 iny 3120 jmp ...loop 3130 ...exit sta (ZT1),y 3140 .me 3150 ; 3160 !!!zstrcpy .md (src dst) 3170 lda src 3180 sta ZT1 3190 lda src+1 3200 sta ZT1+1 3210 ldy #$0 3220 ldx #$ff 3230 ...loop inx 3240 lda (ZT1),y 3250 beq ...exit 3260 sta dst,x 3270 iny 3280 jmp ...loop 3290 ...exit sta dst,x 3300 .me 3310 ; 3320 !!!strcptr .md (src dst) 3330 lda src 3340 sta ZT1 3350 lda src+1 3360 sta ZT1+1 3370 lda dst 3380 sta ZT2 3390 lda dst+1 3400 sta ZT2+1 3410 ldy #$ff 3420 ...loop iny 3430 lda (ZT1),y 3440 beq ...exit 3450 sta (ZT2),y ;dst,x 3460 jmp ...loop 3470 ...exit sta (ZT2),y ;dst,x 3480 .me 3490 ; 3500 !!!strcmp .md (string1 string2) 3510 ldx #$ff 3520 ...loop inx 3530 lda string2,x 3540 beq ...finchk2 3550 lda string1,x 3560 beq ...finchk1 3570 cmp string2,x 3580 beq ...loop 3590 bne ...exit 3600 ...finchk2 lda string1,x 3610 beq ...exit 3620 sec 3630 bcs ...exit 3640 ...finchk1 lda string2,x 3650 beq ...exit 3660 clc 3670 ...exit nop 3680 .me 3690 ; 3700 ; 3710 !!!strcmpp .md (string1 string2) 3720 lda string1 3730 sta ZT1 3740 lda string1+1 3750 sta ZT1+1 3760 lda string2 3770 sta ZT2 3780 lda string2+1 3790 sta ZT2+1 3800 ldy #$ff 3810 ...loop iny 3820 lda (ZT2),y 3830 beq ...finchk2 3840 lda (ZT1),y 3850 beq ...finchk1 3860 cmp (ZT2),y 3870 beq ...loop 3880 bne ...exit 3890 ...finchk2 lda (ZT1),y 3900 beq ...exit 3910 sec 3920 bcs ...exit 3930 ...finchk1 lda (ZT2),y 3940 beq ...exit 3950 clc 3960 ...exit nop 3970 .me 3980 ; 3990 w .de $00 4000 r .de $01 4010 ; 4020 !!!xfrdbl .md (src dst) 4030 pha 4040 lda src 4050 sta dst 4060 lda src+1 4070 sta dst+1 4080 pla 4090 .me 4100 ; 4110 !!!xfrdblz .md (src dst) 4120 lda dst 4130 sta ZT1 4140 lda dst+1 4150 sta ZT1+1 4160 ldy #$00 4170 lda src 4180 sta (ZT1),y 4190 iny 4200 lda src+1 4210 sta (ZT1),y 4220 .me 4230 ; 4240 !!!zxfrdbl .md (src dst) 4250 lda src 4260 sta ZT1 4270 lda src+1 4280 sta ZT1+1 4290 ldy #$00 4300 lda (ZT1),y 4310 sta dst 4320 iny 4330 lda (ZT1),y 4340 sta dst+1 4350 .me 4360 ; 4370 !!!decdbl .md (loc) 4380 lda loc 4390 bne ...skip 4400 dec loc+1 4410 ...skip dec loc 4420 .me 4430 ; 4440 !!!incdbl .md (locus) 4450 lda locus 4460 cmp #$ff 4470 bne ...skip 4480 inc locus+1 4490 ...skip inc locus 4500 .me 4510 ; 4520 !!!cmpzdbl .md (loc) 4530 lda loc 4540 ora loc+1 4550 .me 4560 ; 4570 !!!iszero .md (loc) 4580 lda loc 4590 sta ZT1 4600 lda loc+1 4610 sta ZT1+1 4620 ldy #$00 4630 lda (ZT1),y 4640 iny 4650 ora (ZT1),y 4660 .me 4670 ; 4680 !!!phdbl .md (locvs) 4690 lda #h,locvs 4700 pha 4710 lda #l,locvs 4720 pha 4730 .me 4740 ; 4750 !!!clrpage .md (buffer) 4760 lda #$00 4770 tax 4780 ...loop sta buffer,x 4790 inx 4800 bne ...loop 4810 .me 4820 ; 4830 !!!getflnm .md (buffer) 4840 ldx #l,buffer 4850 ldy #h,buffer 4860 jsr lookupfn 4870 .me 4880 ; 4890 !!!add2ptr .md (ptr value) 4900 clc 4910 lda ptr 4920 adc value 4930 sta ptr 4940 lda ptr+1 4950 adc #$00 4960 sta ptr+1 4970 .me 4980 ; 4990 !!!cmpptr .md (num1 num2) 5000 lda num1+1 5010 cmp #h,num2 5020 bne ...exit 5030 lda num1 5040 cmp #l,num2 5050 ...exit nop 5060 .me 5070 ; 5080 F.Aloc.Lst .de $0500 5090 dirnt.buff .de sectr.buff 5100 index .de $0600 5110 indexp2 .de $0700 5120 fnlist .de $6000 5130 hiram .de $7fc0 5140 ; 5150 .ba $0800 5160 .es 5170 ; 5180 lda #$1 5190 sta count 5200 jsr crlf 5210 main 5220 rstosfl (showprgrs) 5230 stdbl (F.Aloc.Lst dta.ptr) 5240 lda #$0 5250 bdos (rd.dirent) 5260 stdbl (sectr.buff dta.ptr) 5270 ldx F.Aloc.Lst 5280 dex 5290 stx listlen 5300 stdbl (fnlist fnlistptr) 5310 clrpage (index) 5320 clrpage (indexp2) 5330 jsr istr.prnt 5340 .by 'Sort Begins' 00 5350 jsr crlf 5360 rerun ldx #$0 5370 sortloop inx 5380 cpx listlen 5390 bcs sortexit 5400 stx savex 5410 lda F.Aloc.Lst,x 5420 getflnm (cmpptr1) 5430 ldx savex 5440 lda F.Aloc.Lst+1,x 5450 getflnm (cmpptr2) 5460 strcmpp (cmpptr2 cmpptr1) 5470 bcs noswap 5480 jsr sortswap 5490 noswap ldx savex 5500 jmp sortloop 5510 sortexit 5520 lda swaped 5530 beq cont 5540 lda #$01 5550 sta changed 5560 lda count 5570 jsr outbyte 5580 inc count 5590 jsr space 5600 lda #$0 5610 sta swaped 5620 jmp rerun 5630 cont 5640 jsr crlf 5650 jsr istr.prnt 5660 .by 'Sort Complete' 00 5670 jsr crlf 5680 lda changed 5690 beq main.exit 5700 jsr istr.prnt 5710 .by 'Writing File Table' 00 5720 jsr crlf 5730 stdbl (F.Aloc.Lst dta.ptr) 5740 lda #$0 5750 bdos (wrt.dirent) 5760 stdbl (sectr.buff dta.ptr) 5770 ; 5780 main.exit lda #$01 5790 rts 5800 ; 5810 sortswap 5820 ldx savex 5830 lda F.Aloc.Lst,x 5840 tay 5850 lda F.Aloc.Lst+1,x 5860 sta F.Aloc.Lst,x 5870 tya 5880 sta F.Aloc.Lst+1,x 5890 lda #$1 5900 sta swaped 5910 rts 5920 ; 5930 lookupfn 5940 stx retfnptr 5950 sty retfnptr+1 5960 pha 5970 stdbl (index indexcsr) 5980 sta multip 5990 ldx #$02 6000 loop2 add2ptr (indexcsr multip) 6010 dex 6020 bne loop2 6030 iszero (indexcsr) 6040 beq diskrd 6050 pla 6060 zxfrdbl (indexcsr fnlistcsr) 6070 jmp lookexit 6080 diskrd lda #'. 6090 jsr outchar 6100 cmpptr (fnlistptr hiram) 6110 bcs error.exit 6120 pla 6130 bdos (rd.dirent) 6140 xfrdbl (fnlistptr fnlistcsr) 6150 xfrdblz (fnlistptr indexcsr) 6160 strcpyz (dirnt.buff+file.name fnlistcsr) 6170 iny 6180 sty multip 6190 add2ptr (fnlistptr multip) 6200 lookexit xfrdblz (fnlistcsr retfnptr) 6210 rts 6220 ; 6230 error.exit 6240 jsr crlf 6250 jsr istr.prnt 6260 .by 'Out of Memory' 00 6270 jsr crlf 6280 jmp symbiosys 6290 ; 6300 changed .by 00 6310 multip .by 00 6320 count .by 00 6330 savex .by 00 6340 listlen .by 00 6350 fnlistptr .by 00 00 6360 fnlistcsr .by 00 00 6370 indexcsr .by 00 00 6380 swaped .by 00 6390 retfnptr .by 00 00 6400 cmpptr1 .by 00 00 6410 cmpptr2 .by 00 00 6420 ; 6430 .en 6440 ; 6450 ; // >