home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / HDPSTACK.LZH / HDPSTACK.MSA / HDPSTACK / SOURCE / XHDI.I < prev   
Text File  |  1995-03-06  |  9KB  |  333 lines

  1. IMPLEMENTATION MODULE XHDI;
  2.  
  3. FROM  BIOS                 IMPORT  RW, BPB, DriveSet;
  4. FROM  CookieJar            IMPORT  GetCookie;
  5. FROM  SYSTEM               IMPORT  ADDRESS, CAST, ADR, CALLEXT;
  6. FROM  SysUtil2             IMPORT  ModeBuf, EnterSupervisorMode, 
  7.                                    LeaveSupervisorMode;
  8.  
  9. CONST XHDICookie = 'XHDI';
  10.  
  11.       XHDIMagic = $27011992;
  12.  
  13.  
  14. PROCEDURE GetXHDI (VAR adr: ADDRESS): BOOLEAN;
  15. VAR helpPtr: POINTER TO LONGCARD;
  16. BEGIN
  17.   IF GetCookie (XHDICookie, adr)
  18.    THEN
  19.     helpPtr:= adr;
  20.     DEC (helpPtr, SIZE (LONGCARD));
  21.     RETURN (helpPtr^ = XHDIMagic);
  22.    ELSE
  23.     RETURN FALSE;
  24.   END;
  25. END GetXHDI;
  26.  
  27.  
  28. PROCEDURE XHGetVersion (): CARDINAL;
  29. VAR adr: ADDRESS;
  30.     hdl: ModeBuf;
  31. BEGIN
  32.   IF GetXHDI (adr)
  33.    THEN
  34.     EnterSupervisorMode (hdl);
  35.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 0));
  36.     LeaveSupervisorMode (hdl);
  37.     RETURN VAL (CARDINAL, XHDIResult);
  38.    ELSE
  39.     RETURN 0;
  40.   END;
  41. END XHGetVersion;
  42.  
  43.  
  44. PROCEDURE XHInqTarget (major, minor: CARDINAL;
  45.                        VAR blockSize: LONGCARD;
  46.                        VAR deviceFlags: DeviceFlagSet;
  47.                        VAR productName: ARRAY OF CHAR);
  48. VAR adr: ADDRESS;
  49.     hdl: ModeBuf;
  50. BEGIN
  51.   IF GetXHDI (adr)
  52.    THEN
  53.     EnterSupervisorMode (hdl);
  54.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 1, major, minor, ADR (blockSize),
  55.                                          ADR (deviceFlags), ADR (productName)));
  56.     LeaveSupervisorMode (hdl);
  57.   END;
  58. END XHInqTarget;
  59.  
  60.  
  61. PROCEDURE XHReserve (major, minor: CARDINAL; doReserve: BOOLEAN;
  62.                      VAR key: CARDINAL);
  63. VAR adr: ADDRESS;
  64.     hdl: ModeBuf;
  65. BEGIN
  66.   IF GetXHDI (adr)
  67.    THEN
  68.     EnterSupervisorMode (hdl);
  69.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 2, major, minor, doReserve, key));
  70.     LeaveSupervisorMode (hdl);
  71.     key:= CAST (CARDINAL, XHDIResult);
  72.     IF doReserve AND (XHDIResult > 0)
  73.      THEN
  74.       XHDIResult:= 0;
  75.     END;
  76.   END;
  77. END XHReserve;
  78.  
  79.  
  80. PROCEDURE XHLock (major, minor: CARDINAL; doLock: BOOLEAN;
  81.                   key: CARDINAL);
  82. VAR adr: ADDRESS;
  83.     hdl: ModeBuf;
  84. BEGIN
  85.   IF GetXHDI (adr)
  86.    THEN
  87.     EnterSupervisorMode (hdl);
  88.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 3, major, minor, doLock, key));
  89.     LeaveSupervisorMode (hdl);
  90.   END;
  91. END XHLock;
  92.  
  93.  
  94. PROCEDURE XHStop (major, minor: CARDINAL; doStop: BOOLEAN;
  95.                   key: CARDINAL);
  96. VAR adr: ADDRESS;
  97.     hdl: ModeBuf;
  98. BEGIN
  99.   IF GetXHDI (adr)
  100.    THEN
  101.     EnterSupervisorMode (hdl);
  102.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 4, major, minor, doStop, key));
  103.     LeaveSupervisorMode (hdl);
  104.   END;
  105. END XHStop;
  106.  
  107.  
  108. PROCEDURE XHEject (major, minor: CARDINAL; doEject: BOOLEAN;
  109.                    key: CARDINAL);
  110. VAR adr: ADDRESS;
  111.     hdl: ModeBuf;
  112. BEGIN
  113.   IF GetXHDI (adr)
  114.    THEN
  115.     EnterSupervisorMode (hdl);
  116.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 5, major, minor, doEject, key));
  117.     LeaveSupervisorMode (hdl);
  118.   END;
  119. END XHEject;
  120.  
  121.  
  122. PROCEDURE XHDrvMap (): DriveSet;
  123. VAR adr: ADDRESS;
  124.     hdl: ModeBuf;
  125. BEGIN
  126.   IF GetXHDI (adr)
  127.    THEN
  128.     EnterSupervisorMode (hdl);
  129.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 6));
  130.     LeaveSupervisorMode (hdl);
  131.     RETURN CAST (DriveSet, XHDIResult);
  132.    ELSE
  133.     RETURN DriveSet{};
  134.   END;
  135. END XHDrvMap;
  136.  
  137.  
  138. PROCEDURE XHInqDev (dev: CARDINAL; VAR major, minor: CARDINAL;
  139.                     VAR startSector: LONGCARD; VAR bpb: BPB);
  140. VAR adr: ADDRESS;
  141.     hdl: ModeBuf;
  142. BEGIN
  143.   IF GetXHDI (adr)
  144.    THEN
  145.     EnterSupervisorMode (hdl);
  146.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 7, dev, ADR (major), ADR (minor),
  147.                                          ADR (startSector), ADR (bpb)));
  148.     LeaveSupervisorMode (hdl);
  149.   END;
  150. END XHInqDev;
  151.  
  152.  
  153. PROCEDURE XHInqDriver (dev: CARDINAL; VAR name, version, company: ARRAY OF CHAR;
  154.                        VAR AHDIVersion, maxIPL: CARDINAL);
  155. VAR adr: ADDRESS;
  156.     hdl: ModeBuf;
  157. BEGIN
  158.   IF GetXHDI (adr)
  159.    THEN
  160.     EnterSupervisorMode (hdl);
  161.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 8, dev, ADR (name), ADR (version),
  162.                        ADR (company), ADR (AHDIVersion), ADR (maxIPL)));
  163.     LeaveSupervisorMode (hdl);
  164.   END;
  165. END XHInqDriver;
  166.  
  167.  
  168. PROCEDURE XHNewCookie (newCookie: ADDRESS);
  169. VAR adr: ADDRESS;
  170.     hdl: ModeBuf;
  171. BEGIN
  172.   IF GetXHDI (adr)
  173.    THEN
  174.     EnterSupervisorMode (hdl);
  175.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 9, newCookie));
  176.     LeaveSupervisorMode (hdl);
  177.   END;
  178. END XHNewCookie;
  179.  
  180.  
  181. PROCEDURE XHReadWrite (major, minor: CARDINAL; rw: RW;
  182.                        recno: LONGCARD; count: CARDINAL; buf: ADDRESS);
  183. VAR adr: ADDRESS;
  184.     hdl: ModeBuf;
  185. BEGIN
  186.   IF GetXHDI (adr)
  187.    THEN
  188.     EnterSupervisorMode (hdl);
  189.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 10, major, minor, rw,
  190.                                          recno, count, buf));
  191.     LeaveSupervisorMode (hdl);
  192.   END;
  193. END XHReadWrite;
  194.  
  195.  
  196. PROCEDURE XHInqTarget2 (major, minor: CARDINAL;
  197.                         VAR blockSize: LONGCARD;
  198.                         VAR deviceFlags: DeviceFlagSet;
  199.                         VAR productName: ARRAY OF CHAR);
  200. VAR adr: ADDRESS;
  201.     hdl: ModeBuf;
  202. BEGIN
  203.   IF GetXHDI (adr)
  204.    THEN
  205.     EnterSupervisorMode (hdl);
  206.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 11, major, minor, ADR (blockSize),
  207.                        ADR (deviceFlags), ADR (productName), HIGH (productName)));
  208.     LeaveSupervisorMode (hdl);
  209.   END;
  210. END XHInqTarget2;
  211.  
  212.  
  213. PROCEDURE XHInqDev2 (dev: CARDINAL; VAR major, minor: CARDINAL;
  214.                      VAR startSector: LONGCARD; VAR bpb: BPB;
  215.                      VAR blocks: LONGCARD; VAR partid: ARRAY OF CHAR);
  216. VAR adr: ADDRESS;
  217.     hdl: ModeBuf;
  218. BEGIN
  219.   IF GetXHDI (adr)
  220.    THEN
  221.     EnterSupervisorMode (hdl);
  222.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 12, dev, ADR (major), ADR (minor),
  223.                      ADR (startSector), ADR (bpb), ADR (blocks), ADR (partid)));
  224.     LeaveSupervisorMode (hdl);
  225.   END;
  226. END XHInqDev2;
  227.  
  228.  
  229. PROCEDURE XHDriverSpecial (key1, key2: LONGCARD; subOpcode: CARDINAL;
  230.                            data: ADDRESS);
  231. VAR adr: ADDRESS;
  232.     hdl: ModeBuf;
  233. BEGIN
  234.   IF GetXHDI (adr)
  235.    THEN
  236.     EnterSupervisorMode (hdl);
  237.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 13, key1, key2, subOpcode, data));
  238.     LeaveSupervisorMode (hdl);
  239.   END;
  240. END XHDriverSpecial;
  241.  
  242.  
  243. PROCEDURE XHGetCapacity (major, minor: CARDINAL; VAR blocks: LONGCARD;
  244.                          VAR blockSize: LONGCARD);
  245. VAR adr: ADDRESS;
  246.     hdl: ModeBuf;
  247. BEGIN
  248.   IF GetXHDI (adr)
  249.    THEN
  250.     EnterSupervisorMode (hdl);
  251.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 14, major, minor, ADR (blocks),
  252.                                          ADR (blockSize)));
  253.     LeaveSupervisorMode (hdl);
  254.   END;
  255. END XHGetCapacity;
  256.  
  257.  
  258. PROCEDURE XHMediumChanged (major, minor: CARDINAL): BOOLEAN;
  259. VAR adr: ADDRESS;
  260.     hdl: ModeBuf;
  261. BEGIN
  262.   IF GetXHDI (adr)
  263.    THEN
  264.     EnterSupervisorMode (hdl);
  265.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 15, major, minor));
  266.     LeaveSupervisorMode (hdl);
  267.     RETURN (XHDIResult = 0);
  268.    ELSE RETURN FALSE;
  269.   END;
  270. END XHMediumChanged;
  271.  
  272.  
  273. PROCEDURE XHMiNTInfo (opcode: CARDINAL; data: ADDRESS);
  274. VAR adr: ADDRESS;
  275.     hdl: ModeBuf;
  276. BEGIN
  277.   IF GetXHDI (adr)
  278.    THEN
  279.     EnterSupervisorMode (hdl);
  280.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 16, opcode, data));
  281.     LeaveSupervisorMode (hdl);
  282.   END;
  283. END XHMiNTInfo;
  284.  
  285.  
  286. PROCEDURE XHDOSLimits (which: CARDINAL; limit: LONGCARD);
  287. VAR adr: ADDRESS;
  288.     hdl: ModeBuf;
  289. BEGIN
  290.   IF GetXHDI (adr)
  291.    THEN
  292.     EnterSupervisorMode (hdl);
  293.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 17, which, limit));
  294.     LeaveSupervisorMode (hdl);
  295.   END;
  296. END XHDOSLimits;
  297.  
  298.  
  299. PROCEDURE XHLastAccess (major, minor: CARDINAL; VAR ms: LONGCARD);
  300. VAR adr: ADDRESS;
  301.     hdl: ModeBuf;
  302. BEGIN
  303.   IF GetXHDI (adr)
  304.    THEN
  305.     EnterSupervisorMode (hdl);
  306.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 18, major, minor, ADR (ms)));
  307.     LeaveSupervisorMode (hdl);
  308.   END;
  309. END XHLastAccess;
  310.  
  311.  
  312. PROCEDURE XHReaccess (major, minor: CARDINAL);
  313. VAR adr: ADDRESS;
  314.     hdl: ModeBuf;
  315. BEGIN
  316.   IF GetXHDI (adr)
  317.    THEN
  318.     EnterSupervisorMode (hdl);
  319.     XHDIResult:= CAST (LONGINT, CALLEXT (adr, 19, major, minor));
  320.     LeaveSupervisorMode (hdl);
  321.   END;
  322. END XHReaccess;
  323.  
  324.  
  325. PROCEDURE XHMakeName (major, minor: CARDINAL; startSector: LONGCARD;
  326.                       VAR name: ARRAY OF CHAR);
  327. BEGIN
  328.  
  329. END XHMakeName;
  330.  
  331.  
  332. END XHDI.
  333.