;[BEGIN] ;//MODULE: DOS5 ;//CREATE: 19-05-1998 AUTHOR: Denis Parinov ;//UPDATE: 24-10-1999 DNS Restore module ;------------------------------------------------------------- ;Rev Date Name Description ;------------------------------------------------------------- ;R08 15-04-2003 DNS SAVE AND RESTORE CURPATH MACROS ;R07 06-02-2003 DNS FIX BUG IN MASK ROUTINE, IT ALLOW NAMES WHICH BEGAN ; FROM "." ".NAM" ;R06 29-01-2003 DNS FIX BUG WITH SET FILE DATE AND TIME ;R05 26-11-2002 DNS FIX ERROR IN CHDIR, DON'T ALLOWED "." FOR ROOT ;R04 19-11-2002 DNS DON'T ALLOW DIR & LABEL ATTR FOR FILES ;R03 19-11-2002 DNS ADD RESET OF VOLUME LABEL ATTRIBUT ;R02 19-11-2002 DNS FIX GET/SET ATTRIBUTES ;R01 16-12-1999 DNS Y2K fix ;------------------------------------------------------------- ; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00 ; A - ATTRIB ; B - MODE ; B = 0 GET ATTRIB ; B = 1 SET ATTRIB ; OUTPUT: A - ATTRIB ATTRIB INC B DEC B JR Z,RATTRIB DEC B JR Z,WATTRIB JP NOPS RATTRIB XOR A CALL OPENATR ;R02 RET C LD C,A LD A, (FM_BUF_ATTR) LD B,A LD A,C PUSH BC CALL CLOSE POP BC RET C LD A,B AND A RET WATTRIB PUSH AF XOR A CALL OPENATR ;R02 POP BC RET C LD C,A LD A,(FM_BUF_AM) SET 7,A LD (FM_BUF_AM),A RES 3,B ;CLEAR LABEL ATTR ;R03 LD A,B LD (FM_BUF_ATTR),A LD A,C PUSH BC CALL CLOSE POP BC RET C LD A,B AND A RET ; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00 ; OUTPUT: A - FM CREATE AND #E7 ;R04 LD (ACCESS),A LD (PATH+1),HL PUSH HL CALL GETWORD POP HL RET C LD HL,TMPNAME LD DE,MASKARE CALL MASK RET C CALL SEARCH CALL NC,DELFILE ;FILE EXIST RECREAT JR CREAT ; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00 ; OUTPUT: A - FM CREAT_N AND #E7 ;R04 %76A00SHR LD (ACCESS),A LD (PATH+1),HL PUSH HL CALL GETWORD POP HL RET C LD HL,TMPNAME LD DE,MASKARE CALL MASK RET C CALL SEARCH LD A,7 CCF RET C CREAT LD HL,MASKARE LD DE,HANDBUF LD BC,11 LDIR EX DE,HL LD A,(ACCESS) LD (HL),A INC HL LD BC,#0A00 FIHND LD (HL),C INC HL DJNZ FIHND PUSH HL CALL SYSTIME CALL MK_TIME POP HL LD (HL),E INC HL LD (HL),D INC HL LD (HL),C INC HL LD (HL),B INC HL LD BC,#0600 FIHND1 LD (HL),C INC HL DJNZ FIHND1 CALL WRT_HND CALL SAVEDIR PATH LD HL,0x0 XOR A JP OPEN ; TODO: Unknown code DELETE0 BIT 0x0,A SCF LD A,0x8 RET NZ ; INPUT: HL - "filename.ext",#00 without simbols * ? DELETE LD DE,MASKARE CALL MASK RET C LD HL,MASKARE LD BC,11 LD A,"?" CPIR LD A,16 SCF RET Z CALL LOADDIR CALL SEARCH RET C DELFILE XOR A CALL BANK LD (IX+NAM),0xE5 LD E,(IX+CLU1) LD D,(IX+CLU2) OUT (PAGE3),A LD A,E OR D JP Z,SAVEDIR ; SMALDEL DEL01 EX DE,HL CALL R_F_FAT PUSH DE PUSH AF LD DE,#0000 CALL W_T_FAT POP AF POP DE JR NC,DEL01 CALL WR_FAT JP SAVEDIR ; SMALDEL ; CALL SAVEDIR ; AND A ; RET ; INPUT: HL - "old_name.ext",#00 without simbols * ? ; DE - "new_name.ext",#00 without simbols * ? RENAME PUSH DE LD DE,MASKARE CALL MASK POP DE RET C LD HL,MASKARE LD BC,11 LD A,"?" CPIR LD A,16 SCF RET Z PUSH DE CALL LOADDIR LD A,#33 CALL ASEARCH POP HL RET C LD DE,MASKARE CALL MASK RET C LD HL,MASKARE LD BC,11 LD A,"?" CPIR LD A,16 SCF RET Z PUSH IX LD A,#33 CALL ASEARCH POP IX LD A,7 CCF RET C XOR A CALL BANK LD HL,MASKARE LD D,XH LD E,XL LD BC,11 LDIR OUT (PAGE3),A JP SAVEDIR OPENATR LD (ACCESS),A CALL GETWORD RET C LD HL,TMPNAME LD DE,MASKARE CALL MASK RET C LD A,#37 ;%00AD0SHR CALL ASEARCH JR NC,OPENAT RET OPEN LD (ACCESS),A CALL GETWORD RET C LD HL,TMPNAME LD DE,MASKARE CALL MASK RET C OPENEXE CALL SEARCH RET C OPENAT CALL GET_FM RET C LD A,C EX AF,AF' EXX LD (FM_BUF_HNDL),DE EXX LD HL,HANDBUF LD DE, FM_BUF LD BC,#0020 LDIR LD A,(ACCESS) LD (FM_BUF_AM),A LD A,(TASK) LD (FM_BUF_TASK),A XOR A LD (FM_BUF_FPL),A LD (FM_BUF_FPL+1),A LD (FM_BUF_FPH),A LD (FM_BUF_FPH+1),A LD A,(DRIVE) LD (FM_BUF_DC),A LD DE,(FM_BUF_ST_CL) LD (FM_BUF_DIR_CL),DE EX AF,AF' AND A RET CLOSE ;R08 LD (ACCESS),A CALL SET_FM RET C LD A,(FM_BUF_TASK) LD C,A LD A,(TASK) CP C LD A,0x13 SCF RET NZ LD A,(FM_BUF_AM) BIT 7,A JR Z,NOTMODF LD DE, (FM_BUF_DIR_CL) PUSH DE XOR A CALL SET_FM POP DE LD (FM_BUF_DIR_CL), DE CALL LOADDIR LD A,(ACCESS) CALL SET_FM LD HL,DIR LD DE,#0020 LD BC,(FM_BUF_HNDL) JR CLOSE2 CLOSE1 ADD HL,DE DEC BC CLOSE2 LD A,B OR C JR NZ,CLOSE1 EX DE,HL ;LD D,YH ;LD E,YL XOR A CALL BANK LD HL, FM_BUF LD BC,#0020 LDIR OUT (PAGE3),A CALL SAVEDIR NOTMODF LD A,(ACCESS) JP RES_FM //PATH0 DW #0000 ACCESS DB #00 HANDBUF DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 WRT_HND XOR A CALL BANK PUSH AF LD IX,DIR EXX LD DE,0 EXX WRT_HN1 LD A,(IX+00) OR A JR Z,WRT_HN2 CP #E5 JR Z,WRT_HN2 LD BC,#0020 ADD IX,BC JR NC,WRT_HN1 POP AF OUT (PAGE3),A LD A,9 SCF RET WRT_HN2 LD D,XH LD E,XL LD HL,HANDBUF LD BC,#0020 LDIR POP AF OUT (PAGE3),A LD HL,DIR LD BC,(DIRSIZE) DEC BC ADD HL,BC AND A SBC HL,DE RET NC LD HL,(DIRSIZE) LD BC,(B_P_C) ADD HL,BC LD (DIRSIZE),HL AND A RET DOSNAME INC B DEC B JR Z,GETNAME DEC B JP Z,MASK LD A,1 SCF RET ; HL - 11 bytes filename "FILENAMEEXT" ; DE - DOS filename "FILENAME.EXT",0 GETNAME LD BC,#08FF GETN1 LD A,(HL) CP " " JR NZ,GETN3 GETN2 INC HL DJNZ GETN2 JR GETN4 GETN3 LDI DJNZ GETN1 GETN4 LD A,(HL) CP " " LD A,"." JR NZ,GETN5 LD A,#00 GETN5 LD (DE),A INC DE RET Z LD B,#03 GETN6 LD A,(HL) CP " " RET Z LDI XOR A LD (DE),A DJNZ GETN6 RET DTABUF DW #0000 CURHND DW #0000 NO_NEXT DB #00 FNDMODE DB #00 F_FIRST LD (ACCESS),A LD (DTABUF),DE LD A,B LD (FNDMODE),A PUSH HL CALL LOADDIR POP HL CALL GETWORD RET C LD HL,TMPNAME LD DE,MASKARE CALL MASK RET C LD A,(ACCESS) CALL ASEARCH RET C LD HL,MASKARE LD DE,(DTABUF) LD BC,11 LDIR LD A,(ACCESS) LD (DE),A FIND_S INC DE LD BC,#0020 ADD IX,BC LD (CURHND),IX LD HL,HANDBUF+12 LD BC,20 LDIR LD A,(HANDBUF+11) LD (DE),A INC DE LD HL,HANDBUF LD A,(FNDMODE) OR A JR NZ,FIND_M2 LD BC,11 LDIR FIND_M1 LD A,1 LD (NO_NEXT),A XOR A RET FIND_M2 CALL GETNAME JR FIND_M1 F_NEXT LD A,(NO_NEXT) OR A LD A,14 SCF RET Z LD (DTABUF),DE LD HL,MASKARE EX DE, HL LD BC,11 LDIR XOR A LD (NO_NEXT),A LD A,(HL) PUSH HL CALL NSEARCH POP DE RET C JR FIND_S NSEARCH EX AF,AF' XOR A CALL BANK PUSH AF EX AF,AF' CPL LD C,A EXX LD DE,0 EXX LD IX,(CURHND) LD A,IXH OR IXL JR Z,SEARCH31 JR SEARCH1 DSEARCH LD A,#10 CALL ASEARCH RET NC LD A,4 RET SEARCH LD A,0x27 ;%00100011 ASEARCH EX AF,AF' ; 76ADLSHR XOR A CALL BANK PUSH AF EX AF,AF' CPL LD C,A LD IX,DIR EXX LD DE,0 EXX SEARCH1 LD A,(IX+00) OR A JR Z,SEARCH32 CP #E5 JP Z,SEARCH3 LD A,(IX+11) AND C JP NZ,SEARCH3 LD HL,MASKARE LD D,XH LD E,XL LD B,11 EX DE,HL SEARCH2 LD A,(DE) CP "?" JR Z,SEARCH5 CP (HL) JP NZ,SEARCH3 SEARCH5 INC HL INC DE DJNZ SEARCH2 LD D,XH LD E,XL LD HL,HANDBUF EX DE,HL LD BC,#0020 LDIR POP AF OUT (PAGE3),A AND A RET SEARCH3 EXX INC DE EXX LD DE,#0020 ADD IX,DE JP NC,SEARCH1 SEARCH31 LD E,0x23 JR SEARCH4 SEARCH32 LD E,0x3 SEARCH4 POP AF OUT (PAGE3),A LD A,E SCF RET GETWORD LD DE,TMPNAME LD BC,#0DFF GETWRD1 LD A,(HL) INC HL CP "\\" JR Z,DIRNAME CP ":" JR Z,DRVNAME LD (DE),A INC DE CP #21 CCF RET NC DJNZ GETWRD1 LD A,16 SCF RET DIRNAME LD A,#00 LD (DE),A PUSH HL LD HL,TMPNAME CALL OPENDIR POP HL JR NC,GETWORD RET DRVNAME LD A,(TMPNAME) RES 5,A SUB 0x41 PUSH HL CALL OPENDSK POP HL JR NC,GETWORD RET TMPNAME DB " ",#00 OPENDSK LD C,A LD A,(DRIVE) CP C JR NZ,OPDISK1 JR OPDISK2 OPDISK1 LD A,C CALL CHNDISK RET C OPDISK2 LD A,(LDRIVE) AND A RET OPENDIR XOR A CALL SET_FM LD A,(HL) OR A JR NZ,SUBDIR REROOT1 LD DE,0 LD (FM_BUF_ST_CL),DE CALL LOADDIR LD HL,DIRSPEC LD (HL),#5C ; \ INC HL LD (HL),#00 AND A RET SUBDIR CP "." JR NZ,SUBDIR2 LD A,(FM_BUF_ST_CL+1) LD C,A LD A,(FM_BUF_ST_CL) OR C JR NZ,SUDI1 ;R05 INC HL ;R05 LD A,(HL) ;R05 OR A ;R05 DEC HL ;R05 JR Z,REROOT1 ;R05 SUDI1 EXX LD HL,MASKARE LD DE,MASKARE+1 LD BC,10 LD (HL),#20 LDIR EXX LD DE,MASKARE SUBDIR0 LDI LD A,(HL) OR A JR NZ,SUBDIR0 JR SUBDIR3 SUBDIR2 LD DE,MASKARE CALL MASK RET C SUBDIR3 CALL FINDDIR RET C LD (FM_BUF_ST_CL),DE LD DE,#4000 LD (FM_BUF_FSL),DE CALL LOADDIR AND A RET FINDD03 LD BC,#0020 ADD IX,BC JR NC,FINDD01 FINDD04 POP AF OUT (PAGE3),A LD A,4 SCF RET ; FIND "MASKAREA" IN DIRECTORY FINDDIR XOR A CALL BANK PUSH AF LD IX,DIR FINDD01 LD A,(IX+00) OR A JR Z,FINDD04 CP #E5 JR Z,FINDD03 LD A,(IX+11) AND #10 JR Z,FINDD03 LD HL,MASKARE LD D,XH LD E,XL EX DE,HL LD B,11 FINDD02 LD A,(DE) CP "?" JR Z,FINDD05 CP (HL) JR NZ,FINDD03 FINDD05 INC HL INC DE DJNZ FINDD02 LD A,(IX+0) CP "." JR NZ,ADDSPEC LD A,(IX+1) CP "." JR NZ,IT_DIR LD HL,DIRSPEC LD D,H LD E,L LD BC,#100 XOR A CPIR DEC HL LD BC,#100 LD A,#5C ; \ CPDR INC HL AND A EX DE,HL SBC HL,DE EX DE,HL JR NZ,ROTZ INC HL ROTZ LD (HL),0 IT_DIR LD E,(IX+CLU1) LD D,(IX+CLU2) POP AF OUT (PAGE3),A AND A RET ADDSPEC LD E,XL LD D,XH LD HL,DIRSPEC LD BC,#FF XOR A CPIR DEC HL DEC HL LD A,#5C ;"\" CP (HL) INC HL JR Z,ADDSPE0 LD (HL),A INC HL ADDSPE0 LD BC,#0820 MM1 LD A,(DE) INC DE CP C JR Z,MM2 LD (HL),A INC HL MM2 DJNZ MM1 LD A,(DE) INC DE CP C JR Z,MM3 LD (HL),"." INC HL LD (HL),A INC HL LD A,(DE) INC DE CP C JR Z,MM3 LD (HL),A INC HL LD A,(DE) CP C JR Z,MM3 LD (HL),A INC HL MM3 LD (HL),0 JR IT_DIR CURRDIR EX DE,HL LD HL,DIRSPEC CURDIR1 LD A,(HL) OR A LDI JR NZ,CURDIR1 RET LOADDIR XOR A LD L,A LD H,A PUSH HL POP IX LD B,A CALL MOVE_FP XOR A CALL BANK PUSH AF LD HL,#C000 LD DE,#C001 LD BC,#3FFF LD (HL),L LDIR LD A,(DRIVE) LD (FM_BUF_DC),A LD DE,(FM_BUF_ST_CL) LD A,D OR E JR Z,LROTDIR LD HL,DIR LD DE,#4000 XOR A CALL READ LD (DIRSIZE),DE POP AF OUT (PAGE3),A AND A RET LROTDIR LD HL,(DIR_FRH) LD IX,(DIR_FRL) LD A,(DIR_S_S) LD B,32 SUB B JR NC,RTD1 ADD A,B LD B,A RTD1 LD A,(DRIVE) LD C,5 LD DE,DIR RST #18 POP AF OUT (PAGE3),A AND A RET SAVEDIR XOR A LD L,A LD H,A PUSH HL POP IX LD B,A CALL MOVE_FP XOR A CALL BANK PUSH AF LD A,(DRIVE) LD (FM_BUF_DC),A LD DE,(FM_BUF_ST_CL) LD A,D OR E JR Z,SROTDIR LD HL,DIR LD DE,(DIRSIZE) XOR A CALL WRITE POP AF OUT (PAGE3),A AND A RET SROTDIR LD HL,(DIR_FRH) LD IX,(DIR_FRL) LD A,(DIR_S_S) LD B,32 SUB B JR NC,RTD1S ADD A,B LD B,A RTD1S LD A,(DRIVE) LD C,6 LD DE,DIR RST #18 POP AF OUT (PAGE3),A AND A RET DIRSIZE DW 0 BANK LD C,A LD B,0 LD HL,BANKTBL ADD HL,BC IN A,(PAGE3) LD C,PAGE3 OUTI AND A RET BANKTBL DB #FF,#FF,#FF,#FF MASKARE DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; HL - MASK "file*.t??" ; DE - 11 bytes filename ; RET: C=2 FILE WITHOUT EXTENTION ; C=1 FILE WITH EXTENTION MASK PUSH HL PUSH DE LD H,D LD L,E INC DE LD (HL),#20 LD BC,10 LDIR POP DE POP HL LD A,(HL) CP "." ;R07 SCF ;R07 JR Z,MASKB ;R07 CP #21 MASKB LD A,16 RET C LD BC,#0902 MASK1 LD A,(HL) CP #21 CCF RET NC CP #22 JR Z,MASK7 CP "*" JR Z,MASK3 CP "+" JR Z,MASK7 CP "," JR Z,MASK7 CP "." JR Z,MASK5 CP "/" JR Z,MASK7 CP ":" JR Z,MASK7 CP ";" JR Z,MASK7 CP "<" JR Z,MASK7 CP "=" JR Z,MASK7 CP ">" JR Z,MASK7 CP "[" JR Z,MASK7 CP #5C ;"\" JR Z,MASK7 CP "]" JR Z,MASK7 CP "|" JR Z,MASK7 ; CP "a" ; JR C,MASK2 ; CP "{" ; JR NC,MASK2 ; SUB #20 CALL UPPER MASK2 LD (DE),A INC HL INC DE DJNZ MASK1 MASK7 LD A,16 SCF RET MASK3 LD A,"?" INC HL DJNZ MASK6 JR MASK7 MASK6 LD (DE),A INC DE DJNZ MASK6 LD B,1 JR MASK1 MASK5 LD A," " INC HL DJNZ MASK4 MASK51 LD B,4 DEC C JR NZ,MASK1 JR MASK7 MASK4 LD (DE),A INC DE DJNZ MASK4 JR MASK51 UPPER CP "a" RET C CP "{" JR NC,MDUPPER SUB #20 RET MDUPPER CP #A0 RET C CP #B0 JR NC,BGUPPER SUB #20 RET BGUPPER CP #E0 RET C CP #F0 JR NC,HGUPPER SUB #50 RET HGUPPER CP #F1 RET NZ DEC A RET SYSTIME LD C,#F5 RST #08 JP C,NOCMOS LD D,7 ;DAY CALL RCMOS PUSH AF LD D,8 ;MONTH CALL RCMOS POP DE LD E,A PUSH DE LD D,4 ;HOUR CALL RCMOS PUSH AF LD D,2 ;MINUTE CALL RCMOS POP DE LD E,A PUSH DE LD D,0 ;SECOND CALL RCMOS PUSH AF LD D,6 ;WEEK DAY LD C,#F6 RST #08 POP DE LD E,A PUSH DE LD D,9 ;YEAR CALL RCMOS ;READ AND CONVERT TO DECIMAL PUSH AF LD D,#32 ;CENTURY LD C,#F6 RST #08 LD XH,A POP AF CP 80 ;R01, TEST DECIMAL FIX PUSH AF JR C,XXIAGE LD A,#19 CP XH JR Z,GOODAGE JR BADAGE XXIAGE LD A,#20 CP XH JR Z,GOODAGE BADAGE PUSH AF LD D,#32 ;CENTURY LD C,#F7 RST #08 POP AF LD XH,A GOODAGE POP AF LD XL,A LD A,XH CALL BCD2HEX LD L,A LD H,0 LD C,L LD B,H LD XH,B ADD HL,HL ADD HL,HL ADD HL,BC ADD HL,HL ;*10 LD B,H LD C,L ADD HL,HL ADD HL,HL ADD HL,BC ADD HL,HL ;*10(100) EX DE,HL ADD IX,DE POP BC POP HL POP DE AND A RET RCMOS LD C,#F6 RST #08 ; INPUT : A - BCD ; OUTPUT: A - HEX BCD2HEX LD E,A RRCA RRCA RRCA RRCA AND #0F LD D,A ADD A,A ADD A,A ADD A,D ADD A,A LD D,A LD A,E AND #0F ADD A,D RET NOCMOS LD DE,(NC_DAY) ;DAY/MONTH LD HL,(NC_HOUR) ;HOUR/MINUTE LD BC,(NC_SEC) ;SECOND/WEEKDAY LD IX,(NC_YEAR) ;YEAR AND A RET NOCMOS2 LD C,0 LD (NC_DAY),DE ;DAY/MONTH LD (NC_HOUR),HL ;HOUR/MINUTE LD (NC_SEC),BC ;SECOND/WEEKDAY LD (NC_YEAR),IX ;YEAR AND A RET SETTIME DB 0xDD ; TODO: Undocumented PUSH HL PUSH BC PUSH HL PUSH DE LD C,#F5 RST #08 JR C,NOCMOS2 POP AF PUSH AF LD D,7 ;DAY CALL WCMOS POP BC LD A,C LD D,8 ;MONTH CALL WCMOS POP AF PUSH AF LD D,4 ;HOUR CALL WCMOS POP BC LD A,C LD D,2 ;MINUTE CALL WCMOS POP AF PUSH AF LD D,0 ;SECOND CALL WCMOS POP BC LD A,C LD D,6 ;WEEK DAY LD C,#F7 RST #08 POP HL XOR A LD DE,100 YR INC A SBC HL,DE JR NC,YR ADD HL,DE DEC A PUSH HL LD D,#32 ;CENTURY CALL WCMOS POP BC LD A,C LD D,9 ;YEAR CALL WCMOS AND A RET WCMOS CALL HEX2BCD LD C,#F7 RST #08 RET ; INPUT : A - HEX ; OUTPUT: A - BCD HEX2BCD LD BC,#0AFF H2B INC C SUB B JR NC,H2B ADD A,B LD B,A LD A,C RLCA RLCA RLCA RLCA AND #F0 OR B RET NC_DAY DW DAY*256+MONTH ;DAY/MONTH NC_HOUR DW 0x0000 ; HOUR/MINUTE NC_SEC DW 0x0001 ; SECOND/WEEKDAY NC_YEAR DW YEAR ; YEAR GET_D_T CALL SET_FM RET C LD E,(IY+TIM1) LD D,(IY+TIM2) LD C,(IY+DAT1) LD B,(IY+DAT2) CALL RMKTIME AND A RET PUT_D_T PUSH AF CALL MK_TIME POP AF PUSH DE PUSH BC CALL SET_FM POP BC POP DE RET C LD (IY+TIM1),E LD (IY+TIM2),D LD (IY+DAT1),C LD (IY+DAT2),B SET 7,(IY+AMODE) ;R06 AND A RET ;INPUT: D - DAY; E - MONTH ; H - HOUR; L - MINUTE ; B - SECOND (0...59) ; IX- YEAR (0...65535) ;OUTPUT: DE - hhhhhmmmmmmsssss h - hour, m - min, s - sec/2 ; BC - yyyyyyymmmmddddd y - year, m - month, d - day ; (1980-2108) MK_TIME LD A,L RLCA RLCA SLA A RL H SLA A RL H SLA A RL H SRL B OR B LD L,A LD BC,#F844 ;(-1980) ADD IX,BC LD A,E RLCA RLCA RLCA RLCA AND #F0 LD B,XL SLA A RL B OR D LD C,A EX DE,HL AND A RET ;INPUT: DE - hhhhhmmmmmmsssss h - hour, m - min, s - sec/2 ; BC - yyyyyyymmmmddddd y - year, m - month, d - day ; (1980-2108) ;OUTPUT: D - DAY; E - MONTH ; H - HOUR; L - MINUTE ; B - SECOND (0...59) ; IX- YEAR (0...65535) RMKTIME EX DE,HL LD A,C AND #1F LD D,A SRL B RR C LD A,C RRCA RRCA RRCA RRCA AND #0F LD E,A LD C,B LD B,0 LD IX,1980 ADD IX,BC LD A,L AND #1F ADD A,A LD B,A SRL H RR L SRL H RR L SRL H RR L SRL L SRL L AND A RET ; INPUT: HL - "C:\DIR\DIR\DIR_NAME[\]",0 CHDIR CALL GETWORD RET C LD HL,TMPNAME LD A,(HL) OR A CALL NZ,OPENDIR RET ; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0 MKDIR CALL GETWORD RET C LD HL,TMPNAME LD DE,MASKARE CALL MASK RET C CALL LOADDIR CALL DSEARCH LD A,15 CCF RET C CALL G_CLUST RET C PUSH HL LD DE,(ENDCLUS) CALL W_T_FAT CALL WR_FAT LD HL,MASKARE LD DE,HANDBUF LD BC,11 LDIR EX DE,HL LD A,#10 LD (HL),A INC HL LD BC,#0A00 FIHND0 LD (HL),C INC HL DJNZ FIHND0 PUSH HL CALL SYSTIME CALL MK_TIME POP HL LD (HL),E INC HL LD (HL),D INC HL LD (HL),C INC HL LD (HL),B INC HL POP DE PUSH DE LD (HL),E INC HL LD (HL),D INC HL LD BC,#0400 FIHND2 LD (HL),C INC HL DJNZ FIHND2 CALL WRT_HND CALL SAVEDIR LD HL,SECBUF LD (HL),"." LD BC,0xA20 MKD02 INC HL LD (HL),C DJNZ MKD02 INC HL LD DE,HANDBUF+11 EX DE,HL LD BC,21 LDIR EX DE,HL LD (HL),"." INC HL LD (HL),"." LD BC,0x0920 MKD03 INC HL LD (HL),C DJNZ MKD03 INC HL PUSH HL XOR A CALL BANK POP HL PUSH AF LD A,(DIR) CP "." LD DE,DIR+11 JR Z,MKD04 LD IX,HANDBUF XOR A LD (IX+CLU1),A LD (IX+CLU2),A LD DE,HANDBUF+11 MKD04 EX DE,HL LD BC,21 LDIR POP AF OUT (PAGE3),A EX DE,HL LD D,H LD E,L INC DE LD (HL),0 LD BC,512-65 LDIR POP HL CALL NSECTOR LD A,(S_P_C) MKD12 PUSH AF PUSH HL PUSH IX IN A,(PAGE3) PUSH AF IN A,(PAGE0) OUT (PAGE3),A ; LD DE,SECBUF+#C000 LD B,1 LD A,(DRIVE) LD C,6 RST #18 ; POP AF OUT (PAGE3),A LD HL,SECBUF LD DE,SECBUF+1 LD BC,511 LD (HL),0 LDIR POP IX POP HL INC IX LD A,XH OR XL JR NZ,MKD11 INC HL MKD11 POP AF DEC A JR NZ,MKD12 AND A RET ; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0 RMDIR CALL GETWORD RET C LD HL,TMPNAME LD DE,MASKARE CALL MASK RET C LD HL,MASKARE LD BC,11 LD A,"?" CPIR LD A,16 SCF RET Z CALL LOADDIR CALL DSEARCH RET C LD HL,(HANDBUF+CLU1) PUSH IX RMD17 PUSH HL CALL NSECTOR LD A,(S_P_C) RMD12 PUSH AF PUSH HL PUSH IX IN A,(PAGE3) PUSH AF IN A,(PAGE0) OUT (PAGE3),A LD DE,SECBUF+#C000 LD BC,#0105 LD A,(DRIVE) RST #18 POP AF OUT (PAGE3),A LD B,16 LD HL,SECBUF RMD10 LD A,(HL) OR A JR Z,RMD15 ; DIR EMPTY CP "." JR Z,RMD14 CP #E5 JR Z,RMD14 LD DE,11 ADD HL,DE LD A,(HL) SBC HL,DE AND 0x8 JR Z,RMD16 ; DIR NOT EMPTY RMD14 LD DE,#0020 ADD HL,DE DJNZ RMD10 POP IX POP HL INC IX LD A,XH OR XL JR NZ,RMD11 INC HL RMD11 POP AF DEC A JR NZ,RMD12 POP HL CALL R_F_FAT EX DE,HL JR NC,RMD17 RMD18 POP IX JP DELFILE RMD15 POP IX POP HL POP AF POP HL JR RMD18 RMD16 POP IX POP HL POP AF POP HL POP IX LD A,11 SCF RET ;//MODULE: DOS5 ;[END]