MEMOPO Version 2.0
The dBASE III Memo Field Utility for the Civilized
Copyright (c) 1985,86 P. L. Olympia, Ph.D.
Darwin Systems, Inc.
WHAT IS MEMOPO?
Ever been frustrated by dBASE III's limited implementation of the
potentially useful MEMO fields facility? Don't you wish you can
import text data created by your favorite text editor or downloaded
from a mainframe into your MEMO fields? Don't you wish you can export
your memo fields to the screen, file or printer, so that you may edit
them with your text editor, search them for keywords, etc? Are you
tired of dBASE III ver 1.0, 1.1., 1.2 and dBASE III Plus taking lots
of space for your memo fields or taking forever to pack or reorganize
your DBT files?
Yes? You need MEMOPO!
MEMOPO allows you to
1. Load text data created elsewhere to one or more memo fields - no
limit on the length of the text data and no practical limit on
the number of dBASE records or memo fields.
2. Display ONE or ALL memo fields' contents to the screen, printer
or file in the EXACT form that you entered them. When the data
are directed to a file, you can use your favorite text editor to
search for keywords, modify the data, load them right back, or
include them in your reports.
3. Reorganize (pack) your DBT files so that all unused and wasted
space disappears in 1/10 the time it takes dBASE to do the same -
and you don't even need dBASE!
4. Do all of the above in DOS, as part of a batch job (unattended)
execution or from within dBASE as part of your PRG command file
without any need for your user to interact with the program.
5. Do all of the above F-A-S-T.
The program works under PC-DOS for files created by all versions
of dBASE III, including dBASE III Plus. You don't need dBASE to run
the program, but you may run it while under dBASE control. It has full
path and subdirectory support.
The size of the text data that you can import or export is
limited only by your disk space, your printer ribbon or your patience.
There is no limit on the size of the DBF or DBT files that you can
work on. You can work on as many as 10 memo fields per data base (I
just had to set this at some number - show me someone who uses more
than 10 memo fields per data base and I'll show you a nerd).
WHAT IS IN THE PACKAGE
MEMOPO.COM (the real thing, NOT public domain) -or-
MEMODPO.COM (the demo version, can be freely distributed)
MEMOPO.DOC This file you are reading
MEMOPO.DBF Sample dBASE III data base file you can use to test the pgm
MEMOPO.DBT Sample dBASE III file containing memo field data
MEMOPO.TXT Sample externally prepared file containing data that you
want to load into the sample DBT file
HOW ABOUT A LITTLE BACKGROUND?
Rather than waste space here to digress on the use, features and
misfeatures of MEMO fields as currently implemented in all versions of
dBASE III, I will simply refer you to my article, "Memo Fields
Explained", which appeared in the February 1986 issue of Data Based
Advisor. There, I talked about the structure of DBT and DBT files,
and how you get around some of the problems of MEMO fields.
The program may be invoked from DOS, from a batch file or from
within dBASE via the RUN or ! command. The command syntax is:
is one of the following: mport, port,
eorganize. You may use the first letter or you may
type the whole word if you love to type that much. The
program also recognizes the function
ack to be
synonymous to eorganize.
consist of filenames, data base record or memo field
number(s) that are used by the specific function that
you wish the program to perform. Each parameter is
separated from the next by a single space.
Here is a summary of the command syntax for all functions:
NOTE: If you are using the DEMO version, change call occurrences of
MEMOPO with MEMODPO
| MEMOPO R |
| MEMOPO I |
| MEMOPO I |
| MEMOPO E [>dosdev] |
The name of your DBF file. You may omit the DBF
extension, and you may prefix the name with the drive
or subdirectory where the file is located. IMPT: The
program expects to find the corresponding DBT file in
the same drive/subdirectory.
The name of the text file containing the text data to
load into the memo fields and directives (called FLAG
records) on which DBF record number and which memo
field (if more than one) to load those data into. The
filename may be qualified with drive/subdirectory. It
does NOT have to be in the same drive/subdirectory that
contains the DBF and DBT files. If the filetype is
omitted, the program assumes a filetype of TXT. If the
file does NOT have a filetype (WHY?) you MUST terminate
the filename with a period.
The name of the text file containing the data to import
to a specific DBF record number-memo field number
combination. It differs from the in that
it does NOT contain FLAG records. Everything else said
above for applies here also.
A single number or a range of numbers separated by a
dash (example, 2-36) which signifies the data base
record number(s) which is the target of the operation.
A single number or a range of numbers separated by a
dash (example, 1-2) which signifies the memo field
number which is the target of the operation. This is
always optional. If omitted, memo number 1 is always
assumed. This is handy for those with only one memo
field in their data base.
Any valid dos device (example PRN) or a filename which
will receive the EXPORTed data. If omitted, the data
are displayed on the screen only. The data will always
be displayed on-screen even as they are being
redirected to .
REORGANIZE (PACK) FUNCTION
PURPOSE Rids the DBT file of unused space and makes your memo field
operations more efficient.
SYNTAX MEMOPO R
EXAMPLES MEMOPO R C:\DBASE\DARWIN.DBF
MEMOPO R DARWIN
NOTES The program will NOT destroy your old DBT file. The old DBT
file will be created on the same drive/subdirectory where
the DBF file is, and will be given the filetype of ".OLD".
Therefore, you must have enough space on the drive to
accommodate at most another copy of the original DBT file.
The screen will show the program's progress by displaying
the counts of DBF/DBT records that it has processed.
PURPOSE List or display the contents of one or more memo fields to
the screen or redirect them to a file or any valid DOS
device such as a printer. The exported data may then be
included in reports, searched for keywords, edited for re-
loading with MEMOPO's mport function.
SYNTAX MEMOPO E [>dosdev]
and may specify a range,
EXAMPLES MEMOPO E C:\DB\DARWIN.DBF 8 2 >A:MEMO.TXT
MEMOPO E MYDBF 1-20 1-6 >PRN
MEMOPO E YOURDBF 7
The first example lists the contents of DBF record number 8,
memo field 2 of the database DARWIN.DBF located in the
drive/subdirectory C:\DB to the screen and to the file
MEMO.TXT on the A: drive.
The second example lists the contents of all memo fields 1-6
contained in DBF records 1-20 to the screen and printer. The
data base file MYDBF.DBF and its associated memo field
file, MYDBF.DBT are assumed to be in the default directory.
The third example lists the contents of memo field 1
(assumed if is not specified) of DBF record 7.
NOTES The display format is exactly the format that you used to
load the data with MEMOPO's mport function. All CR-LF
sequences are preserved so if your data contain columnar
tables, you will get the tables in exactly the form that you
The program is smart enough to know that if you specify a
range of numbers in non-sensical fashion, such as 20-1, you
really mean 1-20.
The output will be each memo field's text content preceded
by a FLAG record which identifies the record number/memo
number combination which is the source of the data. This is
useful for several reasons, one of which is that it already
is in the form suitable for mport after you make any
necessary edits to your data.
An example of a FLAG record is:
where "~" is the flag symbol, 20 is the DBF record number
and 3 is the memo field number.
If the DBT record is empty, the output line will be
~5,2 *No data*
meaning that DBF record 5, memo number 2 has no data. You
should get rid of this line before importing the text back
unless you are going to add data to 5,2 or unless you like
wasting DBT space.
PURPOSE Load text data of unlimited length (up to about 128 bytes
per line) to one or more memo fields in any data base
record(s). The text data may have originated anywhere
including a mainframe.
SYNTAX Form 1: MEMOPO I
Form 2: MEMOPO I
Form 1 uses a previously prepared script file containing
flag records and the actual memo field text. Use this for
loading data to any number of memo fields with a single
Form 2 is used to load a text file (no embedded flag
records) to a specific memo field of a specified DBF record.
EXAMPLES MEMOPO I MYDBF.DBF D:\WS\MYSCRIPT.TXT
MEMOPO I C:\DB\MYDBF A:MYTEXT 11 2
The second example loads text data contained in the file
MYTEXT.TXT on the A: drive to memo field number 2 of DBF
record 11 of the database MYDBF.DBF in the C:\DB
NOTES The instructions for creating your script file is covered in
the next section.
If no filetypes are used for the script or text files, a
filetype of TXT is assumed. If these filenames really have
no filetypes, end the filename with a period.
and in Form 2 must NOT specify a
range as it is non-sensical to do so. They must be a single
number (not a range of numbers).
The program will show you its progress on the screen.
HOW TO PREPARE YOUR SCRIPT FILE
A script file can result from a previous xport operation of a
range of DBF and DBT records. If you are starting from scratch or you
want to create your own script file with your editor, the following
will provide you with the necessary instructions.
During an mport operation where you wish to import a series of
data to more than one memo field-DBF record number combination, the
program needs to know which segments of your script (text) file belong
to which data base record and which memo field (if you have more
than one). You do that by preceding appropriate blocks of text in
your script file by what is called a "FLAG RECORD". A flag record
is simply a text line containing a symbol (that you choose), the
data base record number and the memo field number that the following
text lines are destined to go. The data (text) lines are loaded into
the appropriate places in your DBT file, until the program encounters
another FLAG RECORD or the end of (TXT) file.
Here is a sample FLAG RECORD:
1. The "%" is your chosen flag symbol. You must choose this
symbol carefully so that it NEVER appears as the first character
of a line in your memo field data. The program will try to
accommodate you by accepting just about any special symbols you
like. If you were foolish enough to choose a nonsensical flag
symbol, it will give you the appropriate error message, and a
list of valid flag symbols.
The program expects to find your chosen flag symbol as the
FIRST character of the first line (flag record) in your SCRIPT
2. The "5" means that the following data lines belong to the 5th
data base record (DBF file). This means the PHYSICAL RECORD
number 5, not the logical one presented to you when an index
file is in use.
3. The comma is needed if there is a number following it.
4. The "2" refers to which memo field (if you have more than one)
the following data lines are to be loaded. It is optional. If
omitted, a "1" is always assumed. If you omit it, you must also
omit the comma.
In summary then:
means that the following text lines (until another flag record or
end of file is encountered) should be placed in memo field 2 in
data base record 5.
Study the MEMOPO.TXT sample file provided and use that as your
guide. That file contains additional tutorial material.
On mport or eorganize functions the program alters both DBF
and DBT files. Make sure that you run the program on a copy of these
files, NOT the original. By necessity, the program updates data
base headers at appropriate times, usually after a record has been
changed. If the program aborts because of unrecoverable errors
caused by you, or because of power interruptions, it is always a
good idea to start over with a new copy of the DBF and DBT files.
I have used this program extensively and have found it to
work as expected. However, I am obligated to say right here that
you use the program at your own risk (whatever that may be). If
the program does not seem to work for you, drop me a note, and if I
cannot resolve your problem, I will cheerfully refund your money.
Those using only the DEMO program are also encouraged to provide some
feedback - please write or call my BBS. I can't respond to phone
USER FEEDBACK WANTED
I will be interested in hearing about any problems or desired
enhancements to the program. This program partly solves the problem of
searching memo fields for keywords. Is a search function needed? If
so, what should it report back? Just the record number/memo number
combination, or something more?
COMMON INVOCATION PROBLEM
If you choose not to specify (letting it default to 1)
you must remember not to space before pressing . Otherwise, the
DOS command line parsing will cause the program to think that you
specified a memonumber of 0 which is, of course, invalid. I have made
the appropriate "fault tolerance" on xport but did not want to be
so presumptuous for an mport function which modifies your data.
WHY AM I NOT USING SHAREWARE ON THIS PROGRAM?
Many of you have probably seen or used a number of my programs
(for example, DB3FIXPO, DSIDCAT, CALPO3) which I have contributed to
the public domain. These programs are completely free and are
available from most BBS or from my own Darwin BBS which is free and
open to the public. I also have some "Shareware" programs, for
example, FCPO1 - an electronic filing cabinet system. Unfortunately,
the "shareware" experiment has failed for me. I see FCPO1 being used
by corporations and Government agencies all over the country and those
users do not have the conscience to make the "shareware" experiment
work. So, I apologize to all of you for dropping out of the
On the other hand, I, too, have been burned many times by buying
commercial software that do not work as intended - precisely the
problem that is avoided by "shareware". My conscience tells me that
you should have the opportunity to check out a program and buy it only
after you have seen how it works. Therefore, I am releasing a
demonstration copy of the program to the public domain so you may have
the opportunity to see whether the program is something you need. The
demo version has all the features of the production version EXCEPT
that you are limited to about 10 DBF records. If you want to order
the production version, please send the form at the end of this file.
All those who had ordered DBMEMOPO version 1.1 and 1.3 will be
shipped a copy of the production version as a free update.
Why don't I just release this program to the public domain like
the others? A good question. I am trying to raise money to keep my
BBS operating. I can do that by charging a subscription fee, but that
is against my philosophy. I understand and do not criticize those
Sysops who have chosen to go subscription. Operating a first-class
BBS is NOT cheap. I just happen to belong to that group of people who
believes that a BBS should be open and free, and would rather shut
down a BBS than charge a fee. I am not too crazy about fund-raising
either but forgetting for the moment that I spent several weeks of my
life on this program, I need the funds to keep a BBS for as long as I
So think of the money that you are going to pay for the program
as a contribution for a worthy cause. Peace be with you, Brother.
CALLING ALL dBASE CONSULTANTS
All dBASE programmers who would like to bundle the program with
some of their applications may contact me for licensing arrangements.
It will be dirt cheap. I also want to take this opportunity to invite
all dBASE fanatics who have the spirit of sharing to join the dBASE
conference on my BBS.
While I'm at it, I also want to request those Sysops who carry a
data base management section to help me out by keeping a copy of the
DEMO program in their download directory so others may have a chance
to check it out. If you have DBMEMDPO (now obsolete), replace that
with this one. Peace be with you, too.
HOW TO GET THE PRODUCTION VERSION
You may order the production version, by sending your contribution
and the filled-in form below to:
P. L. Olympia
Darwin Systems, Inc.
17 Thorburn Rd.
Gaithersburg, MD 20878
BBS: 301-251-9206 (Darwin BBS, 1200/2400 bps, 24 Hrs)
Your contribution goes toward keeping the free Darwin BBS free.
In return for your contribution, you will get a PC-DOS diskette with
the production version, and any other useful public domain or
shareware programs that I have (and, of course, I have a lot). If
there are any specific files you want, write their names on the form.
ORDER FOR MEMOPO Version 2.0 DATE _____________
NAME ___________________________________ PHONE _____________
$35 Individual; $100 Corporate first copy, $10 additional copies
* End of MEMOPO.DOC *