CSRCPASM INVOKE CELL POOL SERVICES ASSEMBLER DECLARES
SAC 512 SET AR ASC MODE
SYSSTATE ASCENV=AR
*
* Establish addressability to code. *
*
LAE AR12,0
BASR R12,0
USING *,R12
*
* Get data space for the cell pool. *
*
GETDSP DSPSERV CREATE,NAME=DSPCNAME,STOKEN=DSPCSTKN, X
BLOCKS=DSPBLCKS,ORIGIN=DSPCORG
*
* Add the data space to caller's access list. *
*
GETALET ALESERV ADD,STOKEN=DSPCSTKN,ALET=DSPCALET,AL=WORKUNIT
L 2,DSPCORG ORIGIN OF SPACE IN GR2
ST 2,DSPCMARK DSPCMARK IS MARK FOR DATA SPACE
*
* Copy ALET to ANCHALET for calls to cell pool services. *
*
MVC ANCHALET(4),DSPCALET
*
* Set address and size of the anchor
*
L R4,DSPCMARK
ST R4,ANCHADDR
A R4,ANCHSIZE
ST R4,DSPCMARK
*
* Call the build service. *
*
CALL CSRPBLD,(ANCHALET,ANCHADDR,USERNAME,CELLSIZE,RTNCODE)
*
* Set address and size of the extent and connect extent to cells *
*
L R4,DSPCMARK RESERVES
ST R4,XTNTADDR
A R4,XTNTSIZE SETS SIZE OF EXTENT
ST R4,CELLSTAD
A R4,CELLSTLN SETS SIZE OF CELL STORAGE
ST R4,DSPCMARK DATA
CALL CSRPEXP,(ANCHALET,ANCHADDR,XTNTADDR,XTNTSIZE, X
CELLSTAD,CELLSTLN,EXTENT,RTNCODE)
*
* Get a cell. CELLADDR receives the address of the cell. *
*
CALL CSRPGET,(ANCHALET,ANCHADDR,CELLADDR,RTNCODE)
*
* The program uses the cells.
*
* Query the pool, the extent, and the cell. *
*
CALL CSRPQPL,(ANCHALET,ANCHADDR,QNAME,QCELLSZ,QTOT_CELLS, X
QAVAIL_CELLS,QNUMEXT,QRTNCODE)
CALL CSRPQEX,(ANCHALET,ANCHADDR,EXTENT,QEXSTAT,QXTNT_ADDR, X
QXTNT_LEN,QCELL_ADDR,QCELL_LEN,QTOT_CELLS, X
QAVAIL_CELLS,QRTNCODE)
CALL CSRPQCL,(ANCHALET,ANCHADDR,CELLADDR,QCLAVL,QCLEXT, X
QRTNCODE)
*
* Free the cell. *
*
CALL CSRPFRE,(ANCHALET,ANCHADDR,CELLADDR,RTNCODE)
*
* Deactivate the extent. *
*
CALL CSRPDAC,(ANCHALET,ANCHADDR,EXTENT,RTNCODE)
*
* Disconnect the extent. *
*
CALL CSRPDIS,(ANCHALET,ANCHADDR,EXTENT,QCELL_ADDR,QCELL_LEN, X
QRTNCODE)
*
* Remove the data space from the access list. *
*
ALESERV DELETE,ALET=DSPCALET
*
* Delete the data space. *
*
DSPSERV DELETE,STOKEN=DSPCSTKN
*
* Return to caller.
*
BR 14
*****************************************************************
* Constants and data areas used by cell pool services *
*****************************************************************
*
CELLS_PER_EXTENT EQU 512
EXTENTS_PER_POOL EQU 10
CELLSIZE_EQU EQU 256
CELLS_PER_POOL EQU CELLS_PER_EXTENT*EXTENTS_PER_POOL
XTNTSIZE_EQU EQU 128+(((CELLS_PER_EXTENT+63)/64)*8)
STORSIZE_EQU EQU CELLS_PER_EXTENT*CELLSIZE_EQU
CELLS_IN_POOL DC A(CELLS_PER_POOL)
ANCHALET DS F
ANCHADDR DS F
CELLSIZE DC A(CELLSIZE_EQU)
USERNAME DC CL8'MYCELLPL'
ANCHSIZE DC F'64'
XTNTSIZE DC A(XTNTSIZE_EQU)
XTNTADDR DS F
CELLSTAD DS F
CELLSTLN DC A(STORSIZE_EQU)
CELLADDR DS F
EXTENT DS F
STATUS DS F
RTNCODE DS F
*
*****************************************************************
* Constant data and areas for data space *
*****************************************************************
*
DS 0D
DSPCSTKN DS CL8 DATA SPACE STOKEN
DSPCORG DS F DATA SPACE ORIGIN RETURNED
DSPCSIZE EQU STORSIZE_EQA*EXTENTS_PER_POOL 1.28MEG DATA SPACE
DSPBLCKS DC A((DSPCSIZE+4095)/4096) BLOCKS FOR 10K DATA SPACE
DSPCALET DS F
DSPCMARK DS F HIGH WATER MARK FOR DATA SPACE
DSPCNAME DC CL8'DATASPC1' DATA SPACE NAME
*
*****************************************************************
* Values returned by queries *
*****************************************************************
*
QNAME DS CL8
QCELLSZ DS F
QNUMEXT DS F
QEXTNUM DS F
QEXSTAT DS F
QXTNT_ADDR DS F
QXTNT_LEN DS F
QCELL_ADDR DS F
QCELL_LEN DS F
QTOT_CELLS DS F
QAVAIL_CELLS DS F
QRTNCODE DS F
RC DS F
QCLADDR DS F
QCLEXT DS F
QCLAVL DS F