home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Graphics / Graphics.zip / os2apipm.zip / OS2API / OS2-FM.ADS < prev    next >
Text File  |  1996-08-10  |  37KB  |  849 lines

  1. -- ╔═══════════════════════════════════════════════════════════════════╗
  2. -- ║       D E S I G N   E N G I N E R I N G              ║D║S║        ║
  3. -- ║            S O F T W A R E                           ╚═╩═╝        ║
  4. -- ║                                                                   ║
  5. -- ║        Package  OS2.FM                                            ║
  6. -- ║                                                                   ║
  7. -- ║        Author :  Leonid Dulman     1995 , 1996                    ║
  8. -- ║                                                                   ║
  9. -- ║             GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS            ║
  10. -- ║                                                                   ║
  11. -- ║             files part of os/2 api functions                      ║
  12. -- ║                                                                   ║
  13. -- ╚═══════════════════════════════════════════════════════════════════╝
  14.  
  15.  
  16. with Interfaces.C;         use Interfaces.C;
  17. with Interfaces.C.Strings; use Interfaces.C.Strings;
  18.  
  19. package Os2.Fm is
  20. pragma Preelaborate (Fm);
  21.  
  22. CCHMAXPATH    :constant :=    260;
  23. CCHMAXPATHCOMP:constant :=    256;
  24.  
  25. type PBOOL32 is access all BOOL32;
  26. type PLONG   is access all LONG  ;
  27.                          -- File manager
  28.  
  29.      --    DosSetFilePtr() file position codes
  30.  
  31.  FILE_BEGIN   :constant ulong := 16#0000#; -- Move relative to beginning of file
  32.  FILE_CURRENT :constant ulong := 16#0001#; -- Move relative to current fptr position
  33.  FILE_END     :constant ulong := 16#0002#; -- Move relative to end of file
  34.  
  35.      -- DosFindFirst/Next Directory handle types --                             ║
  36.  
  37. HDIR_SYSTEM :constant ulong :=  1;    -- Use system handle
  38.  
  39. --  HDIR_CREATE      (-1)    -- Allocate a new; unused handle
  40.  
  41.      -- DosCopy control bits; may be or'ed together --                          ║
  42.  
  43.  DCPY_EXISTING :constant ulong :=  16#0001#; -- Copy even if target exists
  44.  DCPY_APPEND   :constant ulong :=  16#0002#; -- Append to existing file; do not replace
  45.  DCPY_FAILEAS  :constant ulong :=  16#0004#; -- Fail if EAs not supported on target
  46.  
  47.      -- DosOpen/DosQFHandState/DosQueryFileInfo et al file attributes; also --  ║
  48.      -- known as Dos File Mode bits... --                                       ║
  49.  
  50.  FILE_NORMAL   :constant ulong :=  16#0000#;
  51.  FILE_READONLY :constant ulong :=  16#0001#;
  52.  FILE_HIDDEN   :constant ulong :=  16#0002#;
  53.  FILE_SYSTEM   :constant ulong :=  16#0004#;
  54.  FILE_DIRECTORY:constant ulong :=  16#0010#;
  55.  FILE_ARCHIVED :constant ulong :=  16#0020#;
  56.  -- FILE_IGNORE   :constant ulong :=  16#10000#;?? -- ignore file attribute in
  57.  
  58.      -- DosSetPath/File Info if this bit is set
  59.  
  60.  MUST_HAVE_READONLY  :constant ulong := FILE_READONLY  * 16#100# or FILE_READONLY ;
  61.  MUST_HAVE_HIDDEN    :constant ulong := FILE_HIDDEN    * 16#100# or FILE_HIDDEN   ;
  62.  MUST_HAVE_SYSTEM    :constant ulong := FILE_SYSTEM    * 16#100# or FILE_SYSTEM   ;
  63.  MUST_HAVE_DIRECTORY :constant ulong := FILE_DIRECTORY * 16#100# or FILE_DIRECTORY;
  64.  MUST_HAVE_ARCHIVED  :constant ulong := FILE_ARCHIVED  * 16#100# or FILE_ARCHIVED ;
  65.  
  66.      -- DosOpen() actions
  67.  
  68.  FILE_EXISTED   :constant ulong := 16#0001#;
  69.  FILE_CREATED   :constant ulong := 16#0002#;
  70.  FILE_TRUNCATED :constant ulong := 16#0003#;
  71.  
  72.      -- DosOpen() open flags
  73.  FILE_OPEN      :constant ulong := 16#0001#;
  74.  FILE_TRUNCATE  :constant ulong := 16#0002#;
  75.  FILE_CREATE    :constant ulong := 16#0010#;
  76.  
  77.      --     this nibble applies if file already exists        xxxx
  78.  
  79.  OPEN_ACTION_FAIL_IF_EXISTS    :constant ulong := 16#0000#; -- 0000
  80.  OPEN_ACTION_OPEN_IF_EXISTS    :constant ulong := 16#0001#; -- 0001
  81.  OPEN_ACTION_REPLACE_IF_EXISTS :constant ulong := 16#0002#; -- 0010
  82.  
  83.      --     this nibble applies if file does not exist         xxxx
  84.  
  85.  OPEN_ACTION_FAIL_IF_NEW       :constant ulong := 16#0000#; -- 0000
  86.  OPEN_ACTION_CREATE_IF_NEW     :constant ulong := 16#0010#; -- 0001
  87.  
  88.      -- DosOpen/DosSetFHandState flags --                                       ║
  89.  
  90.  OPEN_ACCESS_READONLY        :constant ulong:=   16#0000#;-- ---- ---- ---- -000
  91.  OPEN_ACCESS_WRITEONLY       :constant ulong:=   16#0001#;-- ---- ---- ---- -001
  92.  OPEN_ACCESS_READWRITE       :constant ulong:=   16#0002#;-- ---- ---- ---- -010
  93.  OPEN_SHARE_DENYREADWRITE    :constant ulong:=   16#0010#;-- ---- ---- -001 ----
  94.  OPEN_SHARE_DENYWRITE        :constant ulong:=   16#0020#;-- ---- ---- -010 ----
  95.  OPEN_SHARE_DENYREAD         :constant ulong:=   16#0030#;-- ---- ---- -011 ----
  96.  OPEN_SHARE_DENYNONE         :constant ulong:=   16#0040#;-- ---- ---- -100 ----
  97.  OPEN_FLAGS_NOINHERIT        :constant ulong:=   16#0080#;-- ---- ---- 1--- ----
  98.  OPEN_FLAGS_NO_LOCALITY      :constant ulong:=   16#0000#;-- ---- -000 ---- ----
  99.  OPEN_FLAGS_SEQUENTIAL       :constant ulong:=   16#0100#;-- ---- -001 ---- ----
  100.  OPEN_FLAGS_RANDOM           :constant ulong:=   16#0200#;-- ---- -010 ---- ----
  101.  OPEN_FLAGS_RANDOMSEQUENTIAL :constant ulong:=   16#0300#;-- ---- -011 ---- ----
  102.  OPEN_FLAGS_NO_CACHE         :constant ulong:=   16#1000#;-- ---1 ---- ---- ----
  103.  OPEN_FLAGS_FAIL_ON_ERROR    :constant ulong:=   16#2000#;-- --1- ---- ---- ----
  104.  OPEN_FLAGS_WRITE_THROUGH    :constant ulong:=   16#4000#;-- -1-- ---- ---- ----
  105.  OPEN_FLAGS_DASD             :constant ulong:=   16#8000#;-- 1--- ---- ---- ----
  106.  OPEN_FLAGS_NONSPOOLED       :constant ulong:=   16#00040000#;
  107.  OPEN_FLAGS_PROTECTED_HANDLE :constant ulong:=   16#40000000#;
  108.  
  109.      -- DosSearchPath() constants --                                            ║
  110.  
  111.  SEARCH_PATH          :constant ulong := 16#0000#;
  112.  SEARCH_CUR_DIRECTORY :constant ulong := 16#0001#;
  113.  SEARCH_ENVIRONMENT   :constant ulong := 16#0002#;
  114.  SEARCH_IGNORENETERRS :constant ulong := 16#0004#;
  115.  
  116. --   EA Info Levels & Find First/Next
  117. --   API's: DosFindFirst; DosQueryFileInfo; DosQueryPathInfo; DosSetFileInfo;
  118. --   DosSetPathInfo
  119.  
  120.      -- File info levels&gml All listed API's --
  121.  
  122.  FIL_STANDARD        :constant ulong :=  1; -- Info level 1; standard file info
  123.  FIL_QUERYEASIZE     :constant ulong :=  2; -- Level 2; return Full EA size
  124.  FIL_QUERYEASFROMLIST:constant ulong :=  3; -- Level 3; return requested EA's
  125.  
  126.      -- File info levels: Dos...PathInfo only
  127. FIL_QUERYFULLNAME    :constant ulong :=  5;   -- Level 5; return fully qualified
  128.                                               --   name of file
  129.      -- DosFsAttach()  Attact or detach
  130.  
  131.  FS_ATTACH       :constant ulong :=  0;  -- Attach file server
  132.  FS_DETACH       :constant ulong :=  1;  -- Detach file server
  133.  FS_SPOOLATTACH  :constant ulong :=  2;  -- Register a spooler device
  134.  FS_SPOOLDETACH  :constant ulong :=  3;  -- De-register a spooler device
  135.  
  136.      -- DosFsCtl()  Routing type
  137.  
  138.  FSCTL_HANDLE    :constant ulong :=  1; -- File Handle directs req routing
  139.  FSCTL_PATHNAME  :constant ulong :=  2; -- Path Name directs req routing
  140.  FSCTL_FSDNAME   :constant ulong :=  3; -- FSD Name directs req routing
  141.  
  142.      -- defined FSCTL functions
  143.  
  144.  FSCTL_ERROR_INFO:constant ulong :=  1; -- return error info from FSD
  145.  FSCTL_MAX_EASIZE:constant ulong :=  2; -- Max ea size for the FSD
  146.  
  147. type  EASIZEBUF is record       -- for FSCTL fn 2 - max ea size --
  148.   cbMaxEASize          :USHORT  ;    -- max. size of one EA --
  149.   cbMaxEAListSize      :ULONG   ;    -- max size of the full EA List --
  150. end record;  -- EASIZEBUF
  151. type PEASIZEBUF  is access all EASIZEBUF;
  152.                 -- DosQueryFSAttach() --
  153.      -- Information level types (defines method of query)
  154.  
  155.  FSAIL_QUERYNAME :constant ulong :=  1;  -- Return data for a Drive or Device
  156.  FSAIL_DEVNUMBER :constant ulong :=  2;  -- Return data for Ordinal Device #
  157.  FSAIL_DRVNUMBER :constant ulong :=  3;  -- Return data for Ordinal Drive #
  158.  
  159.      -- Item types (from data structure item "iType")
  160.  
  161.  FSAT_CHARDEV    :constant ulong :=  1; -- Resident aliased CHARACTER device
  162.  FSAT_PSEUDODEV  :constant ulong :=  2; -- Pusedu-aliased CHARACTER device
  163.  FSAT_LOCALDRV   :constant ulong :=  3; -- Local drive
  164.  FSAT_REMOTEDRV  :constant ulong :=  4; -- Remote drive attached to FSD
  165.  
  166. type  FSQBUFFER  is record        -- fsqbuf Data structure for QFSAttach
  167.   iType          :USHORT  ;              -- Item type
  168.   cbName         :USHORT  ;             -- Length of item name; sans NULL
  169.   szName         :aliased CHARACTER   ;  --[1]; -- ASCIIZ item name
  170.   cbFSDName      :USHORT  ;          -- Length of FSD name; sans NULL
  171.   szFSDName      :aliased CHARACTER   ;  --[1];    -- ASCIIZ FSD name
  172.   cbFSAData      :USHORT  ;          -- Length of FSD Attach data returned
  173.   rgFSAData      :aliased CHARACTER   ;  -- [1];  -- FSD Attach data from FSD
  174. end record;  -- FSQBUFFER;
  175. type PFSQBUFFER  is access all FSQBUFFER;
  176.  
  177. type FSQBUFFER2  is record       -- fsqbuf Data structure for QFSAttach--
  178.   iType          :USHORT  ;
  179.   cbName         :USHORT  ;
  180.   cbFSDName      :USHORT  ;
  181.   cbFSAData      :USHORT  ;
  182.   szName         :aliased CHARACTER   ;      -- [1];
  183.   szFSDName      :aliased CHARACTER   ;      -- [1];
  184.   rgFSAData      :aliased CHARACTER   ;      -- [1];
  185. end record;  -- FSQBUFFER2;
  186. type PFSQBUFFER2 is access all FSQBUFFER2;
  187.  
  188. type SPOOLATTACH is record    -- Data structure for spooler operations --
  189.   hNmPipe      :USHORT  ;            -- Named pipe handle --
  190.   ulKey        :ULONG   ;              -- Attached key --
  191. end record;  -- SPOOLATTACH;
  192. type PSPOOLATTACH  is access all SPOOLATTACH;
  193.  
  194.  --    File System Drive Information & gml DosQueryFSInfo DosSetFSInfo              *
  195.      -- FS Drive Info Levels
  196.  
  197.  FSIL_ALLOC      :constant ulong :=  1; -- Drive allocation info (Query only)
  198.  FSIL_VOLSER     :constant ulong :=  2; -- Drive Volum/Serial info
  199.  
  200.      -- DosQueryFHType()  Handle classes (low 8 bits of Handle Type)
  201.  
  202.  FHT_DISKFILE :constant ulong :=  16#0000#; -- Disk file handle
  203.  FHT_CHRDEV   :constant ulong :=  16#0001#; -- Character device handle
  204.  FHT_PIPE     :constant ulong :=  16#0002#; -- Pipe handle
  205.  
  206.      -- Handle bits (high 8 bits of Handle Type)
  207.  
  208.  FHB_DSKREMOTE     :constant ulong :=    16#8000#; -- Remote disk
  209.  FHB_CHRDEVREMOTE  :constant ulong :=    16#8000#; -- Remote aliased CHARACTER device
  210.  FHB_PIPEREMOTE    :constant ulong :=    16#8000#; -- Remote pipe
  211.  
  212.         -- File time and date types --
  213. type FTIME  is record           --  ftime
  214.      twosecs : integer range 0..31;
  215.      minutes : integer range 0..59;
  216.      hours   : integer range 0..23;
  217. end record; --ftime;
  218. Word : constant:=2; -- storage element 2 bytes per word
  219. for  FTIME  use record           --  ftime
  220.   twosecs at 0*Word range  0..4;  -- 5
  221.   minutes at 0*Word range  5..10; -- 6
  222.   hours   at 0*Word range 11..15; -- 5
  223. end record; --ftime;
  224.  
  225. for FTIME'size use 16;
  226. type PFTIME is access all FTIME;
  227.  
  228. type  FDATE is record           --  fdate
  229.   day     : integer range 1..31;
  230.   month   : integer range 1..12;
  231.   year    : integer range 0..127;
  232. end record; --fdate;
  233.  
  234. for  FDATE use record           --  fdate
  235.     day     at 0*Word range  0..4;  --  5;
  236.     month   at 0*Word range  5..8;  --  4;
  237.     year    at 0*Word range  9..15; --  7;
  238.   end record; --fdate;
  239. for FDATE'size use 16;
  240. type PFDATE   is access all FDATE;
  241.  
  242. type VOLUMELABEL is record      -- vol --
  243.  cch             :BYTE ;
  244.  szVolLabel      :string(1..12);  -- [12];
  245. end record;  -- VOLUMELABEL;
  246. type PVOLUMELABEL  is access all VOLUMELABEL;
  247.  
  248. type FSINFO   is record     -- fsinf --
  249.  fdateCreation :FDATE       ;
  250.  ftimeCreation :FTIME       ;
  251.  vol           :VOLUMELABEL ;
  252. end record;  -- FSINFO;
  253. type PFSINFO is access all FSINFO;
  254.  
  255.      -- HANDTYPE values
  256.  
  257.  HANDTYPE_FILE      :constant ulong :=   16#0000#;
  258.  HANDTYPE_DEVICE    :constant ulong :=   16#0001#;
  259.  HANDTYPE_PIPE      :constant ulong :=   16#0002#;
  260.  HANDTYPE_PROTECTED :constant ulong :=   16#4000#;
  261.  HANDTYPE_NETWORK   :constant ulong :=   16#8000#;
  262.  
  263. type FILELOCK   is record      -- flock --
  264.    lOffset     :LONG ;
  265.    lRange      :LONG ;
  266. end record;  -- FILELOCK;
  267. type PFILELOCK  is access all FILELOCK;
  268.  
  269.  
  270. subtype FHLOCK  is ULONG  ;
  271. type  PFHLOCK is access all FHLOCK;
  272.  
  273. function  DosSetFileLocks(hFl      :HFILE     ;
  274.                           pflUnlock:PFILELOCK ;
  275.                           pflLock  :PFILELOCK ;
  276.                           timeout  :ULONG     ;
  277.                           flags    :ULONG     ) return apiret;
  278. pragma Import(c,DosSetFileLocks, Link_name=>"_DosSetFileLocks");
  279.  
  280. function DosProtectSetFileLocks(hFl               :HFILE     ;
  281.                                 pflUnlock         :PFILELOCK ;
  282.                                 pflLock           :PFILELOCK ;
  283.                                 timeout           :ULONG     ;
  284.                                 flags             :ULONG     ;
  285.                                 fhFileHandleLockID:FHLOCK    ) return apiret;
  286. pragma Import(c,DosProtectSetFileLocks, Link_name=>"_DosProtectSetFileLocks");
  287.  
  288. function DosCancelLockRequest(hFil   :HFILE     ;
  289.                               pflLock:PFILELOCK )  return apiret;
  290. pragma Import(c,DosCancelLockRequest, Link_name=>"_DosCancelLockRequest");
  291.  
  292. type FILEFINDBUF  is record     -- findbuf --
  293.    fdateCreation          :USHORT ;
  294.    ftimeCreation          :USHORT ;
  295.    fdateLastAccess        :USHORT ;
  296.    ftimeLastAccess        :USHORT ;
  297.    fdateLastWrite         :USHORT ;
  298.    ftimeLastWrite         :USHORT ;
  299.    cbFile                 :ULONG  ;
  300.    cbFileAlloc            :ULONG  ;
  301.    attrFile               :USHORT ;
  302.    cchName                :UCHAR  ;
  303.    achName                :aliased CHARACTER;
  304. end record;  -- FILEFINDBUF;
  305. type PFILEFINDBUF is access all FILEFINDBUF;
  306.  
  307. type FILEFINDBUF2 is record    -- findbuf2 --
  308.     fdateCreation          :USHORT;
  309.     ftimeCreation          :USHORT;
  310.     fdateLastAccess        :USHORT;
  311.     ftimeLastAccess        :USHORT;
  312.     fdateLastWrite         :USHORT;
  313.     ftimeLastWrite         :USHORT;
  314.     cbFile                 :ULONG ;
  315.     cbFileAlloc            :ULONG ;
  316.     attrFile               :USHORT;
  317.     cbList                 :ULONG ;
  318.     cchName                :UCHAR ;
  319.     achName                :aliased CHARACTER;
  320. end record;  -- FILEFINDBUF2;
  321. type PFILEFINDBUF2 is access all FILEFINDBUF2;
  322.  
  323. type FILEFINDBUF3   is record                 -- findbuf3 --
  324.     oNextEntryOffset       :ULONG  ;            -- new field --
  325.     fdateCreation          :USHORT ;
  326.     ftimeCreation          :USHORT ;
  327.     fdateLastAccess        :USHORT ;
  328.     ftimeLastAccess        :USHORT ;
  329.     fdateLastWrite         :USHORT ;
  330.     ftimeLastWrite         :USHORT ;
  331.     cbFile                 :ULONG  ;
  332.     cbFileAlloc            :ULONG  ;
  333.     attrFile               :ULONG  ;              -- widened field --
  334.     cchName                :UCHAR  ;
  335.     achName                :aliased CHARACTER;
  336. end record;  -- FILEFINDBUF3;
  337. type PFILEFINDBUF3 is access all FILEFINDBUF3;
  338.  
  339. type FILEFINDBUF4  is record      -- findbuf4 --
  340.   oNextEntryOffset         :ULONG   ;            -- new field --
  341.   fdateCreation            :USHORT  ;
  342.   ftimeCreation            :USHORT  ;
  343.   fdateLastAccess          :USHORT  ;
  344.   ftimeLastAccess          :USHORT  ;
  345.   fdateLastWrite           :USHORT  ;
  346.   ftimeLastWrite           :USHORT  ;
  347.   cbFile                   :ULONG   ;
  348.   cbFileAlloc              :ULONG   ;
  349.   attrFile                 :ULONG   ;             -- widened field --
  350.   cbList                   :ULONG   ;
  351.   cchName                  :UCHAR   ;
  352.   achName                  :aliased CHARACTER;
  353. end record;  -- FILEFINDBUF4;
  354. type PFILEFINDBUF4  is access all FILEFINDBUF4;
  355.  
  356.         -- extended attribute structures --
  357.  
  358. type GEA  is record         -- gea --
  359.    cbName       :BYTE ;        -- name length not including NULL --
  360.    szName       :aliased CHARACTER   ;     -- attribute name --
  361. end record;  -- GEA;
  362. type PGEA is access all GEA;
  363. type gea_list is array(integer range <>) of gea;
  364. type GEALIST is record     -- geal --
  365.      cbList      :ULONG ;       -- total bytes of structure including full list --
  366.      list        :gea_list(1..1) ; -- [1];  -- variable length GEA structures --
  367. end record;  -- GEALIST;
  368. type PGEALIST  is access all GEALIST;
  369.  
  370. type FEA   is record        -- fea --
  371.   flEA           :BYTE ;           -- flags                              --
  372.   cbName         :BYTE ;        -- name length not including NULL --
  373.   cbValue        :USHORT ;     -- value length --
  374. end record;  -- FEA;
  375. type PFEA is access all FEA;
  376.  
  377.         -- flags for FEA.fEA --
  378. --      #define FEA_NEEDEA         16#80     -- need EA bit --
  379.  
  380. type fea_list is array(integer range <>) of fea;
  381. type FEALIST   is record   -- feal --
  382.  cbList        :ULONG ;       -- total bytes of structure including full list --
  383.  list          :fea_list(1..1); --[1];-- variable length FEA structures --
  384. end record;  -- FEALIST;
  385. type PFEALIST is access all FEALIST;
  386.  
  387. type EAOP  is record        -- eaop --
  388.    fpGEAList        :PGEALIST ; -- general EA list --
  389.    fpFEAList        :PFEALIST ; -- full EA list --
  390.    oError           :ULONG    ;
  391. end record;  -- EAOP;
  392. type PEAOP is access all EAOP;
  393.  
  394. type FEA2   is record       -- fea2 --
  395.   oNextEntryOffset         :ULONG   ;    -- new field --
  396.   fEA                      :BYTE    ;
  397.   cbName                   :BYTE    ;
  398.   cbValue                  :USHORT  ;
  399.   szName                   :aliased CHARACTER   ; -- new field --
  400. end record;  -- FEA2;
  401. type PFEA2 is access all FEA2;
  402.  
  403. type FEA2LIST is record     -- fea2l --
  404.    cbList        :ULONG   ;
  405.    list          :fea2;    -- [1];
  406. end record;  -- FEA2LIST;
  407. type PFEA2LIST is access all FEA2LIST;
  408.  
  409. type GEA2   is record        -- gea2 --
  410.    oNextEntryOffset         :ULONG  ;     -- new field --
  411.    cbName                   :BYTE   ;
  412.    szName                   :aliased CHARACTER   ;            -- new field --
  413. end record;  -- GEA2;
  414. type PGEA2 is access all GEA2;
  415.  
  416. type GEA2LIST  is record     -- gea2l --
  417.     cbList         :ULONG ;
  418.     list           :gea2  ; --  [1];
  419. end record;  -- GEA2LIST;
  420. type PGEA2LIST is access all GEA2LIST;
  421.  
  422. type EAOP2  is record        -- eaop2 --
  423.   fpGEA2             :PGEA2LIST   ;       -- GEA set --
  424.   fpFEA2             :PFEA2LIST   ;       -- FEA set --
  425.   oError             :ULONG       ;       -- offset of FEA error --
  426. end record;  -- EAOP2;
  427. type PEAOP2 is access all EAOP2;
  428.  
  429. --  Equates for the types of EAs that follow the convention that we have
  430. --  established.
  431.  
  432. --  Values 16#FFFE# thru 16#8000# are reserved.
  433. --  Values 16#0000# thru 16#7fff# are user definable.
  434. --  Value  16#FFFC# is not used
  435.  
  436.  EAT_BINARY   :constant ulong:=   16#FFFE#;   -- length preceeded binary
  437.  EAT_ASCII    :constant ulong:=   16#FFFD#;   -- length preceeded ASCII
  438.  EAT_BITMAP   :constant ulong:=   16#FFFB#;   -- length preceeded bitmap
  439.  EAT_METAFILE :constant ulong:=   16#FFFA#;   -- length preceeded metafile
  440.  EAT_ICON     :constant ulong:=   16#FFF9#;   -- length preceeded icon
  441.  EAT_EA       :constant ulong:=   16#FFEE#;   -- length preceeded ASCII
  442.                              -- name of associated data (#include)
  443.  EAT_MVMT     :constant ulong:=   16#FFDF#;   -- multi-valued; multi-typed field
  444.  EAT_MVST     :constant ulong:=   16#FFDE#;   -- multi-valued; single-typed field
  445.  EAT_ASN1     :constant ulong:=   16#FFDD#;   -- ASN.1 field
  446.  
  447.  
  448. function  DosOpen(pszFileName  :PSZ ;
  449.                   pHf          :PHFILE;
  450.                   pulAction    :PULONG;
  451.                   cbFile       :ULONG ;
  452.                   ulAttribute  :ULONG ;
  453.                   fsOpenFlags  :ULONG ;
  454.                   fsOpenMode   :ULONG ;
  455.                   peaop_2      :PEAOP2) return apiret;
  456. pragma Import(c,DosOpen, Link_name=>"_DosOpen");
  457.  
  458. function DosProtectOpen(pszFileName  :PSZ   ;
  459.                         pHf          :PHFILE;
  460.                         pulAction    :PULONG;
  461.                         cbFile       :ULONG ;
  462.                         ulAttribute  :ULONG ;
  463.                         fsOpenFlags  :ULONG ;
  464.                         fsOpenMode   :ULONG ;
  465.                         peaop_2      :PEAOP2;
  466.                pfhFileHandleLockID   :PFHLOCK )return apiret;
  467. pragma Import(c,DosProtectOpen, Link_name=>"_DosProtectOpen");
  468.  
  469. function   DosClose(hFl:HFILE )return apiret;
  470. pragma Import(c,DosClose, Link_name=>"_DosClose");
  471.  
  472. function  DosProtectClose(hFl               :HFILE ;
  473.                           fhFileHandleLockID:FHLOCK )return apiret;
  474. pragma Import(c,DosProtectClose, Link_name=>"_DosProtectClose");
  475.  
  476. function   DosRead(hFl       :HFILE ;
  477.                    pBuffer   :PVOID ;
  478.                    cbRead    :ULONG ;
  479.                     pcbActual:PULONG) return apiret;
  480. pragma Import(c,DosRead, Link_name=>"_DosRead");
  481.  
  482. function  DosProtectRead(hFl                :HFILE ;
  483.                          pBuffer            :PVOID ;
  484.                          cbRead             :ULONG ;
  485.                           pcbActual         :PULONG;
  486.                           fhFileHandleLockID:FHLOCK) return apiret;
  487. pragma Import(c,DosProtectRead, Link_name=>"_DosProtectRead");
  488.  
  489. function DosWrite(hFl       :HFILE ;
  490.                   pBuffer   :PVOID ;
  491.                   cbWrite   :ULONG ;
  492.                   pcbActual :PULONG) return apiret;
  493. pragma Import(c,DosWrite, Link_name=>"_DosWrite");
  494.  
  495. function DosProtectWrite(hFl                :HFILE ;
  496.                          pBuffer            :PVOID ;
  497.                          cbWrite            :ULONG ;
  498.                           pcbActual         :PULONG;
  499.                           fhFileHandleLockID:FHLOCK)  return apiret;
  500. pragma Import(c,DosProtectWrite, Link_name=>"_DosProtectWrite");
  501.  
  502.      -- File time and date types --
  503.  
  504. type FILESTATUS is record       -- fsts --
  505.     fdateCreation       :FDATE ;
  506.     ftimeCreation       :FTIME ;
  507.     fdateLastAccess     :FDATE ;
  508.     ftimeLastAccess     :FTIME ;
  509.     fdateLastWrite      :FDATE ;
  510.     ftimeLastWrite      :FTIME ;
  511.     cbFile              :ULONG ;
  512.     cbFileAlloc         :ULONG ;
  513.     attrFile            :USHORT;
  514. end record;  -- FILESTATUS;
  515. type PFILESTATUS is access all FILESTATUS;
  516.  
  517. type FILESTATUS2 is record     -- fsts2 --
  518.  
  519.   fdateCreation        :FDATE  ;
  520.   ftimeCreation        :FTIME  ;
  521.   fdateLastAccess      :FDATE  ;
  522.   ftimeLastAccess      :FTIME  ;
  523.   fdateLastWrite       :FDATE  ;
  524.   ftimeLastWrite       :FTIME  ;
  525.   cbFile               :ULONG  ;
  526.   cbFileAlloc          :ULONG  ;
  527.   attrFile             :USHORT ;
  528.   cbList               :ULONG  ;
  529. end record;  -- FILESTATUS2;
  530. type PFILESTATUS2 is access all FILESTATUS2;
  531.  
  532. type FILESTATUS3 is record      -- fsts3 --
  533.    fdateCreation        :FDATE ;
  534.    ftimeCreation        :FTIME ;
  535.    fdateLastAccess      :FDATE ;
  536.    ftimeLastAccess      :FTIME ;
  537.    fdateLastWrite       :FDATE ;
  538.    ftimeLastWrite       :FTIME ;
  539.    cbFile               :ULONG ;
  540.    cbFileAlloc          :ULONG ;
  541.    attrFile             :ULONG ;
  542. end record;  -- FILESTATUS3;
  543. type PFILESTATUS3 is access all FILESTATUS3;
  544.  
  545.  type FILESTATUS4  is record       -- fsts4 --
  546.     fdateCreation       :FDATE ;
  547.     ftimeCreation       :FTIME ;
  548.     fdateLastAccess     :FDATE ;
  549.     ftimeLastAccess     :FTIME ;
  550.     fdateLastWrite      :FDATE ;
  551.     ftimeLastWrite      :FTIME ;
  552.     cbFile              :ULONG ;
  553.     cbFileAlloc         :ULONG ;
  554.     attrFile            :ULONG ;
  555.     cbList              :ULONG ;
  556. end record;  -- FILESTATUS4;
  557. type PFILESTATUS4  is access all FILESTATUS4;
  558.  
  559. type FSALLOCATE is record       -- fsalloc --
  560.    idFileSystem      :ULONG ;
  561.    cSectorUnit       :ULONG ;
  562.    cUnit             :ULONG ;
  563.    cUnitAvail        :ULONG ;
  564.    cbSector          :USHORT;
  565. end record;  -- FSALLOCATE;
  566. type PFSALLOCATE is access all FSALLOCATE;
  567.  
  568. subtype HDIR is LHANDLE ;        -- hdir --
  569. type PHDIR    is access all HDIR;
  570.  
  571. --  ╔══════════════════════════════════════════════════════════╗
  572. --  ║#define DosOpen2        DosOpen                           ║
  573. --  ║#define DosFindFirst2   DosFindFirst                      ║
  574. --  ║#define DosQFHandState  DosQueryFHState                   ║
  575. --  ║#define DosProtectQFHandState  DosProtectQueryFHState     ║
  576. --  ║#define DosSetFHandState  DosSetFHState                   ║
  577. --  ║#define DosProtectSetFHandState  DosProtectSetFHState     ║
  578. --  ║#define DosQHandType    DosQueryHType                     ║
  579. --  ║#define DosQFSAttach    DosQueryFSAttach                  ║
  580. --  ║#define DosNewSize      DosSetFileSize                    ║
  581. --  ║#define DosProtectNewSize  DosProtectSetFileSize          ║
  582. --  ║#define DosBufReset     DosResetBuffer                    ║
  583. --  ║#define DosChgFilePtr   DosSetFilePtr                     ║
  584. --  ║#define DosProtectChgFilePtr   DosProtectSetFilePtr       ║
  585. --  ║#define DosMkDir        DosCreateDir                      ║
  586. --  ║#define DosMkDir2       DosCreateDir                      ║
  587. --  ║#define DosRmDir        DosDeleteDir                      ║
  588. --  ║#define DosSelectDisk   DosSetDefaultDisk                 ║
  589. --  ║#define DosQCurDisk     DosQueryCurrentDisk               ║
  590. --  ║#define DosChDir        DosSetCurrentDir                  ║
  591. --  ║#define DosQCurDir      DosQueryCurrentDir                ║
  592. --  ║#define DosQFSInfo      DosQueryFSInfo                    ║
  593. --  ║#define DosQVerify      DosQueryVerify                    ║
  594. --  ║#define DosQFileInfo    DosQueryFileInfo                  ║
  595. --  ║#define DosProtectQFileInfo    DosProtectQueryFileInfo    ║
  596. --  ║#define DosQPathInfo    DosQueryPathInfo                  ║
  597. --  ╚══════════════════════════════════════════════════════════╝
  598.  
  599. function  DosDelete     (pszFile:PSZ )return apiret;
  600. pragma Import(c,DosDelete, Link_name=>"_DosDelete");
  601.  
  602. function  DosForceDelete(pszFile:PSZ )return apiret;
  603. pragma Import(c,DosForceDelete, Link_name=>"_DosForceDelete");
  604.  
  605. function DosDupHandle( hFl :HFILE ;
  606.                        pHfl:PHFILE) return apiret;
  607. pragma Import(c,DosDupHandle, Link_name=>"_DosDupHandle");
  608.  
  609. function  DosQueryFHState(hFl  :HFILE ;
  610.                           pMode:PULONG) return apiret;
  611. pragma Import(c,DosQueryFHState, Link_name=>"_DosQueryFHState");
  612.  
  613. function  DosProtectQueryFHState(hFl               :HFILE ;
  614.                                  pMode             :PULONG;
  615.                                  fhFileHandleLockID:FHLOCK) return apiret;
  616. pragma Import(c,DosProtectQueryFHState, Link_name=>"_DosProtectQueryFHState");
  617.  
  618. function DosSetFHState(hFl :HFILE  ;
  619.                        mode:ULONG ) return apiret;
  620. pragma Import(c,DosSetFHState, Link_name=>"_DosSetFHState");
  621.  
  622. function DosProtectSetFHState(hFl                :HFILE ;
  623.                               mode               :ULONG ;
  624.                                fhFileHandleLockID:FHLOCK)  return apiret;
  625. pragma Import(c,DosProtectSetFHState, Link_name=>"_DosProtectSetFHState");
  626.  
  627. function DosQueryHType(hFl   :HFILE ;
  628.                         pType:PULONG;
  629.                         pAttr:PULONG)  return apiret;
  630. pragma Import(c,DosQueryHType, Link_name=>"_DosQueryHType");
  631.  
  632. function DosFindFirst(pszFileSpec:string ;
  633.                       phd        :PHDIR  ;
  634.                       flAttribute:ULONG  ;
  635.                       pfindbuf   :PVOID  ;
  636.                       cbBuf      :ULONG  ;
  637.                       pcFileNames:PULONG ;
  638.                       ulInfoLevel:ULONG  )  return apiret;
  639. pragma Import(c,DosFindFirst, Link_name=>"_DosFindFirst");
  640.  
  641. function DosFindNext(hD         :HDIR   ;
  642.                      pfindbuf   :PVOID  ;
  643.                      cbfindbuf  :ULONG  ;
  644.                      pcFilenames:PULONG ) return apiret;
  645. pragma Import(c,DosFindNext, Link_name=>"_DosFindNext");
  646.  
  647. function  DosFindClose(hD :HDIR) return apiret;
  648. pragma Import(c,DosFindClose, Link_name=>"_DosFindClose");
  649.  
  650. function  DosFSAttach(pszDevice    :PSZ  ;
  651.                       pszFilesystem:PSZ  ;
  652.                        pData       :PVOID;
  653.                        cbData      :ULONG;
  654.                        flag        :ULONG) return apiret;
  655. pragma Import(c,DosFSAttach, Link_name=>"_DosFSAttach");
  656.  
  657. function DosQueryFSAttach(pszDeviceName :PSZ         ;
  658.                           ulOrdinal     :ULONG       ;
  659.                           ulFSAInfoLevel:ULONG       ;
  660.                           pfsqb         :PFSQBUFFER2 ;
  661.                           pcbBuffLength :PULONG      ) return apiret;
  662. pragma Import(c,DosQueryFSAttach, Link_name=>"_DosQueryFSAttach");
  663.  
  664. function  DosFSCtl(pData   :PVOID  ;
  665.                    cbData  :ULONG  ;
  666.                    pcbData :PULONG ;
  667.                    pParms  :PVOID  ;
  668.                    cbParms :ULONG  ;
  669.                    pcbParms:PULONG ;
  670.                    func    :ULONG  ;
  671.                    pszRoute:PSZ    ;
  672.                    hFl     :HFILE  ;
  673.                    method  :ULONG  ) return apiret;
  674. pragma Import(c,DosFSCtl, Link_name=>"_DosFSCtl");
  675.  
  676. function DosSetFileSize(hFl   :HFILE ;
  677.                         cbSize:ULONG ) return apiret;
  678. pragma Import(c,DosSetFileSize, Link_name=>"_DosSetFileSize");
  679.  
  680. function DosProtectSetFileSize(hFl                :HFILE ;
  681.                                cbSize             :ULONG ;
  682.                                 fhFileHandleLockID:FHLOCK) return apiret;
  683. pragma Import(c,DosProtectSetFileSize, Link_name=>"_DosProtectSetFileSize");
  684.  
  685. function  DosResetBuffer(hFl:HFILE) return apiret;
  686. pragma Import(c,DosResetBuffer, Link_name=>"_DosResetBuffer");
  687.  
  688. function DosSetFilePtr(hFl      :HFILE ;
  689.                        ib       :LONG  ;
  690.                        method   :ULONG ;
  691.                        ibActual :PULONG) return apiret;
  692. pragma Import(c,DosSetFilePtr, Link_name=>"_DosSetFilePtr");
  693.  
  694. function  DosProtectSetFilePtr(hFl               :HFILE  ;
  695.                                ib                :LONG   ;
  696.                                method            :ULONG  ;
  697.                                ibActual          :PULONG ;
  698.                                fhFileHandleLockID:FHLOCK ) return apiret;
  699. pragma Import(c,DosProtectSetFilePtr, Link_name=>"_DosProtectSetFilePtr");
  700.  
  701. function  DosMove(pszOld:PSZ ;
  702.                   pszNew:PSZ ) return apiret;
  703. pragma Import(c,DosMove, Link_name=>"_DosMove");
  704.  
  705. function  DosCopy(pszOld:PSZ   ;
  706.                   pszNew:PSZ   ;
  707.                   option:ULONG ) return apiret;
  708. pragma Import(c,DosCopy, Link_name=>"_DosCopy");
  709.  
  710. function DosEditName(metalevel:ULONG ;
  711.                      pszSource:PSZ   ;
  712.                      pszEdit  :PSZ   ;
  713.                      pszTarget:PBYTE ;
  714.                      cbTarget :ULONG ) return apiret;
  715. pragma Import(c,DosEditName, Link_name=>"_DosEditName");
  716.  
  717. function DosCreateDir(pszDirName:PSZ    ;
  718.                       op2       :PEAOP2 ) return apiret;
  719. pragma Import(c,DosCreateDir, Link_name=>"_DosCreateDir");
  720.  
  721. function  DosDeleteDir(pszDir:PSZ ) return apiret;
  722. pragma Import(c,DosDeleteDir, Link_name=>"_DosDeleteDir");
  723.  
  724. function DosSetDefaultDisk(disknum:ULONG ) return apiret;
  725. pragma Import(c,DosSetDefaultDisk, Link_name=>"_DosSetDefaultDisk");
  726.  
  727. function  DosQueryCurrentDisk(pdisknum:PULONG ;
  728.                               plogical:PULONG ) return apiret;
  729. pragma Import(c,DosQueryCurrentDisk, Link_name=>"_DosQueryCurrentDisk");
  730.  
  731. function  DosSetCurrentDir( pszDir:PSZ) return apiret;
  732. pragma Import(c,DosSetCurrentDir, Link_name=>"_DosSetCurrentDir");
  733.  
  734. function DosQueryCurrentDir(disknum:ULONG ;
  735.                             pBuf   :PBYTE ;
  736.                              pcbBuf:PULONG) return apiret;
  737. pragma Import(c,DosQueryCurrentDir, Link_name=>"_DosQueryCurrentDir");
  738.  
  739. function DosQueryFSInfo(disknum  :ULONG ;
  740.                         infolevel:ULONG ;
  741.                         pBuf     :PVOID ;
  742.                         cbBuf    :ULONG ) return apiret;
  743. pragma Import(c,DosQueryFSInfo, Link_name=>"_DosQueryFSInfo");
  744.  
  745. function DosSetFSInfo(disknum  :ULONG ;
  746.                       infolevel:ULONG ;
  747.                       pBuf     :PVOID ;
  748.                       cbBuf    :ULONG ) return apiret;
  749. pragma Import(c,DosSetFSInfo, Link_name=>"_DosSetFSInfo");
  750.  
  751. function  DosQueryVerify(pBl:PBOOL32 ) return apiret;
  752. pragma Import(c,DosQueryVerify, Link_name=>"_DosQueryVerify");
  753.  
  754. function  DosSetVerify(Bl:BOOL32) return apiret;
  755. pragma Import(c,DosSetVerify, Link_name=>"_DosSetVerify");
  756.  
  757. function DosSetMaxFH(cFH:ULONG ) return apiret;
  758. pragma Import(c,DosSetMaxFH, Link_name=>"_DosSetMaxFH");
  759.  
  760. function DosSetRelMaxFH(pcbReqCount:PLONG  ;
  761.                         pcbCurMaxFH:PULONG ) return apiret;
  762. pragma Import(c,DosSetRelMaxFH, Link_name=>"_DosSetRelMaxFH");
  763.  
  764. function  DosQueryFileInfo(hf         :HFILE ;
  765.                            ulInfoLevel:ULONG ;
  766.                            pInfo      :PVOID ;
  767.                            cbInfoBuf  :ULONG ) return apiret;
  768. pragma Import(c,DosQueryFileInfo, Link_name=>"_DosQueryFileInfo");
  769.  
  770. function  DosProtectQueryFileInfo(hf                :HFILE;
  771.                                   ulInfoLevel       :ULONG;
  772.                                   pInfo             :PVOID;
  773.                                   cbInfoBuf         :ULONG;
  774.                                   fhFileHandleLockID:FHLOCK) return apiret;
  775. pragma Import(c,DosProtectQueryFileInfo, Link_name=>"_DosProtectQueryFileInfo");
  776.  
  777. function  DosSetFileInfo(hf         :HFILE ;
  778.                          ulInfoLevel:ULONG ;
  779.                          pInfoBuf   :PVOID ;
  780.                          cbInfoBuf  :ULONG ) return apiret;
  781. pragma Import(c,DosSetFileInfo, Link_name=>"_DosSetFileInfo");
  782.  
  783. function  DosProtectSetFileInfo(hf                 :HFILE ;
  784.                                 ulInfoLevel        :ULONG ;
  785.                                 pInfoBuf           :PVOID ;
  786.                                 cbInfoBuf          :ULONG ;
  787.                                  fhFileHandleLockID:FHLOCK) return apiret;
  788. pragma Import(c,DosProtectSetFileInfo, Link_name=>"_DosProtectSetFileInfo");
  789.  
  790. function DosQueryPathInfo(pszPathName:PSZ   ;
  791.                           ulInfoLevel:ULONG ;
  792.                           pInfoBuf   :PVOID ;
  793.                           cbInfoBuf  :ULONG )  return apiret;
  794. pragma Import(c,DosQueryPathInfo, Link_name=>"_DosQueryPathInfo");
  795.  
  796. function  DosSetPathInfo(pszPathName:PSZ   ;
  797.                          ulInfoLevel:ULONG ;
  798.                          pInfoBuf   :PVOID ;
  799.                          cbInfoBuf  :ULONG ;
  800.                          flOptions  :ULONG ) return apiret;
  801. pragma Import(c,DosSetPathInfo, Link_name=>"_DosSetPathInfo");
  802.  
  803.      -- defines for DosSetPathInfo -pathinfo flag --
  804. --   #define DSPI_WRTTHRU    16#10    -- write through --
  805.  
  806. function DosShutdown(ulReserved:ULONG )  return apiret;
  807. pragma Import(c,DosShutdown, Link_name=>"_DosShutdown");
  808.  
  809. function DosEnumAttribute(ulRefType  :ULONG  ;
  810.                           pvFile     :PVOID  ;
  811.                           ulEntry    :ULONG  ;
  812.                           pvBuf      :PVOID  ;
  813.                           cbBuf      :ULONG  ;
  814.                           pulCount   :PULONG ;
  815.                           ulInfoLevel:ULONG  ) return apiret;
  816. pragma Import(c,DosEnumAttribute, Link_name=>"_DosEnumAttribute");
  817.  
  818. function  DosProtectEnumAttribute(ulRefType           :ULONG ;
  819.                                   pvFile              :PVOID ;
  820.                                   ulEntry             :ULONG ;
  821.                                   pvBuf               :PVOID ;
  822.                                   cbBuf               :ULONG ;
  823.                                    pulCount           :PULONG;
  824.                                   ulInfoLevel         :ULONG ;
  825.                                   fhFileHandleLockId  :FHLOCK)return apiret;
  826. pragma Import(c,DosProtectEnumAttribute, Link_name=>"_DosProtectEnumAttribute");
  827.  
  828. type DENA1 is record -- dena1 level 1 info returned from DosEnumAttribute --
  829.      reserved   :UCHAR       ;       -- 0 --
  830.      cbName     :UCHAR       ;         -- length of name exculding NULL --
  831.      cbValue    :USHORT      ;        -- length of value --
  832.      szName     :aliased CHARACTER   ;       --[1]; -- variable length asciiz name --
  833. end record;  -- DENA1;
  834. type PDENA1 is access all DENA1;
  835.  
  836. subtype DENA2  is FEA2 ;
  837. subtype PDENA2 is PFEA2 ;
  838.  
  839.      -- Infolevels for DosEnumAttribute
  840. ENUMEA_LEVEL_NO_VALUE :constant ulong:=  1; -- FEA without value
  841.  
  842.      -- Reference types for DosEnumAttribute
  843.  
  844.  ENUMEA_REFTYPE_FHANDLE :constant ulong := 0 ;      -- file handle
  845.  ENUMEA_REFTYPE_PATH    :constant ulong := 1 ;      -- path name
  846.  ENUMEA_REFTYPE_MAX     :constant ulong := 1 ;
  847.  
  848. end Os2.Fm;
  849.