home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of Shareware - Software Farm 2
/
wosw_2.zip
/
wosw_2
/
QBAS
/
ANGEL19B.ZIP
/
ANGELIB.TXT
< prev
next >
Wrap
Text File
|
1993-06-26
|
107KB
|
3,367 lines
ANGELIB for BC7/PDS i ___________________
_|||||_ ||_ || _|||||_ ||||||| || || |||||||
|| || |||_ || || || || || || || ||
|| || ||||_|| || || || || || ||
||||||| || |||| || |||| ||||| || || |||||||
|| || || |||| || || || || || || ||
|| || || ||| || || || || || || ||
|| || || || ||||| ||||||| ||||||| || |||||||
CONTENTS
I. DISCLAIMER OF WARRANTY . . . . . . . . . . . . . . . . . . 1
II. COPYRIGHT . . . . . . . . . . . . . . . . . . . . . . . . . 1
III. LICENSE . . . . . . . . . . . . . . . . . . . . . . . . . . 1
IV. TECHNICAL SUPPORT (HOW TO REACH ME) . . . . . . . . . . . . 2
Official Distribution Bulletin Boards . . . . . . . . . . . 2
V. INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . 2
VI. SUMMARY OF RECENT UPDATES (WHAT'S NEW) . . . . . . . . . . 3
VII. REGISTRATION . . . . . . . . . . . . . . . . . . . . . . . 4
A. Methods of Payment . . . . . . . . . . . . . . . . . . . 5
B. Pricing . . . . . . . . . . . . . . . . . . . . . . . . 5
INVOICE & REGISTRATION . . . . . . . . . . . . . . . . . . 9
VIII. SYSTEM REQUIREMENTS . . . . . . . . . . . . . . . . . . . . 10
IX. FILES WHICH MAKE UP ANGELIB . . . . . . . . . . . . . . . . 10
X. USING ANGELIB . . . . . . . . . . . . . . . . . . . . . . . 11
Creating a QLB (Quick Library) . . . . . . . . . . . . . . 11
XI. REFERENCE . . . . . . . . . . . . . . . . . . . . . . . . . 12
XII. USING PRINTER FUNCTIONS . . . . . . . . . . . . . . . . . . 48
ANGELIB for BC7/PDS 1 ___________________
I. DISCLAIMER OF WARRANTY
I use the routines in ANGELIB almost every day as I write _______
software and I am regularly adding, enhancing, or fixing. My software
will never be "done," and I hope that it gets better and better. In
any case, I can't guarantee that it's perfect; in fact, I'll guarantee
that it's not. By using this software and documentation ("ANGELIB")
you must accept this disclaimer of warranty:
ANGELIB is provided "as is" without any warranties or _______
conditions, expressed or implied, including, but not limited to, those
concerning merchantability and fitness for a particular purpose. By
using ANGELIB, you are expressly releasing the author, Angel Babudro, _______
from any liability resulting from the use of this software and
documentation. You must assume the entire risk of using ANGELIB. _______
II. COPYRIGHT
The author retains the copyright for all ANGELIB source code, _______
documentation, assorted files, and all libraries. However, once
provided with registration from the author you may distribute any
program you write with the benefit of ANGELIB, in compiled form only, _______
without royalties to the author. You must have written consent from
the author prior to distributing ANGELIB source code in part or in _______
whole, whether modified or in original form.
III. LICENSE
1. ANGELIB is being distributed as Shareware. This library is _______
not free, although license is hereby granted for evaluation of the
Unregistered Edition for an unlimited time.
2. You may keep as many backup copies of ANGELIB as you wish. _______
The Registered Edition is limited to simultaneous use on the number of
computers indicated by your registration level. The Unregistered
Edition may be used on any number of computers. You may share ANGELIB _______
with others in complete and unmodified form. REGISTERED USERS may NOT
distribute the files ending in OBJ.
3. You MUST NOT charge any fee or receive any consideration for
distributing the ANGELIB files and you MUST NOT include ANGELIB with
another business transaction (e.g., a hardware sale) unless you have
express written consent from the copyright holder, Angel Babudro. You
MAY charge a fee of not more than US$6 (six dollars) for the disk
and/or service of distribution.
ANGELIB for BC7/PDS 2 ___________________
IV. TECHNICAL SUPPORT (HOW TO REACH ME)
If my wording is unclear or can't find some topic in here, give
me a holler and help me fix it or add it to the manual. A letter or
BBS message is preferred (and less expensive for you). Phone calls
are fine between 9am and 5pm Eastern Time as long as you are a
registered user or intend to become one. I thank you for your help in
making this library better.
Sysops please read SYSOP.DOC for special deals. Shareware
vendors please see VENDOR.DOC for distribution information.
I can be reached via the mail or BBS. The bulletin boards below
should always have current versions of all my software and I will get
any messages left there for me.
Mail Angel Babudro, "Organic Computer Wizardry",
28 Mulberry Street, Clinton, NY 13323-1506,
(315) 853-1070 Mon-Fri 9am-5pm Eastern Time
Official Distribution Bulletin Boards
On bulletin boards I use the first name "Angelo" since it avoids
gender confusion. I go by either name, anyhow.
East Coast Excalibur, Central NY (315) 736-3792 USR 14.4
This is my local distribution board where you can
always find the latest updates to all of my
software. I will get messages left here within a
few days. My software can be FREQed from this board
via RBBS Net address A:954/401, FIDO Net address
1:26501, or ICN Net 91:315/101.
West Coast Researcher's BBS, So Cal (805) 949-8151 USR DS
This is my west coast distribution board which is
updated every 2-3 weeks with the latest versions of
all my software. Leave messages for me in
conference #136 (Organic Software).
My software can also be found on many of the nations larger
bulletin boards, such as Exec-PC and Channel 1.
V. INTRODUCTION
ANGEL.QLB is a "high level" BC7 library for developing business
applications, especially data base uses. These are the routines I use
in developing my apps (with some help from three other shareware
libraries, most notably John Strong's EZ-Windows which is terrific).
ANGELIB for BC7/PDS 3 ___________________
I put in the things that are simple but a pain to code every
time, like a "percent completed" bar graph in a window, and things
that are more complicated, such as a scrollable information window
with mouse support. ANGELIB is written in BASIC. Even though it's _______
not the "tightest" code of its kind I think you will find it very easy
to use.
Some of my routines trade flexibility for ease of use, like the
percentage graph which is always the same colour and at the same spot
on the screen. This keeps things simple and provides built-in
consistency. Just in case my ideas for standards aren't the same as
yours :) I have decided to offer the licensing of my source code.
Well, what more can I say? I hope my library helps you to write
a bit better and faster. If so maybe I'll see your registration in my
mail someday.
VI. SUMMARY OF RECENT UPDATES (WHAT'S NEW)
Every release fixes bugs found in previous releases and/or adds
a few new features. Here is a summary of recent updates:
1.9b Routines updated: ChooseFile$, ChooseFiles$, GetFileName$,
GetFileNames$, GetValidPath, IsPath%, ParseFSpec, StripSymbols$
Routines dropped: DBFPickFld, DBFShowFlds
Parameters modified: PctDone, ZipFmt$
FileRestore2%() has been renamed FileRestores%() to be
consistent with other routines.
1.9a Parameters modified: GetValidPath$, IsPath%
1.9 Full LIB file is now included. I was severly chastised by the
dBASIC Toolkit BBS' sysop for distributing "crippled" software.
I never saw it that way before and am in agreement. Now you can
compile to EXE form, but if you want to distribute and/or sell
your software please register the library.
1.8m All printer & font routines have been updated to allow use on
networks using DOS SHARE.
1.8j StrFmt's parameters were in reverse order compared with other
similar functions. Mask & source strings have been swapped.
Parameters modified: HelpIndex
ANGELIB for BC7/PDS 4 ___________________
Routines dropped: BackupMethod%, ChooseCountry%
Documentation corrected: I forgot to update the documentation
for some routines. Now you can actually use InputDate,
FileBackup%, FileRestore%, FileRestores%, FmtFDD%
1.8h New routines:
ChooseFiles$ allows multiple file names to be chosen (whereas
ChooseFile$ allows only one).
FileRestores% allows single or multiple files to be selected
from a back-up copy.
GetFileNames$ allows more than one input file to be selected.
OutDevs$ is identical to OutDev$ but is for use with these other
new routines (which all use a common routine from John
Strong's EZ-Windows library).
GetFileDesc$ retrieves a file's long name from the DESCRIPT.*
file
Renamed ToFDD% to FileBackup% and FromFDD% to FileRestore% - I
think these names are easier to remember.
VII. REGISTRATION
Although I hope that you are so happy with ANGELIB that _______
registering will be reward enough in itself, but I think it's more fun
& exciting to get something new. ANGELIB is the library I use for _______
developing all of my applications, so it is constantly updated. Your
registered version will be an up-to-the-minute copy. Other benefits
of registration that come to my mind include:
1. You'll get OBJ files so you can create your own custom
libraries. I use the EZ-Windows and PBClone libraries for
some routines (why re-invent the wheel?), so you will need
to get them if you want to create custom libraries. Buying
all three libraries will cost around $70 which is far less
than most commercial packages.
2. Within days you will get a library that would probably take
so long to develop yourself that by the time you've done it
you won't need it anymore
3. You can order a printed & bound manual for $8
4. Technical support is possible! You can contact a real
programmer who is 98% knowledgeable about the library
(nobody's prefect) via mail, phone, or BBS
5. You'll have helped one of the little guys - someone who
isn't a huge corporation. (Thank you...)
ANGELIB for BC7/PDS 5 ___________________
A. Methods of Payment
U.S. customers please send cash, check, or money order.
Canadian customers please send cash or Canadian International Money
Order (CIMO). Customers in other countries please send U.S. funds
drawn on a U.S. bank. If you send cash use a "security" no-see-
through envelope and you may want to send it via Registered mail, too.
If you prefer to use a credit card, you can order ANGELIB from _______
Public (software) Library with your MC, Visa, AmEx, or Discover card
by calling 800-242-4PsL (from overseas: 713-524-6394) or by FAX to
713-524-6398 or by CompuServe to 71355,470. THESE NUMBERS ARE FOR
ORDERING ONLY. I CANNOT be reached at those numbers. To contact me
for information about dealer pricing, volume discounts, site
licensing, the status of shipment of the product, the latest version
number, or for technical information, call 315-852-6942 or write me at
28 Mulberry Street, Clinton, NY USA 13323-1506. Shareware is "try
before you buy" so please understand that product returns are not
allowed.
When ordering from PsL ask for product #10799 and please note
that PsL will add $3 for shipping & handling to U.S. as well as
Canadian orders.
B. Pricing
Registration with Disk -- A single copy costs $29. You will receive
the latest version of ANGELIB in LIB (so it can be merged with _______
other libraries) and OBJ (to make custom libraries) formats.
You will also receive notification of major updates. At this
time, updates for registered users are $5 or send me a disk and
return postage (I'll re-use your envelope). See below for
printed manuals.
Multiple Copies -- Each copy may be used on a single computer at a
time. To ease the financial burden and thank you for being
honest, you may apply the following discounts when ordering more
than one copy:
2 to 5 copies 40% discount
Over 5 copies 50% discount
Site License -- Register a single copy of ANGELIB and purchase a site _______
license which allows you to make copies of the registered
version for use on more than one computer owned by the same
business. I would prefer that you order a registered copy and
Site License for each physical location of the same business,
but this is not required unless you would like to receive update
notices at each location.
Up to 4 computers $30.00 per site
ANGELIB for BC7/PDS 6 ___________________
Up to 10 computers $70.00 per site
Up to 20 computers $125.00 per site
Any number of computers $400.00 per site
Manuals -- I will print the latest version of the manual you are
reading right now (using Ventura Publisher and a laser printer)
and bind it. I am offering this as a service to those who want
a printed, bound manual with their software. Most of the cost
involved here is for materials and extra shipping costs.
Remember that ASCII and WP documentation files are always on
disk and if you provide your printer model on the registration
form I will send you a file ready to print on your printer.
- One copy $8.00
- Two or more copies $6.00 per copy
Source Code License - You may license the use of the source code for
ANGELIB for just $30. Thereafter, updates will be available for _______
$5 plus shipping. Please note that I call routines from EZ-
Windows (by John Strong) and PBClone (by Tom Hanlin) in my
library (why re-invent their wheels?), so you will need to
register one or both of these to use some OBJs in creating
custom libraries. I recommend both of them highly and will
gladly share unregistered versions of these with you - just ask.
Complimentary Registered Editions - I would like to give you a
complimentary registration if you will give me a bit of
marketing assistance:
1. Write a review of my software and post it on a bulletin
board, send me a copy of it showing the BBS's header and the
name and phone number of the BBS. Just give me your honest
praise and criticism in a decent review. Your review will be
most helpful to me if it mentions your best & worst-liked
features and any ideas you have for improvement. This will
help me decide the future of ANGELIB and for that help I will _______
send you a complimentary registered disk.
2. It helps me to know which BBSs carry my software and the more
the better, of course! If you will upload a package to at
least five public ("open") BBSs, send me their names and
phone numbers and I'll send you a complimentary registered
disk. I would appreciate you uploading to time-share
systems, private ("closed") BBSs, or part-time BBS, but
please do not use these to apply for a complimentary
registered edition. BTW: I use an HST 14.4 modem so it would
be best if you provided me with BBSs which also use HSTs so I
can hook-up at high speed.
ANGELIB for BC7/PDS 7 ___________________
3. If you are a consultant or other type of computer
professional and your recommendation leads to one or more of
your clients purchasing one of my packages, just send me a
note with your client's registration or have them mention
your name when they register. I will send a complimentary
registered edition or an update for every registration you
get for me. This is in lieu of a multiple copy discount; I
intend it for consultants who choose not to deal with sales
tax.
One complimentary registration per person or company. A
complimentary registration is just like a paid one - you can upgrade
it with a site license, purchase manuals, etc. It helps when you send
back disks to be re-used - even the envelopes can be re-used. When
you order a complimentary registration please fill in the appropriate
blanks below PLUS the Invoice so I know what size disk you need, and
please send me a couple of dollar bills for shipping expenses.
Thanks.
I will promise these complimentary offers until at least
12/31/93 - after that date please check with me first.
COMPLIMENTARY REGISTRATION APPLICATION
Use until Dec. 31, 1993
Date_______________
Please also fill in the Invoice on the following page (put $0
for the disk). Include $2.00 for shipping within the U.S. or the
amount indicated for addresses outside the U.S. Remember to order
printed manual(s) if you so desire.
(__) Review posted on (BBS name & number)________________________
Include a copy of the review, please. Thank you very much!
ANGELIB for BC7/PDS 8 ___________________
(__) I uploaded (archive name, like ANGEL18E.ARJ)__________________
to these five 24-hour public ("open") BBSs:
BBS Name Phone Number/Modem Type Sysop Name ________ _______________________ __________
1_______________________ ________________________ _______________
2_______________________ ________________________ _______________
3_______________________ ________________________ _______________
4_______________________ ________________________ _______________
5_______________________ ________________________ _______________
These offers subject to withdrawal or change at any time without
notice. All prices are subject to change without notice. Bulletin
Board Sysops please see the file SYSOP.DOC for special pricing and
information; vendors & sysops please see VENDOR.DOC.
Angel Babudro - "Organic Computer Wizardry"
28 Mulberry Street Clinton, NY 13323-1506
(315) 853-6942 Mon-Fri 9am-5pm Eastern Time
(home phone; remember we're 3 hours later than Pacific coast)
Please register the Shareware you keep.
ANGELIB for BC7/PDS 9 ___________________
INVOICE & REGISTRATION
Credit card orders see "Methods of Payment" above
Your Name_____________________________________________________________
Company Name__________________________________________________________
Address_______________________________________________________________
______________________________________________________________________
City___________________________ State/Prov________ Zip________________
Registration Registration & disk: $29 x qty _____ $_______
Source Code Source disk & license: $30 x qty _____ _______
Multiple/ 2-4 disks -- deduct 40%
Wholesale 5 or more -- deduct 50% (_______)
Site License Up to 4 CPUs add $30; Up to 10 add $70
(add to above) Up to 20 add $125; Unlimited add $400 _______
Printed One copy is $8, 2 or more are $6 each
Manuals Qty _____ x $_____ each _______
Shipping & Canada, AK, HI, VI, PR add $3 extra _______
Expenses Other countries add $9 per copy _______
** T O T A L ** _______
Disk size & quantity [__] 3½" [__] 5¼"
Drive density [__] Low (DD) required [__] High (HD) okay
Extended densities [__] FDFORMAT extended densities okay
Which version are you using now?_____________________________________
Where did you get it?________________________________________________
ANGELIB has been delivered to and accepted by customer. Upon receipt _______
of this paid invoice the latest Registered Edition disk and any
options chosen above will be sent. Send U.S. funds or CIMO. NYS
orders add local sales tax. Mail this page with your cash (use
Registered mail), cheque or money order to Angel Babudro, 28 Mulberry
Street, Clinton, NY USA 13323-1506. Please allow 1-3 weeks. Thank you!
ANGELIB for BC7/PDS 10 ___________________
VIII. SYSTEM REQUIREMENTS
All you need is PC/MS-DOS 3.3 or later, PDS/BC 7.1, and a
computer. You will need 200k to 500k of disk space for the files,
depending on which ones you decide to keep around.
IX. FILES WHICH MAKE UP ANGELIB
The unregistered edition is made up of the following files:
ANGEL.LIB The linker library to make EXE files (check
MAKEQLB.BAT for help making a Quick Library)
ANGEL.BI The include file, function & subroutine
definitions
COLOURS.BI Colour codes definitions, use is optional
FKEYS.BI Function key definitions, use is optional
ANGEL.TXT The ASCII text file of this document
ANGEL.WP The WordPerfect file of this document (so you can
format it for your printer)
QSORT.BAS Source code to this public domain routine
FKEY.LST Sample file for use with FKEYS routine
READ.ME A file containing late-breaking news... May or
may not be part of the package you get
ORDER.FRM Order form for all of my software
SYSOP.DOC Sysop information
VENDOR.DOC Disk vendors & Sysops: pricing, detailed
description, and distribution information
COMPARE.EXE A byte-by-byte file compare utility. Displays in
hex, decimal, and ASCII. Type COMPARE for help.
DUMP.EXE Hex/octal/decimal file viewer. Type DUMP for help.
The registered edition also includes:
FAROBJ.EXE Object modules for creating custom libraries
(self-extracting archive)
MLIB.BAT Sample batch file for creating custom libraries
from OBJ modules. I use it all the time to re-
compile libraries during software development.
Allows OBJs to be anywhere you like rather than
all in one directory
MLIB.LSP Sample specification file for MLIB.BAT
ANGEL.INF Object module information file for use with Tom
Hanlin's LIBWIZ utility - this makes it MUCH
easier to create your own custom libraries if
you've never done it before.
ANGELIB for BC7/PDS 11 ___________________
X. USING ANGELIB
Basically, just put the files wherever you want them and use the
INCLUDE meta-command to place the .BI definition files in your
programme (e.g., '$INCLUDE: 'Angel.bi' and '$INCLUDE: 'PtrRec.def').
Using the $INCLUDE file lets you call subroutines without the CALL key
word.
Creating a QLB (Quick Library)
If you want to use ANGEL.LIB routines in the QBX interactive
environment you need to make a file called ANGEL.QLB first. To do
this just use the command:
link /qu angel.lib,angel.qlb,nul,qbxqlb;
If you get "Bad command or file name" you will need to supply
the drive and path containing the file LINK.EXE.
When you start QBX just use "QBX /L d:\path\ANGEL" (replacing
d:\path with your drive and pathname) - this will load the quick
library into memory so you can run the routines. Please note that
it's a large library; if you have extended memory QBX will load some
of the library "high." If you run out of memory with a large
programme I can only console you with the fact that most of my
software is too large to run in the QBX environment and the Microsoft
help-line wasn't even able to help me.
Rather than write a probably-lame demonstration programme to
show off ANGELIB's functions, I would like to suggest that you check _______
out my shareware from whence this library sprang: What Mailing List?
(WML), What Vehicle History? (WVH), What Job Summary? (WJS), What
Floppy Format? (WFF), and What Tape Back-up (WTB).
Registered Edition users have individual OBJ files which can be
combined into custom libraries, even adding OBJs from other libraries
(such as EZ-Windows) or your own routines. I find it easiest to make
a file, using an ASCII editor, which contains all of the names of the
OBJs I want in the library (see MLIB.LSP for a sample). This file
contains one routine per line, preceded by a "+" and ending with a "&"
(which is what LIB requires since this file is passed directly to
LIB.EXE). This makes it easy to recompile the library if you changed
some code or want to add or delete routines.
Another alternative for making your own libraries is to use Tom
Hanlin's LIBWIZ utility. This makes things very easy since LIBWIZ is
smart enough to figure out if a routine requires others (for example,
the INFORM%() function requires several other routines) and will
include those other routines automatically. The drawback to LIBWIZ is
ANGELIB for BC7/PDS 12 ___________________
that it has no "save" feature so you have to select each module every
time (which can get a bit tedious if you have 50 modules or so). If
you've never tried LIBWIZ you ought to at least check it out. The
most current version I know of is LIBWIZ13. To use it just enter
LIBWIZ ANGEL mylibname (where "mylibname" is your library's name).
XI. REFERENCE
ANGELIB is made up of functions and subroutines. Functions _______
return a value to a variable - e.g., a% = CalcAttr(White, Blue) puts a
value in a% - whereas subroutines do not - e.g., BackUpMsg just prints
a message on the screen.
The general syntax of a function call is
var = Function(param1,param2,etc). For a subroutine, the "formal" _________________________________
syntax is "[CALL] subname(param1, param2, etc.)" although "CALL" is ____________________________________
not needed when you include ANGEL.BI in your code.
Subroutines do not yield any "result," but they often modify one
or more variables which are passed to them. DBFHeader is a good
example of this.
The routines below each show their name at the left margin and a
sample calling sequence aligned with the right margin, under which is
the english explanation of the routine's purpose followed by the
definition of variables.
BackupMsg BackupMsg
Prints what I think of as a pseudo-subliminal reminder to back-up
your data :) A little reminder pops onto the screen for a second
then the screen is cleared.
Pass ____
Nothing
Returns _______
Nothing
ANGELIB for BC7/PDS 13 ___________________
BarMenu% opt% = BarMenu%(r%,c%,norm%,rev%,opts$(),seed%,getit%,ms%)
Displays a horizontal bar menu and waits for user's choice of the
options.
Pass ____
r%/c% Row and column at which to begin displaying
norm%/rev% Normal & reverse display attributes (via
CalcAttr%)
opts$() String array containing choices
seed% Option number to highlight initially (normally
"1")
getit% Flag to get user's input: If true routine waits
for user to select an option or press an extended
key (e.g., an arrow, PgUp, etc.) or ENTER or Esc.
If False, the routine displays the menu then
exits (which is useful for displaying a bunch of
horizontal menus on a setup screen, for example).
ms% Mouse support (0=no, non-zero=yes)
Returns _______
Function If getit% is true, the user's final keypress is
returned - ENTER (13), Esc (27), or extended key
code (2nd byte of code). If getit% is false then
the returned value is irrelevant.
seed% The number of the highlighted item, numbered from
left to right starting with one.
CalcAttr% attr% = CalcAttr% (Fore%, Back%)
For use with routines that need a single integer colour code.
Pass ____
Fore% Foreground colour code
Back% Background colour code
Returns _______
Fore% + (Back% * 16)
ANGELIB for BC7/PDS 14 ___________________
ChooseFD$ fdd$ = ChooseFD$
This is a menu of available floppy disk drives. The function:
1. Checks the number of floppy disk drives
2. If there is only one drive then "A:" is returned, otherwise
3. A pop-up menu of floppy drives is presented from which the
user may choose one or press Esc.
Pass ____
Nothing
Returns _______
Floppy disk drive letter followed by a colon, or a blank
string if user presses Esc.
ANGELIB for BC7/PDS 15 ___________________
ChooseFile$ File$ = ChooseFile$(FSpec$,Exclude$,ExtInfo%,ms%))
Presents a scrollable list of files in a window which match
FileSpec$ (excluding Exclude$) and waits for user to choose one.
Pass ____
FSpec$ File specification to include in the list. May
include drive and path name, if necessary. For
example, "*.DAT" or "C:\DATA\*.DAT" are valid.
Exclude$ File specification to exclude from the list
(e.g., "*.bak"). Do not put a drive or path in
this.
ExtInfo% Extended Information flag & record size.
Controls display of extended information (file
size & long description). Set this variable to
zero for no extra file information, or to the
record size to show the number of records in the
file along with description (if a file DESCRIPT.*
is in the directory it will be used for file
descriptions). To show size in bytes use a
record size of one. If negative information will
be in DOS Name/Size/Description order. If
positive Description/Name/Size order will be
displayed.
ms% Mouse support flag (true/false).
Returns _______
File name chosen without drive or path, or null string ("") _______
if user presses Esc
Notes _____
If ExtInfo% is non-zero, font files *.SFP and *.SFL will be
shown with their font names and other files will be shown with
their size & any description.
I patterned the format of the DESCRIPT.* file after 4DOS:
file name followed by a space and up to 40 characters for the
description. 4DOS makes a hidden file, however. ChooseFile$ will
only read "normal" (not hidden) files right now. I'll soon have
it so ChooseFile$ will read hidden files, too.
ChooseFile$() uses the EZ-Windows routine ScrlMenu and the
PBClone routines ScrSave & ScrRest.
ANGELIB for BC7/PDS 16 ___________________
ChooseFileS$ F$ = ChooseFileS$(Inc$,Exc$,Info%,many%,ms%))
Shows a scrollable list of files in a window which match Inc$ and
excluding Exc$ then waits for user to choose one or more.
Pass ____
Inc$ File specification to include in the list. May
include drive and path name, if necessary. For
example, "*.DAT" or "C:\DATA\*.DAT" are valid.
Exc$ File specification to exclude from the list
(e.g., "*.bak"). Do not put a drive or path in
this.
Info% Extended Information flag & record size.
Controls display of extended information (file
size & long description). Set this variable to
zero for no extra file information, or to the
record size to show the number of records in the
file along with description (if a file DESCRIPT.*
is in the directory it will be used for file
descriptions). To show size in bytes use a
record size of one. If negative information will
be in DOS Name/Size/Description order. If
positive Description/Name/Size order will be
displayed.
many% True=Allow multiple picks, False=Just one
ms% Mouse support flag (true/false).
Returns _______
File names without drive or path, or null string ("") if user _______
presses Esc. Names are padded to length of 12.
Notes _____
This routine ends up about 10k larger than ChooseFile$()
since it requires an EZ-Windows routine (ScrlTag) which the other
routine does not. If your programme already uses ScrlTag you will
only see a slight increase in your programme size (about .5k) over
using ChooseFile$(). See ChooseFile$() for other notes.
ANGELIB for BC7/PDS 17 ___________________
ChoosePort% PtrPort% = ChoosePort%(default%, ms%)
Presents a pop-up menu of printer ports (LPT1, LPT2, and LPT3) and
waits for user to pick one or press Esc.
Pass ____
default% Default (current) printer port setting (1-3).
ms% Mouse support available: 0 = No, 1 = Yes
Returns _______
Port number (1-3) or zero if user presses Esc
ChoosePtr% Ok% = ChoosePtr%(pType$, path$, PtrNo%, PtrPort%, ms%)
Presents a pop-up menu of printer choices from the PRINTER.DAT
file. If there are less than 15 choices (that is, all choices fit
inside the window), then the default (PtrNo%) will be highlighted.
Pass ____
pType$ Printer types to include in the menu:
D = Dot matrix printers
L = Laser printers
B = Both
path$ File specification for PRINTER.DAT file. path$
may contain a drive, path, and/or file name. If
no file name is given, PRINTER.DAT is used. If
no drive & path are given, the current drive &
path are used.
PtrNo% Record number of currently chosen printer in
PRINTER.DAT
ms% 0 = Keyboard only
1 = Use mouse, too
Returns _______
pType$ Changed to "D" if dot matrix chosen or "L" if
laser printer chosen
PtrNo% PRINTER.DAT record number for the chosen printer
PtrPort% The port number selected for the printer (LPT1 is
1, LPT2 is 2, etc.) or zero if user presses Esc
ANGELIB for BC7/PDS 18 ___________________
ContCan% i% = ContCan%
Displays "Continue" and "Cancel" keys at the bottom of the screen
and waits for response.
Pass ____
Nothing
Returns _______
TRUE (-1) if user presses Esc
FALSE (0) if user presses Return (aka Enter)
DateFmt$ FormattedDate$ = DateFmt$(d%, m%, y%, intl%)
I use this routine to print the formatted date after getting input
from the user. You can "PRINT DateFmt$()" or assign it to a
variable. Use the ChooseCountry% menu to let the user set Intl%.
Pass ____
d% Day on the month
m% Month number
y% Year (4-digits)
Intl% International formatting
1 = USA (mm/dd/yyyy)
2 = Canadian (dd-mm-yyyy)
3 = USA & Cdn (dd MoName yyyy)
4 = International (dd MoName yyyy)
Returns _______
Formatted date
DateVal% dv% = DateVal%(TheDate$)
Converts dates from 1992 to 2078 to an integer number for date
calculations. For example, DateVal%(Date1$) - DateVal%(Date2$)
would give you the number of days between the two dates. Years
prior to 1992 are converted to 1992.
Pass ____
TheDate$ Date formatted the same as BASIC's DATE$ function
Returns _______
Integer value based on the date
ANGELIB for BC7/PDS 19 ___________________
DBFHeader DBFHeader file$, Fld$(), reclen%, recs&, NoFlds%
Opens .DBF file FileName$ and returns field names in Field$(),
record length in reclen%, number of records in the file in recs&,
and number of fields in NoFields%. You can then call DBFPickFld
to pick fields from the list. See also DBFPickFld function.
Pass ____
file$ The DBF file name, including drive and path, if
necessary
Fld$() This array must be initialized prior to calling
DBFHeader to the maximum number of fields (I
would suggest setting it to at least 50, unless
you know better).
Returns _______
Fld$() The names of the fields. The first field name is
in Field$(1), etc.
reclen% The file's record length
recs& The number of records on file
NoFlds% The number of fields
Delay Delay Sec!
Delays for Sec! seconds. I use this for copyright messages, etc.
The accuracy is roughly +/- .1 seconds on a 386/40.
Pass ____
Sec! Number of seconds to delay (floating point)
Returns _______
Nothing
ANGELIB for BC7/PDS 20 ___________________
DrawFDD DrawFDD Light%, iRow%, iCol%
Draws a text picture of a floppy on the screen at iRow%,iCol%. If
Light% is TRUE (-1) then the light blinks red (bright white on
mono monitors), else it is white.
Pass ____
Light% True if drive "light" is to blink, false if not
iRow% Top row of picture
iCol% Left column of picture
Returns _______
Nothing
DrawHDD DrawHDD Light%, iRow%, iCol%, Msg$
Similar to DrawFDD but draws a text picture of a hard disk and
places the current drive (CURDRIVE) letter in the box.
Pass ____
Light% True if drive "light" is to blink, else false
iRow% Top row of picture
iCol% Left column of picture
Msg$ A message up to 20 characters long to display
inside the picture. If longer than 20 chars it
will be truncated.
Returns _______
Nothing
ANGELIB for BC7/PDS 21 ___________________
DrvSpace DrvSpace (Drive$, Total&, Free&, EC%)
Returns total space and free space (in bytes) of drive Drive$.
Pass ____
Drive$ Disk drive letter (e.g., "C")
Returns _______
Total& Total bytes are returned in this variable
Free& Free bytes are returned in this variable
EC% DOS error code is returned in this variable or
zero if no error
ElapsedTime ElapsedTime STime$, ETime$, Hour%, Minutes%, Secs%
Calculates elapsed time.
Pass ____
STime$ Starting time hh:mm:ss (same format as TIME$
function)
ETime$ Ending time hh:mm:ss (same format as TIME$
function)
Returns _______
ETime$ Formatted elapsed time (hh:mm:ss)
Hour% Elapsed hours
Minutes% Elapsed minutes
Secs% Elapsed seconds
Example _______
S$ = TIME$ 'Starting time
(do whatever needs to be done)
E$ = TIME$ 'Ending time
ElapsedTime S$, E$, H%, M%, S%
ANGELIB for BC7/PDS 22 ___________________
ErrScn ErrScn ErrCode%, Module$
Presents an error screen showing error number, english text,
possible solution, and module name.
Pass ____
ErrCode% Error number
Module$ Module name
Returns _______
Nothing
ErrSolve$ ErrSolve$ Number%
Prints possible solution to error number Number%. Used by
subroutine ErrScn. Not very extensive (to save memory), but it
sure beats no error handling...
ErrText$ ErrText$ Number%
Prints text of error Number%. Used by ErrScn.
ANGELIB for BC7/PDS 23 ___________________
FileBackup% ec% = FileBackup%(FileMask$, Method%)
Asks for user to enter path (including drive) on which to store
the back-up (e.g., "A:\" or "\TEMP\BACKUPS") then backs-up
FileMask$ to drive Drive$ using Method%.
Pass ____
FileMask$ File mask to include in restore (e.g., *.*,
*.DAT, OLD??.*, etc.)
Method% The method to use in making the back-up
1 = DOS Copy
2 = ARJ (req. a lot of free memory)
3 = LHARC
4 = PKZIP
Returns _______
0 = Completed
1 = Cancelled
2 = Bad file mask
3 = No files matching file mask
Notes _____
Requires GetValidPath$() function (GETPATH.OBJ)
ANGELIB for BC7/PDS 24 ___________________
FileRestore% ec% = FileRestore%(FileMask$, Method%)
Menu of floppy drives then if Method% is 2, 3, or 4 a menu of
files matching FileMask$ (user can select one to restore). If
Method%=1 all files matching FileMask$ are restored.
Pass ____
FileMask$ Files to restore (*.*, *.DAT, OLD??.*, etc.)
Method% The method to use in restoring
1 = DOS Copy
2 = ARJ (req. a lot of free memory)
3 = LHARC
4 = PKZIP
Anything else = DOS Copy
Returns _______
0 = Completed
1 = Cancelled
2 = Bad file mask
3 = No files matching file mask
Notes _____
Requires ChooseFile$() function (CHOOSEFL.OBJ).
FileRestores% ec% = FileRestores%(FileMask$, Method%)
Same as FileRestore%() function above except that user can select
one or multiple files to restore. See FileRestore%() for a
description of the parameters.
Notes _____
Requires ChooseFileS$() function (CHOOSEFS.OBJ). Will add ½k
to 10k to your code size over using FileRestore%().
ANGELIB for BC7/PDS 25 ___________________
FKeys FKeys Keys$
Displays a list of function keys at the bottom of the screen.
Pass ____
Keys$ String of keys to be displayed (e.g., "EPNQ").
Plus sign (+) is a reserved character. If the
first character is a plus sign followed by two-
digits, then the keys are placed starting on that
row. For example, "+24EPNQ" would place the keys
on row 24/25, instead of the default rows 23/24.
Notes _____
The file FKEY.LST is seached first if it is in the current
directory, then an internal list is searched if the keys are not
found. The format of FKEY.LST ASCII file is:
KeyCode$,KeyName$,KeyDesc$,XPos%
For example, a line reading "C,Enter,Continue,51" would place the
key "Enter" (in reverse video) and the description "Continue"
under it at column 51 whenever an FKeys "C" is issued in a
program. See the sample FKEY.LST file.
The routine scans the first screen row at column 1 for the colour
to use.
The keys "AacCFNoPQSsTtyn" are defined internally as follows:
A - Up and Down arrows
a - Up/Down/Right/Left arrows
C - Esc = Cancel
c - Enter = Continue
N - PgDn = Next
o - Enter = OK
P - PgUp = Prev
Q - Esc = Quit
S - Enter = Select
s - Esc = Stop
T - TAB = Next
t - BackTAB = Prev
y - Enter = Yes
n - Esc = No
ANGELIB for BC7/PDS 26 ___________________
FmtFDD% ec% = FmtFDD%
Format floppy disks.
Pass ____
Nothing
Returns _______
TRUE if function completed
FALSE if cancelled
Notes _____
It's easiest to give you an algorithm of the logic flow:
Search DOS PATH for WFF.EXE (What Floppy Format?)
If found, run it and exit
How many drives does this computer have?
If more than 1 present list
Issue DOS command "FORMAT d:" and exit
I always put a "Format Floppies" option under my File menu
which simply does "i% = FmtFDD". See also FromFDD% and
ToFDD% functions.
ANGELIB for BC7/PDS 27 ___________________
FontDL FontDL FontFile$, Pts%, Port%, FontNo%
Downloads a soft font file to a laser printer and displays a
status window while doing so.
Pass ____
FontFile$ The full file name, including drive and path if
necessary, of the soft font file to be
downloaded.
Port% The port number (1-3) of the printer.
FontNo% PCL font number to assign this font (e.g., 400).
Numbers >128 are generally best to use as the
lower numbers have standard fonts which typically
apply to them.
Returns _______
Pts% The point size of the font is returned in this
variable.
Example _______
ok% = FontDL%(FontFile$, Pts%, Port%, FontNo%)
if ok% then
PRINT #PrintFile%, chr$(27)+"("+ltrim$(str$(FontNo%))+"X"
end if
Notes _____
The above sequence selects FontNo% as the primary font (the
'(' does this). To select it as the secondary font use
chr$(27)+"("+ltrim$(str$(FontNo%))+"X"
ANGELIB for BC7/PDS 28 ___________________
GetDate GetDate d%, m%, y%, Intl%, Row%, Col%
Accepts date from keyboard at {Row%,Col%} unformatted (no symbols,
just numbers run together). Extended keys (arrows, PgUp, etc.)
will exit plus a mouse button push or the Alt key. Intl%
determines the sequence of entry.
Pass ____
d% Default day (1-31), zero to use to-day's date,
negative to skip the day
m% Default month number, zero to use current month,
negative to skip the month
y% Default year number (4 digits), zero to use
current year, negative to skip the year
Intl% Country setting (1=US, 2=Cdn, 3=US & Cdn,
4=Other)
Row% Screen row on which to get input
Col% Screen column in which to get input
Returns _______
d%, m%, and y% are set to user's input
GetFileDesc$ desc$ = GetFileDesc$(file$)
Get a file's description (long name) from the DESCRIPT.* file in
the current directory.
Pass ____
file$ DOS file name. You can specify a drive & path,
but the current directory will be accessed for
the DESCRIPT.* file.
Returns _______
Description (long name) of the file.
ANGELIB for BC7/PDS 29 ___________________
GetFileName$ afile$ = GetFileName$(InOut%, ttl$, msg$, dflt$, ms%)
Get a file name from user in a window, verify proper format of
entry, and check status of file.
Pass ____
InOut% Input or Output file?
1 = Input file (file must exist; error message
displayed if not) ('1' is for 'I'nput)
0 = Output file (checks that file does not exist;
if file exists, presents a warning that file will
be over-written) ('0' is for 'O'utput)
ttl$ Title of window
msg$ Help message displayed on the screen below the
file entry window
dflt$ Default response
ms% Mouse flag (0=no mouse, non-zero=use mouse)
Mouse cursor should be invisible (off)
Returns _______
Name of file, including drive and path (if entered)
GetFileNames$ files$ = GetFileNames$(InOut%, ttl$, msg$, dflt$, ms%)
Same as GetFileName$ except that user can specify more than one
input file.
Pass ____
InOut% Input or Output file?
1 = Single input file
-1 = Multiple input files
0 = Output file
Everything else is the same as GetFileName$() above.
Returns _______
Drive and path (if entered) followed by file name(s) padded
to 12 spaces.
ANGELIB for BC7/PDS 30 ___________________
GetFontInfo GetFontInfo File$, FontName$, PtSize%
Provides name & size in the header of a soft font file. Try
FontDL% on your laser for a demonstration of this.
Pass ____
File$ The name of the soft font, including drive and
path, if necessary.
Returns _______
FontName$ The long name of the font is returned in this
variable, if present (some fonts do not have any
name in the header)
PtSize% In the font file's header is a point size -- the
integer value of this is returned (decimal
chopped off). Although this should be the real
point size, it's possible for it to be wrong.
ANGELIB for BC7/PDS 31 ___________________
GetNum$ n$ = GetNum$(iRow%, iCol%, NumMask$, OrigNo$, ExitCode%)
Get formatted numerical input from user. Screen colours at the
specified location will be inverted during input and restored upon
exit.
Pass ____
iRow% Row at which to get input
iCol% Left column at which to get input
NumMask$ Format mask. Valid mask characters are pound
(#), dollar ($), and comma (,); all else are
literals (same as PRINT USING). E.g., "#,###",
"$$##.##" or "(###) ###-####".
OrigNo$ Default number in string form to avoid numerical
data type conflicts. Can be integer or floating
point.
Returns _______
User's entry as a string (use VAL to extract it into the
proper variable; for example, Cost@=VAL(A$) or Miles%=VAL(A$)
ExitCode% ASCII value of key user pressed to exit. E.g.,
Esc = 27. If an extended key (e.g., F4, PgUp,
etc.) is used ExitCode% is negative.
Example _______
A$=GetNum$(15,30,"$$###.##",STR$(UnitPrice@),ExitCode%)
In the above example an input field will be created at
location (15,30). The original number, UnitPrice@, will be
formatted and displayed using the mask "$$###.##", then the
computer will wait for the user's input. The key that the
user presses to exit the field will be returned in the
variable ExitCode%.
See FKEYS.BI for key definitions.
ANGELIB for BC7/PDS 32 ___________________
GetValidPath GetValidPath Drv$, path$, Msg$, InOut%, ms%
Displays Msg$ then asks user for a valid path name, defaulting to
Drv$ and Path$. If path does not exist and it is being used for
output, user is asked if s/he wants to create it.
Pass ____
Drv$ Default drive (e.g., "C:")
Path$ Default path (e.g., "\TEST\DIR")
Msg$ Helpful message to display on the screen (using
Inform%)
InOut% 1=Input/0=Output
If InOut%=0 will prompt to create a directory
that does not exist.
ms% 0=No mouse, 1=Use mouse
Returns _______
Drv$ Selected drive letter followed by a colon
Path$ Selected path with trailing foreslash (\) (e.g.,
"\TEST\DIR\")
Notes _____
The mouse must be initialized and visible to use it. To keep
things simple & save stack space, the windows are at fixed
positions (which also helps keep things consistent, too).
ANGELIB for BC7/PDS 33 ___________________
GoodbyeScreen GoodbyeScreen Pkg$, Reg%, FirstUse$, TimesUsed%
Presents a 'goobye screen' with which I end my programmes. It
also has my name on it... :) When you register ANGELIB you will
get a version which lets you put your copyright message on it.
Pass ____
Pkg$ Package abbreviation (e.g., "WVH", "WML", etc.).
Should be a short name to fit properly in window.
Reg% Registration flag, true/false, controls the
information displayed
FirstUse$ Date of first use. Used to calculate number of
days package has been used.
TimesUsed% Number of times package has been used.
Returns _______
Nothing
ANGELIB for BC7/PDS 34 ___________________
HelpIndex HelpIndex Topic$, FileSpec$
Displays a help index (menu) or a specific help screen.
Pass ____
Topic$ A specific topic to look up (as might be desired
with context-sensitive help). If blank an index
is presented in a scrollable menu. Once the user
selects a topic, the help text is displayed using
the Inform% function.
FileSpec$ The specification for the help file. If blank,
"*.HLP" is used. FileSpec$ may contain a drive,
path, and/or file name (wildcards okay).
Returns _______
Nothing.
Notes _____
The help file is an ASCII text file which is arranged like this:
Topic #1+chr$(4)+Help information
more information at least one space from left
more help etc. etc.
Topic #2+chr$(4)+Help info...
Help files may contain up to 100 topics. The total length of the
help text for a single entry is limited to 99 lines with a maximum
of 50 characters per line (roughly 4k of text). Topics MUST begin
in column one, additional text MUST begin AFTER column 1 (i.e.,
indent the help text at least one space).
The topic may begin with a chr$(1) through chr$(3) to indicate an
outline level. For example, you might have FILE then
chr$(1)+Open.
ANGELIB for BC7/PDS 35 ___________________
Inform% ok% = Inform%(iRow%, iCol%, iWid%, iType%, ms%, snd%, Msg$)
Displays a scrollable information window containing up to 99 lines
of information. Msg$ may be any length. The routine will break
the message into lines of iWid% length or less. If the box is
positioned too low on the screen, it will be adjusted upwards.
Pass ____
iRow% Top row of window
iCol% Left column of window
iWid% Window width (in characters)
iType% Determines buttons (see below)
0="Message" (no buttons)
1="Note" (Ok button)
2="Caution" (Ok/Cancel)
3="Warning" (blinking) (Continue/Stop)
4="Attention" (blinking) (Yes/No)
ms% Mouse support
0 = No mouse
1 = Mouse available
99 = Reset mouse & use it, if available
snd% Sound: 0=None 1=Squeak 2=Tick 3=Beep
Msg$ Message to display in the window. Will be
truncated at 99 lines, if necessary.
Returns _______
TRUE if user presses ENTER to exit
FALSE if user presses ESC to exit
Notes _____
All message types except zero restore the screen on exit. Use
iType%=0 when you want to put information on the screen and leave
it there, such as instructions on how to enter data.
The mouse should be turned OFF before calling Inform%
Custom Titles _____________
A custom title can replace the default. Just place a title plus
chr$(254) at the start of your message (changed from chr$(4) to
allow the code to be imbedded without the use of the CHR$ function
ANGELIB for BC7/PDS 36 ___________________
InformFill InformFill Row%, Col%, BegLine%, WinSize%, MLines$()
Used by Inform% -- fills the window with text.
InputDate InputDate Mo%, Dy%, Yr%, DtStr$, Row%, Col%, ExitCode%
Accepts a valid date. Unlike GetDate, InputDate only supports the
DD/MM/YYYY format and does not check for a mouse button or the Alt
key being pressed. However, the input is formatted whereas
GetDate has all the numbers run together.
Pass ____
Mo% Month number (1-12)
Zero for current month
-1 to skip month
Dy% Day number (1-31)
Zero for current day
-1 to skip day
Yr% Year number (4 digits)
Zero for current year
-1 to skip year
r%/c% Screen row & column at which to display/get date
Returns _______
DtStr$ Date string formatted MM/DD/YYYY.
ExitCode% Set to the key used to exit.
Example 1 _________
M%=0: D%=0: Y%=0: row%=10: col%=20
InputDate M%, D%, Y%, DtStr$, row%, col%, ExitCode%
This will get the date at location {10,20} using the system
date as default. Because InputDate is a BASIC subroutine, it
is not necessary to initialize DtStr$ before using it.
Example 2 _________
M%=5: D%=-1: Y%=0: row%=10: col%=20
InputDate M%, D%, Y%, DtStr$, row%, col%, ExitCode%
This will get a month and year at location {10,20} using May
and the system clock's year as default.
ANGELIB for BC7/PDS 37 ___________________
IsColour% x% = IsColour%
Get adapter card type.
Pass ____
Nothing
Returns _______
True (-1) if colour adapter card, otherwise False (0).
IsPath% stat% = IsPath%(Pathname$, InOut%)
Checks validity & extends path. If directory is being accessed
for output and does not exist, user is prompted to create it.
Pass ____
TheName$ Path name in the format [d:][\path\]
If the drive or full path are missing the current
drive/path are inserted
InOut% 1=Input/0=Output
If directory does not exist and InOut%=0 then
user will be prompted to create the directory
Returns _______
0 = Path not found/not created (suitable for Output) _
1 = Path exists (suitable for Input) _
-1 = Bad path specification, or -2 = Other error
TheName$ Contains the fully extended path name including
the drive letter unless user hit Esc when asked
permission to create the directory.
Example _______
Assume the current path is C:\ugh\ and no directories under it.
Path$ = "test": InOut% = 0
stat% = IsPath%(Path$, InOut%)
select case stat%
case 0 'Path not found & not created (user hit Esc)
case 1 'Path found, everything okay
case is < 0 'Bad path specification or DOS error
Inform user that C:\ugh\test\ does not exist & ask to create. If
"No" stat%=0 & Path$="test", else stat%=1 & Path$="C:\ugh\test\"
ANGELIB for BC7/PDS 38 ___________________
Max% Highest% = Max%(A%, B%)
Returns the larger of the two integers
MaxL& Highest& = MaxL&(A&, B&)
Returns the larger of two long integers.
MaxS! Highest! = MaxS!(A!, B!)
Returns the larger of two single-precision floating point numbers.
Min% Lowest% = Min%(A%, B%)
Returns the smaller of two integers.
MinL& Lowest& = MinL&(A&, B&)
Returns the smaller of two long integers.
MinS! Lowest! = MinS!(A!, B!)
Returns the smaller of two single precision numbers.
ANGELIB for BC7/PDS 39 ___________________
MonthDays% NoDays% = MonthDays%(M%, Y%)
Returns the number of days in month M% of year Y%.
Pass ____
M% Month (1-12)
Y% Year (2 or 4 digits)
Returns _______
Number of days in the specified month
Example _______
MonthDays%(2,1992) returns 29
OutDev$ PDev$ = OutDev$(Port%, ms%)
Presents a menu of output devices: Screen, Printer, and Disk File.
If Disk File is selected the user is prompted for a file name
(using GetFileName$). If Printer is selected the routine checks
if the printer is on-line (that's partly why Port% is needed) and
returns the device name as "LPT1:", "LPT2:", or "LPT3:" (that's
also why Port% is needed).
Pass ____
Port% Port number of printer (1, 2, or 3)
ms% Mouse support: 0=no, non-zero=yes
Returns _______
Device or file name
OutDevs$ PDev$ = OutDevs$(Port%, ms%)
Same as OutDev$ function, but for use with ChooseFiles$,
FileRestore2%, GetFileNames$, and SelectSoftFonts% routines.
See OutDev$ function for details.
ANGELIB for BC7/PDS 40 ___________________
ParseFSpec ParseFSpec TheName$, Drv$, Pathname$, TheName2$
Searches file name for the drive, path, and NAME.EXT components.
Pass ____
TheName$ Full file name to parse
Returns _______
Drv$ Drive letter followed by a colon (if present)
Pathname$ Path name, if present, beginning and ending with
a foreslash (\). Path will be extended with
current path, if necessary.
TheName2$ FILENAME.EXT, if present
Notes _____
Converts the regular slash (/) to a foreslash (\), in case user
enters the wrong one.
If an invalid file name is entered (for example, more than eight
characters in the name or more than three characters in the
extension) then TheName2$ is returned as a blank string.
The original file name, TheName$, is not changed so that if there
is an error it can be given to the user for editing again.
ANGELIB for BC7/PDS 41 ___________________
PctDone PctDone PctY%, PctX%, Percent%, title$
Displays a graph of percentage completion in a box on the screen.
If the process takes longer than 10 seconds a count-down timer
will appear below the graph.
Pass ____
PctY% The row (Y position) of the top right corner
PctX% The column (X position) of the top right corner
Percent% Percentage to draw on the graph. The first time
PctDone is called a small window is drawn. When
Percent% is 100 the window is erased.
title$ A title (10 chars max) to display over the
progress bar. The length of the title determines
the width of the window.
Returns _______
Nothing
Notes _____
You must call PctDone with 100 to clear it. If you do not, the
window will not be displayed until the routine is cleared.
Example _______
For Sort&=0 to NumRecs&
PctDone 9, 30, 100 * Sort& \ Y&, "Sorting"
do something...
next Sort&
PrintRptMsg PrintRptMsg Msg$
Displays a window saying "Printing "+Rpt$+" Press Esc to cancel."
I use this on every report so I made it into a routine.
Example _______
Rpt$ = "Stock Status Report"
PrintRptMsg Rpt$
ANGELIB for BC7/PDS 42 ___________________
PtrReady% ok% = PtrReady%(Port%)
Checks if printer on LPT[Port%] is on-line.
Pass ____
Port% Printer port (1, 2, or 3)
Returns _______
TRUE if ready, FALSE if not
Notes _____
It doesn't matter whether or not you have opened a channel to
the printer before calling this routine.
QSort QSort Wrk%(), Arr1$(), Arr2$(), NoDims%, NoItems%, SortField%
A good public domain sorting method. Used by ChooseFile$ to sort
the file list.
See the source code in QSORT.SUB. This is not my code -- I'm not
selling it, I just use it and pass it on to you...
Repl$ cmd$ = Repl$(St$, Target$, Item$)
Replaces occurence of Target$ in St$ with Item$. Good for laser
printer codes.
Pass ____
St$ Complete string
Target$ The part of St$ to be replaced
Item$ The replacement for Target$
Returns _______
The modified string with trailing spaces & nulls truncated.
Example _______
Repl$("&a#V ","#","500") will return "&a500V"
ANGELIB for BC7/PDS 43 ___________________
SayOk SayOk Row%, Col%, ms%
Puts an "Ok" button centred at position {Row%, Col%} and an "Enter
/ Continue" message at the bottom of the screen, flushes keyboard
buffer, then waits for mouse or keyboard to exit.
Pass ____
Row% Row on which to place button
Col% Middle of button
ms% Use mouse support? (True/False)
Returns _______
Nothing
Notes _____
Scans screen at {Row%-1, Col%} and inverts the colours found
there -- the idea being to make the button stand out from the lines
above it.
If ms% is non-zero (True) then the mouse must be initialized
but invisible.
SearchPath$ a$ = SearchPath$(FileName$)
Searches the DOS PATH environment variable for a file.
Pass ____
FileName$ Name of file for which to search (file name only;
no drive or path)
Returns _______
If file is found, DOS path with trailing foreslash (\)
If file is not found, returns blank string ("")
Example _______
Assuming you have C:\ in your search path...
A$ = SearchPath$("Config.sys")
will set A$ = "C:\"
ANGELIB for BC7/PDS 44 ___________________
SelectFont% ok% = SelectFont%(m$,path$,PtrNo%,Pts%,Ext$,SFdir$,ms%)
Displays a scrollable list of soft fonts in a window and waits for
user to select one or press Esc. List will show DOS file name,
font name (if present in header) and point size (if present in
header).
Pass ____
m$ Purpose of font, displayed at top of window
(e.g., "Printing", "Reports", "Titles", etc.)
path$ File specification for PRINTER.DAT file. path$
may contain a drive, path, and/or file name. If
no file name is given, PRINTER.DAT is used. If
no drive & path are given, the current drive &
path are used.
PtrNo% The printer's record number in PRINTER.DAT
Ext$ Soft font file extension (e.g., "SFP" for
portrait fonts, "SFL" for landscape fonts)
SFdir$ Default soft font directory (e.g., "C:\Fonts")
ms% Mouse support: 0=no mouse, 1=use mouse
Returns _______
Function returns font's record number in PRINTER.DAT or zero
if user presses Esc
m$ Changed to soft font file name (including path)
if soft font selected
Pts% Changed to point size if scalable font
SFdir$ Soft font directory with any user modifications
Notes _____
Mouse must be initialized but turned OFF
SelectFonts% ok% = SelectFonts%(m$,path$,PtrNo%,Pts%,Ext$,SFdir$,ms%)
Same as SelectFont%() function except that it uses ChooseFileS$()
(instead of ChooseFile$()).
ANGELIB for BC7/PDS 45 ___________________
SelectFontSize% Pts% = SelectFontSize%(Font$, IsPts%, ms%)
This routine gets the user's choice for font size in a window.
This routine is called whenever a scalable font is selected in
SelectFont% (I don't ever use this routine directly).
Pass ____
Font$ The font name (for displaying on the screen).
For example, CG Times.
IsPts% Logical flag to indicate whether point size is
needed (versus character pitch). If true
"points" is displayed; otherwise (if zero)
"character pitch" is displayed on screen.
ms% Mouse flag: 0=no mouse, 1=use mouse
Returns _______
Font size (integer) or zero if user presses Esc.
Notes _____
This routine is called by SelectFont%. Mouse must be
initialized but turned OFF (invisible cursor).
SelectSoftFont$ Font$ = SelectSoftFont$(Path$, Ext$, ms%)
This routine presents a scrollable list of soft fonts in a window.
It is called by SelectFont% if the user selects a soft font (as
opposed to a font built into the printer).
Pass ____
Path$ Path to soft fonts
Ext$ Extension to be included in the list (e.g., "SFP"
for portrait fonts)
ms% Mouse support (0=no, 1=yes)
Returns _______
Name of chosen font, including drive & path, if necessary.
Path$ Path as modified by user
Notes _____
Uses ChooseFile$() function
ANGELIB for BC7/PDS 46 ___________________
SelectSoftFonts$ Font$ = SelectSoftFonts$(Path$, Ext$, ms%)
Same as SelectSoftFont$() except this routine uses ChooseFileS$()
instead of ChooseFile$().
StrFmt$ ph$ = StrFmt$(Mask$, St$, reverse%)
Formats a string according to a given mask. I use this to format
phone numbers, zip codes, etc.
Pass ____
Mask$ Mask: "#" is a digit or a space; "9" is a digit
or a zero; "*" is a digit or an asterisk;
everything else is treated as a literal
St$ String to format
reverse% Flag: if TRUE formatting is done from right to
left; if FALSE (0) formatting is done from left
to right. TRUE is the most common setting.
Returns _______
Formatted string
Examples ________
a$ = StrFmt$("8052662574","(###) ###-####",-1)
returns a$ = "(805) 266-2574"
a$ = StrFmt$("2726893","(###) ###-####",-1)
returns a$ = "( ) 272-6893"
a$ = StrFmt$("$*****","15",-1)
returns a$ = "$***15"
StripSymbols$ new$ = StripSymbols$(Old$)
This strips any symbols from a string, returning numbers and
letters only. I use it to strip the parenthesis, etc. from phone
numbers, etc. Returns the string St$ stripped of its parenthesis,
dashes, and commas.
Example _______
a$ = StripSymbols$("(805) 272-4923")
returns a$ = "8052724923"
ANGELIB for BC7/PDS 47 ___________________
Trim$ b$ = Trim$(a$)
Trims leading & trailing spaces and trailing chr$(0)'s from a
string (using LTRIM$/RTRIM$ will remove spaces but not nulls). I
use this to test the length of static strings, which are padded
with CHR$(0)'s.
ZipFmt$ a$ = ZipFmt$(TheZip$)
Formats a zip code.
Pass ____
TheZip$ Unformatted Zip/Postal code
Returns _______
Zip/postal code formatted as follows:
* If all numbers, #####-#######
* If len 4 or 5 -- A#A #A#
* Other -- No formatting
zTrim$ b$ = zTrim$(a$)
This routine only trims trailing nulls [chr$(0)] from the string.
Good for trimming fixed-length file fields which are padded with
nulls when you don't want to remove any spaces [chr$(32)] from the
string.
ANGELIB for BC7/PDS 48 ___________________
XII. USING PRINTER FUNCTIONS
In order to use the printer functions, you will need to include
the data structures definition file PtrRec.DEF in your source code.
Place the line '$INCLUDE: 'PtrRec.DEF' near the beginning of your
code.
Next, you will need to dimension the variables to hold the
records. I use both local and the global (common) variables; either
will work fine unless your programme is strapped for memory one way or
the other. For local variables use DIM; to make the variables global
use DIM SHARED. The record types are:
LaserPtrRec - Control codes which are not font-specific
LaserFontRec - Font-specific control codes
DMPtrRec - Dot matrix codes which are not font-specific
DMFontRec - Font-specific dot matrix control codes
The records are all the same length so that the single file,
PRINTER.DAT, can contain all four record types. Laser printer records
start with a greater-than (>) sign (for example, ">Panasonic KX-
P4450"). Dot matrix printer records start with a dot (for example,
".NEC P5300"). Both record types (dot matrix and laser) begin with a
Model field, so you can use a LaserPtrRec variable to read a dot
matrix record, then, if the Model begins with a period, re-read the
record as a DMPtrRec variable.
Here are the steps your programme will need to take to set
everything up:
1. Use the ChoosePtr% function to get and save the user's
choice for a printer
2. Use SelectFont% to get the user's font choice(s).
3. Save printer & font choices in a configuration file.
4. Either at programme start-up or before printing read the
printer control codes into memory. For example:
DIM SHARED Lz as LaserPtrRec
DIM SHARED DM as DMPtrRec
PtrFile% = FREEFILE
OPEN HomePath$ + "Printer.DAT" FOR RANDOM ACCESS READ SHARED
AS PtrFile% LEN = LEN(Lz)
GET #PtrFile%, PtrRec%, Lz
IF LEFT$(Lz.Model, 1) = "." THEN
GET #PtrFile%, PtrRec%, DM
END IF
5. At programme start-up or before printing read the printer
font codes into memory (like the example below)
ANGELIB for BC7/PDS 49 ___________________
DIM LF as LaserFontRec
DIM DF as DMFontRec
' Normally you would already have PtrFile% open from the
' above routine (to read the printer codes). If not, you
' would need to open the file as in the above routine.
m$ = "Reports": Ext$ = "SFP" 'Portrait fonts (SFP)
FontRec%=SelectFont%(m$, PtrRec%, Pts%, Ext$, SFdir$, ms%)
SELECT CASE FontRec% 'Check result
CASE 0 'User hit Escape key
EXIT SUB
CASE -1 'User chose soft font
PRINT #PrintFile%, zTrim$(Lz.Init); 'Reset laser
Done% = FontDL(SFont$, FPts%, PtrPort%, 400) 'Download font
IF NOT Done% THEN 'User aborted download; flag routine as 'cancelled'
EXIT FUNCTION or SUB
END IF
IF FPts% > 0 THEN 'FontDL got a size?
Fcpi% = 120 \ FPts% 'Cvt points to rough CPI for calcs
ELSE 'No size in font hdr
Fcpi% = 10 'Assume 12pt/10cpi for calcs
END IF
PRINT #PrintFile%, CHR$(27); ")400X"; 'Secondary, ID #400
CASE ELSE
IF Ptr$ = "D" THEN 'DOT MATRIX PRINTER
GET #PtrFile%, FontRec%, DF
PRINT #PrintFile%, zTrim$(DM.Init); 'Reset
PRINT #PrintFile%, zTrim$(DF.Select); 'Select font
T$=Trim$(DM.HTab) + CHR$(2 * Fcpi) + CHR$(0) 'Set tab @ 2"
ELSE 'LASER PRINTER
GET #PtrFile%, FontRec%, LF
PRINT #PrintFile%, zTrim$(LF.SymSet2); 'Make secondary
PRINT #PrintFile%, zTrim$(LF.Select2); 'Use SymSet1 etc
PRINT #PrintFile%, zTrim$(LF.Spacing); 'to make Primary
IF VAL(LF.Pitch) = 0 THEN 'Scalable font?
PRINT #PrintFile%,LTRIM$(STR$(Pts%)); 'Point size
END IF '(from SelectFont%)
PRINT #PrintFile%, zTrim$(LF.Pitch); 'Pitch select cmd
PRINT #PrintFile%, zTrim$(LF.Slant); 'Upright/italic
PRINT #PrintFile%, zTrim$(LF.Weight); 'Light/Med/Bold
PRINT #PrintFile%, zTrim$(LF.Number); 'PCL font number
IF RIGHT$(zTrim$(LF.Pitch), 1) = "h" THEN 'Mono-spaced?
Fcpi% = VAL(LF.Pitch) 'Store cpi
FPts% = 120 \ temp1% 'Cvt cpi to rough pts if nec
ELSE
FPts% = VAL(LF.Pitch) 'Store points
Fcpi% = 120 \ TPts% 'Cvt pts to rough cpi if nec
END IF
END IF
ANGELIB for BC7/PDS 50 ___________________
END SELECT
CLOSE #PtrFile%
Now you have the printer ready to go and you have the variables
Fcpi% and Fpts% to work with in calculating TAB locations, line
length, etc.
You will notice that I use zTrim$() rather than just printing a
variable. This is because BASIC pads TYPE fields with nulls -
CHR$(0)'s. The zTrim$() function removes CHR$(0)'s but leaves
trailing spaces (which may be part of the command string).
There are some things that you must know, such as that the pitch
command for a PCL (laser) printer ends in "h" if it is mono-spaced
(cpi) and "v" if it is proportionally-spaced (points). Also, in
setting a TAB string in the above example I used the Epson-standard
which terminates the setting of TABs with a CHR$(0). This is the best
solution I have come up with, and every printer I've seen in the past
five years uses Epson codes anyhow, so I figure this technique will
work 90% of the time or better.
You can make your own PRINTER.DAT file or modify the one supplied
just by using the PtrRec.DEF file. Someday soon I will make a
programme for modifying the PRINTER.DAT file, but for now it will have
to be done manually. I would really appreciate it if you would share
with me any new printers you install by sending me your modified
PRINTER.DAT file.