;*************************************************************;*         PASCAL STANDARD ASSEMBLER PACKAGE.                *;*                                                           *;* (C) 1980 DANSK DATA ELEKTRONIK APS.                       *;*************************************************************;;*************************************************************;* PROCEDURE NAME:      DEALLO                               *;*************************************************************;; CT 05-MAY-1980;;=============================================================; DESCRIPTION:; THIS PROCEDURE DEALLOCATES A MEMORY AREA PREVIOUSLY ALLO-; CATED BY THE ALLOCA PROCEDURE.; PLEASE REFER TO THE PASCAL STANDARD ASSEMBLER PACKAGE MANUAL; SECTION 6.2 FOR DETAILS.;;-------------------------------------------------------------; STACK CONTENTS ON ENTRY:     I               I;                              I---------------I;                              I RETURN ADR.   I;                              I---------------I;                              I  -> STATUS    I;                              I---------------I;                              I   ADDRESS     I;                              I---------------I;                              I               I;-------------------------------------------------------------; STACK CONTENTS ON EXIT:      EMPTY;-------------------------------------------------------------; THE STACK CONTENTS NAMED 'ADDRESS' POINTS TO A DATA AREA; TO BE RELEASED. THE BYTE IMMEDIATELY PRECEDING THIS AREA; CONTAINS THE VALUE EE (HEX) IF THE AREA WAS INDEED ALLOCATED; USING THE ALLOCA PROCEDURE. THIS IS THE SO-CALLED FLAG BYTE.; THE TWO BYTES PRECEDING THE FLAG BYTE CONTAIN THE LENGTH OF; THE AREA. IT IS THE ADDRESS OF THESE TWO BYTES THAT IS; PASSED TO THE DELOC SUBROUTINE.;=============================================================        SKIPDEALLO:: ;;GET ADDRESS;       POP     B       ;BC=RETURN ADDRESS       POP     D       ;DE->STATUS       POP     H       ;HL=ADDRESS       PUSH    B       PUSH    D                       ;THE STACK NOW LOOKS LIKE THIS:                       ;               I               I                       ;               I---------------I                       ;               I  -> STATUS    I                       ;               I---------------I                       ;               I  RET. ADR.    I                       ;               I---------------I                       ;               I               I ;;TEST FLAG BYTE;       DCX     H       MOV     A,M     ;A:=FLAG BYTE       CPI     0EE     ;WAS AREA ALLOCATED BY ALLOCA?       JZ      NOERR   ;YES       LXI     H,1     ;NO, SET ERROR CODE IN HL       JMP     FINNOERR: MVI     M,0     ;FLAG BYTE:=ZERO ;;GET LENGTH OF AREA;       DCX     H       MOV     D,M       DCX     H       MOV     E,M       XCHG            ;DE->AREA TO BE RELEASED                       ;HL=LENGTH OF AREA ;;DEALLOCATE!;       CALL    DELOC ;;HL NOW CONTAINS STATUS VALUE;FIN:   POP     D       XCHG            ;HL->STATUS                       ;DE=STATUS VALUE       MOV     M,E     ;STORE       INX     H       ;  STATUS       MOV     M,D     ;    VALUE        RET        END