Imported Upstream version 1.1.11
[platform/upstream/cdrkit.git] / wodim / diskid.c
1 /*
2  * This file has been modified for the cdrkit suite.
3  *
4  * The behaviour and appearence of the program code below can differ to a major
5  * extent from the version distributed by the original author(s).
6  *
7  * For details, see Changelog file distributed with the cdrkit package. If you
8  * received this file from another source then ask the distributing person for
9  * a log of modifications.
10  *
11  */
12
13 /* @(#)diskid.c 1.37 04/03/02 Copyright 1998-2004 J. Schilling */
14 /*
15  *      Disk Idientification Method
16  *
17  *      Copyright (c) 1998-2004 J. Schilling
18  */
19 /*
20  * This program is free software; you can redistribute it and/or modify
21  * it under the terms of the GNU General Public License version 2
22  * as published by the Free Software Foundation.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License along with
30  * this program; see the file COPYING.  If not, write to the Free Software
31  * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
32  */
33
34 #include <mconfig.h>
35
36 #include <stdio.h>
37 #include <standard.h>
38 #include <utypes.h>
39
40 #include "wodim.h"
41
42 void    pr_manufacturer(msf_t *mp, BOOL rw, BOOL audio);
43 static  struct disk_man *man_ptr(msf_t *mp);
44 int     manufacturer_id(msf_t *mp);
45 long    disk_rcap(msf_t *mp, long maxblock, BOOL rw, BOOL audio);
46
47 struct disk_man {
48         msf_t   mi_msf;
49         char    mi_num;
50         char    *mi_name;
51 };
52
53 /*
54  * Illegal (old) Manufacturer.
55  */
56 static  char    m_ill[]   = "Unknown old Manufacturer code";
57 static  char    m_illrw[] = "Illegal Manufacturer code";
58
59 /*
60  * Permanent codes.
61  */
62 static  char    m_kingpro[]     = "King Pro Mediatek Inc.";
63 static  char    m_custpo[]      = "Customer Pressing Oosterhout";
64 static  char    m_taeil[]       = "Taeil Media Co.,Ltd.";
65 static  char    m_doremi[]      = "Doremi Media Co., Ltd.";
66 static  char    m_xcitec[]      = "Xcitec Inc.";
67 static  char    m_leaddata[]    = "Lead Data Inc.";
68 static  char    m_fuji[]        = "FUJI Photo Film Co., Ltd.";
69 static  char    m_hitachi[]     = "Hitachi Maxell, Ltd.";
70 static  char    m_kodakjp[]     = "Kodak Japan Limited";
71 static  char    m_mitsui[]      = "Mitsui Chemicals, Inc.";
72 static  char    m_pioneer[]     = "Pioneer Video Corporation";
73 static  char    m_plasmon[]     = "Plasmon Data systems Ltd.";
74 static  char    m_princo[]      = "Princo Corporation";
75 static  char    m_ricoh[]       = "Ricoh Company Limited";
76 static  char    m_skc[]         = "SKC Co., Ltd.";
77 static  char    m_tyuden[]      = "Taiyo Yuden Company Limited";
78 static  char    m_tdk[]         = "TDK Corporation";
79 static  char    m_mitsubishi[]  = "Mitsubishi Chemical Corporation";
80 static  char    m_auvistar[]    = "Auvistar Industry Co.,Ltd.";
81 static  char    m_gigastore[]   = "GIGASTORAGE CORPORATION";
82 static  char    m_fornet[]      = "FORNET INTERNATIONAL PTE LTD.";
83 static  char    m_cmc[]         = "CMC Magnetics Corporation";
84 static  char    m_odm[]         = "Optical Disc Manufacturing Equipment";
85 static  char    m_ritek[]       = "Ritek Co.";
86
87 /*
88  * Tentative codes.
89  */
90 static  char    m_bestdisk[]    = "Bestdisc Technology Corporation";
91 static  char    m_wealth_fair[] = "WEALTH FAIR INVESTMENT LIMITED";
92 static  char    m_general_mag[] = "General Magnetics Ld";
93 static  char    m_mpo[]         = "MPO";
94 static  char    m_jvc[]         = "VICTOR COMPANY OF JAPAN, LIMITED";
95 static  char    m_vivistar[]    = "VIVASTAR AG";
96 static  char    m_taroko[]      = "TAROKO INTERNATIONAL CO.,LTD.";
97 static  char    m_unidisc[]     = "UNIDISC TECHNOLOGY CO.,LTD";
98 static  char    m_hokodig[]     = "Hong Kong Digital Technology Co., Ltd.";
99 static  char    m_viva[]        = "VIVA MAGNETICS LIMITED";
100 static  char    m_hile[]        = "Hile Optical Disc Technology Corp.";
101 static  char    m_friendly[]    = "Friendly CD-Tek Co.";
102 static  char    m_soundsound[]  = "Sound Sound Multi-Media Development Limited";
103 static  char    m_kdg[]         = "kdg mediatech AG";
104 static  char    m_seantram[]    = "Seantram Technology Inc.";
105 static  char    m_eximpo[]      = "EXIMPO";
106 static  char    m_delphi[]      = "DELPHI TECHNOLOGY INC.";
107 static  char    m_harmonic[]    = "Harmonic Hall Optical Disc Ltd.";
108 static  char    m_guannyinn[]   = "Guann Yinn Co.,Ltd.";
109 static  char    m_optime[]      = "Opti.Me.S. S.p.A.";
110 static  char    m_nacar[]       = "Nacar Media srl";
111 static  char    m_optrom[]      = "OPTROM.INC.";
112 static  char    m_audiodis[]    = "AUDIO DISTRIBUTORS CO., LTD.";
113 static  char    m_acer[]        = "Acer Media Technology, Inc.";
114 static  char    m_woongjin[]    = "Woongjin Media corp";
115 static  char    m_infodisk[]    = "INFODISC Technology Co., Ltd.";
116 static  char    m_unitech[]     = "UNITECH JAPAN INC.";
117 static  char    m_ams[]         = "AMS Technology Inc.";
118 static  char    m_vanguard[]    = "Vanguard Disc Inc.";
119 static  char    m_grandadv[]    = "Grand Advance Technology Ltd.";
120 static  char    m_digitalstor[] = "DIGITAL STORAGE TECHNOLOGY CO.,LTD";
121 static  char    m_matsushita[]  = "Matsushita Electric Industrial Co.,Ltd.";
122 static  char    m_albrechts[]   = "CDA Datenträger Albrechts GmbH.";
123 static  char    m_xalbrechts[]  = "??? CDA Datenträger Albrechts GmbH.";
124
125 static  char    m_prodisc[]     = "Prodisc Technology Inc.";
126 static  char    m_postech[]     = "POSTECH Corporation";
127 #ifdef  used
128 static  char    m_ncolumbia[]   = "NIPPON COLUMBIA CO.,LTD.";
129 #endif
130 static  char    m_odc[]         = "OPTICAL DISC CORPRATION";
131 static  char    m_sony[]        = "SONY Corporation";
132 static  char    m_cis[]         = "CIS Technology Inc.";
133 static  char    m_csitaly[]     = "Computer Support Italy s.r.l.";
134 static  char    m_mmmm[]        = "Multi Media Masters & Machinary SA";
135
136 /*
137  * Guessed codes.
138  */
139 /*static        char    m_seantram[]    = "Seantram Technology Inc.";*/
140 static  char    m_advanced[]    = "Advanced Digital Media";
141 static  char    m_moser[]       = "Moser Baer India Limited";
142 static  char    m_nanya[]       = "NAN-YA Plastics Corporation";
143 static  char    m_shenzen[]     = "SHENZEN SG&GAST DIGITAL OPTICAL DISCS";
144
145 static  struct disk_man notable =
146         {{00, 00, 00},  -1, "unknown (not in table)" };
147
148 /*
149  * Old (illegal) code table. It lists single specific codes (97:xx:yy).
150  */
151 static  struct disk_man odman[] = {
152         /*
153          * Illegal (old) codes.
154          */
155         {{97, 25, 00}, 80, "ILLEGAL OLD CODE: TDK ???" },
156         {{97, 25, 15},  0, m_ill },
157         {{97, 27, 00}, 81, "ILLEGAL OLD CODE: Old Ritek Co.???" },
158         {{97, 27, 25},  0, m_ill },
159         {{97, 30, 00},  0, m_ill },
160         {{97, 33, 00}, 82, "ILLEGAL OLD CODE: Old CDA Datenträger Albrechts GmbH." },
161         {{97, 35, 44},  0, m_ill },
162         {{97, 39, 00},  0, m_ill },
163         {{97, 45, 36}, 83, "ILLEGAL OLD CODE: Old Kodak Photo CD" },
164         {{97, 47, 00},  0, m_ill },
165         {{97, 47, 30},  0, m_ill },
166         {{97, 48, 14},  0, m_ill },
167         {{97, 48, 33},  0, m_ill },
168         {{97, 49, 00},  0, m_ill },
169         {{97, 54, 00},  0, m_ill },
170         {{97, 55, 06},  0, m_ill },
171         {{97, 57, 00},  0, m_ill },
172         /*
173          * List end marker
174          */
175         {{00, 00, 00}, 0, NULL },
176 };
177
178 #define noman   (sizeof (oman)/sizeof (oman[0]))
179
180 /*
181  * Actual code table. It lists code ranges (97:xx:y0 - 97:xx:y9).
182  *
183  * Note that dp->mi_msf.msf_frame needs to be always rounded down
184  * to 0 even for media that has e.g. 97:27/01 in the official table.
185  */
186 static  struct disk_man dman[] = {
187         /*
188          * Permanent codes.
189          */
190
191         {{97, 22, 10}, 53, m_seantram },
192         {{97, 15, 00}, 26, m_tdk },
193         {{97, 49, 30}, 47, m_optime },
194         {{97, 28, 00}, 47, m_optime },
195         {{97, 28, 40}, 36, m_kingpro },
196         {{97, 23, 60}, 49, m_custpo },
197         {{97, 29, 00}, 37, m_taeil },
198         {{97, 26, 10}, 19, m_postech },
199         {{97, 47, 40}, 19, m_postech },
200         {{97, 24, 10}, 24, m_sony },
201 /*      {{97, 46, 10}, 24, m_sony },*/
202         {{97, 23, 10}, 33, m_doremi },
203         {{97, 25, 60}, 30, m_xcitec },
204         {{97, 45, 60}, 30, m_xcitec },
205         {{97, 26, 50}, 10, m_leaddata },
206         {{97, 48, 60}, 10, m_leaddata },
207         {{97, 26, 40},  6, m_fuji },
208         {{97, 46, 40},  6, m_fuji },
209         {{97, 25, 20},  8, m_hitachi },
210         {{97, 47, 10},  8, m_hitachi },
211         {{97, 27, 40},  9, m_kodakjp },
212         {{97, 48, 10},  9, m_kodakjp },
213         {{97, 27, 50}, 12, m_mitsui },
214         {{97, 48, 50}, 12, m_mitsui },
215         {{97, 27, 30}, 17, m_pioneer },
216         {{97, 48, 30}, 17, m_pioneer },
217         {{97, 27, 10}, 18, m_plasmon },
218         {{97, 48, 20}, 18, m_plasmon },
219         {{97, 27, 20}, 20, m_princo },
220         {{97, 47, 20}, 20, m_princo },
221         {{97, 27, 60}, 21, m_ricoh },
222         {{97, 48, 00}, 21, m_ricoh },
223         {{97, 26, 20}, 23, m_skc },
224         {{97, 24, 00}, 25, m_tyuden },
225         {{97, 46, 00}, 25, m_tyuden },
226         {{97, 32, 00}, 26, m_tdk },
227         {{97, 49, 00}, 26, m_tdk },
228         {{97, 34, 20}, 11, m_mitsubishi },
229         {{97, 50, 20}, 11, m_mitsubishi },
230         {{97, 28, 30},  1, m_auvistar },
231         {{97, 46, 50},  1, m_auvistar },
232         {{97, 28, 10},  7, m_gigastore },
233         {{97, 49, 10},  7, m_gigastore },
234         {{97, 26, 00},  5, m_fornet },
235         {{97, 45, 00},  5, m_fornet },
236         {{97, 26, 60},  3, m_cmc },
237         {{97, 46, 60},  3, m_cmc },
238         {{97, 21, 40}, 16, m_odm },
239         {{97, 31, 00}, 22, m_ritek },
240         {{97, 47, 50}, 22, m_ritek },
241         {{97, 28, 20}, 13, m_mmmm },
242         {{97, 46, 20}, 13, m_mmmm },
243         {{97, 32, 10}, 27, m_prodisc },
244
245         /*
246          * Tentative codes.
247          */
248         {{97, 21, 30}, 67, m_bestdisk },
249         {{97, 18, 10}, 66, m_wealth_fair },
250         {{97, 29, 50}, 65, m_general_mag },
251         {{97, 25, 00}, 64, m_mpo },             /* in reality 25/01    */
252         {{97, 49, 40}, 63, m_jvc },
253         {{97, 23, 40}, 63, m_jvc },
254         {{97, 25, 40}, 62, m_vivistar },
255         {{97, 18, 60}, 61, m_taroko },
256         {{97, 29, 20}, 60, m_unidisc },
257         {{97, 46, 10}, 59, m_hokodig },         /* XXX was m_sony */
258         {{97, 22, 50}, 59, m_hokodig },
259         {{97, 29, 40}, 58, m_viva },
260         {{97, 29, 30}, 57, m_hile },
261         {{97, 51, 50}, 57, m_hile },
262         {{97, 28, 60}, 56, m_friendly },
263         {{97, 21, 50}, 55, m_soundsound },
264         {{97, 24, 40}, 54, m_kdg },
265         {{97, 22, 30}, 52, m_eximpo },
266         {{97, 28, 50}, 51, m_delphi },
267         {{97, 29, 00}, 50, m_harmonic },
268         {{97, 15, 10}, 22, m_ritek },
269         {{97, 45, 50}, 48, m_guannyinn },
270         {{97, 24, 50}, 48, m_guannyinn },
271         {{97, 23, 20}, 46, m_nacar },
272         {{97, 23, 50}, 45, m_optrom },
273         {{97, 23, 30}, 44, m_audiodis },
274         {{97, 22, 60}, 43, m_acer },
275         {{97, 45, 20}, 43, m_acer },
276         {{97, 15, 20}, 11, m_mitsubishi },
277         {{97, 22, 00}, 39, m_woongjin },
278         {{97, 25, 30}, 40, m_infodisk },
279         {{97, 51, 20}, 40, m_infodisk },
280         {{97, 24, 30}, 41, m_unitech },
281         {{97, 25, 50}, 42, m_ams },
282         {{97, 29, 10}, 38, m_vanguard },
283         {{97, 50, 10}, 38, m_vanguard },
284         {{97, 16, 30}, 35, m_grandadv },
285         {{97, 31, 30}, 35, m_grandadv },
286         {{97, 51, 10}, 35, m_grandadv },
287         {{97, 49, 20}, 36, m_kingpro },
288         {{97, 27, 00}, 34, m_digitalstor },     /* in reality 27/01    */
289         {{97, 48, 40}, 34, m_digitalstor },     /* XXX was m_ncolumbia */
290         {{97, 23, 00}, 31, m_matsushita },
291         {{97, 49, 60}, 31, m_matsushita },
292         {{97, 30, 10}, 32, m_albrechts },       /* XXX was m_ncolumbia */
293         {{97, 50, 30}, 32, m_albrechts },
294         {{97, 47, 60}, 27, m_prodisc },
295 /*      {{97, 30, 10}, 14, m_ncolumbia },*/
296 /*      {{97, 48, 40}, 14, m_ncolumbia },*/
297         {{97, 26, 30}, 15, m_odc },
298         {{97, 22, 40},  2, m_cis },
299         {{97, 45, 40},  2, m_cis },
300         {{97, 24, 20},  4, m_csitaly },
301         {{97, 46, 30},  4, m_csitaly },
302
303         /*
304          * Guessed codes.
305          */
306         {{97, 20, 10}, 32, m_xalbrechts },                      /* XXX guess */
307 /*      {{97, 23, 40}, 32, m_xalbrechts },*/                    /* Really is JVC */
308
309         /*
310          * New guessed codes (2002 ff.).
311          * Id code >= 68 referres to a new manufacturer.
312          */
313 #define I_GUESS 105
314         {{97, 22, 20}, 68, m_advanced },
315         {{97, 42, 20}, 68, m_advanced },
316         {{97, 24, 60}, 50, m_harmonic },
317         {{97, 17, 00}, 69, m_moser },
318         {{97, 15, 30}, 70, m_nanya },
319         {{97, 16, 20}, 71, m_shenzen },
320         {{97, 45, 10}, 41, m_unitech },
321
322         /*
323          * List end marker
324          */
325         {{00, 00, 00},  0, NULL },
326 };
327
328 #define ndman   (sizeof (dman)/sizeof (dman[0]))
329
330 static struct disk_man *
331 man_ptr(msf_t *mp)
332 {
333         struct disk_man * dp;
334         int     frame;
335         int     type;
336
337         type = mp->msf_frame % 10;
338         frame = mp->msf_frame - type;
339
340         dp = odman;
341         while (dp->mi_msf.msf_min != 0) {
342                 if (mp->msf_min == dp->mi_msf.msf_min &&
343                                 mp->msf_sec == dp->mi_msf.msf_sec &&
344                                 mp->msf_frame == dp->mi_msf.msf_frame) {
345                         return (dp);
346                 }
347                 dp++;
348         }
349         dp = dman;
350         while (dp->mi_msf.msf_min != 0) {
351                 if (mp->msf_min == dp->mi_msf.msf_min &&
352                                 mp->msf_sec == dp->mi_msf.msf_sec &&
353                                 frame == dp->mi_msf.msf_frame) {
354                         /*
355                          * Note that dp->mi_msf.msf_frame is always rounded
356                          * down to 0 even for media that has 97:27/01 in the
357                          * official table.
358                          */
359                         return (dp);
360                 }
361                 dp++;
362         }
363         return (NULL);
364 }
365
366 void pr_manufacturer(msf_t *mp, BOOL rw, BOOL audio)
367 {
368         struct disk_man * dp;
369         struct disk_man xdman;
370         int     type;
371         char    *tname;
372
373 /*      printf("pr_manufacturer rw: %d audio: %d\n", rw, audio);*/
374
375         type = mp->msf_frame % 10;
376         if (type < 5) {
377                 tname = "Long strategy type (Cyanine, AZO or similar)";
378         } else {
379                 tname = "Short strategy type (Phthalocyanine or similar)";
380         }
381         if (rw) {
382                 tname = "Phase change";
383         }
384
385         dp = man_ptr(mp);
386         if (dp != NULL) {
387                 if (dp->mi_num == 0 || dp->mi_num >= 80) {
388                         if (!rw) {
389                                 tname = "unknown dye (old id code)";
390                         } else {
391                                 xdman = *dp;
392                                 dp = &xdman;
393                                 dp->mi_num = 0;
394                                 dp->mi_name = m_illrw;
395                         }
396                 }
397         } else {
398                 tname = "unknown dye (reserved id code)";
399                 dp = &notable;
400         }
401         printf("Disk type:    %s\n", tname);
402         printf("Manuf. index: %d\n", dp->mi_num);
403         printf("Manufacturer: %s\n", dp->mi_name);
404
405         if (mp->msf_min != 97)  /* This may be garbage ATIP from a DVD */
406                 return;
407
408         if (dp >= &dman[I_GUESS] && dp < &dman[ndman]) {
409                 printf("Manufacturer is guessed because of the orange forum embargo.\n");
410                 printf("The orange forum likes to get money for recent information.\n");
411                 printf("The information for this media may not be correct.\n");
412         }
413         if (dp == &notable) {
414                 printf("Manufacturer is unknown because of the orange forum embargo.\n");
415                 printf("As the orange forum likes to get money for recent information,\n");
416                 printf("it may be that this media does not use illegal manufacturer coding.\n");
417         }
418 }
419
420 int manufacturer_id(msf_t *mp)
421 {
422         struct disk_man * dp;
423
424         dp = man_ptr(mp);
425         if (dp != NULL)
426                 return (dp->mi_num);
427         return (-1);
428 }
429
430 struct disk_rcap {
431         msf_t   ci_msf;                         /* Lead in start time       */
432         long    ci_cap;                         /* Lead out start time      */
433         long    ci_rcap;                        /* Abs max lead out start   */
434 };
435
436 static  struct disk_rcap rcap[] = {
437
438 #ifdef  __redbook_only__
439         {{97, 35, 44}, 359849, 404700 },        /*! Unknown 99 min (89:58/00)*/
440 #endif
441         {{97, 35, 44}, 359849, 449700 },        /*! Unknown 99 min (99:58/00) */
442         {{97, 31, 00}, 359849, 368923 },        /*! Arita CD-R 80           */
443         {{97, 26, 50}, 359849, 369096 },        /*! Lead Data CD-R 80       */
444         {{97, 26, 12}, 359849, 368000 },        /*X POSTECH 80 Min          */
445         {{97, 25, 00}, 359849, 374002 },        /* TDK 80 Minuten           */
446         {{97, 20, 14}, 359700, 376386 },        /*! Albrechts DataFile Plus */
447         {{97, 35, 44}, 359100, 368791 },        /*! NoName BC-1 700 Mb/80 Min */
448
449         {{97, 26, 60}, 337350, 349030 },        /* Koch grün CD-R74PRO      */
450         {{97, 26, 50}, 337050, 351205 },        /* Saba                     */
451         {{97, 26, 00}, 337050, 351411 },        /*!DGN (FORNET)             */
452         {{97, 22, 40}, 336631, 349971 },        /* Targa grün CD-R74        */
453         {{97, 26, 50}, 336631, 351727 },        /*! Sunstar (Lead Data)     */
454         {{97, 26, 55}, 336631, 350474 },        /*! NoName ZAP (Lead Data)  */
455
456         {{97, 27, 28}, 336601, 346489 },        /*! BTC CD-R (Princo)       */
457         {{97, 27, 30}, 336601, 351646 },        /*! Pioneer blau CDM-W74S   */
458         {{97, 27, 31}, 336601, 351379 },        /* Pioneer blau CDM-W74S    */
459         {{97, 27, 33}, 336601, 347029 },        /*! Pioneer braun CDM-V74S  */
460         {{97, 26, 40}, 336225, 346210 },        /* Fuji Silver Disk         */
461         {{97, 28, 10}, 336225, 348757 },        /*!GigaStorage Cursor CD-R  */
462         {{97, 31, 00}, 336225, 345460 },        /* Arita grün               */
463         {{97, 25, 28}, 336075, 352879 },        /* Maxell gold CD-R74G      */
464         {{97, 24, 01}, 336075, 346856 },        /*!Philips Premium Silver   */
465         {{97, 24, 00}, 336075, 346741 },        /* Philips grün CD-R74      */
466
467         {{97, 22, 41}, 335206, 349385 },        /* Octek grün               */
468         {{97, 34, 20}, 335100, 342460 },        /* Verbatim DataLifePlus    */
469         {{97, 33, 00}, 335100, 344634 },        /*!ITS Singapore (braun/grün) */
470         {{97, 32, 19}, 335100, 343921 },        /*!Prodisc silber/silber    */
471         {{97, 25, 21}, 335100, 346013 },        /* Maxell grün CD-R74XL     */
472         {{97, 27, 00}, 335100, 353448 },        /* TDK grün CD-RXG74        */
473         {{97, 27, 31}, 335100, 351862 },        /*!Maxell CD-R74MU (Musik)  */
474         {{97, 27, 33}, 335100, 351336 },        /* Pioneer RDD-74A          */
475
476         {{97, 26, 60}, 334259, 349036 },        /* BASF grün                */
477         {{97, 28, 21}, 333976, 348217 },        /*! Noname-B (MMMM)         */
478         {{97, 28, 20}, 333976, 346485 },        /* Koch  grün  CD-R74 PRO   */
479         {{97, 32, 00}, 333975, 345736 },        /* Imation 3M               */
480         {{97, 32, 00}, 333975, 348835 },        /* TDK Reflex X     CD-R74  */
481         {{97, 30, 18}, 333899, 344857 },        /* HiSpace  grün            */
482         {{97, 27, 66}, 333750, 352726 },        /*!Philips Megalife (Musik) */
483         {{97, 28, 43}, 333750, 345344 },        /*!MMore CD-R               */
484         {{97, 27, 65}, 333750, 348343 },        /* Ricoh gold               */
485
486         {{97, 27, 00}, 333750, 336246 },        /* BestMedia grün   CD-R74  */
487         {{97, 27, 28}, 333491, 347473 },        /* Fuji grün (alt)          */
488         {{97, 24, 48}, 333491, 343519 },        /* BASF (alt)               */
489         {{97, 27, 55}, 333235, 343270 },        /* Teac gold CD-R74         */
490         {{97, 27, 45}, 333226, 343358 },        /* Kodak gold               */
491         {{97, 28, 20}, 333226, 346483 },        /* SAST grün                */
492         {{97, 27, 45}, 333226, 343357 },        /* Mitsumi gold             */
493         {{97, 28, 25}, 333226, 346481 },        /* Cedar Grün               */
494         {{97, 23, 00}, 333226, 346206 },        /* Fuji grün (alt)          */
495         {{97, 33, 00}, 333225, 349623 },        /* DataFile Albrechts       */
496         {{97, 24, 24}, 333198, 342536 },        /*!SUN CD Recordable        */
497
498         {{97, 27, 19}, 332850, 348442 },        /* Plasmon gold PCD-R74     */
499         {{97, 32, 00}, 96600,  106502 },        /* TDK 80mm (for music only) */
500
501         /*
502          * List end marker
503          */
504         {{00, 00, 00}, 0L, 0L },
505 };
506
507 long 
508 disk_rcap(msf_t *mp, long maxblock, BOOL rw, BOOL audio)
509 {
510         struct disk_rcap * dp;
511
512         dp = rcap;
513         while (dp->ci_msf.msf_min != 0) {
514                 if (mp->msf_min == dp->ci_msf.msf_min &&
515                                 mp->msf_sec == dp->ci_msf.msf_sec &&
516                                 mp->msf_frame == dp->ci_msf.msf_frame &&
517                                 maxblock == dp->ci_cap)
518                         return (dp->ci_rcap);
519                 dp++;
520         }
521         return (0L);
522 }