Add function prototypes to wineconf
Francois Gouget
fgouget at free.fr
Fri Oct 22 11:21:32 CDT 2004
This tool generates a Wine configuration containing [Drive] sections!
In other words it's pretty outdated. It was last updated almost 18
months ago!
Is it even worth keeping? Maybe the best thing to do is to do a cvs
delete on it?
In case we want to keep it I added function prototypes. However I did
not change its behavior any further. On my machine it runs but perl
issues a couple of warnings... the same one it was issuing before I ever
touched it.
Changelog:
* tools/wineconf
Add function prototypes.
Change the way functions are called and their declaration order so
perl can check the prototypes.
--
Francois Gouget fgouget at free.fr http://fgouget.free.fr/
"Lotto: A tax on people who are bad at math." -- unknown
"Windows: Microsoft's tax on computer illiterates." -- WE7U
-------------- next part --------------
Index: tools/wineconf
===================================================================
RCS file: /var/cvs/wine/tools/wineconf,v
retrieving revision 1.16
diff -u -r1.16 wineconf
--- tools/wineconf 2 Apr 2003 01:23:43 -0000 1.16
+++ tools/wineconf 22 Oct 2004 16:19:25 -0000
@@ -60,16 +60,7 @@
use strict;
use Carp;
-GetOptions('windir=s', 'sysdir=s', 'thorough', 'debug:s', 'inifile=s') || &Usage;
-
-print "WINE REGISTRY Version 2\n";
-print ";; All keys relative to \\\\Machine\\\\Software\\\\Wine\\\\Wine\\\\Config\n\n";
-&ReadFSTAB();
-&FindWindowsDir();
-&ReadAutoexecBat();
-&StandardStuff();
-
-sub Usage {
+sub Usage() {
print "Usage: $0 <options>\n";
# print "-fstab <filename> Location of alternate fstab file\n";
print "-windir <filename> Location of windows dir in DOS space\n";
@@ -84,7 +75,61 @@
exit(0);
}
-sub ReadFSTAB {
+# Returns 1 if the device is mounted; -1 if mount check failed; 0 if not
+# mounted.
+# This code is Linux specific, and needs to be broadened.
+sub IsMounted($) {
+ my $Device = shift;
+ if (-d "/proc") {
+ if (-e "/proc/mounts") {
+ open(MOUNTS, "/proc/mounts") ||
+ (warn "Cannot open /proc/mounts, although it exists\n" &&
+ return -1);
+ while(<MOUNTS>) {
+ if (/^$Device/) {
+ return 1; # Tested 1.4
+ }
+ }
+ return 0; # Tested 1.4
+ }
+ }
+ return -1;
+}
+
+sub RegisterDrive($$) {
+ my($DOSdrive, $Drive) = @_;
+ $::DOS2Unix{$DOSdrive} = $Drive;
+ $::Device2DOS{$Drive->[0]} = $DOSdrive;
+ $::MntPoint2DOS{$Drive->[1]} = $DOSdrive;
+ $::DOS2MntPoint{$DOSdrive} = $Drive->[1];
+ $::DOS2Device{$DOSdrive} = $Drive->[0];
+}
+
+sub byDriveOrder() {
+ my($DeviceA) = $a->[0];
+ my($DeviceB) = $b->[0];
+
+ # Primary drives come first, logical drives last
+ # DOS User's Guide (version 6) p. 70, IBM version.
+ # If both drives are the same type, sort alphabetically
+ # This makes drive a come before b, etc.
+ # It also makes SCSI drives come before IDE drives;
+ # this may or may not be right :-(
+ my($Alogical, $Blogical);
+ if (substr($DeviceA, 3, 1) >= 5) { $Alogical++; }
+ if (substr($DeviceB, 3, 1) >= 5) { $Blogical++; }
+ if ($Alogical && !$Blogical) { return -1; }
+ elsif ($Blogical && !$Alogical) { return 1; }
+ else { return ($DeviceA cmp $DeviceB); }
+}
+
+sub byCdOrder() {
+ my($DeviceA) = $a->[0];
+ my($DeviceB) = $b->[0];
+ $DeviceA cmp $DeviceB;
+}
+
+sub ReadFSTAB() {
$::opt_f = $::opt_f ? $::opt_f : '/etc/fstab';
open(FSTAB, $::opt_f) || die "Cannot read $::opt_f\n";
while(<FSTAB>) {
@@ -129,8 +174,8 @@
print "\"Type\" = \"hd\"\n";
print "\"Filesystem\" = \"$FileSys\"\n";
print "\n";
- &RegisterDrive($MagicDrive, $FatDrive);
- if(!&IsMounted($FatDrive->[0])) {
+ RegisterDrive($MagicDrive, $FatDrive);
+ if(!IsMounted($FatDrive->[0])) {
warn "WARNING: DOS Drive $MagicDrive (" . $FatDrive->[0] .
") is not mounted\n";
}
@@ -146,7 +191,7 @@
print "\"Device\" = \"$Device\"\n";
print "\"Filesystem\" = \"$FileSys\"\n";
print "\n";
- &RegisterDrive($MagicDrive, $CdromDrive);
+ RegisterDrive($MagicDrive, $CdromDrive);
$MagicDrive++;
}
foreach my $UnixDrive (@::UnixDrives) {
@@ -161,7 +206,83 @@
}
}
-sub FindWindowsDir {
+# FNunix = ToUnix(FNdos);
+# Converts DOS filenames to Unix filenames, leaving Unix filenames
+# untouched.
+sub ToUnix($) {
+ my $FNdos = shift;
+ my $FNunix;
+
+ # Initialize tables if necessary.
+ if (!%::DOS2Unix) { ReadFSTAB(); }
+
+ # Determine which type of conversion is necessary
+ if ($FNdos =~ /^([A-Z])\:(.*)$/) { # DOS drive specified
+ $FNunix = $::DOS2MntPoint{$1} . "/$2";
+ }
+ elsif ($FNdos =~ m%\\%) { # DOS drive not specified, C: is default
+ $FNunix = $::DOS2MntPoint{"C"} . "/$FNdos";
+ }
+ else { # Unix filename
+ $FNunix = $FNdos;
+ }
+ 1 while ($FNunix =~ s%\\%/%); # Convert \ to /
+ $FNunix =~ tr/A-Z/a-z/; # Translate to lower case
+ 1 while ($FNunix =~ s%//%/%); # Translate double / to /
+ return $FNunix;
+}
+
+# FNdos = ToDos(FNunix)
+# Converts Unix filenames to DOS filenames
+sub ToDos($) {
+ my $FNunix = shift;
+ my(@MntList) = keys %::MntPoint2DOS;
+ my ($TheMntPt, $FNdos);
+
+ foreach my $MntPt (@MntList) { # Scan mount point list to see if path matches
+ if ($FNunix =~ /^$MntPt/) {
+ $TheMntPt = $MntPt;
+ last;
+ }
+ }
+ if (!$TheMntPt) {
+ Carp("ERROR: $FNunix not found in DOS directories\n");
+ exit(1);
+ }
+ $FNdos = $FNunix;
+ $FNdos =~ s/^$TheMntPt//;
+ $FNdos = $::MntPoint2DOS{$TheMntPt} . ":" . $FNdos;
+ 1 while($FNdos =~ s%/%\\%);
+ return $FNdos;
+}
+
+sub InsertDefaultFile($$) {
+ my ($fileName, $tag) = @_;
+ my $state = 0;
+
+ if (open(DEFFILE, "$fileName")) {
+ while (<DEFFILE>) {
+ $state = 0 if ($state == 1 && $_ =~ /^[ \t]*\#/o && index($_, "[/$tag]") >= 0);
+ print $_ if ($state == 1);
+ $state = 1 if ($state == 0 && $_ =~ /^[ \t]*\#/o && index($_, "[$tag]" ) >= 0);
+ }
+ close(DEFFILE);
+ } else {
+ print STDERR "Cannot read $fileName\n";
+ }
+}
+
+sub marshall($) {
+ my $s = $_[0];
+ $s =~ s/\\/\\\\/g;
+ return "\"$s\"";
+}
+
+sub byFileAge() {
+ -M $a <=> -M $b;
+}
+
+sub FindWindowsDir() {
my($MagicDrive) = 'C';
my(@FATD)=@::FatDrives;
my(@wininis) = ();
@@ -172,7 +293,7 @@
$::opt_thorough++;
}
if ($::opt_windir) {
- $winini = &ToUnix($::opt_windir);
+ $winini = ToUnix($::opt_windir);
if (!-e $winini) {
die "ERROR: Specified winini file does not exist\n";
}
@@ -209,49 +330,19 @@
else {
die "ERROR: None of -windir, -fast, or -thorough set\n";
}
- $::windir = &ToDos(dirname($winini));
+ $::windir = ToDos(dirname($winini));
print "[wine]\n";
- print "\"windows\" = ", &marshall ($::windir), "\n";
+ print "\"windows\" = ", marshall ($::windir), "\n";
if ($::opt_sysdir) {
- print "\"system\" = ", &marshall ($::opt_sysdir), "\n";
+ print "\"system\" = ", marshall ($::opt_sysdir), "\n";
}
else {
- print "\"system\" = ", &marshall ("$::windir\\SYSTEM"), "\n";
+ print "\"system\" = ", marshall ("$::windir\\SYSTEM"), "\n";
}
}
-# Returns 1 if the device is mounted; -1 if mount check failed; 0 if not
-# mounted.
-# This code is Linux specific, and needs to be broadened.
-sub IsMounted {
- my($Device) = @_;
- if (-d "/proc") {
- if (-e "/proc/mounts") {
- open(MOUNTS, "/proc/mounts") ||
- (warn "Cannot open /proc/mounts, although it exists\n" &&
- return -1);
- while(<MOUNTS>) {
- if (/^$Device/) {
- return 1; # Tested 1.4
- }
- }
- return 0; # Tested 1.4
- }
- }
- return -1;
-}
-
-sub RegisterDrive {
- my($DOSdrive, $Drive) = @_;
- $::DOS2Unix{$DOSdrive} = $Drive;
- $::Device2DOS{$Drive->[0]} = $DOSdrive;
- $::MntPoint2DOS{$Drive->[1]} = $DOSdrive;
- $::DOS2MntPoint{$DOSdrive} = $Drive->[1];
- $::DOS2Device{$DOSdrive} = $Drive->[0];
-}
-
-sub ReadAutoexecBat {
- if (!%::DOS2Unix) { &ReadFSTAB; }
+sub ReadAutoexecBat() {
+ if (!%::DOS2Unix) { ReadFSTAB(); }
my($DriveC) = $::DOS2MntPoint{"C"};
$DriveC =~ s%/$%%;
my($path);
@@ -310,7 +401,7 @@
print STDERR "DEBUG (path): @pathdirs\n";
}
foreach my $pathdir (@pathdirs) {
- if (-d &ToUnix($pathdir)) {
+ if (-d ToUnix($pathdir)) {
if ($::DOSpathdir{$pathdir}++) {
warn "Ignoring duplicate DOS path entry $pathdir\n";
}
@@ -326,14 +417,14 @@
warn "exist\n";
}
}
- print "\"path\" = ", &marshall (join (";", @::DOSpathlist)), "\n";
+ print "\"path\" = ", marshall (join (";", @::DOSpathlist)), "\n";
}
else {
# Code status: tested 1.4
warn "WARNING: Making assumptions for PATH\n";
warn "Will scan windows directory for executables and generate\n";
warn "path from that\n";
- my $shellcmd = 'find ' . &ToUnix($::windir) . " -iregex '" .
+ my $shellcmd = 'find ' . ToUnix($::windir) . " -iregex '" .
'.*\.\(exe\|bat\|com\|dll\)' . "' -print";
if ($::opt_debug) {
print STDERR "DEBUG: autoexec.bat search command:\n $shellcmd\n";
@@ -344,17 +435,17 @@
}
foreach my $command (@::DOScommand) {
$command =~ s%[^/]+$%%;
- $::DOSexecdir{&ToDos($command)}++;
+ $::DOSexecdir{ToDos($command)}++;
}
print "\"path\" = " .
- &marshall (join(";",
+ marshall (join(";",
grep(s%\\$%%,
sort {$::DOSexecdir{$b} <=> $::DOSexecdir{$a}}
(keys %::DOSexecdir)))) . "\n";
}
- if ($::DOSenv{"temp"} && -d &ToUnix($::DOSenv{"temp"})) {
- print "\"temp\" = ", &marshall ($::DOSenv{"temp"}), "\n";
+ if ($::DOSenv{"temp"} && -d ToUnix($::DOSenv{"temp"})) {
+ print "\"temp\" = ", marshall ($::DOSenv{"temp"}), "\n";
}
else {
my $TheTemp;
@@ -363,129 +454,39 @@
warn "Looking for \\TEMP and then \\TMP on every drive\n";
# Watch out .. might pick CDROM drive :-)
foreach my $DOSdrive (keys %::DOS2Unix) {
- my $tmp = &ToUnix("$DOSdrive:\\temp");
+ my $tmp = ToUnix("$DOSdrive:\\temp");
if (-d $tmp) { $TheTemp = "$DOSdrive:\\temp"; last; }
- $tmp = &ToUnix("$DOSdrive:\\tmp");
+ $tmp = ToUnix("$DOSdrive:\\tmp");
if (-d $tmp) { $TheTemp = "$DOSdrive:\\tmp"; last; }
}
$TheTemp = '/tmp' if (!$TheTemp && -d '/tmp');
if ($TheTemp) {
warn "Using $TheTemp\n";
- print "\"temp\" = ", &marshall ($TheTemp), "\n";
+ print "\"temp\" = ", marshall ($TheTemp), "\n";
}
else {
warn "Using C:\\\n";
- print "\"temp\" = ", &marshall ("C:\\"), "\n";
+ print "\"temp\" = ", marshall ("C:\\"), "\n";
}
}
print "\n";
}
-# FNunix = &ToUnix(FNdos);
-# Converts DOS filenames to Unix filenames, leaving Unix filenames
-# untouched.
-sub ToUnix {
- my($FNdos) = @_;
- my($FNunix);
-
- # Initialize tables if necessary.
- if (!%::DOS2Unix) { &ReadFSTAB; }
-
- # Determine which type of conversion is necessary
- if ($FNdos =~ /^([A-Z])\:(.*)$/) { # DOS drive specified
- $FNunix = $::DOS2MntPoint{$1} . "/$2";
- }
- elsif ($FNdos =~ m%\\%) { # DOS drive not specified, C: is default
- $FNunix = $::DOS2MntPoint{"C"} . "/$FNdos";
- }
- else { # Unix filename
- $FNunix = $FNdos;
- }
- 1 while ($FNunix =~ s%\\%/%); # Convert \ to /
- $FNunix =~ tr/A-Z/a-z/; # Translate to lower case
- 1 while ($FNunix =~ s%//%/%); # Translate double / to /
- return $FNunix;
-}
-
-# FNdos = &ToDOS(FNunix)
-# Converts Unix filenames to DOS filenames
-sub ToDos {
- my($FNunix) = @_;
- my(@MntList) = keys %::MntPoint2DOS;
- my ($TheMntPt, $FNdos);
-
- foreach my $MntPt (@MntList) { # Scan mount point list to see if path matches
- if ($FNunix =~ /^$MntPt/) {
- $TheMntPt = $MntPt;
- last;
- }
- }
- if (!$TheMntPt) {
- Carp("ERROR: $FNunix not found in DOS directories\n");
- exit(1);
- }
- $FNdos = $FNunix;
- $FNdos =~ s/^$TheMntPt//;
- $FNdos = $::MntPoint2DOS{$TheMntPt} . ":" . $FNdos;
- 1 while($FNdos =~ s%/%\\%);
- return $FNdos;
-}
-
-sub InsertDefaultFile {
- my ($fileName, $tag) = @_;
- my $state = 0;
-
- if (open(DEFFILE, "$fileName")) {
- while (<DEFFILE>) {
- $state = 0 if ($state == 1 && $_ =~ /^[ \t]*\#/o && index($_, "[/$tag]") >= 0);
- print $_ if ($state == 1);
- $state = 1 if ($state == 0 && $_ =~ /^[ \t]*\#/o && index($_, "[$tag]" ) >= 0);
- }
- close(DEFFILE);
- } else {
- print STDERR "Cannot read $fileName\n";
- }
-}
-
-sub marshall {
- my ($s) = @_;
- $s =~ s/\\/\\\\/g;
- return "\"$s\"";
-}
-
-
-sub StandardStuff {
+sub StandardStuff() {
if (!$::opt_inifile) {
- &InsertDefaultFile("./wine.ini", "wineconf");
+ InsertDefaultFile("./wine.ini", "wineconf");
} else {
- &InsertDefaultFile($::opt_inifile, "wineconf");
+ InsertDefaultFile($::opt_inifile, "wineconf");
}
}
-sub byFileAge {
- -M $a <=> -M $b;
-}
-
-sub byDriveOrder {
- my($DeviceA) = $a->[0];
- my($DeviceB) = $b->[0];
+### Main
- # Primary drives come first, logical drives last
- # DOS User's Guide (version 6) p. 70, IBM version.
- # If both drives are the same type, sort alphabetically
- # This makes drive a come before b, etc.
- # It also makes SCSI drives come before IDE drives;
- # this may or may not be right :-(
- my($Alogical, $Blogical);
- if (substr($DeviceA, 3, 1) >= 5) { $Alogical++; }
- if (substr($DeviceB, 3, 1) >= 5) { $Blogical++; }
- if ($Alogical && !$Blogical) { return -1; }
- elsif ($Blogical && !$Alogical) { return 1; }
- else { return ($DeviceA cmp $DeviceB); }
-}
+GetOptions('windir=s', 'sysdir=s', 'thorough', 'debug:s', 'inifile=s') || Usage;
-sub byCdOrder {
- my($DeviceA) = $a->[0];
- my($DeviceB) = $b->[0];
- $DeviceA cmp $DeviceB;
-}
+print "WINE REGISTRY Version 2\n";
+print ";; All keys relative to \\\\Machine\\\\Software\\\\Wine\\\\Wine\\\\Config\n\n";
+ReadFSTAB();
+FindWindowsDir();
+ReadAutoexecBat();
+StandardStuff();
More information about the wine-patches
mailing list