mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
242 lines
3.1 KiB
NASM
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]
|