1*cdf0e10cSrcweir#*************************************************************************
2*cdf0e10cSrcweir#
3*cdf0e10cSrcweir# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir#
5*cdf0e10cSrcweir# Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir#
7*cdf0e10cSrcweir# OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir#
9*cdf0e10cSrcweir# This file is part of OpenOffice.org.
10*cdf0e10cSrcweir#
11*cdf0e10cSrcweir# OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir# it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir# only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir#
15*cdf0e10cSrcweir# OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir# but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir# GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir# (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir#
21*cdf0e10cSrcweir# You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir# version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir# <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir# for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir#
26*cdf0e10cSrcweir#*************************************************************************
27*cdf0e10cSrcweir
28*cdf0e10cSrcweirpackage installer::windows::media;
29*cdf0e10cSrcweir
30*cdf0e10cSrcweiruse installer::exiter;
31*cdf0e10cSrcweiruse installer::files;
32*cdf0e10cSrcweiruse installer::globals;
33*cdf0e10cSrcweiruse installer::windows::idtglobal;
34*cdf0e10cSrcweir
35*cdf0e10cSrcweir##############################################################
36*cdf0e10cSrcweir# Returning the diskid for the media table.
37*cdf0e10cSrcweir##############################################################
38*cdf0e10cSrcweir
39*cdf0e10cSrcweirsub get_media_diskid
40*cdf0e10cSrcweir{
41*cdf0e10cSrcweir	my ($id) = @_;
42*cdf0e10cSrcweir
43*cdf0e10cSrcweir	return $id;
44*cdf0e10cSrcweir}
45*cdf0e10cSrcweir
46*cdf0e10cSrcweir##############################################################
47*cdf0e10cSrcweir# Returning the lastsequence for the media table.
48*cdf0e10cSrcweir##############################################################
49*cdf0e10cSrcweir
50*cdf0e10cSrcweirsub get_media_lastsequence
51*cdf0e10cSrcweir{
52*cdf0e10cSrcweir	my ($fileref) = @_;
53*cdf0e10cSrcweir
54*cdf0e10cSrcweir	return $fileref->{'sequencenumber'};
55*cdf0e10cSrcweir}
56*cdf0e10cSrcweir
57*cdf0e10cSrcweir##############################################################
58*cdf0e10cSrcweir# Returning the diskprompt for the media table.
59*cdf0e10cSrcweir##############################################################
60*cdf0e10cSrcweir
61*cdf0e10cSrcweirsub get_media_diskprompt
62*cdf0e10cSrcweir{
63*cdf0e10cSrcweir	return 1;
64*cdf0e10cSrcweir}
65*cdf0e10cSrcweir
66*cdf0e10cSrcweir##############################################################
67*cdf0e10cSrcweir# Returning the cabinet file name for the media table.
68*cdf0e10cSrcweir##############################################################
69*cdf0e10cSrcweir
70*cdf0e10cSrcweirsub get_media_cabinet
71*cdf0e10cSrcweir{
72*cdf0e10cSrcweir	my ($id) = @_;
73*cdf0e10cSrcweir
74*cdf0e10cSrcweir	my $number = 1000 + $id;
75*cdf0e10cSrcweir	my $filename = "f_" . $number . ".cab";
76*cdf0e10cSrcweir
77*cdf0e10cSrcweir	if ( $installer::globals::include_cab_in_msi ) { $filename = "\#" . $filename; }
78*cdf0e10cSrcweir
79*cdf0e10cSrcweir	return $filename;
80*cdf0e10cSrcweir}
81*cdf0e10cSrcweir
82*cdf0e10cSrcweir##############################################################
83*cdf0e10cSrcweir# Returning the volumelabel for the media table.
84*cdf0e10cSrcweir##############################################################
85*cdf0e10cSrcweir
86*cdf0e10cSrcweirsub get_media_volumelabel
87*cdf0e10cSrcweir{
88*cdf0e10cSrcweir	return "DISK1";
89*cdf0e10cSrcweir}
90*cdf0e10cSrcweir
91*cdf0e10cSrcweir##############################################################
92*cdf0e10cSrcweir# Returning the source for the media table.
93*cdf0e10cSrcweir##############################################################
94*cdf0e10cSrcweir
95*cdf0e10cSrcweirsub get_media_source
96*cdf0e10cSrcweir{
97*cdf0e10cSrcweir	return "";
98*cdf0e10cSrcweir}
99*cdf0e10cSrcweir
100*cdf0e10cSrcweir##############################################################
101*cdf0e10cSrcweir# Saving the cabinet file name in the files collector.
102*cdf0e10cSrcweir# This is useful for making a list to connect the
103*cdf0e10cSrcweir# source of each file with the destination cabinet file.
104*cdf0e10cSrcweir##############################################################
105*cdf0e10cSrcweir
106*cdf0e10cSrcweirsub set_cabinetfilename_for_component_in_file_collector
107*cdf0e10cSrcweir{
108*cdf0e10cSrcweir	my ($cabinetfilename, $filesref, $componentname, $max) = @_;
109*cdf0e10cSrcweir
110*cdf0e10cSrcweir	for ( my $i = 0; $i <= $max; $i++ )
111*cdf0e10cSrcweir	{
112*cdf0e10cSrcweir		my $onefile = ${$filesref}[$i];
113*cdf0e10cSrcweir		my $component = $onefile->{'componentname'};
114*cdf0e10cSrcweir
115*cdf0e10cSrcweir		if ( $component eq $componentname )
116*cdf0e10cSrcweir		{
117*cdf0e10cSrcweir			my $cabinet = "";
118*cdf0e10cSrcweir
119*cdf0e10cSrcweir			if ( $onefile->{'cabinet'} ) { $cabinet = $onefile->{'cabinet'}; }
120*cdf0e10cSrcweir
121*cdf0e10cSrcweir			if ( $cabinet eq "" )
122*cdf0e10cSrcweir			{
123*cdf0e10cSrcweir				$onefile->{'cabinet'} = $cabinetfilename;
124*cdf0e10cSrcweir			}
125*cdf0e10cSrcweir		}
126*cdf0e10cSrcweir	}
127*cdf0e10cSrcweir}
128*cdf0e10cSrcweir
129*cdf0e10cSrcweir#################################################
130*cdf0e10cSrcweir# Creating the cab file name dynamically
131*cdf0e10cSrcweir#################################################
132*cdf0e10cSrcweir
133*cdf0e10cSrcweirsub generate_cab_filename_for_some_cabs
134*cdf0e10cSrcweir{
135*cdf0e10cSrcweir	my ( $allvariables, $id ) = @_;
136*cdf0e10cSrcweir
137*cdf0e10cSrcweir	my $name = $allvariables->{'PRODUCTNAME'};
138*cdf0e10cSrcweir
139*cdf0e10cSrcweir	$name = lc($name);
140*cdf0e10cSrcweir	$name =~ s/\.//g;
141*cdf0e10cSrcweir	$name =~ s/\s//g;
142*cdf0e10cSrcweir
143*cdf0e10cSrcweir	# possibility to overwrite the name with variable CABFILENAME
144*cdf0e10cSrcweir	if ( $allvariables->{'CABFILENAME'} ) { $name = $allvariables->{'CABFILENAME'}; }
145*cdf0e10cSrcweir
146*cdf0e10cSrcweir	$name = $name . $id . ".cab";
147*cdf0e10cSrcweir
148*cdf0e10cSrcweir	if ( $installer::globals::include_cab_in_msi ) { $name = "\#" . $name; }
149*cdf0e10cSrcweir
150*cdf0e10cSrcweir	return $name;
151*cdf0e10cSrcweir}
152*cdf0e10cSrcweir
153*cdf0e10cSrcweir#################################################
154*cdf0e10cSrcweir# Creating the cab file name for cab files
155*cdf0e10cSrcweir# defined in packages.
156*cdf0e10cSrcweir#################################################
157*cdf0e10cSrcweir
158*cdf0e10cSrcweirsub get_cabfilename
159*cdf0e10cSrcweir{
160*cdf0e10cSrcweir	my ($name) = @_;
161*cdf0e10cSrcweir
162*cdf0e10cSrcweir	if ( $installer::globals::include_cab_in_msi ) { $name = "\#" . $name; }
163*cdf0e10cSrcweir
164*cdf0e10cSrcweir	return $name;
165*cdf0e10cSrcweir}
166*cdf0e10cSrcweir
167*cdf0e10cSrcweir#################################################
168*cdf0e10cSrcweir# Creating the cab file name dynamically
169*cdf0e10cSrcweir#################################################
170*cdf0e10cSrcweir
171*cdf0e10cSrcweirsub generate_cab_filename
172*cdf0e10cSrcweir{
173*cdf0e10cSrcweir	my ( $allvariables ) = @_;
174*cdf0e10cSrcweir
175*cdf0e10cSrcweir	my $name = $allvariables->{'PRODUCTNAME'};
176*cdf0e10cSrcweir
177*cdf0e10cSrcweir	$name = lc($name);
178*cdf0e10cSrcweir	$name =~ s/\.//g;
179*cdf0e10cSrcweir	$name =~ s/\s//g;
180*cdf0e10cSrcweir
181*cdf0e10cSrcweir	# possibility to overwrite the name with variable CABFILENAME
182*cdf0e10cSrcweir	if ( $allvariables->{'CABFILENAME'} ) { $name = $allvariables->{'CABFILENAME'}; }
183*cdf0e10cSrcweir
184*cdf0e10cSrcweir	$name = $name . ".cab";
185*cdf0e10cSrcweir
186*cdf0e10cSrcweir	if ( $installer::globals::include_cab_in_msi ) { $name = "\#" . $name; }
187*cdf0e10cSrcweir
188*cdf0e10cSrcweir	return $name;
189*cdf0e10cSrcweir}
190*cdf0e10cSrcweir
191*cdf0e10cSrcweirsub get_maximum_filenumber
192*cdf0e10cSrcweir{
193*cdf0e10cSrcweir	my ($allfiles, $maxcabfilenumber) = @_;
194*cdf0e10cSrcweir
195*cdf0e10cSrcweir	my $maxfile = 0;
196*cdf0e10cSrcweir
197*cdf0e10cSrcweir	while ( ! ( $allfiles%$maxcabfilenumber == 0 ))
198*cdf0e10cSrcweir	{
199*cdf0e10cSrcweir		$allfiles++;
200*cdf0e10cSrcweir	}
201*cdf0e10cSrcweir
202*cdf0e10cSrcweir	$maxfile = $allfiles / $maxcabfilenumber;
203*cdf0e10cSrcweir
204*cdf0e10cSrcweir	$maxfile++;					# for securitry
205*cdf0e10cSrcweir
206*cdf0e10cSrcweir	return $maxfile;
207*cdf0e10cSrcweir}
208*cdf0e10cSrcweir
209*cdf0e10cSrcweir#################################################################################
210*cdf0e10cSrcweir# Setting the last sequence for the cabinet files
211*cdf0e10cSrcweir#################################################################################
212*cdf0e10cSrcweir
213*cdf0e10cSrcweirsub get_last_sequence
214*cdf0e10cSrcweir{
215*cdf0e10cSrcweir	my ( $cabfilename, $alludpatelastsequences ) = @_;
216*cdf0e10cSrcweir
217*cdf0e10cSrcweir	my $sequence = 0;
218*cdf0e10cSrcweir
219*cdf0e10cSrcweir	if (( $installer::globals::updatedatabase ) && ( exists($alludpatelastsequences->{$cabfilename}) ))
220*cdf0e10cSrcweir	{
221*cdf0e10cSrcweir		$sequence = $alludpatelastsequences->{$cabfilename};
222*cdf0e10cSrcweir	}
223*cdf0e10cSrcweir	else
224*cdf0e10cSrcweir	{
225*cdf0e10cSrcweir		$sequence = $installer::globals::lastsequence{$cabfilename};
226*cdf0e10cSrcweir	}
227*cdf0e10cSrcweir
228*cdf0e10cSrcweir	return $sequence;
229*cdf0e10cSrcweir}
230*cdf0e10cSrcweir
231*cdf0e10cSrcweir#################################################################################
232*cdf0e10cSrcweir# Creating the file Media.idt dynamically
233*cdf0e10cSrcweir# Content:
234*cdf0e10cSrcweir# DiskId LastSequence DiskPrompt Cabinet VolumeLabel Source
235*cdf0e10cSrcweir# Idea: Every component is packed into each own cab file
236*cdf0e10cSrcweir#################################################################################
237*cdf0e10cSrcweir
238*cdf0e10cSrcweirsub create_media_table
239*cdf0e10cSrcweir{
240*cdf0e10cSrcweir	my ($filesref, $basedir, $allvariables, $alludpatelastsequences, $allupdatediskids) = @_;
241*cdf0e10cSrcweir
242*cdf0e10cSrcweir	my @mediatable = ();
243*cdf0e10cSrcweir
244*cdf0e10cSrcweir	my $diskid = 0;
245*cdf0e10cSrcweir
246*cdf0e10cSrcweir	installer::windows::idtglobal::write_idt_header(\@mediatable, "media");
247*cdf0e10cSrcweir
248*cdf0e10cSrcweir	if ( $allvariables->{'INCLUDE_CAB_IN_MSI'} ) { $installer::globals::include_cab_in_msi = 1; }
249*cdf0e10cSrcweir
250*cdf0e10cSrcweir	if ( $installer::globals::use_packages_for_cabs )
251*cdf0e10cSrcweir	{
252*cdf0e10cSrcweir		my $cabfile;
253*cdf0e10cSrcweir		foreach $cabfile ( sort keys %installer::globals::lastsequence )
254*cdf0e10cSrcweir		{
255*cdf0e10cSrcweir			my %media = ();
256*cdf0e10cSrcweir			$diskid++;
257*cdf0e10cSrcweir
258*cdf0e10cSrcweir			$media{'DiskId'} = get_media_diskid($diskid);
259*cdf0e10cSrcweir			$media{'LastSequence'} = get_last_sequence($cabfile, $alludpatelastsequences);
260*cdf0e10cSrcweir			$media{'DiskPrompt'} = get_media_diskprompt();
261*cdf0e10cSrcweir			$media{'Cabinet'} = get_cabfilename($cabfile);
262*cdf0e10cSrcweir			$media{'VolumeLabel'} = get_media_volumelabel();
263*cdf0e10cSrcweir			$media{'Source'} = get_media_source();
264*cdf0e10cSrcweir
265*cdf0e10cSrcweir			my $oneline = $media{'DiskId'} . "\t" . $media{'LastSequence'} . "\t" . $media{'DiskPrompt'} . "\t"
266*cdf0e10cSrcweir						. $media{'Cabinet'} . "\t" . $media{'VolumeLabel'} . "\t" . $media{'Source'} . "\n";
267*cdf0e10cSrcweir
268*cdf0e10cSrcweir			push(@mediatable, $oneline);
269*cdf0e10cSrcweir
270*cdf0e10cSrcweir			# Comparing the disk id with the disk id from update database. Both have to be identical. New files have to be added
271*cdf0e10cSrcweir			# to the new pff cabinet file. And existing cab files must not be removed.
272*cdf0e10cSrcweir			if ( $installer::globals::updatedatabase )
273*cdf0e10cSrcweir			{
274*cdf0e10cSrcweir				# Comparing lines in new media table with line from media table in udpate database.
275*cdf0e10cSrcweir				if ( exists($allupdatediskids->{$media{'Cabinet'}}) )
276*cdf0e10cSrcweir				{
277*cdf0e10cSrcweir					if ( $media{'DiskId'} != $allupdatediskids->{$media{'Cabinet'}} )
278*cdf0e10cSrcweir					{
279*cdf0e10cSrcweir						installer::exiter::exit_program("ERROR: Different DiskIDs for cab file \"$media{'Cabinet'}\".\nCurrent installation set: \"$media{'DiskId'}\", but update database used \"$allupdatediskids->{$media{'Cabinet'}}\".\nWere cabinet files removed or added?", "create_media_table");
280*cdf0e10cSrcweir					}
281*cdf0e10cSrcweir				}
282*cdf0e10cSrcweir				else
283*cdf0e10cSrcweir				{
284*cdf0e10cSrcweir					my $localinfoline = "Warning: Could not find cabinet file \"$media{'Cabinet'}}\" in update database. This seems to be an new cabinet file!?\n";
285*cdf0e10cSrcweir					push(@installer::globals::logfileinfo, $localinfoline);
286*cdf0e10cSrcweir				}
287*cdf0e10cSrcweir			}
288*cdf0e10cSrcweir		}
289*cdf0e10cSrcweir
290*cdf0e10cSrcweir		# one new cabinet file for all files added after the final release
291*cdf0e10cSrcweir		if (( $installer::globals::updatedatabase ) && ( $installer::globals::pfffileexists ))
292*cdf0e10cSrcweir		{
293*cdf0e10cSrcweir			my %media = ();
294*cdf0e10cSrcweir			$diskid++;
295*cdf0e10cSrcweir
296*cdf0e10cSrcweir			$media{'DiskId'} = get_media_diskid($diskid) + $installer::globals::mergemodulenumber;  # Adding mergemodulenumber, because this files are included later
297*cdf0e10cSrcweir			$media{'LastSequence'} = $installer::globals::updatesequencecounter;
298*cdf0e10cSrcweir			$media{'DiskPrompt'} = get_media_diskprompt();
299*cdf0e10cSrcweir			$media{'Cabinet'} = get_cabfilename($installer::globals::pffcabfilename);
300*cdf0e10cSrcweir			$media{'VolumeLabel'} = get_media_volumelabel();
301*cdf0e10cSrcweir			$media{'Source'} = get_media_source();
302*cdf0e10cSrcweir
303*cdf0e10cSrcweir			my $oneline = $media{'DiskId'} . "\t" . $media{'LastSequence'} . "\t" . $media{'DiskPrompt'} . "\t"
304*cdf0e10cSrcweir						. $media{'Cabinet'} . "\t" . $media{'VolumeLabel'} . "\t" . $media{'Source'} . "\n";
305*cdf0e10cSrcweir
306*cdf0e10cSrcweir			push(@mediatable, $oneline);
307*cdf0e10cSrcweir		}
308*cdf0e10cSrcweir
309*cdf0e10cSrcweir	}
310*cdf0e10cSrcweir	elsif ( $installer::globals::cab_file_per_component )
311*cdf0e10cSrcweir	{
312*cdf0e10cSrcweir		for ( my $i = 0; $i <= $#{$filesref}; $i++ )
313*cdf0e10cSrcweir		{
314*cdf0e10cSrcweir			my $onefile = ${$filesref}[$i];
315*cdf0e10cSrcweir			my $nextfile = ${$filesref}[$i+1];
316*cdf0e10cSrcweir
317*cdf0e10cSrcweir			my $filecomponent = "";
318*cdf0e10cSrcweir			my $nextcomponent = "";
319*cdf0e10cSrcweir
320*cdf0e10cSrcweir			if ( $onefile->{'componentname'} ) { $filecomponent = $onefile->{'componentname'}; }
321*cdf0e10cSrcweir			if ( $nextfile->{'componentname'} ) { $nextcomponent = $nextfile->{'componentname'}; }
322*cdf0e10cSrcweir
323*cdf0e10cSrcweir			if ( $filecomponent eq $nextcomponent )
324*cdf0e10cSrcweir			{
325*cdf0e10cSrcweir				next;		# nothing to do, this is not the last file of a component
326*cdf0e10cSrcweir			}
327*cdf0e10cSrcweir
328*cdf0e10cSrcweir			my %media = ();
329*cdf0e10cSrcweir			$diskid++;
330*cdf0e10cSrcweir
331*cdf0e10cSrcweir			$media{'DiskId'} = get_media_diskid($diskid);
332*cdf0e10cSrcweir			$media{'LastSequence'} = get_media_lastsequence($onefile);
333*cdf0e10cSrcweir			$media{'DiskPrompt'} = get_media_diskprompt();
334*cdf0e10cSrcweir			$media{'Cabinet'} = get_media_cabinet($diskid);
335*cdf0e10cSrcweir			$media{'VolumeLabel'} = get_media_volumelabel();
336*cdf0e10cSrcweir			$media{'Source'} = get_media_source();
337*cdf0e10cSrcweir
338*cdf0e10cSrcweir			my $oneline = $media{'DiskId'} . "\t" . $media{'LastSequence'} . "\t" . $media{'DiskPrompt'} . "\t"
339*cdf0e10cSrcweir					. $media{'Cabinet'} . "\t" . $media{'VolumeLabel'} . "\t" . $media{'Source'} . "\n";
340*cdf0e10cSrcweir
341*cdf0e10cSrcweir			push(@mediatable, $oneline);
342*cdf0e10cSrcweir
343*cdf0e10cSrcweir			$media{'Cabinet'} =~ s/^\s*\#//;	# removing leading hash
344*cdf0e10cSrcweir			set_cabinetfilename_for_component_in_file_collector($media{'Cabinet'}, $filesref, $filecomponent, $i);
345*cdf0e10cSrcweir		}
346*cdf0e10cSrcweir	}
347*cdf0e10cSrcweir	elsif ( $installer::globals::fix_number_of_cab_files )
348*cdf0e10cSrcweir	{
349*cdf0e10cSrcweir		# number of cabfiles
350*cdf0e10cSrcweir		my $maxcabfilenumber = $installer::globals::number_of_cabfiles;
351*cdf0e10cSrcweir		if ( $allvariables->{'CABFILENUMBER'} ) { $maxcabfilenumber = $allvariables->{'CABFILENUMBER'}; }
352*cdf0e10cSrcweir		my $allfiles = $#{$filesref} + 1;
353*cdf0e10cSrcweir		my $maxfilenumber = get_maximum_filenumber($allfiles, $maxcabfilenumber);
354*cdf0e10cSrcweir		# my $maxfilenumber = 1000;	# maximum 1000 files in each cabinet file
355*cdf0e10cSrcweir		my $cabfilenumber = 0;
356*cdf0e10cSrcweir		my $cabfull = 0;
357*cdf0e10cSrcweir		my $counter = 0;
358*cdf0e10cSrcweir
359*cdf0e10cSrcweir		# Sorting of files collector files required !
360*cdf0e10cSrcweir		# Attention: The order in the cab file is not guaranteed (especially in udpate process)
361*cdf0e10cSrcweir
362*cdf0e10cSrcweir		for ( my $i = 0; $i <= $#{$filesref}; $i++ )
363*cdf0e10cSrcweir		{
364*cdf0e10cSrcweir			if (( $counter >= $maxfilenumber ) || ( $i == $#{$filesref} )) { $cabfull = 1; }
365*cdf0e10cSrcweir
366*cdf0e10cSrcweir			$counter++; 	 # counting the files in the cab file
367*cdf0e10cSrcweir
368*cdf0e10cSrcweir			my $onefile = ${$filesref}[$i];
369*cdf0e10cSrcweir			my $nextfile = ${$filesref}[$i+1];
370*cdf0e10cSrcweir
371*cdf0e10cSrcweir			my $filecomponent = "";
372*cdf0e10cSrcweir			my $nextcomponent = "";
373*cdf0e10cSrcweir
374*cdf0e10cSrcweir			if ( $onefile->{'componentname'} ) { $filecomponent = $onefile->{'componentname'}; }
375*cdf0e10cSrcweir			if ( $nextfile->{'componentname'} ) { $nextcomponent = $nextfile->{'componentname'}; }
376*cdf0e10cSrcweir
377*cdf0e10cSrcweir			if ( $filecomponent eq $nextcomponent )	# all files of one component have to be in one cab file
378*cdf0e10cSrcweir			{
379*cdf0e10cSrcweir				next;		# nothing to do, this is not the last file of a component
380*cdf0e10cSrcweir			}
381*cdf0e10cSrcweir
382*cdf0e10cSrcweir			if ( $cabfull )
383*cdf0e10cSrcweir			{
384*cdf0e10cSrcweir				my %media = ();
385*cdf0e10cSrcweir				$cabfilenumber++;
386*cdf0e10cSrcweir
387*cdf0e10cSrcweir				$media{'DiskId'} = get_media_diskid($cabfilenumber);
388*cdf0e10cSrcweir				# $media{'LastSequence'} = get_media_lastsequence($onefile);
389*cdf0e10cSrcweir				$media{'LastSequence'} = $i + 1;	# This should be correct, also for unsorted files collectors
390*cdf0e10cSrcweir				$media{'DiskPrompt'} = get_media_diskprompt();
391*cdf0e10cSrcweir				$media{'Cabinet'} = generate_cab_filename_for_some_cabs($allvariables, $cabfilenumber);
392*cdf0e10cSrcweir				$media{'VolumeLabel'} = get_media_volumelabel();
393*cdf0e10cSrcweir				$media{'Source'} = get_media_source();
394*cdf0e10cSrcweir
395*cdf0e10cSrcweir				my $oneline = $media{'DiskId'} . "\t" . $media{'LastSequence'} . "\t" . $media{'DiskPrompt'} . "\t"
396*cdf0e10cSrcweir						. $media{'Cabinet'} . "\t" . $media{'VolumeLabel'} . "\t" . $media{'Source'} . "\n";
397*cdf0e10cSrcweir
398*cdf0e10cSrcweir				push(@mediatable, $oneline);
399*cdf0e10cSrcweir
400*cdf0e10cSrcweir				# Saving the cabinet file name in the file collector
401*cdf0e10cSrcweir
402*cdf0e10cSrcweir				$media{'Cabinet'} =~ s/^\s*\#//;	# removing leading hash
403*cdf0e10cSrcweir
404*cdf0e10cSrcweir				for ( my $j = 0; $j <= $i; $j++ )
405*cdf0e10cSrcweir				{
406*cdf0e10cSrcweir					my $onefile = ${$filesref}[$j];
407*cdf0e10cSrcweir					if ( ! $onefile->{'cabinet'} ) { $onefile->{'cabinet'} = $media{'Cabinet'}; }
408*cdf0e10cSrcweir				}
409*cdf0e10cSrcweir
410*cdf0e10cSrcweir				$cabfull = 0;
411*cdf0e10cSrcweir				$counter = 0;
412*cdf0e10cSrcweir			}
413*cdf0e10cSrcweir		}
414*cdf0e10cSrcweir	}
415*cdf0e10cSrcweir	elsif ( $installer::globals::one_cab_file )
416*cdf0e10cSrcweir	{
417*cdf0e10cSrcweir		my %media = ();
418*cdf0e10cSrcweir		$diskid++;
419*cdf0e10cSrcweir
420*cdf0e10cSrcweir		my $maximumfile = $#{$filesref};
421*cdf0e10cSrcweir
422*cdf0e10cSrcweir		$media{'DiskId'} = get_media_diskid($diskid);
423*cdf0e10cSrcweir		# $media{'LastSequence'} = ${$filesref}[$maximumfile]->{'sequencenumber'};	# sequence number of the last file
424*cdf0e10cSrcweir		$media{'LastSequence'} = $maximumfile + 1; # This works also for unsorted file collector
425*cdf0e10cSrcweir		$media{'DiskPrompt'} = get_media_diskprompt();
426*cdf0e10cSrcweir		$media{'Cabinet'} = generate_cab_filename($allvariables);
427*cdf0e10cSrcweir		$media{'VolumeLabel'} = get_media_volumelabel();
428*cdf0e10cSrcweir		$media{'Source'} = get_media_source();
429*cdf0e10cSrcweir
430*cdf0e10cSrcweir		my $oneline = $media{'DiskId'} . "\t" . $media{'LastSequence'} . "\t" . $media{'DiskPrompt'} . "\t"
431*cdf0e10cSrcweir					. $media{'Cabinet'} . "\t" . $media{'VolumeLabel'} . "\t" . $media{'Source'} . "\n";
432*cdf0e10cSrcweir
433*cdf0e10cSrcweir		push(@mediatable, $oneline);
434*cdf0e10cSrcweir
435*cdf0e10cSrcweir		# Saving the cabinet file name in the file collector
436*cdf0e10cSrcweir
437*cdf0e10cSrcweir		$media{'Cabinet'} =~ s/^\s*\#//;	# removing leading hash
438*cdf0e10cSrcweir
439*cdf0e10cSrcweir		for ( my $i = 0; $i <= $#{$filesref}; $i++ )
440*cdf0e10cSrcweir		{
441*cdf0e10cSrcweir			my $onefile = ${$filesref}[$i];
442*cdf0e10cSrcweir			$onefile->{'cabinet'} = $media{'Cabinet'};
443*cdf0e10cSrcweir		}
444*cdf0e10cSrcweir	}
445*cdf0e10cSrcweir	else
446*cdf0e10cSrcweir	{
447*cdf0e10cSrcweir		installer::exiter::exit_program("ERROR: No cab file specification in globals.pm !", "create_media_table");
448*cdf0e10cSrcweir	}
449*cdf0e10cSrcweir
450*cdf0e10cSrcweir	# Saving the file
451*cdf0e10cSrcweir
452*cdf0e10cSrcweir	my $mediatablename = $basedir . $installer::globals::separator . "Media.idt";
453*cdf0e10cSrcweir	installer::files::save_file($mediatablename ,\@mediatable);
454*cdf0e10cSrcweir	my $infoline = "Created idt file: $mediatablename\n";
455*cdf0e10cSrcweir	push(@installer::globals::logfileinfo, $infoline);
456*cdf0e10cSrcweir}
457*cdf0e10cSrcweir
458*cdf0e10cSrcweir1;
459