home *** CD-ROM | disk | FTP | other *** search
-
- ; ===========================================================
- ; DATBADD.Z80
- ; add to the database in E-Prolog
- ; May 26, 1985
-
- .Z80
-
- FALSE EQU 0
- TRUE EQU 1
- EMPTY EQU -1
- UNDEF EQU -2
-
- HT EQU 9
- LF EQU 10
- CR EQU 13
- CTLZ EQU 26
-
- CPM EQU 0000H
- BDOS EQU CPM+0005H
- CDMA EQU CPM+0080H
- TPA EQU CPM+0100H
-
- DSEG
- ;PAIR alldb;
- ALLDB:: DS 2
- ;PAIR * alldbe;
- ALLDBE:: DS 2
- CSEG
-
- ;datbadd(relname,clause)
- ; SYMBOL * relname;
- ; EXPR clause;
- ; {
- ; static PAIR * ptr;
- DSEG
- CLAUSE: DW 0
- PTR: DW 0
- CSEG
- DBADD::
- ;
- LD (CLAUSE),DE
- ; ptr = &relname->addr;
- LD (PTR),HL
- ; if (numbp(*ptr))
- CALL INDIR##
- CALL NUMBP##
- JR Z,DB1
- ; {
- ; errmsg(" Cannot change built-in commands.\r\n");
- ; return;
- LD HL,DB1MSG
- JP ERRMSG##
- DSEG
- DB1MSG: DB ' Cannot change built-in commands.',CR,LF,0
- CSEG
- ; }
- DB1:
- ; for ( ; *ptr != (PAIR)empty ; ptr = &(*ptr)->right.list)
- ; ;
- LD HL,(PTR)
- CALL INDIR##
- LD DE,EMPTY
- CALL CPHL##
- JR Z,DB2
- INC HL
- INC HL
- LD (PTR),HL
- JR DB1
- DB2:
- ; *ptr = makepair(clause,empty);
- LD HL,(CLAUSE)
- LD DE,EMPTY
- CALL MKPAIR##
- EX DE,HL
- LD HL,(PTR)
- LD (HL),E
- INC HL
- LD (HL),D
- ; *alldbe = makepair(clause,empty);
- LD HL,(CLAUSE)
- LD DE,EMPTY
- CALL MKPAIR##
- EX DE,HL
- LD HL,(ALLDBE)
- LD (HL),E
- INC HL
- LD (HL),D
- ; alldbe = &((*alldbe)->right.list);
- DEC HL
- CALL INDIR##
- INC HL
- INC HL
- LD (ALLDBE),HL
- ; datbtop = hfree;
- LD HL,(HFREE##)
- LD (DBTOP##),HL
- ; }
- RET
-
- END