ser2net port tcp,2000 device serialdev, /dev/ttyUSB0, 4800n81,local=false [4800N81,HANGUP_WHEN_DONE] (Debian GNU/Linux) >pr 0010 ; 0020 ; batch cp command binary 0030 ; 0040 ; For Symbiosys with B.D.O.S. Ver.V Rel.II or above. 0050 ; 0060 ; House Harris 0070 ; December 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 openflfn .de $20 0630 ; 0640 hex.dump .de $9f03 0650 symbiosys .de $9003 0660 ; 0670 errorhndlr .de $9010 0680 lib.puts .de $9013 0690 date.prnt .de $901c 0700 rtc.read .de $901f 0710 rtc.write .de $9022 0720 dir.prnt .de $9025 0730 istr.prnt .de $9028 0740 lib.atoi .de $902b 0750 ptrn.match .de $902e 0760 proc.flist .de $9031 0770 verify .de $9034 0780 ver.prompt .de $9037 0790 lba.prnt .de $903a 0800 lib.parsfn .de $903d 0810 ; 0820 buffer.ptr .de $a0 0830 word.rtrn .de $a2 0840 genbuf.pt2 .de $a4 0850 fsave.x .de $a6 0860 ztemp .de $eb 0870 ; 0880 warment .de $8003 0890 usrent .de $8035 0900 outbyte .de $82fa 0910 ascnib .de $8275 0920 getchar .de $8a58 0930 outchar .de $8a47 0940 crlf .de $834d 0950 space .de $8342 0960 pshove .de $8208 0970 parnr .de $a649 0980 par3 .de $a64a 0990 par2 .de $a64c 1000 par1 .de $a64e 1010 techo .de $a653 1020 ; 1030 sectr.buff .de $0200 1040 osctrlblk .de $0300 1050 cli.buffer .de osctrlblk ;size 80 1060 pattern .de cli.buffer+80 ;size 32 1070 date.buff .de pattern+32 ;size 10 1080 byte.count .de date.buff+10 ;size 2 1090 ; 1100 ivmp.addr .de $37c 1110 ; 1120 of.bvffer .de $3a0 1130 ; 1140 of.rae .de $3ef ;temporary open file for RAE 1150 ; 1160 F.Aloc.Lst .de $0400 1170 dirnt.buff .de $0500 1180 ; 1190 RAE.warm .de $b003 1200 RAE.txtst .de $100 1210 RAE.tpres .de $d3 1220 ; 1230 ; 1240 ; Files Header 1250 ; 1260 file.color .de $00 ;size 1 1270 file.name .de file.color+1 ;size 30 1280 file.ver .de file.name+30 ;size 1 1290 file.size .de file.ver+1 ;size 8 1300 file.ctime .de file.size+8 ;size 8 1310 file.mtime .de file.ctime+8 ;size 8 1320 file.atrib .de file.mtime+8 ;size 4 1330 file.load .de file.atrib+4 ;size 4 1340 file.loc .de file.load+4 ;size 4 1350 file.comnt .de file.loc+4 1360 ; 1370 of.lba .de $00 ;size 3 1380 of.size .de of.lba+3 ;size 2 1390 of.flptr .de of.size+2 ;size 2 1400 of.flags .de of.flptr+2 ;size 1 1410 ; 1420 of.close .de %11111110 1430 of.open .de %00000001 1440 ; 1450 w .de $00 1460 r .de $01 1470 rw .de $02 1480 ; 1490 !!!zfopen .md (mode indic.zarg) 1500 ldy #$ff 1510 ...loop iny 1520 lda (indic.zarg),y 1530 sta pattern,y 1540 bne ...loop 1550 ldx #openfile 1560 lda #mode 1570 jsr call.bdos 1580 .me 1590 ; 1600 !!!fopen .md (mode locvs.flnm) 1610 ldy #$ff 1620 ...loop iny 1630 lda locvs.flnm,y 1640 sta pattern,y 1650 bne ...loop 1660 ldx #openfile 1670 lda #mode 1680 jsr call.bdos 1690 .me 1700 ; 1710 !!!fopenfn .md (mode flnum) 1720 ldx #openflfn 1730 lda #mode 1740 ldy flnum 1750 jsr call.bdos 1760 .me 1770 ; 1780 !!!parsefn .md (zarg) 1790 lda *zarg 1800 sta *buffer.ptr 1810 lda *zarg+1 1820 sta *buffer.ptr+1 1830 jsr lib.parsfn 1840 bcs ...exit 1850 adc *zarg 1860 sta *zarg 1870 clc 1880 ...exit .me 1890 ; 1900 !!!fclose .md (flhndl) 1910 ldx flhndl 1920 lda of.bvffer+of.flags,x 1930 and #of.close 1940 sta of.bvffer+of.flags,x 1950 .me 1960 ; 1970 !!!rd.dir .md (flhndl locvs.dest) 1980 lda #l,locvs.dest 1990 sta dta.ptr 2000 lda #h,locvs.dest 2010 sta dta.ptr+1 2020 ldy flhndl 2030 sec 2040 ldx #rwdirfh 2050 jsr call.bdos 2060 .me 2070 ; 2080 !!!wr.dir .md (flhndl locvs.src) 2090 lda #l,locvs.src 2100 sta dta.ptr 2110 lda #h,locvs.src 2120 sta dta.ptr+1 2130 ldy flhndl 2140 clc 2150 ldx #rwdirfh 2160 jsr call.bdos 2170 .me 2180 ; 2190 !!!rd.sect .md (flhndl) 2200 ldy flhndl 2210 sec 2220 ldx #rwsectfh 2230 jsr call.bdos 2240 .me 2250 ; 2260 !!!wr.sect .md (flhndl) 2270 ldy flhndl 2280 clc 2290 ldx #rwsectfh 2300 jsr call.bdos 2310 .me 2320 ; 2330 ; osflag values 2340 ; 2350 showprgrs .de %10000000 2360 readfrwrd .de %00000001 2370 verifymode .de %00000010 2380 fullpath .de %00000100 2390 ; 2400 !!!rstosfl .md (mask) 2410 pha 2420 lda #mask 2430 eor #$ff 2440 and osflags 2450 sta osflags 2460 pla 2470 .me 2480 !!!setosfl .md (mask) 2490 pha 2500 lda #mask 2510 ora osflags 2520 sta osflags 2530 pla 2540 .me 2550 ; 2560 !!!tstosfl .md (mask) 2570 lda #mask 2580 bit osflags 2590 .me 2600 ; 2610 !!!cmpdbl .md (first second) 2620 sec 2630 lda first 2640 sbc second 2650 sta *ztemp 2660 lda first+1 2670 sbc second+1 2680 ora *ztemp 2690 .me 2700 ; 2710 !!!puts .md (strng) 2720 lda #l,strng 2730 ldy #h,strng 2740 jsr lib.puts 2750 .me 2760 ; 2770 !!!argputs .md (arg) 2780 lda arg 2790 ldy arg+1 2800 jsr lib.puts 2810 .me 2820 ; 2830 !!!stdbl .md (src dst) 2840 pha 2850 lda #l,src 2860 sta dst 2870 lda #h,src 2880 sta dst+1 2890 pla 2900 .me 2910 ; 2920 !!!dprintf .md (src) 2930 pha 2940 lda #l,src 2950 sta *buffer.ptr 2960 lda #h,src 2970 sta *buffer.ptr+1 2980 jsr date.prnt 2990 pla 3000 .me 3010 ; 3020 !!!getdate .md (dest) 3030 pha 3040 lda #l,dest 3050 sta *buffer.ptr 3060 lda #h,dest 3070 sta *buffer.ptr+1 3080 jsr rtc.read 3090 pla 3100 .me 3110 ; 3120 !!!datecpy .md (source dest) 3130 ldx #8 3140 ...loop lda source-1,x 3150 sta dest-1,x 3160 dex 3170 bne ...loop 3180 .me 3190 ; 3200 !!!bdos .md (funct) 3210 ldx #funct 3220 jsr call.bdos 3230 .me 3240 ; 3250 !!!zrgatoi .md (zargv dest) 3260 ldx #zargv-zargv[0] 3270 lda #l,dest 3280 ldy #h,dest 3290 jsr lib.atoi 3300 .me 3310 ; 3320 !!!zrgputs .md (indic.zarg) 3330 ldy #$ff 3340 ...loop iny 3350 lda (indic.zarg),y 3360 jsr outchar 3370 bne ...loop 3380 .me 3390 ; 3400 !!!zargcpy .md (indic.zarg locvs.dest) 3410 ldy #$ff 3420 ...loop iny 3430 lda (indic.zarg),y 3440 sta locvs.dest,y 3450 bne ...loop 3460 .me 3470 ; 3480 !!!movdbl .md (src dst) 3490 pha 3500 lda src 3510 sta dst 3520 lda src+1 3530 sta dst+1 3540 pla 3550 .me 3560 ; 3570 !!!decdbl .md (loc) 3580 lda loc 3590 bne ...skip 3600 dec loc+1 3610 ...skip dec loc 3620 .me 3630 ; 3640 !!!cmpzdbl .md (loc) 3650 lda loc 3660 ora loc+1 3670 .me 3680 ; 3690 ; 3700 !!!phdbl .md (locvs) 3710 lda #h,locvs 3720 pha 3730 lda #l,locvs 3740 pha 3750 .me 3760 ; 3770 !!!strcmpx .md (str1 str2) 3780 ldy #$ff 3790 ...loop iny 3800 lda str2,y 3810 beq ...fin2 3820 lda (str1),y 3830 beq ...fin1 3840 cmp str2,y 3850 beq ...loop 3860 bne ...exit 3870 ...fin2 lda (str1),y 3880 beq ...exit 3890 sec 3900 bcs ...exit 3910 ...fin1 lda str2,y 3920 beq ...exit 3930 clc 3940 ...exit nop 3950 .me 3960 ; 3970 !!!strcmp .md (str1 str2) 3980 lda str1 3990 sta ZT1 4000 lda str1+1 4010 sta ZT1+1 4020 lda #l,str2 4030 sta *ZT2 4040 lda #h,str2 4050 sta *ZT2+1 4060 jsr lib.strcmp 4070 .me 4080 ; 4090 !!!strcpy .md (src dst) 4100 ldx #$ff 4110 ...loop inx 4120 lda src,x 4130 beq ...exit 4140 sta dst,x 4150 jmp ...loop 4160 ...exit sta dst,x 4170 .me 4180 ; 4190 !!!process .md (proc) 4200 lda #l,proc 4210 sta ivmp.addr 4220 lda #h,proc 4230 sta ivmp.addr+1 4240 jsr proc.flist 4250 .me 4260 ; 4270 .ba $6000 4280 .es 4290 ; 4300 teststr .de $90 4310 ZT1 .de $92 4320 ZT2 .de $94 4330 ; 4340 cmnd.cp lda *zargc 4350 cmp #3 4360 bcs prs.arg[2] 4370 cp.err jsr istr.prnt 4380 .by '[usernum:]sourcefn [usernum:]destfn [-[voh] ...]' $00 4390 rts 4400 erropt jsr istr.prnt 4410 .by 'options must be -[ovh]' 00 4420 rts 4430 prs.arg[2] rstosfl (fullpath) 4440 parsefn (zargv[2]) 4450 err.hop bcs cp.err 4460 tstosfl (fullpath) 4470 beq no.dstpath 4480 movdbl (path.user dst.usrnum) 4490 jmp prs.arg[1] 4500 no.dstpath movdbl (cwd dst.usrnum) 4510 prs.arg[1] rstosfl (fullpath) 4520 parsefn (zargv[1]) 4530 bcs err.hop 4540 tstosfl (fullpath) 4550 beq no.srcpath 4560 movdbl (path.user src.usrnum) 4570 jmp prs.arg[3] 4580 no.srcpath movdbl (cwd src.usrnum) 4590 prs.arg[3] lda *zargc 4600 cmp #$4 4610 bcs skipexit 4620 jmp cp.cont 4630 skipexit lda #$03 4640 sta argvs 4650 scanargs sta doubler 4660 clc 4670 adc doubler 4680 tay 4690 lda zargv[0],y 4700 sta teststr 4710 lda zargv[0]+1,y 4720 sta teststr+1 4730 strcmp (teststr oopt) 4740 bne chkvopt 4750 inc oflag 4760 jmp scancont 4770 chkvopt strcmp (teststr vopt) 4780 bne chkhopt 4790 inc vflag 4800 jmp scancont 4810 chkhopt ;strcmp (teststr hopt) 4820 ;bne erroropt 4830 jsr crlf 4840 jsr istr.prnt 4850 .by '-o Overwrite Destination' $0d $0a 00 4860 jsr istr.prnt 4870 .by '-v Verify Mode' $0d $0a 00 4880 jsr istr.prnt 4890 .by '-h This Help' $0d $0a 00 4900 erroropt jmp erropt 4910 scancont ldx argvs 4920 inx 4930 txa 4940 cmp *zargc 4950 bcs cp.cont 4960 inc argvs 4970 lda argvs 4980 jmp scanargs 4990 cp.cont setosfl (readfrwrd) 5000 setosfl (fullpath) 5010 rstosfl (showprgrs) 5020 lda vflag 5030 beq skipv 5040 setosfl (verifymode) 5050 jmp skipvend 5060 skipv rstosfl (verifymode) 5070 skipvend movdbl (src.usrnum path.user) 5080 zargcpy (zargv[1] pattern) 5090 process (copyproc) 5100 lda #1 5110 rts 5120 ; 5130 prnt.path lda path.user+1 5140 jsr outbyte 5150 lda path.user 5160 jsr outbyte 5170 lda #': 5180 jsr outchar 5190 rts 5200 ; 5210 ; 5220 copyproc 5230 lda *fsave.x 5240 sta sv.x 5250 movdbl (src.usrnum path.user) 5260 jsr prnt.path 5270 puts (sectr.buff+file.name) 5280 puts (cpto.symb) 5290 ; fopen (r sectr.buff+file.name) 5300 fopenfn (r ilba8) 5310 bcc src.opened 5320 jsr istr.prnt 5330 .by 'source file open error' $00 5340 rts 5350 src.opened sta src.flhdl 5360 movdbl (dst.usrnum path.user) 5370 jsr prnt.path 5380 ldy #0 5390 lda (zargv[2]),y 5400 bne is.dstflnm 5410 puts (sectr.buff+file.name) 5420 jsr space 5430 lda oflag 5440 beq wopen 5450 rstosfl (readfrwrd) 5460 fopen (rw sectr.buff+file.name) 5470 setosfl (readfrwrd) 5480 bcc dst.opened 5490 bcs dst.ferror 5500 wopen fopen (w sectr.buff+file.name) 5510 bcc dst.opened 5520 dst.ferror jsr istr.prnt 5530 .by 'dest file open error' $00 5540 rts 5550 is.dstflnm zrgputs (zargv[2]) 5560 jsr space 5570 lda oflag 5580 beq wopen2 5590 rstosfl (readfrwrd) 5600 zfopen (rw zargv[2]) 5610 setosfl (readfrwrd) 5620 bcc dst.opened 5630 bcs dst.ferror 5640 wopen2 zfopen (w zargv[2]) 5650 bcs dst.ferror 5660 dst.opened sta dst.flhdl 5670 stdbl (sectr.buff dta.ptr) 5680 lda #0 5690 sta ilba0 5700 cp.loop rd.sect (src.flhdl) 5710 wr.sect (dst.flhdl) 5720 lda ilba0 5730 ldx src.flhdl 5740 cmp of.bvffer+of.size+1,x 5750 bcs cp.finish 5760 inc ilba0 5770 bne cp.loop 5780 cp.finish rd.dir (src.flhdl sectr.buff) 5790 rd.dir (dst.flhdl dirnt.buff) 5800 lda sectr.buff+file.color 5810 sta dirnt.buff+file.color 5820 movdbl (sectr.buff+file.size dirnt.buff+file.size) 5830 movdbl (sectr.buff+file.load dirnt.buff+file.load) 5840 datecpy (sectr.buff+file.mtime dirnt.buff+file.mtime) 5850 wr.dir (dst.flhdl dirnt.buff) 5860 stdbl (sectr.buff dta.ptr) 5870 cp.exit fclose (src.flhdl) 5880 fclose (dst.flhdl) 5890 lda sv.x 5900 sta *fsave.x 5910 movdbl (src.usrnum path.user) 5920 ; stdbl (copyproc ivmp.addr) 5930 zargcpy (zargv[1] pattern) 5940 jsr crlf 5950 rts 5960 ; 5970 lib.strcmp 5980 ldy #$ff 5990 cmp.loop iny 6000 lda (ZT2),y 6010 beq cmp.fin2 6020 lda (ZT1),y 6030 beq cmp.fin1 6040 cmp (ZT2),y 6050 beq cmp.loop 6060 bne cmp.exit 6070 cmp.fin2 lda (ZT1),y 6080 beq cmp.exit 6090 sec 6100 bcs cmp.exit 6110 cmp.fin1 lda (ZT2),y 6120 beq cmp.exit 6130 clc 6140 cmp.exit rts 6150 ; 6160 ; 6170 cpto.symb .by ' ---> ' $00 6180 src.flhdl .by $00 6190 dst.flhdl .by $00 6200 dst.usrnum .by $00 $00 6210 src.usrnum .by $00 $00 6220 sv.osflgs .by $00 6230 sv.x .by $00 6240 oopt .by '-o' 00 6250 oflag .by 00 6260 vopt .by '-v' 00 6270 vflag .by 00 6280 hopt .by '-h' 00 6290 doubler .by 00 6300 argvs .by 00 6310 ; 6320 .en 6330 ; 6340 ; 6350 ; end of cp binary 6360 ; // >