[net.sources] Turbo Pascal DOS Shell. Readme file.

pier@ur-tut.UUCP (Pierre Darmon) (12/17/85)

Here's readme.doc:
Introduction:
------------

This library contains procedures which allow you to execute DOS
commands and many other programs from within a running Turbo Pascal
program.  The assembler routine TURBORUN.COM performs the
actual execution of the external commands via DOS function 4B.  The
sample Turbo Pascal program PIBDODOS demonstrates how to use TURBORUN.COM
in two different ways:

     (1)  To directly perform a selected command;
     (2)  To start up a secondary command processor so that
          any set of commands can be executed.  Control is
          returned to the Turbo routine PIBDODOS by entering EXIT.

Files:
-----

Libbrary PIBDODOS.LBR contains the following files:

     README.DOC   --- what you are reading now.
     PIBDODOS.PQS --- squeezed Turbo Pascal routine showing
                      how to use TURBORUN.COM (see below).
     TURBORUN.COM --- Assembled external routine for invoking
                      DOS commands from Turbo Pascal.
     TURBORUN.AQM --- Squeezed assembler source from which
                      TURBORUN.COM was created.

PIBDODOS.PQS and TURBORUN.AQM are both squeezed files.  They were
squeezed without the time and date stamp, so your favorite
unsqueezer should have no difficulty.  I especially recommend
Alan Losoff's ALUSQ.COM.

Credits:
-------

The external routine TURBORUN.COM was written by John Cooper and
John Falconer.  The sample routine PIBDODOS was written by Philip R. Burns.
Cooper and Falconer provided a sample routine, but theirs required
that COMMAND.COM be present in the active directory in order to work,
and they did not show how to bring up a secondary command processor.

What PIBDODOS does:
------------------

PIBDODOS first searches the DOS environment string for COMSPEC= to
obtain the current location of COMMAND.COM.  It then prompts for a
command to execute. If a command is entered, then it is passed to DOS
for execution, if possible.  After the command is executed, control returns
to PIBDODOS.  If no command is entered -- i.e., a null line is input --
then PIBDODOS brings up a secondary DOS command processor.  DOS commands
may be entered as desired.  Entering 'EXIT' returns control to
PIBDODOS. PIBDODOS then prompts for another command to execute, and so on,
until 'END' is entered.

Using PIBDODOS:
--------------

You may use the file TURBORUN.COM as provided in the library.  If you
prefer, you may extract the deck TURBORUN.AQM, unsqueeze it, and follow
the directions in that deck's comments to produce TURBORUN.COM.

Unsqueeze PIBDODOS.PQS --> PIBDODOS.PAS.  Invoke Turbo Pascal,
making sure that TURBORUN.COM is in the same directory as PIBDODOS.PAS.
Compile PIBDODOS.PAS to a .COM file, and also set the maximum heap
size (Axxxx in O)ptions) to what the Turbo program will need to
execute.  Any remaining memory will be used for executing external
commands.

You can find out more information by reading the comments in the
source file TURBORUN.ASM.

Glitches:
--------

There are some glitches with the approach used by PIBDODOS/TURBORUN.
DOS may freeze up if there is not enough memory to execute the command,
or if the command clobbers memory that does not belong to it.  In these
cases, a re-boot is required.

Comments:
--------

Send comments, suggestions, etc. to PHILIP BURNS on either of the
following two Chicago BBSs:

       Gene Plantz's BBS (312) 882 4227
       Ron Fox's BBS     (312) 940 6496

If you find a problem in TURBORUN.ASM, you may also want to notify
Cooper and Falconer -- their address is in the comments of TURBORUN.ASM.

Thanks,
Phil Burns
April, 1985

Update: April 28, 1984

Turborun.asm and Turborun.com have been updated as follows:

Modified Turborun to work with both 2.0 and 3.0 versions of Turbo Pascal.
This required a new method of locating Turbo's maximum stack segment size.
TP 2.0 stores this 7 bytes ahead of the beginning of actual user code, but
version 3.0 stores it 20 bytes ahead.  Fortunately, both versions store a
pointer to the user code area at MemW[Cseg:$101].  SSMax is located at
MemW[Cseg:$101] + $112.  From Turbo, SSMax can be obtained with the code:

Procedure Dummy(var SSMax : integer);
var
   User  : integer;
begin
   User := MemW[Cseg:$101];
   SSMax := MemW[Cseg:User + $112];
end;

Keep in mind that if your maximum stack size is greater than MaxInt (32767),
or 524,272 bytes, SSMax will be NEGATIVE.  (If your reading this Phillipe
Kahn, how about an unsigned integer scalar type in the next release ?  You
could call it WORD with a max value of 65535.  Come to think of it, a
DOUBLE WORD would also come in handy.....)

With the change in locating SSMax, the placement of your proc which calls
the EXTERNAL program Turborun is no longer important.  In order to demonstrate
this fact, I have made a slight modification to PibDoDos.pas.  User code now
begins with the function UpCaseStr.  RunExt follows UpCaseStr.

I have recompiled PibDoDos under Turbo Pascal 2.0B and 3.0B.  The only
apparent difference is that 3.0 no longer clears the screen.  It has been
sucessfully run on an IBM PC with a GLC (Pegasus) 10M hard disk and on a
Compaq Plus.


Note on compiling under Turbo Pascal 2.0B:
------------------------------------------

This version contains a bug which is evident when compiling an EXTERNAL COM
program.  You have to compile twice.  The first time simply compile with no
options to memory.  Then select O, C, I ####, A ####, Q, C.  #### represents
your minimum and maximum stack sizes.  The resulting COM file will run
correctly.  3.0 doesn't require the memory compile.

Acknowledgement:
----------------

This work is heavily based on the prior work done by Mssrs Cooper, Falconer
and Burns.

I was able to discover a version-independent method of locating SSMax by
analysing the code of a set of programs collectively known as TurboLink,
marketed by Pathfinder Software Inc.  TurboLink is advertised to allow
up to 576k of Turbo Pascal Code to be resident, and to be accessed from
a central program written in Turbo Pascal, Compiled Basic or Interpreted
Basic.  The only problem is that the version I have (2.0) will not work
with a system with more than 512k of ram (They forgot about Maxint).
Squeezing 576k of Turbo code plus a central program into a 512k machine
should be quite a trick!  In any case, Pathfinder uses the method of locating
SSMax that I have incorporated into Turborun.asm.


Thomas P. Devitt
Pseudonym Software
(818) 796-7933
-------


Pierre Darmon
University of Rochester
{allegra|decvax|seismo}!rochester!ur-tut!pier