/packages/amunits/src/otherlibs/identify.pas

https://github.com/slibre/freepascal · Pascal · 726 lines · 473 code · 107 blank · 146 comment · 6 complexity · 6e50367514cf27aeb9ec4e534e9bd382 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) 2001-2003 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 version of this unit.
  15. 13 Mar 2001.
  16. Updated to use fpc 1.0.7
  17. Added array of const and some
  18. overlay functions.
  19. 08 Jan 2003
  20. Added the defines use_amiga_smartlink and
  21. use_auto_openlib.
  22. 12 Jan 2003.
  23. Changed cardinal > longword.
  24. Changed startcode for unit.
  25. 11 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 IDENTIFY;
  34. INTERFACE
  35. USES Exec, utility;
  36. {
  37. ** $VER: identify.h 13.0 (11.09.2001)
  38. **
  39. ** identify.library definitions
  40. **
  41. ** (C) Copyright 1996-2000 Richard Koerber
  42. ** All Rights Reserved.
  43. }
  44. CONST _IDTAGS = $CD450000;
  45. { --------------------------------------------------------------------------}
  46. { Generic library informations }
  47. CONST IDENTIFYVERSION = 13;
  48. IDENTIFYNAME : PChar = 'identify.library';
  49. TYPE pIdentifyBase = ^tIdentifyBase;
  50. TIdentifyBase = Record
  51. ifyb_LibNode :tLibrary;
  52. End;
  53. CONST IDENTIFYBUFLEN = 50; { default buffer length }
  54. { --------------------------------------------------------------------------}
  55. { Expansion() tags }
  56. IDTAG_ConfigDev = _IDTAGS+$00; { "p_ConfigDev" ConfigDev }
  57. { structure to be evaluated }
  58. IDTAG_ManufID = _IDTAGS+$01; { UWORD manufacturer ID if no }
  59. { ConfigDev is available }
  60. IDTAG_ProdID = _IDTAGS+$02; { UBYTE product ID if no }
  61. { ConfigDev is available }
  62. IDTAG_StrLength = _IDTAGS+$03; { UWORD of maximum buffer length, }
  63. { including termination. Default }
  64. { is 50. }
  65. IDTAG_ManufStr = _IDTAGS+$04; { STRPTR of manufacturer name }
  66. { puffer, or NULL }
  67. IDTAG_ProdStr = _IDTAGS+$05; { STRPTR of product name }
  68. { puffer, or NULL }
  69. IDTAG_ClassStr = _IDTAGS+$06; { STRPTR of product class }
  70. { puffer, or NULL }
  71. IDTAG_DeadStr = _IDTAGS+$07; { STRPTR deadend or recoverable alert? }
  72. IDTAG_SubsysStr = _IDTAGS+$08; { STRPTR alert subsystem }
  73. IDTAG_GeneralStr = _IDTAGS+$09; { STRPTR alert general cause }
  74. IDTAG_SpecStr = _IDTAGS+$0A; { STRPTR alert specific cause }
  75. IDTAG_FuncNameStr = _IDTAGS+$0B; { STRPTR function name }
  76. IDTAG_Expansion = _IDTAGS+$0C; { "pp_ConfigDev" ConfigDev for a }
  77. { complete expansion check. Init }
  78. { the variable with NULL and pass }
  79. { a pointer to it using this tag. }
  80. IDTAG_Secondary = _IDTAGS+$0D; { BOOL warn for secondary expansion }
  81. { boards (defaults to FALSE) }
  82. IDTAG_ClassID = _IDTAGS+$0E; { ULONG * class ID of the provided }
  83. { expansion board (see below) [V8] }
  84. IDTAG_Localize = _IDTAGS+$0F; { BOOL return localized strings }
  85. { (defaults to TRUE) [V8] }
  86. IDTAG_NULL4NA = _IDTAGS+$10; { BOOL return NULL for not available, }
  87. { else return a string (defaults to }
  88. { FALSE) [V8] }
  89. { --------------------------------------------------------------------------}
  90. { Hardware description types }
  91. IDHW_SYSTEM = 0; { System (Amiga,DraCo,...) [V2] }
  92. IDHW_CPU = 1; { CPU (68000,68010,...,68060) }
  93. IDHW_FPU = 2; { FPU (---,68881,68882,68040,68060) }
  94. IDHW_MMU = 3; { MMU (---,68852,68030,68040,68060) }
  95. IDHW_OSVER = 4; { OS Version (Vx.x) }
  96. IDHW_EXECVER = 5; { Exec Version (Vx.x) }
  97. IDHW_WBVER = 6; { Workbench Version (---,Vx.x) }
  98. IDHW_ROMSIZE = 7; { OS ROM Size (xKB, xMB) }
  99. IDHW_CHIPSET = 8; { Chipset (OCS,ECS,AGA,DraCo) }
  100. IDHW_GFXSYS = 9; { Graphic OS (AmigaOS, CyberGraphX, ...) }
  101. IDHW_CHIPRAM = 10; { Chip RAM (xKB, xMB, xGB) }
  102. IDHW_FASTRAM = 11; { Fast RAM (xKB, xMB, xGB) }
  103. IDHW_RAM = 12; { Total RAM (xKB, xMB, xGB) }
  104. IDHW_SETPATCHVER = 13; { SetPatch Version (---,Vx.x) [V4] }
  105. IDHW_AUDIOSYS = 14; { Audio OS (AmigaOS, AHI, ...) [V5] }
  106. IDHW_OSNR = 15; { AmigaOS (2.04, 3.1, ...) }
  107. IDHW_VMMCHIPRAM = 16; { VMM Chip RAM ( *KB, *MB, *GB) }
  108. IDHW_VMMFASTRAM = 17; { VMM Fast RAM ( *KB, *MB, *GB) }
  109. IDHW_VMMRAM = 18; { VMM Total RAM ( *KB, *MB, *GB) }
  110. IDHW_PLNCHIPRAM = 19; { Plain Chip RAM ( *KB, *MB, *GB) }
  111. IDHW_PLNFASTRAM = 20; { Plain Fast RAM ( *KB, *MB, *GB) }
  112. IDHW_PLNRAM = 21; { Plain Total RAM (*KB, *MB, *GB) }
  113. IDHW_VBR = 22; { Vector Base Register [V6] }
  114. IDHW_LASTALERT = 23; { Last Alert code }
  115. IDHW_VBLANKFREQ = 24; { VBlank Frequency }
  116. IDHW_POWERFREQ = 25; { Power Frequency }
  117. IDHW_ECLOCK = 26; { EClock }
  118. IDHW_SLOWRAM = 27; { Plain Slow RAM ( *KB, *MB, *GB) }
  119. IDHW_GARY = 28; { Gary (---,Normal,...) }
  120. IDHW_RAMSEY = 29; { RAMSEY (---,D,F) }
  121. IDHW_BATTCLOCK = 30; { Battery Backed Up Clock (---,Found) }
  122. IDHW_CHUNKYPLANAR = 31; { Chunky To Planar Hardware (---,Found) [V7] }
  123. IDHW_POWERPC = 32; { PowerPC present? (---,Found) }
  124. IDHW_PPCCLOCK = 33; { PowerPC clock (unit MHz) }
  125. IDHW_CPUREV = 34; { CPU revision [V8] }
  126. IDHW_CPUCLOCK = 35; { CPU clock (unit MHz) }
  127. IDHW_FPUCLOCK = 36; { FPU clock (unit MHz) }
  128. IDHW_RAMACCESS = 37; { Main board RAM access time (unit ns) }
  129. IDHW_RAMWIDTH = 38; { Main board RAM width (bit) }
  130. IDHW_RAMCAS = 39; { Main board RAM CAS mode }
  131. IDHW_RAMBANDWIDTH = 40; { Main board RAM bandwidth }
  132. IDHW_TCPIP = 41; { TCP/IP stack [V9] }
  133. IDHW_PPCOS = 42; { PowerPC OS }
  134. IDHW_AGNUS = 43; { Agnus chip revision }
  135. IDHW_AGNUSMODE = 44; { Agnus chip mode }
  136. IDHW_DENISE = 45; { Denise chip version [V10] }
  137. IDHW_DENISEREV = 46; { Denise chip revision }
  138. IDHW_BOINGBAG = 47; { BoingBag number [V12] }
  139. IDHW_NUMBEROF = 48; { Number of types, PRIVATE! }
  140. { --------------------------------------------------------------------------}
  141. { IDHW_SYSTEM numerical result codes }
  142. IDSYS_AMIGA1000 = 0; { Amiga 1000 }
  143. IDSYS_AMIGAOCS = 1; { OCS Amiga 500/2000 }
  144. IDSYS_AMIGAECS = 2; { ECS Amiga 500/2000 }
  145. IDSYS_AMIGA500 = 3; { Amiga 500 }
  146. IDSYS_AMIGA2000 = 4; { Amiga 2000 }
  147. IDSYS_AMIGA3000 = 5; { Amiga 3000 }
  148. IDSYS_CDTV = 6; { CDTV }
  149. IDSYS_AMIGA600 = 7; { Amiga 600 }
  150. IDSYS_CD32 = 8; { CD32 }
  151. IDSYS_AMIGA1200 = 9; { Amiga 1200 }
  152. IDSYS_AMIGA4000 = 10; { Amiga 4000 }
  153. IDSYS_DRACO = 11; { DraCo }
  154. IDSYS_UAE = 12; { Ubiquitous Amiga Emulator }
  155. IDSYS_AMIGA4000T = 13; { Amiga 4000 Tower }
  156. { --------------------------------------------------------------------------}
  157. { IDHW_CPU numerical result codes }
  158. IDCPU_68000 = 0; { 68000 }
  159. IDCPU_68010 = 1; { 68010 }
  160. IDCPU_68020 = 2; { 68020 }
  161. IDCPU_68030 = 3; { 68030 }
  162. IDCPU_68EC030 = 4; { 68EC030 (without MMU) }
  163. IDCPU_68040 = 5; { 68040 }
  164. IDCPU_68LC040 = 6; { 68LC040 (without FPU) }
  165. IDCPU_68060 = 7; { 68060 }
  166. IDCPU_68LC060 = 8; { 68LC060 (without FPU) }
  167. { --------------------------------------------------------------------------}
  168. { IDHW_FPU numerical result codes }
  169. IDFPU_NONE = 0; { no FPU }
  170. IDFPU_68881 = 1; { 68881 }
  171. IDFPU_68882 = 2; { 68882 }
  172. IDFPU_68040 = 3; { 68040 }
  173. IDFPU_68060 = 4; { 68060 }
  174. { --------------------------------------------------------------------------}
  175. { IDHW_MMU numerical result codes }
  176. IDMMU_NONE = 0; { no MMU }
  177. IDMMU_68851 = 1; { 68851 }
  178. IDMMU_68030 = 2; { 68030 }
  179. IDMMU_68040 = 3; { 68040 }
  180. IDMMU_68060 = 4; { 68060 }
  181. { --------------------------------------------------------------------------}
  182. { IDHW_OSNR numerical result codes }
  183. IDOS_UNKNOWN = 0; { <V36 or >V40 }
  184. IDOS_2_0 = 1; { OS2.0 (V36) }
  185. IDOS_2_04 = 2; { OS2.04 (V37) }
  186. IDOS_2_1 = 3; { OS2.1 (V38) }
  187. IDOS_3_0 = 4; { OS3.0 (V39) }
  188. IDOS_3_1 = 5; { OS3.1 (V40) }
  189. IDOS_3_5 = 6; { OS3.5 (V44) }
  190. IDOS_3_9 = 7; { OS3.9 (V45) }
  191. { --------------------------------------------------------------------------}
  192. { IDHW_CHIPSET numerical result codes }
  193. IDCS_OCS = 0; { OCS }
  194. IDCS_ECS = 1; { ECS }
  195. IDCS_AGA = 2; { AGA }
  196. IDCS_ALTAIS = 3; { DraCo Altais }
  197. IDCS_NECS = 4; { Nearly ECS (no HR-Agnus or HR-Denise) }
  198. { --------------------------------------------------------------------------}
  199. { IDHW_GFXSYS numerical result codes }
  200. IDGOS_AMIGAOS = 0; { Plain AmigaOS }
  201. IDGOS_EGS = 1; { EGS }
  202. IDGOS_RETINA = 2; { Retina }
  203. IDGOS_GRAFFITI = 3; { Graffiti }
  204. IDGOS_TIGA = 4; { TIGA }
  205. IDGOS_PROBENCH = 5; { Merlin ProBench }
  206. IDGOS_PICASSO = 6; { Picasso }
  207. IDGOS_CGX = 7; { CyberGraphX }
  208. IDGOS_CGX3 = 8; { CyberGraphX 3D }
  209. IDGOS_PICASSO96 = 9; { Picasso96 }
  210. IDGOS_CGX4 = 10; { CyberGraphX V4 }
  211. { --------------------------------------------------------------------------}
  212. { IDHW_AUDIOSYS numerical result codes }
  213. IDAOS_AMIGAOS = 0; { Plain AmigaOS }
  214. IDAOS_MAESTIX = 1; { MaestroPro driver }
  215. IDAOS_TOCCATA = 2; { Toccata driver }
  216. IDAOS_PRELUDE = 3; { Prelude driver }
  217. IDAOS_AHI = 4; { AHI }
  218. IDAOS_MACROAUDIO = 5; { MacroAudio }
  219. { --------------------------------------------------------------------------}
  220. { IDHW_GARY numerical result codes }
  221. IDGRY_NONE = 0; { No Gary available }
  222. IDGRY_NORMAL = 1; { Normal Gary }
  223. IDGRY_ENHANCED = 2; { Enhanced Gary }
  224. { --------------------------------------------------------------------------}
  225. { IDHW_RAMSEY numerical result codes }
  226. IDRSY_NONE = 0; { No RamSey available }
  227. IDRSY_REVD = 1; { RamSey Revision D }
  228. IDRSY_REVF = 2; { RamSey Revision F }
  229. { --------------------------------------------------------------------------}
  230. { IDHW_POWERPC numerical result codes }
  231. IDPPC_NONE = 0; { No PowerPC implemented }
  232. IDPPC_OTHER = 1; { Another PowerPC }
  233. IDPPC_602 = 2; { 602 }
  234. IDPPC_603 = 3; { 603 }
  235. IDPPC_603E = 4; { 603e }
  236. IDPPC_603P = 5; { 603p }
  237. IDPPC_604 = 6; { 604 }
  238. IDPPC_604E = 7; { 604e }
  239. IDPPC_620 = 8; { 620 }
  240. { --------------------------------------------------------------------------}
  241. { IDHW_RAMCAS numerical result codes }
  242. IDCAS_NONE = 0; { Not available }
  243. IDCAS_NORMAL = 1; { Normal access }
  244. IDCAS_DOUBLE = 2; { Double access }
  245. { --------------------------------------------------------------------------}
  246. { IDHW_TCPIP numerical result codes }
  247. IDTCP_NONE = 0; { Not available }
  248. IDTCP_AMITCP = 1; { AmiTCP }
  249. IDTCP_MIAMI = 2; { Miami }
  250. IDTCP_TERMITE = 3; { TermiteTCP }
  251. IDTCP_GENESIS = 4; { GENESiS }
  252. IDTCP_MIAMIDX = 5; { MiamiDx }
  253. { --------------------------------------------------------------------------}
  254. { IDHW_PPCOS numerical result codes }
  255. IDPOS_NONE = 0; { None }
  256. IDPOS_POWERUP = 1; { PowerUP (Phase 5) }
  257. IDPOS_WARPOS = 2; { WarpOS (Haage&Partner) }
  258. { --------------------------------------------------------------------------}
  259. { IDHW_AGNUS numerical result codes }
  260. IDAG_NONE = 0; { None }
  261. IDAG_UNKNOWN = 1; { Unknown Agnus }
  262. IDAG_8361 = 2; { Agnus 8361 }
  263. IDAG_8367 = 3; { Agnus 8367 }
  264. IDAG_8370 = 4; { Agnus 8370 }
  265. IDAG_8371 = 5; { Agnus 8371 }
  266. IDAG_8372_R4 = 6; { Agnus 8372 Rev. 1-4 }
  267. IDAG_8372_R5 = 7; { Agnus 8372 Rev. 5 }
  268. IDAG_8374_R2 = 8; { Alice 8374 Rev. 1-2 }
  269. IDAG_8374_R3 = 9; { Alice 8374 Rev. 3-4 }
  270. { --------------------------------------------------------------------------}
  271. { IDHW_DENISE numerical result codes }
  272. IDDN_NONE = 0; { None }
  273. IDDN_UNKNOWN = 1; { Unknown Denise (new model?! :-) }
  274. IDDN_8362 = 2; { Denise 8362 }
  275. IDDN_8373 = 3; { Denise 8373 }
  276. IDDN_8364 = 4; { Lisa 8364 }
  277. { --------------------------------------------------------------------------}
  278. { IDHW_AGNUSMODE numerical result codes }
  279. IDAM_NONE = 0; { None }
  280. IDAM_NTSC = 1; { NTSC Agnus }
  281. IDAM_PAL = 2; { PAL Agnus }
  282. { --------------------------------------------------------------------------}
  283. { IDTAG_ClassID numerical result codes }
  284. IDCID_UNKNOWN = 0; { unknown functionality }
  285. IDCID_MISC = 1; { miscellaneous expansion }
  286. IDCID_TURBO = 2; { accelerator }
  287. IDCID_TURBORAM = 3; { accelerator RAM }
  288. IDCID_TURBOHD = 4; { accelerator + some HD controller }
  289. IDCID_TURBOIDE = 5; { accelerator + AT-IDE controller }
  290. IDCID_TURBOSCSIHD = 6; { accelerator + SCSI host adapter }
  291. IDCID_NET = 7; { some network }
  292. IDCID_ARCNET = 8; { ArcNet }
  293. IDCID_ETHERNET = 9; { Ethernet }
  294. IDCID_AUDIO = 10; { audio }
  295. IDCID_VIDEO = 11; { video (video digitizer etc) }
  296. IDCID_MULTIMEDIA = 12; { multimedia (audio, video, etc) }
  297. IDCID_DSP = 13; { multi purpose DSP }
  298. IDCID_BUSBRIDGE = 14; { ISA bus bridge }
  299. IDCID_BRIDGE = 15; { PC bridge }
  300. IDCID_EMULATOR = 16; { some Emulator hardware }
  301. IDCID_MACEMU = 17; { Macintosh emulator hardware }
  302. IDCID_ATARIEMU = 18; { Atari emulator hardware }
  303. IDCID_GFX = 19; { graphics (register) }
  304. IDCID_GFXRAM = 20; { graphics (video RAM) }
  305. IDCID_HD = 21; { some HD controller }
  306. IDCID_HDRAM = 22; { some HD controller + RAM }
  307. IDCID_IDEHD = 23; { IDE controller }
  308. IDCID_IDEHDRAM = 24; { IDE controller + RAM }
  309. IDCID_SCSIHD = 25; { SCSI host adapter }
  310. IDCID_RAMSCSIHD = 26; { SCSI host adapter + RAM }
  311. IDCID_CDROM = 27; { CD-ROM interface }
  312. IDCID_MODEM = 28; { internal modem }
  313. IDCID_ISDN = 29; { internal ISDN terminal adapter }
  314. IDCID_MULTIIO = 30; { multi I/O (serial + parallel) }
  315. IDCID_SERIAL = 31; { multi serial (no parallel) }
  316. IDCID_PARALLEL = 32; { multi parallel (no serial) }
  317. IDCID_SCANIF = 33; { scanner interface }
  318. IDCID_TABLET = 34; { drawing tablet interface }
  319. IDCID_RAM = 35; { plain RAM expansion }
  320. IDCID_FLASHROM = 36; { Flash ROM }
  321. IDCID_SCSIIDE = 37; { combined SCSI/IDE controller }
  322. IDCID_RAMFPU = 38; { RAM expansion + FPU }
  323. IDCID_GUESS = 39; { name was unknown but guessed }
  324. IDCID_KICKSTART = 40; { KickStart }
  325. IDCID_RAM32 = 41; { 32bit RAM expansion }
  326. IDCID_TURBOANDRAM = 42; { accelerator + RAM expansion }
  327. IDCID_ACCESS = 43; { access control }
  328. IDCID_INTERFACE = 44; { some interface }
  329. IDCID_MFMHD = 45; { MFM HD controller }
  330. IDCID_FLOPPY = 46; { floppy disk controller }
  331. { Be prepared to get other numbers as well. In this case you }
  332. { should assume IDCID_MISC. }
  333. { --------------------------------------------------------------------------}
  334. { Error codes }
  335. { Positive error codes are DOS errors! }
  336. IDERR_OKAY = 0; { No error }
  337. IDERR_NOLENGTH = -1; { Buffer length is 0 ?? }
  338. IDERR_BADID = -2; { Missing or bad board ID }
  339. IDERR_NOMEM = -3; { Not enough memory }
  340. IDERR_NOFD = -4; { No fitting FD file found }
  341. IDERR_OFFSET = -5; { Function offset not found }
  342. IDERR_DONE = -6; { Done with traversing (not an error) }
  343. IDERR_SECONDARY = -7; { Secondary expansion board (not an error) }
  344. { --------------------------------------------------------------------------}
  345. { That's all... }
  346. VAR IdentifyBase : pLibrary;
  347. FUNCTION IdExpansion(TagList : pTagItem) : LONGINT;
  348. FUNCTION IdHardware(Type_ : Ulong; TagList : pTagItem) : pCHAR;
  349. FUNCTION IdAlert(ID : Ulong; TagList : pTagItem) : LONGINT;
  350. FUNCTION IdFunction(LibName : pCHAR; Offset : LONGINT; TagList : pTagItem) : LONGINT;
  351. FUNCTION IdHardwareNum(Type_ : Ulong; TagList : pTagItem) : Ulong;
  352. PROCEDURE IdHardwareUpdate;
  353. FUNCTION IdFormatString(String_ : pCHAR; Buffer : pCHAR; Length : Ulong; Tags : pTagItem) : Ulong;
  354. FUNCTION IdEstimateFormatSize(String_ : pCHAR; Tags : pTagItem) : Ulong;
  355. {
  356. This is functions and procedures with array of const.
  357. For use with fpc 1.0 and above.
  358. }
  359. FUNCTION IdExpansionTags(const TagList : Array Of Const) : LONGINT;
  360. FUNCTION IdHardwareTags(Type_ : longword; const TagList : Array Of Const) : pCHAR;
  361. FUNCTION IdAlertTags(ID : longword; const TagList : Array Of Const) : LONGINT;
  362. FUNCTION IdFunctionTags(LibName : pCHAR; Offset : LONGINT; const TagList : Array Of Const) : LONGINT;
  363. FUNCTION IdHardwareNumTags(Type_ : longword; const TagList : Array Of Const) : longword;
  364. FUNCTION IdFormatStringTags(String_ : pCHAR; Buffer : pCHAR; Length : longword; const Tags : Array Of Const) : longword;
  365. FUNCTION IdEstimateFormatSizeTags(String_ : pCHAR; const Tags : Array Of Const) : longword;
  366. {
  367. Overlay functions
  368. }
  369. FUNCTION IdFunction(LibName : string; Offset : LONGINT; TagList : pTagItem) : LONGINT;
  370. FUNCTION IdFormatString(String_ : string; Buffer : pCHAR; Length : Ulong; Tags : pTagItem) : Ulong;
  371. FUNCTION IdEstimateFormatSize(String_ : string; Tags : pTagItem) : Ulong;
  372. FUNCTION IdFunctionTags(LibName : string; Offset : LONGINT; const TagList : Array Of Const) : LONGINT;
  373. FUNCTION IdFormatStringTags(String_ : string; Buffer : pCHAR; Length : longword; const Tags : Array Of Const) : longword;
  374. FUNCTION IdEstimateFormatSizeTags(String_ : string; const Tags : Array Of Const) : longword;
  375. {You can remove this include and use a define instead}
  376. {$I useautoopenlib.inc}
  377. {$ifdef use_init_openlib}
  378. procedure InitIDENTIFYLibrary;
  379. {$endif use_init_openlib}
  380. {This is a variable that knows how the unit is compiled}
  381. var
  382. IDENTIFYIsCompiledHow : longint;
  383. IMPLEMENTATION
  384. uses
  385. {$ifndef dont_use_openlib}
  386. msgbox,
  387. {$endif dont_use_openlib}
  388. tagsarray,pastoc;
  389. FUNCTION IdExpansion(TagList : pTagItem) : LONGINT;
  390. BEGIN
  391. ASM
  392. MOVE.L A6,-(A7)
  393. MOVEA.L TagList,A0
  394. MOVEA.L IdentifyBase,A6
  395. JSR -030(A6)
  396. MOVEA.L (A7)+,A6
  397. MOVE.L D0,@RESULT
  398. END;
  399. END;
  400. FUNCTION IdHardware(Type_ : Ulong; TagList : pTagItem) : pCHAR;
  401. BEGIN
  402. ASM
  403. MOVE.L A6,-(A7)
  404. MOVE.L Type_,D0
  405. MOVEA.L TagList,A0
  406. MOVEA.L IdentifyBase,A6
  407. JSR -036(A6)
  408. MOVEA.L (A7)+,A6
  409. MOVE.L D0,@RESULT
  410. END;
  411. END;
  412. FUNCTION IdAlert(ID : Ulong; TagList : pTagItem) : LONGINT;
  413. BEGIN
  414. ASM
  415. MOVE.L A6,-(A7)
  416. MOVE.L ID,D0
  417. MOVEA.L TagList,A0
  418. MOVEA.L IdentifyBase,A6
  419. JSR -042(A6)
  420. MOVEA.L (A7)+,A6
  421. MOVE.L D0,@RESULT
  422. END;
  423. END;
  424. FUNCTION IdFunction(LibName : pCHAR; Offset : LONGINT; TagList : pTagItem) : LONGINT;
  425. BEGIN
  426. ASM
  427. MOVE.L A6,-(A7)
  428. MOVEA.L LibName,A0
  429. MOVE.L Offset,D0
  430. MOVEA.L TagList,A1
  431. MOVEA.L IdentifyBase,A6
  432. JSR -048(A6)
  433. MOVEA.L (A7)+,A6
  434. MOVE.L D0,@RESULT
  435. END;
  436. END;
  437. FUNCTION IdHardwareNum(Type_ : Ulong; TagList : pTagItem) : Ulong;
  438. BEGIN
  439. ASM
  440. MOVE.L A6,-(A7)
  441. MOVE.L Type_,D0
  442. MOVEA.L TagList,A0
  443. MOVEA.L IdentifyBase,A6
  444. JSR -054(A6)
  445. MOVEA.L (A7)+,A6
  446. MOVE.L D0,@RESULT
  447. END;
  448. END;
  449. PROCEDURE IdHardwareUpdate;
  450. BEGIN
  451. ASM
  452. MOVE.L A6,-(A7)
  453. MOVEA.L IdentifyBase,A6
  454. JSR -060(A6)
  455. MOVEA.L (A7)+,A6
  456. END;
  457. END;
  458. FUNCTION IdFormatString(String_ : pCHAR; Buffer : pCHAR; Length : Ulong; Tags : pTagItem) : Ulong;
  459. BEGIN
  460. ASM
  461. MOVE.L A6,-(A7)
  462. MOVEA.L String_,A0
  463. MOVEA.L Buffer,A1
  464. MOVE.L Length,D0
  465. MOVEA.L Tags,A2
  466. MOVEA.L IdentifyBase,A6
  467. JSR -066(A6)
  468. MOVEA.L (A7)+,A6
  469. MOVE.L D0,@RESULT
  470. END;
  471. END;
  472. FUNCTION IdEstimateFormatSize(String_ : pCHAR; Tags : pTagItem) : Ulong;
  473. BEGIN
  474. ASM
  475. MOVE.L A6,-(A7)
  476. MOVEA.L String_,A0
  477. MOVEA.L Tags,A1
  478. MOVEA.L IdentifyBase,A6
  479. JSR -072(A6)
  480. MOVEA.L (A7)+,A6
  481. MOVE.L D0,@RESULT
  482. END;
  483. END;
  484. {
  485. Functions and procedures with array of const go here
  486. }
  487. FUNCTION IdExpansionTags(const TagList : Array Of Const) : LONGINT;
  488. begin
  489. IdExpansionTags := IdExpansion(readintags(TagList));
  490. end;
  491. FUNCTION IdHardwareTags(Type_ : longword; const TagList : Array Of Const) : pCHAR;
  492. begin
  493. IdHardwareTags := IdHardware(Type_ , readintags(TagList));
  494. end;
  495. FUNCTION IdAlertTags(ID : longword; const TagList : Array Of Const) : LONGINT;
  496. begin
  497. IdAlertTags := IdAlert(ID , readintags(TagList));
  498. end;
  499. FUNCTION IdFunctionTags(LibName : pCHAR; Offset : LONGINT; const TagList : Array Of Const) : LONGINT;
  500. begin
  501. IdFunctionTags := IdFunction(LibName , Offset , readintags(TagList));
  502. end;
  503. FUNCTION IdHardwareNumTags(Type_ : longword; const TagList : Array Of Const) : longword;
  504. begin
  505. IdHardwareNumTags := IdHardwareNum(Type_ , readintags(TagList));
  506. end;
  507. FUNCTION IdFormatStringTags(String_ : pCHAR; Buffer : pCHAR; Length : longword; const Tags : Array Of Const) : longword;
  508. begin
  509. IdFormatStringTags := IdFormatString(String_ , Buffer , Length , readintags(Tags));
  510. end;
  511. FUNCTION IdEstimateFormatSizeTags(String_ : pCHAR; const Tags : Array Of Const) : longword;
  512. begin
  513. IdEstimateFormatSizeTags := IdEstimateFormatSize(String_ , readintags(Tags));
  514. end;
  515. {
  516. Overlay functions
  517. }
  518. FUNCTION IdFunction(LibName : string; Offset : LONGINT; TagList : pTagItem) : LONGINT;
  519. begin
  520. IdFunction := IdFunction(pas2c(LibName),Offset,TagList);
  521. end;
  522. FUNCTION IdFormatString(String_ : string; Buffer : pCHAR; Length : Ulong; Tags : pTagItem) : Ulong;
  523. begin
  524. IdFormatString := IdFormatString(pas2c(String_),Buffer,Length,Tags);
  525. end;
  526. FUNCTION IdEstimateFormatSize(String_ : string; Tags : pTagItem) : Ulong;
  527. begin
  528. IdEstimateFormatSize := IdEstimateFormatSize(pas2c(String_),Tags);
  529. end;
  530. FUNCTION IdFunctionTags(LibName : string; Offset : LONGINT; const TagList : Array Of Const) : LONGINT;
  531. begin
  532. IdFunctionTags := IdFunction(pas2c(LibName),Offset,readintags(TagList));
  533. end;
  534. FUNCTION IdFormatStringTags(String_ : string; Buffer : pCHAR; Length : longword; const Tags : Array Of Const) : longword;
  535. begin
  536. IdFormatStringTags := IdFormatString(pas2c(String_),Buffer,Length,readintags(Tags));
  537. end;
  538. FUNCTION IdEstimateFormatSizeTags(String_ : string; const Tags : Array Of Const) : longword;
  539. begin
  540. IdEstimateFormatSizeTags := IdEstimateFormatSize(pas2c(String_),readintags(Tags));
  541. end;
  542. const
  543. { Change VERSION and LIBVERSION to proper values }
  544. VERSION : string[2] = '0';
  545. LIBVERSION : longword = 0;
  546. {$ifdef use_init_openlib}
  547. {$Info Compiling initopening of identify.library}
  548. {$Info don't forget to use InitIDENTIFYLibrary in the beginning of your program}
  549. var
  550. identify_exit : Pointer;
  551. procedure CloseidentifyLibrary;
  552. begin
  553. ExitProc := identify_exit;
  554. if IdentifyBase <> nil then begin
  555. CloseLibrary(IdentifyBase);
  556. IdentifyBase := nil;
  557. end;
  558. end;
  559. procedure InitIDENTIFYLibrary;
  560. begin
  561. IdentifyBase := nil;
  562. IdentifyBase := OpenLibrary(IDENTIFYNAME,LIBVERSION);
  563. if IdentifyBase <> nil then begin
  564. identify_exit := ExitProc;
  565. ExitProc := @CloseidentifyLibrary;
  566. end else begin
  567. MessageBox('FPC Pascal Error',
  568. 'Can''t open identify.library version ' + VERSION + #10 +
  569. 'Deallocating resources and closing down',
  570. 'Oops');
  571. halt(20);
  572. end;
  573. end;
  574. begin
  575. IDENTIFYIsCompiledHow := 2;
  576. {$endif use_init_openlib}
  577. {$ifdef use_auto_openlib}
  578. {$Info Compiling autoopening of identify.library}
  579. var
  580. identify_exit : Pointer;
  581. procedure CloseidentifyLibrary;
  582. begin
  583. ExitProc := identify_exit;
  584. if IdentifyBase <> nil then begin
  585. CloseLibrary(IdentifyBase);
  586. IdentifyBase := nil;
  587. end;
  588. end;
  589. begin
  590. IdentifyBase := nil;
  591. IdentifyBase := OpenLibrary(IDENTIFYNAME,LIBVERSION);
  592. if IdentifyBase <> nil then begin
  593. identify_exit := ExitProc;
  594. ExitProc := @CloseidentifyLibrary;
  595. IDENTIFYIsCompiledHow := 1;
  596. end else begin
  597. MessageBox('FPC Pascal Error',
  598. 'Can''t open identify.library version ' + VERSION + #10 +
  599. 'Deallocating resources and closing down',
  600. 'Oops');
  601. halt(20);
  602. end;
  603. {$endif use_auto_openlib}
  604. {$ifdef dont_use_openlib}
  605. begin
  606. IDENTIFYIsCompiledHow := 3;
  607. {$Warning No autoopening of identify.library compiled}
  608. {$Warning Make sure you open identify.library yourself}
  609. {$endif dont_use_openlib}
  610. END. (* UNIT IDENTIFY *)