Dec 122017
 
Large collection of handy procedures for Turbo Pascal 4.0+.
File ZROUTINE.ZIP from The Programmer’s Corner in
Category Pascal Source Code
Large collection of handy procedures for Turbo Pascal 4.0+.
File Name File Size Zip Size Zip Type
ZINPUT.PAS 4672 1017 deflated
ZROUTINE.PAS 13130 3418 deflated
ZROUTINE.TPU 21376 8672 deflated
ZROUTINE.TXT 32898 7374 deflated

Download File ZROUTINE.ZIP Here

Contents of the ZROUTINE.TXT file



ZRoutine Documentation January 14, 1989
Version 1.1 Page 1



_________________________________________________________________________

Introduction to ZROUTINE
_________________________________________________________________________
There is a Table of Contents at the back of this document!

ZRoutines are a collection of Turbo Pascal routines I find priceless
in coding my programs. I used to code in Quick Basic and became
dependent on some of its procedures and function. I have written them
as Pascal units.

To make sure that there is no confusion, all of the units in this
collection begin with the letter Z.

The author of these routines is Bob Zimmerman. I have gotten many
ideas from other public domain software and from other books and
manuals. I am sure there are other routines out there.

I am taking pride in this documentation and support. All requests
should be addressed to:


Bob Zimmerman
CompuServ 72371,1700

or

Bob Zimmerman
Sysop: The Mainframe BBS
2400/1200/300 8N1
24 Hours
(312) 364-0425 after Nov 1989 the area code is 708
(708) 364-0425...

ZRoutine Documentation January 14, 1989
Version 1.1 Page 2



_________________________________________________________________________

Printing this document
_________________________________________________________________________

This document may be printed by copying it to the printer using the
dos command:

COPY ZROUTINE.TXT PRN

The file is formatted to print on 10 x 8 inch paper. The reason I am
not using 11 inch formatting when creating this document, is so it
will print on a laser printer correctly (some only support 60 lines
per page.

Also, to make sure it will print on all printers, there is no bolding
or any other fancy font. I use the underscore chars to form the
heading lines and the form feed character to eject to a new page.

Hard copies of this document may be requested from the author. A
charge will be requested depending on the quality of the printout you
request (laser versus dot matrix...).

ZRoutine Documentation January 14, 1989
Version 1.1 Page 3



_________________________________________________________________________

ZBeep - Sound a beep "x" number of times
_________________________________________________________________________
Procedure ZBeep (Number_Of_Times : integer);

This routine will sound the speaker the number of times specified. I
have had alot of trouble remembering the exact pitch etc... used by
most utils. Once I found it, I created this module. For example...

Example:

(* To sound a single beep *)

ZBeep (1);

(* To sound 10 beeps *)

ZBeep (10);

ZRoutine Documentation January 14, 1989
Version 1.1 Page 4




_________________________________________________________________________

ZCmd - Global string variable
_________________________________________________________________________
Var ZCmd : String;

This a variable that is created at the beginning of every program. It
will contain the entire command line, each parameter being separated
by a single space.

Normally, in Turbo Pascal, there is no one parameter containing the
entire command line (for printing etc...). This one is it.


Example:

PROGRAM PrntCmd;

(* This program echos the command line back to the screen
in order to demonstrate the ZCmd string. Execute this
program with several different command lines to see the
spaces squashed out etc... *)

begin
Writeln(ZCmd);
end.
ZRoutine Documentation January 14, 1989
Version 1.1 Page 5



_________________________________________________________________________

ZCmdInt - returns a command line integer Function ZCmdInt (A_String :
string ) : integer;

This function is exactly like the ZCmdStr, except it returns an
integer. For example, is a /p parm is used to specify page length, you
could use this function to retrieve it...


Example:

THECMD /p60


The above command line would generate:

ZCmdInt('/p') returns 60


Notes:

If the user specifies alpha data, or no data, this function returns 0.
ZRoutine Documentation January 14, 1989
Version 1.1 Page 6



_________________________________________________________________________

ZCmdKeyWord - Checks for keyword on command line Function ZCmdKeyWord
( A_String : string ) : boolean

This function either returns True or Flase depending on whether or not
the passed "keyword" was specified on the dos command line.


Example:

THECMD c:\autoexec.bat /move save

if the above is the command line entered at the dos prompt, then the
following is true:


ZCmdKeyWord('/move') is true
ZCmdKeyWord('save') is true
ZCmdKeyWord('move') is false
ZRoutine Documentation January 14, 1989
Version 1.1 Page 7



_________________________________________________________________________

ZCmdPos - Get the positional parameter
_________________________________________________________________________
Function ZCmdPos (The_Pos : Word) : String;

This function returns the positional parameter on the command line.
Here is an explanation of its processing.

Starting with the first command line parameter, it checks if the first
byte is a slash (/). If it is, it skips that parm. If it is not, this
is considered a "positional" parameter. You specify which positional
parameter you want the function to be returned.


Example:

The dos command line looks like this...

THECOMMAND /r bob zimmerman /q /d whatever


Using the above command line... the following is true:

ZCmdPos(1) is equal to "bob"
ZCmdPos(2) is equal to "zimmerman"
ZCmdPos(3) is equal to "whatever"
ZCmdPos(4...) is equal to "" (nothing)


Notes:

If there are no positional parameters, then a string of length 0 is
returned. ZCmdPos(0) or ZCmdPos(-1) yields unpredictable results...
ZRoutine Documentation January 14, 1989
Version 1.1 Page 8



_________________________________________________________________________

ZCmdStr - return command line parameter
_________________________________________________________________________
Function ZCmdStr (A_String : string) : string;

This function returns the value for a command line parameter. You are
able to misuse this command if you don't understand its intention. If
your utility can receive a path parameter in the form of /pc:\, where
the /p is the "key" and the c:\ is the value, then the ZCmdStr would
look like this:


Example:

(* find out the value of the /p specified on the command line *)
Value := ZCmdStr('/p');


Notes:

This function works regardless of case. If the command line contains
just the key (/p in our example), or the key (/p) is not specified at
all, the function returns a string of length 0.
ZRoutine Documentation January 14, 1989
Version 1.1 Page 9



_________________________________________________________________________

ZColor - Set Text color Procedure ZColor (Foreground, Background :
integer);

The real purpose is too make pascal a bit easier for Basic
programmers. Instead of using the TextColor and BackColor procedures,
you may specify both in one statement...


Example:

(* set color to yellow on blue background *)
ZColor (14,1);

ZRoutine Documentation January 14, 1989
Version 1.1 Page 10



_________________________________________________________________________

ZCsr Procedures - modify Cursor Attributes
_________________________________________________________________________
The following procedures have no parameters. They modify your cursor
display attributes as described:

ZCsrNone; turns off the cursor from being displayed.
ZCsrBlock; makes the cursor a full block cursor.
ZCsrNormal; makes the cursor a normal underscore type.
ZCsrHalf; makes the cursor half of a block cursor.

ZCsrSize(x,y); allows you to explicitly code the scan values for
the cursor.
ZRoutine Documentation January 14, 1989
Version 1.1 Page 11



_________________________________________________________________________

ZLPadInt - Generate leading zeros
_________________________________________________________________________
Function ZLPadInt (TheVal, NumOfBytes : Integer) : string;

Many times, I would like to print an integer with leading zeros. By
default, leading zeros are stripped. Even using the formatting on the
Writeln command, the numbers are padded with spaces not zeros.

This function forces numbers to be printed with leading zeros.


Example:

(* I want to print numbers 1 to 100 aligned with leading zeros... *)

var
x : integer;

begin
for x := 1 to 100 do
Writeln( ZLPadInt (x, 3) );
end;


"x" is the number 1 to 100 (the for statement increments it)...
"3" specifies to pad it to 3 digits... Output looks like:

001
002
003
..
..
010
011
..
..
100

ZRoutine Documentation January 14, 1989
Version 1.1 Page 12



_________________________________________________________________________

ZInput - Formatted Input Routine
_________________________________________________________________________
Procedure ZInput;

This routine is a full screen formatted input routine. By filling in
the arrays described below, you tell the routine where fields are on
the screen. Then you invoke the ZInput Procedure. ZInput allows the
user to use page down and up to get to the 1st and last field,
tabbing, the HOME and END keys, CTL-END and more. The user is in
control until any key that takes a 2 byte scan code is pressed. For
example, the PFkeys, CTL- combinations etc... Also, pressing ENTER on
the last field, or the ESC key exits the procedure.

All data is optionally validated...
The following describes the variables (global) used when running
ZINPUT!:

ZIRow[1..25] Specify the row the field is on.
Use an index of 1 thru 25 for which field.
In other words, you can define up to 25 fields.

ZICol[1..25] Specify the column the field starts in.
Use an index of 1 thru 25 for which field we are
on.

ZILen[1..25] Specifies the length of each field.

ZIData[1..25] Specifies the data. If you set this prior to
invoking Zinput, the data is displayed to the user
for modification. After Zinput, the data the user
entered is returned to the program in this array.

ZIInvalid[1..25]
This array is used for editing. If the user is
allowed to enter any data in the field, leave the
field null (ZIInvalid[1] := '')...

If the user is only allowed to enter certain
chars, for example Numeric data, then set the
array entry to the list of valid chars. For
example, ZIInvalid[1]:='0123456789'.

ZINumOfFields contains the number of fields on the screen. You
must set this before you invoke ZInput.

ZIKeyPressed is returned with which key was pressed by the user
when returning control to your program.


continued on next page...
ZRoutine Documentation January 14, 1989
Version 1.1 Page 13




Example:

{ We want 2 data entry fields on the screen.
The first is a name field starting in column 5 row 10 for 20 bytes.
The next is a Yes or No prompt starting in column 5 row 11 for 1 byte.
This field should be intially set to Y.
}

ZIRow [1] := 10;
ZICol [1] := 5;
ZILen [1] := 20;
ZIData[1] := '';
ZIInvalid[1] := '';


ZIRow [2] := 11;
ZICol [2] := 5;
ZILen [2] := 1;
ZIData[2] := 'Y';
ZIInvalid[2] := 'YyNn';

ZINumOfFields := 2;

repeat

ZColor ( forground, background ); (* highlit color *)
ZInput;
ZColor ( forground, background ); (* normal color *)

if ZIKeyPressed := #27 then exit
ZBeep (1);

Until ZKeyPressed = #13;

ZRoutine Documentation January 14, 1989
Version 1.1 Page 14



_________________________________________________________________________

ZIOCheck - Did an IO error occur
_________________________________________________________________________
Function ZIOCheck : Boolean;

This function will run the ZIOResult procedure and sets itself to the
value of ZIOErr.

What this means to you, is that, this is an easy way to check the
status of IO errors after doing the I/O. See the example for more
info...


Example:

(* Open the file, if it does not exist, create the file *)

Assign (TheFile, 'temp.dat');

{$I-} Reset (TheFile); {$I+}

If ZIOCheck then ReWrite (TheFile);

{
In the above example, we are trying to first open an existing
file called TEMP.DAT. The $I- tells the compiler to let IO errors
fall back into the code since normally IO errors stop a program
immediately. The ZIOCheck will be set to true if an IO error
occurred. If it did, we assume it is because of the file not
existing and we CREATE (rewrite) the file. If this fails, the
system will generate a run time error.

See ZIOVerify for a cleaner implementation of this code!
}

ZRoutine Documentation January 14, 1989
Version 1.1 Page 15



_________________________________________________________________________

ZIOErr - Global variable var ZIOErr : Boolean;

This variable is used by the routines ZIOCheck, ZIOVerify and
ZIOResult, documented in this manual.

After ZIOResult, which is used by the other ZIO routines, ZIOErr is
set to true or false depending on whether an IO Error occurred. If an
IO error occurred, ZIOErr will be set to true.


ZRoutine Documentation January 14, 1989
Version 1.1 Page 16



_________________________________________________________________________

ZIOResult - Check IOResult
_________________________________________________________________________
Procedure ZIOResult(var x : integer; var msg : string);

This procedure analyzes IOResult (built into pascal) and determines if
the last IO generated an error. If it did, the error number is placed
in the integer being passed, ZIOErr is set to true and "msg" will
contain the reason the error occurred.


Example:

{$I-}
Rewrite (thefile);
{$I+}

ZIOResult (errnum, errmsg);

if ZioErr then begin
Writeln('An io error has occurred');
Writeln('Error number: ', errnum);
Writeln('Error message: ', errmsg);
ZBeep(2);
halt(1);
end;

ZRoutine Documentation January 14, 1989
Version 1.1 Page 17



_________________________________________________________________________

ZIOVerify - Verify the previous IO worked
_________________________________________________________________________
Procedure ZIOVerify;

This procedure will run ZIOResult. If ZIOErr is equal to true, meaning
an IO error occurred, then the alarm is sounded and 3 lines of
diagnostics are printed.

These messages are clearer then the simple "run time error" issued by
Pascal. They will explain why the io error occurred (e.g. Invalid
path, file not found etc...)


Example:

(* Open the file, if it does not exist, create the file *)

Assign (TheFile, 'temp.dat');

{$I-} Reset (TheFile); {$I+}

If ZIOCheck then
begin
{$I-} ReWrite (TheFile); {I+}
ZIOVerify;
end;


{
See the example under ZIOCheck for a full explanation of this
example. The new line ZIOVerify will verify the rewrite works. If
it does not, a formatted error message is displayed and the
program is halted.

}
ZRoutine Documentation January 14, 1989
Version 1.1 Page 18



_________________________________________________________________________

ZLTrim - Trim leading spaces
_________________________________________________________________________
Function ZLTrim (A_STring : string) : string;

Returns the string without any leading spaces.


XYZ := ZLTrim(' Bob');


XYZ will be equal to "Bob" without the leading spaces!
ZRoutine Documentation January 14, 1989
Version 1.1 Page 19



_________________________________________________________________________

ZMakeWindow - Generate a window
_________________________________________________________________________
Procedure ZMakeWindow (LeftColumn, TopRow, RightColumn, BottomRow,
: integer;
Foreground, Background : byte;
Windowtype : integer;);


This procedure is still under development but works fine. You specify
the dimensions of the box you want drawn. Specify the foreground and
background color, as well as a border type (windowtype). Currently,
window type must be 1 or 2.


Example:


ZMakeWindow (2,2,79,24,14,1,1);

The above draws a box around your entire screen. (note you must leave
a byte around the edge for the border.

When this is cleaned up, it will support growing boxes, more borders,
and support full 1,1,80,24... dimensions....

p.s. ZMakeWindowG uses the same operands but draws a window a bit
different!
ZRoutine Documentation January 14, 1989
Version 1.1 Page 20



_________________________________________________________________________

ZPad - Pad a string to a specified length Function ZPad (A_string,
Pad_string : string; TotalLength: Integer) : string;

This function will pad a string to the length of TotalLength.


Example:

(* Pad the heading with dashes across the page *)

Heading := ZPad('Zroutine documentation','-',80);

Will produce

Zroutine documentation-------------------------------------------
thru column 80.
ZRoutine Documentation January 14, 1989
Version 1.1 Page 21



_________________________________________________________________________

ZPress_Any_Key_To_Continue ;
_________________________________________________________________________
Procedure ZPress_Any_Key_To_Continue ;

This procedure writes the line Press any key to continue and waits for
the user to do so. There are three "features" built in.

First, after the user presses enter, the line with Press Any Key To
Continue is erased and the cursor is placed at the first byte of the
line. This means the line is usable, not scrolled up.

Second, a ZBEEP (2) is executed (see ZBeep in this doc). This may be
silenced with the ZSilent boolean function (also in this doc).

Third, if the user presses ESC, the program is stopped and control
returns to the system.

Example:

(* Silence the beeps *)
ZSilent := False;
(* Prompt the user to press enter *)
ZPress_Any_Key_To_Continue;


ZRoutine Documentation January 14, 1989
Version 1.1 Page 22



_________________________________________________________________________

ZRight - Select the rightmost characters
_________________________________________________________________________
Function ZRight (A_String : string; A_Word : Word) : string;

This function returns the right characters of a string.


Example:

XYZ := ZRight('Bob', 2);

XYZ is now equal to "ob".


XYZ := ZRight(abc, 1);

XYZ is now equal to the last byte of abc...


Notes:

If ZRight is told to select more than the length of the string, for
example, you request the 5 most right bytes of a 2 byte string, only
the 2 bytes are returned (equivalent to a simple assignment
statement).

ZRoutine Documentation January 14, 1989
Version 1.1 Page 23



_________________________________________________________________________

ZShell - Shell to dos
_________________________________________________________________________
Procedure ZShell(TheCommand : string);

This procedure shells to dos and invokes the specified command. To
shell to dos until the user specifies EXIT, use a null command
string...


Example:

ZShell ('');

Shells to dos until the user presses exit.

ZShell ('Dir *.*');

Shells to dos, issues the dir command and returns immediately.


Notes:

Be sure to use the compiler directive $M to set the max heap size to a
low value. The default is your program uses all memory. Override this
by specifying a minimal Heap amount.
ZRoutine Documentation January 14, 1989
Version 1.1 Page 24



_________________________________________________________________________

ZSilent - Global boolean variable
_________________________________________________________________________
Var ZSilent : Boolean;

This is a variable created and initialized to TRUE. There are many
functions within Zroutines that sound the alarm. If ZSilent is set to
FALSE, these functions will not sound the alarm.



Example:

(* The following line turns noise off *)
ZSilent := False;

(* The following line turns noise back on *)
ZSilent := True;

ZRoutine Documentation January 14, 1989
Version 1.1 Page 25



_________________________________________________________________________

ZStr - Returns string type of integers
_________________________________________________________________________
Function ZSTR (A_number: integer) : string;

This function is the compliment to the STR procedure.


Example:


TheString := ZStr(3);


ZRoutine Documentation January 14, 1989
Version 1.1 Page 26



_________________________________________________________________________

ZString - Generate a string of chars Function ZString (A_String :
string; A_Num : Word) : string;

This function returns a string by taking the string passed and
concatenating it to itself the A_Num of times specified.


Example:

XYZ := ZString('-',50);

will set XYZ to 50 dashes...

XYZ := ZString('abc',100);
is an illegal function and would generate run time errors or
unpredictable results. The reason is stringing abcabcabc 100 times
creates a string longer than 255 bytes. In pascal, a string may not
exceed 255 bytes!
ZRoutine Documentation January 14, 1989
Version 1.1 Page 27



_________________________________________________________________________

ZUCASE - Set a string to upper case
_________________________________________________________________________
Function ZUcase (A_String : string) : string;

The Pascal UPCASE function only works on "char" type data. This means
it only works on one byte at a time. Almost every time I have to set
some data to upper case, I must process a string of several bytes (not
just a single byte). ZUcase processes an entire string just like
UPCASE...


Examples:


(* Set the chars xyz to upper case *)
NewString := ZUcase('xyz');

(* Set the value of Name to upper case *)
NewString := ZUcase(Name);

(* Using ZCmd from these routines, set the command line to
upper case *)

ZCmd := ZUcase(ZCmd);
ZRoutine Documentation January 14, 1989
Version 1.1 Page 28



_________________________________________________________________________

ZWrite - Write a string to a screen area
_________________________________________________________________________
Procedure ZWrite (x,y : integer ; A_String);

Writes the given string at the x,y co-ordinates.


Example:

ZWrite (24,1,'This is the bottom of the screen');

Will generate that line at row 24, column 1.






Introduction...............................................1
Printing this document.....................................2
ZBeep
- Sound a beep "x" number of times.....................3
ZCmd
- Global string variable...............................4
ZCmdInt
- returns a command line integer.......................5
ZCmdKeyWord
- Checks for keyword on command line...................6
ZCmdPos
- Get the positional parameter.........................7
ZCmdStr
- return command line parameter........................8
ZColor
- Set Text color.......................................9
ZCsr
Procedures - modify Cursor Attributes
ZCsrNone..............................................10
ZCsrBlock.............................................10
ZCsrNormal............................................10
ZCsrHalf..............................................10
ZCsrSize(x,y).........................................10
ZLPadInt
- Generate leading zeros..............................11
ZInput
- Formatted Input Routine.............................12
ZIO - I/O Error routines
ZIOCheck - Did an IO error occur......................14
ZIOErr - Global variable..............................15
ZIOResult - Check IOResult............................16
ZIOVerify - Verify the previous IO worked.............17
ZLTrim
- Trim leading spaces.................................18
ZMakeWindow
- Generate a window...................................19
ZPad
- Pad a string to a specified length..................20
ZPress_Any_Key_To_Continue................................21
ZRight
- Select the rightmost characters.....................22
ZShell
- Shell to dos........................................23
ZSilent
- Global boolean variable.............................24
ZStr
- Returns string type of integers.....................25
ZString
- Generate a string of chars..........................26
ZUCASE
- Set a string to upper case..........................27
ZWrite
- Write a string to a screen area.....................28


 December 12, 2017  Add comments

Leave a Reply