1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-23 19:07:45 +00:00
PDP-10.its/bin/librm2/ddm.fbin

316 lines
9.2 KiB
Plaintext

'<PCODE "DDM">
<PACKAGE "DDM">
<ENTRY DDMOPEN DDMCLOSE DDMFLUSH DDMREAD DDMPRINT DDMDELETE DDMRDLOCK DDMWRLOCK
DDMUNLOCK DDMRESET>
<ENTRY DDMREADA DDMPRINTA DDMNEWID DDMRESERVE DDMALLOC DDMDALLOC>
<ENTRY GET-ITEM PUT-ITEM GET-DATA PUT-DATA EXTEND-ALLOC-TABLE>
<ENTRY DDMCHAN>
<ENTRY PAGSIZ ALLSIZOFS ALLLOCOFS ALLDATOFS ALLTBLPAG>
<ENTRY DDMRETRIES DDMSLEEPTIME>
<USE "MADMAN" "TENXIO" "DDMA">
"DDM ==> Direct Data Manager/Disk Data Manager
ASSUMPTIONS:
1) Object Computer is a DEC PDP10
2) Operating System is either TENEX or TOPS-20. (Not ITS!)
2a) Data File is 'holey', i.e., its pages may be non-contiguous.
2b) Page size is 512 words.
2c) Page numbers from 0 to (2**18)-1 are legal.
3) Data file 'belongs' to a single process/user, no locking, unlocking,
communication, or shared data protocols are supported.
4) All disk access are carried out by mapping pages of the data file
into core and modifying the mapped page. No direct/random access
of the data file is used.
5) The size of a data item (# of words needed to store it) must be known
before the data item is written."
<GDECL (DDMRETRIES DDMSLEEPTIME) FIX>
<SETG DDMRETRIES 600>
<SETG DDMSLEEPTIME 100>
"**************** OFFSETS ON 'DDMCHAN' TYPE *********************"
<SETG DDMFSPC 1>
<SETG DDMFPTR 2>
<SETG DDMPMAP 3>
<SETG DDMFPAG 4>
<SETG DDMFSIZ 5>
<GDECL (DDMFSPC DDMFPTR DDMPMAP DDMFPAG DDMFSIZ) FIX>
<MANIFEST DDMFSPC DDMFPTR DDMPMAP DDMFPAG DDMFSIZ>
<NEWTYPE DDMCHAN VECTOR '<VECTOR STRING JFN <UVECTOR [REST FIX]> FIX FIX>>
<SETG EMPDDMCHAN <CHTYPE <VECTOR "" <CHTYPE 0 JFN> <IUVECTOR 0 0> 0 0> DDMCHAN>>
"Offsets on page-map triads"
<SETG PMFPAG 1>
<SETG PMCPAG 2>
<SETG PMUCNT 3>
<GDECL (PMFPAG PMCPAG PMUCNT) FIX>
<MANIFEST PMFPAG PMCPAG PMUCNT>
"Offsets on request UVECTOR quads"
<SETG RQFPAG 1>
<SETG RQOFS 2>
<SETG RQLNT 3>
<SETG RQCADR 4>
<GDECL (RQFPAG RQOFS RQLNT RQCADR) FIX>
<MANIFEST RQFPAG RQOFS RQLNT RQCADR>
<SETG LOCKLNT 1>
<SETG LOCKADR 2>
<SETG LOCKCNT 3>
<SETG LOCKPTR 4>
<SETG LOCKPRV 5>
<SETG LOCKNXT 6>
<SETG LOCKSIZ 6>
<GDECL (LOCKLNT LOCKADR LOCKCNT LOCKPTR LOCKPRV LOCKNXT LOCKSIZ) FIX>
<MANIFEST LOCKLNT LOCKADR LOCKCNT LOCKPTR LOCKPRV LOCKNXT LOCKSIZ>
<GDECL (LRUCOUNT PAGSIZ MAXPAGOFS UFDPAGOFS WRDPERITM ITMPERPAG MAXITMID) FIX>
<SETG LRUCOUNT 0>
<SETG PAGSIZ 512>
<SETG MAXPAGOFS 262143>
<SETG UFDPAGOFS 131072>
<SETG WRDPERITM 2>
<SETG ITMPERPAG </ ,PAGSIZ ,WRDPERITM>>
<SETG MAXITMID <* ,ITMPERPAG <- ,MAXPAGOFS ,UFDPAGOFS>>>
<MANIFEST PAGSIZ MAXPAGOFS UFDPAGOFS WRDPERITM ITMPERPAG MAXITMID>
"Fixed offsets and sizes for allocator and item locking tables"
<GDECL (ALLTBLPAG ALLMAXSIZ ITMLOCKPAG ITMLOCKSIZ DATPAGOFS LOWDATADR DATAREASIZ
ITMLOCKOFS ITMLOCKADR ALLLOCOFS ALLLOCADR ALLSIZOFS ALLSIZADR ALLDATOFS
ALLDATADR HIGHITMOFS HIGHITMADR USEDITMOFS USEDITMADR OPENLOCKOFS OPENLOCKADR
HIGHLOCKOFS HIGHLOCKADR MINLOCKOFS MINLOCKADR MAXLOCKADR USEDLOCKOFS USEDLOCKADR
) FIX>
"Page allocations for allocator tbl and item locking tbl"
<SETG ALLTBLPAG 0>
<SETG ALLMAXSIZ 10>
<SETG ITMLOCKPAG <+ ,ALLTBLPAG ,ALLMAXSIZ>>
<SETG ITMLOCKSIZ 10>
<SETG DATPAGOFS <+ ,ITMLOCKPAG ,ITMLOCKSIZ>>
<SETG LOWDATADR <* ,DATPAGOFS ,PAGSIZ>>
<SETG DATAREASIZ <* ,PAGSIZ <- ,UFDPAGOFS ,DATPAGOFS>>>
"Offsets on allocator table pages (including page zero)"
<SETG ITMLOCKOFS 0>
<SETG ITMLOCKADR <+ ,ITMLOCKOFS <* ,ALLTBLPAG ,PAGSIZ>>>
<SETG ALLLOCOFS 1>
<SETG ALLLOCADR <+ ,ALLLOCOFS <* ,ALLTBLPAG ,PAGSIZ>>>
<SETG ALLSIZOFS 2>
<SETG ALLSIZADR <+ ,ALLSIZOFS <* ,ALLTBLPAG ,PAGSIZ>>>
<SETG ALLDATOFS 3>
<SETG ALLDATADR <+ ,ALLDATOFS <* ,ALLTBLPAG ,PAGSIZ>>>
"Offsets on item locking pages for assigning item id's"
<SETG HIGHITMOFS 0>
<SETG HIGHITMADR <+ ,HIGHITMOFS <* ,PAGSIZ ,ITMLOCKPAG>>>
<SETG USEDITMOFS 1>
<SETG USEDITMADR <+ ,USEDITMOFS <* ,PAGSIZ ,ITMLOCKPAG>>>
"Offsets on item locking pages for allocating/deallocating item locks"
<SETG OPENLOCKOFS 2>
<SETG OPENLOCKADR <+ ,OPENLOCKOFS <* ,PAGSIZ ,ITMLOCKPAG>>>
<SETG HIGHLOCKOFS 3>
<SETG HIGHLOCKADR <+ ,HIGHLOCKOFS <* ,PAGSIZ ,ITMLOCKPAG>>>
<SETG USEDLOCKOFS 4>
<SETG USEDLOCKADR <+ ,USEDLOCKOFS <* ,PAGSIZ ,ITMLOCKPAG>>>
<SETG MINLOCKOFS 5>
<SETG MINLOCKADR <+ ,MINLOCKOFS <* ,PAGSIZ ,ITMLOCKPAG>>>
<SETG MAXLOCKADR <+ <* ,PAGSIZ ,ITMLOCKPAG> <* </ <- <* ,PAGSIZ ,ITMLOCKSIZ> ,
MINLOCKOFS> ,LOCKSIZ> ,LOCKSIZ>>>
<MANIFEST ALLTBLPAG ALLMAXSIZ ITMLOCKPAG ITMLOCKSIZ DATPAGOFS LOWDATADR
DATAREASIZ ITMLOCKOFS ITMLOCKADR ALLLOCOFS ALLLOCADR ALLSIZOFS ALLSIZADR
ALLDATOFS ALLDATADR HIGHITMOFS HIGHITMADR USEDITMOFS USEDITMADR OPENLOCKOFS
OPENLOCKADR HIGHLOCKOFS HIGHLOCKADR USEDLOCKOFS USEDLOCKADR MINLOCKOFS
MINLOCKADR MAXLOCKADR>
"Random Gval's"
<GDECL (REQUV) <UVECTOR [REST FIX]> (LOCKUV UNLOCKUV) <UVECTOR [6 FIX]> (IDUV
UV2) <UVECTOR [2 FIX]> (UV1) <UVECTOR [1 FIX]>>
<SETG REQUV <IUVECTOR 400 -1>>
<SETG LOCKUV <IUVECTOR ,LOCKSIZ 0>>
<SETG UNLOCKUV <IUVECTOR ,LOCKSIZ 0>>
<SETG IDUV <IUVECTOR 2 0>>
<SETG UV2 <IUVECTOR 2 0>>
<SETG UV1 <IUVECTOR 1 0>>
<SETG DDMOPEN %<RSUBR!- '[ %<PCODE!- "DDM" 0> DDMOPEN #DECL ("VALUE" <OR
DDMCHAN FALSE> <OR STRING JFN> "OPTIONAL" FIX FIX DDMCHAN) TRANSFER LOCATION
RELEASE-SPACE WRITE-PAGE FIND-SPACE RELEASE-LOCK GET-LOCK APRINT ALENGTH AREAD
CLOSE-FILE RELEASE-PAGE RELEASE-FILE PMAP-FILE FIND-PAGE NAME-OF-FILE OPEN-FILE
GET-FILE %<RGLOC EMPDDMCHAN T> %<TYPE-W DDMCHAN VECTOR> %<TYPE-C JFN WORD> %<
RGLOC LRUCOUNT T> %<RGLOC UV1 T> T %<RGLOC UV2 T>
ALLOCATOR-TABLE-TOO-BIG!-ERRORS %<TYPE-W JFN WORD> %<RGLOC IDUV T> %<TYPE-W
SPACE VECTOR> %<RGLOC DDMRETRIES T> %<RGLOC DDMSLEEPTIME T> %<RGLOC LOCKUV T> %<
RGLOC UNLOCKUV T> ID-IS-TOO-LARGE!-ERRORS GET-ITEM PUT-ITEM %<RGLOC REQUV T>]>>
<AND <ASSIGNED? GLUE> .GLUE <PUT ,DDMOPEN PGLUE ![715827882 -22548578305
-268435456!]>>
<SETG DDMCLOSE %<RSUBR-ENTRY '[DDMOPEN DDMCLOSE #DECL ("VALUE" DDMCHAN DDMCHAN)]
413>>
<SETG DDMFLUSH %<RSUBR-ENTRY '[DDMOPEN DDMFLUSH #DECL ("VALUE" DDMCHAN DDMCHAN
"OPTIONAL" ANY)] 475>>
<SETG DDMREAD %<RSUBR-ENTRY '[DDMOPEN DDMREAD #DECL ("VALUE" ANY DDMCHAN <OR FIX
WORD> SPACE "OPTIONAL" FIX <OR ATOM FALSE>)] 571>>
<SETG DDMPRINT %<RSUBR-ENTRY '[DDMOPEN DDMPRINT #DECL ("VALUE" <OR FALSE FIX
WORD> DDMCHAN <OR FIX WORD> SPACE ANY "OPTIONAL" <OR ATOM FALSE>)] 669>>
<SETG DDMDELETE %<RSUBR-ENTRY '[DDMOPEN DDMDELETE #DECL ("VALUE" <OR FALSE FIX>
DDMCHAN <OR FIX WORD>)] 792>>
<SETG DDMRDLOCK %<RSUBR-ENTRY '[DDMOPEN DDMRDLOCK #DECL ("VALUE" <OR FALSE WORD>
DDMCHAN FIX "OPTIONAL" <OR ATOM FALSE> FIX FIX)] 915>>
<SETG DDMWRLOCK %<RSUBR-ENTRY '[DDMOPEN DDMWRLOCK #DECL ("VALUE" <OR FALSE WORD>
DDMCHAN FIX "OPTIONAL" FIX <OR FIX FLOAT>)] 1231>>
<SETG DDMUNLOCK %<RSUBR-ENTRY '[DDMOPEN DDMUNLOCK #DECL ("VALUE" <OR FALSE WORD>
DDMCHAN WORD)] 1305>>
<SETG DDMRESET %<RSUBR-ENTRY '[DDMOPEN DDMRESET #DECL ("VALUE" <OR DDMCHAN FALSE
> DDMCHAN)] 1492>>
<SETG DDMREADA %<RSUBR-ENTRY '[DDMOPEN DDMREADA #DECL ("VALUE" <OR FALSE <
PRIMTYPE WORD> <UVECTOR [REST <PRIMTYPE WORD>]>> DDMCHAN <OR FIX WORD> <OR <
PRIMTYPE WORD> <UVECTOR [REST <PRIMTYPE WORD>]>> "OPTIONAL" FIX FIX)] 1578>>
<SETG DDMPRINTA %<RSUBR-ENTRY '[DDMOPEN DDMPRINTA #DECL ("VALUE" <OR FALSE FIX
WORD> DDMCHAN <OR FIX WORD> <OR <PRIMTYPE WORD> <UVECTOR [REST <PRIMTYPE WORD>]>
> "OPTIONAL" FIX <OR FIX FALSE>)] 1703>>
<SETG DDMNEWID %<RSUBR-ENTRY '[DDMOPEN DDMNEWID #DECL ("VALUE" <OR FALSE FIX>
DDMCHAN)] 1856>>
<SETG DDMRESERVE %<RSUBR-ENTRY '[DDMOPEN DDMRESERVE #DECL ("VALUE" <OR FALSE FIX
> DDMCHAN FIX)] 1976>>
<SETG DDMALLOC %<RSUBR-ENTRY '[DDMOPEN DDMALLOC #DECL ("VALUE" <OR FALSE FIX>
DDMCHAN FIX)] 2065>>
<SETG DDMDALLOC %<RSUBR-ENTRY '[DDMOPEN DDMDALLOC #DECL ("VALUE" <OR FALSE FIX>
DDMCHAN FIX FIX)] 2102>>
"******************** PRIMITIVE FILE/DATA UTILITIES ********************"
<SETG FIND-ITEM-LOCK %<RSUBR-ENTRY '[DDMOPEN FIND-ITEM-LOCK #DECL ("VALUE" <OR
FALSE FIX> DDMCHAN FIX FIX FIX <OR ATOM FALSE>)] 2143>>
<SETG UNSPLICE-LOCK %<RSUBR-ENTRY '[DDMOPEN UNSPLICE-LOCK #DECL ("VALUE" <OR
FALSE <PRIMTYPE WORD> <UVECTOR [REST <PRIMTYPE WORD>]>> DDMCHAN WORD <UVECTOR [6
FIX]>)] 2240>>
<SETG GET-ITEM %<RSUBR-ENTRY '[DDMOPEN GET-ITEM #DECL ("VALUE" <OR FALSE <
UVECTOR [2 FIX]>> DDMCHAN FIX)] 2390>>
<SETG PUT-ITEM %<RSUBR-ENTRY '[DDMOPEN PUT-ITEM #DECL ("VALUE" <OR FALSE <
UVECTOR [2 FIX]>> DDMCHAN FIX <UVECTOR [2 FIX]>)] 2435>>
<SETG GET-DATA %<RSUBR-ENTRY '[DDMOPEN GET-DATA #DECL ("VALUE" <OR FALSE <
PRIMTYPE WORD> <UVECTOR [REST <PRIMTYPE WORD>]>> DDMCHAN <OR FIX WORD> <OR <
PRIMTYPE WORD> <UVECTOR [REST <PRIMTYPE WORD>]>> FIX "OPTIONAL" <OR ATOM FALSE>)
] 2478>>
<SETG PUT-DATA %<RSUBR-ENTRY '[DDMOPEN PUT-DATA #DECL ("VALUE" <OR FALSE <
PRIMTYPE WORD> <UVECTOR [REST <PRIMTYPE WORD>]>> DDMCHAN <OR FIX WORD> <OR <
PRIMTYPE WORD> <UVECTOR [REST <PRIMTYPE WORD>]>> FIX)] 2634>>
<SETG EXTEND-ALLOC-TABLE %<RSUBR-ENTRY '[DDMOPEN EXTEND-ALLOC-TABLE #DECL (
"VALUE" <OR FALSE FIX> DDMCHAN)] 2662>>
<SETG REQUEST-NORM %<RSUBR-ENTRY '[DDMOPEN REQUEST-NORM #DECL ("VALUE" <UVECTOR
[REST FIX]> <OR <PRIMTYPE WORD> <UVECTOR [REST <PRIMTYPE WORD>]>> FIX FIX <
UVECTOR [REST FIX]>)] 2750>>
<SETG FILL-PAGE-REQUESTS %<RSUBR-ENTRY '[DDMOPEN FILL-PAGE-REQUESTS #DECL (
"VALUE" ATOM DDMCHAN <UVECTOR [REST FIX]> <UVECTOR [REST FIX]> <OR ATOM FALSE>
"OPTIONAL" FIX)] 2869>>
<ENDPACKAGE>