~ubuntu-branches/debian/lenny/fpc/lenny

« back to all changes in this revision

Viewing changes to fpcsrc/packages/extra/cdrom/lincd.pp

  • Committer: Bazaar Package Importer
  • Author(s): Mazen Neifer, Torsten Werner, Mazen Neifer
  • Date: 2008-05-17 17:12:11 UTC
  • mfrom: (3.1.9 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080517171211-9qi33xhd9evfa0kg
Tags: 2.2.0-dfsg1-9
[ Torsten Werner ]
* Add Mazen Neifer to Uploaders field.

[ Mazen Neifer ]
* Moved FPC sources into a version dependent directory from /usr/share/fpcsrc
  to /usr/share/fpcsrc/${FPCVERSION}. This allow installing more than on FPC
  release.
* Fixed far call issue in compiler preventing building huge binearies.
  (closes: #477743)
* Updated building dependencies, recomennded and suggested packages.
* Moved fppkg to fp-utils as it is just a helper tool and is not required by
  compiler.

Show diffs side-by-side

added added

removed removed

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