;*************************************************************;*         PASCAL STANDARD ASSEMBLER PACKAGE.                *;*                                                           *;* (C) 1980 DANSK DATA ELEKTRONIK APS.                       *;*************************************************************;;*************************************************************;* FUNCTION NAME:       WAITNG                               *;*************************************************************;; CT 07-MAY-1980;;=============================================================; DESCRIPTION:; THIS FUNCTIONS TESTS IF THERE ARE ANY MESSAGES WAITING ON; THE MAIN SEMAPHORE OF THE CALLING PROCESS.; PLEASE REFER TO THE PASCAL STANDARD ASSEMBLER PACKAGE MANUAL; SECTION 4.3 FOR DETAILS.;;-------------------------------------------------------------; STACK CONTENTS ON ENTRY:     I               I;                              I---------------I;                              I  RETURN ADR.  I;                              I---------------I;                              I DUMMY ELEMENT I;                              I---------------I;                              I DUMMY ELEMENT I;                              I---------------I;                              I DUMMY ELEMENT I;                              I---------------I;                              I DUMMY ELEMENT I;                              I---------------I;                              I               I;-------------------------------------------------------------; STACK CONTENTS ON EXIT:      I               I;                              I---------------I;                              I TRUE / FALSE  I;                              I---------------I;                              I               I;=============================================================        SKIP       SYMB WAITNG:: ;;CLEAN UP ON STACK;       POP     B       ;BC:=RETURN ADDRESS       POP     D       ;REMOVE       POP     D       ;  DUMMY       POP     D       ;    ELEMENT       POP     D       ;      FROM STACK ;;GET VALUE FIELD OF MAIN SEMAPHORE;       LHLD    RUNN    ;HL->PCB OF CALLING PROCESS       LXI     D,KOSEM       DAD     D       ;HL->ADDRESS OF MAIN SEMAPHORE       MOV     E,M     ;DE->       INX     H       ;    MAIN       MOV     D,M     ;       SEMAPHORE       LDAX    D       ;A:=VALUE FIELD OF SEMAPHORE       CPI     1       ;ANY MESSAGE WAITING       JZ      OK      ;YES ;;NO MESSAGE WAITING, RETURN VALUE:=FALSE;       LXI     D,0     ;DE:=FALSE       PUSH    D       ;STACK RETURN VALUE       PUSH    B       ;RESTORE RETURN ADDRESS       RET ;;MESSAGE WAITING, RETURN VALUE:=TRUE;OK:    LXI     D,1     ;DE:=TRUE       PUSH    D       ;STACK RETURN VALUE       PUSH    B       ;RESTORE RETURN ADDRESS       RET        END