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 Jagielskipackage ConvwatchHelper;
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielskiuse English;
24*b1cdbd2cSJim Jagielskiuse warnings;
25*b1cdbd2cSJim Jagielskiuse strict;
26*b1cdbd2cSJim Jagielskiuse Cwd;
27*b1cdbd2cSJim Jagielskiuse Cwd 'chdir';
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielskiuse CallExternals;
30*b1cdbd2cSJim Jagielskiuse stringhelper;
31*b1cdbd2cSJim Jagielskiuse filehelper;
32*b1cdbd2cSJim Jagielskiuse oshelper;
33*b1cdbd2cSJim Jagielskiuse loghelper;
34*b1cdbd2cSJim Jagielski
35*b1cdbd2cSJim JagielskiBEGIN {
36*b1cdbd2cSJim Jagielski    use Exporter   ();
37*b1cdbd2cSJim Jagielski    our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
38*b1cdbd2cSJim Jagielski
39*b1cdbd2cSJim Jagielski    $VERSION     = 1.00;
40*b1cdbd2cSJim Jagielski    # if using RCS/CVS, this may be preferred
41*b1cdbd2cSJim Jagielski    $VERSION = do { my @r = (q$Revision: 1.39 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker
42*b1cdbd2cSJim Jagielski    @ISA         = qw(Exporter);
43*b1cdbd2cSJim Jagielski    @EXPORT      = qw(&getQADEVToolsPath &setProjectRoot &getProjectRoot &checkForStop &getSofficeExe &setINPATH);
44*b1cdbd2cSJim Jagielski    %EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
45*b1cdbd2cSJim Jagielski    # your exported package globals go here,
46*b1cdbd2cSJim Jagielski    # as well as any optionally exported functions
47*b1cdbd2cSJim Jagielski    @EXPORT_OK   = ( ); # qw($Var1 %Hashit &func3);
48*b1cdbd2cSJim Jagielski}
49*b1cdbd2cSJim Jagielski
50*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------
51*b1cdbd2cSJim Jagielskiour $tempprefix;
52*b1cdbd2cSJim Jagielski
53*b1cdbd2cSJim Jagielski# sub getTempDir()
54*b1cdbd2cSJim Jagielski# {
55*b1cdbd2cSJim Jagielski#     my $sTempDir;
56*b1cdbd2cSJim Jagielski#     if (! $tempprefix)
57*b1cdbd2cSJim Jagielski#     {
58*b1cdbd2cSJim Jagielski#         if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin")
59*b1cdbd2cSJim Jagielski#         {
60*b1cdbd2cSJim Jagielski#             # $tempdir = "C:/gfxcmp/temp";
61*b1cdbd2cSJim Jagielski#             $tempprefix = "//so-gfxcmp-lin/gfxcmp-data/wntmsci/temp";
62*b1cdbd2cSJim Jagielski#         }
63*b1cdbd2cSJim Jagielski#         elsif ($OSNAME eq "linux")
64*b1cdbd2cSJim Jagielski#         {
65*b1cdbd2cSJim Jagielski#             $tempprefix = "/net/so-gfxcmp-lin/export/gfxcmp/data/unxlngi/temp";
66*b1cdbd2cSJim Jagielski#         }
67*b1cdbd2cSJim Jagielski#         elsif ($OSNAME eq "solaris")
68*b1cdbd2cSJim Jagielski#         {
69*b1cdbd2cSJim Jagielski#             # $tempdir = "/space/gfxcmp/temp";
70*b1cdbd2cSJim Jagielski#             $tempprefix = "/net/so-gfxcmp-lin/export/gfxcmp/data/unxsoli/temp";
71*b1cdbd2cSJim Jagielski#         }
72*b1cdbd2cSJim Jagielski#         else
73*b1cdbd2cSJim Jagielski#         {
74*b1cdbd2cSJim Jagielski#             print "Error: This environment isn't supported yet.\n";
75*b1cdbd2cSJim Jagielski#             exit(1);
76*b1cdbd2cSJim Jagielski#         }
77*b1cdbd2cSJim Jagielski#     }
78*b1cdbd2cSJim Jagielski#     $sTempDir = $tempprefix;
79*b1cdbd2cSJim Jagielski#     return $sTempDir;
80*b1cdbd2cSJim Jagielski# }
81*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------
82*b1cdbd2cSJim Jagielski# in filehelper
83*b1cdbd2cSJim Jagielski# our $programprefix;
84*b1cdbd2cSJim Jagielski#
85*b1cdbd2cSJim Jagielski# sub getProgramPrefix($)
86*b1cdbd2cSJim Jagielski# {
87*b1cdbd2cSJim Jagielski#     my $sDBDistinct = shift;
88*b1cdbd2cSJim Jagielski#
89*b1cdbd2cSJim Jagielski#     my $sProgramPrefix;
90*b1cdbd2cSJim Jagielski#     if (! $programprefix)
91*b1cdbd2cSJim Jagielski#     {
92*b1cdbd2cSJim Jagielski#         if ($OSNAME eq "MSWin32")
93*b1cdbd2cSJim Jagielski#         {
94*b1cdbd2cSJim Jagielski#             # $programprefix = "C:/gfxcmp/programs";
95*b1cdbd2cSJim Jagielski#             $programprefix = "C:/gp";
96*b1cdbd2cSJim Jagielski#         }
97*b1cdbd2cSJim Jagielski#         elsif ($OSNAME eq "linux")
98*b1cdbd2cSJim Jagielski#         {
99*b1cdbd2cSJim Jagielski#             $programprefix = "/space/gfxcmp/programs";
100*b1cdbd2cSJim Jagielski#         }
101*b1cdbd2cSJim Jagielski#         elsif ($OSNAME eq "solaris")
102*b1cdbd2cSJim Jagielski#         {
103*b1cdbd2cSJim Jagielski#             $programprefix = "/space/gfxcmp/programs";
104*b1cdbd2cSJim Jagielski#         }
105*b1cdbd2cSJim Jagielski#         else
106*b1cdbd2cSJim Jagielski#         {
107*b1cdbd2cSJim Jagielski#             print "Error: This environment isn't supported yet.\n";
108*b1cdbd2cSJim Jagielski#             exit(1);
109*b1cdbd2cSJim Jagielski#         }
110*b1cdbd2cSJim Jagielski#     }
111*b1cdbd2cSJim Jagielski#     $sProgramPrefix = appendPath($programprefix, substr($sDBDistinct, 0, 19));
112*b1cdbd2cSJim Jagielski#     return $sProgramPrefix;
113*b1cdbd2cSJim Jagielski# }
114*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------
115*b1cdbd2cSJim Jagielskisub getQADEVToolsPath()
116*b1cdbd2cSJim Jagielski{
117*b1cdbd2cSJim Jagielski    my $sNewPath = appendPath(getToolsPrefix(), "qadev");
118*b1cdbd2cSJim Jagielski    $sNewPath = appendPath($sNewPath, "scripts");
119*b1cdbd2cSJim Jagielski    $sNewPath = appendPath($sNewPath, "gfxcmp_ui");
120*b1cdbd2cSJim Jagielski    return $sNewPath;
121*b1cdbd2cSJim Jagielski}
122*b1cdbd2cSJim Jagielski
123*b1cdbd2cSJim Jagielski# in filehelper
124*b1cdbd2cSJim Jagielski# our $toolsprefix;
125*b1cdbd2cSJim Jagielski#
126*b1cdbd2cSJim Jagielski# sub getToolsPrefix()
127*b1cdbd2cSJim Jagielski# {
128*b1cdbd2cSJim Jagielski#     my $sToolsPrefix;
129*b1cdbd2cSJim Jagielski#     if (! $toolsprefix)
130*b1cdbd2cSJim Jagielski#     {
131*b1cdbd2cSJim Jagielski#         if ($OSNAME eq "MSWin32")
132*b1cdbd2cSJim Jagielski#         {
133*b1cdbd2cSJim Jagielski#             $toolsprefix = "C:/gfxcmp/tools";
134*b1cdbd2cSJim Jagielski#         }
135*b1cdbd2cSJim Jagielski#         elsif ($OSNAME eq "linux")
136*b1cdbd2cSJim Jagielski#         {
137*b1cdbd2cSJim Jagielski#             $toolsprefix = "/space/gfxcmp/tools";
138*b1cdbd2cSJim Jagielski#         }
139*b1cdbd2cSJim Jagielski#         elsif ($OSNAME eq "solaris")
140*b1cdbd2cSJim Jagielski#         {
141*b1cdbd2cSJim Jagielski#             $toolsprefix = "/space/gfxcmp/tools";
142*b1cdbd2cSJim Jagielski#         }
143*b1cdbd2cSJim Jagielski#         else
144*b1cdbd2cSJim Jagielski#         {
145*b1cdbd2cSJim Jagielski#             print "Error: This environment isn't supported yet.\n";
146*b1cdbd2cSJim Jagielski#             exit(1);
147*b1cdbd2cSJim Jagielski#         }
148*b1cdbd2cSJim Jagielski#     }
149*b1cdbd2cSJim Jagielski#     $sToolsPrefix = $toolsprefix;
150*b1cdbd2cSJim Jagielski#     return $sToolsPrefix;
151*b1cdbd2cSJim Jagielski# }
152*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------
153*b1cdbd2cSJim Jagielskiour $sProjectRoot;
154*b1cdbd2cSJim Jagielskisub setProjectRoot($)
155*b1cdbd2cSJim Jagielski{
156*b1cdbd2cSJim Jagielski    $sProjectRoot = shift;
157*b1cdbd2cSJim Jagielski    log_print "\$sProjectRoot := $sProjectRoot\n";
158*b1cdbd2cSJim Jagielski}
159*b1cdbd2cSJim Jagielskisub getProjectRoot()
160*b1cdbd2cSJim Jagielski{
161*b1cdbd2cSJim Jagielski    if ($sProjectRoot)
162*b1cdbd2cSJim Jagielski    {
163*b1cdbd2cSJim Jagielski        return $sProjectRoot;
164*b1cdbd2cSJim Jagielski    }
165*b1cdbd2cSJim Jagielski    die "setProjectRoot(PATH) not set.\n";
166*b1cdbd2cSJim Jagielski}
167*b1cdbd2cSJim Jagielski
168*b1cdbd2cSJim Jagielskiour $sINPATH;
169*b1cdbd2cSJim Jagielskisub setINPATH($)
170*b1cdbd2cSJim Jagielski{
171*b1cdbd2cSJim Jagielski    $sINPATH = shift;
172*b1cdbd2cSJim Jagielski}
173*b1cdbd2cSJim Jagielskisub getINPATH()
174*b1cdbd2cSJim Jagielski{
175*b1cdbd2cSJim Jagielski    if ($sINPATH)
176*b1cdbd2cSJim Jagielski    {
177*b1cdbd2cSJim Jagielski        return $sINPATH;
178*b1cdbd2cSJim Jagielski    }
179*b1cdbd2cSJim Jagielski    die "setINPATH(PATH) not set.\n";
180*b1cdbd2cSJim Jagielski}
181*b1cdbd2cSJim Jagielskiour $dataprefix;
182*b1cdbd2cSJim Jagielski
183*b1cdbd2cSJim Jagielski# sub getDataPrefix()
184*b1cdbd2cSJim Jagielski# {
185*b1cdbd2cSJim Jagielski#     my $sDataPrefix;
186*b1cdbd2cSJim Jagielski#     if (! $dataprefix)
187*b1cdbd2cSJim Jagielski#     {
188*b1cdbd2cSJim Jagielski#         if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin")
189*b1cdbd2cSJim Jagielski#         {
190*b1cdbd2cSJim Jagielski#             # $dataprefix = "C:/gfxcmp/data";
191*b1cdbd2cSJim Jagielski#             # $dataprefix = "//so-gfxcmp-lin/gfxcmp-data/wntmsci";
192*b1cdbd2cSJim Jagielski#             $dataprefix = getProjectRoot();
193*b1cdbd2cSJim Jagielski#         }
194*b1cdbd2cSJim Jagielski#         elsif ($OSNAME eq "linux")
195*b1cdbd2cSJim Jagielski#         {
196*b1cdbd2cSJim Jagielski#             # $dataprefix = "/space/gfxcmp/data";
197*b1cdbd2cSJim Jagielski#             # $dataprefix = "/net/so-gfxcmp-lin/export/gfxcmp/data/unxlngi";
198*b1cdbd2cSJim Jagielski#             $dataprefix = getProjectRoot();
199*b1cdbd2cSJim Jagielski#         }
200*b1cdbd2cSJim Jagielski#         elsif ($OSNAME eq "solaris")
201*b1cdbd2cSJim Jagielski#         {
202*b1cdbd2cSJim Jagielski#             # $dataprefix = "/space/gfxcmp/data";
203*b1cdbd2cSJim Jagielski#             # $dataprefix = "/net/so-gfxcmp-lin/export/gfxcmp/data/unxsoli";
204*b1cdbd2cSJim Jagielski#             $dataprefix = getProjectRoot();
205*b1cdbd2cSJim Jagielski#         }
206*b1cdbd2cSJim Jagielski#         else
207*b1cdbd2cSJim Jagielski#         {
208*b1cdbd2cSJim Jagielski#             print "Error: This environment isn't supported yet.\n";
209*b1cdbd2cSJim Jagielski#             exit(1);
210*b1cdbd2cSJim Jagielski#         }
211*b1cdbd2cSJim Jagielski#         $dataprefix = appendPath(getProjectRoot(), getINPATH());
212*b1cdbd2cSJim Jagielski#         $dataprefix = appendPath($dataprefix, "data");
213*b1cdbd2cSJim Jagielski#     }
214*b1cdbd2cSJim Jagielski#     $sDataPrefix = $dataprefix;
215*b1cdbd2cSJim Jagielski#     return $sDataPrefix;
216*b1cdbd2cSJim Jagielski# }
217*b1cdbd2cSJim Jagielski
218*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------
219*b1cdbd2cSJim Jagielski
220*b1cdbd2cSJim Jagielski# sub _shortsleep($)
221*b1cdbd2cSJim Jagielski# {
222*b1cdbd2cSJim Jagielski# #    sleep 1;
223*b1cdbd2cSJim Jagielski#     select(undef, undef, undef, 0.333);
224*b1cdbd2cSJim Jagielski# }
225*b1cdbd2cSJim Jagielski#
226*b1cdbd2cSJim Jagielski# sub _waitInSeconds($)
227*b1cdbd2cSJim Jagielski# {
228*b1cdbd2cSJim Jagielski#     my $nLength = shift;
229*b1cdbd2cSJim Jagielski#     my $i;
230*b1cdbd2cSJim Jagielski#     my $j;
231*b1cdbd2cSJim Jagielski#
232*b1cdbd2cSJim Jagielski#     for ($j=0;$j<$nLength;$j++)
233*b1cdbd2cSJim Jagielski#     {
234*b1cdbd2cSJim Jagielski#         for ($i=0;$i<$j;$i++)
235*b1cdbd2cSJim Jagielski#         {
236*b1cdbd2cSJim Jagielski#             print ".";
237*b1cdbd2cSJim Jagielski#         }
238*b1cdbd2cSJim Jagielski#         for ($i=$j;$i<$nLength;$i++)
239*b1cdbd2cSJim Jagielski#         {
240*b1cdbd2cSJim Jagielski#             print " ";
241*b1cdbd2cSJim Jagielski#         }
242*b1cdbd2cSJim Jagielski#         _shortsleep( 1 );
243*b1cdbd2cSJim Jagielski#         print "\r";
244*b1cdbd2cSJim Jagielski#     }
245*b1cdbd2cSJim Jagielski#
246*b1cdbd2cSJim Jagielski#     for ($j=0;$j<=$nLength;$j++)
247*b1cdbd2cSJim Jagielski#     {
248*b1cdbd2cSJim Jagielski#         for ($i=0;$i<$j;$i++)
249*b1cdbd2cSJim Jagielski#         {
250*b1cdbd2cSJim Jagielski#             print " ";
251*b1cdbd2cSJim Jagielski#         }
252*b1cdbd2cSJim Jagielski#         for ($i=$j;$i<$nLength;$i++)
253*b1cdbd2cSJim Jagielski#         {
254*b1cdbd2cSJim Jagielski#             print ".";
255*b1cdbd2cSJim Jagielski#         }
256*b1cdbd2cSJim Jagielski#         _shortsleep( 1 );
257*b1cdbd2cSJim Jagielski#         print "\r";
258*b1cdbd2cSJim Jagielski#     }
259*b1cdbd2cSJim Jagielski# }
260*b1cdbd2cSJim Jagielski#
261*b1cdbd2cSJim Jagielski# sub wait30seconds()
262*b1cdbd2cSJim Jagielski# {
263*b1cdbd2cSJim Jagielski#     _waitInSeconds(20);
264*b1cdbd2cSJim Jagielski#     _waitInSeconds(20);
265*b1cdbd2cSJim Jagielski# }
266*b1cdbd2cSJim Jagielski
267*b1cdbd2cSJim Jagielskisub checkForStop($)
268*b1cdbd2cSJim Jagielski{
269*b1cdbd2cSJim Jagielski    my $sStopFilename = shift;
270*b1cdbd2cSJim Jagielski    my $sStopFilePath;
271*b1cdbd2cSJim Jagielski    if ($OSNAME eq "MSWin32")
272*b1cdbd2cSJim Jagielski    {
273*b1cdbd2cSJim Jagielski        $sStopFilePath = "C:/temp/";
274*b1cdbd2cSJim Jagielski    }
275*b1cdbd2cSJim Jagielski    else
276*b1cdbd2cSJim Jagielski    {
277*b1cdbd2cSJim Jagielski        $sStopFilePath = "/tmp/";
278*b1cdbd2cSJim Jagielski    }
279*b1cdbd2cSJim Jagielski    my $sStopFile = $sStopFilePath . $sStopFilename;
280*b1cdbd2cSJim Jagielski    if ( -e "$sStopFile" )
281*b1cdbd2cSJim Jagielski    {
282*b1cdbd2cSJim Jagielski        print "Stop of Convwatch tool forced!\n";
283*b1cdbd2cSJim Jagielski        unlink($sStopFile);
284*b1cdbd2cSJim Jagielski        exit(2);
285*b1cdbd2cSJim Jagielski    }
286*b1cdbd2cSJim Jagielski}
287*b1cdbd2cSJim Jagielski
288*b1cdbd2cSJim Jagielski# ----------------------------------------------------------------------------------------
289*b1cdbd2cSJim Jagielskisub readdirectory($$$);
290*b1cdbd2cSJim Jagielski
291*b1cdbd2cSJim Jagielskisub readdirectory($$$)
292*b1cdbd2cSJim Jagielski{
293*b1cdbd2cSJim Jagielski    my $startdir = shift;
294*b1cdbd2cSJim Jagielski    my $sUserParameter  = shift;
295*b1cdbd2cSJim Jagielski    my $hook     = shift;
296*b1cdbd2cSJim Jagielski
297*b1cdbd2cSJim Jagielski    my $myfile;
298*b1cdbd2cSJim Jagielski
299*b1cdbd2cSJim Jagielski    local *DIR;
300*b1cdbd2cSJim Jagielski    chdir $startdir;
301*b1cdbd2cSJim Jagielski    cwd();
302*b1cdbd2cSJim Jagielski
303*b1cdbd2cSJim Jagielski    my $nCountFiles = 0;
304*b1cdbd2cSJim Jagielski    if (opendir (DIR, $startdir))           # Directory oeffnen
305*b1cdbd2cSJim Jagielski    {
306*b1cdbd2cSJim Jagielski        while ($myfile = readdir(DIR))
307*b1cdbd2cSJim Jagielski        {                                  # ein filename holen
308*b1cdbd2cSJim Jagielski            #if (! -l $myfile)              # not a link
309*b1cdbd2cSJim Jagielski            #{
310*b1cdbd2cSJim Jagielski            if (-d $myfile ) # is a directory
311*b1cdbd2cSJim Jagielski            {
312*b1cdbd2cSJim Jagielski                if ( -l $myfile)
313*b1cdbd2cSJim Jagielski                {
314*b1cdbd2cSJim Jagielski                    next;
315*b1cdbd2cSJim Jagielski                }
316*b1cdbd2cSJim Jagielski                # if ( $myfile eq "help" ||
317*b1cdbd2cSJim Jagielski                #      $myfile eq "presets" ||
318*b1cdbd2cSJim Jagielski                #      $myfile eq "registry" ||
319*b1cdbd2cSJim Jagielski                #      $myfile eq "uno_packages" ||
320*b1cdbd2cSJim Jagielski                #      $myfile eq "lib" ||
321*b1cdbd2cSJim Jagielski                #      $myfile eq "user_tree" )
322*b1cdbd2cSJim Jagielski                # {
323*b1cdbd2cSJim Jagielski                #     next;
324*b1cdbd2cSJim Jagielski                # }
325*b1cdbd2cSJim Jagielski
326*b1cdbd2cSJim Jagielski                if ($myfile ne "." && $myfile ne "..")
327*b1cdbd2cSJim Jagielski                {
328*b1cdbd2cSJim Jagielski                    my $sNewStartDir = appendPath($startdir, $myfile);    # neuen Directorystring erstellen
329*b1cdbd2cSJim Jagielski                    # if ($sNewStartDir =~ "^\/proc" ||
330*b1cdbd2cSJim Jagielski                    #     $sNewStartDir =~ "^\/dev" ||
331*b1cdbd2cSJim Jagielski                    #     $sNewStartDir =~ "^\/udev" ||
332*b1cdbd2cSJim Jagielski                    #     $sNewStartDir =~ "lost+found" )
333*b1cdbd2cSJim Jagielski                    # {
334*b1cdbd2cSJim Jagielski                    #     next;
335*b1cdbd2cSJim Jagielski                    # }
336*b1cdbd2cSJim Jagielski                    # my $sNewSUserParameter  = $sUserParameter . $myfile ."/";
337*b1cdbd2cSJim Jagielski                    # do a recursive call
338*b1cdbd2cSJim Jagielski                    # $nCountFiles++;
339*b1cdbd2cSJim Jagielski                    my $nFileCount = readdirectory($sNewStartDir, $sUserParameter, $hook);
340*b1cdbd2cSJim Jagielski                    # workOnDir($sNewDir, $nFileCount);
341*b1cdbd2cSJim Jagielski                    $nCountFiles += $nFileCount;
342*b1cdbd2cSJim Jagielski
343*b1cdbd2cSJim Jagielski                    chdir ($startdir);                      # zurueckwechseln.
344*b1cdbd2cSJim Jagielski                    cwd();
345*b1cdbd2cSJim Jagielski                }
346*b1cdbd2cSJim Jagielski            }
347*b1cdbd2cSJim Jagielski            else
348*b1cdbd2cSJim Jagielski            {
349*b1cdbd2cSJim Jagielski                # File must exist, be a regular file and must not be the $onlyOnFile
350*b1cdbd2cSJim Jagielski                if (-f $myfile)
351*b1cdbd2cSJim Jagielski                {
352*b1cdbd2cSJim Jagielski                    # print STDERR " $startdir" . "$myfile\n";
353*b1cdbd2cSJim Jagielski                    $nCountFiles++;
354*b1cdbd2cSJim Jagielski                    # workOnFile($startdir, $myfile, $destdir);
355*b1cdbd2cSJim Jagielski                    $hook->($startdir, $myfile, $sUserParameter);
356*b1cdbd2cSJim Jagielski                }
357*b1cdbd2cSJim Jagielski            }
358*b1cdbd2cSJim Jagielski            #}
359*b1cdbd2cSJim Jagielski            #else
360*b1cdbd2cSJim Jagielski            #{
361*b1cdbd2cSJim Jagielski            #    print STDERR "linked file: $dir/$myfile\n";
362*b1cdbd2cSJim Jagielski            #}
363*b1cdbd2cSJim Jagielski        }
364*b1cdbd2cSJim Jagielski        closedir(DIR);
365*b1cdbd2cSJim Jagielski    }
366*b1cdbd2cSJim Jagielski    else
367*b1cdbd2cSJim Jagielski    {
368*b1cdbd2cSJim Jagielski        print STDERR "could not open $startdir\n";
369*b1cdbd2cSJim Jagielski    }
370*b1cdbd2cSJim Jagielski    return $nCountFiles;
371*b1cdbd2cSJim Jagielski}
372*b1cdbd2cSJim Jagielski
373*b1cdbd2cSJim Jagielskiour $lcl_sSofficeBinPath;
374*b1cdbd2cSJim Jagielskiour $lcl_sSofficeBinName;
375*b1cdbd2cSJim Jagielski
376*b1cdbd2cSJim Jagielskisub searchSofficeBin($$$)
377*b1cdbd2cSJim Jagielski{
378*b1cdbd2cSJim Jagielski    my $currentDir = shift;
379*b1cdbd2cSJim Jagielski    my $currentFile = shift;
380*b1cdbd2cSJim Jagielski    my $sUserParameter = shift;
381*b1cdbd2cSJim Jagielski
382*b1cdbd2cSJim Jagielski    if ($currentFile eq $sUserParameter)
383*b1cdbd2cSJim Jagielski    {
384*b1cdbd2cSJim Jagielski        my $sSourceFilename;
385*b1cdbd2cSJim Jagielski        $sSourceFilename = appendPath($currentDir, $currentFile);
386*b1cdbd2cSJim Jagielski
387*b1cdbd2cSJim Jagielski        if ( -e "$sSourceFilename" )
388*b1cdbd2cSJim Jagielski        {
389*b1cdbd2cSJim Jagielski            $lcl_sSofficeBinPath = $currentDir;
390*b1cdbd2cSJim Jagielski            $lcl_sSofficeBinName = $currentFile;
391*b1cdbd2cSJim Jagielski        }
392*b1cdbd2cSJim Jagielski    }
393*b1cdbd2cSJim Jagielski}
394*b1cdbd2cSJim Jagielski
395*b1cdbd2cSJim Jagielski# our $lcl_sUnoPkgPath;
396*b1cdbd2cSJim Jagielski#
397*b1cdbd2cSJim Jagielski# sub searchUnoPkgBin($$$)
398*b1cdbd2cSJim Jagielski# {
399*b1cdbd2cSJim Jagielski#     my $currentDir = shift;
400*b1cdbd2cSJim Jagielski#     my $currentFile = shift;
401*b1cdbd2cSJim Jagielski#     my $sUserParameter = shift;
402*b1cdbd2cSJim Jagielski#
403*b1cdbd2cSJim Jagielski#     if ($currentFile eq $sUserParameter)
404*b1cdbd2cSJim Jagielski#     {
405*b1cdbd2cSJim Jagielski#         my $sSourceFilename;
406*b1cdbd2cSJim Jagielski#         $sSourceFilename = appendPath($currentDir, $currentFile);
407*b1cdbd2cSJim Jagielski#         if ( -e "$sSourceFilename" )
408*b1cdbd2cSJim Jagielski#         {
409*b1cdbd2cSJim Jagielski#             $lcl_sUnoPkgPath = $currentDir;
410*b1cdbd2cSJim Jagielski#         }
411*b1cdbd2cSJim Jagielski#     }
412*b1cdbd2cSJim Jagielski# }
413*b1cdbd2cSJim Jagielski
414*b1cdbd2cSJim Jagielski# our $lcl_sJARPath;
415*b1cdbd2cSJim Jagielski
416*b1cdbd2cSJim Jagielski# sub searchJARFile($$$)
417*b1cdbd2cSJim Jagielski# {
418*b1cdbd2cSJim Jagielski#     my $currentDir = shift;
419*b1cdbd2cSJim Jagielski#     my $currentFile = shift;
420*b1cdbd2cSJim Jagielski#     my $sUserParameter = shift;
421*b1cdbd2cSJim Jagielski#
422*b1cdbd2cSJim Jagielski#     if ($currentFile eq $sUserParameter)
423*b1cdbd2cSJim Jagielski#     {
424*b1cdbd2cSJim Jagielski#         my $sSourceFilename;
425*b1cdbd2cSJim Jagielski#         $sSourceFilename = appendPath($currentDir, $currentFile);
426*b1cdbd2cSJim Jagielski#         if ( -e "$sSourceFilename" )
427*b1cdbd2cSJim Jagielski#         {
428*b1cdbd2cSJim Jagielski#             $lcl_sJARPath = $currentDir;
429*b1cdbd2cSJim Jagielski#         }
430*b1cdbd2cSJim Jagielski#     }
431*b1cdbd2cSJim Jagielski# }
432*b1cdbd2cSJim Jagielski
433*b1cdbd2cSJim Jagielski# return the PATH, where the file was found
434*b1cdbd2cSJim Jagielski# sub searchForJAR($$)
435*b1cdbd2cSJim Jagielski# {
436*b1cdbd2cSJim Jagielski#     my $sPathToInstallOffice = shift;
437*b1cdbd2cSJim Jagielski#     my $sJARFileName = shift;
438*b1cdbd2cSJim Jagielski#
439*b1cdbd2cSJim Jagielski#     my $sCurrentPath = cwd();
440*b1cdbd2cSJim Jagielski#
441*b1cdbd2cSJim Jagielski#     $lcl_sJARPath = "";
442*b1cdbd2cSJim Jagielski#     readdirectory(${sPathToInstallOffice}, ${sJARFileName}, \&searchJARFile);
443*b1cdbd2cSJim Jagielski#
444*b1cdbd2cSJim Jagielski#     chdir $sCurrentPath;
445*b1cdbd2cSJim Jagielski#     cwd();
446*b1cdbd2cSJim Jagielski#
447*b1cdbd2cSJim Jagielski#     return $lcl_sJARPath;
448*b1cdbd2cSJim Jagielski# }
449*b1cdbd2cSJim Jagielski
450*b1cdbd2cSJim Jagielski# sub getUnoPkg($)
451*b1cdbd2cSJim Jagielski# {
452*b1cdbd2cSJim Jagielski#     my $sPathToInstallOffice = shift;
453*b1cdbd2cSJim Jagielski#
454*b1cdbd2cSJim Jagielski#     my $sUnoPkgName = "unopkg.bin";
455*b1cdbd2cSJim Jagielski#     if (isWindowsEnvironment())
456*b1cdbd2cSJim Jagielski#     {
457*b1cdbd2cSJim Jagielski#         $sUnoPkgName = "unopkg.exe";
458*b1cdbd2cSJim Jagielski#     }
459*b1cdbd2cSJim Jagielski#
460*b1cdbd2cSJim Jagielski#     my $sCurrentPath = cwd();
461*b1cdbd2cSJim Jagielski#
462*b1cdbd2cSJim Jagielski#     $lcl_sUnoPkgPath = "";
463*b1cdbd2cSJim Jagielski#     readdirectory(${sPathToInstallOffice}, ${sUnoPkgName}, \&searchUnoPkgBin);
464*b1cdbd2cSJim Jagielski#
465*b1cdbd2cSJim Jagielski#     chdir $sCurrentPath;
466*b1cdbd2cSJim Jagielski#     cwd();
467*b1cdbd2cSJim Jagielski#
468*b1cdbd2cSJim Jagielski#     return ($lcl_sUnoPkgPath, $sUnoPkgName);
469*b1cdbd2cSJim Jagielski# }
470*b1cdbd2cSJim Jagielski
471*b1cdbd2cSJim Jagielskisub getSofficeExe($)
472*b1cdbd2cSJim Jagielski{
473*b1cdbd2cSJim Jagielski    my $sPathToOffice = shift;
474*b1cdbd2cSJim Jagielski
475*b1cdbd2cSJim Jagielski    my $sSofficeExeName = "soffice";
476*b1cdbd2cSJim Jagielski    if (isWindowsEnvironment())
477*b1cdbd2cSJim Jagielski    {
478*b1cdbd2cSJim Jagielski        $sSofficeExeName = "soffice.exe";
479*b1cdbd2cSJim Jagielski    }
480*b1cdbd2cSJim Jagielski
481*b1cdbd2cSJim Jagielski    my $sCurrentPath = cwd();
482*b1cdbd2cSJim Jagielski
483*b1cdbd2cSJim Jagielski    $lcl_sSofficeBinPath = "";
484*b1cdbd2cSJim Jagielski    $lcl_sSofficeBinName = "";
485*b1cdbd2cSJim Jagielski    readdirectory(${sPathToOffice}, ${sSofficeExeName}, \&searchSofficeBin);
486*b1cdbd2cSJim Jagielski
487*b1cdbd2cSJim Jagielski    chdir $sCurrentPath;
488*b1cdbd2cSJim Jagielski    cwd();
489*b1cdbd2cSJim Jagielski
490*b1cdbd2cSJim Jagielski    return ($lcl_sSofficeBinPath, $lcl_sSofficeBinName);
491*b1cdbd2cSJim Jagielski}
492*b1cdbd2cSJim Jagielski
493*b1cdbd2cSJim Jagielski# sub checkOfficeAlreadyInstalled($)
494*b1cdbd2cSJim Jagielski# {
495*b1cdbd2cSJim Jagielski#     my $sOfficePath = shift;
496*b1cdbd2cSJim Jagielski#
497*b1cdbd2cSJim Jagielski#     my $sCurrentPath = cwd();
498*b1cdbd2cSJim Jagielski#
499*b1cdbd2cSJim Jagielski#     $lcl_sSofficeBinPath = "";
500*b1cdbd2cSJim Jagielski#     my $sOldOfficePath = appendPath($sOfficePath, "program");
501*b1cdbd2cSJim Jagielski#     if ( -d "$sOldOfficePath" )
502*b1cdbd2cSJim Jagielski#     {
503*b1cdbd2cSJim Jagielski#         $sOldOfficePath = appendPath($sOldOfficePath, "soffice.bin");
504*b1cdbd2cSJim Jagielski#         if ( -e $sOldOfficePath )
505*b1cdbd2cSJim Jagielski#         {
506*b1cdbd2cSJim Jagielski#             return 1;
507*b1cdbd2cSJim Jagielski#         }
508*b1cdbd2cSJim Jagielski#     }
509*b1cdbd2cSJim Jagielski#     else
510*b1cdbd2cSJim Jagielski#     {
511*b1cdbd2cSJim Jagielski#         if (isWindowsEnvironment())
512*b1cdbd2cSJim Jagielski#         {
513*b1cdbd2cSJim Jagielski#             my $sThreeLayerOffice = appendPath($sOfficePath, "Sun");
514*b1cdbd2cSJim Jagielski#             $sThreeLayerOffice = appendPath($sThreeLayerOffice, "StarOffice 9");
515*b1cdbd2cSJim Jagielski#             $sThreeLayerOffice = appendPath($sThreeLayerOffice, "program");
516*b1cdbd2cSJim Jagielski#             $sThreeLayerOffice = appendPath($sThreeLayerOffice, "soffice.bin");
517*b1cdbd2cSJim Jagielski#
518*b1cdbd2cSJim Jagielski#             if ( -e "$sThreeLayerOffice" )
519*b1cdbd2cSJim Jagielski#             {
520*b1cdbd2cSJim Jagielski#                 return 1;
521*b1cdbd2cSJim Jagielski#             }
522*b1cdbd2cSJim Jagielski#         }
523*b1cdbd2cSJim Jagielski#         else
524*b1cdbd2cSJim Jagielski#         {
525*b1cdbd2cSJim Jagielski#             my $sThreeLayerOffice = appendPath($sOfficePath, "staroffice9");
526*b1cdbd2cSJim Jagielski#             $sThreeLayerOffice = appendPath($sThreeLayerOffice, "program");
527*b1cdbd2cSJim Jagielski#             $sThreeLayerOffice = appendPath($sThreeLayerOffice, "soffice.bin");
528*b1cdbd2cSJim Jagielski#             if ( -e "$sThreeLayerOffice" )
529*b1cdbd2cSJim Jagielski#             {
530*b1cdbd2cSJim Jagielski#                 return 1;
531*b1cdbd2cSJim Jagielski#             }
532*b1cdbd2cSJim Jagielski#         }
533*b1cdbd2cSJim Jagielski#     }
534*b1cdbd2cSJim Jagielski#
535*b1cdbd2cSJim Jagielski#     # soffice.bin not found in fast path
536*b1cdbd2cSJim Jagielski#     readdirectory($sOfficePath, "soffice.bin", \&searchSofficeBin);
537*b1cdbd2cSJim Jagielski#     chdir $sCurrentPath;
538*b1cdbd2cSJim Jagielski#     cwd();
539*b1cdbd2cSJim Jagielski#
540*b1cdbd2cSJim Jagielski#     if ( $lcl_sSofficeBinPath ne "" )
541*b1cdbd2cSJim Jagielski#     {
542*b1cdbd2cSJim Jagielski#         return 1;
543*b1cdbd2cSJim Jagielski#     }
544*b1cdbd2cSJim Jagielski#     return 0;
545*b1cdbd2cSJim Jagielski#     # this is the old check
546*b1cdbd2cSJim Jagielski#     # my $sOfficePathCheck = appendPath(${sPathToInstallOffice}, "program");
547*b1cdbd2cSJim Jagielski#     # $sOfficePathCheck = appendPath($sOfficePathCheck, "soffice.bin");
548*b1cdbd2cSJim Jagielski#     # if ( -e $sOfficePathCheck )
549*b1cdbd2cSJim Jagielski#     # {
550*b1cdbd2cSJim Jagielski#     #     return 1;
551*b1cdbd2cSJim Jagielski#     # }
552*b1cdbd2cSJim Jagielski#     #
553*b1cdbd2cSJim Jagielski#     # # check path system of tree layer office
554*b1cdbd2cSJim Jagielski#     # if ( isWindowsEnvironment() )
555*b1cdbd2cSJim Jagielski#     # {
556*b1cdbd2cSJim Jagielski#     #     $sOfficePathCheck = appendPath(${sPathToInstallOffice}, "Sun");
557*b1cdbd2cSJim Jagielski#     #     if ( ! -e $sOfficePathCheck)
558*b1cdbd2cSJim Jagielski#     #     {
559*b1cdbd2cSJim Jagielski#     #         # could be an OpenOffice.org
560*b1cdbd2cSJim Jagielski#     #         return 0;
561*b1cdbd2cSJim Jagielski#     #     }
562*b1cdbd2cSJim Jagielski#     #     else
563*b1cdbd2cSJim Jagielski#     #     {
564*b1cdbd2cSJim Jagielski#     #
565*b1cdbd2cSJim Jagielski#     #         $sOfficePathCheck = appendPath($sOfficePathCheck, "StarOffice 9");
566*b1cdbd2cSJim Jagielski#     #         $sOfficePathCheck = appendPath($sOfficePathCheck, "program");
567*b1cdbd2cSJim Jagielski#     #         $sOfficePathCheck = appendPath($sOfficePathCheck, "soffice.bin");
568*b1cdbd2cSJim Jagielski#     #         if ( -e $sOfficePathCheck )
569*b1cdbd2cSJim Jagielski#     #         {
570*b1cdbd2cSJim Jagielski#     #             return 1;
571*b1cdbd2cSJim Jagielski#     #         }
572*b1cdbd2cSJim Jagielski#     #         print "Error: There exist no Office, maybe an unsupported version?\n";
573*b1cdbd2cSJim Jagielski#     #     }
574*b1cdbd2cSJim Jagielski#     # }
575*b1cdbd2cSJim Jagielski#     # elsif ( isUnixEnvironment() )
576*b1cdbd2cSJim Jagielski#     # {
577*b1cdbd2cSJim Jagielski#     #     $sOfficePathCheck = appendPath(${sPathToInstallOffice}, "staroffice9");
578*b1cdbd2cSJim Jagielski#     #     $sOfficePathCheck = appendPath($sOfficePathCheck, "staroffice9");
579*b1cdbd2cSJim Jagielski#     #     $sOfficePathCheck = appendPath($sOfficePathCheck, "program");
580*b1cdbd2cSJim Jagielski#     #     $sOfficePathCheck = appendPath($sOfficePathCheck, "soffice.bin");
581*b1cdbd2cSJim Jagielski#     #     if ( -e $sOfficePathCheck )
582*b1cdbd2cSJim Jagielski#     #     {
583*b1cdbd2cSJim Jagielski#     #         return 1;
584*b1cdbd2cSJim Jagielski#     #     }
585*b1cdbd2cSJim Jagielski#     #     print "Error: There exist no Office, maybe an unsupported version?\n";
586*b1cdbd2cSJim Jagielski#     # }
587*b1cdbd2cSJim Jagielski#     # else
588*b1cdbd2cSJim Jagielski#     # {
589*b1cdbd2cSJim Jagielski#     #     print "Error: There exist no Office, maybe an unsupported version?\n";
590*b1cdbd2cSJim Jagielski#     # }
591*b1cdbd2cSJim Jagielski#     # return 0;
592*b1cdbd2cSJim Jagielski# }
593*b1cdbd2cSJim Jagielski
594*b1cdbd2cSJim Jagielski1;
595