home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / SHSUCD11.ZIP / CDROMS.ADS < prev    next >
Text File  |  1995-06-29  |  2KB  |  78 lines

  1. --************************************************************************
  2. --
  3. --  CDROMS.ADS               Version 3.0
  4. --
  5. --  A copyright-reserved, free use program.
  6. --  (c)John H. McCoy, 1994, 1995, Sam Houston St. Univ., TX 77341-2206
  7. --************************************************************************
  8.  
  9. with Types; use Types;
  10. with Drivers; use Drivers;
  11. with system, unchecked_conversion, direct_io, unchecked_deallocation;
  12. with text_io;
  13.  
  14. package CDRoms is
  15.  
  16. -- The server joins the CDs sequentially with the first as drive 0.
  17. -- All calls to CDRoms use these drive number.  CDRoms does a table
  18. -- lookup to find the correct driver and subunit on that driver.
  19.  
  20. subtype Sectors is bytes(1..2048);
  21. package DIO is new Direct_IO(Sectors); use DIO;
  22. type SectorsAccess is access Sectors;
  23. function DW_to_SectorsAccess is new unchecked_conversion(DW, SectorsAccess);
  24.  
  25. type EntryType is (IMG, CD);
  26. type IMG_Access is access DIO.File_Type;
  27. package ET_IO is new text_io.enumeration_io(EntryType);
  28. procedure zapImg_F is new unchecked_deallocation(DIO.File_Type,IMG_Access);
  29. procedure zapSectors is new unchecked_deallocation(Sectors,SectorsAccess);
  30.  
  31. type Drives is
  32.   record
  33.     Name        : string8;
  34.     Strategy    : system.address;
  35.     Interrupt   : system.address;
  36.   end record;
  37.  
  38. type Images is
  39.   record
  40.     Name        : string(1..24);
  41.     Img_F       : IMG_Access;
  42.   end record;
  43.  
  44. type CDEntries(EType: EntryType := IMG) is
  45.   record
  46.     Unit        : byte;
  47.     Label       : string11 := (others=>' ');
  48.     Status      : DW := Long_to_DW(0);
  49.     VolSize     : DW := Long_to_DW(0);
  50.     case EType is
  51.       when CD  => Driver : Drives;
  52.       when IMG => File   : Images;
  53.     end case;
  54.   end record;
  55.  
  56. type CDArray is array (integer range <>) of CDEntries;
  57. type CDArrayAccess is access CDArray;
  58.  
  59. procedure GetCDStatus(Drive       : integer;
  60.                       DeviceStatus: out DEV_ReturnCodes;
  61.                       CDStatus    : out DW;
  62.                       DriverName  : out string16;
  63.                       DriverUnit  : out byte;
  64.                       Label       : out string11);
  65.  
  66. task type CDRoms is
  67.   entry SetUp(pCDTbl: CDArrayAccess );
  68.   entry Call(rh: in out rhs);
  69.   entry ShutDown;
  70.   pragma priority(10);
  71. end CDRoms;
  72. for CDRoms'storage_size use 3584;
  73.  
  74. type CDAccess is access CDRoms;
  75.  
  76. CDs : CDRoms;
  77.  
  78. end CDRoms;