TAL Programmer's Guide
Using Extended Data Segments
Managing Addressing
B–16 096254 Tandem Computers Incorporated
D-Series Extended Segment Management Program
Example B-2 shows D-series extended segment management program.
Example B-2. D-Series Extended Segment Management Program(Page 1 of 3)
?INSPECT, SYMBOLS
?NOCODE
?PAGE "dummy page directive"
?PUSHLIST, NOLIST SOURCE $SYSTEM.SYSTEM.EXTDECS0 (
? PROCESS_DEBUG_, DEFINEPOOL, GETPOOL, PUTPOOL,
? SEGMENT_ALLOCATE_, SEGMENT_USE_, SEGMENT_DEALLOCATE_)
?POPLIST
LITERAL dealloc_flags = 1; !For SEGMENT_DEALLOCATE_
! later
LITERAL seg_id_zero = 0; !User extended data segment
LITERAL seg_id_two = 2; !IDs need not be contiguous
LITERAL seg_id_zero_len = 2048D;
LITERAL seg_id_two_len = 4096D;
INT .EXT word_ptr := -1D; !Nil pointer
STRING .EXT byte_ptr := -1D; !Nil pointer
INT .EXT pool_head := -1D; !Pointer for 19-word pool
! header in extended segment
INT .EXT pool_ptr := -1D; !Pointer for first byte after
! pool header
INT .EXT block_ptr1 := -1D; !Pool block general pointer
INT .EXT block_ptr2 := -1D; !Pool block general pointer
STRING .byte_array[-1:100]; !Byte array for local scan
STRING .EXT ba_ptr := -1D; !Extended pointer to byte
! array for extended move
STRING .offset_ptr := -1;
INT offset_x := 0;
LITERAL str_len = 47; !Length of string to move
LITERAL array_len = 102; !Length of byte array
INT status := 1000; !Beyond maximum error range
INT old_seg_num := -1; !Not a valid user extended
! data segment ID
INT error; !Outcome of system procedure