TODO

THINK about changing the syntax to allow non-quoted balanced ()'s within shell execution blocks, "$(...)"
* non-balanced parens must still be quote protected, as will all redirection characters "|<>" and seperators "&"

DOCUMENT CHANGES

Note: % issues for command line and variation between TCC and CMD shells
[EG]
====<cut> [TCC]
C:\...\git\aws
>echo %x
ECHO is OFF

C:\...\git\aws
>echo 10%x10
10

C:\...\git\aws
>echo 10%%x10
10%x10

C:\...\git\aws
>echo 10^%x10
10%x10

C:\...\git\aws
>echo "10^%x10"
"10^%x10"

C:\...\git\aws
>echo "10%%x10"
"10%x10"
====<cut> [TCC end]
====<cut> [CMD]
C:\...\git\aws
>cmd
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Users\Roy\Documents\Projects\git\aws
>echo "10%%x10"
"10%%x10"

C:\Users\Roy\Documents\Projects\git\aws
>echo 10%%x10
10%%x10

C:\Users\Roy\Documents\Projects\git\aws
>echo 10%x10
10%x10
====<cut> [CMD end]

TCC/CMD standardize
:: %% => % [both in and out of strings]
:: all special characters [ <>|^ ] should be double-quoted

see perl's notes RE:command line usage from cmd/Win32: URLref: http://www.perl.com/doc/manual/html/Porting/README.win32.html#item_Using

Notify Module::Build folks about extensively customized Build.PL used in this distribution.
Notify Module::Build folks RE: BUGS found: (1) BUGs in ACTION_realclean (as of v0.30), (2) my_varchname problems with perl v5.10 in (v0.30) [## BUGFIX: send to Module::Build::PPMMaker and PPM] [bug copied and fixed from PPMMaker.pm]
Notify ExtUtils::Manifest folks RE: BUGS found: (1) BUG in maniskip (as of v1.54)

NOTE: Csharp usability though msscript.ocx
	* give steps to add reference and compile example code (from perl-in-cs tests)
	
NOTE: Need to occasionally check build/test/install cycle with MSVC (vcvars, ...).

BUILDs

use 'b' for builds (calls build+nant) to make sure build.pl is up to date.

SIGNING

build sign
cpansign => verifies SIGNATURE	
build clean		(DOESN'T remove META info or MANIFEST)
cpansign => SUCCEEDS
erase MANIFEST, META.yml, and/or Makefile.PL
cpansign => fails (missing file errors)
build distmeta
cpansign => SUCCEEDS
build realclean (removes SIGNATURE)
cpansign verify => fails, attempts to create a new MANIFEST and SIGNATURE

'cpansign verify' will also work in any expanded distributions now as well.
NOTE: 'cpansign' will fail _in the main build directory_ if a distribution is left expanded in that build directory (eg, 'tar xvf Win32-CommandLine-0.3.4.155522.tar.gz') because it doesn't understand the expanded MANFEST.SKIP format).
BUT: build clean => cpansign will again verify correctly.

POSSIBLE x.bat name change

? xcl.bat
? xc.bat
? xx.bat (eXpand and eXecute)


TODO for BUILD

* customize "install" action for this installation to check for perl alias using "x" (doskey for cmd.exe, alias for 4nt/tcc/tcmd) [ a specially modified build.PL based on the current build.PL - ?? an addition to .config vs a diff on the base custom build.PL somehow?? ]

INSTALLATION

ADD NOTE to installation that any perl alias using x.bat must be deleted/unaliased before installation of Win32-CommandLine to allow x.bat to be updated (should be rare).
I don't see any way around this as x.bat will be wrapping any perl call ... would need a hand off to a non-wrapped execution with termination of the current process before the unwrapped execution gets to changing x.bat.

if perl is aliased to 'x perl ...' then installs will fail with:
	"ppm install failed: Can't rename as C:/Perl/site/bin/x.bat.ppmbak: Permission denied"	{xx.bat is in-use}
	_or_
	"ppm install failed: Can't save to C:/Perl/site/lib/auto/Win32/CommandLine/CommandLine.dll.ppmbak since it exists" {CommandLine.dll was in-use and not removed}
because x.bat is in use and can't be renamed
ppm is a batch file which uses perl internally ... so an alias to 'x perl ...' will keep x.bat in use while executing the install command

workaround: unalias perl
re-run "build install" or "ppm install Win32-Command..."

* ADD this notation to the suggestion to alias perl to ... 
	- maybe, in the future, perl could be compiled with this module in mind to avoid the need to alias it...

4NT/TCC/TCMD

Note % issue:

for cmd.exe: 	%<any> => %<any> if it doesn't match a variable; %% => %%
for 4NT: 		%<any> => <null> if it doesn't match a variable; %% => %

x.bat is designed not to reinterpret 4NT %'s otherwise %%%% would be required for each % in the final command line
	

EXAMPLES

::cmd.exe
doskey to=x -S cd ~$*
::4nt/tcc/tcmd
alias to=x -S cd ~%%$


::
doskey cd=x -S cd $* ([4nt] alias cd=x -S cd ~%%$ -?? *cd internally to prevent re-aliasing?)

voila, cd with expanding arguments (better term here?)
although it's not as snappy because the perl interpreter loads and executes for every 'cd'. so, I would use:

doskey to=x -S cd $*

although since we're using a seperate command, I like to have an optional initial ~: so I created to.bat (in the eg directory).

normal cd behavior with extra behavior when used as to

set ~p=c:\documents and settings\USERX\My Documents\Projects
set ~finance=c:\documents and settings\USERY\My Documents\finance
set ~w=%windir

[initial tildes optional]

to ~p
to p
to administrator
to finance



TESTS

in order to test x.bat:

x -S cd ~
x -S cd ~1
x perl -e "print `x -e t/*.t`"		NOTE: x perl -e "print `x -e t\*.t`" prints "t*.t" as output (because the \* => * ... need to check and fix this...
											CHECK this WITH: x perl -e "print `x -e t\*.t`" vs x perl -e "print `x -e t/*.t`"
											==> it's eaten by PERL not reinterpretation => so this is OK (NOT FIX NEEDED)
x perl -e "use Env::Path qw(PATH); print join(qq{\n},PATH->Whence('wh*'));"
[SHOULD FAIL <unless aliased>] 		perl -e 'print 10'
[SUCCEEDS with X] 					x perl -e 'print 10'
[ADD redirection character tests] 	
	x echo test">"this
	x echo test ">" * 'true"test'
x -a edit $(which which)
x edit $(which which)
x -e //sethra/c$/*
x -e \\sethra\c$\*
x -e \\sethra/c$\*
x -e //sethra\c$\*

$version_output = `ver`;
x -e set os_version=$(ver)	=> expect "set os_version=".$version_output

to ~
to 1
to p
to
to administrator
to ~roy


ADD unit tests for anything in bin/ and eg/ if possible.
ADD hg versioning for anything in bin/ and eg/.
ADD nant build steps for anything in extras/ with copy from original dirs and fail/error if not found (either source or target).


TESTS

xx 	== eXpand command line and eXecute
	xx -S	==>	source expanded command line (eg, as if typed in to command line directly)
	xx -S -o ?? source/execute output of expanded command line
xo	== eXecute Output (execute output of remaining command line as source
	[NOT] xo -S	==> source output == non-sourcing of output is not really needed
	
	
	
xx TESTS

NOTES

{exout x echo set z=$(ver)} == {x -S set z=$(ver)}
?? add "x -O <...>" or "x -SO <...>" to do sourcing of command _output_ instead/in addition to exout/xo/so?

NEW UTILITIES

quote
	-auto == default ($^O = MSWin => dosify o/w unixify)
	-dosify|dos|d
	-unixify|unix|u|bash|b

ADD to documentation

build sign => signs current build contents (can check with 'cpansign')
