delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1996/12/10/13:20:38

From: richardd AT cix DOT compulink DOT co DOT uk (Richard Donkin)
Subject: Pathname conversion script
10 Dec 1996 13:20:38 -0800 :
Sender: daemon AT cygnus DOT com
Approved: cygnus DOT gnu-win32 AT cygnus DOT com
Distribution: cygnus
Message-ID: <memo.413773.cygnus.gnu-win32@cix.compulink.co.uk>
Reply-To: richardd AT cix DOT compulink DOT co DOT uk
Original-To: gnu-win32 AT cygnus DOT com
Original-Cc: richardd AT cix DOT compulink DOT co DOT uk
Original-Sender: owner-gnu-win32 AT cygnus DOT com

Since a few people showed interest, I am posting 'path2win', a perl script 
that converts Gnu-Win32 pathnames into ordinary Win32 pathnames.  I won't 
post any other scripts unless people are interested.  Typical usage is:

    win32prog `path2win /gnu/path //d/another/gnu/path`
    
which results in (assuming / corresponds to c: and //d to d:)

   win32prog c:\gnu\path d:\another\gnu\path
    
If a program can handle (and prefers) c:/foo/bar type paths, specify 
'path2win -u' for this format.

The main benefit is that you can keep all of your variables in Gnu-Win32 
format and use variable/filename completion in bash right up to the point 
that you invoke the Win32 program.  The problem is that perl can be a bit 
slow, but it would be very easy to rewrite this in sed.

The preamble will work on any Perl script to let you invoke Perl/Win32 
scripts from the bash command line.  The #! line is ignored since 
bash/Gnu-Win32 does not support it, though Perl will pick up any switches.  

Richard
--
richardd AT cix DOT compulink DOT co DOT uk                http://www.inside-edge.co.uk/
Inside Edge Consultancy           Client/Server and Internet Applications
PGP key from:  pgp-public-keys AT keys DOT pgp DOT net  -or-  http://www.four11.com/


#!/usr/bin/perl -w

# -------------- Preamble to simulate '#!'

# Shell mode: Eval is needed to run Perl under Gnu-Win32 (which 
# does not support #!).  Perl will pick up any switches from 
# the '#!' line.
eval 'exec perl -S $0 ${1+"$@"}' 
        if 0;

# Perl mode: Get rid of any -S switch - script cannot use -S as
# one of its own switches
shift if ($#ARGV >= 0 and $ARGV[0] eq '-S');

# -------------- Main program

# path2win: convert Gnu-Win32 pathnames to Win32 pathnames, 
# with drive letters and backslashes.  To retain /'s for 
# Unix-oriented Win32 tools such as Vim for Win32, use the '-u' option.
#
# Usage: path2win [-u] path ...
#
# Version 1.0, 10th Dec 1996    richardd AT cix DOT compulink DOT co DOT uk
#
# If you update this script, please email me your version!
#
# Assumes that /[a-z]/ or //[a-z]/ maps onto a drive letter
#
# Tested on Perl 5.001m build 110 for Win32 under Gnu-Win32 B17 on Win95,
# but should work on other platforms.  Note that Gnu-Win32 B16's pathname
# support is different to B17.

# *** You will need to edit this line if C: is not mounted as '/'
$rootdrive = "c:";

# Work properly with Gnu-Win32 and back quotes
binmode STDOUT;

if ($ARGV[0] eq "-u") { 
    $unixmode = 1; shift;
}

foreach $gnupath (@ARGV) {
    $_ = $gnupath;

    # Convert //D to d:
    s# ^//([a-z])$ #\L$1:/#xi ;

    # Convert //D/ to d:
    s# ^//([a-z])/ #\L$1:/#xi ;

    # Convert /D to d:
    s# ^/([a-z])$ #\L$1:/#xi ;

    # Convert /D/ to d:
    s# ^/([a-z])/ #\L$1:/#xi ;

    # Convert d: alone to d:/
    s# ^([a-z]:)$ #\L$1/#xi ;

    # Convert / to c:/
    s# ^/  #${rootdrive}/#x ;

    # Convert /'s to \'s unless in Unix mode
    s# / #\\#gx unless $unixmode;

    print; print "\n";
}

-
For help on using this list, send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019