DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Hard and Floppy Disks

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Hard and Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦a900a5d7d⟧ TextFile

    Length: 6148 (0x1804)
    Types: TextFile
    Names: »VOL_STRUCTURES.S«

Derivation

└─⟦b8af24a88⟧ Bits:30005796 CR80 Disc Pack ( MINICAMPS )
    └─ ⟦this⟧ »GENS.D!SWELLPREFIX.D!VOL_STRUCTURES.S« 

TextFile

"-----------------------------------------------------------------------
"
"
"  MODULE NAME:      VOLUME STRUCTURES  (VOL_STRUCTURES.S)
"  MODULE ID NMB:    CSS/882
"  MODULE VERSION:   0101
"  MODULE TYPE:      PREFIX
"  MERGE  FILES:     -
"  
"  SPECIFICATIONS:   -
"  AUTHOR/DATE:      MAC/801120
"
"  DELIVERABLE:      -
"  SOURCE LANGUAGE:  SWELL
"  COMPILE COMPUTER: CR80
"  TARGET COMPUTER:  CR80
"  OPER. SYSTEM:     AMOS
"
"-----------------------------------------------------------------------
"
"  CHANGE RECORD
"
"  VERSION    AUTHOR/DATE    DESCRIPTION OF CHANGE
"  -------    -----------    ---------------------
"
"     1.1     MAC/801121      INITIAL RELEASE
"
"-----------------------------------------------------------------------
"PAGE«ff»


" NOTE: THE PREFIX FMSPARAMS.S SHOULD BE INCLUDED BEFORE THIS PREFIX."
" ====  THIS PREFIX CANNOT BE USED IF THE PREFIX IOSPARAMS.S IS INCLUDED."

"*************************"
"  INITIAL VOLUME LAYOUT  "
"*************************"

CONST
  "SECTOR ADDRESSES:"
  HBADDR_LEAST=0;   "HOME BLOCK."
  HBADDR_MOST =0;
  MAX_BAD_SECTORS = 8;
  "INITIAL ENTRIES IN THE BFD:"
  BFDENTRYNBR_LEAST=0;
  BFDENTRYNBR_MOST =0;
  MDENTRYNBR_LEAST =1;
  MDENTRYNBR_MOST  =0;
  BMENTRYNBR_LEAST =2;
  BMENTRYNBR_MOST  =0;
  SYSTEMFILECOUNT  =3;

TYPE
  SPECIAL_ENTRY_NBRS = ( BFD_ENTRY_NBR, 
                          MD_ENTRY_NBR,
                          BM_ENTRY_NBR);

  BAD_SECTOR_TABLE = ARRAY[0..MAX_BAD_SECTORS-1] OF LONG;

  HOMEBLOCK=
  RECORD
    VOLNAME           : VOLUME_NAME;       "NAME ASSIGNED TO VOLUME"
    BFDADDR           : LONG;              "ADDRESS OF DESCRIPTION OF BFD"
    FREE_ENTRIES      : LONG;              "NUMBER OF FREE ENTRIES IN BFD"
    FIRST_FREE        : LONG;              "ADDRESS OF FIRST FREE ENTRY IN BFD"
    SECTORS           : LONG;              "NUMBER OF SECTORS ON VOLUME"
    VOL_THRESHOLD     : LONG;              "NUMBER OF SECTORS WHICH MAY BE ALLOCATED"
    SECTORS_ALLOCATED : LONG;            "NUMBER OF SECTORS WHICH HAVE BEEN ALLOCATED"
    ASF_PRESENT       : BOOLEAN;           "IF FALSE THEN DISKDRIVERFAILURE"
    ASF_ADDR          : LONG;              "BODY ADDRESS OF ASF"
    BST               : BAD_SECTOR_TABLE;
    CREATION_DATE     : LONG;
    ACCESS_DATE       : LONG;
    EXPIRATION_DATE   : LONG;
    NOTUSED           : ARRAY[47..255] OF INTEGER;
  END "HOMEBLOCK";



"**************"
"  PROTECTION  "
"**************"

CONST
  SYSTEMUSER=#FFFF;
                   "-1"
  FILESYSTEMUSERID=#FFFE;
                   "-2"
  NOUSER=#FFFD;
                   "-3"
  PUBLICUSER=#FFFC;
                   "-4"

CONST
  AREADBYTES=0;
  AMODIFYBYTES=1;
  AAPPENDBYTES=2;
  AENTER=5;
  ALOOKUP=6;
  ARENAME=7;
  AREMOVE=8;
  ARESET=10;
  AGETFILEINFORMATION=11;
  APROTECT=12;
  A_SET_FILE_THRESHOLD=13;
  AOFFER=14;
  AGETVOLINFORMATION=15;

  ACREATOR1=#7C07;
  ACREATOR2=0;
  APUBLIC1=#4801;
  APUBLIC2=0;
  ADIRECTORY1=#79E1;
  ADIRECTORY2=0;
  APUBLICDIRECTORY1=#4841;
  APUBLICDIRECTORY2=0;

TYPE
  ACCESSTYPE=AREADBYTES..AOFFER;

  ACCESS_TYPES=
  RECORD
    ACCESS1,ACCESS2:INTEGER
  END "ACCESS_TYPES";
  ACCESSTYPES=ACCESS_TYPES;

  USER_IDENT = INTEGER;

  ACCESSRIGHT=
  RECORD
    USER           :USER_IDENT;        "IDENTITY OF USER"
    ACCESS         :ACCESS_TYPES       "PERMISSIBLE ACCESS FOR USER"
  END "ACCESSRIGHT";


CONST
  PUBLICINDEX=0;
  LASTACCESSRIGHT=73;

TYPE
  ACCESSCONTROLLISTINDEX=0..LASTACCESSRIGHT;

  ACCESSCONTROLLIST=ARRAY[0..(LASTACCESSRIGHT + 1) * SIZE(ACCESSRIGHT) -1] OF INTEGER;



"************************"
"  BASIC FILE DIRECTORY  "
"************************"


  DATE = LONG;        
  ENTRY_STATE = (ENTRY_FREE,ENTRY_USED);

CONST
  DIRECTORY  =10;
  CONTIGUOUS =12;
  RANDOM     =14;

  MAX_FILE_THRESHOLD_LEAST = #FFFF;
  MAX_FILE_THRESHOLD_MOST  = #7FFF;

TYPE
  FILE_ORGANIZATION=DIRECTORY..RANDOM;
  FILEORGANIZATION=FILE_ORGANIZATION;



  BFDENTRY=
  RECORD

    "ADMINISTRATIVE DATA:"
    STATE          :ENTRY_STATE;        "STATE (FREE/USED) OF ENTRY"
    NEXT_FREE      :LONG;              "LINK TO NEXT FREE ENTRY IN BFD"

    "PHYSICAL LAYOUT OF FILE:"
    ORGANIZATION   :FILE_ORGANIZATION;
    SIZE_BYTE      :LONG;              "SIZE OF FILE IN BYTES"
    ALLOCSIZE      :LONG;              "NUMBER OF AREAS ALLOCATED TO FILE"
    AREASIZE       :INTEGER;           "SIZE OF AN ALLOCATION AREA IN SECTORS"
    BODYADDR       :LONG;              "ADDRESS OF INDEX OR FIRST BLOCK IN FILE"

    "PROTECTION:"
    ACL            :ACCESSCONTROLLIST;

    "PERTINENT DATES:"
    CREATIONDATE   :DATE;
    ACCESSDATE     :DATE;
    EXPIRATIONDATE :DATE;

    "USAGE:"
    LINKS          :INTEGER;           "NUMBER OF SFD REFERENCES TO FILE"

    "THRESHOLD"
    FILE_THRESHOLD :LONG;              "MAX NUMBER OF BYTES THAT MAY BE ALLOCATED TO THIS FILE"

    "REST OF ENTRY:"
    NOT_USED:ARRAY[242..255] OF INTEGER
  END "BFDENTRY";



"***************************"
"  SYMBOLIC FILE DIRECTORY  "
"***************************"


  FILE_NAME  = ARRAY[0..7] OF INTEGER;

  SFDENTRY=
  RECORD
    STATE          :ENTRY_STATE;        "STATE (FREE/USED) OF ENTRY"
    NAME           :FILE_NAME;         "NAME OF FILE"
    BFDNBR         :LONG;              "INDEX OF FILE IN BFD"
    NOTUSED:ARRAY[1..5] OF INTEGER
  END "SFDENTRY";

CONST
  SFDPAGESIZE      =16;                "NUMBER OF SFD ENTRIES IN A PAGE"

TYPE
  SFDPAGEINDEX=1..SFDPAGESIZE;

  SFDPAGE=ARRAY[1..SFDPAGESIZE * SIZE(SFDENTRY)] OF INTEGER;





CONST
  INDEXPAGESIZE    =126;               "NUMBER OF ENTRIES IN AN INDEX BLOCK"
  AREAS_PER_INDEX = 126;
  AREAS_PER_INDEX_LEAST = 126;
  AREAS_PER_INDEX_MOST  = 0;
  INDEX_SIZE_LEAST = 1;  "NUMBER OF SECTORS USED BY AN INDEX"
  INDEX_SIZE_MOST  = 0;

TYPE
  INDEXPAGEINDEX=0..125;

  INDEXPAGE=ARRAY[INDEXPAGEINDEX] OF LONG;        

  INDEXSECTOR=
  RECORD
    BACK_PTR       :LONG;              "ADDRESS OF PREVIOUS INDEX BLOCK"
    INDEX          :INDEXPAGE;         "INDEX INFORMATION"
    FORWARD_PTR    :LONG;              "ADDRESS OF NEXT INDEX BLOCK"
  END "INDEXSECTOR";

  INDEX_NUMBER = INTEGER;  "NUMBER OF AN INDEX WITHIN A CHAIN OF INDICES"
 «a5»