{ *************************************************************************** } MODULE mod_handle_shared_area ; { Created 25-MAR-1991 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE } { *************************************************************************** } INCLUDE mod_handle_tracing, $MUTEX ; {from ELN$:RTLOBJECT.OLB } { *************************************************************************** } EXPORT find_area_lock ; {PROCEDURE create & initialize or connect to existing area } { *************************************************************************** } IMPORT handle_trc_sys, {from module MOD_HANDLE_TRACING } handle_trc_err, {from module MOD_HANDLE_TRACING } handle_trc_sta, {from module MOD_HANDLE_TRACING } AREA_LOCK_VARIABLE, {from module $MUTEX } ELN$INITIALIZE_AREA_LOCK ; {from module $MUTEX } { *************************************************************************** } PROCEDURE find_area_lock ( caller : VARYING_STRING(16) := '' ; area_name : VARYING_STRING(20) ; VAR area_object : AREA ; VAR area_pointer :^ANYTYPE ; area_size : INTEGER ; VAR status : INTEGER ) ; TYPE generic_shared_area = PACKED RECORD lock : AREA_LOCK_VARIABLE ; body : STRING( area_size - 2 ) ; {SIZE(AREA_LOCK_VARIABLE) = 2} END ; VAR dummy :^generic_shared_area ; BEGIN CREATE_AREA ( area_object, dummy, area_name, STATUS := status ) ; area_pointer := dummy ; IF ( ( status MOD 8 ) <> 1 ) THEN BEGIN { failure creating area } handle_trc_sta ( TAG := 'CRE/SHA%', STATUS := status ) ; handle_trc_err ( TAG := 'CRE/SHA% ' + caller, MESSAGE := ' Failed Creating Area ' + area_name ) ; END ELSE BEGIN { success creating area } IF ( status = 1 ) THEN BEGIN { this is a new area } ELN$INITIALIZE_AREA_LOCK ( area_object, dummy^.lock, status ) ; IF ( status <> 1 ) THEN BEGIN handle_trc_sta ( TAG := 'INI/LCK%', STATUS := status ) ; handle_trc_err ( TAG := 'INI/LCK% ' + caller, MESSAGE := ' Failed Initializing Area ' + area_name ) ; END ; END ELSE BEGIN { the area was already created, no initialize } status := 1 ; handle_trc_sys ( TAG := 'CON/SHA% ' + caller, MESSAGE := ' Connected to Existing Area ' + area_name ) ; END ; END ; END ; { *************************************************************************** } { *************************************************************************** } END.