Estex-DSS/DSS/API/Ex_Path.asm

241 lines
4.7 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #45. <20> §¡®à ª®¬ ­¤­®© áâப¨.
;
; ¢å®¤: HL - 㪠§ â¥«ì ª®¬ ­¤­®© áâப¨
; DE - 㪠§ â¥«ì ­  ¡ãä¥à ¯®«ì§®¢ â¥«ï
; B - ­®¬¥à ¯®¤ä㭪樨:
; 0 - <20> §®¡à âì áâபã
; 1 - ‚뤥«¨âì ¨¬ï ¤¨áª 
; 2 - ‚뤥«¨âì ¤¨à¥ªâ®à¨î
; 3 - ‚뤥«¨âì ¨¬ï ä ©« 
; 4 - ‚뤥«¨âì à áè¨à¥­¨¥ ä ©« 
; 5 - ‚뤥«¨âì ¨¬ï ¤¨áª , ¯ãâì ª ä ©«ã, ¨¬ï ä ©«  ¨ à áè. ä ©« 
; 6 - ‡ à¥§¥à¢¨à®¢ ­® ;!TODO ¯à¥®¡à §®¢ âì ®â­®á¨â¥«ì­ë© ¯ãâì ¢ ¯®«­ë© ; [ ]
; 7 - ‚뤥«¨âì ¯ à ¬¥âà ª®¬ ­¤­®© áâப¨
; 8 - <20>८¡à §®¢ âì ¨§ 11 ᨬ¢®«ì­®£® ä®à¬ â  ¢ ä®à¬ â „Ž‘
; 9 - <20>८¡à §®¢ âì ¨§ ä®à¬ â  „Ž‘ ¢ 11 ᨬ¢®«ì­ë© ä®à¬ â
; ¢ë室: ­¥â
//////////////////////////////////////////////////////////////////////
GLOB_PR EQU 7 ;%10000000
DRIV_PR EQU 3 ;%00001000
PATH_PR EQU 2 ;%00000100
EXTN_PR EQU 1 ;%00000010
NAM_PR EQU 0 ;%00000001
EX_PATH: EXX
LD HL,NM_PATH_A ;BUILT-IN BUFFER FOR PATH ;!!!!! ¨á¯®«ì§ã¥âáï ®¡é¨© ¡ãä¥à
LD (NM_PATH),HL
LD HL,NM_NAME_A
LD (NM_NAME),HL
LD HL,NM_EXTN_A
LD (NM_EXTN),HL
LD HL,NM_DRIVE_A
LD (NM_DRIVE),HL
EXX
INC B
DEC B
JR Z,.FULL ;0 ; à §®¡à âì áâபã
DEC B
JR Z,.GET_DRIVE ;1 ; ¢ë¤¥«¨âì ¨¬ï ¤¨áª 
DEC B
JR Z,.GET_PATH ;2 ; ¢ë¤¥«¨âì ¤¨à¥ªâ®à¨î
DEC B
JR Z,.GET_NAME ;3 ; ¢ë¤¥«¨âì ¨¬ï ä ©« 
DEC B
JR Z,.GET_TYPE ;4 ; ¢ë¤¥«¨âì à áè¨à¥­¨¥ ä ©« 
DEC B
JR Z,.GET_ALL_EX ;5 ; ¢ë¤¥«¨âì ¤¨áª, ¯ãâì, ä ©« ¨ à áè.
DEC B
JR Z,.EX_RESR ;6 ; § à¥§¥à¢¨à®¢ ­®
DEC B
JP Z,GSWITCH ;7 ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
DEC B
JP Z,GetName ;8 ; ¯à¥®¡à. ¨¬ï 11 -> 8.3 ä®à¬ â
DEC B
JP Z,MASK.custom ;9 ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â
.EX_RESR: LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
; ‚뤥«¨âì ¨¬ï ¤¨áª 
.GET_DRIVE: LD (NM_DRIVE),DE
CALL .FULL
RET C
LD DE,(NM_DRIVE)
LD A,(DE)
DEC A
CP #FF
RET Z
CP "A"-1
JR C,.GD_error
CP "Z"
JR NC,.GD_error
SUB "A"-1
RET
;
.GD_error: LD A,DSS_Error.sys.INVALID_DRIVE
SCF
RET
; ‚뤥«¨âì ¤¨à¥ªâ®à¨î
.GET_PATH: LD (NM_PATH),DE
JR .FULL
; ‚뤥«¨âì ¨¬ï ä ©« 
.GET_NAME: LD (NM_NAME),DE
JR .FULL
; ‚뤥«¨âì à áè¨à¥­¨¥ ä ©« 
.GET_TYPE: LD (NM_EXTN),DE
JR .FULL
; ‚뤥«¨âì ¤¨áª, ¯ãâì, ä ©« ¨ à áè.
.GET_ALL_EX: EX DE,HL
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD (NM_DRIVE),BC
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD (NM_PATH),BC
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD (NM_NAME),BC
LD C,(HL)
INC HL
LD B,(HL)
LD (NM_EXTN),BC
EX DE,HL
;JR EX_FULL
; <20> §®¡à âì áâபã
.FULL: EX AF,AF'
EXX
XOR A
LD HL,(NM_PATH)
LD (HL),A
LD HL,(NM_NAME) ;  ¤à¥á ¡ãä¥à  ¯®¤ ¨¬ï ä ©« 
LD (HL),A
LD HL,(NM_EXTN)
LD (HL),A
LD HL,(NM_DRIVE)
LD (HL),A
EXX
EX AF,AF'
.PAT0: LD DE,TMPBUF
LD BC,#0D01 ;!HARDCODE áç¥â稪¨
.PAT1: LD A,(HL)
CALL UPPER ; a..z -> A..Z
LD (DE),A
INC HL
INC DE
INC C ; ++áç¥â稪
CP '\'
JR Z,.PATH_YEP
CP ":"
JR Z,.DRIVE_YEP
CP "!"
JR C,.NAME_YEP
CP "?"
JR Z,.GLOBP1
CP "*"
JR Z,.GLOBP1
.PAT2: DJNZ .PAT1
LD A,DSS_Error.sys.INVALID_NAME
SCF
RET
;
.GLOBP1: EX AF,AF'
SET GLOB_PR,A
EX AF,AF'
JR .PAT2
;
.NAME_YEP: LD A,2
CP C
JR Z,.NOFNAME
PUSH HL
LD HL,TMPBUF
LD DE,(NM_NAME) ;  ¤à¥á ¡ãä¥à  ¯®¤ ¨¬ï ä ©« 
LD B,0
DEC C
DEC C
LD A,C
LDIR
LD C,A
XOR A
LD (DE),A
LD HL,(NM_NAME)
LD A,"."
CPIR
JR NZ,.NOEXTN
LD C,3
LD DE,(NM_EXTN)
.EXTSK0: LD A,(HL)
OR A
JR NZ,.EXTSK1
LD A,' '
DEC HL
.EXTSK1: LD (DE),A
INC HL
INC DE
DEC C
JR NZ,.EXTSK0
XOR A
LD (DE),A
EX AF,AF'
SET EXTN_PR,A ; 㪠§ ­® à áè. ä ©« 
EX AF,AF'
.NOEXTN: EX AF,AF'
SET NAM_PR,A ; 㪠§ ­® ¨¬ï ä ©« 
EX AF,AF'
POP HL
.NOFNAME: EX AF,AF'
AND A
RET
;
.DRIVE_YEP: XOR A
LD (DE),A
PUSH HL
LD HL,TMPBUF
LD DE,(NM_DRIVE)
LD B,0
LDIR
POP HL
EX AF,AF'
SET DRIV_PR,A ; 㪠§ ­® ¨¬ï ¤¨áª 
EX AF,AF'
JP .PAT0
;
.PATH_YEP: XOR A
LD (DE),A
PUSH HL
PUSH BC
LD HL,(NM_PATH)
LD BC,#00FF ; !FIXIT £«ã¡¨­  ¡ãä¥à  ­¥ § ¢¨á¨â ®â CurrentDirectory.DEPTH
CPIR
DEC HL
EX DE,HL
LD HL,TMPBUF ; 12 ¯à®¡¥«®¢
POP BC
LD B,0
LDIR
POP HL
EX AF,AF'
SET PATH_PR,A
EX AF,AF'
JP .PAT0
;!TODO ¯¥à¥­¥áâ¨/§ ¬¥­¨âì ­  ®¡é¨©
TMPBUF: DB " ",#00 ; 12 ¯à®¡¥«®¢
NM_DRIVE: DW NM_DRIVE_A
NM_NAME: DW NM_NAME_A
NM_EXTN: DW NM_EXTN_A
NM_PATH: DW NM_PATH_A
NM_DRIVE_A: BLOCK 9,0
NM_NAME_A: DB " ",#00 ; 12 ¯à®¡¥«®¢
NM_EXTN_A: DB " ",0
NM_PATH_A EQU CORE_BUFFERS.BUFFER ;DS 256 ;!!!!! shared buffer