/packages/amunits/src/otherlibs/amarquee.pas

https://github.com/slibre/freepascal · Pascal · 1155 lines · 890 code · 128 blank · 137 comment · 6 complexity · e307e5e17655eac8b49d5f477861b1f0 MD5 · raw file

  1. {
  2. This file is part of the Free Pascal run time library.
  3. A file in Amiga system run time library.
  4. Copyright (c) 1998-2000 by Nils Sjoholm
  5. member of the Amiga RTL development team.
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. {
  13. History:
  14. First translation of AMarquee.h to FPC pascal.
  15. No testing has been done so there could be bugs
  16. in here. If you find any bugs please let me know.
  17. 25 Aug 2000.
  18. Added functions and procedures with array of const.
  19. For use with fpc 1.0.7
  20. 30 Nov 2002.
  21. Added the defines use_amiga_smartlink and
  22. use_auto_openlib.
  23. 12 Jan 2003.
  24. Changed startcode for unit.
  25. 10 Feb 2003.
  26. nils.sjoholm@mailbox.swipnet.se
  27. }
  28. {$mode objfpc}
  29. {$I useamigasmartlink.inc}
  30. {$ifdef use_amiga_smartlink}
  31. {$smartlink on}
  32. {$endif use_amiga_smartlink}
  33. unit amarquee;
  34. interface
  35. uses exec, utility;
  36. { This library contains definitions and structures necessary to use amarquee.library. }
  37. { Different error types that can be returned to the client in QMessages }
  38. { Everything is okay }
  39. const
  40. AMARQUEENAME : PChar = 'amarquee.library';
  41. QERROR_NO_ERROR = 0;
  42. { Don't know what the error was. }
  43. QERROR_UNKNOWN = -(1);
  44. { Keystring could not be parsed or "dir" does not exist }
  45. QERROR_MALFORMED_KEY = -(2);
  46. { Server did not have enough mem available to complete request }
  47. QERROR_NO_SERVER_MEM = -(3);
  48. { The connection to the server went south }
  49. QERROR_NO_CONNECTION = -(4);
  50. { You're not allowed to do that! }
  51. QERROR_UNPRIVILEGED = -(5);
  52. { Feature you requested does not exist yet }
  53. QERROR_UNIMPLEMENTED = -(6);
  54. { Your computer didn't have enough memory available to complete an action }
  55. QERROR_NO_CLIENT_MEM = -(7);
  56. { This message is a "wall" text message from a server admin }
  57. QERROR_SYS_MESSAGE = -(8);
  58. { This message is a "send done" notification from your client TCP thread (new for v47) }
  59. QERROR_SEND_DONE = -(9);
  60. { These error types may be returned by QFreeSession() or set to the error code
  61. variable (set with the QSESSION_ERRORCODEPTR tag), after a QSession
  62. allocation attempt fails. }
  63. { TCP stack wasn't running }
  64. QERROR_NO_TCP_STACK = -(20);
  65. { Hostname lookup of server failed }
  66. QERROR_HOSTNAME_LOOKUP = -(21);
  67. { TCP thread got a control-C }
  68. QERROR_ABORTED = -(22);
  69. { No AMarquee server at requested host/port }
  70. QERROR_NO_SERVER = -(23);
  71. { The program wasn't launched by inetd }
  72. QERROR_NO_INETD = -(24);
  73. { The server wouldn't accept our connection }
  74. QERROR_ACCESS_DENIED = -(25);
  75. { The client is out of memory }
  76. QERROR_NO_MEMORY = -(26);
  77. { No server at requested host/port }
  78. QERROR_NO_TCPSERVER = -(27);
  79. { Flags to use with QGo() }
  80. { Request notification via sync packet when all has settled on the server side }
  81. QGOF_SYNC = 1 shl 0;
  82. { Request notification via QERROR_SEND_DONE message when the TCP thread has finished sending this transaction (new for v47) }
  83. QGOF_NOTIFY = 1 shl 1;
  84. { Flags representing special privileges; used with QRequestPrivileges(), etc }
  85. { license to kill! }
  86. QPRIV_KILLCLIENTS = 1 shl 0;
  87. { Ability to set env vars, etc, on the server }
  88. QPRIV_ADMIN = 1 shl 1;
  89. { Ability to receive special sysadmin messages }
  90. QPRIV_GETSYSMESSAGES = 1 shl 2;
  91. { Ability to send special sysadmin messages }
  92. QPRIV_SENDSYSMESSAGES = 1 shl 3;
  93. { all possible QPRIV_ bits }
  94. QPRIV_ALL = $0F;
  95. { Wait() on this for QMessages! }
  96. { }
  97. { Invisible, private info is here... don't trust sizeof(QSession)! }
  98. { }
  99. type
  100. PQSession = ^TQSession;
  101. TQSession = record
  102. qMsgPort : PMsgPort;
  103. end;
  104. { All events from AMarquee come in this package! }
  105. { Don't directly use the contents of qm_Msg! }
  106. { Message ID # of transaction related to this opCode, or -1 if no ID is applicable. }
  107. { One of the QERROR_ codes defined in AMarquee headers. }
  108. { Pathname of a node, or NULL if not applicable. }
  109. { Pointer to beginning of data buffer, or NULL if not applicable. }
  110. { Length of qm_Data buffer, or 0 if not applicable. }
  111. { Length of the data buffer stored on the AMarquee server. }
  112. { Line # of the server source code that generated the error. Useful for debugging. }
  113. { Private info used by FreeQMessage() }
  114. { Added for v48; more private info used by FreeQMessage() }
  115. { Added for v50. The session this message comes from. Necessary with shared msgports }
  116. PQMessage = ^TQMessage;
  117. TQMessage = record
  118. qm_Msg : tMessage;
  119. qm_ID : LONG;
  120. qm_Status : longint;
  121. qm_Path : Pchar;
  122. qm_Data : pointer;
  123. qm_DataLen : ULONG;
  124. qm_ActualLen : ULONG;
  125. qm_ErrorLine : ULONG;
  126. qm_Private : pointer;
  127. qm_Private2 : pointer;
  128. qm_Session : PQSession;
  129. end;
  130. { The theoretical maximum number of bytes your server may allocate. }
  131. { The number of bytes currently allocated by your server. }
  132. { The number of bytes that may actually be allocated by your server. }
  133. { Bit-chord of QPRIV_ bits, showing what special privs you have. }
  134. { Bit-chord of QPRIV_ bits, showing what special privs you could get if you asked. }
  135. PQRunInfo = ^TQRunInfo;
  136. TQRunInfo = record
  137. qr_Allowed : LONG;
  138. qr_Alloced : LONG;
  139. qr_Avail : LONG;
  140. qr_CurrentPrivs : ULONG;
  141. qr_PossiblePrivs : ULONG;
  142. end;
  143. { Used internally }
  144. { the message port to listen on }
  145. PQSharedMessagePort = ^TQSharedMessagePort;
  146. TQSharedMessagePort = record
  147. qs_private : tSignalSemaphore;
  148. qs_mp : PMsgPort;
  149. end;
  150. { the QRAWSESSION_PROTOCOLSTOPHOOK Hook function receive a pointer to the Hook in A0, the QSession
  151. pointer in A2 and a pointer to a QProtocolStopMarkerMessage in A1. Return the length of the buffer
  152. to send to the client. Return a length of 0 if not enough data is present. With this function
  153. it's easy to make sure that no structs or other datatypes get stripped. }
  154. PQProtocolStopMarkerMessage = ^TQProtocolStopMarkerMessage;
  155. TQProtocolStopMarkerMessage = record
  156. buffer : STRPTR;
  157. length : ULONG;
  158. userdata : ULONG;
  159. id : LONG;
  160. end;
  161. { Tags to use with QNewSocketSession(Async) }
  162. { (ULONG maxBufSize) The maximum buffer size to use (same as QSetMaxRawBufSize()) }
  163. const
  164. QRAWSESSION_MAXBUFFERSIZE = $a0000001;
  165. { (struct Hook stopmarkerfunc) A hook with the function which sets the stop marker for a block of data }
  166. QRAWSESSION_PROTOCOLSTOPHOOK = $a0000002;
  167. { (BOOL b) default TRUE. Shall the last data before the connection is broken be sent to the client even though the PROTOCOLSTOPHOOK hook specify it shouldn't ? }
  168. QRAWSESSION_RECEIVE_EXCEEDING_DATA = $a0000003;
  169. { (ULONG u) The initial value of the userdata field in struct QProtocolStopMarkerMessage }
  170. QRAWSESSION_PROTOCOLSTOPHOOK_USERDATA = $a0000004;
  171. { Tags to use with QNew Session(Async) and QNewSocket Session(Async) }
  172. { (LONG errorCode) A pointer to the variable that will hold the error code }
  173. QSESSION_ERRORCODEPTR = $b0000001;
  174. { (struct QSharedMessagePort mp) A shared message port created with QCreateSharedMessagePort() }
  175. QSESSION_SHAREDMSGPORT = $b0000002;
  176. VAR AMarqueeBase : pLibrary;
  177. FUNCTION QFreeSession(session : pQSession) : LONGINT;
  178. FUNCTION QDebugOp(session : pQSession; string_ : pCHar) : LONGINT;
  179. FUNCTION QGetOp(session : pQSession; path : pCHar; maxBytes : LONGINT) : LONGINT;
  180. FUNCTION QDeleteOp(session : pQSession; path : pCHar) : LONGINT;
  181. FUNCTION QRenameOp(session : pQSession; path : pCHar; label_ : pCHar) : LONGINT;
  182. FUNCTION QSubscribeOp(session : pQSession; path : pCHar; maxBytes : LONGINT) : LONGINT;
  183. FUNCTION QSetOp(session : pQSession; path : pCHar; buf : POINTER; len : ULONG) : LONGINT;
  184. FUNCTION QClearSubscriptionsOp(session : pQSession; which : LONGINT) : LONGINT;
  185. FUNCTION QPingOp(session : pQSession) : LONGINT;
  186. FUNCTION QInfoOp(session : pQSession) : LONGINT;
  187. FUNCTION QSetAccessOp(session : pQSession; hosts : pCHar) : LONGINT;
  188. PROCEDURE FreeQMessage(session : pQSession; qmsg : pQMessage);
  189. FUNCTION QGo(session : pQSession; sync : ULONG) : LONGINT;
  190. FUNCTION QStreamOp(session : pQSession; path : pCHar; buf : POINTER; len : ULONG) : LONGINT;
  191. FUNCTION QSetMessageAccessOp(session : pQSession; access : pCHar; maxbytes : LONGINT) : LONGINT;
  192. FUNCTION QMessageOp(session : pQSession; hosts : pCHar; buffer : POINTER; len : ULONG) : LONGINT;
  193. FUNCTION QNumQueuedPackets(session : pQSession) : ULONG;
  194. FUNCTION QNumQueuedBytes(session : pQSession) : ULONG;
  195. FUNCTION QErrorName(session : LONGINT) : pCHar;
  196. FUNCTION QRequestPrivilegesOp(session : pQSession; privBits : ULONG) : LONGINT;
  197. FUNCTION QReleasePrivilegesOp(session : pQSession; privBits : ULONG) : LONGINT;
  198. FUNCTION QKillClientsOp(session : pQSession; hosts : pCHar) : LONGINT;
  199. FUNCTION QSetParameterOp(session : pQSession; paramName : pCHar; newValue : pCHar) : LONGINT;
  200. FUNCTION QGetParameterOp(session : pQSession; paramName : pCHar) : LONGINT;
  201. FUNCTION QSysMessageOp(session : pQSession; hosts : pCHar; message : pCHar) : LONGINT;
  202. FUNCTION QGetAndSubscribeOp(session : pQSession; path : pCHar; maxBytes : LONGINT) : LONGINT;
  203. FUNCTION QDetachSession(session : pQSession; flags : ULONG) : BOOLEAN;
  204. FUNCTION QReattachSession(session : pQSession; flags : ULONG) : BOOLEAN;
  205. FUNCTION QNewSocketSession(host : pCHar; port : LONGINT; tags : pTagItem) : pQSession;
  206. FUNCTION QSendRawOp(session : pQSession; buf : POINTER; len : ULONG) : LONGINT;
  207. FUNCTION QNewSocketSessionAsync(host : pCHar; port : LONGINT; tags : pTagItem) : pQSession;
  208. FUNCTION QNewSocketServerSession( port : pLONGINT; tags : pTagItem) : pQSession;
  209. FUNCTION QSetKeyAccessOp(session : pQSession; path : pCHar; hosts : pCHar) : LONGINT;
  210. FUNCTION QGetHostName(session : pQSession) : pCHar;
  211. FUNCTION QGetProgName(session : pQSession) : pCHar;
  212. PROCEDURE QSetMaxRawBufSize(session : pQSession; maxBufSize : ULONG);
  213. FUNCTION QNewSession(host : pCHar; port : LONGINT; name : pCHar; taglist : pTagItem) : pQSession;
  214. FUNCTION QNewSessionAsync(host : pCHar; port : LONGINT; name : pCHar; taglist : pTagItem) : pQSession;
  215. FUNCTION QNewHostSession(hostnames : pCHar; port : pLONGINT; names : pCHar; taglist : pTagItem) : pQSession;
  216. FUNCTION QNewServerSession(hostNames : pCHar; progNames : pCHar; taglist : pTagItem) : pQSession;
  217. FUNCTION QCreateSharedMessagePort : pQSharedMessagePort;
  218. PROCEDURE QDeleteSharedMessagePort(mp : pQSharedMessagePort);
  219. FUNCTION QGetLocalIP(session : pQSession) : pCHAR;
  220. {
  221. This is functions and procedures with array of const.
  222. For use with fpc 1.0 and above.
  223. }
  224. FUNCTION QNewSocketSessiontags(host : pCHar; port : LONGINT; const argv : Array Of Const) : pQSession;
  225. FUNCTION QNewSocketSessionAsyncTags(host : pCHar; port : LONGINT; const argv : Array Of Const) : pQSession;
  226. FUNCTION QNewSocketServerSessionTags( port : pLONGINT; const argv : Array Of Const) : pQSession;
  227. FUNCTION QNewSessionTags(host : pCHar; port : LONGINT; name : pCHar; const argv : Array Of Const) : pQSession;
  228. FUNCTION QNewSessionAsyncTags(host : pCHar; port : LONGINT; name : pCHar; const argv : Array Of Const) : pQSession;
  229. FUNCTION QNewHostSessionTags(hostnames : pCHar; port : pLONGINT; names : pCHar; const argv : Array Of Const) : pQSession;
  230. FUNCTION QNewServerSessionTags(hostNames : pCHar; progNames : pCHar; const argv : Array Of Const) : pQSession;
  231. FUNCTION QDebugOp(session : pQSession; string_ : string) : LONGINT;
  232. FUNCTION QGetOp(session : pQSession; path : string; maxBytes : LONGINT) : LONGINT;
  233. FUNCTION QDeleteOp(session : pQSession; path : string) : LONGINT;
  234. FUNCTION QRenameOp(session : pQSession; path : string; label_ : string) : LONGINT;
  235. FUNCTION QSubscribeOp(session : pQSession; path : string; maxBytes : LONGINT) : LONGINT;
  236. FUNCTION QSetOp(session : pQSession; path : string; buf : POINTER; len : ULONG) : LONGINT;
  237. FUNCTION QSetAccessOp(session : pQSession; hosts : string) : LONGINT;
  238. FUNCTION QStreamOp(session : pQSession; path : string; buf : POINTER; len : ULONG) : LONGINT;
  239. FUNCTION QSetMessageAccessOp(session : pQSession; access : string; maxbytes : LONGINT) : LONGINT;
  240. FUNCTION QMessageOp(session : pQSession; hosts : string; buffer : POINTER; len : ULONG) : LONGINT;
  241. FUNCTION QKillClientsOp(session : pQSession; hosts : string) : LONGINT;
  242. FUNCTION QSetParameterOp(session : pQSession; paramName : string; newValue : string) : LONGINT;
  243. FUNCTION QGetParameterOp(session : pQSession; paramName : string) : LONGINT;
  244. FUNCTION QSysMessageOp(session : pQSession; hosts : string; message : string) : LONGINT;
  245. FUNCTION QGetAndSubscribeOp(session : pQSession; path : string; maxBytes : LONGINT) : LONGINT;
  246. FUNCTION QNewSocketSession(host : string; port : LONGINT; tags : pTagItem) : pQSession;
  247. FUNCTION QNewSocketSessionAsync(host : string; port : LONGINT; tags : pTagItem) : pQSession;
  248. FUNCTION QSetKeyAccessOp(session : pQSession; path : string; hosts : string) : LONGINT;
  249. FUNCTION QNewSession(host : string; port : LONGINT; name : string; taglist : pTagItem) : pQSession;
  250. FUNCTION QNewSessionAsync(host : string; port : LONGINT; name : string; taglist : pTagItem) : pQSession;
  251. FUNCTION QNewHostSession(hostnames : string; port : pLONGINT; names : string; taglist : pTagItem) : pQSession;
  252. FUNCTION QNewServerSession(hostNames : string; progNames : string; taglist : pTagItem) : pQSession;
  253. {
  254. This is functions and procedures with array of const.
  255. For use with fpc 1.0 and above.
  256. }
  257. FUNCTION QNewSocketSessionTags(host : string; port : LONGINT; const argv : Array Of Const) : pQSession;
  258. FUNCTION QNewSocketSessionAsyncTags(host : string; port : LONGINT; const argv : Array Of Const) : pQSession;
  259. FUNCTION QNewSessionTags(host : string; port : LONGINT; name : string; const argv : Array Of Const) : pQSession;
  260. FUNCTION QNewSessionAsyncTags(host : string; port : LONGINT; name : string; const argv : Array Of Const) : pQSession;
  261. FUNCTION QNewHostSessionTags(hostnames : string; port : pLONGINT; names : string; const argv : Array Of Const) : pQSession;
  262. FUNCTION QNewServerSessionTags(hostNames : string; progNames : string; const argv : Array Of Const) : pQSession;
  263. {You can remove this include and use a define instead}
  264. {$I useautoopenlib.inc}
  265. {$ifdef use_init_openlib}
  266. procedure InitAMARQUEELibrary;
  267. {$endif use_init_openlib}
  268. {This is a variable that knows how the unit is compiled}
  269. var
  270. AMARQUEEIsCompiledHow : longint;
  271. IMPLEMENTATION
  272. uses
  273. {$ifndef dont_use_openlib}
  274. msgbox,
  275. {$endif dont_use_openlib}
  276. pastoc,tagsarray;
  277. FUNCTION QFreeSession(session : pQSession) : LONGINT;
  278. BEGIN
  279. ASM
  280. MOVE.L A6,-(A7)
  281. MOVEA.L session,A0
  282. MOVEA.L AMarqueeBase,A6
  283. JSR -036(A6)
  284. MOVEA.L (A7)+,A6
  285. MOVE.L D0,@RESULT
  286. END;
  287. END;
  288. FUNCTION QDebugOp(session : pQSession; string_ : pCHar) : LONGINT;
  289. BEGIN
  290. ASM
  291. MOVE.L A6,-(A7)
  292. MOVEA.L session,A0
  293. MOVEA.L string_,A1
  294. MOVEA.L AMarqueeBase,A6
  295. JSR -042(A6)
  296. MOVEA.L (A7)+,A6
  297. MOVE.L D0,@RESULT
  298. END;
  299. END;
  300. FUNCTION QGetOp(session : pQSession; path : pCHar; maxBytes : LONGINT) : LONGINT;
  301. BEGIN
  302. ASM
  303. MOVE.L A6,-(A7)
  304. MOVEA.L session,A0
  305. MOVEA.L path,A1
  306. MOVE.L maxBytes,D0
  307. MOVEA.L AMarqueeBase,A6
  308. JSR -048(A6)
  309. MOVEA.L (A7)+,A6
  310. MOVE.L D0,@RESULT
  311. END;
  312. END;
  313. FUNCTION QDeleteOp(session : pQSession; path : pCHar) : LONGINT;
  314. BEGIN
  315. ASM
  316. MOVE.L A6,-(A7)
  317. MOVEA.L session,A0
  318. MOVEA.L path,A1
  319. MOVEA.L AMarqueeBase,A6
  320. JSR -054(A6)
  321. MOVEA.L (A7)+,A6
  322. MOVE.L D0,@RESULT
  323. END;
  324. END;
  325. FUNCTION QRenameOp(session : pQSession; path : pCHar; label_ : pCHar) : LONGINT;
  326. BEGIN
  327. ASM
  328. MOVE.L A6,-(A7)
  329. MOVEA.L session,A0
  330. MOVEA.L path,A1
  331. MOVE.L label_,D0
  332. MOVEA.L AMarqueeBase,A6
  333. JSR -060(A6)
  334. MOVEA.L (A7)+,A6
  335. MOVE.L D0,@RESULT
  336. END;
  337. END;
  338. FUNCTION QSubscribeOp(session : pQSession; path : pCHar; maxBytes : LONGINT) : LONGINT;
  339. BEGIN
  340. ASM
  341. MOVE.L A6,-(A7)
  342. MOVEA.L session,A0
  343. MOVEA.L path,A1
  344. MOVE.L maxBytes,D0
  345. MOVEA.L AMarqueeBase,A6
  346. JSR -066(A6)
  347. MOVEA.L (A7)+,A6
  348. MOVE.L D0,@RESULT
  349. END;
  350. END;
  351. FUNCTION QSetOp(session : pQSession; path : pCHar; buf : POINTER; len : ULONG) : LONGINT;
  352. BEGIN
  353. ASM
  354. MOVE.L A6,-(A7)
  355. MOVEA.L session,A0
  356. MOVEA.L path,A1
  357. MOVE.L buf,D0
  358. MOVE.L len,D1
  359. MOVEA.L AMarqueeBase,A6
  360. JSR -072(A6)
  361. MOVEA.L (A7)+,A6
  362. MOVE.L D0,@RESULT
  363. END;
  364. END;
  365. FUNCTION QClearSubscriptionsOp(session : pQSession; which : LONGINT) : LONGINT;
  366. BEGIN
  367. ASM
  368. MOVE.L A6,-(A7)
  369. MOVEA.L session,A0
  370. MOVE.L which,D0
  371. MOVEA.L AMarqueeBase,A6
  372. JSR -078(A6)
  373. MOVEA.L (A7)+,A6
  374. MOVE.L D0,@RESULT
  375. END;
  376. END;
  377. FUNCTION QPingOp(session : pQSession) : LONGINT;
  378. BEGIN
  379. ASM
  380. MOVE.L A6,-(A7)
  381. MOVEA.L session,A0
  382. MOVEA.L AMarqueeBase,A6
  383. JSR -084(A6)
  384. MOVEA.L (A7)+,A6
  385. MOVE.L D0,@RESULT
  386. END;
  387. END;
  388. FUNCTION QInfoOp(session : pQSession) : LONGINT;
  389. BEGIN
  390. ASM
  391. MOVE.L A6,-(A7)
  392. MOVEA.L session,A0
  393. MOVEA.L AMarqueeBase,A6
  394. JSR -090(A6)
  395. MOVEA.L (A7)+,A6
  396. MOVE.L D0,@RESULT
  397. END;
  398. END;
  399. FUNCTION QSetAccessOp(session : pQSession; hosts : pCHar) : LONGINT;
  400. BEGIN
  401. ASM
  402. MOVE.L A6,-(A7)
  403. MOVEA.L session,A0
  404. MOVEA.L hosts,A1
  405. MOVEA.L AMarqueeBase,A6
  406. JSR -096(A6)
  407. MOVEA.L (A7)+,A6
  408. MOVE.L D0,@RESULT
  409. END;
  410. END;
  411. PROCEDURE FreeQMessage(session : pQSession; qmsg : pQMessage);
  412. BEGIN
  413. ASM
  414. MOVE.L A6,-(A7)
  415. MOVEA.L session,A0
  416. MOVEA.L qmsg,A1
  417. MOVEA.L AMarqueeBase,A6
  418. JSR -102(A6)
  419. MOVEA.L (A7)+,A6
  420. END;
  421. END;
  422. FUNCTION QGo(session : pQSession; sync : ULONG) : LONGINT;
  423. BEGIN
  424. ASM
  425. MOVE.L A6,-(A7)
  426. MOVEA.L session,A0
  427. MOVE.L sync,D0
  428. MOVEA.L AMarqueeBase,A6
  429. JSR -108(A6)
  430. MOVEA.L (A7)+,A6
  431. MOVE.L D0,@RESULT
  432. END;
  433. END;
  434. FUNCTION QStreamOp(session : pQSession; path : pCHar; buf : POINTER; len : ULONG) : LONGINT;
  435. BEGIN
  436. ASM
  437. MOVE.L A6,-(A7)
  438. MOVEA.L session,A0
  439. MOVEA.L path,A1
  440. MOVE.L buf,D0
  441. MOVE.L len,D1
  442. MOVEA.L AMarqueeBase,A6
  443. JSR -120(A6)
  444. MOVEA.L (A7)+,A6
  445. MOVE.L D0,@RESULT
  446. END;
  447. END;
  448. FUNCTION QSetMessageAccessOp(session : pQSession; access : pCHar; maxbytes : LONGINT) : LONGINT;
  449. BEGIN
  450. ASM
  451. MOVE.L A6,-(A7)
  452. MOVEA.L session,A0
  453. MOVEA.L access,A1
  454. MOVE.L maxbytes,D0
  455. MOVEA.L AMarqueeBase,A6
  456. JSR -132(A6)
  457. MOVEA.L (A7)+,A6
  458. MOVE.L D0,@RESULT
  459. END;
  460. END;
  461. FUNCTION QMessageOp(session : pQSession; hosts : pCHar; buffer : POINTER; len : ULONG) : LONGINT;
  462. BEGIN
  463. ASM
  464. MOVE.L A6,-(A7)
  465. MOVEA.L session,A0
  466. MOVEA.L hosts,A1
  467. MOVE.L buffer,D0
  468. MOVE.L len,D1
  469. MOVEA.L AMarqueeBase,A6
  470. JSR -138(A6)
  471. MOVEA.L (A7)+,A6
  472. MOVE.L D0,@RESULT
  473. END;
  474. END;
  475. FUNCTION QNumQueuedPackets(session : pQSession) : ULONG;
  476. BEGIN
  477. ASM
  478. MOVE.L A6,-(A7)
  479. MOVEA.L session,A0
  480. MOVEA.L AMarqueeBase,A6
  481. JSR -150(A6)
  482. MOVEA.L (A7)+,A6
  483. MOVE.L D0,@RESULT
  484. END;
  485. END;
  486. FUNCTION QNumQueuedBytes(session : pQSession) : ULONG;
  487. BEGIN
  488. ASM
  489. MOVE.L A6,-(A7)
  490. MOVEA.L session,A0
  491. MOVEA.L AMarqueeBase,A6
  492. JSR -156(A6)
  493. MOVEA.L (A7)+,A6
  494. MOVE.L D0,@RESULT
  495. END;
  496. END;
  497. FUNCTION QErrorName(session : LONGINT) : pCHar;
  498. BEGIN
  499. ASM
  500. MOVE.L A6,-(A7)
  501. MOVE.L session,D0
  502. MOVEA.L AMarqueeBase,A6
  503. JSR -162(A6)
  504. MOVEA.L (A7)+,A6
  505. MOVE.L D0,@RESULT
  506. END;
  507. END;
  508. FUNCTION QRequestPrivilegesOp(session : pQSession; privBits : ULONG) : LONGINT;
  509. BEGIN
  510. ASM
  511. MOVE.L A6,-(A7)
  512. MOVEA.L session,A0
  513. MOVE.L privBits,D0
  514. MOVEA.L AMarqueeBase,A6
  515. JSR -168(A6)
  516. MOVEA.L (A7)+,A6
  517. MOVE.L D0,@RESULT
  518. END;
  519. END;
  520. FUNCTION QReleasePrivilegesOp(session : pQSession; privBits : ULONG) : LONGINT;
  521. BEGIN
  522. ASM
  523. MOVE.L A6,-(A7)
  524. MOVEA.L session,A0
  525. MOVE.L privBits,D0
  526. MOVEA.L AMarqueeBase,A6
  527. JSR -174(A6)
  528. MOVEA.L (A7)+,A6
  529. MOVE.L D0,@RESULT
  530. END;
  531. END;
  532. FUNCTION QKillClientsOp(session : pQSession; hosts : pCHar) : LONGINT;
  533. BEGIN
  534. ASM
  535. MOVE.L A6,-(A7)
  536. MOVEA.L session,A0
  537. MOVEA.L hosts,A1
  538. MOVEA.L AMarqueeBase,A6
  539. JSR -180(A6)
  540. MOVEA.L (A7)+,A6
  541. MOVE.L D0,@RESULT
  542. END;
  543. END;
  544. FUNCTION QSetParameterOp(session : pQSession; paramName : pCHar; newValue : pCHar) : LONGINT;
  545. BEGIN
  546. ASM
  547. MOVE.L A6,-(A7)
  548. MOVEA.L session,A0
  549. MOVEA.L paramName,A1
  550. MOVE.L newValue,D0
  551. MOVEA.L AMarqueeBase,A6
  552. JSR -186(A6)
  553. MOVEA.L (A7)+,A6
  554. MOVE.L D0,@RESULT
  555. END;
  556. END;
  557. FUNCTION QGetParameterOp(session : pQSession; paramName : pCHar) : LONGINT;
  558. BEGIN
  559. ASM
  560. MOVE.L A6,-(A7)
  561. MOVEA.L session,A0
  562. MOVEA.L paramName,A1
  563. MOVEA.L AMarqueeBase,A6
  564. JSR -192(A6)
  565. MOVEA.L (A7)+,A6
  566. MOVE.L D0,@RESULT
  567. END;
  568. END;
  569. FUNCTION QSysMessageOp(session : pQSession; hosts : pCHar; message : pCHar) : LONGINT;
  570. BEGIN
  571. ASM
  572. MOVE.L A6,-(A7)
  573. MOVEA.L session,A0
  574. MOVEA.L hosts,A1
  575. MOVE.L message,D0
  576. MOVEA.L AMarqueeBase,A6
  577. JSR -198(A6)
  578. MOVEA.L (A7)+,A6
  579. MOVE.L D0,@RESULT
  580. END;
  581. END;
  582. FUNCTION QGetAndSubscribeOp(session : pQSession; path : pCHar; maxBytes : LONGINT) : LONGINT;
  583. BEGIN
  584. ASM
  585. MOVE.L A6,-(A7)
  586. MOVEA.L session,A0
  587. MOVEA.L path,A1
  588. MOVE.L maxBytes,D0
  589. MOVEA.L AMarqueeBase,A6
  590. JSR -210(A6)
  591. MOVEA.L (A7)+,A6
  592. MOVE.L D0,@RESULT
  593. END;
  594. END;
  595. FUNCTION QDetachSession(session : pQSession; flags : ULONG) : BOOLEAN;
  596. BEGIN
  597. ASM
  598. MOVE.L A6,-(A7)
  599. MOVEA.L session,A0
  600. MOVE.L flags,D0
  601. MOVEA.L AMarqueeBase,A6
  602. JSR -216(A6)
  603. MOVEA.L (A7)+,A6
  604. TST.W D0
  605. BEQ.B @end
  606. MOVEQ #1,D0
  607. @end: MOVE.B D0,@RESULT
  608. END;
  609. END;
  610. FUNCTION QReattachSession(session : pQSession; flags : ULONG) : BOOLEAN;
  611. BEGIN
  612. ASM
  613. MOVE.L A6,-(A7)
  614. MOVEA.L session,A0
  615. MOVE.L flags,D0
  616. MOVEA.L AMarqueeBase,A6
  617. JSR -222(A6)
  618. MOVEA.L (A7)+,A6
  619. TST.W D0
  620. BEQ.B @end
  621. MOVEQ #1,D0
  622. @end: MOVE.B D0,@RESULT
  623. END;
  624. END;
  625. FUNCTION QNewSocketSession(host : pCHar; port : LONGINT; tags : pTagItem) : pQSession;
  626. BEGIN
  627. ASM
  628. MOVE.L A6,-(A7)
  629. MOVEA.L host,A0
  630. MOVE.L port,D0
  631. MOVEA.L tags,A1
  632. MOVEA.L AMarqueeBase,A6
  633. JSR -228(A6)
  634. MOVEA.L (A7)+,A6
  635. MOVE.L D0,@RESULT
  636. END;
  637. END;
  638. FUNCTION QSendRawOp(session : pQSession; buf : POINTER; len : ULONG) : LONGINT;
  639. BEGIN
  640. ASM
  641. MOVE.L A6,-(A7)
  642. MOVEA.L session,A0
  643. MOVEA.L buf,A1
  644. MOVE.L len,D0
  645. MOVEA.L AMarqueeBase,A6
  646. JSR -234(A6)
  647. MOVEA.L (A7)+,A6
  648. MOVE.L D0,@RESULT
  649. END;
  650. END;
  651. FUNCTION QNewSocketSessionAsync(host : pCHar; port : LONGINT; tags : pTagItem) : pQSession;
  652. BEGIN
  653. ASM
  654. MOVE.L A6,-(A7)
  655. MOVEA.L host,A0
  656. MOVE.L port,D0
  657. MOVEA.L tags,A1
  658. MOVEA.L AMarqueeBase,A6
  659. JSR -240(A6)
  660. MOVEA.L (A7)+,A6
  661. MOVE.L D0,@RESULT
  662. END;
  663. END;
  664. FUNCTION QNewSocketServerSession(port : pLONGINT; tags : pTagItem) : pQSession;
  665. BEGIN
  666. ASM
  667. MOVE.L A6,-(A7)
  668. MOVEA.L port,A0
  669. MOVEA.L tags,A1
  670. MOVEA.L AMarqueeBase,A6
  671. JSR -246(A6)
  672. MOVEA.L (A7)+,A6
  673. MOVE.L D0,@RESULT
  674. END;
  675. END;
  676. FUNCTION QSetKeyAccessOp(session : pQSession; path : pCHar; hosts : pCHar) : LONGINT;
  677. BEGIN
  678. ASM
  679. MOVE.L A6,-(A7)
  680. MOVEA.L session,A0
  681. MOVEA.L path,A1
  682. MOVE.L hosts,D0
  683. MOVEA.L AMarqueeBase,A6
  684. JSR -252(A6)
  685. MOVEA.L (A7)+,A6
  686. MOVE.L D0,@RESULT
  687. END;
  688. END;
  689. FUNCTION QGetHostName(session : pQSession) : pCHar;
  690. BEGIN
  691. ASM
  692. MOVE.L A6,-(A7)
  693. MOVEA.L session,A0
  694. MOVEA.L AMarqueeBase,A6
  695. JSR -258(A6)
  696. MOVEA.L (A7)+,A6
  697. MOVE.L D0,@RESULT
  698. END;
  699. END;
  700. FUNCTION QGetProgName(session : pQSession) : pCHar;
  701. BEGIN
  702. ASM
  703. MOVE.L A6,-(A7)
  704. MOVEA.L session,A0
  705. MOVEA.L AMarqueeBase,A6
  706. JSR -264(A6)
  707. MOVEA.L (A7)+,A6
  708. MOVE.L D0,@RESULT
  709. END;
  710. END;
  711. PROCEDURE QSetMaxRawBufSize(session : pQSession; maxBufSize : ULONG);
  712. BEGIN
  713. ASM
  714. MOVE.L A6,-(A7)
  715. MOVEA.L session,A0
  716. MOVE.L maxBufSize,D0
  717. MOVEA.L AMarqueeBase,A6
  718. JSR -270(A6)
  719. MOVEA.L (A7)+,A6
  720. END;
  721. END;
  722. FUNCTION QNewSession(host : pCHar; port : LONGINT; name : pCHar; taglist : pTagItem) : pQSession;
  723. BEGIN
  724. ASM
  725. MOVE.L A6,-(A7)
  726. MOVEA.L host,A0
  727. MOVE.L port,D0
  728. MOVEA.L name,A1
  729. MOVE.L taglist,D1
  730. MOVEA.L AMarqueeBase,A6
  731. JSR -276(A6)
  732. MOVEA.L (A7)+,A6
  733. MOVE.L D0,@RESULT
  734. END;
  735. END;
  736. FUNCTION QNewSessionAsync(host : pCHar; port : LONGINT; name : pCHar; taglist : pTagItem) : pQSession;
  737. BEGIN
  738. ASM
  739. MOVE.L A6,-(A7)
  740. MOVEA.L host,A0
  741. MOVE.L port,D0
  742. MOVEA.L name,A1
  743. MOVE.L taglist,D1
  744. MOVEA.L AMarqueeBase,A6
  745. JSR -282(A6)
  746. MOVEA.L (A7)+,A6
  747. MOVE.L D0,@RESULT
  748. END;
  749. END;
  750. FUNCTION QNewHostSession(hostnames : pCHar; port : pLONGINT; names : pCHar; taglist : pTagItem) : pQSession;
  751. BEGIN
  752. ASM
  753. MOVE.L A6,-(A7)
  754. MOVEA.L hostnames,A0
  755. MOVEA.L port,A1
  756. MOVE.L names,D0
  757. MOVE.L taglist,D1
  758. MOVEA.L AMarqueeBase,A6
  759. JSR -288(A6)
  760. MOVEA.L (A7)+,A6
  761. MOVE.L D0,@RESULT
  762. END;
  763. END;
  764. FUNCTION QNewServerSession(hostNames : pCHar; progNames : pCHar; taglist : pTagItem) : pQSession;
  765. BEGIN
  766. ASM
  767. MOVE.L A6,-(A7)
  768. MOVEA.L hostNames,A0
  769. MOVEA.L progNames,A1
  770. MOVE.L taglist,D0
  771. MOVEA.L AMarqueeBase,A6
  772. JSR -294(A6)
  773. MOVEA.L (A7)+,A6
  774. MOVE.L D0,@RESULT
  775. END;
  776. END;
  777. FUNCTION QCreateSharedMessagePort : pQSharedMessagePort;
  778. BEGIN
  779. ASM
  780. MOVE.L A6,-(A7)
  781. MOVEA.L AMarqueeBase,A6
  782. JSR -300(A6)
  783. MOVEA.L (A7)+,A6
  784. MOVE.L D0,@RESULT
  785. END;
  786. END;
  787. PROCEDURE QDeleteSharedMessagePort(mp : pQSharedMessagePort);
  788. BEGIN
  789. ASM
  790. MOVE.L A6,-(A7)
  791. MOVEA.L mp,A0
  792. MOVEA.L AMarqueeBase,A6
  793. JSR -306(A6)
  794. MOVEA.L (A7)+,A6
  795. END;
  796. END;
  797. FUNCTION QGetLocalIP(session : pQSession) : pCHAR;
  798. BEGIN
  799. ASM
  800. MOVE.L A6,-(A7)
  801. MOVEA.L session,A0
  802. MOVEA.L AMarqueeBase,A6
  803. JSR -312(A6)
  804. MOVEA.L (A7)+,A6
  805. MOVE.L D0,@RESULT
  806. END;
  807. END;
  808. FUNCTION QDebugOp(session : pQSession; string_ : string) : LONGINT;
  809. begin
  810. QDebugOp := QDebugOp(session,pas2c(string_));
  811. end;
  812. FUNCTION QGetOp(session : pQSession; path : string; maxBytes : LONGINT) : LONGINT;
  813. begin
  814. QGetOp := QGetOp(session,pas2c(path),maxBytes);
  815. end;
  816. FUNCTION QDeleteOp(session : pQSession; path : string) : LONGINT;
  817. begin
  818. QDeleteOp := QDeleteOp(session,pas2c(path));
  819. end;
  820. FUNCTION QRenameOp(session : pQSession; path : string; label_ : string) : LONGINT;
  821. begin
  822. QRenameOp := QRenameOp(session,pas2c(path),pas2c(label_));
  823. end;
  824. FUNCTION QSubscribeOp(session : pQSession; path : string; maxBytes : LONGINT) : LONGINT;
  825. begin
  826. QSubscribeOp := QSubscribeOp(session,pas2c(path),maxBytes);
  827. end;
  828. FUNCTION QSetOp(session : pQSession; path : string; buf : POINTER; len : ULONG) : LONGINT;
  829. begin
  830. QSetOp := QSetOp(session,pas2c(path),buf,len);
  831. end;
  832. FUNCTION QSetAccessOp(session : pQSession; hosts : string) : LONGINT;
  833. begin
  834. QSetAccessOp := QSetAccessOp(session,pas2c(hosts));
  835. end;
  836. FUNCTION QStreamOp(session : pQSession; path : string; buf : POINTER; len : ULONG) : LONGINT;
  837. begin
  838. QStreamOp := QStreamOp(session,pas2c(path),buf,len);
  839. end;
  840. FUNCTION QSetMessageAccessOp(session : pQSession; access : string; maxbytes : LONGINT) : LONGINT;
  841. begin
  842. QSetMessageAccessOp := QSetMessageAccessOp(session,pas2c(access),maxBytes);
  843. end;
  844. FUNCTION QMessageOp(session : pQSession; hosts : string; buffer : POINTER; len : ULONG) : LONGINT;
  845. begin
  846. QMessageOp := QMessageOp(session,pas2c(hosts),buffer,len);
  847. end;
  848. FUNCTION QKillClientsOp(session : pQSession; hosts : string) : LONGINT;
  849. begin
  850. QKillClientsOp := QKillClientsOp(session,pas2c(hosts));
  851. end;
  852. FUNCTION QSetParameterOp(session : pQSession; paramName : string; newValue : string) : LONGINT;
  853. begin
  854. QSetParameterOp := QSetParameterOp(session,pas2c(paramName),pas2c(newValue));
  855. end;
  856. FUNCTION QGetParameterOp(session : pQSession; paramName : string) : LONGINT;
  857. begin
  858. QGetParameterOp := QGetParameterOp(session,pas2c(paramName));
  859. end;
  860. FUNCTION QSysMessageOp(session : pQSession; hosts : string; message : string) : LONGINT;
  861. begin
  862. QSysMessageOp := QSysMessageOp(session,pas2c(hosts),pas2c(message));
  863. end;
  864. FUNCTION QGetAndSubscribeOp(session : pQSession; path : string; maxBytes : LONGINT) : LONGINT;
  865. begin
  866. QGetAndSubscribeOp := QGetAndSubscribeOp(session,pas2c(path),maxBytes);
  867. end;
  868. FUNCTION QNewSocketSession(host : string; port : LONGINT; tags : pTagItem) : pQSession;
  869. begin
  870. QNewSocketSession := QNewSocketSession(pas2c(host),port,tags);
  871. end;
  872. FUNCTION QNewSocketSessionAsync(host : string; port : LONGINT; tags : pTagItem) : pQSession;
  873. begin
  874. QNewSocketSessionAsync := QNewSocketSessionAsync(pas2c(host),port,tags);
  875. end;
  876. FUNCTION QSetKeyAccessOp(session : pQSession; path : string; hosts : string) : LONGINT;
  877. begin
  878. QSetKeyAccessOp := QSetKeyAccessOp(session,pas2c(path),pas2c(hosts));
  879. end;
  880. FUNCTION QNewSession(host : string; port : LONGINT; name : string; taglist : pTagItem) : pQSession;
  881. begin
  882. QNewSession := QNewSession(pas2c(host),port,pas2c(name),taglist);
  883. end;
  884. FUNCTION QNewSessionAsync(host : string; port : LONGINT; name : string; taglist : pTagItem) : pQSession;
  885. begin
  886. QNewSessionAsync := QNewSessionAsync(pas2c(host),port,pas2c(name),taglist);
  887. end;
  888. FUNCTION QNewHostSession(hostnames : string; port : pLONGINT; names : string; taglist : pTagItem) : pQSession;
  889. begin
  890. QNewHostSession := QNewHostSession(pas2c(hostnames),port,pas2c(names),taglist);
  891. end;
  892. FUNCTION QNewServerSession(hostNames : string; progNames : string; taglist : pTagItem) : pQSession;
  893. begin
  894. QNewServerSession := QNewServerSession(pas2c(hostnames),pas2c(prognames),taglist);
  895. end;
  896. FUNCTION QNewSocketSessiontags(host : pCHar; port : LONGINT; const argv : Array Of Const) : pQSession;
  897. begin
  898. QNewSocketSessiontags := QNewSocketSession(host,port,readintags(argv));
  899. end;
  900. FUNCTION QNewSocketSessionAsyncTags(host : pCHar; port : LONGINT; const argv : Array Of Const) : pQSession;
  901. begin
  902. QNewSocketSessionAsyncTags := QNewSocketSessionAsync(host,port,readintags(argv));
  903. end;
  904. FUNCTION QNewSocketServerSessionTags( port : pLONGINT; const argv : Array Of Const) : pQSession;
  905. begin
  906. QNewSocketServerSessionTags := QNewSocketServerSession(port,readintags(argv));
  907. end;
  908. FUNCTION QNewSessionTags(host : pCHar; port : LONGINT; name : pCHar; const argv : Array Of Const) : pQSession;
  909. begin
  910. QNewSessionTags := QNewSession(host,port,name,readintags(argv));
  911. end;
  912. FUNCTION QNewSessionAsyncTags(host : pCHar; port : LONGINT; name : pCHar; const argv : Array Of Const) : pQSession;
  913. begin
  914. QNewSessionAsyncTags := QNewSessionAsync(host,port,name,readintags(argv));
  915. end;
  916. FUNCTION QNewHostSessionTags(hostnames : pCHar; port : pLONGINT; names : pCHar; const argv : Array Of Const) : pQSession;
  917. begin
  918. QNewHostSessionTags := QNewHostSession(hostnames,port,names,readintags(argv));
  919. end;
  920. FUNCTION QNewServerSessionTags(hostNames : pCHar; progNames : pCHar; const argv : Array Of Const) : pQSession;
  921. begin
  922. QNewServerSessionTags := QNewServerSession(hostnames,prognames,readintags(argv));
  923. end;
  924. FUNCTION QNewSocketSessionTags(host : string; port : LONGINT; const argv : Array Of Const) : pQSession;
  925. begin
  926. QNewSocketSessionTags := QNewSocketSession(host,port,readintags(argv));
  927. end;
  928. FUNCTION QNewSocketSessionAsyncTags(host : string; port : LONGINT; const argv : Array Of Const) : pQSession;
  929. begin
  930. QNewSocketSessionAsyncTags := QNewSocketSessionAsync(host,port,readintags(argv));
  931. end;
  932. FUNCTION QNewSessionTags(host : string; port : LONGINT; name : string; const argv : Array Of Const) : pQSession;
  933. begin
  934. QNewSessionTags := QNewSession(host,port,name,readintags(argv));
  935. end;
  936. FUNCTION QNewSessionAsyncTags(host : string; port : LONGINT; name : string; const argv : Array Of Const) : pQSession;
  937. begin
  938. QNewSessionAsyncTags := QNewSessionAsync(host,port,name,readintags(argv));
  939. end;
  940. FUNCTION QNewHostSessionTags(hostnames : string; port : pLONGINT; names : string; const argv : Array Of Const) : pQSession;
  941. begin
  942. QNewHostSessionTags := QNewHostSession(hostnames,port,names,readintags(argv));
  943. end;
  944. FUNCTION QNewServerSessionTags(hostNames : string; progNames : string; const argv : Array Of Const) : pQSession;
  945. begin
  946. QNewServerSessionTags := QNewServerSession(hostnames,prognames,readintags(argv));
  947. end;
  948. const
  949. { Change VERSION and LIBVERSION to proper values }
  950. VERSION : string[2] = '0';
  951. LIBVERSION : longword = 0;
  952. {$ifdef use_init_openlib}
  953. {$Info Compiling initopening of amarquee.library}
  954. {$Info don't forget to use InitAMARQUEELibrary in the beginning of your program}
  955. var
  956. amarquee_exit : Pointer;
  957. procedure CloseamarqueeLibrary;
  958. begin
  959. ExitProc := amarquee_exit;
  960. if AMarqueeBase <> nil then begin
  961. CloseLibrary(AMarqueeBase);
  962. AMarqueeBase := nil;
  963. end;
  964. end;
  965. procedure InitAMARQUEELibrary;
  966. begin
  967. AMarqueeBase := nil;
  968. AMarqueeBase := OpenLibrary(AMARQUEENAME,LIBVERSION);
  969. if AMarqueeBase <> nil then begin
  970. amarquee_exit := ExitProc;
  971. ExitProc := @CloseamarqueeLibrary;
  972. end else begin
  973. MessageBox('FPC Pascal Error',
  974. 'Can''t open amarquee.library version ' + VERSION + #10 +
  975. 'Deallocating resources and closing down',
  976. 'Oops');
  977. halt(20);
  978. end;
  979. end;
  980. begin
  981. AMARQUEEIsCompiledHow := 2;
  982. {$endif use_init_openlib}
  983. {$ifdef use_auto_openlib}
  984. {$Info Compiling autoopening of amarquee.library}
  985. var
  986. amarquee_exit : Pointer;
  987. procedure CloseamarqueeLibrary;
  988. begin
  989. ExitProc := amarquee_exit;
  990. if AMarqueeBase <> nil then begin
  991. CloseLibrary(AMarqueeBase);
  992. AMarqueeBase := nil;
  993. end;
  994. end;
  995. begin
  996. AMarqueeBase := nil;
  997. AMarqueeBase := OpenLibrary(AMARQUEENAME,LIBVERSION);
  998. if AMarqueeBase <> nil then begin
  999. amarquee_exit := ExitProc;
  1000. ExitProc := @CloseamarqueeLibrary;
  1001. AMARQUEEIsCompiledHow := 1;
  1002. end else begin
  1003. MessageBox('FPC Pascal Error',
  1004. 'Can''t open amarquee.library version ' + VERSION + #10 +
  1005. 'Deallocating resources and closing down',
  1006. 'Oops');
  1007. halt(20);
  1008. end;
  1009. {$endif use_auto_openlib}
  1010. {$ifdef dont_use_openlib}
  1011. begin
  1012. AMARQUEEIsCompiledHow := 3;
  1013. {$Warning No autoopening of amarquee.library compiled}
  1014. {$Warning Make sure you open amarquee.library yourself}
  1015. {$endif dont_use_openlib}
  1016. END. (* UNIT AMARQUEE *)