home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / lan / netcraft / nettts.pas < prev   
Pascal/Delphi Source File  |  1988-06-10  |  6KB  |  265 lines

  1. {*********************************************************************
  2.  
  3.   NETTTS - A unit of NetWare Application Program Interfaces
  4.            Relating to Transaction Tracking System Services
  5.            for Turbo Pascal 4.0 and Advanced NetWare (any verison)
  6.  
  7.   Copyright (c) 1988, Richard S. Sadowsky
  8.   All rights reserved
  9.  
  10.   version .6 4/22/88 by Richard S. Sadowsky 74017,1670
  11.  
  12. **********************************************************************}
  13. Unit NetTTS;
  14. {$I-,V-,S+,R+}
  15.  
  16. interface
  17.  
  18. uses Dos;
  19.  
  20. var
  21.   NovRegs          : Registers; { register type for DOS/Novell calls }
  22.  
  23. function TTSAbort : Byte;
  24. { Return code:
  25.   00h  - success
  26.   FDh  - TTS Disabled
  27.   FEh  - Transaction ends records locked (trans aborted, but recs left locked)
  28.   FFh  - no explicit transaction active
  29. }
  30.  
  31. function TTSBegin : Byte;
  32. { return code:
  33.   00h  - Success
  34.   96h  - Out of Dynamic Workspace
  35.   FEh  - Implicit transaction active (active implicit turned into explicit)
  36.   FFh  - Explicit Transaction active
  37. }
  38.  
  39. function TTSEnd(var ID : LongInt)  : Byte;
  40. { return code:
  41.   00h  - Success
  42.   FDh  - TTS Disabled
  43.   FEh  - Tranaction ends records locked
  44.   FFh  - No Explicit transaction active
  45. }
  46.  
  47. function TTSStatus(ID : LongInt) : Boolean;
  48. { returns TRUE if referenced transaction has been committed to disk }
  49.  
  50. function TTSGetAppThresh(var Logical,Physical : Byte) : Boolean;
  51.  
  52. function TTSGetWSThresh(var Logical,Physical : Byte) : Boolean;
  53.  
  54. function TTSAvailable : Boolean;
  55.  
  56. function TTSDisable : Boolean;
  57.  
  58. function TTSEnable : Boolean;
  59.  
  60. function HiLong(Long : LongInt) : Word;
  61. { This inline directive is similar to Turbo's Hi() function, except }
  62. { it returns the high word of a LongInt                             }
  63. Inline(
  64.   $5A/       {pop      dx    ; low word of long}
  65.   $58);      {pop      ax    ; hi word of long}
  66.  
  67. function LowLong(Long : LongInt) : Word;
  68. { This inline directive is similar to Turbo's Lo() function, except }
  69. { it returns the Low word of a LongInt                              }
  70. Inline(
  71.   $5A/       {pop      dx    ; low word of long}
  72.   $58/       {pop      ax    ; hi word of long}
  73.   $89/$D0);  {mov      ax,dx ; return lo word as function result in Ax}
  74.  
  75. function MakeLong(HiWord,LoWord : Word) : LongInt;
  76. {takes hi and lo words and makes a longint }
  77. Inline(
  78.   $58/    { pop ax ; pop low word into AX }
  79.   $5A);   { pop dx ; pop high word into DX }
  80.  
  81. implementation
  82.  
  83. function TTSAbort : Byte;
  84. { Return code:
  85.   00h  - success
  86.   FDh  - TTS Disabled
  87.   FEh  - Transaction ends records locked (trans aborted, but recs left locked
  88.   FFh  - no explicit transaction active
  89. }
  90. begin
  91.   with NovRegs do begin
  92.     AX := $C703;
  93.     MsDos(NovRegs);
  94.     if Flags and FCarry <> 0 then
  95.       TTSAbort := AL
  96.     else
  97.       TTSAbort := 0;
  98.   end;
  99. end;
  100.  
  101. function TTSBegin : Byte;
  102. { return code:
  103.   00h  - Success
  104.   96h  - Out of Dynamic Workspace
  105.   FEh  - Implicit transaction active (active implicit turned into explicit)
  106.   FFh  - Explicit Transaction active
  107. }
  108.  
  109. begin
  110.   with NovRegs do begin
  111.     AX := $C700;
  112.     MsDos(NovRegs);
  113.     if Flags and FCarry <> 0 then
  114.       TTSBegin := AL
  115.     else
  116.       TTSBegin := 0;
  117.   end
  118. end;
  119.  
  120. function TTSEnd(var ID : LongInt)  : Byte;
  121. { return code:
  122.   00h  - Success
  123.   FDh  - TTS Disabled
  124.   FEh  - Tranaction ends records locked
  125.   FFh  - No Explicit transaction active
  126. }
  127.  
  128. begin
  129.   with NovRegs do begin
  130.     AX := $C701;
  131.     MsDos(NovRegs);
  132.     ID := MakeLong(CX,DX);
  133.     if Flags and FCarry <> 0 then
  134.       TTSEnd := AL
  135.     else
  136.       TTSEnd := 0;
  137.   end
  138. end;
  139.  
  140. function TTSGetAppThresh(var Logical,Physical : Byte) : Boolean;
  141.  
  142. begin
  143.   with NovRegs do begin
  144.     AX := $C705;
  145.     MsDos(NovRegs);
  146.     TTSGetAppThresh := AL = 0;
  147.     Logical  := CL;
  148.     Physical := CH;
  149.   end;
  150. end;
  151.  
  152. function TTSGetWSThresh(var Logical,Physical : Byte) : Boolean;
  153.  
  154. begin
  155.   with NovRegs do begin
  156.     AX := $C707;
  157.     MsDos(NovRegs);
  158.     TTSGetWSThresh := AL = 0;
  159.     Logical  := CL;
  160.     Physical := CH;
  161.   end;
  162. end;
  163.  
  164. function TTSAvailable : Boolean;
  165.  
  166. begin
  167.   with NovRegs do begin
  168.     AX := $C702;
  169.     MsDos(NovRegs);
  170.     TTSAvailable := AL = 1;
  171.   end
  172. end;
  173.  
  174. function TTSSetAppThresh(Logical,Physical : Byte) : Byte;
  175.  
  176. begin
  177.   with NovRegs do begin
  178.     AX := $C706;
  179.     CL := Logical;
  180.     CH := Physical;
  181.     MsDos(NovRegs);
  182.     TTSSetAppThresh := AL;
  183.   end;
  184. end;
  185.  
  186. function TTSSetWSThresh(Logical,Physical : Byte) : Byte;
  187.  
  188. begin
  189.   with NovRegs do begin
  190.     AX := $C708;
  191.     CL := Logical;
  192.     CH := Physical;
  193.     MsDos(NovRegs);
  194.     TTSSetWSThresh := AL;
  195.   end;
  196. end;
  197.  
  198. function TTSStatus(ID : LongInt) : Boolean;
  199. { returns TRUE if referenced transaction has been committed to disk }
  200.  
  201. begin
  202.   with NovRegs do begin
  203.     AH := $C7;
  204.     AL := $04;
  205.     CX := HiLong(ID);
  206.     DX := LowLong(ID);
  207.     MsDos(NovRegs);
  208.     TTSStatus := AL = 0;
  209.   end
  210. end;
  211.  
  212. function TTSDisable : Boolean;
  213.  
  214. var
  215.   Reply            : Word;
  216.   Request          : Record
  217.                        Len  : Word;
  218.                        SubF : Byte;
  219.                      end;
  220.  
  221. begin
  222.   Reply := 0;
  223.   with Request do begin
  224.     Len  := 1;
  225.     SubF := $CF;
  226.   end;
  227.   with NovRegs do begin
  228.     AX := $E300;
  229.     DS := Seg(Request);
  230.     SI := Ofs(Request);
  231.     ES := Seg(Reply);
  232.     DI := Ofs(Reply);
  233.     MsDos(NovRegs);
  234.     TTSDisable := AL = 0;
  235.   end
  236. end;
  237.  
  238. function TTSEnable : Boolean;
  239.  
  240. var
  241.   Reply            : Word;
  242.   Request          : Record
  243.                        Len  : Word;
  244.                        SubF : Byte;
  245.                      end;
  246.  
  247. begin
  248.   Reply := 0;
  249.   with Request do begin
  250.     Len  := 1;
  251.     SubF := $D0;
  252.   end;
  253.   with NovRegs do begin
  254.     AX := $E300;
  255.     DS := Seg(Request);
  256.     SI := Ofs(Request);
  257.     ES := Seg(Reply);
  258.     DI := Ofs(Reply);
  259.     MsDos(NovRegs);
  260.     TTSEnable := AL = 0;
  261.   end
  262. end;
  263.  
  264. end.
  265.