* Copy files listed in command from /0 to /1. * A new file of the same type, etc. will be * created if necessary. * XEQ START COPY NPTDEFS START EQU $ CALL SETERM trap level 1 errors CALL CLOSALL close all files LDA LASTCHR retrieve last PSCAN char CPI 13 CR? JZ DONE CPI ';' semi-colon? JZ DONE MVI A,PSOPT LXI D,F0NAME point to buffer CALL PSCAN get file name JC DONE JZ DONE STA LASTCHR save last char read * MOVEFN LXI D,F0NAME LXI H,F1NAME point to filenames MOVE1 LDAX D move chars MOV M,A ORA A JZ MOVE2 end of filename INX H INX D JMP MOVE1 * MOVE2 MVI M,'/' put /1 on filename INX H MVI M,'1' INX H MVI M,0 * LXI D,F0NAME point to /0 filename LXI H,F0INFO point to buffer CALL SYS get info DB INFOP JMP ERROR LXI H,0 static buffer LXI D,F0NAME CALL SYS DB OPEOP open /0 file JMP ERROR STA FNBR0 save file number LXI H,0 static buffer LXI D,F1NAME CALL SYS DB OPEOP open /1 file JMP F1OER open error STA FNBR1 LXI H,F1NAME CALL MOUT LXI H,MSG1 file exists, OK? CALL MOUT KBOK CALL CONIN get input CPI 0H MODE? JNZ KBOK1 JMP START * KBOK1 CPI 13 CR? JNZ KBOK invalid response JMP MOVEBL file exists - OK * F1OER CPI ERNEX nonexistant file? JNZ ERROR something else LDA F0TYPE move file info STA F1TYPE LHLD F0BKS SHLD F1BKS XRA A no attributes for now STA F1ATR LXI D,F1TYPE point to block CALL SYS DB CREOP create file JMP ERROR LXI H,0 static buffer LXI D,F1NAME CALL SYS DB OPEOP open /1 file JMP ERROR STA FNBR1 save file number * MOVEBL LXI B,1000H LXI D,BUFF LDA FNBR0 CALL SYS DB RBLOP read /0 JMP CKEOF eof? LXI B,1000H LXI D,BUFF LDA FNBR1 CALL SYS DB WBLOP JMP ERROR JMP MOVEBL * CKEOF CPI EREOF eof? JNZ ERROR no MOV A,B find # bytes transferred CMA MOV B,A MOV A,C CMA MOV C,A INX B two's complement LXI H,1000H DAD B MOV B,H # bytes to BC MOV C,L LXI D,BUFF LDA FNBR1 CALL SYS write last buffer DB WBLOP JMP ERROR CALL SYS write eof to /1 DB EOFOP JMP ERROR LXI H,F0NAME print message CALL MOUT LXI H,MSG2 CALL MOUT CALL CLOSALL LXI D,F1NAME LDA F0ATR MOV H,A CALL SYS DB CHAOP JMP ERROR JMP START * CLOSALL MVI A,-1 close all files CALL SYS DB CAOP JMP ERROR RET * MOUT MOV A,M get char ORA A set flags RZ CALL CONOUT INX H JMP MOUT * SETERM LHLD SYSGLO LXI D,GLERM DAD D MVI M,-1 trap level 1 errors INX H MVI M,-1 RET * ERROR STA ERCODE MVI A,84H LXI H,F0NAME CALL UTIL DB UXOP JMP ABORT DB -1 ERCODE DB -1 LXI H,LFCR CALL MOUT JMP START * DONE EQU $ ABORT CALL CLOSALL CALL SYS DB RETOP * * Storage F0INFO DS 11 F0TYPE DS 1 F0BKS DS 2 F0ATR DS 1 F0NAME DS 8 F0OVFL DS 12 make 20 bytes for PSCAN F1TYPE DS 1 F1BKS DS 2 F1ATR DS 1 F1NAME DS 10 DB 0 LASTCHR DB 0 FNBR0 DS 1 FNBR1 DS 1 * MSG1 ASC ' already exists. Rewrite? (C/R) Abort? (MODE)' LFCR DDB 0A0DH lfcr DB 0 MSG2 ASC ' copied to disk 1' DDB 0A0DH lfcr DB 0 BUFF DS 1000H *