Take Command (also 4DOS and 4NT)
On my computer, I prefer to work from the command line. Though I am
comfortable with a mouse and a graphical user interface (or GUI), for many
things the keyboard is just much faster.
Not long after I got my first MS-DOS computer, I ran across "4DOS", a
replacement for the DOS command line with many additional variables, options,
and features. It was a superset of the MS-DOS command interpreter (then,
"command.com"): it had all the commands and features of MS-DOS, plus many
more. 4DOS, created by JP Software, was terrific for writing batch files.
Old-timers who used Norton Utilities may have known it as NDOS, which was
really 4DOS rebranded for Norton.
As MS-DOS matured, it developed into Microsoft Windows (with a 16-bit
operating system), then Windows NT (with a 32-bit operating system), and
other versions (e.g., Windows 95, 98, 2000, etc.). So the 32-bit
"CMD.EXE" was unveiled to replace the older "COMMAND.COM". CMD had more
flexibility than COMMAND.COM, though it has been enhanced across the
years (Windows XP, Windows 7, Windows 8, etc.).
Soon after Windows NT came out, JP Software released 4NT.EXE, a
replacement for CMD.EXE. Then they looked for a better way to integrate the
GUI features familiar to Windows users (navigation tree, tiled windows,
drag-and-drop, etc.) with their command-line shell, 4NT.
What's a shell, you ask? A shell is a hard covering that protects
the kernel or sealife inside. In computer lingo, a shell is the "user
interface" that lets you send keyboard command and mouse movements to the
kernel, which you can never see. You only see the shell. Some shells look and
feel different than others, but all of them offer a way to move around the
computer, accessing its memory, environment, etc. Shells can be text-mode
interfaces, like COMMAND, CMD, 4DOS, Bourne shell, Korn shell (ksh), etc.
Shells can also be graphical interfaces to "desktop environments," such as
Microsoft Windows, the Macintosh Finder, KDE, GNOME, etc.
JP Software developed a new shell, "Take Command", a powerful work
environment that includes both the text-mode interface, TCC, and an
Explorer-like graphical interface with tabs, dockable windows, and much more.
It is not a replacement for all of Windows, but it does provide a rich
avenue to "doing things" for users who need more than CMD has to offer, but
something less intimidating than PowerShell.
The new Take Command retained nearly all the options, variables, and
syntax introduced in 4DOS and 4NT. So when you see references to 4DOS or 4NT
in this section, remember that scripts that run under 4DOS or 4NT will almost
always will run unmodified under TCC and Take Command.
Things I wrote for TCC (or 4DOS, 4NT, etc.)
-
getopts121.zip
- Of all the things I've written for 4DOS/Take Command, I consider this the
most important and most useful for batch scripting. Details below:
getopts is a batch file that enables case-sensitive switch parsing under Take
Command and its predecessors (4DOS, 4NT, TCC), in a manner identical to the
behavior of getopts under Unix.
FEATURES SUPPORTED:
* Position-independent switch clustering
"-a -b -c" equals "-ac -b" equals "-c -ba" equals "-bac".
* 3 types of switches:
Character switches, String switches, and Numeric options.
* Case-sensitive character switches
Character switches are one character (a-z or A-Z); they NEVER
take an argument or parameter. They are case-sensitive, meaning
that "-d" and "-D" are seen as different switches.
* Case-sensitive string switches
String switches are one character (a-z or A-Z); they MUST take
an argument or parameter. Thus, -f and -F are DIFFERENT switches
whose arguments can be passed as '-fhello' or '-F goodbye'.
Multi-word arguments are permitted if they are enclosed in double
quotes, such as '-g "one or more words"'.
* Numeric options
Numeric options may be permitted or forbidden. If permitted,
-123 will set N=123, and --456 will set N=-456.
* Switches and argument removed from the command tail
Under GETOPTS, all switches and switch parameters on the command
line are placed into appropriate environment variables. The
switches are then removed from the command tail. If the batch
file executes any external utilities, the utility's own option
syntax can be used (e.g., /opt1, opt2:opt3, word=opt4, etc.).
* Halt on invalid options
The parent batch file contains a list of permissible letters for
character and string options, and tells whether numeric options
are allowed. The GETOPTS batch file first checks the list itself
and then checks each option on the command tail for validity.
GETOPTS will halt if it detects invalid options, but it can be
set to "pass" invalid options through instead.
* Switch termination
To permit processing filenames which begin with leading
hyphens, the switch "--" terminates switch processing, and the
rest of the command tail is returned untouched to the parent
batch file. Further, a single hyphen "-" by itself is passed
without modification to the command tail.
If getopts.btm is present on the PATH, just a few lines need to be added to
your batch file to enable this position-independent parsing. Note that several
of the scripts below require getopts to work.
-
archives
$ archives --help
Usage: archives [d:\dir]
Simple "dir" selector to display various archive
forms in specified orcurent directory. Archive types:
arc, arj, lbr, lzh, zip, zoo, 7z, bz2, xz
-
commify.zip
$ commify --help
Usage: commify [-options] [file1 file2 ...]
Add commas to sequences of 4 consecutive integers, but only to the
non-decimal portion of a string of numbers
Options:
-? Display this help message
-h Display this help message
-d In the decimal portion, insert an underscore after every 3 digits
-
areacode.zip
- basic search for area codes:
$ areacode --help
AREACODE - Show North American area codes
At least 1 argument required (Default: case-insensitive regex match)
Usage: areacode [-options] {number|city|state-abbrev}
Options:
-i case-sensitive and \<whole-word\> search
-? display this help message
Sample usage:
areacode 773 - displays area code for Chicago
areacode boston - displays area code for Boston
areacode VT - displays area code for Vermont
areacode "\<51" - display all area codes beginning with '51'
Phone areacode db last updated on 2011-08-10
Latest versions are at http://savannah.gnu.org/projects/miscfiles/
-
diacriticals
- a very simple batch file that only shows help and nothing more.
This file is matched to Code Page 457 (OEM codepage), but will look
wrong if viewed with CP1252 (Windows-ANSI codepage) or in a browser.
$ diacriticals
@echo off
TEXT
Dec Ch Words containing diacritical characters HTML char
=== == ======================================= =========
129 ü Düsseldorf, Tübingen, Der Führer, gemütlich, natürlich ü
130 é attaché, blasé, bon appétit, cliché, communiqué, détente, é
décolleté, entrée, exposé, fiancé (m), fiancée (f), née,
outré, passé, protégé, résumé, risqué, touché, vive la différence
131 â château, coup de grâce, papier-mâché â
132 ä doppelgänger, fräulein ä
133 à déjà vu, vis-à-vis, à la carte, à la mode, voilà! à
134 å ångström å
135 ç façade, garçon, Provençal ç
136 ê tête-à-tête, bête noire, raison d'être ê
137 ë Noël ë
138 è pièce de résistance, cause célèbre, père è
139 ï naïve, naïveté, opïum ï
143 Å Århus (or Aarhus), Dk; Å (angstrom, 0.1 nanometers) Å
147 ô table d'hôte ô
148 ö Möbius strip, Köln, schöne, Bön ö
154 Ü "Deutschland Über Alles" Ü
160 á The Báb, Bahá'u'lláh, Galápagos Islands, Juáraz á
161 í Aída, Mírzá Husayn-Alí, Bahá'í í
164 ñ señor, señorita, mañana, piñata ñ
168 ¿ ¿Qué pasa, amigo? ¿
See also http://en.wikipedia.org/wiki/List_of_English_words_with_diacritics
ENDTEXT
-
minit
- I didn't like the help menu that came with "mtr" ("minitrue"), so I entirely rewrote it
$ minit --help
minit.btm (wrapper for mtr.exe) - USAGE SUMMARY
as a file pager:
mtr file1 file2... - "regex" # pattern to locate
as a grep search tool:
mtr -ro# afn1 - "reg.exp" # -Recurse, number lines to stdout
as a replacement tool:
mtr afn1 afn2... - "find" = "repl" # prompted replace in pager
mtr -nr afn1 ... - "find" = "repl" # -No prompt, -Recurse, change files
mtr -no+ file1 - "find" = "repl" # -o+ = send results to stdout (sed)
Switches:
-a All files -w Whole words only -r Recurse dirs
-c case ignore -y skip bin files -tTABSIZE set Tab size
-e ignore errors -@:FILE input filename -v set Video mode
-h hex mode -b make Backups -x use regexes
-k keep stats -d keep prev Datestamps -z unZip files
-mNUM top Margin -f Fold lines @ wd breaks -u boolean zone
-o use stdout -i:FILE input strings file -p:SET define printing chars
-q quiet mode -l make Log file
-s fast Scroll -n No prompting -? (tutorial) or --help
Defaults:
-c Case-insensitive matching ON (use -c- to disable)
-x Regex matching ON (use -x- to disable)
-b Numbered backups ON (use -b- to disable)
Env var MINITRUE="-p:[\x00-\x08\x11\x12\x14-\xFF] -v:blwh:Grye:GrBl:blgr"
Escape chars are always active, even if regexes are disabled with -x- :
\a BEL ^G | \n NL ^J | \xHH hex value, 0xHH
\e ESC ^[ | \r CR ^M | \NNN octal value (also \N and \NN)
\f FF ^L | \t TAB ^I | \b If -x, wordbreak. Use [\b] for BS
\z nil ("") | \\ backslash | \b If -x-, backspace ^H.
-
nonasc.btm.txt
- Shows whether a file is pure ASCII or not. Requires od (octal dump) and sed.
$ nonasc --help
NONASC.BTM v1.43 -
Look for non-printable chars in file or input. Valid chars include 20h-7E,
TAB, CR, and LF. Control codes or graphic chars are considered "non-ASCII".
The input file is not changed. Exit code 0 if pure ASCII, or 1 otherwise.
Usage: nonasc [-options] [filename]
Only 1 filename allowed. If filename is omitted, read from stdin. If no
switches are used, look for non-printing characters and display the first
2 lines of non-printing chars, if any. Hits are shown in reverse video.
Options:
-d Dump the input file in both hex and ASCII to the screen without
checking for invalid characters. Works on pure binary files.
Long files should be piped through a file pager (e.g., "less").
If the -{n} switch is used, limit the output to {n} lines.
-{n} Display {n} lines of input, where {n} is an integer (default: 2)
If -d is omitted, display {n} lines of invalid input.
If -d is used, display {n} lines beginning at top of file.
Numeric switch must be separate from other options! Thus,
"-d -5" and "-7 -t" are valid, but "-d5" or "-7t" are not.
-t Include TAB (0x09) as invalid char. -t and -d are incompatible.
If both are present, -t will be ignored.
-r Include CR (0x0D) as invalid char.
-z Allow Ctrl-Z (0x0A), but only at EOF.
-?, --help Display this help message
-
rot13.btm.txt
- Basic filter:
$ rot13 --help
ROT13 - simple Caesar cipher for reversible obfuscation. ROT13
affects alphabetic characters only (A-Z and a-z), nothing else.
Usage: rot13 [file]
Samples:
{cat|type|echo|etc.} filename | rot13 # use as a filter
rot13 filename # use with one argument
rot13 /?, /h, -?, --help # brings up this help message
-
rot47.btm.txt
- Basic text filter:
$ rot47 --help
ROT47 - simple Caesar cipher with a larger alphabet than ROT13.
ROT13 affects alphabetic characters only. ROT47 affects all 94
printable characters: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ and the
62-character set [0-9A-Za-z]. Literal cmd: tr '!-~' 'P-~!-O'
Usage: rot47 [file]
Samples:
{cat|type|echo|etc.} filename | rot47 # use as a filter
rot47 filename # use with one argument
rot47 /?, /h, -?, --help # brings up this help message
-
unixtime.btm.txt
- Converts to and from Unix "epoch seconds" (requires Unix "date")
$ unixtime --help
UNIXTIME - displays specified time in epoch seconds (ESEC), and also
converts time from epoch seconds (since 1970-01-01 00:00:00 UTC)
Usage:
unixtime Show ESEC for current date/time
unixtime [-c] [YYYY-MM-DD HH:MM:SS] Show ESEC for specified date/time
unixtime -s ESEC Given epoch seconds, show the ISO time
Options:
-c Add commas (when displaying epoch seconds)
-s 1234567 Convert epoch seconds to ISO time
Similar commands:
perl -e "print scalar time" # show current time in epoch seconds
date +%s # show current time in epoch seconds
echo %@eval[%@makeage[%_utcdate %_utctime] \ 10000000 - 11644473600] # TCC
date -d "YYYY-MM-DD HH:MM:SS" +%s # show given date/time in epoch seconds
date --date="now|1/23/2008" +FORMAT # show given date/time in another format
date --date="@1234567" +"%F %T %Z" # convert epoch seconds to ISO format
-
unwrap.btm.txt
- simple:
$ unwrap --help
UNWRAP.btm - TakeCommand script to "unwrap" lines from stdin or a file.
Given 2 consecutive lines, if line #2 begins with N spaces (default 4),
append line #2 to the end of line #1 and remove the spaces.
Usage: unwrap [-switches] [file1 file2 ...]
Options:
-N must be a positive integer (default = 4)
-s string of 1 or more chars at beginning of line (default = space)
Note that 's' will be multiplied by 'N', so to wrap 9 tildes at BOL,
enter `-9 -s~`, or `-3 -s "~~~"`, or `-1 -s "~~~~~~~~~" `.
-
whatruns.btm.txt
- Shows executable files in the specified directory:
$ whatruns --help
Usage: whatruns [directory] [/TakeCommand options]
WHATRUNS accepts directory names and options appropriate for DIR. It
displays a list of executable files, matching any of these filetypes:
bat,cmd,btm DOS batch files, TakeCommand/JPSoft batch file
com,exe binary executables
pl,awk,py perl, awk, python scripts
sh,ksh Bourne shell script, Korn shell script
ade,adp Microsoft Access Database (extension, project)
cpl Control Panel Extension
hta Hypertext Application
ins,isp IIS Network Settings script, IIS Service Provider script
jse JScript Encoded script
msc,msi,msp,mst Microsoft (CommonConsole,installer,patch,visual Test)
scr,sct Windows Screen Saver, Windows Script Component
vb,vbe,vbs Visual Basic (encoded, script)
wsc,wsf,wsh Windows Scripting (component, file, host)
Default executable extensions are defined by the environment variable %PATHEXT%.
Currently, PATHEXT=.COM;.EXE;.BTM;.BAT;.CMD;.VBS;.VBE;.JSE;.WSF;.WSH;.MSC
The following exectuable extensions are automatically BLOCKED by gmail.com,
and may not be sent, even in an archive (.zip, .tar, .tgz, .taz, .z, .gz):
"ade", "adp", "bat", "chm", "cmd", "com", "cpl", "exe",
"hta", "ins", "isp", "jse", "lib", "mde", "msc", "msp",
"mst", "pif", "scr", "sct", "shb", "sys", "vb", "vbe",
"vbs", "vxd", "wsc", "wsf", "wsh"
|