PAM Programming Manual
Link-Level Programming Examples
PAM Programming Manual—142482
B-8
Finding a Free Buffer
Finding a Free Buffer
The application must provide a function that allows it to find a free buffer to contain the 
aggregate SDU.
--/---------------------------------------------------------------/
-- FUNCTION: Find Free Buffer
--/---------------------------------------------------------------/
INT PROC Find^Free^Buffer ( buffer^lst^ndx );
 INT(32) .buffer^lst^ndx;
BEGIN
 buffer^lst^ndx := 0D;
 WHILE ( buffer^lst^ndx < $UDbl ( NoWait^depth ) ) DO
 BEGIN
 IF NOT buffer^lst^ptr[buffer^lst^ndx].in^use^flag THEN
 RETURN True;
 buffer^lst^ndx := buffer^lst^ndx + 1D;
 END;
 RETURN False;
END;
Building an Aggregate SDU
The application must provide a function for building the aggregate SDU.
--/---------------------------------------------------------------/
-- PROC: Build Aggr SDU
--/---------------------------------------------------------------/
INT PROC Build^Aggr^SDU ( Aggr^SDU^buf^ptr );
 STRING .EXT Aggr^SDU^buf^ptr;
BEGIN
 INT SDU^ndx;
 INT frmt^error;
 INT data^offset^b;
 IF ( ( frmt^error := ZL2S^Frmt^Aggr^SDU^Hdr^
 ( Aggr^SDU^buf^ptr, Max^Req^Size^B ) ) <>
 ZL2S^Err^Frmt^Ok ) THEN
 BEGIN
 CALL Clear^Report^Buffer;
 report^buf^ptr ’:=’ [”Aggr SDU Hdr Error: “];
 CALL NumOut ( report^buf^ptr[18], frmt^error, 10, 2 );
 CALL Write^Report^Buf^and^AbEnd;
 END;
--/---------------------------------------------------------------/
-- In case there are 0 SDUs to build.
--/---------------------------------------------------------------/
 data^offset^b := $Len ( ZL2S^DDL^Aggr^SDU^Hdr^Def );
 FOR SDU^ndx := 1 to SDU^cnt DO
 BEGIN
 IF ( ( frmt^error := ZL2S^Frmt^SDU^Hdr^
 ( Aggr^SDU^buf^ptr,
 Port^type,
 Command^Code,
 P^F^flag,
 rsp^flag,
 Foreign^addr^ptr,
 data^offset^B,










