home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 March / Chip_1999-03_cd.bin / zkuste / delphi / D234C13 / RALIB.ZIP / RALib / Lib / RAIExpr.pas < prev    next >
Pascal/Delphi Source File  |  1998-08-15  |  6KB  |  202 lines

  1. {***********************************************************
  2.                 R&A Library
  3.        Copyright (C) 1996-98 R&A
  4.  
  5.        description : R&A interpretator
  6.  
  7.        programer   : black
  8.        e-mail      : blacknbs@chat.ru
  9.        www         : www.chat.ru\~blacknbs\ralib
  10. ************************************************************}
  11.  
  12. {$INCLUDE RA.INC}
  13.  
  14. unit RAIExpr;
  15. {
  16.  ╠εΣ≤δⁿ ±Γ τ√Γασ≥ Γ±σ ∞εΣ≤δΦ Φφ≥σ≡∩≡σ≥α≥ε≡α, α ≥αΩµσ
  17.  ≡σαδΦτ≤σ≥ ≡ Σ ⌠≤φΩ÷ΦΘ Σδ  ±ετΣαφΦ  ²Ωτσ∞∩δ ≡εΓ εß·σΩ≥εΓ,
  18.  ±εΓ∞σ±≥Φ∞√⌡ ± Φφ≥σ≡⌠σΘ±α∞Φ Γ Intf.
  19. }
  20.       
  21. interface
  22. {$IFNDEF DLL}
  23.   { $DEFINE USEDLL}
  24. {$ENDIF}
  25.  
  26.   uses Windows,
  27. {$IFDEF USEDLL}
  28.   RAIIntf;
  29. {$ELSE}
  30.   SysUtils,
  31.   RAIClas, RAIProg, RAISystem, RAIIntf, RAIProc;
  32. {$ENDIF}
  33.  
  34.   function InterVersion : word; export;
  35.  
  36.   {╘≤φΩ÷ΦΦ ∩εΣΣσ≡µΩΦ Φφ≥σ≡⌠σΘ±εΓ - helpers }
  37.   procedure IIValueAssign(Dest, Source : IIValue); export;
  38.   function IIValueIsConstant(AIValue : IIValue) : boolean; export;
  39.   function IIValueIsReal(AIValue : IIValue) : boolean; export;
  40.   function IIValueIsInteger(AIValue : IIValue) : boolean; export;
  41.   procedure IIValueSetStr(AIValue : IIValue; S : iString); export;
  42.   procedure IIValueGetStr(AIValue : IIValue; var S : string); export;
  43.   function HasIntf(Unknown : IUnknown; const GUID : TGUID) : boolean; export;
  44.   function GetIntf(Unknown : IUnknown; const GUID : TGUID) : IUnknown; export;
  45.  
  46.   procedure ProgRun(IInterObject : IIInterObject); export;
  47.   procedure ProgGetBlockByPos(pcProgram : iString; const Pos : integer; var PosBeg, PosEnd : integer); export;
  48.  
  49.   function CreateInterObject(const IID : TGUID; out Obj{: IUnknown}) : HResult; export;
  50.   function Cmp(Str1, Str2 : iString) : boolean; export;
  51.  
  52.  {$IFDEF DEBUG}
  53.   function GlobalObjCount : integer; export;
  54.   function GlobalRefCount : integer; export;
  55. {$ENDIF}
  56.  
  57.   function HiddenError(const ErrCode : integer) : boolean;
  58.  
  59. implementation
  60.  
  61. const
  62.   Version = 35; {Γσ≡±Φ  Φφ≥σ≡∩≡σ≥α≥ε≡α = 0.35}
  63.  
  64.  
  65. {$IFDEF USEDLL}
  66. const
  67.   Inter = 'RAInter.Dll';
  68.  
  69.   function InterVersion : word; external Inter;
  70.  
  71.   procedure IIValueAssign(Dest, Source : IIValue); external Inter;
  72.   function IIValueIsConstant(AIValue : IIValue) : boolean; external Inter;
  73.   function IIValueIsReal(AIValue : IIValue) : boolean; external Inter;
  74.   function IIValueIsInteger(AIValue : IIValue) : boolean; external Inter;
  75.   procedure IIValueSetStr(AIValue : IIValue; S : iString); external Inter;
  76. //  procedure IIValueGetStr(AIValue : IIValue; var S : string); external Inter;
  77.   function HasIntf(Unknown : IUnknown; const GUID : TGUID) : boolean; external Inter;
  78.   function GetIntf(Unknown : IUnknown; const GUID : TGUID) : IUnknown; external Inter;
  79.  
  80.   procedure ProgRun(IInterObject : IIInterObject); external Inter;
  81.   procedure ProgGetBlockByPos(pcProgram : iString; const Pos : integer; var PosBeg, PosEnd : integer); external Inter;
  82.  
  83.  
  84.   function CreateInterObject(const IID : TGUID; out Obj{: IUnknown}) : HResult; external Inter;
  85.   function Cmp(Str1, Str2 : iString) : boolean; external Inter;
  86.  
  87.  
  88. {$IFDEF DEBUG}
  89.   function GlobalObjCount : integer; external Inter;
  90.   function GlobalRefCount : integer; external Inter;
  91. {$ENDIF}
  92.  
  93. {$ELSE}
  94.  
  95. procedure ProgRun(IInterObject : IIInterObject);
  96. var
  97.   Programa : TInter;
  98. begin
  99.   Programa := TInter.Create;
  100.   try
  101.     Programa.Run(IInterObject);
  102.   finally
  103.     IUnknown(Programa)._Release;
  104.   end;
  105. end;
  106.  
  107. {************************ ╘≤φΩ÷ΦΦ ∩εΣΣσ≡µΩΦ IIValue ************************}
  108. procedure IIValueAssign(Dest, Source : IIValue);
  109. begin
  110.   RAIClas.IIValueAssign(Dest, Source);
  111. end;
  112.  
  113. function IIValueIsConstant(AIValue : IIValue) : boolean;
  114. begin
  115.   Result := RAIClas.IIValueIsConstant(AIValue);
  116. end;
  117.  
  118. function IIValueIsReal(AIValue : IIValue) : boolean;
  119. begin
  120.   Result := RAIClas.IIValueIsReal(AIValue);
  121. end;
  122.  
  123. function IIValueIsInteger(AIValue : IIValue) : boolean;
  124. begin
  125.   Result := RAIClas.IIValueIsInteger(AIValue);
  126. end;
  127.  
  128. procedure IIValueSetStr(AIValue : IIValue; S : iString);
  129. begin
  130.   RAIClas.IIValueSetStr(AIValue, S);
  131. end;
  132.  
  133. procedure IIValueGetStr(AIValue : IIValue; var S : string);
  134. begin
  135.   RAIClas.IIValueGetStr(AIValue, S);
  136. end;
  137. {######################## ╘≤φΩ÷ΦΦ ∩εΣΣσ≡µΩΦ IIValue ########################}
  138.  
  139. function HasIntf(Unknown : IUnknown; const GUID : TGUID) : boolean;
  140. begin
  141.   Result := RAIClas.HasIntf(Unknown, GUID);
  142. end;
  143.  
  144. function GetIntf(Unknown : IUnknown; const GUID : TGUID) : IUnknown;
  145. begin
  146.   Result := RAIClas.GetIntf(Unknown, GUID);
  147. end;
  148.  
  149. function CreateInterObject(const IID : TGUID; out Obj) : HResult;
  150.   function G{GuidIs}(const GUID : TGUID) : boolean;
  151.   begin
  152.     Result := CompareMem(@IID, @GUID, sizeof(TGUID));{IsEqualGUID(IID, GUID)}
  153.   end;
  154. begin
  155.   Result := S_OK;
  156.   if G(IID_IIValue)        then IUnknown(Obj) := IIValue(TIValue.Create0)
  157.   else if G(IID_IIInter)   then IUnknown(Obj) := IIInter(TInter.Create)
  158.   else if G(IID_ISystem)   then IUnknown(Obj) := IIObject(TISystem.Create)
  159.   else if G(IID_ISysUtils) then IUnknown(Obj) := IIObject(TISysUtils.Create)
  160.  {$IFDEF RAINTER_OLEAUTO}
  161.   else if G(IID_IOleAuto)  then IUnknown(Obj) := IIObject(TIOleAuto.Create)
  162.  {$ENDIF RAINTER_OLEAUTO}
  163.   else Result := E_INVALIDARG;
  164.  
  165.   if Result = S_OK then IUnknown(Obj)._Release;
  166. end;
  167.  
  168. function Cmp(Str1, Str2 : iString) : boolean;
  169. begin
  170.   Result := ANSICompareText(Str1, Str2) = 0;
  171. end;
  172.  
  173. {$IFDEF DEBUG}
  174. function GlobalObjCount : integer;
  175. begin
  176.   Result := RAIClas.GlobalObjCount;
  177. end;
  178.  
  179. function GlobalRefCount : integer;
  180. begin
  181.   Result := RAIClas.GlobalRefCount;
  182. end;
  183. {$ENDIF}
  184.  
  185. function InterVersion : word;
  186. begin
  187.   Result := Version;
  188. end;
  189.  
  190. procedure ProgGetBlockByPos(pcProgram : iString; const Pos : integer; var PosBeg, PosEnd : integer);
  191. begin
  192.   RAIProc.GetBlockByPos(pcProgram, Pos, PosBeg, PosEnd);
  193. end;
  194. {$ENDIF}
  195.  
  196. function HiddenError(const ErrCode : integer) : boolean;
  197. begin
  198.   Result := RAIClas.HiddenError(ErrCode);
  199. end;
  200.  
  201. end.
  202.