;[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 ENVI_L1 JR Z,INITENV ;B=FF ENVI_L2 DEC B ENVI_L3 JR Z,READENV ;B=0 DEC B JR Z,GETENV ;B=1 DEC B JR Z,SETENV ;B=2 LD A,ERR_INVALID_FUNCTION ; TODO: Call to NOP? 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 (PAGE3),A AND A RET READENV PUSH HL LD A,ENVPAGE CALL BANK LD H,A LD C,PAGE3 IN L,(C) EXX LD HL,ENVIRONMENT INC HL POP DE LD BC,(ENVSIZE) EXX ; RD_ENV1 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,RD_ENV1 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 (PAGE3),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,(SECBUF) OR A JR Z,CLR_ENV LD HL,EXEBUFF F_EVN2 LD A,(HL) LDI CP "=" JR NZ,F_EVN2 LD HL,SECBUF 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 (PAGE3),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,0xff LD DE,ENVNAME ENV_E0 XOR A LD (DE),A LD (SECBUF),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 JR ENV_E4 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,SECBUF LD (DE),A LD C,#FF ENV_E2 LD A,(HL) LDI OR A RET Z DJNZ ENV_E2 ENV_E4 LD A,B LD (DE),A INC DE SCF RET ENVNAME EQU EXEBUFF ;DS 32 ENVVALUE EQU #3800 ; BUFFER ;DS 128 ENVSIZE DW 1 ;E_END-ENVIRONMENT ;160 ENVIRONMENT EQU ENVADDR DEFAULT_ENV DB 0 ; "",0 DEF_ENV_SIZE EQU $-DEFAULT_ENV ;[END]