TAL Programmer's Guide

Using Extended Data Segments
Managing Addressing
B–18 096254 Tandem Computers Incorporated
Example B-2. D-Series Extended Addressing Program
(Page 3 of 3)
!USE new extended data segment for more manipulations.
status := SEGMENT_USE_ (seg_id_two, , block_ptr1);
IF status <> 0 THEN CALL PROCESS_DEBUG_;
@pool_ptr := @pool_head + %47D;
!Store first byte address
! after pool header
status := DEFINEPOOL (pool_head, pool_ptr, 4000D);
IF status <> 0 THEN CALL PROCESS_DEBUG_;
@block_ptr1 := GETPOOL (pool_head , 101D);
!For content of BYTE_ARRAY
IF <> THEN CALL PROCESS_DEBUG_;
block_ptr1 ':=' byte_array[-1] FOR array_len BYTES;
!Move BYTE_ARRAY to first
! pool in extended segment
@block_ptr2 := GETPOOL (pool_head, 1000D);
!Get second pool in current
! extended segment
IF <> THEN CALL PROCESS_DEBUG_;
block_ptr2 ':=' [8, 16, 32, 40, 48, 56, 64, 128];
!Move constant list into
! this pool in extended
! segment
CALL PUTPOOL (pool_head, block_ptr1);
!Give first pool back
IF <> THEN CALL PROCESS_DEBUG_;
CALL PUTPOOL (pool_head, block_ptr2);
!Give second pool back
IF <> THEN CALL PROCESS_DEBUG_;
CALL SEGMENT_DEALLOCATE_ (seg_id_two, dealloc_flags);
CALL SEGMENT_DEALLOCATE_ (seg_id_zero, dealloc_flags);
END;