MJOG is a simple program that can help jog your memory for
important dates (mjog = Memory JOGger). You can use MJOG to
create a small file containing birthdays, appointments, etc.,
and it will remind you of them as far in advance as you wish.
MJOG is a nice program to put in your AUTOEXEC.BAT.
Version 2.00 is a complete rewrite of the program. It is much
more flexible than previous versions. The basic changes are:
-- Flexible reminder dates (remind on day of week, day
of month, etc.).
-- Cleanup no longer required; obsolete entries are
-- You can delete reminders without editing the data file.
-- You can temporarily "forget" a recurring reminder after
it has been taken care of.
-- You can define different lookahead periods for each
-- More flexible configuration.
MJOG keeps a small text file for your appointments and
reminders. You should decided where you want to keep this
before running MJOG the first time. If you don't specify where
it goes, MJOG will create a file called MJOG.DAT in the current
If you want to use a different name and/or directory, set the
environment variable MJOG as follows:
Do this before running MJOG. Note that there are additional
options for the MJOG variable, as described below.
Adding appointments to your calendar
To add a date to your calendar file (or to create a new file if
there isn't one already), just type
MJOG date text
where date is a reminder date and text is the reminder text.
MJOG's date scheme is very flexible; see the section called
Here are some examples of entering reminders:
mjog tue Dentist 3pm
(See the dentist next Tuesday)
mjog 4/14 Dinner with CPA
(Meet with your CPA next April 14th)
mjog every 4/15 Income taxes due
(Pay taxes every April 15th)
mjog 8/15/* Income taxes REALLY due
(Note that * is a wildcard--same as "EVERY 8/15")
To have MJOG display your reminders, just run it:
It will display all reminders for the next ten days. You can
change the number of days MJOG "looks ahead" as described below.
Displaying a calendar
You can have MJOG display a calendar of the current month:
If you want a calendar of a different month, use:
This would display a calendar for June, 1989.
MJOG is quite flexible on dates. You can specify days of the
week, months, days of the month, and years, and you can use
"wildcards" to create reminders that repeat regularly.
There are two kinds of reminders. "Floating" reminders recur
periodically (for example, the 1st of every month, every Monday,
every April 15th). "Fixed" reminders refer to one specific date
(for example, 12/15/89).
Here is the generic date format:
EVERY dow mm/dd/yy
where EVERY is an optional keyword that forces the date to
float; DOW is a day of the week; and MM, DD, and YY represent a
month, day of the month (we'll call that DOM here), and year,
respectively. You don't have to fully specify all of these
fields, as we'll describe shortly.
The DOW, if present, must be one of the following three-letter
Mon Tue Wed Thu Fri Sat Sun
Case is not significant (e.g., "mon", "Mon", and "MON" are all
All fields can be wildcards, and some can be omitted in certain
combinations. Here are the details:
1. Month, Year, DOM wildcards: an asterisk (*) is a
wildcard; it allows the field to float. Examples:
12/25/* (December 25th of any year)
12/*/* (any date in any December)
4/*/89 (any date in April, 1989)
*/15/* (the 15th of every month)
*/1/89 (the 1st of every month in 1989)
*/*/* (every day)
2. Month, Year, DOM partial specifications: in some cases
you can omit fields of the MM/DD/YY specification. These are
the valid partial date formats:
Shorthand for MM/*/YY
Example: "12/89" = "12/*/89"
The next occurrence of the month and DOM. If
entered on 6/9/89:
"7/15" = "7/15/89"
"4/15" = "4/15/90"
Means the next occurrence of the specified DOM. If
entered on 6/12/89:
"12" = "6/12/89"
"13" = "6/13/89"
"11" = "7/11/89"
Note that the MM/DD and DD formats are fixed reminders--they
represent one specific date. MM/YY, however, is a floating
reminder--it represents any day in the specified month.
3. DOW wildcards: you can make the DOW a wildcard by simply
omitting it. Do not use an asterisk.
4. EVERY: this is a keyword that forces the date
specification to float. Examples:
every 12/25 (same as 12/25/*)
every 15 (same as */15/*)
every tue (every Tuesday)
every 12/89 (same as 12/*/89)
This sounds much more complicated than it really is. In
practice, you will find it quite natural. Here are some
examples of valid date specifications. Where "shorthand" is
used, the equivalent full specification is shown in parentheses:
every thu Every Thursday (THU */*/*)
thu The next Thursday (THU MM/DD/YY)
17 The 17th of this month (MM/17/YY)
4/89 Every day of April, 1989 (4/*/89)
12/15 The next December 15 (12/15/YY)
every 12/15 Every December 15 (12/15/*)
thu 12/89 Every Thursday in 12/89 (THU 12/*/89)
mon */*/89 Every Monday in 1989
*/15/* 15th of every month
*/15/90 15th of every month in 1990
1/*/* Every day of every January
every 17 17th of every month (*/17/*)
9/14/89 September 14, 1989
Note that "next" in the above context ("next Tuesday", "next
December 15") could include the current date. For example, if
you enter a reminder for "12/15" on 12/15, the reminder will be
scheduled for today. Similarly, a "Tue" reminder entered on
Tuesday will be for today.
Finally, note that you can enter a DOW and a DOM, but they must
match correctly. For example:
tue 1/3/89 is OK: 1/3/89 is a Tuesday
tue 1/4/89 is invalid (no such date)
tue */7/* will display a reminder on any 7th that is a
Tuesday, but will give error messages for
Changing the "lookahead" date
Normally, MJOG will look ahead ten days. This means that it
will display any reminders that will occur within the next ten
days (including today).
You can change MJOG's lookahead date by using the /nn switch,
where nn is the number of days you want to look ahead. For
This will display any reminders coming up within the next six
months. Note that you can permanently change the lookahead
period via the MJOG environment variable (see below).
You can also specify individual lookahead dates for each
reminder by using a /nn switch when you define it. For example:
MJOG /30 every 4/15 Income taxes due!
This will display your income tax reminder one month in advance,
while other reminders remain set at the usual ten days.
Note that MJOG will only display a reminder once, even if it
occurs multiple times within the lookahead period. For example,
if you have
mjog every Fri 9am staff meeting
and you run MJOG /30, only the first weekly staff meeting will
If you specify a global lookahead on the command line, MJOG will
use the global lookahead for dates with local lookaheads if the
global is longer. For example, if you have:
mjog /20 3/2/* Patty's birthday
mjog /60 4/15/* Taxes due
(specifying a 20-day lookahead for the birthday and a 60 day
lookahead for taxes) and you then do:
MJOG will use a 45-day lookahead for the birthday and a 60-day
lookahead for the taxes.
When a reminder is obsolete (i.e., when the date of a fixed-date
reminder has passed), MJOG will automatically delete it. To
delete a floating reminder or a fixed reminder before its date
has been reached, you can either edit the MJOG data file with
your text editor and manually delete it, or you can have MJOG
delete it via the command:
MJOG /D [date] [text]
You must include enough of the date and/or text to uniquely
identify the reminder. For example, if you have a note:
MJOG Tue Call for dentist appointment
you could delete it by using:
MJOG /D dentist
MJOG /D Tue
if and only if the word "dentist" does not appear in any other
reminder (first example) or if you have no other reminders for
Tuesday (second example). You can make the deletion unambiguous
by including more text or by specifying the date and some text:
MJOG /D tue dentist
MJOG /D call for dentist
If you use a date, you do not have to use the same format as the
original entry, but you must specify it so that it evaulates to
the correct date. For example, if you had originally used:
MJOG 6/20/89 Call dentist for appointment
you could use:
MJOG /D Tue dentist
if the next Tuesday (including today) is 6/20/89. In other
words, that command would work from Wednesday 6/14/89 through
Tuesday 6/20/89. Prior to 6/14/89, you'd have to specify the
date more accurately:
MJOG /D 6/20 dentist
(This would work anytime in 6/89)
MJOG /D 6/20/89 dentist
(This would always be OK)
If there is no way to make a reminder selection unambiguous
(i.e., if two reminders in file are identical), the only way to
remove one of them is by editing the file.
After you've taken care of a floating reminder, it's useful to
be able to "forget" it until the next occurrence. For example,
suppose you have:
MJOG EVERY 10/19 Mom's birthday
You'll be reminded every year, prior to October 19, that it's
time to take care of the birthday. After you've sent her the
keys to that new car (say, on October 15), there's not much
point to the reminder remaining active. But you don't want to
delete it, either, because you're going to have to buy another
new car next year. All you want to do is forget it for this
MJOG allows you to forget the reminder in this fashion:
MJOG /F [date] [text]
The date and/or text are specified exactly as for deleting a
reminder (above). For example:
MJOG /F 10/19
MJOG /F 19 birthday (OK if entered in October)
When you do this, MJOG adds a special note to the reminder in
the file, telling it to forget the reminder until a specific
date has passed. Assuming that you issue the above command in
1989, MJOG would change the reminder in file to:
MJOG /~10/19/89 10/19/* Mom's birthday
MJOG will then ignore this reminder until AFTER 10/19/89, at
which time the /F note will be removed and the reminder will
again become active (for 1990).
The /~MM/DD/YY format is a special one that MJOG uses for
itself. It appears only in the data file, and you should
probably not enter it by hand. If you insist on doing so, it
must be in EXACTLY that format. In particular, the date must be
explicit--it can contain no wildcards, missing elements, or days
of the week.
Displaying MJOG version
MJOG does not display its version/copyright notice when it is
just listing reminders (it would detract from the display). It
does display the notice when any maintenance is performed on the
reminder file (new reminders, deletes, forgets, etc.) and when
an error is detected.
If you need to check your version number manually, use the /V
MJOG is fairly flexible about how you enter parameters, but
there are a few rules you must follow.
1. Switches cannot be combined and must be separated from each
other by at least one space:
Legal: MJOG /L /50
Illegal: MJOG /L/50
Illegal: MJOG /L50
Switches can be introduced by either a slash (/) or a hyphen
2. The keyword EVERY, if present, must precede the date/DOW:
Legal: mjog every tue
Illegal: mjog 12/15 every
3. MJOG assumes that the reminder text begins with first word it
finds that doesn't look like one of these:
"EVERY" (unless date has already appeared)
That's fairly simple. About the only time you can get into
trouble with the text is if your date specification is a DOW
only (no date) and the reminder text begins with a number:
mjog tue 3 wise men arrive, Heathrow 0730
MJOG will think the "3" is a date specification. It does have
some special logic built in; numbers that meet any of these
criteria are assumed NOT to be dates (and thus to begin the
Any number that is three or more digits in length.
Any number containing a colon (:).
Any number that is followed by "AM" or "PM"
Therefore, all of these would be OK:
mjog tue 0730 3 wise men arrive, Heathrow
mjog tue 9:00 staff meeting
mjog tue 9am staff meeting
mjog fri 10667 Brambley Court, meet Spiro
4. When a date is in the format nn/nn, it could be either MM/DD
or MM/YY. MJOG assumes that it is MM/YY if the second number is
larger than 31, else MM/DD.
5. Years can be specified either as YY or as YYYY ("89" or
"1989"). MJOG is valid for calendar years 1981-2010. Years are
always displayed as YY.
The MJOG data file
The file that MJOG uses (usually called MJOG.DAT) is a standard
ASCII text file containing all active reminders. You can edit
it, if you wish, with your text editor or your word processor in
MJOG updates the file by itself whenever a reminder is added,
"forgotten", deleted, or obsoleted. Note that MJOG uses a
standard format for its dates when writing the data file, so
they might not look exactly as they did when entered. For
example, "every 15" is the same as "*/15/*"; MJOG will always
use the latter, no matter how you entered it.
The MJOG environment variable
The MJOG environment variable allows you to permanently change a
few items of MJOG's configuration. These include the name and
location of the data file, the screen attributes (colors) to be
used, where to display the calendar, and the lookahead period.
The specific syntax is:
MJOG=FILE: ATTRIB: CAL: LOOK:
All are optional (but you obviously must specify at least one of
them). The formats are as follows:
FILE: The exact path and filename. For example:
ATTRIB: A list of screen attributes, in ANSI format. ANSI.SYS
or equivalent must be loaded to use this feature. You specify
three attributes: normal, highlight, and exit. Highlight is
used for highlighted displays, which includes any reminders for
today and the current date on the calendar. Normal is used for
all other displays. Exit is the attribute the system will be
using when MJOG finishes. Attributes are specified using the
numeric sequence ANSI.SYS uses to specify colors. For example,
"1" turns on the highlight attribute (the ANSI sequence is
[1m), so you'd use "1" for highlighted video; "34;43" would
set blue-on-yellow (ANSI is [34;43m). The three attribute
fields are separated by commas. Examples:
ATTRIB:0,1,0 (for a mono display)
Normal = white on black
Hilite = bright white on black
Exit = white on black
ATTRIB:34;43,33;44,34;43 (color display)
Normal = blue on yellow
Hilite = yellow on blue
Exit = blue on yellow
CAL: the X,Y coordinates where you want the upper left hand
corner of the calendar to appear. The standard coordinates are
56,2, and the upper left corner of the screen is 0,0. Example:
This would cause the calendar to appear at column 20 of line 15.
LOOK: changes the global lookahead period from ten days to
something else. Example:
This would change the lookahead period to seven days.
To create the environment variable, issue a SET MJOG= statement
before running MJOG (probably in AUTOEXEC.BAT). For example:
SET MJOG=FILE:c:\data\mjog.dat ATTRIB:0,1,0 CAL:10,2 LOOK:7
If you see the DOS message "Out of environment space", you must
increase the space allocated for your environment. For example,
under current versions of DOS, DOS 3.x or later, you could add
the following to your CONFIG.SYS:
SHELL=c:\command.com c:\ /p /e:512
This obviously assumes that your copy of COMMAND.COM is located
in C:\, and it would give you 512 bytes of environment space.
Compatibility with previous versions
We've made every effort to keep MJOG version 2 compatible with
The old MJOGDIR and MJOGXY environment variables are still
supported. If the new MJOG variable and one or both of the old
variables are present, MJOG will override MJOGDIR and MJOGXY (if
MJOG contains FILE: and CAL: fields respectively).
The old -C switch is no longer necessary and is ignored if
present (cleanup is now automatic).
Use on non-IBM-compatible systems
All features of MJOG except the calendar display can be used on
any MSDOS machine.
If you have a non-compatible MSDOS machine and wish to use the
1. You must have ANSI.SYS or equivalent installed.
2. Your ANSI device driver must support the CPR (Cursor
Position Report) sequence. On receipt of the sequence
[6n, the device driver should report the current
cursor position via standard input.
3. You must specify an attribute set (using the MJOG
If you are not using an IBM-compatible machine and use the
calendar without taking the above steps, the results will be
unpredictable. MJOG will use system interrupt 10h for cursor
movement; interrupt 10h is BIOS video service on IBM-compatible
systems, but may not be on others.
This document and the program file MJOG.EXE ("the software") are
copyrighted by the author. The copyright owner hereby licenses
you to: use the software; make as many copies of the program
and documentation as you wish; give such copies to anyone; and
distribute the software and documentation via electronic means.
There is no charge for any of the above.
However, you are specifically prohibited from charging, or
requesting donations, for any such copies, however made; and
from distributing the software and/or documentation with
commercial products without prior permission. An exception is
granted to not-for-profit user's groups, which are authorized to
charge a small fee (not to exceed $7) for materials, handling,
postage, and general overhead. NO FOR-PROFIT ORGANIZATION IS
AUTHORIZED TO CHARGE ANY AMOUNT FOR DISTRIBUTION OF COPIES OF
THE SOFTWARE OR DOCUMENTATION, OR TO INCLUDE COPIES OF THE
SOFTWARE OR DOCUMENTATION WITH SALES OF THEIR OWN PRODUCTS.
THIS INCLUDES A SPECIFIC PROHIBITION AGAINST FOR-PROFIT
ORGANIZATIONS DISTRIBUTING THE SOFTWARE, EITHER ALONE OR WITH
OTHER SOFTWARE, AND CHARGING A "HANDLING" OR "MATERIALS" FEE OR
ANY OTHER SUCH FEE FOR THE DISTRIBUTION. NO FOR-PROFIT
ORGANIZATION IS AUTHORIZED TO INCLUDE THE SOFTWARE ON ANY MEDIA
FOR WHICH MONEY IS CHARGED.
The software is intended for personal use only and should not be
used in a commercial, institutional, or governmental environment
with prior permission of the copyright owner.
No copy of the software may be distributed or given away without
this document, and this notice must not be removed.
There is no warranty of any kind, and the copyright owner is not
liable for damages of any kind. By using this free software,
you agree to this.
The software and documentation are:
Copyright (C) 1985, 1986, 1987, 1988 by
The Cove Software Group
Christopher J. Dunford
P.O. Box 1072
Columbia, Maryland 21044
CompuServe 76703,2002 [IBMNET]