1*b1cdbd2cSJim Jagielski#************************************************************** 2*b1cdbd2cSJim Jagielski# 3*b1cdbd2cSJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski# or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski# distributed with this work for additional information 6*b1cdbd2cSJim Jagielski# regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski# to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski# "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski# with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski# 11*b1cdbd2cSJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski# 13*b1cdbd2cSJim Jagielski# Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski# software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski# KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski# specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski# under the License. 19*b1cdbd2cSJim Jagielski# 20*b1cdbd2cSJim Jagielski#************************************************************** 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielskipackage installer::windows::shortcut; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielskiuse installer::existence; 27*b1cdbd2cSJim Jagielskiuse installer::exiter; 28*b1cdbd2cSJim Jagielskiuse installer::files; 29*b1cdbd2cSJim Jagielskiuse installer::globals; 30*b1cdbd2cSJim Jagielskiuse installer::windows::idtglobal; 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski############################################################## 33*b1cdbd2cSJim Jagielski# Returning the file object for the msiassembly table. 34*b1cdbd2cSJim Jagielski############################################################## 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielskisub get_file_by_name 37*b1cdbd2cSJim Jagielski{ 38*b1cdbd2cSJim Jagielski my ( $filesref, $filename ) = @_; 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski my $foundfile = 0; 41*b1cdbd2cSJim Jagielski my $onefile; 42*b1cdbd2cSJim Jagielski 43*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$filesref}; $i++ ) 44*b1cdbd2cSJim Jagielski { 45*b1cdbd2cSJim Jagielski $onefile = ${$filesref}[$i]; 46*b1cdbd2cSJim Jagielski my $name = $onefile->{'Name'}; 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski if ( $name eq $filename ) 49*b1cdbd2cSJim Jagielski { 50*b1cdbd2cSJim Jagielski $foundfile = 1; 51*b1cdbd2cSJim Jagielski last; 52*b1cdbd2cSJim Jagielski } 53*b1cdbd2cSJim Jagielski } 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski if (! $foundfile ) { $onefile = ""; } 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski return $onefile; 58*b1cdbd2cSJim Jagielski} 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski############################################################## 61*b1cdbd2cSJim Jagielski# Returning identifier for shortcut table. 62*b1cdbd2cSJim Jagielski############################################################## 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielskisub get_shortcut_identifier 65*b1cdbd2cSJim Jagielski{ 66*b1cdbd2cSJim Jagielski my ($shortcut) = @_; 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski my $identifier = $shortcut->{'gid'}; 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski return $identifier; 71*b1cdbd2cSJim Jagielski} 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski############################################################## 74*b1cdbd2cSJim Jagielski# Returning directory for shortcut table. 75*b1cdbd2cSJim Jagielski############################################################## 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielskisub get_shortcut_directory 78*b1cdbd2cSJim Jagielski{ 79*b1cdbd2cSJim Jagielski my ($shortcut, $dirref) = @_; 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski # For shortcuts it is easy to convert the gid_Dir_Abc into the unique name in 82*b1cdbd2cSJim Jagielski # the directory table, for instance help_en_simpressidx. 83*b1cdbd2cSJim Jagielski # For files (components) this is not so easy, because files can be included 84*b1cdbd2cSJim Jagielski # in zip files with subdirectories that are not defined in scp. 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski my $onedir; 87*b1cdbd2cSJim Jagielski my $shortcutdirectory = $shortcut->{'Dir'}; 88*b1cdbd2cSJim Jagielski my $directory = ""; 89*b1cdbd2cSJim Jagielski my $found = 0; 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$dirref}; $i++ ) 92*b1cdbd2cSJim Jagielski { 93*b1cdbd2cSJim Jagielski $onedir = ${$dirref}[$i]; 94*b1cdbd2cSJim Jagielski my $directorygid = $onedir->{'Dir'}; 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski if ( $directorygid eq $shortcutdirectory ) 97*b1cdbd2cSJim Jagielski { 98*b1cdbd2cSJim Jagielski $found = 1; 99*b1cdbd2cSJim Jagielski last; 100*b1cdbd2cSJim Jagielski } 101*b1cdbd2cSJim Jagielski } 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski if (!($found)) 104*b1cdbd2cSJim Jagielski { 105*b1cdbd2cSJim Jagielski installer::exiter::exit_program("ERROR: Did not find DirectoryID $shortcutdirectory in directory collection for shortcut", "get_shortcut_directory"); 106*b1cdbd2cSJim Jagielski } 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski $directory = $onedir->{'uniquename'}; 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski if ($directory eq "") { $directory = "INSTALLLOCATION"; } # Shortcuts in the root directory 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski return $directory; 113*b1cdbd2cSJim Jagielski} 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski############################################################## 116*b1cdbd2cSJim Jagielski# Returning name for shortcut table. 117*b1cdbd2cSJim Jagielski############################################################## 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielskisub get_shortcut_name 120*b1cdbd2cSJim Jagielski{ 121*b1cdbd2cSJim Jagielski my ($shortcut, $shortnamesref, $onelanguage) = @_; 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski my $returnstring; 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski my $name = $shortcut->{'Name'}; 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski my $shortstring = installer::windows::idtglobal::make_eight_three_conform($name, "shortcut", $shortnamesref); 128*b1cdbd2cSJim Jagielski $shortstring =~ s/\s/\_/g; # replacing white spaces with underline 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski if ( $shortstring eq $name ) { $returnstring = $name; } # nothing changed 131*b1cdbd2cSJim Jagielski else {$returnstring = $shortstring . "\|" . $name; } 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski return $returnstring; 134*b1cdbd2cSJim Jagielski} 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski############################################################## 137*b1cdbd2cSJim Jagielski# Returning component for shortcut table. 138*b1cdbd2cSJim Jagielski############################################################## 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielskisub get_shortcut_component 141*b1cdbd2cSJim Jagielski{ 142*b1cdbd2cSJim Jagielski my ($shortcut, $filesref) = @_; 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski my $onefile; 145*b1cdbd2cSJim Jagielski my $component = ""; 146*b1cdbd2cSJim Jagielski my $found = 0; 147*b1cdbd2cSJim Jagielski my $shortcut_fileid = $shortcut->{'FileID'}; 148*b1cdbd2cSJim Jagielski 149*b1cdbd2cSJim Jagielski my $absolute_filename = 0; 150*b1cdbd2cSJim Jagielski if ( $shortcut->{'Styles'} ) { $styles = $shortcut->{'Styles'}; } 151*b1cdbd2cSJim Jagielski if ( $styles =~ /\bABSOLUTE_FILENAME\b/ ) { $absolute_filename = 1; } # FileID contains an absolute filename 152*b1cdbd2cSJim Jagielski if ( $styles =~ /\bUSE_HELPER_FILENAME\b/ ) { $absolute_filename = 1; } # ComponentIDFile contains id of a helper file 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski # if the FileID contains an absolute filename, therefore the entry for "ComponentIDFile" has to be used. 155*b1cdbd2cSJim Jagielski if ( $absolute_filename ) { $shortcut_fileid = $shortcut->{'ComponentIDFile'}; } 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$filesref}; $i++ ) 158*b1cdbd2cSJim Jagielski { 159*b1cdbd2cSJim Jagielski $onefile = ${$filesref}[$i]; 160*b1cdbd2cSJim Jagielski my $filegid = $onefile->{'gid'}; 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski if ( $filegid eq $shortcut_fileid ) 163*b1cdbd2cSJim Jagielski { 164*b1cdbd2cSJim Jagielski $found = 1; 165*b1cdbd2cSJim Jagielski last; 166*b1cdbd2cSJim Jagielski } 167*b1cdbd2cSJim Jagielski } 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski if (!($found)) 170*b1cdbd2cSJim Jagielski { 171*b1cdbd2cSJim Jagielski installer::exiter::exit_program("ERROR: Did not find FileID $shortcut_fileid in file collection for shortcut", "get_shortcut_component"); 172*b1cdbd2cSJim Jagielski } 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski $component = $onefile->{'componentname'}; 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski # finally saving the componentname in the folderitem collector 177*b1cdbd2cSJim Jagielski 178*b1cdbd2cSJim Jagielski $shortcut->{'component'} = $component; 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski return $component; 181*b1cdbd2cSJim Jagielski} 182*b1cdbd2cSJim Jagielski 183*b1cdbd2cSJim Jagielski############################################################## 184*b1cdbd2cSJim Jagielski# Returning target for shortcut table. 185*b1cdbd2cSJim Jagielski############################################################## 186*b1cdbd2cSJim Jagielski 187*b1cdbd2cSJim Jagielskisub get_shortcut_target 188*b1cdbd2cSJim Jagielski{ 189*b1cdbd2cSJim Jagielski my ($shortcut, $filesref) = @_; 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski my $target = ""; 192*b1cdbd2cSJim Jagielski my $found = 0; 193*b1cdbd2cSJim Jagielski my $shortcut_fileid = $shortcut->{'FileID'}; 194*b1cdbd2cSJim Jagielski my $onefile; 195*b1cdbd2cSJim Jagielski 196*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$filesref}; $i++ ) 197*b1cdbd2cSJim Jagielski { 198*b1cdbd2cSJim Jagielski $onefile = ${$filesref}[$i]; 199*b1cdbd2cSJim Jagielski my $filegid = $onefile->{'gid'}; 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski if ( $filegid eq $shortcut_fileid ) 202*b1cdbd2cSJim Jagielski { 203*b1cdbd2cSJim Jagielski $found = 1; 204*b1cdbd2cSJim Jagielski last; 205*b1cdbd2cSJim Jagielski } 206*b1cdbd2cSJim Jagielski } 207*b1cdbd2cSJim Jagielski 208*b1cdbd2cSJim Jagielski if (!($found)) 209*b1cdbd2cSJim Jagielski { 210*b1cdbd2cSJim Jagielski installer::exiter::exit_program("ERROR: Did not find FileID $shortcut_fileid in file collection for shortcut", "get_shortcut_target"); 211*b1cdbd2cSJim Jagielski } 212*b1cdbd2cSJim Jagielski 213*b1cdbd2cSJim Jagielski if ( $onefile->{'Name'} ) 214*b1cdbd2cSJim Jagielski { 215*b1cdbd2cSJim Jagielski $target = $onefile->{'Name'}; 216*b1cdbd2cSJim Jagielski } 217*b1cdbd2cSJim Jagielski 218*b1cdbd2cSJim Jagielski $target = "\[\#" . $target . "\]"; # format for Non-Advertised shortcuts 219*b1cdbd2cSJim Jagielski 220*b1cdbd2cSJim Jagielski return $target; 221*b1cdbd2cSJim Jagielski} 222*b1cdbd2cSJim Jagielski 223*b1cdbd2cSJim Jagielski############################################################## 224*b1cdbd2cSJim Jagielski# Returning arguments for shortcut table. 225*b1cdbd2cSJim Jagielski############################################################## 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielskisub get_shortcut_arguments 228*b1cdbd2cSJim Jagielski{ 229*b1cdbd2cSJim Jagielski my ($shortcut) = @_; 230*b1cdbd2cSJim Jagielski 231*b1cdbd2cSJim Jagielski return ""; 232*b1cdbd2cSJim Jagielski} 233*b1cdbd2cSJim Jagielski 234*b1cdbd2cSJim Jagielski############################################################## 235*b1cdbd2cSJim Jagielski# Returning the localized description for shortcut table. 236*b1cdbd2cSJim Jagielski############################################################## 237*b1cdbd2cSJim Jagielski 238*b1cdbd2cSJim Jagielskisub get_shortcut_description 239*b1cdbd2cSJim Jagielski{ 240*b1cdbd2cSJim Jagielski my ($shortcut, $onelanguage) = @_; 241*b1cdbd2cSJim Jagielski 242*b1cdbd2cSJim Jagielski my $description = ""; 243*b1cdbd2cSJim Jagielski if ( $shortcut->{'Tooltip'} ) { $description = $shortcut->{'Tooltip'}; } 244*b1cdbd2cSJim Jagielski 245*b1cdbd2cSJim Jagielski return $description; 246*b1cdbd2cSJim Jagielski} 247*b1cdbd2cSJim Jagielski 248*b1cdbd2cSJim Jagielski############################################################## 249*b1cdbd2cSJim Jagielski# Returning hotkey for shortcut table. 250*b1cdbd2cSJim Jagielski############################################################## 251*b1cdbd2cSJim Jagielski 252*b1cdbd2cSJim Jagielskisub get_shortcut_hotkey 253*b1cdbd2cSJim Jagielski{ 254*b1cdbd2cSJim Jagielski my ($shortcut) = @_; 255*b1cdbd2cSJim Jagielski 256*b1cdbd2cSJim Jagielski return ""; 257*b1cdbd2cSJim Jagielski} 258*b1cdbd2cSJim Jagielski 259*b1cdbd2cSJim Jagielski############################################################## 260*b1cdbd2cSJim Jagielski# Returning icon for shortcut table. 261*b1cdbd2cSJim Jagielski############################################################## 262*b1cdbd2cSJim Jagielski 263*b1cdbd2cSJim Jagielskisub get_shortcut_icon 264*b1cdbd2cSJim Jagielski{ 265*b1cdbd2cSJim Jagielski my ($shortcut) = @_; 266*b1cdbd2cSJim Jagielski 267*b1cdbd2cSJim Jagielski return ""; 268*b1cdbd2cSJim Jagielski} 269*b1cdbd2cSJim Jagielski 270*b1cdbd2cSJim Jagielski############################################################## 271*b1cdbd2cSJim Jagielski# Returning iconindex for shortcut table. 272*b1cdbd2cSJim Jagielski############################################################## 273*b1cdbd2cSJim Jagielski 274*b1cdbd2cSJim Jagielskisub get_shortcut_iconindex 275*b1cdbd2cSJim Jagielski{ 276*b1cdbd2cSJim Jagielski my ($shortcut) = @_; 277*b1cdbd2cSJim Jagielski 278*b1cdbd2cSJim Jagielski return ""; 279*b1cdbd2cSJim Jagielski} 280*b1cdbd2cSJim Jagielski 281*b1cdbd2cSJim Jagielski############################################################## 282*b1cdbd2cSJim Jagielski# Returning show command for shortcut table. 283*b1cdbd2cSJim Jagielski############################################################## 284*b1cdbd2cSJim Jagielski 285*b1cdbd2cSJim Jagielskisub get_shortcut_showcmd 286*b1cdbd2cSJim Jagielski{ 287*b1cdbd2cSJim Jagielski my ($shortcut) = @_; 288*b1cdbd2cSJim Jagielski 289*b1cdbd2cSJim Jagielski return ""; 290*b1cdbd2cSJim Jagielski} 291*b1cdbd2cSJim Jagielski 292*b1cdbd2cSJim Jagielski############################################################## 293*b1cdbd2cSJim Jagielski# Returning working directory for shortcut table. 294*b1cdbd2cSJim Jagielski############################################################## 295*b1cdbd2cSJim Jagielski 296*b1cdbd2cSJim Jagielskisub get_shortcut_wkdir 297*b1cdbd2cSJim Jagielski{ 298*b1cdbd2cSJim Jagielski my ($shortcut) = @_; 299*b1cdbd2cSJim Jagielski 300*b1cdbd2cSJim Jagielski return ""; 301*b1cdbd2cSJim Jagielski} 302*b1cdbd2cSJim Jagielski 303*b1cdbd2cSJim Jagielski#################################################################### 304*b1cdbd2cSJim Jagielski# Returning working directory for shortcut table for FolderItems. 305*b1cdbd2cSJim Jagielski#################################################################### 306*b1cdbd2cSJim Jagielski 307*b1cdbd2cSJim Jagielskisub get_folderitem_wkdir 308*b1cdbd2cSJim Jagielski{ 309*b1cdbd2cSJim Jagielski my ($onelink, $dirref) = @_; 310*b1cdbd2cSJim Jagielski 311*b1cdbd2cSJim Jagielski # For shortcuts it is easy to convert the gid_Dir_Abc into the unique name in 312*b1cdbd2cSJim Jagielski # the directory table, for instance help_en_simpressidx. 313*b1cdbd2cSJim Jagielski 314*b1cdbd2cSJim Jagielski my $onedir; 315*b1cdbd2cSJim Jagielski my $workingdirectory = ""; 316*b1cdbd2cSJim Jagielski if ( $onelink->{'WkDir'} ) { $workingdirectory = $onelink->{'WkDir'}; } 317*b1cdbd2cSJim Jagielski my $directory = ""; 318*b1cdbd2cSJim Jagielski 319*b1cdbd2cSJim Jagielski if ( $workingdirectory ) 320*b1cdbd2cSJim Jagielski { 321*b1cdbd2cSJim Jagielski my $found = 0; 322*b1cdbd2cSJim Jagielski 323*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$dirref}; $i++ ) 324*b1cdbd2cSJim Jagielski { 325*b1cdbd2cSJim Jagielski $onedir = ${$dirref}[$i]; 326*b1cdbd2cSJim Jagielski my $directorygid = $onedir->{'Dir'}; 327*b1cdbd2cSJim Jagielski 328*b1cdbd2cSJim Jagielski if ( $directorygid eq $workingdirectory ) 329*b1cdbd2cSJim Jagielski { 330*b1cdbd2cSJim Jagielski $found = 1; 331*b1cdbd2cSJim Jagielski last; 332*b1cdbd2cSJim Jagielski } 333*b1cdbd2cSJim Jagielski } 334*b1cdbd2cSJim Jagielski 335*b1cdbd2cSJim Jagielski if (!($found)) 336*b1cdbd2cSJim Jagielski { 337*b1cdbd2cSJim Jagielski installer::exiter::exit_program("ERROR: Did not find DirectoryID $workingdirectory in directory collection for FolderItem", "get_folderitem_wkdir"); 338*b1cdbd2cSJim Jagielski } 339*b1cdbd2cSJim Jagielski 340*b1cdbd2cSJim Jagielski $directory = $onedir->{'uniquename'}; 341*b1cdbd2cSJim Jagielski 342*b1cdbd2cSJim Jagielski if ($directory eq "") { $directory = "INSTALLLOCATION"; } 343*b1cdbd2cSJim Jagielski } 344*b1cdbd2cSJim Jagielski 345*b1cdbd2cSJim Jagielski return $directory; 346*b1cdbd2cSJim Jagielski} 347*b1cdbd2cSJim Jagielski 348*b1cdbd2cSJim Jagielski################################################################### 349*b1cdbd2cSJim Jagielski# Returning the directory for a folderitem for shortcut table. 350*b1cdbd2cSJim Jagielski################################################################### 351*b1cdbd2cSJim Jagielski 352*b1cdbd2cSJim Jagielskisub get_folderitem_directory 353*b1cdbd2cSJim Jagielski{ 354*b1cdbd2cSJim Jagielski my ($shortcut) = @_; 355*b1cdbd2cSJim Jagielski 356*b1cdbd2cSJim Jagielski # my $directory = "$installer::globals::programmenufolder"; # default 357*b1cdbd2cSJim Jagielski my $directory = "$installer::globals::officemenufolder"; # default 358*b1cdbd2cSJim Jagielski 359*b1cdbd2cSJim Jagielski # The value $installer::globals::programmenufolder is not correct for the 360*b1cdbd2cSJim Jagielski # PREDEFINED folders, like PREDEFINED_AUTOSTART 361*b1cdbd2cSJim Jagielski 362*b1cdbd2cSJim Jagielski if ( $shortcut->{'FolderID'} eq "PREDEFINED_AUTOSTART" ) 363*b1cdbd2cSJim Jagielski { 364*b1cdbd2cSJim Jagielski $directory = $installer::globals::startupfolder; 365*b1cdbd2cSJim Jagielski } 366*b1cdbd2cSJim Jagielski 367*b1cdbd2cSJim Jagielski if ( $shortcut->{'FolderID'} eq "PREDEFINED_DESKTOP" ) 368*b1cdbd2cSJim Jagielski { 369*b1cdbd2cSJim Jagielski $directory = $installer::globals::desktopfolder; 370*b1cdbd2cSJim Jagielski $installer::globals::desktoplinkexists = 1; 371*b1cdbd2cSJim Jagielski } 372*b1cdbd2cSJim Jagielski 373*b1cdbd2cSJim Jagielski if ( $shortcut->{'FolderID'} eq "PREDEFINED_STARTMENU" ) 374*b1cdbd2cSJim Jagielski { 375*b1cdbd2cSJim Jagielski $directory = $installer::globals::startmenufolder; 376*b1cdbd2cSJim Jagielski } 377*b1cdbd2cSJim Jagielski 378*b1cdbd2cSJim Jagielski # saving the directory in the folderitems collector 379*b1cdbd2cSJim Jagielski 380*b1cdbd2cSJim Jagielski $shortcut->{'directory'} = $directory; 381*b1cdbd2cSJim Jagielski 382*b1cdbd2cSJim Jagielski return $directory; 383*b1cdbd2cSJim Jagielski} 384*b1cdbd2cSJim Jagielski 385*b1cdbd2cSJim Jagielski######################################################################## 386*b1cdbd2cSJim Jagielski# Returning the target (feature) for a folderitem for shortcut table. 387*b1cdbd2cSJim Jagielski# For non-advertised shortcuts this is a formatted string. 388*b1cdbd2cSJim Jagielski######################################################################## 389*b1cdbd2cSJim Jagielski 390*b1cdbd2cSJim Jagielskisub get_folderitem_target 391*b1cdbd2cSJim Jagielski{ 392*b1cdbd2cSJim Jagielski my ($shortcut, $filesref) = @_; 393*b1cdbd2cSJim Jagielski 394*b1cdbd2cSJim Jagielski my $onefile; 395*b1cdbd2cSJim Jagielski my $target = ""; 396*b1cdbd2cSJim Jagielski my $found = 0; 397*b1cdbd2cSJim Jagielski my $shortcut_fileid = $shortcut->{'FileID'}; 398*b1cdbd2cSJim Jagielski 399*b1cdbd2cSJim Jagielski my $styles = ""; 400*b1cdbd2cSJim Jagielski my $nonadvertised = 0; 401*b1cdbd2cSJim Jagielski my $absolute_filename = 0; 402*b1cdbd2cSJim Jagielski if ( $shortcut->{'Styles'} ) { $styles = $shortcut->{'Styles'}; } 403*b1cdbd2cSJim Jagielski if ( $styles =~ /\bNON_ADVERTISED\b/ ) { $nonadvertised = 1; } # this is a non-advertised shortcut 404*b1cdbd2cSJim Jagielski if ( $styles =~ /\bABSOLUTE_FILENAME\b/ ) { $absolute_filename = 1; } # FileID contains an absolute filename 405*b1cdbd2cSJim Jagielski 406*b1cdbd2cSJim Jagielski # if the FileID contains an absolute filename this can simply be returned as target for the shortcut table. 407*b1cdbd2cSJim Jagielski if ( $absolute_filename ) 408*b1cdbd2cSJim Jagielski { 409*b1cdbd2cSJim Jagielski $shortcut->{'target'} = $shortcut_fileid; 410*b1cdbd2cSJim Jagielski return $shortcut_fileid; 411*b1cdbd2cSJim Jagielski } 412*b1cdbd2cSJim Jagielski 413*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$filesref}; $i++ ) 414*b1cdbd2cSJim Jagielski { 415*b1cdbd2cSJim Jagielski $onefile = ${$filesref}[$i]; 416*b1cdbd2cSJim Jagielski my $filegid = $onefile->{'gid'}; 417*b1cdbd2cSJim Jagielski 418*b1cdbd2cSJim Jagielski if ( $filegid eq $shortcut_fileid ) 419*b1cdbd2cSJim Jagielski { 420*b1cdbd2cSJim Jagielski $found = 1; 421*b1cdbd2cSJim Jagielski last; 422*b1cdbd2cSJim Jagielski } 423*b1cdbd2cSJim Jagielski } 424*b1cdbd2cSJim Jagielski 425*b1cdbd2cSJim Jagielski if (!($found)) 426*b1cdbd2cSJim Jagielski { 427*b1cdbd2cSJim Jagielski installer::exiter::exit_program("ERROR: Did not find FileID $shortcut_fileid in file collection for folderitem", "get_folderitem_target"); 428*b1cdbd2cSJim Jagielski } 429*b1cdbd2cSJim Jagielski 430*b1cdbd2cSJim Jagielski # Non advertised shortcuts do not return the feature, but the path to the file 431*b1cdbd2cSJim Jagielski if ( $nonadvertised ) 432*b1cdbd2cSJim Jagielski { 433*b1cdbd2cSJim Jagielski $target = "\[" . $onefile->{'uniquedirname'} . "\]" . "\\" . $onefile->{'Name'}; 434*b1cdbd2cSJim Jagielski $shortcut->{'target'} = $target; 435*b1cdbd2cSJim Jagielski return $target; 436*b1cdbd2cSJim Jagielski } 437*b1cdbd2cSJim Jagielski 438*b1cdbd2cSJim Jagielski # the rest only for advertised shortcuts, which contain the feature in the shortcut table. 439*b1cdbd2cSJim Jagielski 440*b1cdbd2cSJim Jagielski if ( $onefile->{'modules'} ) { $target = $onefile->{'modules'}; } 441*b1cdbd2cSJim Jagielski 442*b1cdbd2cSJim Jagielski # If modules contains a list of modules, only taking the first one. 443*b1cdbd2cSJim Jagielski # But this should never be needed 444*b1cdbd2cSJim Jagielski 445*b1cdbd2cSJim Jagielski if ( $target =~ /^\s*(.*?)\,/ ) { $target = $1; } 446*b1cdbd2cSJim Jagielski 447*b1cdbd2cSJim Jagielski # Attention: Maximum feature length is 38! 448*b1cdbd2cSJim Jagielski installer::windows::idtglobal::shorten_feature_gid(\$target); 449*b1cdbd2cSJim Jagielski 450*b1cdbd2cSJim Jagielski # and finally saving the target in the folderitems collector 451*b1cdbd2cSJim Jagielski 452*b1cdbd2cSJim Jagielski $shortcut->{'target'} = $target; 453*b1cdbd2cSJim Jagielski 454*b1cdbd2cSJim Jagielski return $target; 455*b1cdbd2cSJim Jagielski} 456*b1cdbd2cSJim Jagielski 457*b1cdbd2cSJim Jagielski######################################################################## 458*b1cdbd2cSJim Jagielski# Returning the arguments for a folderitem for shortcut table. 459*b1cdbd2cSJim Jagielski######################################################################## 460*b1cdbd2cSJim Jagielski 461*b1cdbd2cSJim Jagielskisub get_folderitem_arguments 462*b1cdbd2cSJim Jagielski{ 463*b1cdbd2cSJim Jagielski my ($shortcut) = @_; 464*b1cdbd2cSJim Jagielski 465*b1cdbd2cSJim Jagielski my $parameter = ""; 466*b1cdbd2cSJim Jagielski 467*b1cdbd2cSJim Jagielski if ( $shortcut->{'Parameter'} ) { $parameter = $shortcut->{'Parameter'}; } 468*b1cdbd2cSJim Jagielski 469*b1cdbd2cSJim Jagielski return $parameter; 470*b1cdbd2cSJim Jagielski} 471*b1cdbd2cSJim Jagielski 472*b1cdbd2cSJim Jagielski######################################################################## 473*b1cdbd2cSJim Jagielski# Returning the icon for a folderitem for shortcut table. 474*b1cdbd2cSJim Jagielski# The returned value has to be defined in the icon table. 475*b1cdbd2cSJim Jagielski######################################################################## 476*b1cdbd2cSJim Jagielski 477*b1cdbd2cSJim Jagielskisub get_folderitem_icon 478*b1cdbd2cSJim Jagielski{ 479*b1cdbd2cSJim Jagielski my ($shortcut, $filesref, $iconfilecollector) = @_; 480*b1cdbd2cSJim Jagielski 481*b1cdbd2cSJim Jagielski my $styles = ""; 482*b1cdbd2cSJim Jagielski if ( $shortcut->{'Styles'} ) { $styles = $shortcut->{'Styles'}; } 483*b1cdbd2cSJim Jagielski if ( $styles =~ /\bNON_ADVERTISED\b/ ) { return ""; } # no icon for non-advertised shortcuts 484*b1cdbd2cSJim Jagielski 485*b1cdbd2cSJim Jagielski my $iconfilegid = ""; 486*b1cdbd2cSJim Jagielski 487*b1cdbd2cSJim Jagielski if ( $shortcut->{'IconFile'} ) { $iconfilegid = $shortcut->{'IconFile'}; } 488*b1cdbd2cSJim Jagielski else { $iconfilegid = $shortcut->{'FileID'}; } 489*b1cdbd2cSJim Jagielski 490*b1cdbd2cSJim Jagielski my $onefile; 491*b1cdbd2cSJim Jagielski my $found = 0; 492*b1cdbd2cSJim Jagielski 493*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$filesref}; $i++ ) 494*b1cdbd2cSJim Jagielski { 495*b1cdbd2cSJim Jagielski $onefile = ${$filesref}[$i]; 496*b1cdbd2cSJim Jagielski my $filegid = $onefile->{'gid'}; 497*b1cdbd2cSJim Jagielski 498*b1cdbd2cSJim Jagielski if ( $filegid eq $iconfilegid ) 499*b1cdbd2cSJim Jagielski { 500*b1cdbd2cSJim Jagielski $found = 1; 501*b1cdbd2cSJim Jagielski last; 502*b1cdbd2cSJim Jagielski } 503*b1cdbd2cSJim Jagielski } 504*b1cdbd2cSJim Jagielski 505*b1cdbd2cSJim Jagielski if (!($found)) 506*b1cdbd2cSJim Jagielski { 507*b1cdbd2cSJim Jagielski installer::exiter::exit_program("ERROR: Did not find FileID $iconfilegid in file collection", "get_folderitem_icon"); 508*b1cdbd2cSJim Jagielski } 509*b1cdbd2cSJim Jagielski 510*b1cdbd2cSJim Jagielski $iconfile = $onefile->{'Name'}; 511*b1cdbd2cSJim Jagielski 512*b1cdbd2cSJim Jagielski # collecting all icon files to copy them into the icon directory 513*b1cdbd2cSJim Jagielski 514*b1cdbd2cSJim Jagielski my $sourcepath = $onefile->{'sourcepath'}; 515*b1cdbd2cSJim Jagielski 516*b1cdbd2cSJim Jagielski if (! installer::existence::exists_in_array($sourcepath, $iconfilecollector)) 517*b1cdbd2cSJim Jagielski { 518*b1cdbd2cSJim Jagielski push(@{$iconfilecollector}, $sourcepath); 519*b1cdbd2cSJim Jagielski } 520*b1cdbd2cSJim Jagielski 521*b1cdbd2cSJim Jagielski return $iconfile; 522*b1cdbd2cSJim Jagielski} 523*b1cdbd2cSJim Jagielski 524*b1cdbd2cSJim Jagielski######################################################################## 525*b1cdbd2cSJim Jagielski# Returning the iconindex for a folderitem for shortcut table. 526*b1cdbd2cSJim Jagielski######################################################################## 527*b1cdbd2cSJim Jagielski 528*b1cdbd2cSJim Jagielskisub get_folderitem_iconindex 529*b1cdbd2cSJim Jagielski{ 530*b1cdbd2cSJim Jagielski my ($shortcut) = @_; 531*b1cdbd2cSJim Jagielski 532*b1cdbd2cSJim Jagielski my $styles = ""; 533*b1cdbd2cSJim Jagielski if ( $shortcut->{'Styles'} ) { $styles = $shortcut->{'Styles'}; } 534*b1cdbd2cSJim Jagielski if ( $styles =~ /\bNON_ADVERTISED\b/ ) { return ""; } # no iconindex for non-advertised shortcuts 535*b1cdbd2cSJim Jagielski 536*b1cdbd2cSJim Jagielski my $iconid = 0; 537*b1cdbd2cSJim Jagielski 538*b1cdbd2cSJim Jagielski if ( $shortcut->{'IconID'} ) { $iconid = $shortcut->{'IconID'}; } 539*b1cdbd2cSJim Jagielski 540*b1cdbd2cSJim Jagielski return $iconid; 541*b1cdbd2cSJim Jagielski} 542*b1cdbd2cSJim Jagielski 543*b1cdbd2cSJim Jagielski######################################################################## 544*b1cdbd2cSJim Jagielski# Returning the show command for a folderitem for shortcut table. 545*b1cdbd2cSJim Jagielski######################################################################## 546*b1cdbd2cSJim Jagielski 547*b1cdbd2cSJim Jagielskisub get_folderitem_showcmd 548*b1cdbd2cSJim Jagielski{ 549*b1cdbd2cSJim Jagielski my ($shortcut) = @_; 550*b1cdbd2cSJim Jagielski 551*b1cdbd2cSJim Jagielski return "1"; 552*b1cdbd2cSJim Jagielski} 553*b1cdbd2cSJim Jagielski 554*b1cdbd2cSJim Jagielski########################################################################################################### 555*b1cdbd2cSJim Jagielski# Creating the file Shortcut.idt dynamically 556*b1cdbd2cSJim Jagielski# Content: 557*b1cdbd2cSJim Jagielski# Shortcut Directory_ Name Component_ Target Arguments Description Hotkey Icon_ IconIndex ShowCmd WkDir 558*b1cdbd2cSJim Jagielski########################################################################################################### 559*b1cdbd2cSJim Jagielski 560*b1cdbd2cSJim Jagielskisub create_shortcut_table 561*b1cdbd2cSJim Jagielski{ 562*b1cdbd2cSJim Jagielski my ($filesref, $linksref, $folderref, $folderitemsref, $dirref, $basedir, $languagesarrayref, $includepatharrayref, $iconfilecollector) = @_; 563*b1cdbd2cSJim Jagielski 564*b1cdbd2cSJim Jagielski for ( my $m = 0; $m <= $#{$languagesarrayref}; $m++ ) 565*b1cdbd2cSJim Jagielski { 566*b1cdbd2cSJim Jagielski my $onelanguage = ${$languagesarrayref}[$m]; 567*b1cdbd2cSJim Jagielski 568*b1cdbd2cSJim Jagielski my @shortcuttable = (); 569*b1cdbd2cSJim Jagielski 570*b1cdbd2cSJim Jagielski my @shortnames = (); # to collect all short names 571*b1cdbd2cSJim Jagielski 572*b1cdbd2cSJim Jagielski installer::windows::idtglobal::write_idt_header(\@shortcuttable, "shortcut"); 573*b1cdbd2cSJim Jagielski 574*b1cdbd2cSJim Jagielski # First the links, defined in scp as ShortCut 575*b1cdbd2cSJim Jagielski 576*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$linksref}; $i++ ) 577*b1cdbd2cSJim Jagielski { 578*b1cdbd2cSJim Jagielski my $onelink = ${$linksref}[$i]; 579*b1cdbd2cSJim Jagielski 580*b1cdbd2cSJim Jagielski # Controlling the language! 581*b1cdbd2cSJim Jagielski # Only language independent folderitems or folderitems with the correct language 582*b1cdbd2cSJim Jagielski # will be included into the table 583*b1cdbd2cSJim Jagielski 584*b1cdbd2cSJim Jagielski if (! (!(( $onelink->{'ismultilingual'} )) || ( $onelink->{'specificlanguage'} eq $onelanguage )) ) { next; } 585*b1cdbd2cSJim Jagielski 586*b1cdbd2cSJim Jagielski my %shortcut = (); 587*b1cdbd2cSJim Jagielski 588*b1cdbd2cSJim Jagielski $shortcut{'Shortcut'} = get_shortcut_identifier($onelink); 589*b1cdbd2cSJim Jagielski $shortcut{'Directory_'} = get_shortcut_directory($onelink, $dirref); 590*b1cdbd2cSJim Jagielski $shortcut{'Name'} = get_shortcut_name($onelink, \@shortnames, $onelanguage); # localized name 591*b1cdbd2cSJim Jagielski $shortcut{'Component_'} = get_shortcut_component($onelink, $filesref); 592*b1cdbd2cSJim Jagielski $shortcut{'Target'} = get_shortcut_target($onelink, $filesref); 593*b1cdbd2cSJim Jagielski $shortcut{'Arguments'} = get_shortcut_arguments($onelink); 594*b1cdbd2cSJim Jagielski $shortcut{'Description'} = get_shortcut_description($onelink, $onelanguage); # localized description 595*b1cdbd2cSJim Jagielski $shortcut{'Hotkey'} = get_shortcut_hotkey($onelink); 596*b1cdbd2cSJim Jagielski $shortcut{'Icon_'} = get_shortcut_icon($onelink); 597*b1cdbd2cSJim Jagielski $shortcut{'IconIndex'} = get_shortcut_iconindex($onelink); 598*b1cdbd2cSJim Jagielski $shortcut{'ShowCmd'} = get_shortcut_showcmd($onelink); 599*b1cdbd2cSJim Jagielski $shortcut{'WkDir'} = get_shortcut_wkdir($onelink); 600*b1cdbd2cSJim Jagielski 601*b1cdbd2cSJim Jagielski my $oneline = $shortcut{'Shortcut'} . "\t" . $shortcut{'Directory_'} . "\t" . $shortcut{'Name'} . "\t" 602*b1cdbd2cSJim Jagielski . $shortcut{'Component_'} . "\t" . $shortcut{'Target'} . "\t" . $shortcut{'Arguments'} . "\t" 603*b1cdbd2cSJim Jagielski . $shortcut{'Description'} . "\t" . $shortcut{'Hotkey'} . "\t" . $shortcut{'Icon_'} . "\t" 604*b1cdbd2cSJim Jagielski . $shortcut{'IconIndex'} . "\t" . $shortcut{'ShowCmd'} . "\t" . $shortcut{'WkDir'} . "\n"; 605*b1cdbd2cSJim Jagielski 606*b1cdbd2cSJim Jagielski push(@shortcuttable, $oneline); 607*b1cdbd2cSJim Jagielski } 608*b1cdbd2cSJim Jagielski 609*b1cdbd2cSJim Jagielski # Second the entries into the start menu, defined in scp as Folder and Folderitem 610*b1cdbd2cSJim Jagielski # These shortcuts will fill the icons table. 611*b1cdbd2cSJim Jagielski 612*b1cdbd2cSJim Jagielski for ( my $i = 0; $i <= $#{$folderref}; $i++ ) 613*b1cdbd2cSJim Jagielski { 614*b1cdbd2cSJim Jagielski my $foldergid = ${$folderref}[$i]->{'gid'}; 615*b1cdbd2cSJim Jagielski 616*b1cdbd2cSJim Jagielski # iterating over all folderitems for this folder 617*b1cdbd2cSJim Jagielski 618*b1cdbd2cSJim Jagielski for ( my $j = 0; $j <= $#{$folderitemsref}; $j++ ) 619*b1cdbd2cSJim Jagielski { 620*b1cdbd2cSJim Jagielski my $onelink = ${$folderitemsref}[$j]; 621*b1cdbd2cSJim Jagielski 622*b1cdbd2cSJim Jagielski # Controlling the language! 623*b1cdbd2cSJim Jagielski # Only language independent folderitems or folderitems with the correct language 624*b1cdbd2cSJim Jagielski # will be included into the table 625*b1cdbd2cSJim Jagielski 626*b1cdbd2cSJim Jagielski if (! (!(( $onelink->{'ismultilingual'} )) || ( $onelink->{'specificlanguage'} eq $onelanguage )) ) { next; } 627*b1cdbd2cSJim Jagielski 628*b1cdbd2cSJim Jagielski # controlling the folder 629*b1cdbd2cSJim Jagielski 630*b1cdbd2cSJim Jagielski my $localused = 0; 631*b1cdbd2cSJim Jagielski 632*b1cdbd2cSJim Jagielski if ( $onelink->{'used'} ) { $localused = $onelink->{'used'}; } 633*b1cdbd2cSJim Jagielski 634*b1cdbd2cSJim Jagielski if (!($localused == 1)) { $onelink->{'used'} = "0"; } # no resetting 635*b1cdbd2cSJim Jagielski 636*b1cdbd2cSJim Jagielski if (!( $onelink->{'FolderID'} eq $foldergid )) { next; } 637*b1cdbd2cSJim Jagielski 638*b1cdbd2cSJim Jagielski $onelink->{'used'} = "1"; 639*b1cdbd2cSJim Jagielski 640*b1cdbd2cSJim Jagielski my %shortcut = (); 641*b1cdbd2cSJim Jagielski 642*b1cdbd2cSJim Jagielski $shortcut{'Shortcut'} = get_shortcut_identifier($onelink); 643*b1cdbd2cSJim Jagielski $shortcut{'Directory_'} = get_folderitem_directory($onelink); 644*b1cdbd2cSJim Jagielski $shortcut{'Name'} = get_shortcut_name($onelink, \@shortnames, $onelanguage); # localized name 645*b1cdbd2cSJim Jagielski $shortcut{'Component_'} = get_shortcut_component($onelink, $filesref); 646*b1cdbd2cSJim Jagielski $shortcut{'Target'} = get_folderitem_target($onelink, $filesref); 647*b1cdbd2cSJim Jagielski $shortcut{'Arguments'} = get_folderitem_arguments($onelink); 648*b1cdbd2cSJim Jagielski $shortcut{'Description'} = get_shortcut_description($onelink, $onelanguage); # localized description 649*b1cdbd2cSJim Jagielski $shortcut{'Hotkey'} = get_shortcut_hotkey($onelink); 650*b1cdbd2cSJim Jagielski $shortcut{'Icon_'} = get_folderitem_icon($onelink, $filesref, $iconfilecollector); 651*b1cdbd2cSJim Jagielski $shortcut{'IconIndex'} = get_folderitem_iconindex($onelink); 652*b1cdbd2cSJim Jagielski $shortcut{'ShowCmd'} = get_folderitem_showcmd($onelink); 653*b1cdbd2cSJim Jagielski $shortcut{'WkDir'} = get_folderitem_wkdir($onelink, $dirref); 654*b1cdbd2cSJim Jagielski 655*b1cdbd2cSJim Jagielski my $oneline = $shortcut{'Shortcut'} . "\t" . $shortcut{'Directory_'} . "\t" . $shortcut{'Name'} . "\t" 656*b1cdbd2cSJim Jagielski . $shortcut{'Component_'} . "\t" . $shortcut{'Target'} . "\t" . $shortcut{'Arguments'} . "\t" 657*b1cdbd2cSJim Jagielski . $shortcut{'Description'} . "\t" . $shortcut{'Hotkey'} . "\t" . $shortcut{'Icon_'} . "\t" 658*b1cdbd2cSJim Jagielski . $shortcut{'IconIndex'} . "\t" . $shortcut{'ShowCmd'} . "\t" . $shortcut{'WkDir'} . "\n"; 659*b1cdbd2cSJim Jagielski 660*b1cdbd2cSJim Jagielski push(@shortcuttable, $oneline); 661*b1cdbd2cSJim Jagielski } 662*b1cdbd2cSJim Jagielski } 663*b1cdbd2cSJim Jagielski 664*b1cdbd2cSJim Jagielski # The soffice.ico has to be included into the icon table 665*b1cdbd2cSJim Jagielski # as icon for the ARP applet 666*b1cdbd2cSJim Jagielski 667*b1cdbd2cSJim Jagielski my $onefile = ""; 668*b1cdbd2cSJim Jagielski my $sofficefile = "soffice.ico"; 669*b1cdbd2cSJim Jagielski 670*b1cdbd2cSJim Jagielski my $sourcepathref = installer::scriptitems::get_sourcepath_from_filename_and_includepath_classic(\$sofficefile, $includepatharrayref, 0); 671*b1cdbd2cSJim Jagielski 672*b1cdbd2cSJim Jagielski if ($$sourcepathref eq "") { installer::exiter::exit_program("ERROR: Could not find $sofficefile as icon!", "create_shortcut_table"); } 673*b1cdbd2cSJim Jagielski 674*b1cdbd2cSJim Jagielski if (! installer::existence::exists_in_array($$sourcepathref, $iconfilecollector)) 675*b1cdbd2cSJim Jagielski { 676*b1cdbd2cSJim Jagielski unshift(@{$iconfilecollector}, $$sourcepathref); 677*b1cdbd2cSJim Jagielski $installer::globals::sofficeiconadded = 1; 678*b1cdbd2cSJim Jagielski } 679*b1cdbd2cSJim Jagielski 680*b1cdbd2cSJim Jagielski $installer::logger::Lang->printf( 681*b1cdbd2cSJim Jagielski "Added icon file %s for language pack into icon file collector.\n", $$sourcepathref); 682*b1cdbd2cSJim Jagielski 683*b1cdbd2cSJim Jagielski # Saving the file 684*b1cdbd2cSJim Jagielski 685*b1cdbd2cSJim Jagielski my $shortcuttablename = $basedir . $installer::globals::separator . "Shortcut.idt" . "." . $onelanguage; 686*b1cdbd2cSJim Jagielski installer::files::save_file($shortcuttablename ,\@shortcuttable); 687*b1cdbd2cSJim Jagielski $installer::logger::Lang->printf("Created idt file: %s\n", $shortcuttablename); 688*b1cdbd2cSJim Jagielski } 689*b1cdbd2cSJim Jagielski} 690*b1cdbd2cSJim Jagielski 691*b1cdbd2cSJim Jagielski 692*b1cdbd2cSJim Jagielski1; 693