PAM Programming Manual

Link-Level Programming Examples
PAM Programming Manual142482
B-29
Finding a Free Buffer
IF ( ( hex_digit_ndx MOD 2 ) = 0 ) THEN
foreign_addr[ ( hex_digit_ndx DIV 2 ) + 1 ] :=
Chr ( ( hex_value * 16 ) OR
Ord ( foreign_addr[ ( hex_digit_ndx DIV 2 ) + 1 ] ) )
ELSE
foreign_addr[ ( hex_digit_ndx DIV 2 ) + 1 ] :=
Chr ( hex_value OR
Ord ( foreign_addr[ ( hex_digit_ndx DIV 2 ) + 1 ] ) );
hex_digit_ndx := ( hex_digit_ndx + 1 );
END;
{-------------------------- Initialize Buffers -------------------}
FOR buffer_lst_ndx := 0 TO ( Max_NoWait_Depth - 1 ) DO
buffer_lst[ buffer_lst_ndx ].in_use_flag := False;
END;
Finding a Free Buffer
The application must provide a function that allows it to find a free buffer to contain the
aggregate SDU.
?PAGE ’FUNCTION: Find Free Buffer’
{------------------------------------------------------------------
FUNCTION: Find Free Buffer
------------------------------------------------------------------}
FUNCTION Find_Free_Buffer
( VAR buffer_lst_ndx : LONGINT ) : BOOLEAN;
BEGIN
buffer_lst_ndx := 0;
WHILE ( buffer_lst_ndx < ( NoWait_depth ) ) DO
BEGIN
IF NOT buffer_lst [ buffer_lst_ndx ].in_use_flag THEN
BEGIN
Find_Free_Buffer := True;
RETURN;
END;
buffer_lst_ndx := ( buffer_lst_ndx + 1 );
END;
Find_Free_Buffer := False;
END;