Contents of the LO15.DOC file
LL OOOOOO GGGGGG OOOOOO UU UU TTTTTTTT
LL OO OO GG GG OO OO UU UU TT
LL OO OO GG OO OO UU UU TT
LL OO OO GG OO OO UU UU TT
LL OO OO GG GGGG OO OO UU UU TT
LL LL OO OO GG GG OO OO UU UU TT
LLLLLLLL OOOOOO GGGGGG OOOOOO UUUUUU TT
9850 Meadowglen Ln. #35
Houston, Texas 77042
Copyright (c) Byte_Magic Software 1988, 1989. All rights reserved.
Overview Page 1
LogOut is a memory resident program designed
to send keystrokes to the keyboard buffer of a PC
after a specified period of inactivity has been
When LogOut sends the keystrokes, the result
is the same as if someone were typing the keys at
the keyboard. The application cannot tell the
difference. The only exceptions to this are
programs that take over the keyboard at the
hardware level or move the keyboard buffer.
"Inactivity" is defined here as no keyboard,
disk, screen or printer activity. If no one is
typing and the disk drives, screen and printer
are not being used, the system is inactive.
Periodically tapping a key (the Shift, Ctrl, or
Alt keys are recommended) will reset the timer to
zero for those who need to scrutinize the screen
for long periods of time or are otherwise
unprepared to type anything.
LogOut is installed in memory the first time
it is run and the installed portion is simply
updated on each subsequent run. It is recommended
that LogOut be one of the first TSRs loaded.
Although it cannot remove itself from memory,
LogOut can be disabled at any time. See the
directions below for the T (Time) parameter.
LogOut only needs to know how long to wait
and what keys to send when the time limit is up.
This information is supplied on the command line.
LogOut was originally written as a security
program to back users out of any network
application when they were not working or were
possibly no longer at their desks. Because it is
a general purpose utility, LogOut can be used to
execute almost any commands. Experimentation will
reveal many uses for this unique program.
Usage and Parameters Page 2
Usage: LO [T=mmm] [F=filename.ext] [C=abbr]
T=mmm "mmm" is the Time in minutes of inactivity before
keys are sent. The default Time limit is 30
minutes, on the first run. On subsequent runs,
the Time limit is left as is unless a new Time is
entered. Entering T=0 disables LogOut until a new
Time is entered.
F=filename "filename.ext" is the Filename of the data File.
The default Filename is LOGOUT.DAT. Drive and
path may be included, up to 120 characters.
C=abbr "abbr" is the Current program abbreviation. The
default Current program abbreviation is DEF.
Uppercase and lowercase characters are NOT equal.
Entering LO with no parameters or invalid
parameters will invoke a help screen.
The C and F parameters should be used as a
pair unless the default value is to be used for
the unused parameter.
For example, if C is used and not F, then
LogOut will use the supplied Current program
abbreviation and will use the default data File
"LOGOUT.DAT" as the data File.
Conversely, if F is used and not C, LogOut
will use the supplied data File and will look for
the default Current program abbreviation "DEF" in
The Time Page 3
LO [T=mmm] [F=filename.ext] [C=abbr]
LogOut measures Time in minutes, so for the
Time parameter enter the minutes of inactivity to
be allowed before LogOut sends its keystrokes.
For example, entering T=25 tells LogOut to
wait for 25 minutes of inactivity to pass before
sending the keystrokes.
The default Time limit of 30 minutes is used
only if the time limit is not specified on the
first run. The Time limit remains the same on
subsequent runs unless specifically reset. Once
the Time limit is changed, it will remain the
same until it is changed again.
Entering "T=0" will disable LogOut until the
Time is reset. LogOut may be installed with "T=0"
on the first run in order to get it loaded early
without it being enabled.
The maximum Time limit is 65536 minutes (or
1092 hours and twenty six minutes, or about 45
and one half days).
Entering non-numeric data for the Time will
cause LogOut to end with an error message and
will have no other effect. The previous settings
will remain in effect.
The data File Page 4
LO [T=mmm] [F=filename.ext] [C=abbr]
The data File contains program abbreviations
and their corresponding key codes as shown below:
The "abbr" term is the Current program's
abbreviation. This is the abbreviation chosen by
you to represent your program.
The "aaa,sss" terms are the ascii and scan
code pairs for each key to be sent when the Time
limit is reached.
The '4' is required at the end of a line.
Note: one key combination generates a '4' as the
ascii code, , so that is the only key
that LogOut cannot send.
The default data File is LOGOUT.DAT. If
another file contains the desired key codes, then
the F=filename parameter tells LogOut to use that
file. Be aware that LogOut must read a data file
in order to change the Current keystrokes to be
sent. If a new Current program abbreviation is
specified on the command line and another data
file is being used, you must also specify the
The maximum data File size is 1024 bytes.
A sample data file is shown on page 7.
The Current program abbreviation Page 5
LO [T=mmm] [F=filename.ext] [C=abbr]
The term "abbr" must match an abbreviation
in the data File, and the abbreviation comparison
is case sensitive. For example, 'pgm1' is NOT
equal to 'PGM1'. The abbreviation of the Current
program may be any length.
Each program must have a unique abbreviation
for LogOut to work. If two programs share the
same abbreviation, LogOut will only use the first
occurrance of that abbreviation in the File,
ignoring all others. If there is no way to avoid
duplicate abbreviations, then put one in
uppercase letters and the other in lowercase.
This is enough to differentiate the two programs.
The default Current program abbreviation is
"DEF". If a filename is specified on the command
line and a Current program abbreviation is not,
then LogOut will look for "DEF" in the specified
file. LogOut will not automatically look for the
previously used Current program abbreviation.
If the abbreviation specified on the command
line does not occur in the data File, LogOut will
remain set as before and will display an error
Data File structure Page 6
Each line of the data File has the following
The "aaa,sss" terms are the ASCII code, scan
code pair for each key. The required '4' marks
the end of a line of key codes. The abbreviation
is separated from the key codes by the equal
('=') sign and the keycodes are separated from
each other by commas. A maximum of 16 characters
may be sent by LogOut, so this adds up to 32
codes. Then there is the '4', so the total number
of codes after the equal sign is 33. The codes
may be less than three digits.
The utility program KEYS.EXE has been
provided to enable any key code to be found. KEYS
will return the key (if printable) and the ASCII
code and scan code for the key. Type a Break> to exit from KEYS. The codes returned are
the ones that must be put in the data File. Each
key that is to be sent consists of these two
codes. It is the responsibility of the person who
maintains the data File to enter the correct
codes, LogOut will send exactly what is entered.
Hint: use to capture the codes to
the printer if the list is long.
A sample data File is shown in Figure 1,
page 7. The last two lines are comments. If you
intend to use comments in the data File, then
imitate the ones in the sample file. Notice that
the two lines are unbroken, they do not contain
embedded spaces. With no embedded spaces, it is
guaranteed that no incorrect match will be found
by LogOut for the specified Current program
abbreviation. Also, if the last comment line was
at the beginning of the file and began with
'PFS=PFS', and C=PFS was entered on the command
line, then LogOut would find this first occurence
of PFS and end with an error because the term on
the right of the equal sign (PFS) is non-numeric.
By keeping the data in a plain ASCII text
file the user can control exactly what LogOut
will do, either save or not save work in
progress, beep instead of exit, or even execute a
program or a keyboard macro from the DOS prompt.
Sample data File Page 7
Technical information Page 8
The LogOut program is divided into two
distinct parts, the resident part and the
initialization part. The LogOut initialization
code has the following functions:
* Check for an already installed copy of the
LogOut program by looking for the correct
interrupt 60h code.
* If not already installed, redirect the 60h
interrupt vector and chain onto the 09h,
10h, 13h, 17h and 1Ch interrupt vectors.
These are the user, keyboard, screen, disk
printer and timer interrupts respectively.
* Handle the command line arguments, i.e.
load the correct data file, send the
keystroke codes to the resident part and
update the time as required. Not all of
these tasks are done for each run.
Changing the time limit, for example, does
not require reading the data file or
changing the keystrokes. If no arguments
are present or there is an error in one of
them, display help.
* If being installed on this run, terminate
and stay resident. Otherwise, just
Subsequent runs of LogOut, after the first run,
merely alter the resident code that was installed
on the first run.
Technical information (continued) Page 9
The resident code is the set of above-
mentioned interrupt handlers. Most of the
interrupt handlers simply reset the elapsed time
counter to zero each time a key is pressed, or a
disk drive is accessed, or the printer is used,
or the screen is updated.
The timer interrupt handler (1Ch) is used to
keep track of elapsed time since the last
activity. It also sends the key codes to the
keyboard buffer area in memory if the time limit
is exceeded (as long as LogOut has not been
The user interrupt (60h) handler is used to
communicate between the resident and non-resident
parts of LogOut. It is one of several interrupts
defined by IBM as user interrupts and is unused
by nearly all software. In LogOut, this interrupt
performs five different services, selected by the
value in the AX register when called. These
services are shown on page 10. Any other program
can be written to use these interrupt 60h services
if LogOut is installed.
Interrupt 60h services Page 10
01 Returns the segment and offset of the storage
area for the keystrokes. SEGMENT:OFFSET returned
02 Changes the TIME_PERIOD. The DX register must
contain the new Time limit as input.
03 Returns the current TIME_PERIOD in AX.
04 Temporarily disables LogOut until a new
TIME_PERIOD is set. Puts 0 in TIME_PERIOD also.
05 Returns 6060h in AX to indicate that this is the
right interrupt 60h for LogOut. This service is
simply an identification service. A return value
of other than 6060h signals that interrupt 60h is
being used by another program.