;[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 ;!TEST LD A,(BOOTDRV) ADD A,'A' LD (DEFAULT_ENV.boot_disk),A ; 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 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,ENVIRONMENT_STRING_LENGTH 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 ;!TEST from Vasil ld a,b ld (de),a ; обрезать слишком длинную строку inc de ; 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 DEF_ENV_SIZE ;E_END-ENVIRONMENT ;160 ENVIRONMENT EQU ENVADDR DEFAULT_ENV: DB 'BOOTDSK=' .boot_disk: DB 'X:',0 DEF_ENV_SIZE EQU $-DEFAULT_ENV ; DB 'SYSTEM=C:\system.exe',0 ; DB 'PATH=\SYSTEM\;\COMMAND\;',0 ; 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