Estex-DSS/DSS/ENVIRON.ASM
Anatoliy Belyanskiy 91774c8b23 Initial commit
Estex DSS
2023-06-14 19:09:19 +10:00

242 lines
3.1 KiB
NASM

;[BEGIN]
;//MODULE: ENVIRON
;//CREATE: 10-11-2002 AUTHOR: Denis Parinov
;---------------------------------------------------------------
;Rev Date Name Description
;---------------------------------------------------------------
;R01 19-11-2002 DNS CORRECT DE ADDRESS IN GETENV
;---------------------------------------------------------------
; LD HL,MYVAR
; CALL SETENV
; LD HL,MYVAR2
; LD DE,MYBUF
; CALL GETENV
ENVIRON:
INC B
JR Z,INITENV ;B=FF
DEC B
JR Z,READENV ;B=0
DEC B
JP Z,GETENV ;B=1
DEC B
JP Z,SETENV ;B=2
LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
INITENV LD A,ENVPAGE
CALL BANK
PUSH AF
LD DE,ENVIRONMENT
XOR A
LD (DE),A
INC DE
LD HL,DEFAULT_ENV
LD BC,DEF_ENV_SIZE
LDIR
LD (DE),A
EX DE,HL
LD DE,ENVIRONMENT
AND A
SBC HL,DE
LD (ENVSIZE),HL
POP AF
OUT (SLOT3),A
AND A
RET
READENV:
PUSH HL
LD A,ENVPAGE
CALL BANK
LD H,A
LD C,SLOT3
IN L,(C)
EXX
LD HL,ENVIRONMENT
INC HL
POP DE
LD BC,(ENVSIZE)
EXX
;
.loop: OUT (C),L
EXX
LD A,(HL)
EXX
OUT (C),H
EXX
LD (DE),A
INC HL
INC DE
DEC BC
LD A,B
OR C
EXX
JR NZ,.loop
XOR A
RET
GETENV
PUSH DE
CALL ENV_EX
LD A,ENVPAGE
CALL BANK
EX AF,AF'
CALL F_ENV
POP DE
LD A,0
LD (DE),A
JR NC,GE_1
GE_0 LD A,(HL)
LDI
OR A
JR NZ,GE_0
DEC DE ;R01
LD A,#FF
GE_1 EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
AND A
RET
SETENV: CALL ENV_EX
;
LD A,ENVPAGE
CALL BANK
PUSH AF
;
CALL F_ENV
JR NC,PENV
XOR A
CPIR
LD A,B
OR C
JR Z,PENV
LDIR
; DEC DE
PENV LD A,(ENVVALUE)
OR A
JR Z,CLR_ENV
LD HL,ENVNAME
F_EVN2 LD A,(HL)
LDI
CP "="
JR NZ,F_EVN2
LD HL,ENVVALUE
F_EVN3 LD A,(HL)
LDI
OR A
JR NZ,F_EVN3
CLR_ENV XOR A
LD (DE),A
LD HL,ENVIRONMENT
EX DE,HL
SBC HL,DE
LD (ENVSIZE),HL
;
POP AF
OUT (SLOT3),A
AND A
RET
; RET:
; DE - VAR VALUE
; HL - VAR ADDRESS
; BC - ENVIRONMENT SIZE
F_ENV LD HL,ENVIRONMENT
LD BC,(ENVSIZE)
PUSH HL
F_EVN0 POP DE
LD DE,ENVNAME
XOR A
CPIR
PUSH HL
F_EVN1 LD A,(HL)
OR A
JR Z,END_OF_ENV
LD A,(DE)
CP (HL)
INC HL
INC DE
DEC BC
JR NZ,F_EVN0
CP "="
JR NZ,F_EVN1
SCF
END_OF_ENV
POP DE
RET
ENV_EX LD B,32
LD DE,ENVNAME
ENV_E0 XOR A
LD (DE),A
LD (ENVVALUE),A
ENV_E1 LD A,(HL)
INC HL
CP "="
JR Z,EQUAL_SG
OR A
JR Z,ENV_E3
CALL UPPER
LD (DE),A
INC DE
DJNZ ENV_E1
SCF
RET
ENV_E3 LD A,"="
LD (DE),A
INC DE
XOR A
LD (DE),A
INC DE
RET
EQUAL_SG:
LD (DE),A
INC DE
XOR A
LD (DE),A
LD DE,ENVVALUE
LD (DE),A
LD C,#FF
ENV_E2 LD A,(HL)
LDI
OR A
RET Z
DJNZ ENV_E2
SCF
RET
ENVNAME EQU EXEBUFF ;DS 32
ENVVALUE EQU BUFFER //#3800 ; BUFFER ;DS 128
ENVSIZE DW 1 ;E_END-ENVIRONMENT ;160
ENVIRONMENT EQU ENVADDR
DEFAULT_ENV
; DB "SYSTEM=C:\\system.exe",0
; DB "PATH=\\SYSTEM\\;\\COMMAND\\;",0
DB 0 ; "",0
DEF_ENV_SIZE EQU $-DEFAULT_ENV
; DB 0
; DB "SYSTEM=C:\system.exe",0
; DB "PATH=C:\;\FN\;",0
; DB "OS=ESTEX",0
; DB "VAR1=000",0
; DB "OSNAME=ESTEX 2002",0
; DB 0
;E_END
;[END]