lincd.pp 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219
  1. {
  2. $Id$
  3. Copyright (c) 1999-2000 by Michael Van Canneyt
  4. Unit containing definitions from the Linux CDROM kernel interface.
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. unit lincd;
  12. {$mode objfpc}
  13. interface
  14. uses
  15. {$ifdef ver1_0}
  16. linux
  17. {$else}
  18. baseunix,
  19. unix
  20. {$endif}
  21. ;
  22. { ---------------------------------------------------------------------
  23. cdrom.h header translation.
  24. ---------------------------------------------------------------------}
  25. { Pointers to basic pascal types, inserted by h2pas conversion program.}
  26. Type
  27. PLongint = ^Longint;
  28. PSmallInt = ^SmallInt;
  29. PByte = ^Byte;
  30. PWord = ^Word;
  31. PDWord = ^DWord;
  32. PDouble = ^Double;
  33. TU8 = Byte;
  34. PU8 = ^TU8;
  35. TU32 = Cardinal;
  36. PU32 = ^TU32;
  37. {$PACKRECORDS C}
  38. const
  39. EDRIVE_CANT_DO_THIS = {$ifdef ver1_0}Sys_EOPNOTSUPP{$else}ESysEOPNOTSUPP{$endif}; // = 95
  40. CDROMPAUSE = $5301;
  41. CDROMRESUME = $5302;
  42. CDROMPLAYMSF = $5303;
  43. CDROMPLAYTRKIND = $5304;
  44. CDROMREADTOCHDR = $5305;
  45. CDROMREADTOCENTRY = $5306;
  46. CDROMSTOP = $5307;
  47. CDROMSTART = $5308;
  48. CDROMEJECT = $5309;
  49. CDROMVOLCTRL = $530a;
  50. CDROMSUBCHNL = $530b;
  51. CDROMREADMODE2 = $530c;
  52. CDROMREADMODE1 = $530d;
  53. CDROMREADAUDIO = $530e;
  54. CDROMEJECT_SW = $530f;
  55. CDROMMULTISESSION = $5310;
  56. CDROM_GET_MCN = $5311;
  57. CDROM_GET_UPC = CDROM_GET_MCN;
  58. CDROMRESET = $5312;
  59. CDROMVOLREAD = $5313;
  60. CDROMREADRAW = $5314;
  61. CDROMREADCOOKED = $5315;
  62. CDROMSEEK = $5316;
  63. CDROMPLAYBLK = $5317;
  64. CDROMREADALL = $5318;
  65. CDROMGETSPINDOWN = $531d;
  66. CDROMSETSPINDOWN = $531e;
  67. CDROMCLOSETRAY = $5319;
  68. CDROM_SET_OPTIONS = $5320;
  69. CDROM_CLEAR_OPTIONS = $5321;
  70. CDROM_SELECT_SPEED = $5322;
  71. CDROM_SELECT_DISC = $5323;
  72. CDROM_MEDIA_CHANGED = $5325;
  73. CDROM_DRIVE_STATUS = $5326;
  74. CDROM_DISC_STATUS = $5327;
  75. CDROM_CHANGER_NSLOTS = $5328;
  76. CDROM_LOCKDOOR = $5329;
  77. CDROM_DEBUG = $5330;
  78. CDROM_GET_CAPABILITY = $5331;
  79. CDROMAUDIOBUFSIZ = $5382;
  80. DVD_READ_STRUCT = $5390;
  81. DVD_WRITE_STRUCT = $5391;
  82. DVD_AUTH = $5392;
  83. CDROM_SEND_PACKET = $5393;
  84. CDROM_NEXT_WRITABLE = $5394;
  85. CDROM_LAST_WRITTEN = $5395;
  86. type
  87. Pcdrom_msf0 = ^Tcdrom_msf0;
  88. Tcdrom_msf0 = record
  89. minute : Tu8;
  90. second : Tu8;
  91. frame : Tu8;
  92. end;
  93. Pcdrom_addr = ^Tcdrom_addr;
  94. Tcdrom_addr = record
  95. case longint of
  96. 0 : ( msf : Tcdrom_msf0 );
  97. 1 : ( lba : longint );
  98. end;
  99. Pcdrom_msf = ^Tcdrom_msf;
  100. Tcdrom_msf = record
  101. cdmsf_min0 : Tu8;
  102. cdmsf_sec0 : Tu8;
  103. cdmsf_frame0 : Tu8;
  104. cdmsf_min1 : Tu8;
  105. cdmsf_sec1 : Tu8;
  106. cdmsf_frame1 : Tu8;
  107. end;
  108. Pcdrom_ti = ^Tcdrom_ti;
  109. Tcdrom_ti = record
  110. cdti_trk0 : Tu8;
  111. cdti_ind0 : Tu8;
  112. cdti_trk1 : Tu8;
  113. cdti_ind1 : Tu8;
  114. end;
  115. Pcdrom_tochdr = ^Tcdrom_tochdr;
  116. Tcdrom_tochdr = record
  117. cdth_trk0 : Tu8;
  118. cdth_trk1 : Tu8;
  119. end;
  120. Pcdrom_volctrl = ^Tcdrom_volctrl;
  121. Tcdrom_volctrl = record
  122. channel0 : Tu8;
  123. channel1 : Tu8;
  124. channel2 : Tu8;
  125. channel3 : Tu8;
  126. end;
  127. Pcdrom_subchnl = ^Tcdrom_subchnl;
  128. Tcdrom_subchnl = record
  129. cdsc_format : Tu8;
  130. cdsc_audiostatus : Tu8;
  131. flag0 : word;
  132. cdsc_trk : Tu8;
  133. cdsc_ind : Tu8;
  134. cdsc_absaddr : Tcdrom_addr;
  135. cdsc_reladdr : Tcdrom_addr;
  136. end;
  137. const
  138. bm_Tcdrom_subchnl_cdsc_adr = $F;
  139. bp_Tcdrom_subchnl_cdsc_adr = 0;
  140. bm_Tcdrom_subchnl_cdsc_ctrl = $F0;
  141. bp_Tcdrom_subchnl_cdsc_ctrl = 4;
  142. function cdsc_adr(var a : Tcdrom_subchnl) : Tu8;
  143. procedure set_cdsc_adr(var a : Tcdrom_subchnl; __cdsc_adr : Tu8);
  144. function cdsc_ctrl(var a : Tcdrom_subchnl) : Tu8;
  145. procedure set_cdsc_ctrl(var a : Tcdrom_subchnl; __cdsc_ctrl : Tu8);
  146. type
  147. Pcdrom_tocentry = ^Tcdrom_tocentry;
  148. Tcdrom_tocentry = record
  149. cdte_track : Tu8;
  150. flag0 : tu8;
  151. cdte_format : Tu8;
  152. cdte_addr : Tcdrom_addr;
  153. cdte_datamode : Tu8;
  154. end;
  155. const
  156. bm_Tcdrom_tocentry_cdte_adr = $F;
  157. bp_Tcdrom_tocentry_cdte_adr = 0;
  158. bm_Tcdrom_tocentry_cdte_ctrl = $F0;
  159. bp_Tcdrom_tocentry_cdte_ctrl = 4;
  160. function cdte_adr(var a : Tcdrom_tocentry) : Tu8;
  161. procedure set_cdte_adr(var a : Tcdrom_tocentry; __cdte_adr : Tu8);
  162. function cdte_ctrl(var a : Tcdrom_tocentry) : Tu8;
  163. procedure set_cdte_ctrl(var a : Tcdrom_tocentry; __cdte_ctrl : Tu8);
  164. type
  165. Pcdrom_read = ^Tcdrom_read;
  166. Tcdrom_read = record
  167. cdread_lba : longint;
  168. cdread_bufaddr : Pchar;
  169. cdread_buflen : longint;
  170. end;
  171. Pcdrom_read_audio = ^Tcdrom_read_audio;
  172. Tcdrom_read_audio = record
  173. addr : Tcdrom_addr;
  174. addr_format : Tu8;
  175. nframes : longint;
  176. buf : Pu8;
  177. end;
  178. Pcdrom_multisession = ^Tcdrom_multisession;
  179. Tcdrom_multisession = record
  180. addr : Tcdrom_addr;
  181. xa_flag : Tu8;
  182. addr_format : Tu8;
  183. end;
  184. Pcdrom_mcn = ^Tcdrom_mcn;
  185. Tcdrom_mcn = record
  186. medium_catalog_number : array[0..13] of Tu8;
  187. end;
  188. Pcdrom_blk = ^Tcdrom_blk;
  189. Tcdrom_blk = record
  190. from : dword;
  191. len : word;
  192. end;
  193. const
  194. CDROM_PACKET_SIZE = 12;
  195. CGC_DATA_UNKNOWN = 0;
  196. CGC_DATA_WRITE = 1;
  197. CGC_DATA_READ = 2;
  198. CGC_DATA_NONE = 3;
  199. // Moved here
  200. type
  201. Prequest_sense = ^Trequest_sense;
  202. Trequest_sense = record
  203. flag0 : word;
  204. segment_number : Tu8;
  205. flag1 : word;
  206. information : array[0..3] of Tu8;
  207. add_sense_len : Tu8;
  208. command_info : array[0..3] of Tu8;
  209. asc : Tu8;
  210. ascq : Tu8;
  211. fruc : Tu8;
  212. sks : array[0..2] of Tu8;
  213. asb : array[0..45] of Tu8;
  214. end;
  215. Pcdrom_generic_command = ^Tcdrom_generic_command;
  216. Tcdrom_generic_command = record
  217. cmd : array[0..(CDROM_PACKET_SIZE)-1] of byte;
  218. buffer : Pbyte;
  219. buflen : dword;
  220. stat : longint;
  221. sense : Prequest_sense;
  222. data_direction : byte;
  223. quiet : longint;
  224. timeout : longint;
  225. reserved : array[0..0] of pointer;
  226. end;
  227. const
  228. CD_MINS = 74;
  229. CD_SECS = 60;
  230. CD_FRAMES = 75;
  231. CD_SYNC_SIZE = 12;
  232. CD_MSF_OFFSET = 150;
  233. CD_CHUNK_SIZE = 24;
  234. CD_NUM_OF_CHUNKS = 98;
  235. CD_FRAMESIZE_SUB = 96;
  236. CD_HEAD_SIZE = 4;
  237. CD_SUBHEAD_SIZE = 8;
  238. CD_EDC_SIZE = 4;
  239. CD_ZERO_SIZE = 8;
  240. CD_ECC_SIZE = 276;
  241. CD_FRAMESIZE = 2048;
  242. CD_FRAMESIZE_RAW = 2352;
  243. CD_FRAMESIZE_RAWER = 2646;
  244. CD_FRAMESIZE_RAW1 = CD_FRAMESIZE_RAW - CD_SYNC_SIZE;
  245. CD_FRAMESIZE_RAW0 = (CD_FRAMESIZE_RAW - CD_SYNC_SIZE) - CD_HEAD_SIZE;
  246. CD_XA_HEAD = CD_HEAD_SIZE + CD_SUBHEAD_SIZE;
  247. CD_XA_TAIL = CD_EDC_SIZE + CD_ECC_SIZE;
  248. CD_XA_SYNC_HEAD = CD_SYNC_SIZE + CD_XA_HEAD;
  249. CDROM_LBA = $01;
  250. CDROM_MSF = $02;
  251. CDROM_DATA_TRACK = $04;
  252. CDROM_LEADOUT = $AA;
  253. CDROM_AUDIO_INVALID = $00;
  254. CDROM_AUDIO_PLAY = $11;
  255. CDROM_AUDIO_PAUSED = $12;
  256. CDROM_AUDIO_COMPLETED = $13;
  257. CDROM_AUDIO_ERROR = $14;
  258. CDROM_AUDIO_NO_STATUS = $15;
  259. CDC_CLOSE_TRAY = $1;
  260. CDC_OPEN_TRAY = $2;
  261. CDC_LOCK = $4;
  262. CDC_SELECT_SPEED = $8;
  263. CDC_SELECT_DISC = $10;
  264. CDC_MULTI_SESSION = $20;
  265. CDC_MCN = $40;
  266. CDC_MEDIA_CHANGED = $80;
  267. CDC_PLAY_AUDIO = $100;
  268. CDC_RESET = $200;
  269. CDC_IOCTLS = $400;
  270. CDC_DRIVE_STATUS = $800;
  271. CDC_GENERIC_PACKET = $1000;
  272. CDC_CD_R = $2000;
  273. CDC_CD_RW = $4000;
  274. CDC_DVD = $8000;
  275. CDC_DVD_R = $10000;
  276. CDC_DVD_RAM = $20000;
  277. CDS_NO_INFO = 0;
  278. CDS_NO_DISC = 1;
  279. CDS_TRAY_OPEN = 2;
  280. CDS_DRIVE_NOT_READY = 3;
  281. CDS_DISC_OK = 4;
  282. CDS_AUDIO = 100;
  283. CDS_DATA_1 = 101;
  284. CDS_DATA_2 = 102;
  285. CDS_XA_2_1 = 103;
  286. CDS_XA_2_2 = 104;
  287. CDS_MIXED = 105;
  288. CDO_AUTO_CLOSE = $1;
  289. CDO_AUTO_EJECT = $2;
  290. CDO_USE_FFLAGS = $4;
  291. CDO_LOCK = $8;
  292. CDO_CHECK_TYPE = $10;
  293. { was #define dname def_expr }
  294. function CDSL_NONE : longint;
  295. { return type might be wrong }
  296. { was #define dname def_expr }
  297. function CDSL_CURRENT : longint;
  298. const
  299. CD_PART_MAX = 64;
  300. CD_PART_MASK = CD_PART_MAX - 1;
  301. GPCMD_BLANK = $a1;
  302. GPCMD_CLOSE_TRACK = $5b;
  303. GPCMD_FLUSH_CACHE = $35;
  304. GPCMD_FORMAT_UNIT = $04;
  305. GPCMD_GET_CONFIGURATION = $46;
  306. GPCMD_GET_EVENT_STATUS_NOTIFICATION = $4a;
  307. GPCMD_GET_PERFORMANCE = $ac;
  308. GPCMD_INQUIRY = $12;
  309. GPCMD_LOAD_UNLOAD = $a6;
  310. GPCMD_MECHANISM_STATUS = $bd;
  311. GPCMD_MODE_SELECT_10 = $55;
  312. GPCMD_MODE_SENSE_10 = $5a;
  313. GPCMD_PAUSE_RESUME = $4b;
  314. GPCMD_PLAY_AUDIO_10 = $45;
  315. GPCMD_PLAY_AUDIO_MSF = $47;
  316. GPCMD_PLAY_AUDIO_TI = $48;
  317. GPCMD_PLAY_CD = $bc;
  318. GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL = $1e;
  319. GPCMD_READ_10 = $28;
  320. GPCMD_READ_12 = $a8;
  321. GPCMD_READ_CDVD_CAPACITY = $25;
  322. GPCMD_READ_CD = $be;
  323. GPCMD_READ_CD_MSF = $b9;
  324. GPCMD_READ_DISC_INFO = $51;
  325. GPCMD_READ_DVD_STRUCTURE = $ad;
  326. GPCMD_READ_FORMAT_CAPACITIES = $23;
  327. GPCMD_READ_HEADER = $44;
  328. GPCMD_READ_TRACK_RZONE_INFO = $52;
  329. GPCMD_READ_SUBCHANNEL = $42;
  330. GPCMD_READ_TOC_PMA_ATIP = $43;
  331. GPCMD_REPAIR_RZONE_TRACK = $58;
  332. GPCMD_REPORT_KEY = $a4;
  333. GPCMD_REQUEST_SENSE = $03;
  334. GPCMD_RESERVE_RZONE_TRACK = $53;
  335. GPCMD_SCAN = $ba;
  336. GPCMD_SEEK = $2b;
  337. GPCMD_SEND_DVD_STRUCTURE = $ad;
  338. GPCMD_SEND_EVENT = $a2;
  339. GPCMD_SEND_KEY = $a3;
  340. GPCMD_SEND_OPC = $54;
  341. GPCMD_SET_READ_AHEAD = $a7;
  342. GPCMD_SET_STREAMING = $b6;
  343. GPCMD_START_STOP_UNIT = $1b;
  344. GPCMD_STOP_PLAY_SCAN = $4e;
  345. GPCMD_TEST_UNIT_READY = $00;
  346. GPCMD_VERIFY_10 = $2f;
  347. GPCMD_WRITE_10 = $2a;
  348. GPCMD_WRITE_AND_VERIFY_10 = $2e;
  349. GPCMD_SET_SPEED = $bb;
  350. GPCMD_PLAYAUDIO_TI = $48;
  351. GPCMD_GET_MEDIA_STATUS = $da;
  352. GPMODE_R_W_ERROR_PAGE = $01;
  353. GPMODE_WRITE_PARMS_PAGE = $05;
  354. GPMODE_AUDIO_CTL_PAGE = $0e;
  355. GPMODE_POWER_PAGE = $1a;
  356. GPMODE_FAULT_FAIL_PAGE = $1c;
  357. GPMODE_TO_PROTECT_PAGE = $1d;
  358. GPMODE_CAPABILITIES_PAGE = $2a;
  359. GPMODE_ALL_PAGES = $3f;
  360. GPMODE_CDROM_PAGE = $0d;
  361. DVD_STRUCT_PHYSICAL = $00;
  362. DVD_STRUCT_COPYRIGHT = $01;
  363. DVD_STRUCT_DISCKEY = $02;
  364. DVD_STRUCT_BCA = $03;
  365. DVD_STRUCT_MANUFACT = $04;
  366. type
  367. Pdvd_layer = ^Tdvd_layer;
  368. Tdvd_layer = record
  369. flag0 : longint;
  370. start_sector : Tu32;
  371. end_sector : Tu32;
  372. end_sector_l0 : Tu32;
  373. end;
  374. const
  375. bm_Tdvd_layer_book_version = $F;
  376. bp_Tdvd_layer_book_version = 0;
  377. bm_Tdvd_layer_book_type = $F0;
  378. bp_Tdvd_layer_book_type = 4;
  379. bm_Tdvd_layer_min_rate = $F00;
  380. bp_Tdvd_layer_min_rate = 8;
  381. bm_Tdvd_layer_disc_size = $F000;
  382. bp_Tdvd_layer_disc_size = 12;
  383. bm_Tdvd_layer_layer_type = $F0000;
  384. bp_Tdvd_layer_layer_type = 16;
  385. bm_Tdvd_layer_track_path = $100000;
  386. bp_Tdvd_layer_track_path = 20;
  387. bm_Tdvd_layer_nlayers = $600000;
  388. bp_Tdvd_layer_nlayers = 21;
  389. bm_Tdvd_layer_track_density = $7800000;
  390. bp_Tdvd_layer_track_density = 23;
  391. bm_Tdvd_layer_linear_density = $78000000;
  392. bp_Tdvd_layer_linear_density = 27;
  393. bm_Tdvd_layer_bca = $80000000;
  394. bp_Tdvd_layer_bca = 31;
  395. function book_version(var a : Tdvd_layer) : Tu8;
  396. procedure set_book_version(var a : Tdvd_layer; __book_version : Tu8);
  397. function book_type(var a : Tdvd_layer) : Tu8;
  398. procedure set_book_type(var a : Tdvd_layer; __book_type : Tu8);
  399. function min_rate(var a : Tdvd_layer) : Tu8;
  400. procedure set_min_rate(var a : Tdvd_layer; __min_rate : Tu8);
  401. function disc_size(var a : Tdvd_layer) : Tu8;
  402. procedure set_disc_size(var a : Tdvd_layer; __disc_size : Tu8);
  403. function layer_type(var a : Tdvd_layer) : Tu8;
  404. procedure set_layer_type(var a : Tdvd_layer; __layer_type : Tu8);
  405. function track_path(var a : Tdvd_layer) : Tu8;
  406. procedure set_track_path(var a : Tdvd_layer; __track_path : Tu8);
  407. function nlayers(var a : Tdvd_layer) : Tu8;
  408. procedure set_nlayers(var a : Tdvd_layer; __nlayers : Tu8);
  409. function track_density(var a : Tdvd_layer) : Tu8;
  410. procedure set_track_density(var a : Tdvd_layer; __track_density : Tu8);
  411. function linear_density(var a : Tdvd_layer) : Tu8;
  412. procedure set_linear_density(var a : Tdvd_layer; __linear_density : Tu8);
  413. function bca(var a : Tdvd_layer) : Tu8;
  414. procedure set_bca(var a : Tdvd_layer; __bca : Tu8);
  415. const
  416. DVD_LAYERS = 4;
  417. type
  418. Pdvd_physical = ^Tdvd_physical;
  419. Tdvd_physical = record
  420. _type : Tu8;
  421. layer_num : Tu8;
  422. layer : array[0..(DVD_LAYERS)-1] of Tdvd_layer;
  423. end;
  424. Pdvd_copyright = ^Tdvd_copyright;
  425. Tdvd_copyright = record
  426. _type : Tu8;
  427. layer_num : Tu8;
  428. cpst : Tu8;
  429. rmi : Tu8;
  430. end;
  431. Pdvd_disckey = ^Tdvd_disckey;
  432. Tdvd_disckey = record
  433. _type : Tu8;
  434. flag0 : word;
  435. value : array[0..2047] of Tu8;
  436. end;
  437. const
  438. bm_Tdvd_disckey_agid = $3;
  439. bp_Tdvd_disckey_agid = 0;
  440. function agid(var a : Tdvd_disckey) : dword;
  441. procedure set_agid(var a : Tdvd_disckey; __agid : dword);
  442. type
  443. Pdvd_bca = ^Tdvd_bca;
  444. Tdvd_bca = record
  445. _type : Tu8;
  446. len : longint;
  447. value : array[0..187] of Tu8;
  448. end;
  449. Pdvd_manufact = ^Tdvd_manufact;
  450. Tdvd_manufact = record
  451. _type : Tu8;
  452. layer_num : Tu8;
  453. len : longint;
  454. value : array[0..2047] of Tu8;
  455. end;
  456. Pdvd_struct = ^Tdvd_struct;
  457. Tdvd_struct = record
  458. case longint of
  459. 0 : ( _type : Tu8 );
  460. 1 : ( physical : Tdvd_physical );
  461. 2 : ( copyright : Tdvd_copyright );
  462. 3 : ( disckey : Tdvd_disckey );
  463. 4 : ( bca : Tdvd_bca );
  464. 5 : ( manufact : Tdvd_manufact );
  465. end;
  466. const
  467. DVD_LU_SEND_AGID = 0;
  468. DVD_HOST_SEND_CHALLENGE = 1;
  469. DVD_LU_SEND_KEY1 = 2;
  470. DVD_LU_SEND_CHALLENGE = 3;
  471. DVD_HOST_SEND_KEY2 = 4;
  472. DVD_AUTH_ESTABLISHED = 5;
  473. DVD_AUTH_FAILURE = 6;
  474. DVD_LU_SEND_TITLE_KEY = 7;
  475. DVD_LU_SEND_ASF = 8;
  476. DVD_INVALIDATE_AGID = 9;
  477. DVD_LU_SEND_RPC_STATE = 10;
  478. DVD_HOST_SEND_RPC_STATE = 11;
  479. type
  480. Pdvd_key = ^Tdvd_key;
  481. Tdvd_key = Tu8;
  482. Pdvd_challenge = ^Tdvd_challenge;
  483. Tdvd_challenge = Tu8;
  484. Pdvd_lu_send_agid = ^Tdvd_lu_send_agid;
  485. Tdvd_lu_send_agid = record
  486. _type : Tu8;
  487. flag0 : word;
  488. end;
  489. const
  490. bm_Tdvd_lu_send_agid_agid = $3;
  491. bp_Tdvd_lu_send_agid_agid = 0;
  492. function agid(var a : Tdvd_lu_send_agid) : dword;
  493. procedure set_agid(var a : Tdvd_lu_send_agid; __agid : dword);
  494. type
  495. Pdvd_host_send_challenge = ^Tdvd_host_send_challenge;
  496. Tdvd_host_send_challenge = record
  497. _type : Tu8;
  498. flag0 : word;
  499. chal : Tdvd_challenge;
  500. end;
  501. const
  502. bm_Tdvd_host_send_challenge_agid = $3;
  503. bp_Tdvd_host_send_challenge_agid = 0;
  504. function agid(var a : Tdvd_host_send_challenge) : dword;
  505. procedure set_agid(var a : Tdvd_host_send_challenge; __agid : dword);
  506. type
  507. Pdvd_send_key = ^Tdvd_send_key;
  508. Tdvd_send_key = record
  509. _type : Tu8;
  510. flag0 : word;
  511. key : Tdvd_key;
  512. end;
  513. const
  514. bm_Tdvd_send_key_agid = $3;
  515. bp_Tdvd_send_key_agid = 0;
  516. function agid(var a : Tdvd_send_key) : dword;
  517. procedure set_agid(var a : Tdvd_send_key; __agid : dword);
  518. type
  519. Pdvd_lu_send_challenge = ^Tdvd_lu_send_challenge;
  520. Tdvd_lu_send_challenge = record
  521. _type : Tu8;
  522. flag0 : word;
  523. chal : Tdvd_challenge;
  524. end;
  525. const
  526. bm_Tdvd_lu_send_challenge_agid = $3;
  527. bp_Tdvd_lu_send_challenge_agid = 0;
  528. function agid(var a : Tdvd_lu_send_challenge) : dword;
  529. procedure set_agid(var a : Tdvd_lu_send_challenge; __agid : dword);
  530. const
  531. DVD_CPM_NO_COPYRIGHT = 0;
  532. DVD_CPM_COPYRIGHTED = 1;
  533. DVD_CP_SEC_NONE = 0;
  534. DVD_CP_SEC_EXIST = 1;
  535. DVD_CGMS_UNRESTRICTED = 0;
  536. DVD_CGMS_SINGLE = 2;
  537. DVD_CGMS_RESTRICTED = 3;
  538. type
  539. Pdvd_lu_send_title_key = ^Tdvd_lu_send_title_key;
  540. Tdvd_lu_send_title_key = record
  541. _type : Tu8;
  542. flag0 : word;
  543. title_key : Tdvd_key;
  544. lba : longint;
  545. flag1 : word;
  546. end;
  547. const
  548. bm_Tdvd_lu_send_title_key_agid = $3;
  549. bp_Tdvd_lu_send_title_key_agid = 0;
  550. bm_Tdvd_lu_send_title_key_cpm = $1;
  551. bp_Tdvd_lu_send_title_key_cpm = 0;
  552. bm_Tdvd_lu_send_title_key_cp_sec = $2;
  553. bp_Tdvd_lu_send_title_key_cp_sec = 1;
  554. bm_Tdvd_lu_send_title_key_cgms = $C;
  555. bp_Tdvd_lu_send_title_key_cgms = 2;
  556. function agid(var a : Tdvd_lu_send_title_key) : dword;
  557. procedure set_agid(var a : Tdvd_lu_send_title_key; __agid : dword);
  558. function cpm(var a : Tdvd_lu_send_title_key) : dword;
  559. procedure set_cpm(var a : Tdvd_lu_send_title_key; __cpm : dword);
  560. function cp_sec(var a : Tdvd_lu_send_title_key) : dword;
  561. procedure set_cp_sec(var a : Tdvd_lu_send_title_key; __cp_sec : dword);
  562. function cgms(var a : Tdvd_lu_send_title_key) : dword;
  563. procedure set_cgms(var a : Tdvd_lu_send_title_key; __cgms : dword);
  564. type
  565. Pdvd_lu_send_asf = ^Tdvd_lu_send_asf;
  566. Tdvd_lu_send_asf = record
  567. _type : Tu8;
  568. flag0 : word;
  569. end;
  570. const
  571. bm_Tdvd_lu_send_asf_agid = $3;
  572. bp_Tdvd_lu_send_asf_agid = 0;
  573. bm_Tdvd_lu_send_asf_asf = $4;
  574. bp_Tdvd_lu_send_asf_asf = 2;
  575. function agid(var a : Tdvd_lu_send_asf) : dword;
  576. procedure set_agid(var a : Tdvd_lu_send_asf; __agid : dword);
  577. function asf(var a : Tdvd_lu_send_asf) : dword;
  578. procedure set_asf(var a : Tdvd_lu_send_asf; __asf : dword);
  579. type
  580. Pdvd_host_send_rpcstate = ^Tdvd_host_send_rpcstate;
  581. Tdvd_host_send_rpcstate = record
  582. _type : Tu8;
  583. pdrc : Tu8;
  584. end;
  585. Pdvd_lu_send_rpcstate = ^Tdvd_lu_send_rpcstate;
  586. Tdvd_lu_send_rpcstate = record
  587. flag0 : word;
  588. region_mask : Tu8;
  589. rpc_scheme : Tu8;
  590. end;
  591. const
  592. bm_Tdvd_lu_send_rpcstate_type = $3;
  593. bp_Tdvd_lu_send_rpcstate_type = 0;
  594. bm_Tdvd_lu_send_rpcstate_vra = $1C;
  595. bp_Tdvd_lu_send_rpcstate_vra = 2;
  596. bm_Tdvd_lu_send_rpcstate_ucca = $E0;
  597. bp_Tdvd_lu_send_rpcstate_ucca = 5;
  598. function get_type(var a : Tdvd_lu_send_rpcstate) : Tu8;
  599. procedure set_type(var a : Tdvd_lu_send_rpcstate; __type : Tu8);
  600. function get_vra(var a : Tdvd_lu_send_rpcstate) : Tu8;
  601. procedure set_vra(var a : Tdvd_lu_send_rpcstate; __vra : Tu8);
  602. function ucca(var a : Tdvd_lu_send_rpcstate) : Tu8;
  603. procedure set_ucca(var a : Tdvd_lu_send_rpcstate; __ucca : Tu8);
  604. type
  605. Pdvd_authinfo = ^Tdvd_authinfo;
  606. Tdvd_authinfo = record
  607. case longint of
  608. 0 : ( _type : Tu8 );
  609. 1 : ( lsa : Tdvd_lu_send_agid );
  610. 2 : ( hsc : Tdvd_host_send_challenge );
  611. 3 : ( lsk : Tdvd_send_key );
  612. 4 : ( lsc : Tdvd_lu_send_challenge );
  613. 5 : ( hsk : Tdvd_send_key );
  614. 6 : ( lstk : Tdvd_lu_send_title_key );
  615. 7 : ( lsasf : Tdvd_lu_send_asf );
  616. 8 : ( hrpcs : Tdvd_host_send_rpcstate );
  617. 9 : ( lrpcs : Tdvd_lu_send_rpcstate );
  618. end;
  619. const
  620. bm_Trequest_sense_valid = $1;
  621. bp_Trequest_sense_valid = 0;
  622. bm_Trequest_sense_error_code = $FE;
  623. bp_Trequest_sense_error_code = 1;
  624. bm_Trequest_sense_reserved1 = $3;
  625. bp_Trequest_sense_reserved1 = 0;
  626. bm_Trequest_sense_ili = $4;
  627. bp_Trequest_sense_ili = 2;
  628. bm_Trequest_sense_reserved2 = $8;
  629. bp_Trequest_sense_reserved2 = 3;
  630. bm_Trequest_sense_sense_key = $F0;
  631. bp_Trequest_sense_sense_key = 4;
  632. function valid(var a : Trequest_sense) : Tu8;
  633. procedure set_valid(var a : Trequest_sense; __valid : Tu8);
  634. function error_code(var a : Trequest_sense) : Tu8;
  635. procedure set_error_code(var a : Trequest_sense; __error_code : Tu8);
  636. function reserved1(var a : Trequest_sense) : Tu8;
  637. procedure set_reserved1(var a : Trequest_sense; __reserved1 : Tu8);
  638. function ili(var a : Trequest_sense) : Tu8;
  639. procedure set_ili(var a : Trequest_sense; __ili : Tu8);
  640. function reserved2(var a : Trequest_sense) : Tu8;
  641. procedure set_reserved2(var a : Trequest_sense; __reserved2 : Tu8);
  642. function sense_key(var a : Trequest_sense) : Tu8;
  643. procedure set_sense_key(var a : Trequest_sense; __sense_key : Tu8);
  644. { ---------------------------------------------------------------------
  645. Utility functions
  646. ---------------------------------------------------------------------}
  647. Function IsCDDevice(Device : String) : Boolean;
  648. Function DetectCd : String;
  649. implementation
  650. uses major,sysutils;
  651. { ---------------------------------------------------------------------
  652. Functions from cdrom.h translation.
  653. ---------------------------------------------------------------------}
  654. function cdsc_adr(var a : Tcdrom_subchnl) : Tu8;
  655. begin
  656. cdsc_adr:=(a.flag0 and bm_Tcdrom_subchnl_cdsc_adr) shr bp_Tcdrom_subchnl_cdsc_adr;
  657. end;
  658. procedure set_cdsc_adr(var a : Tcdrom_subchnl; __cdsc_adr : Tu8);
  659. begin
  660. a.flag0:=a.flag0 or ((__cdsc_adr shl bp_Tcdrom_subchnl_cdsc_adr) and bm_Tcdrom_subchnl_cdsc_adr);
  661. end;
  662. function cdsc_ctrl(var a : Tcdrom_subchnl) : Tu8;
  663. begin
  664. cdsc_ctrl:=(a.flag0 and bm_Tcdrom_subchnl_cdsc_ctrl) shr bp_Tcdrom_subchnl_cdsc_ctrl;
  665. end;
  666. procedure set_cdsc_ctrl(var a : Tcdrom_subchnl; __cdsc_ctrl : Tu8);
  667. begin
  668. a.flag0:=a.flag0 or ((__cdsc_ctrl shl bp_Tcdrom_subchnl_cdsc_ctrl) and bm_Tcdrom_subchnl_cdsc_ctrl);
  669. end;
  670. function cdte_adr(var a : Tcdrom_tocentry) : Tu8;
  671. begin
  672. cdte_adr:=(a.flag0 and bm_Tcdrom_tocentry_cdte_adr) shr bp_Tcdrom_tocentry_cdte_adr;
  673. end;
  674. procedure set_cdte_adr(var a : Tcdrom_tocentry; __cdte_adr : Tu8);
  675. begin
  676. a.flag0:=a.flag0 or ((__cdte_adr shl bp_Tcdrom_tocentry_cdte_adr) and bm_Tcdrom_tocentry_cdte_adr);
  677. end;
  678. function cdte_ctrl(var a : Tcdrom_tocentry) : Tu8;
  679. begin
  680. cdte_ctrl:=(a.flag0 and bm_Tcdrom_tocentry_cdte_ctrl) shr bp_Tcdrom_tocentry_cdte_ctrl;
  681. end;
  682. procedure set_cdte_ctrl(var a : Tcdrom_tocentry; __cdte_ctrl : Tu8);
  683. begin
  684. a.flag0:=a.flag0 or ((__cdte_ctrl shl bp_Tcdrom_tocentry_cdte_ctrl) and bm_Tcdrom_tocentry_cdte_ctrl);
  685. end;
  686. { was #define dname def_expr }
  687. function CDSL_NONE : longint;
  688. { return type might be wrong }
  689. begin
  690. CDSL_NONE:=(longint(( not (0)) shr 1)) - 1;
  691. end;
  692. { was #define dname def_expr }
  693. function CDSL_CURRENT : longint;
  694. begin
  695. CDSL_CURRENT:=longint(( not (0)) shr 1);
  696. end;
  697. function book_version(var a : Tdvd_layer) : Tu8;
  698. begin
  699. book_version:=(a.flag0 and bm_Tdvd_layer_book_version) shr bp_Tdvd_layer_book_version;
  700. end;
  701. procedure set_book_version(var a : Tdvd_layer; __book_version : Tu8);
  702. begin
  703. a.flag0:=a.flag0 or ((__book_version shl bp_Tdvd_layer_book_version) and bm_Tdvd_layer_book_version);
  704. end;
  705. function book_type(var a : Tdvd_layer) : Tu8;
  706. begin
  707. book_type:=(a.flag0 and bm_Tdvd_layer_book_type) shr bp_Tdvd_layer_book_type;
  708. end;
  709. procedure set_book_type(var a : Tdvd_layer; __book_type : Tu8);
  710. begin
  711. a.flag0:=a.flag0 or ((__book_type shl bp_Tdvd_layer_book_type) and bm_Tdvd_layer_book_type);
  712. end;
  713. function min_rate(var a : Tdvd_layer) : Tu8;
  714. begin
  715. min_rate:=(a.flag0 and bm_Tdvd_layer_min_rate) shr bp_Tdvd_layer_min_rate;
  716. end;
  717. procedure set_min_rate(var a : Tdvd_layer; __min_rate : Tu8);
  718. begin
  719. a.flag0:=a.flag0 or ((__min_rate shl bp_Tdvd_layer_min_rate) and bm_Tdvd_layer_min_rate);
  720. end;
  721. function disc_size(var a : Tdvd_layer) : Tu8;
  722. begin
  723. disc_size:=(a.flag0 and bm_Tdvd_layer_disc_size) shr bp_Tdvd_layer_disc_size;
  724. end;
  725. procedure set_disc_size(var a : Tdvd_layer; __disc_size : Tu8);
  726. begin
  727. a.flag0:=a.flag0 or ((__disc_size shl bp_Tdvd_layer_disc_size) and bm_Tdvd_layer_disc_size);
  728. end;
  729. function layer_type(var a : Tdvd_layer) : Tu8;
  730. begin
  731. layer_type:=(a.flag0 and bm_Tdvd_layer_layer_type) shr bp_Tdvd_layer_layer_type;
  732. end;
  733. procedure set_layer_type(var a : Tdvd_layer; __layer_type : Tu8);
  734. begin
  735. a.flag0:=a.flag0 or ((__layer_type shl bp_Tdvd_layer_layer_type) and bm_Tdvd_layer_layer_type);
  736. end;
  737. function track_path(var a : Tdvd_layer) : Tu8;
  738. begin
  739. track_path:=(a.flag0 and bm_Tdvd_layer_track_path) shr bp_Tdvd_layer_track_path;
  740. end;
  741. procedure set_track_path(var a : Tdvd_layer; __track_path : Tu8);
  742. begin
  743. a.flag0:=a.flag0 or ((__track_path shl bp_Tdvd_layer_track_path) and bm_Tdvd_layer_track_path);
  744. end;
  745. function nlayers(var a : Tdvd_layer) : Tu8;
  746. begin
  747. nlayers:=(a.flag0 and bm_Tdvd_layer_nlayers) shr bp_Tdvd_layer_nlayers;
  748. end;
  749. procedure set_nlayers(var a : Tdvd_layer; __nlayers : Tu8);
  750. begin
  751. a.flag0:=a.flag0 or ((__nlayers shl bp_Tdvd_layer_nlayers) and bm_Tdvd_layer_nlayers);
  752. end;
  753. function track_density(var a : Tdvd_layer) : Tu8;
  754. begin
  755. track_density:=(a.flag0 and bm_Tdvd_layer_track_density) shr bp_Tdvd_layer_track_density;
  756. end;
  757. procedure set_track_density(var a : Tdvd_layer; __track_density : Tu8);
  758. begin
  759. a.flag0:=a.flag0 or ((__track_density shl bp_Tdvd_layer_track_density) and bm_Tdvd_layer_track_density);
  760. end;
  761. function linear_density(var a : Tdvd_layer) : Tu8;
  762. begin
  763. linear_density:=(a.flag0 and bm_Tdvd_layer_linear_density) shr bp_Tdvd_layer_linear_density;
  764. end;
  765. procedure set_linear_density(var a : Tdvd_layer; __linear_density : Tu8);
  766. begin
  767. a.flag0:=a.flag0 or ((__linear_density shl bp_Tdvd_layer_linear_density) and bm_Tdvd_layer_linear_density);
  768. end;
  769. function bca(var a : Tdvd_layer) : Tu8;
  770. begin
  771. bca:=(a.flag0 and bm_Tdvd_layer_bca) shr bp_Tdvd_layer_bca;
  772. end;
  773. procedure set_bca(var a : Tdvd_layer; __bca : Tu8);
  774. begin
  775. a.flag0:=a.flag0 or ((__bca shl bp_Tdvd_layer_bca) and bm_Tdvd_layer_bca);
  776. end;
  777. function agid(var a : Tdvd_disckey) : dword;
  778. begin
  779. agid:=(a.flag0 and bm_Tdvd_disckey_agid) shr bp_Tdvd_disckey_agid;
  780. end;
  781. procedure set_agid(var a : Tdvd_disckey; __agid : dword);
  782. begin
  783. a.flag0:=a.flag0 or ((__agid shl bp_Tdvd_disckey_agid) and bm_Tdvd_disckey_agid);
  784. end;
  785. function agid(var a : Tdvd_lu_send_agid) : dword;
  786. begin
  787. agid:=(a.flag0 and bm_Tdvd_lu_send_agid_agid) shr bp_Tdvd_lu_send_agid_agid;
  788. end;
  789. procedure set_agid(var a : Tdvd_lu_send_agid; __agid : dword);
  790. begin
  791. a.flag0:=a.flag0 or ((__agid shl bp_Tdvd_lu_send_agid_agid) and bm_Tdvd_lu_send_agid_agid);
  792. end;
  793. function agid(var a : Tdvd_host_send_challenge) : dword;
  794. begin
  795. agid:=(a.flag0 and bm_Tdvd_host_send_challenge_agid) shr bp_Tdvd_host_send_challenge_agid;
  796. end;
  797. procedure set_agid(var a : Tdvd_host_send_challenge; __agid : dword);
  798. begin
  799. a.flag0:=a.flag0 or ((__agid shl bp_Tdvd_host_send_challenge_agid) and bm_Tdvd_host_send_challenge_agid);
  800. end;
  801. function agid(var a : Tdvd_send_key) : dword;
  802. begin
  803. agid:=(a.flag0 and bm_Tdvd_send_key_agid) shr bp_Tdvd_send_key_agid;
  804. end;
  805. procedure set_agid(var a : Tdvd_send_key; __agid : dword);
  806. begin
  807. a.flag0:=a.flag0 or ((__agid shl bp_Tdvd_send_key_agid) and bm_Tdvd_send_key_agid);
  808. end;
  809. function agid(var a : Tdvd_lu_send_challenge) : dword;
  810. begin
  811. agid:=(a.flag0 and bm_Tdvd_lu_send_challenge_agid) shr bp_Tdvd_lu_send_challenge_agid;
  812. end;
  813. procedure set_agid(var a : Tdvd_lu_send_challenge; __agid : dword);
  814. begin
  815. a.flag0:=a.flag0 or ((__agid shl bp_Tdvd_lu_send_challenge_agid) and bm_Tdvd_lu_send_challenge_agid);
  816. end;
  817. function agid(var a : Tdvd_lu_send_title_key) : dword;
  818. begin
  819. agid:=(a.flag0 and bm_Tdvd_lu_send_title_key_agid) shr bp_Tdvd_lu_send_title_key_agid;
  820. end;
  821. procedure set_agid(var a : Tdvd_lu_send_title_key; __agid : dword);
  822. begin
  823. a.flag0:=a.flag0 or ((__agid shl bp_Tdvd_lu_send_title_key_agid) and bm_Tdvd_lu_send_title_key_agid);
  824. end;
  825. function cpm(var a : Tdvd_lu_send_title_key) : dword;
  826. begin
  827. cpm:=(a.flag1 and bm_Tdvd_lu_send_title_key_cpm) shr bp_Tdvd_lu_send_title_key_cpm;
  828. end;
  829. procedure set_cpm(var a : Tdvd_lu_send_title_key; __cpm : dword);
  830. begin
  831. a.flag1:=a.flag1 or ((__cpm shl bp_Tdvd_lu_send_title_key_cpm) and bm_Tdvd_lu_send_title_key_cpm);
  832. end;
  833. function cp_sec(var a : Tdvd_lu_send_title_key) : dword;
  834. begin
  835. cp_sec:=(a.flag1 and bm_Tdvd_lu_send_title_key_cp_sec) shr bp_Tdvd_lu_send_title_key_cp_sec;
  836. end;
  837. procedure set_cp_sec(var a : Tdvd_lu_send_title_key; __cp_sec : dword);
  838. begin
  839. a.flag1:=a.flag1 or ((__cp_sec shl bp_Tdvd_lu_send_title_key_cp_sec) and bm_Tdvd_lu_send_title_key_cp_sec);
  840. end;
  841. function cgms(var a : Tdvd_lu_send_title_key) : dword;
  842. begin
  843. cgms:=(a.flag1 and bm_Tdvd_lu_send_title_key_cgms) shr bp_Tdvd_lu_send_title_key_cgms;
  844. end;
  845. procedure set_cgms(var a : Tdvd_lu_send_title_key; __cgms : dword);
  846. begin
  847. a.flag1:=a.flag1 or ((__cgms shl bp_Tdvd_lu_send_title_key_cgms) and bm_Tdvd_lu_send_title_key_cgms);
  848. end;
  849. function agid(var a : Tdvd_lu_send_asf) : dword;
  850. begin
  851. agid:=(a.flag0 and bm_Tdvd_lu_send_asf_agid) shr bp_Tdvd_lu_send_asf_agid;
  852. end;
  853. procedure set_agid(var a : Tdvd_lu_send_asf; __agid : dword);
  854. begin
  855. a.flag0:=a.flag0 or ((__agid shl bp_Tdvd_lu_send_asf_agid) and bm_Tdvd_lu_send_asf_agid);
  856. end;
  857. function asf(var a : Tdvd_lu_send_asf) : dword;
  858. begin
  859. asf:=(a.flag0 and bm_Tdvd_lu_send_asf_asf) shr bp_Tdvd_lu_send_asf_asf;
  860. end;
  861. procedure set_asf(var a : Tdvd_lu_send_asf; __asf : dword);
  862. begin
  863. a.flag0:=a.flag0 or ((__asf shl bp_Tdvd_lu_send_asf_asf) and bm_Tdvd_lu_send_asf_asf);
  864. end;
  865. function get_type(var a : Tdvd_lu_send_rpcstate) : Tu8;
  866. begin
  867. get_type:=(a.flag0 and bm_Tdvd_lu_send_rpcstate_type) shr bp_Tdvd_lu_send_rpcstate_type;
  868. end;
  869. procedure set_type(var a : Tdvd_lu_send_rpcstate; __type : Tu8);
  870. begin
  871. a.flag0:=a.flag0 or ((__type shl bp_Tdvd_lu_send_rpcstate_type) and bm_Tdvd_lu_send_rpcstate_type);
  872. end;
  873. function get_vra(var a : Tdvd_lu_send_rpcstate) : Tu8;
  874. begin
  875. get_vra:=(a.flag0 and bm_Tdvd_lu_send_rpcstate_vra) shr bp_Tdvd_lu_send_rpcstate_vra;
  876. end;
  877. procedure set_vra(var a : Tdvd_lu_send_rpcstate; __vra : Tu8);
  878. begin
  879. a.flag0:=a.flag0 or ((__vra shl bp_Tdvd_lu_send_rpcstate_vra) and bm_Tdvd_lu_send_rpcstate_vra);
  880. end;
  881. function ucca(var a : Tdvd_lu_send_rpcstate) : Tu8;
  882. begin
  883. ucca:=(a.flag0 and bm_Tdvd_lu_send_rpcstate_ucca) shr bp_Tdvd_lu_send_rpcstate_ucca;
  884. end;
  885. procedure set_ucca(var a : Tdvd_lu_send_rpcstate; __ucca : Tu8);
  886. begin
  887. a.flag0:=a.flag0 or ((__ucca shl bp_Tdvd_lu_send_rpcstate_ucca) and bm_Tdvd_lu_send_rpcstate_ucca);
  888. end;
  889. function valid(var a : Trequest_sense) : Tu8;
  890. begin
  891. valid:=(a.flag0 and bm_Trequest_sense_valid) shr bp_Trequest_sense_valid;
  892. end;
  893. procedure set_valid(var a : Trequest_sense; __valid : Tu8);
  894. begin
  895. a.flag0:=a.flag0 or ((__valid shl bp_Trequest_sense_valid) and bm_Trequest_sense_valid);
  896. end;
  897. function error_code(var a : Trequest_sense) : Tu8;
  898. begin
  899. error_code:=(a.flag0 and bm_Trequest_sense_error_code) shr bp_Trequest_sense_error_code;
  900. end;
  901. procedure set_error_code(var a : Trequest_sense; __error_code : Tu8);
  902. begin
  903. a.flag0:=a.flag0 or ((__error_code shl bp_Trequest_sense_error_code) and bm_Trequest_sense_error_code);
  904. end;
  905. function reserved1(var a : Trequest_sense) : Tu8;
  906. begin
  907. reserved1:=(a.flag1 and bm_Trequest_sense_reserved1) shr bp_Trequest_sense_reserved1;
  908. end;
  909. procedure set_reserved1(var a : Trequest_sense; __reserved1 : Tu8);
  910. begin
  911. a.flag1:=a.flag1 or ((__reserved1 shl bp_Trequest_sense_reserved1) and bm_Trequest_sense_reserved1);
  912. end;
  913. function ili(var a : Trequest_sense) : Tu8;
  914. begin
  915. ili:=(a.flag1 and bm_Trequest_sense_ili) shr bp_Trequest_sense_ili;
  916. end;
  917. procedure set_ili(var a : Trequest_sense; __ili : Tu8);
  918. begin
  919. a.flag1:=a.flag1 or ((__ili shl bp_Trequest_sense_ili) and bm_Trequest_sense_ili);
  920. end;
  921. function reserved2(var a : Trequest_sense) : Tu8;
  922. begin
  923. reserved2:=(a.flag1 and bm_Trequest_sense_reserved2) shr bp_Trequest_sense_reserved2;
  924. end;
  925. procedure set_reserved2(var a : Trequest_sense; __reserved2 : Tu8);
  926. begin
  927. a.flag1:=a.flag1 or ((__reserved2 shl bp_Trequest_sense_reserved2) and bm_Trequest_sense_reserved2);
  928. end;
  929. function sense_key(var a : Trequest_sense) : Tu8;
  930. begin
  931. sense_key:=(a.flag1 and bm_Trequest_sense_sense_key) shr bp_Trequest_sense_sense_key;
  932. end;
  933. procedure set_sense_key(var a : Trequest_sense; __sense_key : Tu8);
  934. begin
  935. a.flag1:=a.flag1 or ((__sense_key shl bp_Trequest_sense_sense_key) and bm_Trequest_sense_sense_key);
  936. end;
  937. { ---------------------------------------------------------------------
  938. Implementation of utility functions.
  939. ---------------------------------------------------------------------}
  940. Const
  941. NrDevices = 14;
  942. Devices : Array[1..NrDevices] of string = (
  943. '/dev/cdrom',
  944. '/dev/cdroms/cdrom?',
  945. '/dev/hd?',
  946. '/dev/sg?',
  947. '/dev/cdu31a',
  948. '/dev/cdu535',
  949. '/dev/sbpcd',
  950. '/dev/sbpcd?',
  951. '/dev/sonycd',
  952. '/dev/mcd',
  953. '/dev/sjcd',
  954. '/dev/cm206cd',
  955. '/dev/gscd',
  956. '/dev/optcd');
  957. Function DetectCD : String;
  958. Var
  959. I,J,L : Integer;
  960. S : String;
  961. begin
  962. Result:='';
  963. I:=0;
  964. While (Result='') and (I<NrDevices) do
  965. begin
  966. Inc(I);
  967. S:=Devices[i];
  968. L:=Length(S);
  969. If S[l]='?' then
  970. begin
  971. S:=Copy(S,1,L-1);
  972. For J:=0 to 3 do
  973. If IsCdDevice(S+Chr(Ord('0')+J)) then
  974. Result:=S+Chr(Ord('0')+J)
  975. else If IsCdDevice(S+Chr(Ord('a')+J)) then
  976. Result:=S+Chr(Ord('a')+J)
  977. end
  978. else
  979. If IsCdDevice(S) then
  980. Result:=S;
  981. end;
  982. end;
  983. Const
  984. IDEMajor = [IDE0_MAJOR,IDE1_MAJOR,IDE2_MAJOR,IDE3_MAJOR];
  985. CDMajor = [CDU31A_CDROM_MAJOR,CDU535_CDROM_MAJOR,
  986. MATSUSHITA_CDROM_MAJOR,MATSUSHITA_CDROM2_MAJOR,
  987. MATSUSHITA_CDROM3_MAJOR,MATSUSHITA_CDROM4_MAJOR,
  988. SANYO_CDROM_MAJOR,
  989. MITSUMI_CDROM_MAJOR,MITSUMI_X_CDROM_MAJOR,
  990. OPTICS_CDROM_MAJOR,AZTECH_CDROM_MAJOR,
  991. GOLDSTAR_CDROM_MAJOR,CM206_CDROM_MAJOR];
  992. Function TestCDRomIOCTL(Device : String) : Boolean;forward;
  993. Function IsCDDevice(Device : String) : Boolean;
  994. Var
  995. Info : stat;
  996. S : String;
  997. DeviceMajor,F : Integer;
  998. begin
  999. {$ifdef debug}
  1000. Writeln('Testing device : ',Device);
  1001. {$endif}
  1002. Result:=False;
  1003. {$ifdef ver1_0}
  1004. If not fstat(device,info) then
  1005. {$else}
  1006. If fpstat(device,info)<>0 then
  1007. {$endif}
  1008. exit;
  1009. if not ({$ifdef ver1_0}S_ISCHR{$else}fpS_ISCHR{$endif}(info.mode) or
  1010. {$Ifdef ver1_0}S_ISBLK{$else}fpS_ISBLK{$endif}(info.mode)) then
  1011. exit;
  1012. S:={$ifdef ver1_0}ReadLink{$else}fpReadLink{$endif}(Device);
  1013. If (S<>'') then
  1014. Device:=S;
  1015. {$ifdef ver1_0}
  1016. If Not FStat(Device,info) then
  1017. {$else}
  1018. If fpStat(Device,info)<>0 then
  1019. {$endif}
  1020. exit;
  1021. DeviceMajor:=info.rdev shr 8;
  1022. If DeviceMajor in [IDE0_MAJOR,IDE1_MAJOR,IDE2_MAJOR,IDE3_MAJOR] then
  1023. Result:=TestCDRomIOCTL(Device)
  1024. else
  1025. begin
  1026. Result:=DeviceMajor in CDMajor;
  1027. If Not Result then
  1028. begin
  1029. // test SCSI
  1030. end
  1031. else
  1032. begin
  1033. F:={$ifdef ver1_0}fdOpen{$else}fpOpen{$endif}(Device,OPEN_RDONLY or OPEN_NONBLOCK);
  1034. Result:=(F>=0);
  1035. If Result then
  1036. {$ifdef ver1_0}fdClose{$else}fpClose{$endif}(F);
  1037. end;
  1038. end;
  1039. end;
  1040. Function TestCDRomIOCTL(Device : String) : Boolean;
  1041. Var
  1042. F : Integer;
  1043. info : Tcdrom_volctrl;
  1044. begin
  1045. {$ifdef debug}
  1046. Writeln('Testing for ATAPI');
  1047. {$endif}
  1048. Result:=False;
  1049. f:={$ifdef ver1_0}fdOpen{$else}fpOpen{$endif}(device,OPEN_RDONLY or OPEN_NONBLOCK);
  1050. If (f<0) then
  1051. exit;
  1052. {$ifdef ver1_0}
  1053. Result:=ioctl(f,CDROMVOLREAD,@info);
  1054. {$else}
  1055. Result:=(fpIOCtl(f,CDROMVOLREAD,@info)=0);
  1056. {$endif}
  1057. {$ifdef ver1_0}fdClose{$else}fpClose{$endif}(f);
  1058. end;
  1059. end.