Dec 122017
This TP 3.0+ library contains the source from the book "Software Tools in Pascal" by B.W. Kernighan and P.J. Plauger.
File TPTOOL19.ZIP from The Programmer’s Corner in
Category Pascal Source Code
This TP 3.0+ library contains the source from the book “Software Tools in Pascal” by B.W. Kernighan and P.J. Plauger.
File Name File Size Zip Size Zip Type
CHAPT6B.PAS 17280 4148 deflated
CHAPTER1.PAS 2816 1018 deflated
CHAPTER2.PAS 6144 1803 deflated
CHAPTER3.PAS 11648 2975 deflated
CHAPTER4.PAS 7808 2181 deflated
CHAPTER5.PAS 2560 838 deflated
CHAPTER6.PAS 128 60 deflated
CHAPTER7.PAS 8576 2400 deflated
CHAPTER8.PAS 12160 3157 deflated
FPRIMS.PAS 5760 1488 deflated
OS-CPM80.PAS 2048 883 deflated
OS-CPM86.PAS 2944 1189 deflated
OS-MSDOS.PAS 4224 1583 deflated
OS-OTHER.PAS 384 181 deflated
PASFILES.SHL 128 75 deflated
PROCLIST.SHL 128 108 deflated
SHELL.PAS 7168 2616 deflated
TEST86.PAS 512 272 deflated
TOOLU.PAS 16256 5331 deflated
TPTOOL.INF 1152 664 deflated
TPTOOL19.DOC 6528 3121 deflated

Download File TPTOOL19.ZIP Here

Contents of the TPTOOL19.DOC file


TPTOOL.LBR DOCUMENTATION, February 1985, version 1.9.e

This library contains the source from the book "Software Tools
in Pascal" by B.W. Kernighan and P.J. Plauger, Addison-Wesley,
1981. (ISBN 0-201- 10342-7). It has been adapted for Turbo

The tools are embedded in a shell which implements
redirection, pipes, and sequential processes. It runs under
any Turbo Pascal, on CP/M-80, CP/M-86, or MS-DOS. In short,
much of UNIX can be run on your micro.


Include files needed:
shell.pas toolu.pas fprims.pas chapter*.pas OS-*.pas

All systems
In TOOLU.PAS, set Configuration Section
In CHAPTER1.PAS include appropriate OS- file

Compile SHELL.PAS with the COM option
Compile CHAPTERX.PAS with the CHAIN option
Execute SHELL

In configuration section, change ".COM" TO ".CMD"
Set minimum code ("O" option) to 0800
Set minimum data ("D" option) to 0200
(display will show a higher value)
Follow same procedure as CP/M-80
When compiling .CHN files, note code and data
sizes; each must be <= set minimum

In Configuration section, use ".COM"
Same procedure as CP/M-86

Concurrent CP/M
Set maximum free dynamic memory
Same procedure as CP/M-86


CP/M-80: AppleII, DEC Rainbow -- production use
CP/M-86: DEC Rainbow -- most routines tested
MS-DOS: DEC Rainbow -- sporadic tests
Concurrent-DOS, CCPM: not tested but believed to work


The following authorize each of their contributions to the
public domain.

Brian J. Kernigan: Design and implement system, write book
(with P.J.Plauger, 1981).
Bill McGee: Type code in from book, implement shell, adapt
to UCSD, MT+, and Turbo Pascals on CP/M-80 (1984)
Willett Kempton: Add pipes, sequential processes,
redirection to shell, error recovery, configuration. Adapt to
CP/M-86 and MS-DOS (January 1985)

Distribution coordinated by Bill McGee, 613-828-9130. This
document was written by Kempton and McGee.


Compiled Turbo code is fast enough to make this a useful set
of tools for file manipulation. Pipes are more efficient if a
"memory disk" is used. Nevertheless, don't expect this to run
nearly as fast as UNIX on a VAX.

Unless you are familiar with the UNIX tools, it will be
difficult to understand this system without the Kernigan &
Plauger book.

To pipe, use '|', to add processes, use ';'. To put '|',
';', or ' ' (blank) into arguments, enclose them in " ".
Pipelines will normally have '<' in the first process, and '>'
in the last process, with neither '<' nor '>' in any
intermediate processes. If you redirect to a file, and it
exists, it is overwritten (destroyed) without warning. Be
careful with '>'! For more information, see any UNIX manual.

The source code is about 4,500 lines. On any of the three
operating systems, the entire runtime system occupies about
130K. The drive to which piping is done must have enough space
for the total sizes of any two adjacent pipes.


These examples escalate rapidly in complexity. (Some
examples may be split across lines for readability. Each
single pipeline to shell must be typed on a single line.)

Show the contents of file "" at the console:

$ copy

Copy from one file to another (overwriting the new):

$ copy newfile

Concatenate two files together into a third file, then count
words in the third file:

$ concat f1.txt f2.txt >f3.txt ; wordcount

Same operation, without keeping the third file:

$ concat file1.txt file2.txt|wordcount

Print an alphabetized listing of all procedures and
functions, with their parameters, from file "toolu.pas".
(There are faster ways to do this operation.)

$ translit find "% *function"|change "% *function *"|sort >lst:

Make a file containing the names of all files beginning with
C, T, O, F, or S and ending with .PAS, then report how many
there are:

$ list|find %[CTOFS]?*.PAS|sort >flist;linecount

Use the file list created above to list all uses of
"ENDFILE" in all of those files:

$ copy

Execute a shell command which has been stored in the first
line of the file "proclist.shl"

$ shell
Exit from the shell back to the host operating system:

$ quit


Edit (Chapter 6), if given a file over 2000 lines, will
truncate extra lines and say the file is only 2000 lines.
Edit, linecount, compare (& others?) will ignore a partial
line (without CR LF) immediately before eof. Sort looses parts
of files over 300 lines long. Empty files cannot be opened for

If the system is abnormally halted (i.e. by the Turbo
runtime or a user control-C), the user has to manually delete
the file "$PIPE0", or the next shell will start abnormally.
Error trapping could be more extensive, and a method for
halting output is needed.

Directory listings are implemented only under CP/M-80 and
MS-DOS version 2, not CP/M-86 or MS-DOS ver 1.

If overlays were used in place of chaining, system size
would be reduced, and the command cycle would be faster.
However, this would limit the system to owners of Turbo verson
2. (Next revision may require Turbo ver 2). Obvious speedups
have not been exploited ("first make it right, then make it

Calls to SHELL are not truly recursive; they simply read the
first line of standard input and put it in the process queue.
(Most easily fixed after overlays have been implemented with
true recursive calls in root.)


The bug fix to enable CP/M-86 directory listings would be
greatly appreciated. A file "TEST86.PAS" is included for
testing "OS-CPM86.PAS" Please send CP/M-86 mods to Willett
Kempton at Rainbow_Data (Fidonode 36), other mods to Bill
McGee as noted above. Versions will have three numbers (e.g.
version 1.9.0). Revisors who resubmit to their local boards
are asked to change only the third number (e.g. version

 December 12, 2017  Add comments

Leave a Reply