home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-03-25 | 237.8 KB | 5,563 lines |
-
-
-
-
-
-
-
- SSSS TTTTTT AA CCCC KKK KK EEEEEEE YY YY (tm)
- SS SS T TT T AAAA CC CC KK KK EE E YY YY
- SSS TT AA AA CC KK KK EE E YY YY
- SSS TT AA AA CC KKKK EEEE YYYY
- SSS TT AAAAAA CC KK KK EE E YY
- SS SS TT AA AA CC CC KK KK EE E YY
- SSSS TTTT AA AA CCCC KKK KK EEEEEEE YYYY
-
-
-
- Version 3.0
-
- CTRLALT Associates
-
- _______
- ____|__ | (tm)
- --| | |-------------------
- | ____|__ | Association of
- | | |_| Shareware
- |__| o | Professionals
- -----| | |---------------------
- |___|___| MEMBER
-
-
-
-
- TABLE OF CONTENTS
-
- Chapter I:INTRODUCTION....................................3
- I.1 What It Does.......................................3
- I.2 For the new user...................................4
- I.3..Shareware Considerations..........................5
- I.4 New in Version 3.0................................10
- I.5 New in Version 2.0................................11
- I.6 Files in the STACKEY package......................12
- I.7 Loading and Using STACKEY.........................13
- I.8 HELP!!............................................15
- I.9 Errorlevel........................................15
- Chapter II:PLACING KEYSTROKES IN THE BUFFER..............17
- II.1 Stacking text....................................17
- II.2 Two-character Codes..............................17
- II.3 Status Toggles...................................21
- II.4 Prompt metastrings...............................21
- II.5 Decimal and Hex Codes............................22
- II.6 Invoking special programs and keystrokes.........23
- II.7 Simulating depression of shift keys..............25
- II.8 Stacking real time beeps.........................25
- II.9 Popup messages...................................26
- II.10 Sending to standard output......................26
- Appendix 1 to Chapter II. Two character codes.........27
- Appendix 2 to Chapter II...SENDing to STDOUT..........30
- Chapter III:COMMANDS TO THE RESIDENT PORTION.............36
- III.1 Overview........................................36
- III.2 Repeats.........................................36
- III.3 Delays..........................................37
- III.4 Scanning........................................38
- III.5 The phony keystroke.............................40
- III.6 Hotkeys.........................................40
- III.7 Pauses for keystrokes...........................42
- III.8 Multiple STACKEY commands.......................42
- III.9 Patient, impatient and smart processing.........43
- III.10 Flushing and Quitting..........................45
- III.11 Enlarging the Buffer...........................46
- III.12 The SKRES program..............................47
- III.13 Test mode......................................48
- III.14 Continue mode..................................48
- III.15 Pushing, popping and querying the flags........49
- Chapter IV:SETTING COLORS................................50
- IV.1 Color Basics: Introduction.......................50
- IV.2 Color Basics: Graphics modes.....................50
- IV.3 Color Basics: CGA color choices..................51
- IV.4 Setting colors on the CGA........................52
- IV.5 Color Basics: EGA color slots and palettes.......54
- IV.6 Color Basics: EGA color labelling................54
- IV.7 Color Basics: EGA borders........................56
- IV.8 Color Basics: EGA hardware considerations........56
- IV.9 Setting colors on the EGA or VGA.................57
- IV.10 Setting permanent colors on the EGA/VGA.........59
- IV.11 Controlling the blinking bit....................60
-
-
-
-
- Chapter V:UTILITIES MODE.................................62
- V.1 Overview of Utilities Mode........................62
- V.2 Waits.............................................64
- V.3 Switching Monitors and Ports......................67
- V.4 Turning off PrintScreen...........................68
- V.5 Mode, Lines and Cursor Control....................68
- V.6 Beeps.............................................70
- V.7 Screen dumps......................................70
- V.8 Rebooting.........................................71
- V.9 Lock Toggles......................................72
- V.10 The Halt Command.................................72
- V.11 Pause for input..................................73
- Chapter VI:ADVANCED TOPICS...............................74
- VI.1 Keyboard basics: interupts.......................74
- VI.2 Keyboard basics: The buffer and BIOS data area...76
- VI.3 Keyboard basics: Int 9 processing................77
- VI.4 Keyboard basics: int 16/DOS service 8............79
- VI.5 Keyboard Basics: How other programs work.........81
- VI.6 Keyboard basics: How STACKEY works (or doesn't)..81
- VI.7 Inline: Syntax...................................84
- VI.8 External: Syntax.................................85
- VI.9 Inline examples..................................86
- VI.10 STACKEY's API...................................88
- Chapter VII:ASSOCIATED PROGRAMS..........................90
- VII.1 FILEKEY.........................................90
- VII.2 EGAPAL and VGAPAL...............................91
- VII.3 Demonstration BATch files.......................93
- Chapter VIII:MISCELLANY..................................95
- VIII.1 Usage notes....................................95
- VIII.2 Also by the same authors.......................97
- Appendix to Chapter VIII..............................99
-
-
-
- Chapter I:INTRODUCTION
-
- FIRST A WORD FROM OUR SPONSOR: THIS IS NOT FREE SOFTWARE. IF YOU
- CONTINUE TO USE IT AFTER AN INITIAL 30 DAY TRIAL PERIOD, YOU MUST
- REGISTER; PLEASE SEE SECTION I.3. THANK YOU.
-
-
- I.1 What It Does
-
- STACKEY, a utility from the makers of CTRLALT, will
- automatically place keystrokes in your keyboard buffer. It is
- intended for use in connection with BATch files. Here is a typical
- example of a BATch file "lot.bat" for use with 1-2-3 using STACKEY:
- stackey W18 CR"/FR%1.wk1" CR
- 123
- Entering "lot mysht" at the DOS command line starts the BATch
- file with mysht as %1. STACKEY has the command line passed to it
- by the BATch processor with %1 already replaced by mysht. Thus
- STACKEY places in the keyboard buffer the text: "/FRmysht.wk1"
- followed by a carriage return. The initial W18 tells STACKEY to
- pause about 1 second to allow 123 to load. If it weren't there 123
- would happily remove the keystrokes from the buffer before allowing
- any input. These characters wait in the buffer until a program
- requests keyboard input. The BATch file then loads 123 which
- requests input and gets it from STACKEY. /FR calls up a dialog to
- retrieve a worksheet and %1.wk1 followed by a CR loads that
- worksheet. The CR after the W18 will banish the opening logo
- screen in those versions with an opening logo.
-
- And this example hardly uses the power of STACKEY: you can
- stack any function key or legal Alt-key combination; you can even
- stack today's date or the current directory name. You can stack
- commands to turn the Num Lock state on and off. You can stack
- commands to set colors on the CGA and remap colors on the EGA or VGA.
- You can stack a PrtSc. You can stack commands to call up SIDEKICK,
- SIDEKICK PLUS or any other program that pops up on pairs of shifts.
- You can invoke CTRLALT PLUS, CAROUSEL or DESQVIEW. STACKEY has
- numerous methods for controlling the flow of a STACKEY "script". You
- can put delays in or have STACKEY delay its playback until a given
- message appears on the screen or you can have script playback pause
- until you hit a key. You can pause playback and later restart it with
- appropriate hotkeys and even flush STACKEY's buffer that way.
-
- STACKEY also has a utilities mode allowing you to use it to
- replace lots of little utilities that switch monitors or ports,
- restore or change the cursor or even reboot your machine. STACKEY
- comes with a second program BATUTIL, described in a separate manual
-
-
- Chapter I:INTRODUCTION Page 3
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- with which you can manipulate your environment or get input in BATch
- files.
-
- Finally STACKEY has a special mode of interest to programmers
- giving you access STACKEY's insides, allowing you place inline code
- in the middle of a STACKEY script.
-
- And STACKEY does its magic with only about 1.3K of resident
- code (with the default buffer size).
-
- For a quick summary of what STACKEY can do, you can call up
- help any time you are at the DOS command line with the command
- stackey ?
- (see the HELP!! Section I.8 below) or you can consult the quick
- summary at the end of the documentation.
-
-
- I.2 For The New User
-
- STACKEY is a powerful package which has many features that
- you won't want to use too often. For that reason the manual is
- long but many parts can be skipped when you first start using the
- program. For the basic stacking commands, you'll want to read the
- first three sections of Chapter II after reading the next section.
- After that, you can be off and running. If you want to use
- utilities mode, you'll need to read Chapter V and if you want to set
- colors with STACKEY, you'll need Chapter IV. This latter chapter
- is long because of the EGA color tutorial which is included. If
- you have a CGA, you should only read the first four sections. If
- you've been confused when hearing about int 16 and int 9, you might
- look at the keyboard basics parts of Chapter VI.
-
- While STACKEY has numerous options to change the way it
- works, typically set and changed with /../ instructions on the
- command line, we have set the defaults to be the most reasonable.
- Thus, you need not worry about these questions unless you find
- yourself in a situation where you wished STACKEY worked differently
- in order to properly interface some particular application program.
- You may be able to tell it to act in an appropriate way.
-
- A summary of the STACKEY commands can be obtained by typing
- stackey ?
-
-
-
-
- Chapter I:INTRODUCTION Page 4
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- If you obtained a registered version of STACKEY/BATUTIL
- directly from Support Group, you'll find directions for installing
- the program in the readme.com program. The files on diskette are
- in self compressed archives prepared with the Lharc program. We
- thank Yoshi for writing this program and allowing its use. If you
- are a less advanced user, you'll want to run the batch file
- INSTHARD.BAT to install BATUTIL and STACKEY on your hard disk or if
- you have only two floppies, use INSTFLOP.BAT. The hard disk
- automated installation places the programs in the directories
- C:\stackey and C:\batutil. It requires roughly 700K of free disk
- space including the doc files which you won't need if you are
- registered and have the printed docs. INSTFLOP requires that you
- have four blank but formatted floppy diskettes handy. Both
- programs only run from the A: drive.
-
- More sophisticated users may wish to do the installation by
- hand to control the directories where the programs live (they can
- be anywhere although you may want them on your path). Go to the
- directory you want STACKEY, place the distribution diskette in
- drive A and run
- A:skexe
- and
- A:skdoc
- Then go to the directory you want BATUTIL and run
- A:buexe
- and
- A:budoc
- With floppies each command should be issued with a fresh floppy in
- drive B.
-
- If you got your trial version from a BBS or disk vendor,
- there directions for installation may be different. Basically you
- want to unpack any archives. You can then run the programs
- directly.
-
-
- I.3 Shareware Considerations
-
- The STACKEY package consisting of STACKEY, FILEKEY and
- EGA/VGAPAL were developed by Barry Simon and Richard Wilson and is
- copyright, 1986-90 by us. Unlike versions 1.x and 2.x which were
- copyrighted but free, this version is shareware. You have a 30 day
- trial period from the time that you first use the program to see if
- it meets your needs. If you continue to use it after that time you
-
-
- Chapter I:INTRODUCTION Page 5
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- are required to pay a registration fee not as a contribution but
- because you are getting use out of our program. Shareware is
- dedicated to the idea that users are best served by a chance to
- fully try out something as complex and individualistic as software
- before they buy it and that authors are served by an ethic that
- encourages wide copying for trial runs. But in order for the
- system to work you need to respect the trust that we show in you
- and register if you continue to use our program. With the release
- of this shareware version, we will no longer support earlier
- versions of STACKEY.
-
- Registration fees are as follows:
- License to STACKEY & BATUTIL with printed docs $39
- Consultant's License $200
- All registrations will get you the printed documentation and the
- latest version on disk. The printed documentation is essentially
- identical to the documentation on disk.
-
- You may register by phoning or writing (9AM-5PM Eastern time)
- Support Group, Inc
- Lake Technology Park
- PO Box 130
- McHenry, MD 21541
- 1(800)872-4768 (1-800-USA-GROUP)
- 1(301)387-4500
- FAX 1(301)387-7322
-
- Visa, Mastercard, Discover and American Express are accepted.
-
- Registration gives you the right to use any version of STACKEY
- with a major version number of 3. If there is a version 4, an
- update fee may be required. In addition to the thirty day trial
- period, you may return the disks (and printed documentation) for a
- full refund if you are not totally satisfied for a period of
- 90 days after initial registration. You have the choice of one of
- two license terms: "use like a book" OR a single user license. The
- former allows you to place copies of this software on as many
- machines as you wish so long as there is NO CHANCE that more than
- one copy of STACKEY will be loaded into any of the machine's
- memories at one time. The latter allows you to place copies on all
- machines for which YOU are the principal user even if there is a
- chance that OCCASIONALLY more than one copy is in use (for example,
- if you use STACKEY on a office machine while a family member might
- OCCASIONALLY use a copy on a home machine at the same time).
-
-
- Chapter I:INTRODUCTION Page 6
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- This 800 number is for orders only. Registed users may obtain
- support by writing to
- CTRLALT Associates
- Suite 133
- 260 South Lake Ave.
- Pasadena, CA 91101
- or you may reach us via MCIMAIL (CTRLALT Associates) or on Compuserve.
- Simon has a Compuserve number [76004,1664]. CTRLALT Associates has its
- own Compuserve support area: section 12 of PCVENDOR FORUM A. After
- logging onto Compuserve, GO PCVEN will take you to this forum. In
- addition to asking questions, you will be able to download the latest
- version and various sample files, tips, etc. You can aslo reach
- us on the IBMSYS forum and on the UTILITIES forum of PCMAGNET.
- For general discussions of shareware issues, you can GO SHAREWARE
- and leave messages in Section 8. You can also reach Simon via
- internet by using the Internet/Compuserve connection. Send
- messages on internet to
- 76004.1664@compuserve.com
- CTRLALT Associates is happy to offer a free Compuserve signup kit
- including a $15 credit. Details are provided with your registration
- kit. This offer is dependent on its continued availability from
- the Compuserve Information service.
-
- We're glad to hear comments, suggestions about enhancements,
- as well as complaints, incompatibilities and bugs. Suggestions for
- enhancements would be especially welcome. For example, we added
- utilities mode in going from version 1.0 to version 2.0 in response
- to a request to allow a reboot command. You can find the version
- of STACKEY by using the DOS command "type STACKEY.COM" or by
- passing a /?/ to STACKEY on the command line.
-
- Consultant's license: Consultant's may want to use STACKEY
- and BATUTIL to customize a client's system. For this purpose we
- offer a special consultant's license which allows you to personally
- place copies of BATUTIL and/or STACKEY on any client's machine
- without additional fees so long as no help or documentation is
- included. We refer here to the documentation and help files that
- we supply. If you are interested in some kind of bundling of
- STACKEY and/or BATUTIL with a product, please write to CTRLALT
- Associates at our address or send MCImail or Compuserve easyplex to
- us. Consultant's licenses are limited to people placing the
- software on machines owned by companies for which they are not
- employees, that is, it is not intended for sitewide licenses.
-
-
-
- Chapter I:INTRODUCTION Page 7
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- Volume discounts start at 5 copies and sitewide licenses at
- 500 copies according to the following:
- 5-10 copies: 15% discount
- 11-20 copies: 20% discount
- 21-500 copies: 25% discount
- sitewide license to 500 copies: $ 8,000
- sitewide license to 1000 copies: $10,000
- unlimited sitewide license: $25,000
- Volume discounts are shipped with one set of (two - STACKEY and
- BATUTIL) manuals for each two program licenses. Sitewide licenses
- comes with 100 copies of the manuals with additional manual sets
- available for a nominal fee.
-
- Foreign users are asked, if possible, to pay via credit card.
- Foreign registrants will be billed for first class airmail postage.
-
- If you like the program, please give it to your friends, place
- it on bulletin boards and otherwise spread it around. We explicitly
- allow TRIAL use of it privately and in a commercial environment.
- You may give it away, but you may not charge for it or include it
- with commercial software without our permission. An exception is
- made for user groups and shareware software distributors who are
- approved shareware distributors of the Association of Shareware
- Professionals, an organization to which both Wilson and Simon belong.
- Those interested in contacting ASP to become approved distributors
- should write for an application to
- Association of Shareware Professionals
- Executive Director
- PO Box 5786
- Bellevue,WA 98006
- Vendors may only distribute the full BATUTIL/STACKEY package which
- archived fits on a single diskette; see vendor doc.
-
- This program is produced by a member of the Association of
- Shareware Professionals (ASP). ASP wants to make sure that the
- shareware principle works for you. If you are unable to resolve a
- shareware-related problem with an ASP member by contacting the
- member directly, ASP may be able to help. The ASP Ombudsman can
- help you resolve a dispute or problem with an ASP member, but does
- not provide technical support for members' products. Please write
- to the ASP Ombudsman at P.O. Box 5786, Bellevue, WA 98006 or send a
- Compuserve message via easyplex to ASP Ombudsman 70007,3536.
-
-
-
-
- Chapter I:INTRODUCTION Page 8
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- STACKEY is warranted for no particular purpose. While we
- have tried to make the program bug free, no software can be
- guaranteed to be free of bugs. Due to the complex nature of
- computer software CTRLALT ASSOCIATES does not warrant that the
- licensed Software is completely error-free, will operate without
- interruption, or is compatible with all equipment and software
- configurations. Repair, replacement or refund, at the option of
- the CTRLALT ASSOCIATES, is the exclusive remedy of the customer, in
- the event of a defect. By using this program, you accept it AS IS
- and agree that we will NOT be held responsible for any damages
- including but not limited to consequential damages or loss of data.
- This includes damages caused by problems of which CTRLALT
- Associates is already aware. We will attempt to correct any bug
- which is pointed out to us. Registered users are entitled to use
- bug fixes while still numbered 3.xx. We do not intend to support
- Version 3.xx once a Version 4.xx is available and you may need to
- pay an upgrade fee to a new version if there are any bug fixes made
- once Version 4.xx is available. You may ask for a full refund of
- your registration for a period up to 90 days after you register but
- only if you return the program package sent registered users and
- agree to destroy any copies of BATUTIL and STACKEY in your
- possession and cease using the programs. While we have attempted
- to make this documentation as clear as possible, we cannot
- guarantee that there will not be misunderstanding or user error.
-
- We specifically exclude any warranties, EXPRESS OR IMPLIED,
- including the IMPLIED WARRANTIES OF MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. SOME STATES DO NOT ALLOW THE IMPLIED
- WARRANTIES TO BE EXCLUDED. CONSULT A LAWYER TO SEE WHETHER OR NOT
- THE ABOVE EXCLUSIONS APPLY TO YOU IN YOUR STATE.
-
- This documentation, the programs and source code for the
- associated programs STACKEY, FILEKEY, EGAPAL, VGAPAL and the
- demonstration BATch files COLOR, SEECOLOR, CGACOLOR, and SOUNDS are
- copyright by Barry Simon and Richard M. Wilson, 1986 - 1990, all
- rights reserved.
-
- The following may be trademarked names: Turbo Pascal, Reflex
- and Sidekick by Borland International, Newfont by Mark Horvatich,
- CED and PCED by the Cove Software Group, Fansi Console by Hersey
- Microcomputing, Software Carousel by Softlogic, IBM by IBM,
- Ultravision by Personics, Codeview by Microsoft, Quikbuf by Intel,
- Frieze by Zsoft, List by Vern Buerg, Move'em and 386Max by
- Qualitas, Qemm, Qram and DesqView by Quarterdeck, Pizazz Plus by
-
-
- Chapter I:INTRODUCTION Page 9
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- Applications Technology, Tesseract by Innovative Data Concepts,
- 123 by Lotus Development Corporation and Bradford by Concom.
- BATUTIL, STACKEY and CTRLALT are trademarks of Ctrlalt Associates.
-
-
- I.4 New in Version 3.0
-
- If you have been using version 2.0 of STACKEY here are some
- of the new features in this version:
- - You can now pause playback (while allowing other programs
- to run in the foreground) until a stated character string
- appears at a given place on the screen or until it
- appears at the current cursor position. To remind you
- that this scan mode is on, the cursor will blink. As an
- alternative, you can scan "silently", that is with this
- visual cue not implemented.
- - You can simulate depressing any set of shift keys for a user
- specifiable number of clock ticks. This will allow
- popping up of SIDEKICK, SIDEKICK PLUS, PRIMETIME and many
- other programs.
- - You can load the resident part of STACKEY in high memory
- with 386max or Qemm.
- - You can invoke CTRLALT PLUS.
- - You can swap Carousel partitions or simulate the hitting
- of the Desq key in DesqView. You can also invoke any TSR
- which conforms to the Tesseract standard.
- - You can send STACKEY text strings and control codes to
- standard output rather than the keyboard replacing the
- need for a separate SEND program
- - STACKEY now has four hot keys which allow you to talk to
- the resident part from within other programs. One will
- stop playback and flush the buffer, one will pause
- playback until the third restart playback hotkey is hit,
- and one will cancel active scans. You can also pause a
- script to await the restart playback key. These keys can
- be changed from the DOS command line.
- - You can insert beeps and popup messages into STACKEY
- scripts.
- - For people who understand assembly language programming
- you can insert inline code or external files into a
- STACKEY script. This will allow others to provide custom
- routines to you even if you don't understand assembly
- code.
- - STACKEY now comes with a stand alone program BATUTIL which
-
-
- Chapter I:INTRODUCTION Page 10
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- gives you considerable control over batch files and over
- the DOS environment.
- - The EGA color support added in STACKEY 2.0 has been extended
- to VGAs and to users of Ultravision.
- - More informative error messages in response to syntax errors.
-
-
- I.5 New in Version 2.0
-
- If you have been using version 1.0 of STACKEY, here are some
- of the new features of version 2.0 carried over to version 3.0:
- - Color support on the CGA including borders, background in
- medium resolution graphics and palette change
- - Color support on the EGA both temporary color changes and
- changes to permanent palettes when used in conjunction
- with a program that moves the permanent palettes to RAM
- - A separate program that moves the permanent palettes to RAM
- - A utilities mode that allows you to switch monitors, ports,
- cursor size, mode and 25 vs 43/50 lines. Variable beeps and
- a command to wait from .05 seconds to 30 minutes before
- resuming
- - Possibility to dump the screen to a file or printer at some
- point in the middle of a BATch file
- - The equivalent of DOS' pause but without a message (so you
- can supply your own) with the possibility of having the
- <Enter> key alone accepted or of having the BATch file
- aborted under a Y/N choice. This is now done better with
- BATUTIL but is kept in version 3.0 for compatibility with
- version 2.0 scripts.
- - Optional modes that control what happens when STACKEY finds
- a syntax error
- - Modes to handle programs that flush the buffer after every
- keystroke
-
- With the exception of two commands, version 3.0 is upward
- compatible with STACKEY, Version 1.0. The /xxxx/ has been replaced
- by /Bxxxx/ and /+xxxx/ by /Rxxxx/ (B for buffer and R for reload).
- Version 3.0 is fully upward compatible with Version 2.0.
-
- STACKEY Vers. 3.x ignore the existence of STACKEY Vers. 1.0
- and 2.x. Thus if you try to load 3.x with the any earlier version
- resident, both will be loaded. And each will only talk to the
- appropriate version. However, if you try to run one version of
- STACKEY 3.x with another resident, you will get the message:
-
-
- Chapter I:INTRODUCTION Page 11
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- STACKEY: Version number doesn't match resident part.
- Re-install (Y/N)?
-
-
- I.6 Files in the STACKEY package
-
- There are six executable programs
- STACKEY.COM - The basic program
- SKRES.COM - Version for special loading; see Section
- III.11
- FILEKEY.COM - Program to send input to STACKEY's stack
- from a file
- EGAPAL.COM - Program to allow STACKEY to control
- permanent palettes on the EGA
- VGAPAL.COM - Program to allow STACKEY to control
- permanent palettes on the VGA
- BOXES.COM - Small program for the demonstration BATch
- file CGACOLOR.BAT
-
- four demonstration BATch files
- CGACOLOR.BAT - Demonstrates STACKEY's color commands for
- the CGA
- COLOR.BAT - Demonstrates STACKEY's color commands for
- the EGA by displaying all 64 colors;
- use a parameter to indicate the time
- between color changes in half second
- units; e.g. "color 3" would give 1.5
- second change times.
- SEECOLOR.BAT - Allows you to see any color or colors
- supported on the EGA by typing in their
- numbers or color patterns; e.g.
- "seecolor 14" or "seecolor RrGgB" or
- "seecolor 23 42"
- SOUNDS.BAT - Illustrates the {BEEP} command
-
- ten files demonstrating the STACKEY external interface:
- FLASH.BIN - External code to flash the screen
- FLASH.ASM - Source for flash.bin
- FLUSH.BIN - External code to reenable the keyboard
- and flush the buffer
- FLUSH.ASM - Source for flush.bin
- MAKEMESS.ASM - Shell for making popup yes no messages
- SAMPLE.MSG - A sample external made with MAKEMESS
- GAVOTTE.BIN - High class music external file
-
-
- Chapter I:INTRODUCTION Page 12
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- MONTEV.BIN - Another high class music external file
- POP.BIN - A less high class music external file
- MUSIC.ASM - Source for music files
- (See Section VI.9 for more on these samples).
-
- and the help files
- STACKEY.HLP - Basic Help file
-
- In addition, there are the files associated with BATUTIL
- discussed in the BATUTIL documentation.
-
- While these programs are the package and may be distributed as
- such, the original disks from CTRLALT Associates come with the files
- in compressed format. The file README.COM on the distribution
- disk will explain how to install the programs. You cannot just
- use the copy command. If you got them from another source, that
- source may have used another packing method.
-
-
- I.7 Loading and Using STACKEY
-
- The first time that STACKEY is invoked, it loads a small
- resident portion which becomes permanently resident taking almost
- exactly one kilobyte of RAM for code plus whatever buffer size you
- choose. By default the buffer size is 128 'keystrokes' or 256
- bytes. This can be changed; see Chapter III - indeed many of the
- new features takes 3-10 keystrokes of buffer space and some
- considerable more so you may want a larger buffer. It displays
- the message:
- Resident part of STACKEY now in place.
- and proceeds to read its command line. At later times, STACKEY
- will find itself in memory and only read its command line. If you
- are using a hardware or software protocol that allows loading in
- high memory (MAXIT board, 386max or QEMM), you'll want to use SKRES
- rather than STACKEY as you will if you want a buffer with over
- 10000 keystrokes, see Section III.11.
-
- STACKEY will place keystrokes in its stack according to the
- rules of syntax described below. If there is a syntax error, it
- will exit with no keyboard stacking and give an error message. For
- example, saying
- stackey "hello "CRthere
-
-
-
-
- Chapter I:INTRODUCTION Page 13
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- will result in the error message
- Oops! There is an error on the STACKEY command line.
- "hello "CRthere
- ^
- Unrecognized command.
- The arrow (shown as a caret here) will point to the first place on
- the line that STACKEY was unable to interpret. The command
- line to send hello on one line and there on the next should have
- said
- stackey "hello "CR"there"
-
- The arrow will indicate other errors; for example, if you ask
- STACKEY to swap printer ports but you only have one printer port,
- STACKEY will exit with
- Oops! There is an error on the STACKEY command line.
- {PRN}
- ^
- Hardware or software environment does not appear to support
- this command.
- The syntax is fine but there is an error none the less. Similarly,
- if you try to swap Carousel partitions but STACKEY finds that
- Carousel isn't loaded, you will get an error message.
-
- The command line is parsed into parts consisting of text
- between quotes, two character special codes, hex and decimal input,
- delays and special commands. Some of the two character special
- commands allow an integer for the second "character" which may be
- more than one numeral. The special commands include EGA/VGA color
- settings between square [] brackets and utilities commands inside
- pointed braces {}. Certain of the new features like SCan and SHift
- take parameter inside (). If only a utility is called up and the
- final } is left off, the resident part of STACKEY will not load.
- Spaces between the parts are optional so that
- stackey F1"hello"^r@E
- is the same as
- stackey F1 "hello" ^r @E
- or even
- stackey F1 "hello" ^r@E
- but
- stackey F 1"hello"^r@E
- which splits the two character code F1 will result in an error message.
-
-
-
-
-
- Chapter I:INTRODUCTION Page 14
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- I.8 .HELP!!
-
- Seventeen screens of help are available if you type in
- stackey ?
- To get help, the file STACKEY.HLP distributed with STACKEY must be
- available either in the default directory or in your path. This
- STACKEY.HLP file is different from the file of the same name
- distributed with STACKEY 2.0. If that old STACKEY.HLP is found,
- STACKEY will exit with the error message:
- The file STACKEY.HLP has wrong format or version number.
- The first help screen is a table of contents and the last one an
- index. You can search by hitting S or goto a given page with Goto.
- The help is a useful summary but not really a replacement for
- reading the manual!
-
- On a true monochrome monitor like the original MDA or
- Hercules card, STACKEY ? will show up in the proper two color
- attributes. But on a color adapter with monochrome screen (for
- example, most laptops), the "colors" may make the help invisible or
- ugly. On such a screen call for help with
- STACKEY ?m
-
- When you exit the help, a screen appears reminding you to
- register. You can suppress this screen by placing
- BU$=I paid
- in your environment. Obviously, having told you the secret, you
- can do it even if you haven't paid - let your conscience be your
- guide.
-
-
- I.9 ERRORLEVEL
-
- If STACKEY can interpret its command line and does not find
- the buffer full, it exits with an error level of 0. If there is an
- error in the command line, the errorlevel is set to 1, if there is
- a buffer overflow, the errorlevel is 2 and if there is any kind of
- DOS file error whether due to an invalid path or an open drive door
- in the {dumpf} utility, the errorlevel is set to 3. You can test the
- errorlevel in BATch files with the "if errorlevel.." DOS command.
- All error messages are directed to standard output so you can
- redirect them to NUL and suppress them if you will handle errors
- with errorlevel. An example of this can be found in the
- demonstration BATch file COLOR.BAT. If you enter an illegal
- parameter value, say "color a", the BATch file responds by
-
-
- Chapter I:INTRODUCTION Page 15
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- suppressing an error message from STACKEY and giving you one
- appropriate to the BATch file. How STACKEY responds to an error
- is controlled by the /t/ and /c/ commands discussed in Chapter III.
- By default STACKEY will flush its and BIOS's buffers when there is
- an error but the BATch file will continue.
-
- If STACKEY finds that the version number of the resident part
- does not agree with the version number of the file that you have
- invoked, it will exit with an errorlevel of 4.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter I:INTRODUCTION Page 16
-
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER
-
- II.1 Stacking text
-
- Most often, you will want to stack ordinary alphanumeric
- data, that is the white letters in the center of the keyboard
- including the numbers, punctuation, braces, etc. You do this by
- placing the text within quotes on the command line as in
- stackey "hello there"
- or
- stackey 'hello there'
- Either single or double quotes can be used. Once a quote occurs on
- the line, every letter counts until a matching quote OF THE SAME
- TYPE occurs so to place
- "Hi!", he said
- in the stack, you can use
- stackey '"Hi!", he said'
- You cannot stack both types of quotes within one string but you
- can stack strings with both types of quotes by using more than one
- string. For example, to stack
- "I can't come", he said
- use
- stackey '"I can' "'" 't come", he said'
- Later, we will describe the command codes SQ and DQ for placing
- quotes. You could also use:
- stackey DQ"I can't come"DQ", he said"
- to stack the above string.
-
- While you will mainly stack ASCII characters corresponding to
- the white keys between quotes, you can also stack an ASCII
- character such as the graphics characters. STACKEY will simulate
- the hitting of the A key if you use stackey "A"; it will simulate
- entering an ASCII code above 128 as if it were entered from the
- Alt-numeric keypad.
-
-
- II.2 Two-character Codes
-
- Many keys on the keyboard do not correspond to any ASCII
- character. For these and also for a few ASCII characters, STACKEY
- recognizes special two character codes. The first of these can be
- a special symbol such as ^, @ or #. Because some programs like CED
- give special meaning to some of these codes, we have given them
- alternatives. That is, as the FIRST character in these codes:
- ~ means the same as ^
- ( means the same as @
- ) means the same as #
- * means the same as $
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 17
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- This replacement is only effective for the first character, so that
- you cannot replace ^^ by ~~ but only by ~^. If you need to stack a
- control-^ and ^ has a special meaning, you will have to use another
- method like hex codes. These alternatives are not applicable in
- the color setting commands (i.e. you cannot use [)3 1=4] in place
- of [#3 1=4]).
-
- You stack function keys using one of F,S,C,A (for function,
- shifted function, control function and alt function) followed by a
- single digit; 0 stands for 10 and on an enhanced keyboard, - stands
- for 11 and = for 12 (note the - and = keys are on the numeric row
- in the eleventh and twelfth place). Thus Ctrl-F10 is stacked with
- C0 and
- stackey C2 A3 S5 F0 A-
- would stack the sequence Ctrl-F2, Alt-F3, Shift-F5, F10, Alt-F11. You
- may use either upper case or lower case for the key letter f,s,c,a. Do
- not confuse ^1 (for Control-end) and C1 or @1 (for alt-1) and A1.
-
- You can stack the numbers on the numeric keypad with N0,...,
- N9, the numeric decimal point (shift del) with N. and the grey +, -
- and * with N+, N- and N*.
-
- The BIOS also makes codes for certain Alt key combinations:
- legal possibilities are alt- followed by any letter or number (top
- row numbers) or the following special symbols: - =. These can be
- stacked by preceding the key with @, e.g.
- stackey @a @2 @-
- will stack Alt-A followed by Alt-2 followed by Alt-minus. It does
- not matter if you use upper or lower case letters or if you use @!
- rather than @1 or @_ rather than @-.
-
- Similarly, available control combinations are the letters A-Z,
- [,\,],^,_,`,@ left arrow, right arrow, home, end, pgup, pgdn, prtsc.
- These are entered using the ^ (or ~) as the first key. ^A through
- ^Z will enter those control codes as will ^[, ^\,.... The six
- keys, on the numeric keypad corresponding to ^Home, etc. can be
- entered with the corresponding numbers 1,3,4,6,7,9. Thus
- stackey ^z ^Z ^[ ^6
- will stack two control z's, an escape and then ctrl-right arrow
- (but the "escape" here is entered as if you depressed the control
- key and then struck [; to enter an escape as if you hit the escape
- key, use $e or ES as described below). For the letters, ^ may be
- followed by an upper or lower case letter. For the remaining
- combinations, only one possibility is allowed. For example, do not
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 18
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- confuse ^^ and ^6.
-
- In the next chapter, we will discuss the PH two character code
- which stacks a PHony keystroke and the WR two character code which
- stacks a "Wait for Request".
-
- Next, there are two character mnemonics for special key
- combinations as follows:
- LA Left Arrow
- RA Right Arrow
- UA Up Arrow
- DA Down Arrow
- PU Page Up
- PD Page Down
- HM Home
- EN End
- IN Insert
- DE Delete
- G+ Grey plus ("+" will send the top row +; also N+)
- G- Grey minus ("-" will send the top row -; also N-)
- G* Grey star ("*" will send the top row *; also N*)
- CP Control PrtSc
- PS PrtSc
- TA or TB Tab
- ST or BT Shift Tab (=Back Tab)
- ES Escape (also $e)
- BS Backspace (also $h)
- SP Space bar (also " ")
- CR Enter (carriage return)
- LF Ctrl-Enter (line feed)
- FF form feed (^L) (NEW in vers 3.0)
- DQ The double quote "
- SQ The single quote '
- CB Ctrl-Backspace (NEW in vers 3.0)
- These codes can be entered in upper or lower case. It is a little
- known fact that Ctrl-Backspace is a legitimate keystroke that even
- enters a valid code: ASCII 127 which is .
-
- PS for PrtSc will simulate the pressing of the Shift-PrtSc
- key. If some other program, e.g. PIZAZZ PLUS has taken over that
- key, it will be called up with PS.
-
- ^! will simulate the Ctrl-Break key; for techies, it places an
- ASCII 0 word in the keyboard buffer and then calls int 1BH.
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 19
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- STACKEY provides support for combinations understood by the
- enhanced keyboard or by the BIOS that comes with machines supporting
- the enhanced keyboard. First, the following Alt-key combinations are
- allowed: Alt-[ Alt-] Alt-; Alt-' Alt-` Alt-\ Alt-, Alt-. Alt-/.
- These are entered with the combinations A[ A] A; A' A` A\ A, A. A/.
- In addition we have the following codes for the enhanced keyboard:
- Alt-Bksp AB
- Alt-Enter AC
- Alt-Esc AE
- Alt-Tab AT
- Ctrl-Tab CT
- The alt-keypad cursor keys (i.e. everything but the 5 key but
- including Ins and Del) are allowed keys with a enhanced keyboard.
- You enter them with K followed by the number, e.g. Alt-Left is K4
- and Alt-Del is K, The center key (unshifted 5 when numlock isn't
- on) is K5. In addition we have:
- Alt-Numpad K / K/
- Alt-Numpad K * K*
- Alt-Numpad K - K-
- Alt-Numpad K + K+
- Alt-Numpad K Enter KC
- Ctrl- K / ^/
- Ctrl- K * ^*
- Ctrl- K - ^-
- Ctrl- K + ^+
- Ctrl- K Up [8] ^8
- Ctrl- K 5 [5] ^5
- Ctrl- K Dn [2] ^2
- Ctrl- K Ins[0] ^0
- Ctrl- K Del[.] ^.
- Grey Enter GE or GC
- While most programs do not distinguish them, the enhanced BIOS will
- distinguish the cursor pad keys and the numeric pad keys. The cursor
- pad keys are given by
- Cursor pad End G1
- Cursor pad DA G2
- Cursor pad PD G3
- Cursor pad LA G4
- Cursor pad RA G6
- Cursor pad Hm G7
- Cursor pad UA G8
- Cursor pad PU G9
- Cursor pad Ins G0
- Cursor pad Del G.
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 20
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- The logic behind the codes is a little stretched. The G is because the
- keys are grey; the 1,2,3 correspond to the numbers the keys correspond
- to on the keypad (not the cursor pad!).
-
- An appendix to this chapter summarizes all the two character
- codes in alphabetic order.
-
- II.3 Status Toggles
-
- You can turn NumLock, etc. on or off from the STACKEY command
- line. The syntax is
- +N Turn NumLock on
- -N Turn NumLock off
- +C Turn CapsLock on
- -C Turn CapsLock off
- +S Turn ScrollLock on
- -S Turn ScrollLock off
- +I Turn BIOS insert mode indicator on
- -I Turn BIOS insert mode indicator off
-
- Strictly speaking, the discussion of status toggles does not
- belong in this chapter since they are handled in real time. That
- is rather than placing a command in the resident buffer, a command
- like +N is interpreted and acted on by the non-resident part of
- STACKEY as soon as it reaches the interpretation of that part of
- the command line. In this sense, the lock toggles are like
- utilities and, indeed, they are included also in utilities mode.
- They continue to be available in two code form for compatibility
- with earlier versions of STACKEY. BATUTIL will let you read the
- state of the lock keys from a batch file; see Section IV.9 of the
- BATUTIL documentation.
-
-
- II.4 Prompt metastrings
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 21
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- STACKEY supports the full set of metastrings allowed in the
- DOS PROMPT command as well as the added strings supported by the
- program SEND.COM of Howard Rumsey and Barry Simon. Specifically:
- $$ The character "$"
- $t The time in HH:MM:SS.hh format
- $d The date in DAY MM-DD-YYYY format
- e.g. Tue 9-30-1986
- $p The current path in full, e.g. C:\BIN\FOO
- $v The current DOS version
- $n The current default drive
- $g The character ">"
- $l The character "<"
- $b The character "|"
- $q The character "="
- $h The backspace
- $e The ESCape
- $_ CR/LF (i.e. <Enter> followed by Ctrl-<Enter>)
- $P same as $p in the root dir and as $p\ elsewhere
- $T time in HHMM format
- $M month in MM format, e.g. 09
- $D day in DD format, eg 03
- $Y year in YY format, eg 86 in 1986 and 01 in 2001
- $W day of the week in English, e.g. Sunday
- $E the date in English, e.g. February 18, 1988
- $H hour from 00 to 23
- $m minute from 00 to 59
- There is a difference between upper case and lower case after the
- $. $W, $E, $M and $m are new with this version.
- Because of STACKEY's send mode (see Section II.10), you need no
- longer use the SEND program but can use STACKEY instead. That is, you
- can use STACKEY to send these codes to standard output.
-
-
- II.5 Decimal and Hex Codes
-
- This section deals with advanced features not needed by most
- users. See Chapter VI for a tutorial on keyboard basics used in
- this section.
-
- You may enter various ASCII key combinations from the
- keyboard by pressing Alt (or by pressing Alt-Left Shift) and
- tapping one to three digits on the keypad and then releasing Alt.
- To stack keystrokes as if entered in this way use \ followed by a
- decimal number, so
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 22
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- stackey \104\101\108\108\111
- at the DOS command line will cause "hello" to appear on your
- screen.
-
- Keystrokes are stored in the buffer as a set of two hex
- bytes: a scan code and an ASCII code. You can enter such a
- combination by typing an X followed by four hex digits. The first
- two are the scan code and the second pair the ASCII code. For
- example
- stackey X2368 X1265 X266C X266C X186F
- at the DOS command line will cause "hello" to appear on your
- screen. The hex digits a-f and the letter x can be either upper or
- lower case.
-
- Because they are used internally by STACKEY, the scan codes
- E0 through FF (which are not legal anyway) are allowed but take
- the place of two keystrokes in STACKEY's buffer. STACKEY will
- place in the keyboard buffer whatever combination you tell it to
- even if it is an illegal combination. DOS will only pay attention
- to the ASCII half of such combination as will many programs. Some
- keyboard macro programs will allow such possibilities. For
- example, KEYWORKS associates Ctrl-Up Arrow (a keystroke not
- supported by an old style BIOS) with 8448. Stackey X8448 will call
- up the KEYWORKS macro assigned to Ctrl-Up if one is defined. Some
- combinations are filtered out by the so-called enhanced keyboard.
-
-
- II.6 Invoking special programs and keystrokes
-
- Most TSRs will not pop up by responding to strokes in the
- keyboard buffer and, as a result, STACKEY cannot invoke them by its
- usual method. However, when we have special information about a
- program, we can provide a special routine for that program in
- particular. We'll discuss those commands, all new in Version 3.0
- here. For programs that popup on depression of several shift keys,
- like SIDEKICK, we can simulate depressing shift keys as discussed
- in the next section. Here are the special invocation routines:
-
- CTRLALT PLUS: CA will invoke the main menu of CTRLALT PLUS so,
- for example
- stackey CA"MAP"
- will print the entire screen even if you are in 43 or 50 line mode.
- If CTRLALT PLUS is not loaded, you'll get an error message from
- STACKEY.
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 23
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- DESQVIEW: Quarterdeck provides two methods for macros to
- simulate the Desq key which work on different keyboards or BIOS. We
- have assigned them to D1 and D2. So for example
- stackey D1"Z"
- would zoom the current window to full screen. The combination DL is
- the same as the Desqview learn key. Finally {boot=d} as a utility will
- invoke a Desqview specific reboot command.
-
- CAROUSEL: You can tell Carousel to switch to partition n with
- Qn where n=1,2,...,9,0 (0 is for partition 10); with Carousel 3.0
- or later, you can also use Q- and Q= to switch to partitions 11 and
- 12.. Thus you might have a sequence of BATch files that
- successively loads partitions 1,2,.... If you want to load program
- "foobar" in partition 6, issue the string "hello" followed by F1 to
- the program and then switch to partition 7, you'd end the batch
- file for partition 6 with
- stackey "hello" F1 W36 Q7
- foobar
- The wait command W36 which is discussed in the next chapter (and
- pauses for 2 seconds) gives the program time to react to the
- keystrokes before the swap. You may need to adjust the W command
- for particular applications.
-
- TESSERACT PROGRAMS: Tesseract is a library of TSR routines
- provided by Innovative Data Concepts as a shareware product. If a
- TSR is written with these routines, you can invoke it with the TE
- command:
- stackey te(idstring)
- will call up the tesseract TSR with the given idstring name. You'll
- need to consult the documentation that came with your program to
- find the required id string but here is an example. Suppose you
- have SWAPSP and want to dial the third entry in your phone book
- under M. Use
- stackey TE(SWAPSP15)"PM"DNDNCR
- The idstring must be exactly eight characters in length. For
- Tesseract programs that allow multiple hotkeys, each hotkey has an
- a number. Te(idstring) will call the program with hotkey 0. For
- other hotkeys, place a /NN after the idstring. Thus, for example
- stackey te(idstring/23)
- would invoke the program in question via hotkey 23.
-
- CLONE SPEEDUP/SLOWDOWN: Many clones have two speeds adjusted
- with ^@G+/-. You can simulate this with
- stackey Z+
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 24
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- to speedup and
- stackey Z-
- for slowdown. This will not work with all clones.
-
- You might object to some of these additions to STACKEY by
- saying that you don't use CAROUSEL and object to resident memory
- being taken by the CAROUSEL command. In fact, most of these
- commands take NO additional memory - they use the inline feature
- discussed in Section VI.7.
-
-
- II.7 Simulating depression of shift keys
-
- Some popups come up when you depress a pair of shift keys.
- You can simulate the depression of any subset of the four shifts
- with the command SH which takes two parameters in the form
- SH(XXX,YY)
- where XXX is some subset of the letter C,A,L,R for the Control, Alt,
- Left shift and Right shift respectively and YY is a number from 1 to
- 65,535. This command simulates depressing the shift keys in
- question for YY clock ticks. You'll need to experiment with the
- value of YY depending on the program. We added that parameter
- because different programs seem to require different values. For
- example, with a default SIDEKICK Ctrl+Alt, you can invoke the
- SIDEKICK main menu from within a STACKEY script with
- stackey SH(CA,1)
- but invocation of SIDEKICK PLUS requires
- stackey SH(CA,n)
- where n is at least 7 or 8 while PRIMETIME (with say C+L as hot
- key) seems to require
- stackey SH(CL,10)
- You'll need to adjust the shift mask to whatever combination you've
- chosen for your application. For example, if you've changed the
- SIDEKICK popup to C+L use SH(CL,1) rather than SH(CA,1).
-
-
- II.8 Stacking real time beeps
-
- STACKEY scripts can include real time BIOS beeps with the special
- two key code BE. Beeps are especially useful combined with loops and
- waits and with jumps (see Section III.2).
-
-
-
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 25
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- II.9 Popup messages
-
- STACKEY scripts can include popup messages that are displayed and
- take over the machine until the user hits a key. There are two versions
- depending on whether you want the key hit passed to the underlying
- application.
- STACKEY MP(hi there)
- will display the message "hi there" in a box and pass the keystroke on
- while
- STACKEY ME(hi there)
- would eat the keystroke. These messages are implemented as inline code
- to avoid having to permanently use resident memory but as a result they
- take a lot of buffer space. A message takes 156 bytes plus 7 times the
- length of the message. The default buffer has only 256 bytes so that
- long messages will require you to load STACKEY with the command (see
- Sections III.11 and III.12) to take a larger buffer.
-
-
- II.10 Sending to standard output
-
- STACKEY places keystrokes in the keyboard buffer. However,
- you can tell STACKEY to instead send the interpreted material to
- standard output. You could then redirect this output to a file or
- the printer. Thus STACKEY provides a replacement for the SEND
- program of Rumsey and Simon. With their permission, a modified
- version of the documentation for SEND is provided as an appendix to
- this chapter.
-
- To send output to the standard output, include the special
- symbol underscore in the STACKEY command line so that
- STACKEY _"hello"$_
- will have the same effect as
- echo hello
- Following _ the ONLY allowed codes are:
- character strings in quotes
- control codes of the form ^x with x=a,...,z,[,\,],^ or _ (but
- not ^1, or ^@ etc)
- prompt metastrings in extended form as discussed above
- upper ASCII codes in the form \xxx
- the following two character codes: TA, TB, ES, BS, SP, CR, LF,
- FF, SQ, BQ, CB
- Any other codes, even ones normally legitimate in STACKEY (e.g. LA
- which doesn't have an ASCII equivalent) will produce an error
- message but only AFTER the codes prior to it on the command line
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 26
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- are already sent to standard output.
-
- The special command _ is only in effect for the line it is
- issued on; you must include it on each line which you wish to send
- to standard output. It need not be the first command on the line and a
- second _ will toggle back to real mode.
-
- If you have CED or a similar command line processor that
- allows synonyms or aliases, we suggest that you use
- CED SYN send 'stackey _&a'
-
-
- Appendix 1 to Chapter II. Two character codes
-
- Here is a list of the two character codes understood by STACKEY
- (cases where the "second" key is nnnn are shorthand for nnnn being a
- number):
-
- @ followed by
- letter, number, - or = : Alt-keystrokes
- ( followed by
- letter, number, - or = : Alt-keystrokes
- ^ followed by
- letter, 1,3,4,6,7,9, [ \ ] ^ _ ` @ : control key combinations
- 0,2,5,8,.,+,-,*,/ : control key combinations (enhanced only)
- ! : ^! = Ctrl-Break)
- ~ followed by
- letter, 1,3,4,6,7,9, [ \ ] ^ _ @ : control key combinations
- 0,2,5,8,.,+,-,*,/ : control key combinations (enhanced only)
- ! : ~! = Ctrl-Break)
- \ followed by
- nnn : Decimal ASCII code
- # followed by
- nnnn: repeat command (including loops)
- ) followed by
- nnnn: same as #nnnn (including loops)
- $ followed by
- $ t d p v n g l b q h e _ P T M D Y W E H m : metastrings
- * followed by
- $ t d p v n g l b q h e _ P T M D Y W E H m : metastrings
- + followed by
- N,S,C,I: turn on locks
- - followed by
- N,S,C,I: turn off locks
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 27
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- : followed by
- 0 1 2 3 4 5 6 7 8 9: labels (see Section III.2)
- A followed by
- number: Alt-function keys
- - = : Alt-function keys (enhanced keyboard only)
- [ ] ; ' ` \ , . / : Alt-key combos (enhanced only)
- B : AB = Alt-Backspace (enhanced only)
- C : AC = Alt-Enter (enhanced only)
- E : AE = Alt-Esc (enhanced only)
- T : AT = Alt-Tab (enhanced only)
- B followed by
- E : BE = BIOS BEep
- S : BS = BackSpace
- T : BT = BackTab (=Shift-Tab)
- C followed by
- number: Ctrl-Function key
- - = : Ctrl-Function key (enhanced keyboard only)
- A : CA = invoke CTRLALT PLUS
- B : CB = Ctrl-Backspace
- P : CP = Ctrl-Printscr
- R : CR = Carriage Return
- T : CT = Ctrl-Tab (enhanced keyboard only)
- L : Caps-Lock (as hotkey ONLY)
- D followed by
- A : DA = Down Arrow
- E : DE = DElete
- Q : DQ = Double Quote (i.e. ")
- 1, 2: D1 or D2 = Invoke Desqview main menu (Desq key)
- L : DL = Invoke Desqview Learn mode
- E followed by
- N : EN = ENd
- S : ES = EScape
- F followed by
- number: unshifted function keys
- - = : unshifted function keys (enhanced keyboard only)
- F : FF = Form Feed (Ctrl-L, ASCII 12)
- G followed by
- + - *,: Grey Plus, Minus, Star
- E C : Grey Enter (enhanced keyboard only)
- 0,1,2,3,4,6,7,8,9,.: Cursor pad keys (enhanced only,
- see Section II.2)
- H followed by
- ! + - * : Hotkeys, see Section III.6; e.g. H!(.,.)
- M: HM = HoMe
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 28
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- I followed by
- N : IN = INsert
- J followed by
- 0 1 2 3 4 5 6 7 8 9 : jumps (see Section III.2)
- K followed by
- 1,2,3,4,6,7,8,9,0,. : Alt-Keypad (enhanced keyboard only)
- 5 : Keypad unshifted 5 key (enhanced keyboard only)
- /,+,-,* : Alt-Grey keys: enhanced keyboard only
- C : Alt-Grey-Enter (Carriage return, enhanced keyboard only)
- L followed by
- A : LA = Left Arrow
- F : LF = Line Feed (Ctrl-Enter, Ctrl-J, ASCII 10)
- M followed by
- P, E : Messages with passing or eating keystroke
- nnnn : Wait minutes (see Section III.3)
- N followed by number
- 0 1 2 3 4 5 6 7 8 9 : Numeric keypad
- . : Shift-Del (Numeric decimal point)
- + - * : Grey keys (near keypad)
- L : NumLock (Hotkeys only)
- P followed by
- D : PD = PageDown
- H : PH = Phony keystroke (see Section III.5)
- S : PS = Shift-PrintScreen
- U : PU = PageUp
- + - : suppress, reenable printscreen key
- Q followed by
- number : Carousel partition switch
- - = : Carousel 3.0 partition switch to partitions 11, 12
- R followed by
- A : RA = Right Arrow
- S followed by
- number : Shift Function key
- - = : Shift Function key (enhanced keyboards only)
- C : SC(..) = scan ; also SCn,m(..) (see Section III.4)
- S : SS(..) = scan silently (see Section III.4)
- H : SH(.,.) = shift mask (see Section II.7)
- P : SP = SPace
- Q : SQ = Single Quote (')
- T : ST = Shift Tab
- L : Scroll Lock (Hotkey only)
- R : SysReq (Hotkey only)
- T followed by
- A B : TAB
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 29
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- E : TE = TEsseract callup (see Section II.6)
- U followed by
- A : UA = Up Arrow
- W followed by
- B : WB = Wait for buffer to be empty (see Section III.3)
- H K S : Wait for hotkey, any key, specific key (see Section
- III.7)
- R : WR = "Wait for Request"; pauses script until a key is
- requested (see Section III.5)
- nnn : Wait command (see Section III.3)
- X followed by
- nnnn : Hex key (see Section II.5)
- Z followed by
- + - : speedup up/down (see Section II.6)
-
-
- Appendix 2 to Chapter II. SENDing to STDOUT
-
- The following is a revised version of part of the
- documentation from SEND by Rumsey and Simon included with
- permission. It discusses how to use STACKEY's send to standard
- output mode invoke with an underscore in the STACKEY command line.
-
- stackey _<string>
- is an enhanced version of the ECHO command,
- ideal for sending escape sequences to the printer or screen. We'll
- refer to it as SEND. This appendix is primarily a tutorial on
- ECHO, SEND and redirection of output.
-
- You may be used to exploiting ECHO in your batch files but
- may not be aware that it can be invoked from the DOS command line.
- If that is the case, type in at the DOS prompt:
- echo hello
- You need to also hit <Enter> but we won't keep saying that. The
- response is amusing but not useful. Next try:
- echo hello > prn
- More interesting! Still not so useful but at least if you ever
- want to use your printer as a typewriter you can do it yourself
- without needing a BASIC program which does precisely that.
-
- Now try
- echo <Ctrl G>
- where "<Ctrl G>" means to hit a "control-G", that is to depress the
- <Ctrl> key and strike the G. With a dot matrix printer try
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 30
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- echo <Ctrl G> > prn
- These are decidedly more interesting and you may even think of some
- uses for them in batch files!
-
- Next try turning off your printer, carefully aligning your
- printer paper, turning your printer back on and typing
- echo <Ctrl L> > prn
- <Ctrl L> is the command to send a "top of form" to your printer but
- if you look carefully you will discover that more than a top of
- form was sent to the printer. ECHO automatically inserts a
- carriage return-line feed pair (CR-LF) to the end of any line so
- your last command first sent a top of form but then advanced the
- paper one additional line. Annoying, isn't it?
-
- Next try:
- echo <Esc>
- and
- echo <Ctrl [>
- (Escape and Control-[ are the same). This doesn't do what you
- might hope. <Esc> is interpreted by DOS as a desire on your part
- to abort the present command and thus you cannot use ECHO at the
- command line to send an <Esc> to either the screen or your printer.
- This is unfortunate since ANSI.SYS allows you to do all sorts of
- nice things if you send the proper "escape sequences" to the screen
- and many printers can be told to turn on boldface or other neat
- things by sending escape sequences to them. You can send such
- sequences to the printer by using some word processors (even EDLIN
- (ugh!) if you use its <Ctrl V> feature) to make a file with
- embedded escape characters which you can copy to your printer. But
- you then need to have these files around and you have files with
- embedded control characters which you may have trouble printing out
- or sending over a modem.
- SEND is intended to remedy these defects of ECHO:
- 1. It does not terminate line in a CR-LF combination; one can
- add such a pair "by hand".
- 2. Typing "stackey _^G" is equivalent (except for the lack of
- a CR-LF) to typing "echo <Ctrl G>" so one need not fill
- files with control characters.
- 3. Typing "stackey _^['E' > prn" will send a <Esc>E to the
- printer thereby turning on "emphasized" print.
- In addition, as will be explained, SEND supports the PROMPT $-
- characters.
-
-
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 31
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- SEND works much like ECHO but if the string to be echoed
- includes the caret (<Shift 6> which appears as ^), different rules
- apply. SEND will replace ^a by the character <Ctrl A> (ASCII 1),
- etc. ^ followed by any letter is replaced by the corresponding
- control character whether the letter is upper case or lower case.
- The remaining control characters:
- ^[=ASCII 27 (1B Hex)=<Esc>
- ^\=ASCII 28 (1C Hex)
- ^]=ASCII 29 (1D Hex)
- ^^=ASCII 30 (1E Hex)
- ^_=ASCII 31 (1F Hex)
- may be included by following a caret by the appropriate symbol.
- Obviously, ^[, the escape character will be used most often.
-
- SEND does not automatically terminate any line in a CR-LF
- (ASCII 13,ASCII 10) pair. Thus typing "echo hello" at the DOS
- command line will result in two lines on the screen before the
- next DOS prompt: one line saying hello and the other a blank line.
- Typing
- stackey _"hello"
- will only produce the one line saying hello. If one wants the CR-LF
- pair, one can insert it "by hand"; thus
- stackey _"hello"^M^J
- will have the exact same effect as "echo hello". As we will see in
- the next section
- stackey _"hello"$_
- is also equivalent. It is important to remember to put in these
- CR-LF by hand if you are using SEND in a batch file to echo a
- message to the screen. For example the four line batch file
- echo off
- cls
- stackey _"hello"
- stackey _"there"
- will produce the string "hellothere" on one line on the screen
- while adding $_ after "hello" or even replacing the last two lines
- by
- stackey _"hello"$_"there"
- will produce a two line message with one word on each line. You
- may find BATUTIL better to use for echoing messages to the screen.
-
- SEND supports the $-metastring conventions of the DOS PROMPT
- In accordance with the general STACKEY metastring translation, a
- special interpretation is made if the $ is immediately followed by
- one of the following:
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 32
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- $
- g,l,b,q
- h,_,e
- t,d,p,v,n
- P,M,D,Y,T,W,E,H,m
-
- The case of the letter following $ is significant. The
- metastrings are described in Section II.4. $g,$l,$b,$q correspond
- to the characters >,<,|,= respectively. You can use the ordinary
- "=" in a line starting with "stackey _", but you CANNOT type >,< or
- | in such a line since DOS will interpret these symbols as
- redirection or piping. You must use the $-metastring instead.
- For example, if you use FANSI-CONSOLE and want to send the ANSI
- code "<esc>[>4h" typing the command
- stackey _^["[">4h
- will make a file "4h" with two bytes in it while
- stackey _^["["$g"4h"
- will do exactly what you want.
-
- $h is equivalent to ^H, ASCII 8, the "backspace" which, if
- sent to the screen, moves the cursor back one space. Like the
- $h of the Rumsey-Simon SEND program, the Stackey SEND $h does not
- erases the previous character. Thus
- stackey _"a"$h
- will show an "a" on the screen and
- stackey _"a"$h"b"
- will show a "b" on the screen since the cursor will backspace one
- unit and the b will overwrite the a. But the command
- stackey _"a"$h"b">file
- will produce a file with three bytes: a,<Ctrl H>,b.
-
- $t and $d send the time and date in the form returned by the
- TIME and DATE commands. Thus the time will appear as HH:MM:SS:hh.
- If you only want the hours and minutes to appear on the screen, you
- can use
- stackey _$t$h$h$h$h$h$h" "
- (There are six spaces after the final $h and they are important!).
-
- One of the most useful things you can do with SEND is exploit
- the ANSI.SYS device driver. ANSI.SYS is a file that comes with DOS
- (version 2.0 and higher). You need to load it in your CONFIG.SYS
- file. If you already have such a file, add a line
- device=ansi.sys
- to it and place ANSI.SYS in your root directory or, even better,
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 33
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- place ANSI.SYS in a directory, say GEORGE and add a line
- device=\george\ansi.sys
- to your CONFIG.SYS file. If you don't have such a file, add one to
- your root directory with one of the above lines and while you're at
- it, you should probably add files=20 and buffers=15 (unless the
- memory of your computer is very limited).
- You can read about the syntax of the ANSI.SYS commands in the
- DOS 2.0 manual or the DOS 3.0 technical reference. ANSI.SYS can be
- used to control screen colors on a color monitor, and attributes on
- a monochrome monitor. For example,
- stackey _$e"[1;31;42m"
- will produce an unpleasant screen while
- stackey _$e"[1;33;44m"
- will be more to your liking. Actually, it is best to set your
- screen colors using the DOS PROMPT command. You can use SEND to
- call up colors and attributes for effect in batch files. BATUTIL
- will generally give you better color control.
-
- You can also use SEND and ANSI.SYS to redefine keys in DOS.
-
- DOS, following UNIX, supports two virtual devices called
- "standard input" (stdin) and "standard output" (stdout). Programs
- rather than sending their output to a specific device like the
- screen or printer can send them to stdout and similarly rather than
- take input from a specific device, they can take it from stdin. If
- not specified otherwise, stdout is sent to the currently active
- screen and stdout is taken from the keyboard (i.e. the DOS command
- line). However, one can redirect stdout to another device. For
- this to work the program MUST send its output to stdout. For
- example, the "main output" of the COPY command goes not to stdout
- but to the second file specified on the command line; only the
- message that COPY sends goes to stdout. Thus "copy somefile prn"
- will print a file on your printer, but "copy somefile > prn" will
- print the error message
-
- File cannot be copied onto itself
- 0 File(s) copied
-
- If a program takes its input from stdin, that too can be
- redirected. One redirects output using the symbol ">" and input
- using "<".
- STACKEY's SEND sends its output to stdout and that can be
- redirected, for example to a printer or file. It takes its input
- from the keyboard rather than from stdin so one cannot redirect
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 34
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- input.
-
- SEND can also be used for sending control sequences to your
- printer. Unfortunately, the sequences to be used tend to be highly
- dependent on the brand and/or model of your printer.
- The simplest example is a one line batch file entitled tf.bat
- stackey _^L> prn
- Typing tf at the DOS command line will cause your printer to eject
- a page. You might even want to define a function key to mean tf.
- A more sophisticated example is the five line batch file
- BOLDPRN.BAT, for IBM graphics printers:
- echo off
- cls
- stackey _$e"E"$e"G">prn
- copy %1 prn
- stackey _$e"F"$e"H">prn
- Thus typing "boldprn MYFILE" will print a boldface (=emphasized and
- doublestrike) copy of myfile on your printer. You might consider
- adding the line:
- stackey _$P"%1 printed on "$d>prn
- before the "copy..." line.
- A particularly useful way of sending printer codes is to use
- send in CED synonyms if you have the program CED or in 4DOS
- aliases.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter II:PLACING KEYSTROKES IN THE BUFFER Page 35
-
-
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION
-
- III.1 Overview
-
- There are various ways that you can pass commands to the
- resident part of STACKEY. Seven discussed here: delays, repeats, the
- two types of scan, WB, WR and PH, and the color commands [],L,P
- discussed in the next chapter are just stored as special "keystrokes"
- in STACKEY's buffer so it processes them as they are reached. The
- command to flush the buffer is acted on immediately and the command to
- quit which we discuss below is properly speaking not a command to the
- resident part but to the command line interpreter.
-
- The commands /Bxxxx/ and /Rxxxx/ are commands to the part of
- the program that loads the resident part and strictly speaking not
- commands to the resident part.
-
- Another set of commands set certain flags (toggles) which the
- resident part keeps and effect how the command line is
- interpreted. Thus, in a certain sense these are commands to the
- interpreter but ones which are kept track of in the resident part.
- The toggles come in pairs:
- /T/ and /N/ turn test mode on and off (default is off)
- /S/, /P/ and /I/ choose among smart, patient and impatient
- processing (the default is smart)
- /C/ and /D/ turn continue mode on and off (default is off)
-
-
- III.2 Repeats and loops
-
- If you need to stack ten left arrows, you will not appreciate
- having to type LA ten times (nor do you want to take that much
- space in STACKEY's buffer). Thus STACKEY allows a key repeat
- command. # followed by a decimal number from 1 to 255 will result
- in the next key stroke being repeated that number of times, so
- stackey #7 F1
- will stack 7 F1's while
- stackey #7 "hello"
- will stack hhhhhhhello. Trying to repeat a repeat command (as in
- #2#4) or a delay (as in #2W6) is not recommended. Indeed,
- following a repeat command with anything that isn't a keystroke
- will produce unexpected effects.
-
- Sometime, you will want to repeat a set of 'keystrokes' multiple
- times (loop) and for this you need only use # followed by a number
- followed by [, the commands and ] so for example
- stackey #3["hello"]
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION Page 36
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- would enter "hellohellohello". You might try
- stackey #10[be w5]
- in a batch file which will produce 10 beeps and which would notify you
- from another room.
-
- We recommend that repeats also by handled as loops; the
- repeat command is only included for compatibility with earleir
- versions. Future versions of STACKEY may remove support for the #
- command iwht the [..] required by loops.
-
- In addition STACKEY supports labels for use in external com files
- we might supply (or you if you have programming background) and a
- single jump command. Taking a leaf from batch file labels, STACKEY
- labels are :0 through :9 and j7 would unconditionally jump to :7 if it
- exists. Thus
- stackey :0 be w5 j0
- would beep forever; more properly, it will beep until you flush the
- buffer with the STACKEY hotkey AL! As an example of how to use jumps
- look at the sample external file sample.msg and try
- STACKEY w20 ex(sample.msg) :1 be 'yes' j0 :2'no'
- This is described in detail in Section VI.9.
-
-
- III.3 Delays
-
- There will be times that an application program will flush
- the keyboard buffer before asking for a keystroke. This is to
- force you to respond or to make sure the response is not
- accidental. If you just stack the strokes you want, they will get
- flushed out. A famous example of this is 1-2-3. STACKEY provides
- several ways to try to get around this problem: delays, two kinds of
- phony keystrokes and patient processing. STACKEY allows you to place a
- delay into the stack so that when those strokes are gotten to, STACKEY
- will pause before inserting them in the buffer. You specify the time
- to pause in 55 millisecond units (clock ticks; there are about 18.2 per
- second). This is done with the command Wn where n is from 1 to
- 65535 so
- stackey W36 ES
- will Wait about 2 seconds before it puts an <Esc> into the buffer.
- You can use either w or W. 65535 ticks is about one hour. If you
- need a longer wait, you can stack multiple waits or use a loop.
- New in STACKEY 3.0 is the M command. M is followed by an integer n
- from 1 to 65535 and delays for n minutes where a "minute" is really
- 1092 clock ticks. Each hour of delay via the M command takes 4
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION Page 37
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- bytes of buffer. A delay of a week would require about 320
- keystrokes more than the default 128.
-
- You should distinguish between what we call delays and what
- we call waits. For consistency with Version 1.0 we still use the
- letter W for delays. Delays are set with the command Wnnn while
- waits are set with the {WAIT=nnn} utilities mode command. Delays
- are commands to the resident part of STACKEY telling it to delay
- placing strokes in BIOS' buffer (or setting colors) while operating
- in the background as some underlying program is running. Waits are
- commands to the foreground part of STACKEY telling it to loop and
- control all machine resources (although you can call up a program
- like SIDEKICK) until the wait period is over. Thus waits will be
- useful only in rather special circumstances like demonstration
- BATch files while delays will get used more often.
-
- Delays are implemented as they are reached by the resident
- part of STACKEY. The resident portion checks to see if BIOS' buffer
- is empty and only starts counting the delay if it is empty. Thus,
- a command like
- stackey "1"W36"2"
- will separate the two keystrokes by 36 ticks as they are processed
- by your application program and not by when they happen to be
- placed in the keyboard buffer. In distinction to this, STACKEY
- implements waits as soon as they are reached in its interpretation
- of the command line. Unlike other commands which look for an empty
- keyboard buffer, delays are not effected by whether you are in
- impatient, patient or smart mode.
-
- There are times you might want to pause a STACKEY script until
- the BIOS buffer is empty. W1 will almost do that although it will
- delay for an extra 1 tick. If you just want such a pause, use WB (Wait
- for Buffer).
-
-
- III.4 Scanning
-
- There are times that you will want to pause STACKEY until your
- application program takes a certain action. If the application
- program announces that action with a message on the screen, then the
- SCan command is exactly what you want. You can scan for either a
- "string" at a particular location on the screen for which the syntax
- is
- SCn,m("string")
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION Page 38
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- or you can scan for the "string" immediately preceeding the cursor
- position for which the syntax is
- SC("string")
- Do NOT place quotes around the string. SC may be upper or lower
- case. n,m are the row and column that you want to scan at. The
- string will need to START at position n,m. For example
- stackey SC2,7(hello)"there"
- would pause stackey (while your foreground application continues to
- work) until the string hello appeared in row 2 columns 7-11 and at
- that point, "there" would be entered through the keyboard.
-
- When STACKEY runs into such a command in a script it pauses
- playback in the script while remaining in the background. To warn you
- that this has happened, it will blink the character at the current
- cursor position for a plain SC command or at position n,m for an SCn,m
- command. If you do not want this blinking you can tell STACKEY to scan
- silently (i.e. without the blink) by using SS rather than SC.
-
- Be especially careful of SS, since, if the scanned element
- doesn't occur, you may forget what has happened and think that
- STACKEY is broken since further scripts are placed in the buffer but
- no action occurs since STACKEY is patiently scanning.
-
- There are three ways to stop a STACKEY scan. First at the DOS
- command line, you can issue
- stackey !
- which flushes the STACKEY buffer as described in Section III.10
- below. Secondly, you can use one of two STACKEY hotkeys. These
- are described in Section III.6 below. One hot key flushes the
- STACKEY buffer; the other resumes playback immediately following
- the scan command.
-
- In general, it is better not to search for too long a string.
- Ideally, you want a string of 2 or 3 characters.
-
- Here is a real life example of how to use STACKEY's scan
- command. Magellan takes some time to read all your hard disks. If
- you load it in a Carousel partition, you'd like it to fully load in
- an initial batch command after which you switch partitions. While
- loading, Magellan displays the word WAIT in the upper right corner
- of the screen. When finished it changes to LIST. The following
- will do what you'd want:
- stackey W54 SC1,76(LI) W25 q6
- mg
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION Page 39
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- if placed in a batch file where you want to go to Carousel
- partition 6 next.
-
- III.5 The phony keystrokes
-
- Two other tools that STACKEY provides to cope with programs that
- flush their buffers after loading or even before accepting any
- input are the PHony keystroke stacked with the two key code PH as in
- stackey PH"hello"
- and the WR (wait for request) keystroke as in
- stackey WR"hello"
- When the resident part reaches such a phony keystroke, it stops
- processing the buffer until the underlying program makes any call to
- int 16. This is the way that programs normally check for and
- process keystrokes. The first time that a program asks if there are
- any keystrokes in the buffer, it will be told no which means that it
- won't bother to flush the buffer. As soon as an int 16 call is
- processed, STACKEY sets itself to continue the placing of strokes
- and processing of color commands.
-
- PH will not always work the way that you would like because a
- program may use a different strategy. If PH didn't work for you in
- version 2.0, try WR since we have changed the strategy in a way that we
- feel is likely to be more successful. For compatibility with
- programs fro which PH worked, we have kept the version 2.0 PH but
- we believe that WR is more likely to overcome the buffer flushers.
- If you are having problems with a program flushing some of
- STACKEY's keystrokes, you can try PH but if that doesn't work, you
- can consider delays and/or using patient processing; see the
- discussion of erase *.* in the Usage notes.
-
- Alas, DOS tends to issue int 16 calls while it loads programs so
- that it will eat WRs. You may want to find a harmless keystroke like
- Backspace and try
- stackey BS WR ....
- when loading a program.
-
-
- III.6 Hotkeys
-
- STACKEY provides four hotkeys to enable you to communicate
- with it from within application. Since you can change what keys
- call them, we give a table which includes their two letter code and
- function:
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION Page 40
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- Code Function Default
- ────────────────────────────────────
- H! Flush buffer AL "!"
- H* Flush scan AL G*
- H- Pause script AL G-
- H+ Resume script AL G+
-
- H! flushes the stackey and BIOS buffers, H* only has an effect when
- processing has stopped because of a scan (SC), a silent scan (SS), a
- keyboard scan (WS) as described in the next section or an H- pause.
- It flushes the scan command from the buffer and resumes operation on
- the next "keystroke". H+ resumes playback of a script that has been
- paused by an H- or by the WH command that we'll discuss in the next
- section. Pause here just means stopping the background STACKEY
- playback; your foreground program will continue to run.
-
- The actual hotkeys that cause an action are described by two
- pieces of data: the required shift pattern given as a subset of ACLR
- (see the description of the SH command in Section II.7) and a key.
- The key is described by one of the following:
- a one character string in quotes like "a", "A" or "+"
- the following two character code that invokes normal STACKEY
- keystrokes:
- F1,...,F0,F-,F=, SQ, DQ, N* or G*, N+ or G+, N- or G-,
- PS, N0,...,N9, CR, UA, DA, LA, RA, ES, BS, DE, IN,
- PD, PU, TB, TA, EN, HM
- special two character codes for this purpose only: CL for
- CapsLock, SL for ScrollLock, NL for NumLock and SR for
- SysReq
- STACKEY then uses the key associated to that single stroke and
- combines it with the given shift combination. Thus "A" and "a" are
- the same for this purpose and PU and N9 are also the same. Thus to
- say that AL "!" is the default hotkey for H! means that the buffer
- is flushed by pressing Alt+LShift+the key marked 1/!. This is the
- same as AL "1".
-
- You can change the hotkeys in STACKEY at any time including
- the initial loading by using the syntax
- stackey HX(YY,Z)
- where X is one of !,*,+ or -, YY is a subset of CALR and Z a key
- indicator. For example, H+(CL,"+") would make Ctrl+LShift+top row
- plus the combination to resume playback, H!(,SR) would make the
- unshifted SysReq key flush the buffer and the following would
- restore all hotkeys to their defaults if you changed them
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION Page 41
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- stackey H!(AL,"!") H*(AL,G*) H+(AL,G+) H-(AL,G-)
-
- STACKEY uses int 9 to interpret hotkeys, that is, it directly
- reads the keyboard. Thus you cannot include STACKEY hotkeys in
- keyboard macros and if you have used a mapping program and changed
- keytops, you'll probably find that STACKEY calls the original "A"
- key "a" and not the mapped key to which you've transferred the "A"
- keytop.
-
- STACKEY traps its hotkeys and does not pass them on.
-
- Alas, most keyboards other than IBM keyboards have some
- combinations of multiple shifts plus letters which are dead
- combinations in that the keyboard will not issue any interrupt in
- response to them. In particular, on some Northgate keyboards, the
- AL! default flush combination is dead.
-
-
- III.7 Pauses for keystrokes
-
- STACKEY will pause its playback (while not affecting the
- foreground program) until a particular key is struck with three
- different commands:
- WK waits for any key to be struck or released
- WH waits for the H+ hotkey to be hit; this is the same as
- hitting the H- hotkey
- WS(XX,Y) waits and scans the keyboard for a particular
- combination
- The keyboard scan uses the same conventions as hotkeys so that
- stackey WS(L,"a")"hello"
- will pause stackey playback until LShift+"a" is struck. The
- hotkeys are eaten by STACKEY and not passed on to the underlying
- application program.
-
-
- III.8 Multiple STACKEY commands
-
- If you are just stacking keystrokes, you can place strokes on
- more than one line of a BATch file; that is there is no difference
- in the effect of
- stackey "hello there"
- and
- stackey "hello "
- stackey "there"
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION Page 42
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- or even
- stackey "hello ther"
- stackey "e"
- Thus you can use separate lines for more readability or to overcome
- the length of DOS lines. Of course with two commands, stackey will
- load twice but it is so small that even on a floppy based system,
- it should be in DOS' buffers and that won't slow things down. On a
- floppy based system, extra lines in a BATch file will slow things
- down.
-
- Because utilities mode commands are processed in real time,
- there is a subtle difference between how multiple lines are
- processed when there are utilities commands on the second line but
- for virtually all situations this distinction won't matter. Here
- is a special situation where it will: You start on a monochrome
- monitor on a dual monitor system and issue
- stackey L4 {mon=c}
- and the monitor switch will take place before the color change. But
- with
- stackey L4
- stackey {mon=c}
- the attempted color change takes place before switching monitors
- and so have no effect. Of course if you want to use two lines just
- reverse the order!
-
-
- III.9 Patient, impatient and smart processing
- STACKEY must cope with the fact that BIOS only provides a
- keyboard buffer of 15 strokes. You may have software which
- enlarges this buffer for your actual typing but STACKEY cannot know
- about this. Thus STACKEY keeps its own internal buffer. When
- there are keystrokes waiting in this buffer, STACKEY checks 18.2
- times a second to see the state of BIOS' buffer. Depending on the
- command and the mode you set, STACKEY will either check to see if
- the buffer is empty before placing any strokes in or will at least
- check whether there is room before placing strokes in. STACKEY's
- inpatient mode, places as many strokes in the buffer as will fit.
- Its patient mode will place no strokes in the buffer unless the
- BIOS buffer is completely empty in which case only one stroke or
- command will be acted upon.
-
- STACKEY, by default, treats keystrokes impatiently while
- treating certain commands patiently, i.e. not implementing them
- until BIOS' stack is empty. A typical example is a color change.
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION Page 43
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- Temporary color changes are wiped out by a change of video mode so,
- if you are loading a program which switches into graphics mode, you
- want to be sure that the colors do not change until after the
- program has loaded and changed modes. You can do this by
- experimenting with delay length, but if you also want to send
- keystrokes to the program, the default processing method is better.
- By preceding the color change command with some keystrokes, you can
- be sure that the color command will not be acted upon until the
- application program has loaded and no delay is necessary. We call
- this default mode smart processing.
-
- Smart processing effects the following commands which are all
- discussed in later chapters: Ln,Pn,+/-B and [...] (but not
- commands that change permanent palettes, i.e. [#...] commands). It
- also effects the PS command discussed in the last chapter (PrtSc).
- The Wn delay command is always handled smartly whether or not you
- have turned smart processing on or not.
-
- There are times that you will NOT want smart processing. For
- example, in the demonstration BATch files CGACOLOR.BAT and
- COLOR.BAT, there are commands to change colors for illustration
- purposes. If smart processing were in effect, the color changes
- would stop if the user happens to hit a key by mistake. For this
- reason there are commands to force impatient processing for all
- situations except Wnn commands and to turn smart processing back
- on.
- stackey /i/
- turns impatient processing on and
- stackey /s/
- turns smart processing back on. The /i/ and /s/ must be the first
- thing on the line and we urge you to take this change seriously by
- placing only this single command on a line. Either S or s and
- either I or i are allowed. S obviously stands for smart; I stands
- for idiotic or impatient but not for intelligent.
-
- Delays (the W command) are always treated patiently even if
- impatient mode is on. If you are in a situation where you wish
- that the Wn command were impatient, you may find that the {wait=n}
- command is what you want.
-
- When smart processing is turned off, color commands are acted
- on as soon as they are reached. This may not be immediately if
- BIOS' buffer completely fills and there are keystrokes ahead of the
- color command waiting to be put into BIOS' buffer.
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION Page 44
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- Patient mode where all keystrokes are treated patiently is
- turned on with
- stackey /p/
- Since it slows down keystroke entry to only 18 per second (not much
- better than a good typist), you'll only want to use it under
- special circumstances. Here is a typical example: the shareware
- fancy printing program BRADFORD opens by asking you the name of the
- file that you want to print followed by several questions about
- settings that you'll probably want to always answer the same way.
- This is clearly a place to use STACKEY in a BATch file with %1 as
- part of the stacked material (to be replaced by the file name).
- Alas, BRADFORD completely flushes BIOS' buffer before reading each
- and every keystroke so if STACKEY were in smart mode, all the
- strokes that you carefully arranged to have entered would be
- flushed! But patient mode works beautifully - you need to do
- something so that the first stroke isn't entered too soon. One
- could experiment with Wnn's but here PH works fine so the BATch
- file might read:
- stackey /p/ PH"%1"CR <more stuff>
- bradford
- stackey /s/
-
- III.10 Flushing and Quitting
-
- As long as there is room in STACKEY's internal buffer, you
- can stack additional keystrokes with a second STACKEY command, as
- we explained above. If you enter a ! in a STACKEY command line,
- then STACKEY will flush its buffer, i.e. clear it and reset its
- internal pointer to the bottom of the stack. It will also flush
- BIOS' buffer. If you have an extended buffer provided by some
- other program, STACKEY will not flush that.
-
- Thus, the BATch file:
- stackey "abcdefghij1234567890"
- stackey !
- will display nothing on the screen when it is over.
-
- If STACKEY finds an ! on its command line, the interpreter
- continues processing after flushing the buffer so you may place
- other commands on the line following a !.
-
- If STACKEY finds a ; (lower case only) in its command line,
- it will quit interpreting the command line at that point. This is
- to allow you to place comments in your BATch files. Semi-colons
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION Page 45
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- inside {} or [] are interpreted as delimiters and not as comment
- indicators.
-
-
- III.11 Enlarging the Buffer
-
- STACKEY will use a default buffer allowing 128 keystrokes to
- be stacked. The first time that STACKEY is loaded, you can tell it
- to set aside a larger buffer by including the letter B (or b;
- stands for Buffer) and the buffer size in number of strokes
- between slashes so
- stackey /B2000/"hello there"
- as an initial command would set aside a 2000 stroke buffer and then
- stack "hello there" in that buffer. Any number between 1 and 10000
- is allowed for the buffer size. The size is given in keystrokes;
- each keystroke requires two bytes of resident memory so a buffer
- size of 2128 would increase the amount of RAM taken by the
- resident portion of STACKEY by 4000 bytes. If you need more than 10000
- keystrokes or want to load STACKEY in high DOS memory, use the SKRES
- program described in the next section.
-
- Once STACKEY is loaded it cannot change the size of the
- buffer in the loaded copy. Further calls to STACKEY find the
- resident copy and use it and do not load another copy. If a copy
- is loaded and /Bxxxx/ appears on the command line, you will get an
- error message. You can however choose to load a new copy of
- STACKEY with any buffer size you want. The old copy remains in
- memory but will be unused; STACKEY always finds the last copy
- loaded in memory. You tell STACKEY to load a new copy by placing
- an R (or r; stands for Reload) after the first / in the buffer
- size command so
- stackey /R2000/"hello there"
- will load a new copy of STACKEY with a 2000 stroke buffer. Even if
- STACKEY has not already been loaded, you can load it with the
- /R.../ command.
-
- Both the /B.../ and the /R.../ commands must be the first
- thing on the command line after the name STACKEY; this is also true
- of the other /.../ commands that we will describe. You cannot
- place more than one set of /'s on a line. However, you can place
- multiple /../ commands within one set of brackets such as
- stackey /R2000 T I/
- which would load a new copy and turn on testing mode and off smart
- mode in this new copy (of course, stackey /T I R2000/ will first
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION Page 46
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- change the modes in the old copy and then load the new copy,
- probably not what you wanted).
-
- If STACKEY cannot fit the characters on the command line into
- it internal buffer, it prints an error message, showing you where
- the overflow occurs, beeps and places NO new characters in the
- buffer. The beep is sent to standard output and so it may be
- redirected to nul. The errorlevel is set to 2. In the default
- setting STACKEY will also flush the buffer when there is an error;
- see the discussion of continue mode below.
-
-
- III.12 The SKRES program
-
- A separate program is provided whose sole purpose is to load
- STACKEY the first time. It does not do additional command line
- processing so that you cannot include your first set of STACKEY
- commands. It is intended for use in two circumstances: when you want a
- buffer larger than 10,000 keystrokes and when loading in a small area
- of high DOS memory.
-
- STACKEY itself will only load with a buffer of up to 10,000
- keystrokes (20,000 bytes). SKRES allows up to 30,000 keystrokes
- (60,000 bytes). If you wonder how one could want a buffer over
- 10,000 strokes, so do we but we received the request from some
- users with large FILEKEY scripts. The syntax is identical to that
- for STACKEY so that, for example
- skres /B30000/
- would load with the maximal buffer size.
-
- Users of 386max, QEMM, Move 'em, QRAM and other programs that
- let you load TSRs into nooks and crannies of free address space in
- the region between 640K and 1 meg, often want to load STACKEY into
- a small space. Even though STACKEY's resident part takes under
- 1.3K, loading the program and initializing it takes over 23K and
- you'll need that much free to load STACKEY. SKRES leaves out the
- interpreter precisely to make it as small as possible so we
- recommend using it if you wish to load STACKEY's resident part into
- high memory. If skres is used, the only allowed command on its
- command line is /Bxxxx/.
-
-
-
-
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION Page 47
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- III.13 Test mode
-
- STACKEY is a powerful program. For that reason, especially
- while debugging a BATch file, you may want to abort a BATch file
- after STACKEY displays an error message. STACKEY has a special
- "test mode" which you invoke with
- stackey /T/
- Whenever, STACKEY issues an error message, it checks whether test
- mode is on. If it is, it will pause processing of the BATch file
- and issue the message
- STACKEY: Abort (Y/N)?
- If you answer Y, STACKEY will place a ^C in BIOS' buffer which will
- normally cause the BATch file to ask
- Terminate batch job (Y/N)?
- and Y will stop the BATch file. This message from STACKEY cannot
- be redirected.
-
- To be sure that you are the one to answer the Abort message,
- STACKEY flushes both BIOS' buffer and its own.
-
- To turn off test mode and restore normal processing issue
- stackey /N/
- Some users may prefer to always use test mode.
-
- While /N/ and /T/ need only be the first commands on the
- line, we suggest that you make them the only commands on the line.
-
- In order for ^C to stop the BATch file and ask "Terminate
- batch job (Y/N)?", you must have Break on. For this reason, if
- STACKEY is in testing mode, you respond Y to "STACKEY: Abort
- (Y/N)?" and Break is off, STACKEY will turn Break on and tell you
- that it has done so.
-
-
- III.14 Continue mode
-
- If there is an error in STACKEY's command line but there are
- keystrokes pending then STACKEY, by default, assumes that you want
- the current processing aborted and it flushes both its buffer and
- BIOS' buffer. If for some reason, you don't want this done, you
- can issue the command
- stackey /c/
- (C or c for continue). To restore the default setting use
- stackey /d/
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION Page 48
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- (D or d for discontinue). When continue mode is on, not only will
- what is in STACKEY's buffer at the time of the erroneous line still
- be processed but the parts of the line up to the error are also
- processed.
-
- If test mode is on, STACKEY flushes the buffer automatically
- before displaying its "Abort(Y/N)?" message; thus, if testing mode
- is on, the setting of C/D will be overridden.
-
-
- III.15 Pushing, popping and querying the flags
-
- STACKEY uses several flags to keep track of the current state
- of the following toggles: Normal vs. Test mode, Smart vs. Impatient
- vs Patient processing, Continue vs. Discontinue on error. You can
- save this combined state and the with
- stackey /u/
- and restore from the last command of this type with
- stackey /o/
- These commands pUsh and pOp the STACKEY flags. The initial value
- of the pushed flags is the default and only one set is pushed so
- that popping does not change the pushed values.
-
- These commands are included for you to employ if you make
- demonstration BATch files with STACKEY. You may want to turn off
- smart processing but you can't just restore smart processing since
- the user may have turned it off. As a courtesy, if you are making
- demonstration BATch files to be used by others and you change the
- STACKEY flags, please push them at the start and pop them at the
- end. Since we can find no reason for you to change the hotkeys, we
- don't save their state in a push. If you want to use a WH command
- but are unsure what to tell the user to push to resume, use WS
- instead.
-
- At any time, the command
- stackey /?/
- will send the version number, the current values of the STACKEY
- flags, the four current hotkeys and the buffer size of the active
- copy to standard output. The state of the hotkeys output takes the
- form
- Hotkeys H!, H*, H+, H- are: (LA,"!") (LA,n*) (LA,n+) (LA,n-)
- where the indication is (set of shifts, keyname). Be forewarned
- that one particular keyname is picked when there are several e.g.
- TB rather than TA.
-
-
- Chapter III:COMMANDS TO THE RESIDENT PORTION Page 49
-
-
-
-
- Chapter IV:SETTING COLORS
-
- IV.1 Color Basics: Introduction
-
- Color monitors on an IBM PC provide graphics as well as
- colors but unfortunately the attitude of the authors of many
- graphics programs seems to be that you can have any two colors you
- want so long as you want white on black. STACKEY has tools which
- allow you to set colors on a color monitor even for programs that
- set no colors or set colors that you don't like. There are
- separate tools for the IBM Color Graphics Adapter (CGA) and the
- Enhanced Graphics Adapter (EGA). The EGA compatible modes of the
- VGA are supported but the new 256 color VGA modes are not supported.
- CGA users should read through the section on SETTING COLORS ON THE CGA
- and can then skip to the next chapter. EGA users can skip the section
- on SETTING COLORS ON THE CGA but should read all the sections on color
- basics. Special support is provided for users of Ultravision.
-
-
- IV.2 Color Basics: Graphics modes
-
- The amount of color you can have depends not only on the
- adapter but also on the particular mode. The CGA supports
- essentially three modes:
- Text mode (mode 3 for 80 columns)
- CGA Medium Resolution mode (mode 4)
- CGA High Resolution mode (mode 6)
- Mode 3 allows 16 background colors and (normally) 8 foreground
- colors. Mode 4 has a resolution of 320x200 and allows four colors,
- a background color which can be from among 16 possible choices and
- one of two palettes of three colors. Mode 6 has a resolution of
- 640x200 and two colors, a black background and a foreground chosen
- from among 16 choices.
-
- The EGA supports two additional modes:
- EGA medium resolution (mode 14)
- EGA high resolution (mode 16)
- Each mode is a sixteen color mode (at least if your EGA card has a
- full 256K of memory). Mode 14 has resolution of 640x200 just like
- mode 6 (so why use mode 6? Simple, if you're the programmer; you
- can write one program for the CGA and the EGA. If you're the user,
- there is no reason to want mode 6 over mode 14 except if you like
- programs written by lazy programmers!). Mode 16 has the full
- 640x350 resolution supported by the EGA.
-
- The VGA supports two modes more than the EGA:
- 256 color medium resolution (mode 19)
-
-
- Chapter IV:SETTING COLORS page 50
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- VGA high resolution (mode 18)
- VGA high resolution is 640x480. Mode 19 is much lower resolution
- (320x200) but has 256 colors out of a palette of 262,144 rather
- than the 16 colors out of 64 allowed by the EGA or the other VGA
- modes. There is a tradeoff between number of colors and apparent
- resolution. Television makers have known for a long time that many
- colors can fool the viewer into thinking the resolution is higher
- than it actually is. Even though it is low resolution, graphics in
- mode 19 can be quite striking.
-
- Various so called superVGA cards, most notably those from
- Paradise and Video7 support 800x600 resolution and 256 colors with
- 640x480. Alas there is not yet a common standard so STACKEY does not
- have support for these superVGA modes.
-
- Actually, we have not included in this discussion the 40
- column text mode (mode 1 supported on the CGA and the EGA) nor the
- 16 color 320x200 EGA mode (mode 13) nor the two color graphic
- modes 15 and 17 which are rarely used.
-
- If you have the full 256K memory and an enhanced color
- display, you can choose these 16 colors from among an array of 64.
- Of this, more later.
-
- Borders further complicate the possibilities. The CGA allows
- a border in text mode. While the EGA does also, the only
- description of the text mode border is wimpy. In mode 4 on the
- CGA, the border is the same color as the background. On the EGA,
- you can specify a border color differently from the background and
- it is a full border. The same is true in mode 14.
-
- It is important to realize that a mode change will reset the
- colors to their default values (this is not always quite true on
- the EGA/VGA; see the discussion of permanent colors later).
-
-
- IV.3 Color Basics: CGA color choices
-
- The sixteen colors on the CGA are numbered as follows:
- 0(0H) Black 8(8H)I Dark Grey
- 1(1H) B Blue 9(9H)I B Intense Blue
- 2(2H) G Green 10(AH)I G Intense Green
- 3(3H) GB Cyan 11(BH)I GB Intense Cyan
- 4(4H) R Red 12(CH)IR Intense Red
-
-
- Chapter IV:SETTING COLORS page 51
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- 5(5H) R B Magenta 13(DH)IR B Intense Magenta
- 6(6H) RG Brown 14(EH)IRG Yellow
- 7(7H) RGB Light Grey 15(FH)IRGB White
- After the decimal number, we give its hex value. The
- letters I,R,G,B describe the color in terms of 4 basic on/off
- switches determining the color: the Intensity, Red, Green and Blue
- switches. Thus cyan is a mix of Green and Blue. The intensity bit
- is a misnomer in that Dark Grey is not what one would think of as
- "Intense Black"; I is really a brightness and so an intenseness of
- light. There is a connection between the IRGB switches and the
- color number. If B has the value 1, G the value 2, R the value 4
- and I the value 8, then the CGA color value is arrived at by adding
- the values of the switches that are on. Thus intense magenta which
- is IRB is color number 8+4+1=13.
-
-
- IV.4 Setting colors on the CGA
-
- CGA colors are set using STACKEY with two commands the L (for
- coLor) and the P for Palette command. The P command only has effect
- in mode 4 (CGA medium resolution graphics) while the L command has a
- effect in any mode. It is IMPORTANT that the color command only get
- issued by STACKEY after the mode has changed and to do this you may
- have to add waits and experiment with their lengths. For example,
- if you load a program which switches to mode 4 and want a red
- background, the command
- stackey L4
- in a BATch file immediately before the line loading the program
- will not work. Rather, the L4 command will get issued by the
- resident portion of STACKEY immediately and change the border to
- red while you are still in text mode. The graphics program will
- then load and change modes thereby wiping out the color change you
- issued. Instead, you should try
- stackey W36L4
- which will tell the resident portion of STACKEY to wait roughly 2
- seconds before issuing the color change command. While this wait
- is going on, control will be passed to the application which can
- load and change modes. If the W36 is a long enough wait, the color
- change will only take effect after the application program has
- changed modes. But you will have to experiment to see how long a
- wait you need to put in.
-
- If you are also stacking keystrokes which will only be
- processed by the application program after it changes modes, you do
-
-
- Chapter IV:SETTING COLORS page 52
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- not need to stack a wait, for STACKEY only acts on the L command if
- the keyboard buffer is empty, that is if there are no strokes
- waiting for a program to process. Even if you don't want to stack
- keystrokes, it may be easier to stack a harmless keystroke (like
- backspace) rather than experiment with delays of appropriate length.
- Depending on the program, you may be able to use PH or WR as the
- harmless keystroke. In BATch files, you may want to turn smart
- processing (reading the buffer to check that it is empty before issuing
- a color command) off using the /i/ command discussed in Chapter III.
- Be sure to turn smart processing back on with /s/.
-
- What the coLor command does depends on mode:
- In text mode (modes 1 and 3) Ln sets the border color to n
- In medium resolution mode (mode 4) Ln sets the background to
- color n
- In high resolution node (mode 6) Ln sets the foreground color
- to color n
-
- If this choice seems odd, it is essentially the single
- globally chosen color available in each mode. Each mode allows 16
- choices for n. STACKEY will accept any integer value and compute n
- modulo 16. The demonstration BATch file CGACOLOR.BAT will
- illustrate the abilities of STACKEY on the CGA.
-
- The medium resolution mode on the CGA (mode 4) is a four
- color mode. In addition to the background color, there is a choice
- of one of two palettes:
- Palette 0: green, red, brown (color numbers 2,4,6)
- Palette 1: cyan, magenta, grey (color numbers 3,5,7)
- The default is palette 1. You can change palettes with the P
- command. Pn will change to palette n where n must be 0 or 1. Like
- the L command, when smart processing is on, STACKEY will wait for
- an empty buffer before implementing the palette change.
-
- Example: To change to palette 0 on a red background, just
- before loading a program changing to mode 4 issue
- stackey W36L4P0
-
- Unfortunately, if you set colors for graphics mode with
- STACKEY and then call up a resident program that works in text mode
- like SIDEKICK (TM), when the resident program exits and you return
- to graphics mode, you will have lost your color settings. CTRLALT
- PLUS enables you to reset these color settings.
-
-
-
- Chapter IV:SETTING COLORS page 53
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- IV.5 Color Basics: EGA color slots and palettes
-
- The EGA/VGA carries color setting a step further than on the
- CGA. The graphics modes special to the EGA and also the normal
- text mode are capable of showing 16 colors but those 16 colors can
- be chosen from among 64 in modes 3 and 16. Thus the 16 choices
- should be viewed as "color slots". Into each slot, one can map any
- one of the 64. In the default situation, the color slots are
- filled by colors identical to the ones on the CGA but with suitable
- software (like STACKEY!), the user can change the assignment of
- colors to slots. Such an assignment is called a palette.
- Sometimes what we are calling color slots are called palette
- numbers and the numbers we will call color labels are called
- palette parameters.
-
- The total number of palettes is approximately 8 times 10
- raised to 28th power. To appreciate how large this number is, we
- note that if every PC in the world were equipped with an EGA and
- could check out a billion distinct possibilities each second, it
- would takes millions of years to complete the exploration of all
- the palettes.
-
-
- IV.6 Color Basics: EGA color labelling
-
- Each individual color among the 64 is gotten by blending a
- level of red, green and blue. Each primary color can be mixed in
- at one of 4 levels (so 64=4x4x4). Alternatively, one thinks of a
- strong red bit and a weak red bit whose presence are indicated R
- and r. Thus, the four levels of red are none, r, R and Rr.
- Similarly, there is no blue, b, B, Bb and no green, g, G and Gg.
- Each color can be associated to a mixture of the six letters rRgGbB
- and is assigned a number by using the following values:
- B=1,G=2,R=4,b=8,g=16,r=32
- Thus, for example Rg has the value 4+16=20. With one exception,
- the default colors are taken by looking at the CGA IRGB labels and
- replacing I by rgb. The exception is brown in color slot 6 which
- is RG in CGA and translates to Rg in EGA.
-
-
-
-
-
-
-
-
- Chapter IV:SETTING COLORS page 54
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- To help you in exploring the colors, we have attempted to
- give them names:
-
- 0(00H) black* 32(20H) r faint red
- 1(01H) B blue* 33(21H) r B looks blue to me
- 2(02H) G green* 34(22H) rG looks green to me
- 3(03H) G B cyan* 35(23H) rG B looks cyan to me
- 4(04H)R red* 36(24H)Rr bright red
- 5(05H)R B magenta* 37(25H)Rr B hot pink
- 6(06H)R G pea green 38(26H)RrG orange
- 7(07H)R G B grey* 39(27H)RrG B flesh pink
- 8(08H) b navy blue 40(28H) r b royal purple
- 9(09H) Bb bright blue 41(29H) r Bb looks bright blue to me
- 10(0AH) G b glade green 42(2AH) rG b looks glade green to me
- 11(0BH) G Bb powder blue 43(2BH) rG Bb looks powder blue to me
- 12(0CH)R b maroon 44(2CH)Rr b lox (smoked salmon)
- 13(0DH)R Bb lilac 45(2DH)Rr Bb bright lilac
- 14(0EH)R G b khaki 46(2EH)RrG b peach
- 15(0FH)R G Bb blue grey 47(2FH)RrG Bb light lilac
- 16(10H) g forest green 48(30H) r g looks forest green to me
- 17(11H) gB steel blue 49(31H) r gB looks steel blue to me
- 18(12H) Gg bright green 50(32H) rGg looks bright green to me
- 19(13H) GgB cyan green 51(33H) rGgB looks cyan green to me
- 20(14H)R g brown* 52(34H)Rr g vermilion (red orange)
- 21(15H)R gB lavender 53(35H)Rr gB pale hot pink
- 22(16H)R Gg lime green 54(36H)RrGg canary yellow
- 23(17H)R GgB bright cyan green 55(37H)RrGgB cream
- 24(18H) g b steel grey 56(38H) r g b dark grey*
- 25(19H) gBb cyanic blue 57(39H) r gBb intense blue*
- 26(1AH) Gg b intense cyan green58(3AH) rGg b intense green*
- 27(1BH) GgBb bright cyan 59(3BH) rGgBb intense cyan*
- 28(1CH)R g b chocolate brown 60(3CH)Rr g b intense red*
- 29(1DH)R gBb bright lilac 61(3DH)Rr gBb intense magenta*
- 30(1EH)R Gg b bright lime green 62(3EH)RrGg b yellow*
- 31(1FH)R GgBb bright cyan 63(3FH)RrGgBb white*
-
- The default colors are indicated with a *. We feel that the
- tolerable choices for background colors include blue(1), maroon
- (12), steel grey (24) and forest green (16). Particularly
- interesting colors include chocolate brown (28), hot pink (37),
- orange (38), lox (44), peach (46) and vermilion (52). Among the
- combinations we like for text in graphics mode are cream on maroon
- (55 on 12) and bright cyan on blue (27 on 1). The demonstration
- BATch files color.bat and seecolor.bat, described later allow you
-
-
- Chapter IV:SETTING COLORS page 55
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- to explore the EGA color combinations. They require an EGA or VGA
- connected to an Enhanced Color Display or VGA monitor or equivalent.
-
- A palette on the EGA is thus the assignment to each color
- slot of one of the 64 color values. This is also called a color
- mapping. If you have mapped blue into the slot normally occupied
- by black and yellow into the slot normally occupied by grey, your
- dumb program will think it is displaying vibrant grey on black for
- you but you'll see yellow on blue. Later we'll see how to make
- this kind of mapping with STACKEY. While color mapping is possible
- in modes 4,6 and 14, you don't have 64 colors to choose from and
- the g and b parameters have no effect on colors in those modes.
-
-
- IV.7 Color Basics: EGA borders
-
- In addition to the sixteen colors that you can display on the
- EGA (in modes 3,13,14,16), there is a choice of border color. While
- in principle you can set a border in any mode, the border in the
- 350 line modes (modes 1,3,16) is so wimpy, you won't want to use
- it. But the border is a full one in modes 4,6,13,14. Unlike the
- CGA which forces the same color for background and border in mode
- 4, the EGA allows these colors to be different. The technical name
- for the border is overscan and the corresponding slot is called the
- "overscan byte".
-
-
- IV.8 Color Basics: EGA hardware considerations
-
- All our discussion has been for the EGA with 256K attached to
- an enhanced color display or equivalent. There are some
- differences if you have less memory or an ordinary color monitor
- attached to your system. With 64K on your EGA, even with an ECD
- you can only display four colors from a set of 16 in mode 16 (high
- res EGA graphics). The available slots are 0,1,4,7.
-
- An ordinary color monitor attached to an EGA does not support
- mode 16 and does not support any colors but the standard 16. We
- believe that color mapping is possible with this setup but have not
- tested it out.
-
- There is unfortunately quite a bit of variation between hues
- on different sets of the same hardware and even greater variation
- if you are using an ECD clone rather than the IBM version. In
-
-
- Chapter IV:SETTING COLORS page 56
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- particular, colors 33 and 1 will look exactly alike on some
- machines and at least slightly different on others.
-
- IV.9 Setting colors on the EGA or VGA
-
- STACKEY lets you make an arbitrary mapping of colors to color
- slots. The syntax is to place the color commands inside []. The
- command
- stackey []
- resets the palettes to the default. Otherwise inside [], use c=nn
- where c is either a number from 0 to 15 and represents the color
- slot or the letter o (or cap O) if you want to change the overscan
- byte. nn can either be a number from 0 to 63 or a string of up to
- six characters from rRgGbB. Thus
- stackey [0=62]
- and
- stackey [0=RrGgb]
- do the same thing, namely place yellow in color slot zero.
-
- As is the case for delays and CGA colors, the [] command will
- only be implemented when there is an empty keyboard buffer. This
- means that if you are also placing keystrokes in the buffer which
- will only be absorbed after your application loads and changes
- mode, you need not (and should not) place a wait in the command
- line. For special situations you may want to turn this smart
- processing on and off with the /p/, /s/ and /i/ commands discussed
- in Chapter III.
-
- If you do not have an EGA or VGA installed and attached to a
- color monitor, then STACKEY will issue an error message if any
- command with a [ is attempted.
-
- Several changes separated by commas, spaces or semicolons can
- be used inside a single pair of brackets.
-
- Example: It's Halloween so you want black on orange in text
- mode. Normally your colors are the default grey on black (shame on
- you!). Enter
- stackey [0=38,7=0]
-
- Example: You want to call up REFLEX 1.0 on the EGA from a BATch
- file REFL.BAT which first of all loads a file specified on the command
- line (normally, you'd have to hit / for menu, p for print/file submenu,
- r for read, enter the file name and hit <Enter> twice). You also want
-
-
- Chapter IV:SETTING COLORS page 57
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- to change REFLEX's default colors (white on black, shame on BORLAND;
- colors have been fixed in Reflex 2.0 - hooray for Borland) to cream on
- maroon. Your BATch file should read:
- echo off
- cls
- C:
- cd\reflex
- stackey "/pr%1"CRCR[0=12,15=55]
- reflex
- Probably you should include special handling if %1 is the empty
- variable. If you were not placing keystrokes in the buffer, it
- would be essential to put a delay in such as
- stackey W150[0=12,15=55]
- to make sure that REFLEX has changed modes before the color change
- command takes effect. With a stroke in the buffer, the color
- change is only implemented after REFLEX loads and processes those
- strokes. If you have turned off smart processing, then waits will
- be necessary.
-
- Example: Your colors are normally yellow on blue set with
- your prompt. You want to have bright blue on lilac for text today.
- Use
- stackey [1=RBb,14=Bb]
- (We don't particularly like this combination, mind you).
-
- Example: You want to call up a program using mode 6 graphics
- and want a cyanic blue border and blue on cyan text area. Use
- stackey [o=gBb,0=BG,1=B]
- Yes, it is 1=B and not 7=B. The foreground in mode 6 is color slot
- 1 even though it defaults to grey. Similarly, the foreground in
- mode 4 defaults to color slot 3.
-
- Note for users of Ultravision: In order for the temporary
- palette commands to work, if you have Ultravision installed and
- call for a [] color change, then STACKEY will turn off Ultravision
- palette locking and you will not be able to set colors with
- Ultravision without turning it back on either with a [#U..] command
- (see the next section) or from the Ultravision main menu. CTRLALT
- PLUS' resident palette setting will only work if Ultravision's
- palette locking is turned off.
-
-
-
-
-
-
- Chapter IV:SETTING COLORS page 58
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- IV.10 Setting permanent colors on the EGA/VGA
-
- Every time the mode is changed the colors get reset by the
- EGA/VGA to their default value. A mechanism is provided to change
- the default values to which they are reset. These changes are made
- only for the current session on your computer. The values are
- changed to their "real" defaults whenever you reboot.
- Nevertheless, since the choices do persist through mode changes
- they are called permanent. Unfortunately, the place where these
- permanent palettes are kept is in ROM where they cannot be changed
- by the user or any program! It is possible to set aside a region
- of RAM which is read instead of ROM for permanent color changes.
- Once the permanent colors are stored there, it is possible to have
- a program that changes them. As we will describe in Chapter VII,
- the programs EGAPAL and VGAPAL set up such a region in RAM.
- STACKEY's permanent palette setting only works with one of these
- programs or with Ultravision.
-
- The syntax is
- stackey [#m,c=nn]
- where m is the mode number in decimal. Thus to arrange that mode
- 16 always comes up with black mapped to maroon and white to cream
- use
- stackey [#16,0=12,15=55]
- As usual, the comma can be replaced by spaces or semicolons. You can
- change the permanent colors back to the default by using
- stackey [#m]
- If you replace m by A, STACKEY will make the changes to all
- palettes and, in particular
- stackey [#A]
- resets all the permanent palettes. Acceptable values of m are
- 1,3,4,6,13,14,16 and A. Any other value, or an attempt to use this
- service without an EGA or VGA will result in the error message:
- VGAPAL is not installed
- on a VGA and similarly on an EGA.
-
- On an EGA, separate palettes are kept for each mode. Only
- one #n is allowed within a single bracket.
-
- On a VGA only a single palette is kept. You can set the
- palette for multiple modes with multiple uses of # sign as in
- [#3 #16 1=4,2=13]
-
-
-
-
- Chapter IV:SETTING COLORS page 59
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- If Ultravision is installed, you will get an error message if
- you try to use [#n..] or [#A..]. Instead you need to use [#U..] or
- [#T..]. This tells STACKEY to turn on Ultravision's palette locking
- and set its palette. The difference between the two ultravision
- commands is that #T turns on Ultravision's palette locking only in
- text mode while #U turns it on in all modes.
-
- The color slot and color label must appear on either side of
- the equal sign with no spaces allowed. Between different color
- settings in a multiple setting command you must place a delimiter
- (comma, semicolon or space).
-
- The permanent changes are made in "real time", that is as
- soon that part of the STACKEY command line is interpreted. Thus
- they are not postponed by previous delays (the Wn) command although
- they are postponed by waits (the {Wait n} command). In particular,
- permanent palette changes are not delayed until there is an empty
- buffer as is the case with temporary color changes when smart
- processing is turned on (the default).
-
- You may not stack both temporary and permanent changes in
- the same bracket. Permanent changes can only be made if # is the
- first symbol immediately following [. A delimiter (comma,
- semicolon or space) must separate the color slot numbers. While
- you cannot place permanent and temporary changes inside of the same
- set of [], there is no reason that you can't place more than one
- set of [] on one command line with some temporary changes in one []
- and some permanent changes in the other.
-
- Color palettes made "permanent" will be properly restored by
- your popup programs when they exit.
-
- IV.11 Controlling the blinking bit
-
- As we explained, in text mode, you have 16 foreground colors
- but only 8 background colors. Each cell on the 80x25 screen has a
- full byte describing its "attributes" so there is enough room to
- describe 16 foreground and 16 background colors but instead, by
- default, the bit that would naturally describe the intensity of
- background instead describes whether the foreground is blinking.
- One can program the EGA or VGA to suppress blinking and instead display
- the full 16 background colors. The command
- stackey -B
- turns off the blinking choice and turns on the 16 background color
-
-
- Chapter IV:SETTING COLORS page 60
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- mode while the command
- stackey +B
- turns blinking back on and reverts to the 8 background color mode.
- These commands only have an effect on text modes. Like the L,P and
- temporary [] commands, the +/-B commands are subject to smart
- processing.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter IV:SETTING COLORS page 61
-
-
-
-
- Chapter V:UTILITIES MODE
-
-
- V.1 Overview of Utilities Mode
-
- STACKEY offers a command line utility mode that should allow
- you to replace lots of little utilities that you might have. In a
- sense, these utilities are completely independent of STACKEY's key
- stacking function. The commonality of the two modes is that they
- are both naturally callable from BATch files or from CED synonyms
- and a commonality of some parts of syntax. However, it is possible
- to use the utilities without loading the resident portion of STACKEY
- if you wish. Stackey's send mode (Section II.12) is really a
- utility since it doesn't use the resident part of STACKEY; however,
- there is no way to use it without loading the resident portion.
-
- Utilities are called from the STACKEY command line by placing
- the desired function within braces {}. As usual you can place any
- other STACKEY commands on the same line so long as the utility ends
- with }. If there are other commands on the line or there is a
- final }, then the resident portion of STACKEY will be loaded if it
- has not been previously loaded. However, if you meet two
- conditions, then the resident portion will NOT load: you must not
- place any commands on the line before the opening { and you must
- not put in a closing }. By separating with delimiters (space or
- semicolon but NOT comma since a comma is used as a delimiter for
- multiple parameters in a single command) you can call up several
- utilities at once. Thus, to switch to a color monitor and a block
- cursor covering the entire line you can use
- stackey {mon=c cur=0,7}
- or
- stackey {mon=c cur=0,7
- In the second case, the resident portion would not load if it were
- not already loaded whereas in the first case it would. Placing a
- command to the stack like CR before or after the {}'s in the first
- case would have the same effect. In the second case placing CR
- before the { would load STACKEY if it weren't already loaded.
- Placing it at the end of the line with no closing } before would
- produce an error message.
-
- It is important to realize that utilities are implemented in
- real time and in the order they occur. Thus
- stackey {wait=360 mon=m}
- would wait 20 seconds before changing monitors while
- stackey {mon=m wait=360}
- would change to the monochrome screen and then wait 20 seconds
- before continuing the BATch file or returning control to DOS.
-
-
- Chapter V:UTILITIES MODE Page 62
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- Because of the real time processing of utilities, errors in syntax
- are handled a little bit differently when there are utilities
- commands on the command line. Normally, if there is any error on
- the command line, STACKEY aborts with an error message and takes no
- action. But since a utility command is implemented as found, if an
- error occurs afterwards STACKEY will abort with an error message
- but any utilities which have been done will not be undone. For
- example, the line
- stackey xyz {mon=m}
- will abort with an error message and no action taken but
- stackey {mon=m} xyz
- will first switch to the monochrome screen and then abort with an
- error message (naturally on the monochrome screen).
-
- Because utilities are performed in real time while commands to
- the resident part are performed only when the entire line has been
- processed for errors, commands to the resident part will normally
- only be implemented after utilities even if they proceed the
- utilities in line. Thus
- stackey [0=1]{mon=m}
- will only issue the palette change after the monitor change. If you
- want to have the palette change before the monitor change, you
- should use separate lines:
- stackey [0=1]
- stackey {mon=m}
- A special rule applies with waits where the commands prior to a
- wait are placed in the stack before the wait. For example
- stackey [1=4]{w=36}[1=1]
- if you normally have a blue screen will show you a red screen for 2
- seconds.
-
-
- The precise syntax for the utilities command within braces is
- either
- FUNCTION
- or
- FUNCTION=parameter(s)
- if there are some necessary parameters. FUNCTION uses the notion
- of minimal truncation. Thus MON is the minimal truncation for
- MONITOR so any of MON, MONI, MONIT, MONITO and MONITOR are
- acceptable where MONITOR is indicated. We use the shortest minimal
- truncations which avoid ambiguity so MO is not a truncation for
- MONITOR to avoid confusion with the MODE command. To indicate that MON
- is the minimal truncation, we'll write the command at the start of the
-
-
- Chapter V:UTILITIES MODE Page 63
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- section describing it, and in the summary as MONitor. In spite of this
- case, the commands are not case sensitive so {mon=m} or even {MoN=m}
- would work.
-
- You may not use any spaces before or after the = signs when
- parameters are required. While we recommend that you do use delimiters
- between utilities, you need not so that
- stackey {mon=cw=36}
- would switch to the color monitor and wait 2 seconds. However, if
- the command has no parameters and you use a minimal truncation, you
- must use a delimiter. Thus
- stackey {k be=54}
- or
- stackey {keywaitbe=54}
- will both work but
- stackey {kbe=54}
- will generate an error message.
-
- The LOCK and BEEP commands let you issue several calls at
- once by separating the parameters by colons as in
- stackey {LO=-C:-N:-S}
- In addition you can call several beeps at once by using
- colons.
-
- A summary of all the commands can be found at the end of the
- documentation and in the help available from the DOS command line.
-
-
- V.2 WAITs and UNTILs
-
- Commands:Wait=nnn, UNtil=HH:MM (followed by p,t,n)
-
- There are times when you want to pause in your BATch files to
- give the user a chance to read a screen or because the action you
- want is time sensitive. The WAIT utility command is precisely for
- such times. The minimal truncation is W so the syntax is
- stackey {W=nnn}
- where nnn is the number of ticks for the delay. There are roughly
- 18 ticks per second and about 64K ticks per hour. nnn must lie
- between 1 and 64K=65,535. If a larger number is used you get an
- error message "Number out of range".
-
- If you want a delay longer than 60 minutes, you can place
- multiple waits as in
-
-
- Chapter V:UTILITIES MODE Page 64
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- stackey {W=64000 W=64000}
-
- Often, instead of wanting to wait for a fixed time, you want to
- wait until a fixed time. That is, you want to hold up a pending batch
- file until a time comes. The UNTIL command will do this. In its
- simplest form the syntax is
- stackey {until=HH:MM}
- where HH:MM is a military (24 hour clock). However, STACKEY will
- recognize three letters after the HH:MM. First, a "p" will add 12
- hours so that {until=3:15p} will be interpreted as 15:15, i.e. 3:15
- pm. p must be the first letter after HH:MM. t for (tomorrow) will
- add 24 hours; multiple t's are allowed as is pt (but not tp). Thus
- {until=3:15pttt} would wait until 3:15 in the afternoon, three full
- days after the current day.
-
- STACKEY does not check that the time is a legal time so that
- {until=32:15} would be interpreted as 8:15 tomorrow as would
- {until= 30:135}.
-
- Normally STACKEY computes the time that you are calling for and
- checks if that time has past. If it has, STACKEY assumes that you've
- made a mistake and exits with an error message. For example, if you
- enter
- STACKEY {until=3:15p}
- and it s 4:00 pm, you'll get an error message. Of course, it may
- happen that you'll want something to happen the next 3am whether it
- is today or tomorrow. Suppose, for example that you leave your
- machine on 24 hours a day but some resident program insists on
- reading daily alarms each day. So you might want to reboot at 3AM
- while you sleep. A batch file
- stackey {until=3:00}{reboot}
- will do what you want so long as you start it after midnight but if you
- start it before, you'll get an error message. The key letter n
- tells STACKEY you want the next time that time appears.
- Explicitly, it computes the time and, if it has past adds 24 hours.
- Thus
- stackey {until=3:00n}{reboot}
- will do what is desired. {until=HH:MMntt} will not wait two days after
- the next HH:MM. Instead use two separate stackey commands if that
- is what you want, e.g.
- stackey {until=3:00n}{until=3:00tt}
- if you want to wait until two days after the next 3:00 am.
-
-
-
-
- Chapter V:UTILITIES MODE Page 65
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- If you put in a wait or until by mistake, hitting Ctrl-
- Break, ^C or <Esc> at the keyboard will cancel the wait; i.e.
- STACKEY will exit. The remainder of the stackey command line will
- also be cancelled.
-
- You should distinguish between what we call delays and what
- we call waits. Delays are set with the command Wnnn while waits
- are set with the {WAIT=nnn} utilities mode command. Delays are
- commands to the resident part of STACKEY telling it to delay
- placing strokes in BIOS' buffer (or setting colors) while operating
- in the background as some foreground program is running. Waits are
- commands to the foreground part of STACKEY telling it to loop and
- control all machine resources (although you can call up a program
- like SIDEKICK) until the wait period is over. Thus waits will be
- useful only in rather special circumstances like demonstration
- BATch files while delays will get used more often.
-
- Delays are implemented as they are reached by the resident
- part of STACKEY. Thus, if you send more strokes to STACKEY's
- buffer than there is room for in BIOS' buffer, STACKEY will pause in
- sending its buffer until the backlog of strokes in BIOS's buffer is
- cleared. If there is a delay in the "strokes" waiting for STACKEY
- to process, the count in the delay will not begin until the delay
- is reached in STACKEY's buffer. In distinction to this, STACKEY
- implements waits as soon as they are reached in its interpretation
- of the command line.
-
- As already noted, while STACKEY loops and counts time when
- involved in a wait, you can invoke a resident program like
- SIDEKICK(TM) at such a time. STACKEY will continue to count time
- while the resident program is active and if the wait ends while the
- resident program is up, then STACKEY will exit as soon it regains
- control.
-
- WAITs are computed by using the built in real time clock on
- the PC and so should be independent of hardware so long as the IBM
- standard 55 millisecond tick rate is used. In particular, they
- will work the same way on 4.77 MHz PC's, 6 MHz AT's, 12 MHz AT
- clones and 25 MHz Northgate 386 machines. Other wait programs like
- the public domain WAITN.COM just program loops and will run for
- shorter times on machines with higher crystal speeds.
-
-
-
-
-
- Chapter V:UTILITIES MODE Page 66
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- V.3 Switching Monitors and Ports
-
- Commands:MONitor=x (x=C,M,S), Prn, COmm
-
- There are utilities to switch ports and monitors. The command
- stackey {PRN}
- will interchange LPT1 and LPT2 so that what was previously attached
- to LPT2 will now respond to attempts to send things out LPT1 and
- vice versa. Repeating the command will interchange them again
- restoring the status quo ante. Similarly, {COMM} will interchange
- COM1 and COM2. The minimal truncation for PRN is P and for COMM is
- CO. If you are not adding the final }, you will need to use
- the full PRN or COMM if they are the last command on the
- line. CTRLALT PLUS includes a resident program called 2ND PRINTER
- which will let you change printers from within a running program.
-
- Similarly, you can switch monitors with the MONITOR utility
- command whose minimal truncation is MON. This however must take a
- parameter. To switch monitors use MON=S, to force the color monitor
- use MON=C and to force the monochrome monitor use MON=M.
-
- You will also wind up on the target monitor in 80 column text
- mode after a MON command. In addition, the cursor on the original
- monitor, if different from the target, will be removed. Be careful
- not to use the MON command if you only have one monitor.
-
- CTRLALT PLUS, another program by the authors of STACKEY
- provides considerable support for systems with two monitors and/or
- two printers.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter V:UTILITIES MODE Page 67
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- V.4 Turning off PrintScreen
-
- Nothing can be quite as frustrating as hitting Shift-PrintScreen
- by mistake with a computer not attached to a printer! Typically you'll
- hang losing any unsaved work. For such purposes, STACKEY provides a
- two key code P- which turns off the ability of Shift-PrintScreen to
- work. You do this with
- STACKEY P-
- so that it is not a utility but rather a resident command. However,
- like the Z+/Z- speedup commands described in Section II.6, it acts much
- like a utility. To turn the ability of Shift-PrintScrren to work
- again, use P+.
-
- This command works by turning on the byte in the BIOS data area
- that says a print screen is in process. So, if you hit Shift-
- PrintScreen, the BIOS check that sees if there is already a print
- screen in progress, thinks there is and it exits. This means that P-
- will not effect other programs like PIZAZZ PLUS or FRIEZE that pop up
- on the Shift-PrintScreen combination.
-
-
- V.5 Mode, Lines and Cursor Control
-
- Commands: MODe=n, UMode=n
- LInes=25, 43 or 50
- CUrsor=+ or -, CUrsor=n,m
-
- There are a number of utilities commands associated with the
- video display. You will not normally want to switch modes when at
- the DOS level but might, for example, to check out color setting
- commands discussed in the last chapter. The MODE=n command will
- switch to mode n if n is on the allowed table below. If a not
- allowed value is used, STACKEY will abort with a syntax error
- message. Allowed values of n are:
- On an ordinary (or Hercules) monochrome screen: 7
- On an EGA attached to a monochrome monitor: 7,15
- On a CGA: 1,3,4,6
- On an EGA attached to a color monitor: 1,3,4,6,13,14,16
- On a VGA: 1,3,4,6,13,14,16,17,18,19
- With one exception, this prevents you from trying to switch to an
- illegal mode which may produce problems. The exception is that you
- should not try to switch to mode 16 if you have an EGA connected to
- the old fashioned color display rather than an enhanced color
- display. For example
-
-
- Chapter V:UTILITIES MODE Page 68
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- stackey {mod=14}
- will switch to the medium resolution EGA 14 color graphics mode if
- issued on a color screen and if you have an EGA. The minimal
- truncation for MODE is MOD.
-
- Some Super VGA monitors have additional modes set with a BIOS
- call identical to the standard mode change but with another mode
- number. If you wish STACKEY to make such a call without checking that
- the mode number is legal, use the UMODE command (for User mode).
-
- LINES=25 and LINES=43 will switch to the appropriate modes if
- you have an EGA. Many programs will not act properly in 43 line
- mode. The minimal truncation is LI. On a VGA, use LINES=25 or
- LINES=50 instead. STACKEY will check on the monitor type and issue
- an error message if you use any value of lines other than 25, 43 or
- 50 and if you use an illegal value for the monitor you have (e.g.
- lines=43 on a VGA).
-
- CURSOR, which takes one or two parameters, controls the
- cursor. The minimal truncation is CU. CU=- will remove the cursor
- and CU=+ will restore it to the standard place (lines 6 and 7 on
- the color monitor and lines 12 and 13 on the monochrome monitor).
- For certain BATch file displays, it is effective to use CU=- but
- please remember to restore the cursor with CU=+. If you don't like
- the standard cursor you can control it with CU=m,n. On a color
- monitor, there are 8 lines, labelled 0 through 7 and on a
- monochrome monitor 14 lines labelled 0 through 13. The command
- CU=m,n when m and n are in the allowed values sets the cursor to
- start on line m and end on line n. If m is less than or equal to
- n, the cursor is in one piece while if m is greater than n, the
- cursor wraps around an is in two pieces. For example
- stackey {cu=0,7}
- produces a full height block cursor on a color monitor and
- stackey {cu=7,0}
- produces a cursor consisting of a thin roof and thin ceiling.
-
- Using improper values will typically produce unexpected
- effects, e.g. {cu=32,0} will cause the cursor to vanish (and is
- effectively the same as cu=-).
-
- Programs like CED and FANSI CONSOLE can effect the cursor at
- the DOS prompt. In particular, on a machine with SOFTWARE CAROUSEL
- and FANSI CONSOLE, partitions with PCED had any cursor set with
- STACKEY immediately reset at the DOS level. But in BATch files,
-
-
- Chapter V:UTILITIES MODE Page 69
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- STACKEY should give you complete control over the cursor.
-
- BATUTIL will let you change the position of the cursor; see
- the BATUTIL documentation for the ROw and COl commands.
-
-
- V.6 Beeps
-
- Command: BEep=n,m or BEep=n
-
- You can send variable length and frequency beeps with
- STACKEY. In version 2.0 of STACKEY, the duration for a given set of
- parameters was machine dependent since it relied on the clock speed
- of the underlying machine although the frequency was machine
- independent. BEEP, whose minimal truncation is BE takes two
- parameters. The second parameter may be left blank in which case
- the comma must also be left out. The first parameter determines
- the frequency and n is a measure of the inverse frequency so as n
- increases the pitch goes down. The most reasonable values are n
- between 15 and 60 but any number between 1 and 256 will yield an
- audible sound. The second number is the duration; the default is
- m=50. You'll have to play with this one to see how it works. The
- sample BATch file SOUNDS.BAT is not intended as competition for
- Pianoman.
-
- Multiple beeps can be stacked as in
- stackey {BE=20,40:75,55}
- In addition, you can tell STACKEY to repeat a string of beeps
- multiple times by inserting "#nnn" between "BE" and "=". For
- example,
- stackey {BE#5=20,80:30,90:40,80}
- would play the three notes and then repeat it four more times.
-
-
- V.7 Screen dumps
-
- Commands: DUMPP, DUMPF=x,DUMPOF=x,DUMPL=x,DUMPOL=x
- where x is a filespec
-
- STACKEY will let you send the current screen to the printer
- or a file. The command line
- stackey {dumpp}
- will send the screen to the printer. If the printer is not on or
- you have no printer, a standard STACKEY error message will display.
-
-
- Chapter V:UTILITIES MODE Page 70
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- This command simulates the pressing of <Shift-PrtSc> so if you have
- a program like Intel's QUIKBUF or Zsoft's FRIEZE which takes over
- this key combination, it will be called up instead of the screen
- printing.
-
- DUMPF, DUMPOF, DUMPL and DUMPOL which require an = and a file
- name, all dump the screen to a file. The commands without an "O"
- append the present screen to the file if it exists while those with
- an "O" will overwrite it. The commands with an F make the 2000
- bytes on the screen into a file. This file will occur as one long
- line with no LF/CR pairs. Those with an L append LF/CR pairs at
- the end of each line and so produce files with 2050 bytes. Files
- produced with an L will be properly displayed in a file viewer like
- Vern Beurg's LIST while those produced by an F will properly TYPE
- to the screen. If you TYPE a file with L to the screen, blank
- lines will appear in between each original line. LIST can properly
- view files made with F if you turn wrap on but many other programs
- will have problems with files produced in that manner.
-
- The filespec placed after = is passed to DOS so the usual
- rules apply. If there is any kind of file error whether due to an
- invalid path or an open drive door, STACKEY will exit with the
- message
- STACKEY: DOS File Error
- and set the errorlevel to 3.
-
-
- V.8 Rebooting
-
- Commands: BOOT(=c), REBOOT(=c)
- Minimal truncation NONE
-
- In rare circumstances you may want to reboot your machine
- automatically. STACKEY only accepts the exact phrase BOOT or
- REBOOT and if it finds it looks for the next two characters. If
- they are "=c", STACKEY initiates a cold reboot, otherwise a warm
- reboot. The difference is the parity resetting and checking of
- memory. While the reboot method just jumps to the instruction in
- ROM that is gone to when you turn on the machine, if you try to
- REBOOT with STACKEY and you are using SOFTWARE CAROUSEL your EMS
- board may not reset properly; a second warm reboot should clear
- that up.
-
-
-
-
- Chapter V:UTILITIES MODE Page 71
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- V.9 Lock Toggles
-
- Command: LOck=xy (with x=+ or -; y=C,S,N,I)
-
- For consistency, recognizing that the lock commands like +C
- are real time utilities, the eight two character commands
- +/- C,S,N,I are available in utilities mode as {LOCK=xy}. So to
- turn on the caps lock you could use
- stackey {LOCK=+C}
- or
- stackey +C
- The only reason to prefer the former is if you do not want STACKEY
- resident and leave off the final }. The minimal truncation is LO.
-
- Multiple lock commands can be combined separated by colons as
- in
- stackey {lo=-C:-N:-S}
-
-
- V.10 The Halt Command
-
- Command:HAlt
- STACKEY offers a command which halts a batch file in
- midstream. You'd use it most often after an if command as in
- if errorlevel 2 then STACKEY {HA}
- The HALT command first checks if Break is on and if it is not, it
- turns it on. Then it places a ^C in the buffer so that DOS will
- pause the batch file and display the message:
- Terminate batch job (Y/N)?
- and give you an opportunity to terminate the batch file. If you
- wish to absolutely terminate the batch file without a Y/N question
- from DOS, make the last line of the batch file the label :end and
- use
- if errorlevel 2 then goto end
-
- If STACKEY finds the Break is off and turns it on, it
- displays the message:
- STACKEY: BREAK has been turned on.
-
-
-
-
-
-
-
-
- Chapter V:UTILITIES MODE Page 72
-
-
-
-
- Documentation for STACKEY, Version 2.0
-
-
- V.11 Pause for input
-
- Commands:Keywait, Enterwait, Abortwait, ~abortwait
- STACKEY 2.0 had four commands to interact with keyboard input
- in batch files. For compatibility, these are still included
- although BATUTIL has expanded and extended them.
- KEYWAIT will pause a batch file for a key to be hit. It is
- equivalent to
- BATUTIL {ge el}
- while ENTERWAIT, which pauses until <Enter> is hit is equivalent to
- BATUTIL {ge cr}
-
- ABORTWAIT pauses until either Y or N is pressed and halts the
- batch file if Y is pressed. It is equivalent to
- BATUTIL {ge Y N}
- if not errorlevel 2 then stackey {HA}
-
- ~ABORTWAIT pauses until either Y or N is pressed and
- halts the batch file if N is pressed. It is equivalent to
- BATUTIL {ge N Y}
- if not errorlevel 2 then stackey {HA}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter V:UTILITIES MODE Page 73
-
-
-
-
- Chapter VI:ADVANCED TOPICS
-
-
- In this chapter, we discuss three distinct advanced topics. First,
- for the reader's background, we provide a tutorial on how keystrokes
- are processed in a PC. This may help you understand what STACKEY can
- and cannot do but for most operations that you'd want to do, it isn't
- necessary. Then we'll discuss a powerful but potentially VERY
- DANGEROUS feature where STACKEY allows you to place any arbitrary
- sequence of machine language instructions in the middle of a STACKEY
- script. We originally developed this INLINE feature for STACKEY's
- internal purposes. The idea was that while we wanted to give users of
- a program like CAROUSEL access to the Qn command, it hardly seemed fair
- to make all users carry the code for that command as part of the
- RESIDENT code of STACKEY. We thus developed INLINE code to place a
- sequence of commands as part of the playback buffer. Thus the Carousel
- code is part of the non-resident program and is only loaded into the
- keystroke buffer when needed. Of course, if you have long scripts that
- include INLINE commands, you'll need to increase your buffer size but
- this need will only be felt by a small set of users. INLINE code if
- not done right can really screwup your machine - requiring a reboot or
- even lost disk data. It should only be used by those who know what
- they are doing which means people adept in 80x86 assembly language. If
- you are copying an inline routine supplied by someone else, be careful
- to not make any typing errors! There is also an EXTERNAL command to
- read inline code from a binary file. As illustrations, we have
- supplied a number of external files called *.bin.
- Finally, we will describe STACKEY's API (application program
- interface) which programs can use to talk to the resident part of
- STACKEY. Indeed, STACKEY's nonresident part talks to the resident part
- through the API.
-
-
- VI.1 Keyboard basics: interrupts
-
- We want to explain the journey taken by a single keystroke.
- In short, hitting a key calls int 9 and the BIOS processes the
- keystroke and places it in a buffer. Programs then call BIOS int 16
- or DOS service 8 to get keystrokes out of the buffer. Here is more
- detail:
- Your CPU runs programs as a sequence of instructions in RAM.
- RAM is organized into bytes, each of which has a unique address.
- Normally, the CPU runs a program by sequentially going through the
- instructions but there are instructions to jump to a given address
- or to jump depending on the result of some comparison. Programs
- call DOS services by placing certain information in the CPU
- registers (local storage in the CPU) which tell DOS what is wanted
-
-
- Chapter VI:ADVANCED TOPICS Page 74
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- and then turn control over to DOS. How does the program know where
- DOS is since different versions of DOS will typically reside in
- different places? The lowest 1K of bytes on the machine is a list
- of 256 addresses. The instruction int nn (with nn a Hex number)
- transfers control to address nn of these 256 (with the convention
- that the first address is int 0 so int 21, the interrupt for most
- DOS services is the 34th address since 21H = 33). This is done in
- a way that stores the current state of the machine so that if DOS
- ends its routine with an IRET (interrupt return) instruction, then
- the calling program can resume operation from where it began.
-
- What has just been described is a software interrupt, that is
- one that is called by a program actively asking for that interrupt.
- There are also hardware interrupts, indeed the notion began with
- hardware interrupts. How does the CPU determine that a key has
- been struck? It could periodically ask the keyboard: "Hey, any
- action for me?" but such "polling" isn't very efficient. A better
- method is for the keyboard to tap the CPU on shoulder and say:
- "I've got something for you, buddy". What the CPU should do is
- stop what it is doing, keep a record of where it is, process the
- stroke and return to what it is doing. In more prosaic terms,
- hitting a key sends a signal to the interrupt controller chip which
- causes int 9 to be issued. This transfers control to the 10th
- address in memory, information is processed on the basis of which
- key is struck and control is then returned to where the CPU was and
- the underlying program continues.
-
- The two hardware interrupts of greatest interest are int 9
- which is issued whenever a key is hit or released and int 8, the
- timer interrupt which is issued every 55 milliseconds. These 55
- millisecond periods are called clock ticks. There are roughly 18.2
- per second.
-
- One of the key aspects of interrupts is that a program can
- steal an interrupt. If done responsibly, such larceny is good for
- everyone and in particular TSRs can only work because they steal
- interrupts. Let's imagine a program that pops up whenever you hit
- Ctrl+Alt+A. How does such a program gain control when you hit its
- hotkey? When it loads, it looks at the address stored for int 9.
- This is the address of the routine which will be called whenever a
- key is struck. It stores this address in its own data area and
- places the address of some of its code in the int 9 location. Thus
- one of its routines is called whenever a key is struck. This
- routine will look and see if the key hit was A; if it is A, then it
-
-
- Chapter VI:ADVANCED TOPICS Page 75
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- checks the byte where BIOS keeps the state of the shift keys and
- checks if Ctrl+Alt are depressed. If they are, then the TSR pops
- up after doing some necessary housekeeping to reset the keyboard
- and interrupt controller. If the key isn't for the TSR program,
- then the routine passes control to the original routine stored at
- the original int 9 address. In this way, a chain is created of all
- the different TSRs peeking at each keystroke and passing it on if
- it isn't their hotkey. TSR technology is more complex than this
- but this describes the basic idea. It is only by sitting on some
- interrupt that a program can get control and so take part in the
- goings on. STACKEY actually does most of its work by sitting on
- the timer interrupt, checking each 55 milliseconds to see if it
- still has anything to do.
-
-
- VI.2 Keyboard basics: The buffer and BIOS data area
-
- The first 1024 bytes in memory contain the interrupt table.
- The next 256 bytes form the "BIOS data area" where lots of
- miscellaneous information is kept including the number of clock
- ticks since midnight (BIOS sits on int 8 and increases this number
- every time int 8 is called) and a good deal of information about the
- keyboard. In one byte is kept the information about the state of
- CapsLock, NumLock, ScrollLock and the Insert state. As part of the
- same byte is kept information about which of the four shift keys is
- currently depressed (thus all 8 bits of this byte are productively
- used).
-
- 34 bytes are used to deal with a type ahead buffer. As
- we'll explain, each "normal" keystroke places two bytes in the
- buffer. As you type, new two byte combinations are added to the
- buffer while as an application processes input, two byte
- combinations are "removed from the buffer". Rather than actually
- remove the bytes, BIOS keeps track of the head of the active buffer
- and of its tail. The head is the address of the next stroke to be
- processed and when it is processed all that BIOS does is move the
- head pointer up in memory. As you hit keystrokes, they are placed
- in the buffer at the position kept by the tail pointer and it is
- moved up. The 15 word (a word means two bytes) buffer is circular
- so that the head and tail pointers will wrap around the circle. If
- the head has caught up to the tail, then BIOS knows that the buffer
- is empty and will so inform a program that asks. If the tail has
- looped around and caught up with the head, BIOS knows that the type
- ahead buffer is full and will beep at you if you try to type more.
-
-
- Chapter VI:ADVANCED TOPICS Page 76
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- VI.3 Keyboard basics: Int 9 processing
-
- The keyboard on the original PC has its own built in micro
- processor but it is not a very clever one. Basically, all it knows
- about is that you have depressed or released a certain key. To it
- all keys have equal footing - it doesn't distinguish between
- shifts, locks or letter keys. It just knows them as keys. Each
- key has its own unique hardware scan code so that the <Esc> key has
- scan code 01, the letter "A" scan code 1EH, <F7> 41H, the Left
- shift 2AH and the Capslock 3AH. Basically, the codes are arranged
- so that on the original PC they increased from left to right in
- each row but as the position of keys migrated from one keyboard
- upgrade to the next, the old codes were kept for compatibility.
- All the codes lie between 01H and 7FH (=127). In fact none is as
- high as 7FH but theoretically one could have 127 keys on the
- keyboard without drastic changes, but 128 or more keys each
- distinguished from the other would require a completely redesigned
- BIOS! In fact the so called enhanced keyboard is more clever. It
- distinguishes keys like the arrow keys on the numberpad and the
- separate cursor keys pads by using a pair of codes for the arrow
- key so that in theory it could support more than 127 keys. In
- addition, the scan codes issued by the arrow keys are dependent on
- the state of NumLock. We will not consider the extra complications
- associated with this new keyboard again.
-
- When you hit or release a key, the microprocessor on board the
- keyboard sends a signal into the computer that activates the
- interrupt controller chip which calls int 9 in the CPU. The CPU
- then shifts into the built in BIOS routine. Actually, there are
- probably several onlooker TSRs that first look at each keystroke
- but let's ignore them for the time being. The first thing that the
- BIOS does is to read the keyboard "port" for the keyboard is primed
- to report the scan code of the key hit if a key was hit or 80H plus
- the scan code if a key was released. The keyboard will report this
- information whenever asked until it is reset which is done at the
- end of the keyboard routine.
-
- What the BIOS now does, depends on the key hit or released.
- If the capslock was the key hit, it will toggle the bit that keeps
- the capslock state; if a shift was hit, it will adjust that bit and
- if the shift was released it will adjust the bit back. If a letter
- key was hit say "A", it will check whether there is room in the
- buffer for another keystroke and beep if there isn't. If there is,
- it will proceed to place two bytes in the buffer. The first byte is
-
-
- Chapter VI:ADVANCED TOPICS Page 77
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- the "scan code" which is usually but not always the actual hardware
- scan code. The second byte is the ASCII code. For the "A" key, it
- will place the actual hardware scan code 1EH as the scan code. To
- figure out the ASCII part, it will look at the state of the shift
- keys and of Capslock. If "a" is intended, it will place ASCII code
- 61H, if "A" then 41H, if ^A then 01H and if Alt-A then 00H. This is
- typical: if there is no ASCII code associated to the key (Ctrl-A is
- a perfectly good ASCII character but Alt-A is not), then an ASCII
- code of 00H is placed. In that case, the "scan code" is called
- "extended ASCII code" or "second ASCII code" - both terrible names
- since it has nothing to do with the ASCII scheme.
-
- The hardware scan code for <F1> is 3BH. Since none of the
- shifted F1 keys has an ASCII equivalent, BIOS places an ASCII code
- of 00H in as part of the word placed in the buffer for those
- keystrokes. If it always put the actual hardware scan code of 3BH
- into that half of the word, the computer wouldn't be able to
- distinguish F1, Shift-F1, Alt-F1 and Ctrl-F1. So what does BIOS do?
- It makes up "scan codes" as follows (!):
- F1 3BH
- S1 54H
- A1 68H
- C1 5EH
- These codes were picked for the original PC where there were 84 keys
- with codes from 00H to 53H. Thus 54H wasn't a real scan code but on
- an AT, it is the scan code for the <SysReq> key! It doesn't matter
- since the SysReq key doesn't put anything in the buffer. The "scan
- code" for Ctrl-PgUp is 84H which is the hardware scan code issued
- when you RELEASE the top row <3> key. The point is that the "scan
- code" half of the what is put in the buffer is usually but not
- always the hardware scan code.
-
- If the key struck is on the keypad, there are extra
- complications, not only because of the numlock but because of the
- special meaning of the Alt-numeric keypad. We won't discuss the
- details of how that is handled but once you indicate that you want
- to put in an ASCII 200 say (lower left handle double corner), it is
- put in with a "scan code" of zero. That is if the scan code is
- zero, that indicates something put in via the keypad. So the <+>
- (ASCII code 2BH) can normally get put in the buffer with one of 3
- different "scan codes" - 00H if you use the Alt-keypad and press <4>
- and then <3> with alt depressed, 0DH if you use the top row and 4EH
- if you use the grey plus. Since both halves of the word are in the
- buffer, programs can distinguish between the two pluses if they
-
-
- Chapter VI:ADVANCED TOPICS Page 78
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- wish.
-
- We have not discussed how typematic fits into all this
- (typematic is the name for the key repeat function that goes into
- effect when you hold a key down). Given that int 9 tells BIOS when
- a key is released as well as hit, you can imagine how BIOS by
- combining int 9 and the timer interrupt can produce this effect.
-
- There is an important point to be made here. Certain special
- combinations cause the BIOS to jump to special routines. For
- example, if you hit <Del>, the BIOS checks to see if Ctrl+Alt are
- down and if so it jumps to a special routine with which you might be
- familiar. First, it is quite possible for a program to intercept
- int 9 and disable Ctrl-Alt-Del! Secondly, STACKEY can only mimic a
- Ctrl-Alt-Del, because we know exactly what the machine does when
- you press Ctrl-Alt-Del. Perhaps, your clone is set up to play the
- star spangled banner when you hit Ctrl+Alt+$. Unless we know what
- action it is taking, there is no way we can mimic that. We do try
- to mimic the Ctrl+Alt+G+/- speed switch since there is a standard
- routine that many clones use to change the speed but if your clone
- uses something else, there is nothing that we can do mimic that!
- Why not just simulate hitting G+ with Ctrl+Alt depressed. The
- problem is that while we can place strokes in the buffer, steal
- ints or set off custom routines, there is no way (at least no way
- known to us!) to steal the keyboard port and simulate the hitting
- of as key under int 9.
-
- VI.4 Keyboard basics: int 16/DOS service 8
-
- Int 9 places strokes in the buffer. Application programs
- normally get the strokes out with int 16H (henceforth we'll drop
- the H from that) or by using DOS service 8 which actually calls
- int 16 itself. Before calling an int, programs can place a number
- in the AH register of the CPU which tells the int which service to
- use. Thus the expression "service 8 of DOS" means invoking the
- DOS interrupt (int 21H) with ah=8. Int 16 has several services
- including one (service 2) that tells a program the state of the
- shift keys (most programs directly look at byte 417H), one that
- tells the program whether there are any keystrokes to waiting to be
- processed (service 1) and one (service 0) that returns the next
- keystroke in the buffer, waiting for a stroke if there isn't one
- there. If int 16, service 0 is called, then when control is passed
- back to the application program, ah contains the "scan code" part
- of the next keystroke and al the ASCII part. The application
-
-
- Chapter VI:ADVANCED TOPICS Page 79
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- program is perfectly able to distinguish top row plus and grey
- plus, for example.
-
- DOS service 8 calls int 16 and proceeds to throw some of the
- information away! Only the ASCII part of the code is returned to
- the calling program. If this ASCII code part is zero (corresponding
- to a key combination which doesn't correspond to an ordinary ASCII
- code), then and only then, can the program get additional
- information - if DOS service 8 is immediately called again, the
- scan code part is returned which explains why it is called "second
- ASCII code". Using the DOS service, a program cannot distinguish
- the top row plus and the grey plus. Why use the DOS service instead
- of int 16? About the only virtue is that you can redirect input and
- have the input used if you call the DOS service 8. There are many
- disadvantages. Why do some programs still persist in using the DOS
- service? For some, it is a holdover from the era of MS-DOS
- machines; these were not 100% IBM compatible machines. The idea
- was that while these machines might have a somewhat incompatible
- BIOS, they'd react properly to the DOS call. For some, it is
- because their compiler insists on calling DOS. Ironically some
- compilers (Turbo Pascal is an example!) mimic the behavior of the
- DOS call and it is recommended that with such compilers, you
- include your own int 16 routine for getting keyboard input.
-
- Most programs that flush the keyboard buffer, do it by
- calling int 16, service 1 and seeing if there is a keystroke
- waiting. If there is, then they call service 0, get the keystroke
- and ignore it. They then loop until they are told by service 1
- that no keys remain in the buffer.
-
- In principle, a program could bypass int 16 and directly
- remove strokes from the buffer. Fortunately no programs do so (as
- far as we know), since such programs will have a tendency not to
- work with keyboard macro programs. But some programs completely
- ignore int 16 and have their own keyboard handlers replacing both
- int 9 and int 16 and the BIOS buffers. SMARTCOM II is a good
- example of this. If you use STACKEY before loading SMARTCOM,
- you'll find that the keystrokes don't get acted on by SMARTCOM but
- appear on the screen when you exit. This is because STACKEY places
- strokes in buffer where SMARTCOM ignores them but they get read
- when you exit SMARTCOM. There is nothing that can be done to get
- STACKEY to work with a program like that.
-
-
-
-
- Chapter VI:ADVANCED TOPICS Page 80
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- VI.5 Keyboard Basics: How other programs work
-
- To understand how STACKEY works, it is useful to have some
- idea of how various kinds of other programs work. Keyboard macro
- programs generally have two distinct parts - one that enhances int 9
- and the other enhances int 16. The int 9 enhancement allows the
- macro program to react to strokes like Ctrl-Up which BIOS ignores.
- (Actually, the BIOS with the enhanced keyboard does interpret Ctrl-
- Up so this statement is only true of the older BIOS.) Each macro
- program has a different set of codes used for these non-BIOS
- keystrokes - alas there is no standard - but the well known ones
- all put a word in the buffer corresponding to these strokes. Then
- their int 16 module looks at what the "real" int 16 is about to
- report - the older BIOS would pass these strange words through.
- Since the macro program worries that the calling program won't know
- what to make of this non-standard code, if you haven't made Ctrl-up
- into a macro, the macro program will eat the non-standard code. If
- the key is a macro key, then the macro program will return the
- strokes in the macro as int 16 is successively called.
-
- Typeahead buffer extenders typically work by seeing if the
- buffer is about to fill and if so they remove the stroke from the
- buffer and place it in their buffer. Depending on how they are
- implemented they'll continually take out and put in the last stroke
- in the buffer or all of them.
-
- Several programs promise to improve on BIOS' typematic by
- eliminated the dreaded "cursor overshoot" (oh horrors!). If you
- hold down the arrow key when your application program isn't ready or
- in a situation where it can't process strokes fast enough, then BIOS
- will fill the buffer with the code for that arrow key. The more
- intelligent typematic programs place the extra strokes in not by
- using the buffer but by stealing int 16 and responding that there is
- an arrow key ready. In this way, they'll give strokes just at the
- rate that the application can take it and you'll get "stop on a
- dime" behavior.
-
-
- VI.6 Keyboard basics: How STACKEY works (or doesn't)
-
- STACKEY's most basic function is to simulate the entering of
- ordinary keystrokes. It does this by placing them in the buffer.
- When smart or impatient processing is in effect, STACKEY checks
- every clock tick and if it has keystrokes waiting to be placed in
-
-
- Chapter VI:ADVANCED TOPICS Page 81
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- the buffer, it places as many as it can without overfilling the
- buffer. If there is no room, it will do nothing. If your
- application can process them that fast, STACKEY can place as many as
- 18.2*15=about 270 keystrokes per second in the buffer. However,
- STACKEY doesn't prevent int 9 from being processed in the middle, so
- if you hit a key, it may wind up in the middle of the playback.
-
- The non-resident part of STACKEY keeps a translation table to
- tell it what each special symbol keystroke and letter corresponds to
- and it just places the corresponding words in STACKEY's internal
- buffer. So you understand why each "keystroke" takes two bytes and
- the 128 keystroke default buffer is 256 bytes. STACKEY reserves the
- "scan codes" E0 and above to tell it that a special command is in
- the buffer, like a delay or repeat. However, XF012 would still
- work; it would place a word F012 in the keyboard buffer but the
- intermediate codes in STACKEY's buffer wold take a third byte to
- warn STACKEY that the F0 wasn't a command.
-
- Since STACKEY is only simulating the result of hitting a key
- rather than the hitting of the key itself, custom routines are
- needed to simulate each "keystroke" that doesn't place a key in the
- buffer. Since BIOS does nothing when Ctrl-Up is hit, STACKEY has
- no primitive command for Ctrl-Up. If your macro program or
- application program gives meaning to this stroke it is probably by
- placing its own idiosyncratic code in the buffer. If you can find
- out what codes it is using, you can simulate them with the Xnnnn
- command. (For some macro programs, CTRLALT PLUS' ^@R command or
- CTRLALT's ^@T which reports on what int 16 is saying will let you
- see what codes your macro program is using.)
-
- STACKEY simulates a shift depress by saving the byte at
- address 417 and changing it for the specified number of ticks to the
- requested value and then it restores the original value. Programs
- that pop up on the shift keys do so by checking byte 417 each tick so
- they will get fooled by STACKEY. In principle a program could popup
- on Alt+LShift by sitting on int 9 and seeing if the key hit is Alt
- or LShift and then checking whether the complementary shift is
- depressed. The only programs we know of that do this are in the
- SWAPxx series and they do not pop up on STACKEY's SH command -
- fortunately as Tesseract programs, you can use the TE command
- instead. There is an extra complication with the SH command that
- you should be aware of. Suppose that you have a SH(AL,18) stacked
- and you have the Alt key depressed when the processing of the SH
- command begins. But during the processing of the SH command, you
-
-
- Chapter VI:ADVANCED TOPICS Page 82
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- remove your finger from the Alt key (18 ticks is a full second
- after all). When STACKEY restores the initial state of the shifts,
- it will restore the Alt key down bit and even though your aren't
- depressing the Alt key, the keyboard will act as if you are!
- Pressing and releasing the Alt key should cure this problem, which
- fortunately should be rare.
-
- STACKEY's hotkey processing is done on int 9. Thus if you
- have used a keyboard mapping program and changed the keytops,
- STACKEY for its hotkeys will be sensitive to the original meaning of
- the keys, not their remapped meaning. For example, on an AT you
- might physically interchange the <Esc> and <`/~> keys and use a
- program like FANSI CONSOLE to correct for the action of the keys.
- However, if you want Alt-<Esc> to be the H+ hotkey (where by <Esc>
- you mean the key currently marked <Esc>), you'll need to use
- stackey H+(A,"`")
- since a keyboard mapper can't fool programs that sit on int 9 and
- STACKEY's int 9 handler doesn't know that you've swapped keytops.
-
- Above, we described how program tend to flush the buffer. If
- you have 100 strokes in the STACKEY buffer, the way STACKEY works by
- default, those strokes will all get cleared out by many such schemes
- (although if the program is doing things quickly enough, it may
- clear out the BIOS buffer and find that empty before the next clock
- tick when STACKEY will refill the buffer). You should be able to
- figure out why the PH keystroke will fool such flushers.
-
- Some programs, flush the buffer after getting any keystroke,
- disabling type ahead! You should be able to understand why patient
- processing will normally deal with such programs.
-
- You'll find that you have to fine tune STACKEY in many ways to
- get it to overcome some strange scheme that a program has to flush
- the buffer or otherwise force you to do things its way. It is
- unfortunate that programs work that way but if all programs worked
- properly, you wouldn't have much need for STACKEY - they would allow
- you on the command line to do what you must make a STACKEY script to
- do instead. When a difficulty does occur, it may pay to try to use
- the knowledge in this tutorial to figure out what is going on. We
- hope that the tools we have provided in STACKEY will let you
- overcome the difficulty. If they don't, please let us know so we
- can attempt to add even more flexibility to STACKEY to let it solve
- those problems.
-
-
-
- Chapter VI:ADVANCED TOPICS Page 83
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- VI.7 Inline: Syntax
-
- Important note: STACKEY's INLINE code is powerful but
- dangerous and should only be used by those adept in assembly
- language programming. When experimenting, act the way you would
- if you were debugging an assembly language program. Be careful to
- be in a situation where a crash wouldn't lose any work.
-
- The syntax for inline code is:
- STACKEY IL(xx/xx/xx/xx/xx)
- where xx are hex numbers from 00 to FF. The hex digits A-F can be
- either uppercase of lower case; do not add an explicit H. When
- this set of commands is reached in the STACKEY script, that
- sequence of bytes will be executed as a sequence of machine
- language instructions. Before they get issued, STACKEY pushes the
- ax,bx,cx and dx registers and when the code is done, it issues a
- RET instructions and then it pops these registers. Thus the IL
- code can freely use the ax,bx,cx,dx registers and it can also use
- the si,ds and es registers. Before using any other registers
- (bp,di,sp,ss,cs), be sure to push them and subsequently pop them.
- It is important that you note that STACKEY appends a RET
- instruction to the IL code so need not add one yourself; you cab
- use a RET but do not use an IRET or a FAR RET.
-
- When your code is called, cs=ds=the resident code's segment
- and es=40H, the BIOS data area. Moreover si points to the offset
- of the first instruction; see below. The 6 byte area ds:42H-
- ds:47H is available for user data storage; below methods are given
- for additional storage if you wish. The word at ds:40h is the
- segment of the screen (B000 or B800).
-
- THE CODE MUST BE FULLY RELOCATABLE. RELATIVE JUMPS ARE FINE
- BUT ABSOLUTE JUMPS ARE NOT. STACKEY does not have its own stack
- but uses the underlying programs stack. If you have a need for a
- large stack (only relevant if you are using an external command),
- you'll need to set one up in your inline code. To do this you
- might need to get access to the absolute position of your code. One
- way of doing this is to use the following inline fragment:
- \E8\00\00\58\
- (which translates as
- call $+3
- pop ax)
- will place the address of the 58 instruction (relative to CS:0000)
- in the AX register. Another way is to use the fact that si points to
-
-
- Chapter VI:ADVANCED TOPICS Page 84
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- the initial instruction when your inline code is loaded. So you could
- get a data or stack area with
- jmp short overdata ;or, jmp short $+10 for 4 words data
- dw 0,0,0,0
- overdata:
- ...
- ...
- mov [si+2], ax ;si+2 points to beginning of "data"
-
- Be warned that if you use this idea (or the special value of es)
- in external files, you will not be able to debug them from DOS since
- DOS loads com files with si=00 and es=cs.
-
- A STACKEY inline call of n bytes takes n+3 bytes of buffer
- space (recall that a "keystroke" takes two bytes) including the
- final ret. And the resident code to implement inline instructions
- takes only about 50 bytes!
-
-
- VI.8 External: Syntax
-
- STACKEY also has a command to allow you to stack a compiled
- com or bin file in the place of an inline string. The syntax is
- stackey EX(filename)
- where filename can include a drive and or path if you wish. You
- may use any extension that you wish but it must be included as part
- of the name. The file MUST end in a RET instruction (and not in a
- call to DOS service 4C, for example) and obey all the rules for
- inline code except the rule about no final RET (we save the inline
- writer from having to add the RET by hand but for testing COM
- files, we assume you'll want the RET on the external file).
- STACKEY will complain if there is no final RET instruction. An EX
- command to a file of n bytes ending in ret is completely equivalent
- to an IL command of the n-1 bytes preceding the RET.
-
- The size of the external file is only limited to the size of
- STACKEY's buffer.
-
- Since an EX command requires an extra file, we'd imagine that
- you'll use EX while debugging and then translate it to IL code
- unless the code is too long to fit as IL on the DOS command line.
-
-
-
-
-
- Chapter VI:ADVANCED TOPICS Page 85
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- VI.9 Inline and External examples
-
- Here are some examples of how to use IL:
-
- Example 1. Pure Illustration
-
- STACKEY SC(hi) IL(b8/7/e/cd/10) ' Hello to you too.'
-
- The IL code is for
- mov ax,0E07H
- int 10H
-
- In this example, STACKEY will scan for the word "hi" and the IL
- code will issue a BIOS beep (service E of int 10 with a character
- of ^G) and then answer you back.
-
-
- Example 2. Hide the cursor
-
- STACKEY IL(b4/1/b9/0/20/cd/10)
-
- This is equivalent to
- mov ax,1
- mov cx,2000H
- int 10H
- and will hide the cursor in real time.
-
-
- Example 3. Wait for a keystroke and eat it.
-
- STACKEY IL(31/c0/cd/16)
-
- equivalent to
- xor ax,ax
- int 16H
-
-
- Example 4. Send a FF to the printer.
-
- STACKEY IL(ba/00/00/b0/OC/cd/17)
-
- equivalent to
- mov dx,0
- mov al,0CH
-
-
- Chapter VI:ADVANCED TOPICS Page 86
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- int 17H
-
- Example 5. Getting and restoring the shift status
-
- STACKEY IL(26/A0/17/00/3E/A2/42/00/26/C6/06/17/00/0A/...
- 3E/A0/42/00/26/A2/17/00)
-
- translates to
- mov al,es:[17h] ;get shift states - es=400
- mov ds:[42h],al ;save it
- mov byte ptr es:[17h],0ah ;set alt-shift
- and after some intermediate code
- mov al,ds:[42h]
- mov es:[17h],al ;restore
-
- Example 6.
- You could write your elaborate resident program accessed by
- one of the user interrupts and call it up with STACKEY inline code
- calling that interrupt.
-
- Example 7. Flash the screen
- This involves the sample code flash.asm and its compiled bin
- file flash.bin. What it does is XOR all bytes in screen memory
- with 07F, count to 64K and XOR back. The effect is to flash the
- screen so
- stackey :1 w5 ex(flash.bin) be j1
- will get your attention that a process has stopped; use the H!
- hotkey to flush out those instructions.
-
- Example 8. Play music
- Music.asm is source for the file gavotte.bin which will play
- a Bach gavotte with
- stackey ex(gavotte.bin)
- There are also a Monteverdi piece (montev.bin) and for the really
- highbrow pop goes the weasel (pop.bin). Music.asm is a shell and
- you can use it to write your own external music files. You might
- try
- stackey :1 ex(gavotte.bin) WH j1
- which will play the gavotte whenever you hit the H+ hotkey. Of
- course, you won't be able to use STACKEY for anything else.
-
- Example 9. Messages
- The shell makemess.asm is source code for sample.msg but has
- directions for modification. By jumping to labels called label1,
-
-
- Chapter VI:ADVANCED TOPICS Page 87
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- label2, etc in this source code, when run the external file will
- jump to STACKEY labels 1, 2, etc. The sample file jumps to label 1
- if you hit Y and label 2 if you hit N. Thus the command
- STACKEY ex(sample.msg) :1 be 'yes' j0 :2 'no'
- will pop up a message box and either beep and enter the string
- 'yes' through the keyboard if you answer Y or enter the string 'no'
- if you enter N. Notice since there is no label 0, j0 exits the
- command line.
-
- Example 10. Disable/Reenable the keyboard
- This example is potentially very dangerous! The following
- code will disable the keyboard:
- stackey IL(B0/AD/E6/64)
- and can be used in scripts where you want to be sure that the user
- will not interupt. Only use it after you have thoroughly debugged
- the rest of the script. To reenable the keyboard use instead
- stackey IL(B0/AE/E6/64). However, be warned that some keyboards
- will save up keystrokes while disabled and issue them when
- reenabled. For this reason, you may want to also flush the
- keyboard as well as reenable it. An external program flush.bin is
- provide that does this or you can use
- stackey IL(B0/AE/E6/64/33/C9/E2/FE/B4/01/CD/16/
- 74/06/32/E4/CD/16/EB/EC)
-
-
- VI.10 STACKEY's API
-
- To talk to application programs, STACKEY takes over some unused
- int 16 services. All calls require AH=CA (that's CA Hex but think of it
- as the initials of CTRLALT Associates; CTRLALT PLUS' API also uses int
- 16 but with other values of BX and CX). It is also required that
- BX=CX=736BH ('sk'). AL must be one of 0, 1 or 2 and this value
- indicates the "service number" below. Any other values of AX,BX,CX
- will be passed on by STACKEY. Three bytes of user stack are used in
- addition to the 5 required by an interrupt.
-
- If STACKEY services an API call, it ALWAYS RETURNS
- AX=CAFF
- BX=Code segment of SK
- CX=Version of SK (CH=major,CL=minor)
- The API is only applicable for version 3.0 and later of STACKEY.
-
-
-
-
-
- Chapter VI:ADVANCED TOPICS Page 88
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- Here are the STACKEY API services:
-
- service 0: Are you there?
- Returns: DX=Words free
-
- service 1: Put word in buffer
- DX=word to place in buffer
- Returns: DX=number of words remaining in
- buffer if successful, FFFF if unsuccessful.
- [The only reason for unsuccess is a full buffer.]
-
- service 2: Flush STACKEY and BIOS buffers
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter VI:ADVANCED TOPICS Page 89
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
-
- Chapter VII:ASSOCIATED PROGRAMS
- VII.1 FILEKEY
-
- A separate program called FILEKEY is included which lets you
- read an entire file into STACKEY's buffer. STACKEY must be loaded
- in memory before FILEKEY is invoked or else you will get an error
- message. The syntax is
- filekey <filename>
- where filename can include a drive and/or path.
-
- The file read by FILEKEY should be a standard ASCII file.
- FILEKEY reads the file into the stack as literal keystrokes with
- each CR/LF pair (line ending) replaced by a CR. A final CR is
- automatically included (but see below). Thus the two line ASCII
- file (NOTE: FILEKEY does not ignore leading blanks; for
- typographical reasons we indent the examples but we describe what
- would happen if the file lines began in column 1):
- Now is the time
- for all good men
- would be read by FILEKEY as if the command
- stackey "Now is the time"CR"for all good men"CR
- were entered at the DOS command line.
-
- $ plays the role of a special escape character in the
- processing by FILEKEY. If the $ is followed by any character, but
- ; or another $, then the $ gets passed through in the usual way.
-
- "$;" tells FILEKEY to ignore the remainder of the line and
- not place a CR at the end of that line. Thus, to avoid having a CR
- stacked at the end of the final line end the file with $;. For
- example, the following file would be equivalent to the last STACKEY
- example:
- Now is the $;
- time
- $;this is a comment
- for all $; this is another comment
- good men
-
- $$ tells FILEKEY to toggle to a mode where it reads the
- file as if it were STACKEY reading a command line with five
- exceptions:
- $$ is no longer interpreted as a single $
- lines are automatically wrapped; i.e. a literal CR/LF (but
-
-
- Chapter VII:ASSOCIATED PROGRAMS Page 90
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- not the letter CR or LF) is ignored.
- utilities mode cannot be called from a file
- /../ commands cannot be issued
- permanent palette changes cannot be made $$ will toggle back
- to the default mode. Thus the following file is also equivalent to
- the last STACKEY example:
- Now is the time$$CR$$for all good men$$CR$$$;
- The final $$$; is unnecessary.
-
- If you want to imbed $$ in the stack from a file, use
- $$"$$"$$
- and similarly for $;.
-
- Note that [] color changes are allowed in FILEKEY's $$-mode
- but not permanent palette changes. This is because the permanent
- palette changes are utilities. SC, SS, SH, EX, and IL are all
- allowed commands after toggling with $$. Hotkey changes are also
- allowed in $$-mode.
-
- If you use FILEKEY for large scripts you may find that
- STACKEY's limitation of 10,000 keystrokes in the buffer is
- insufficient (it surprised us when we got requests for a large
- buffer but we did from several sources!). Note that with SKRES,
- you can load STACKEY with a buffer size of 30,000 bytes, see
- Section III.12. Filkey itself is limited to reading in files of no
- more than 54,000 bytes.
-
-
- VII.2 EGAPAL and VGAPAL
-
- The EGA and VGA allow one to keep permanent palettes and non-
- standard fonts in tables in RAM. By default, they are stored in
- ROM but by moving those tables to RAM, one can set permanent
- palettes different from the default. Permanent here does not mean
- surviving rebooting, only surviving a change of mode. Included
- with STACKEY are programs that move these permanent palettes. You
- can only use STACKEY's permanent palette setting with the supplied
- EGAPAL, VGAPAL or with the commercial program ULTRAVISION.
-
- EGAPAL replaces the DWORD1 program supplied with STACKEY 2.0.
- Please use EGAPAL rather than DWORD1. EGAPAL will refuse to load with
- a VGA - DWORD1 will load but should not be used. Instead, use VGAPAL.
-
-
-
-
- Chapter VII:ASSOCIATED PROGRAMS Page 91
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- If you are not running any other EGA/VGA specific programs
- that use palettes or fonts, you need just run EGAPAL or VGAPAL in
- your AUTOEXEC.BAT and forget about it. You'll then have access to
- the permanent palette setting. DO NOT REMOVE EGAPAL FROM MEMORY
- WITH old versions of MARK/RELEASE WITHOUT FIRST RUNNING "EGAPAL Q"
- AS DESCRIBED BELOW. If you ignore this warning and you are using
- these early versions of MARK/RELEASE, you will crash rather
- spectacularly although we think that you will not hurt your
- monitor. The more recent versions of MARK/RELEASE and CTRLALT PLUS'
- ^@<F9>Y command automatically restore the DWORD1 pointer that
- EGAPAL/VGAPAL change.
-
- The first time that you run EGAPAL, it remains resident
- taking 1600 bytes of RAM most of it in the tables (1472 bytes)
- that store the palettes. VGAPAL takes 224 bytes. In addition to
- this memory, memory will be taken for a copy of your current
- environment (see BATUTIL documentation, Section V.1).
-
- If EGAPAL/VGAPAL finds that it is not already in memory but
- another EGA/VGA is, it will refuse to load. Load EGAPAL/VGAPAL
- first and use the Q and R parameters.
-
- If EGAPAL/VGAPAL is run with no parameters (or with any
- parameters other than Q or R) it will look for itself in memory.
- If it finds itself, it exits with a message: "EGAPAL already
- loaded". Otherwise it loads itself as described above.
-
- When EGAPAL loads, it saves the EGA/VGA address that were
- there before it loaded. Running
- egapal Q
- (for Quit) will put these addresses back to what they were before
- EGAPAL loaded. Running
- egapal R
- (for Restore) will put these addresses back to what they were after
- you initially ran EGAPAL. If EGAPAL is run with one of these
- parameters and EGAPAL does not find itself in memory, it will exit
- with the message: "EGAPAL not loaded". When looking for
- parameters, EGAPAL stops after the first one so it doesn't matter
- what appears after the first R or Q. Any number of spaces, tabs or
- /'s can occur between 'egapal' and the Q or R.
-
- There are some programs (Microsoft CODEVIEW is an example)
- which react badly if the save_ptr region is in RAM. Assuming that
- you loaded EGAPAL when save_ptr was pointing towards ROM, you need
-
-
- Chapter VII:ASSOCIATED PROGRAMS Page 92
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- only run
- egapal q
- before such programs and
- egapal r
- afterwards.
-
- Do this also to use another program that is EGA/VGA specific
- and insists that it be loaded first.
-
-
- VII.3 Demonstration BATch files
-
- The STACKEY package comes with four demonstration BATch files
- to illustrate some of STACKEY's features. You should run them (at
- least the appropriate ones for your monitor) and then study them to
- see how they work.
-
- SOUNDS.BAT illustrates the BEEP command. You should also look
- at BATUTIL's SOund command and soundemo.bat.
-
- CGACOLOR.BAT shows you how the L and P commands work on the
- CGA. The full illustration of the L command requires the small
- stand alone program BOXES.COM to be in the default directory. You
- should only use it with a color monitor.
-
- COLOR.BAT and SEECOLOR.BAT illustrate the temporary palette
- setting on the EGA. Both take parameters. COLOR will cycle
- through all 64 colors on the EGA. With no parameter or an improper
- parameter, it displays a message and then runs the file with a
- default parameter value of 1. The correct parameter is a single
- integer. If the parameter is n, there is a pause of n/2 seconds
- between color changes. If you find the switching time too short
- with the default try n=3 or 4.
-
- SEECOLOR will let you see any color or several colors. You
- enter
- seecolor p1 p2...pn
- where each parameter is either a number (from 0 to 63) or a subset
- of RrBbGg and those colors will be displayed in order with a pause
- for keystroke in between. If an illegal parameter is entered, the
- BATch file will abort with an error message.
-
- In addition to the basic commands they illustrate, these
- BATch files show other features of STACKEY. For example, you
-
-
- Chapter VII:ASSOCIATED PROGRAMS Page 93
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- should study how COLOR.BAT and SEECOLOR.BAT use redirection to nul
- and errorlevel to recover from command line errors. And all the
- files except SEECOLOR make use of the wait command to control the
- timing of the BATch file. The possibility of doing arithmetic on
- STACKEY's input parameters, discussed in the usage notes, is
- illustrated in COLOR.BAT.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter VII:ASSOCIATED PROGRAMS Page 94
-
-
-
-
- Chapter VIII:MISCELLANY
-
-
- VIII.1 Usage notes
-
- STACKEY checks its numeric input and normally gives an error
- message Number out of range if an integer is given over 64K or a
- number below 256 is required but one larger is given by the user.
- Colors which are supposed to be in the range 0 to 63 are reduced
- mod 64 so long as they are less than 256.
-
- Any place where STACKEY expects an integer, you can place a
- product by using a *. Thus, "W2*35" will be interpreted as "W70".
- Thus if you want to accept input from a user in a BATch file in
- seconds rather than clock ticks, you can use "W18*%1". In addition
- you can use + and - with multiplications done first. For example,
- the timed waits in COLOR.BAT are arranged to run for 64*%1 (the
- time to show the 64 color changes) minus a fixed amount to take
- into account the time it takes for the color change commands to
- load.
-
- Note that while DOS normally interprets >,< and | as
- redirection commands, if enclosed between double quotes, it gets
- passed as part of the commands line, so these symbols can be
- stacked by placing them between double quotes (but not between
- single quotes). If you prefer, you can use the $g,$l and $q
- metastrings.
-
- You can use stackey to make a batch file that will change the
- date and time of a file to one you specify. The following
- redate.bat file has the syntax:
- redate <filespec>
- to change the date and time to the current one and
- redate <filespec> date time
- to the specified date and time. <filespec> can include wildcards:
- echo off
- cls
- if "%2" == "" goto nodate
- stackey $tCR
- if "%3" == "" goto notime
- time %3
- :notime
- stackey $M"-"$D"-"$YCR
- date %2
- :nodate
- for %%a in (%1) do copy/b %%a+,,
- if "%2" == "" goto morenoda
-
-
- Chapter VIII:MISCELLANY Page 95
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- if "%3" == "" goto morenoti
- time
- :motenoti
- date
- :morenoda
- The stacked date and time restore the current values (your clock
- will lose a few seconds).
-
- One of the annoyances faced by DOS users is the seeming
- inability of automatically answering "Y" to "Are you sure (Y/N)?"
- in a BATch operation where you are issuing a del *.*. Actually,
- one can do this with DOS via:
- echo Y|del *.*
- and we recommend that, but it may be illuminating to discuss how to
- do this with STACKEY. The commands
- stackey "Y"CR
- del *.*
- will not work because DOS flushes the buffer and the characters are
- lost. Nor does
- stackey PH"Y"CR
- del *.*
- work because DOS doesn't ask for a keystroke until one is in the
- buffer. This illustrates our point that PH only works in limited
- situations. But
- stackey WR"Y"CR
- del *.*
- does work. And
- stackey W18"Y"CR
- del *.*
- works properly and you can probably decrease the 18 to 7 or 8. A
- more sophisticated method that works is
- stackey /up/"YY"CR
- del *.*
- stackey /o/
- After the flags are pUshed for later pOpping, patient mode is
- turned on. The first Y which could be anything is flushed by DOS
- but then the second one is entered.
-
- If you have gone to command mode in a FILEKEY file and
- include a ";", the entire rest of the file will be ignored. This
- is consistent with the STACKEY usage. To add remarks, use $$$; and
- then remember to begin the next line with a $$ if you wish to
- remain in command mode. Processing also halts if FILEKEY
- comes across an ASCII 0 (NOT the number 0) in your file.
-
-
- Chapter VIII:MISCELLANY Page 96
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- We recommend that you include STACKEY with the default buffer
- size in your AUTOEXEC.BAT file. If you later need a large buffer
- size, you can load a new copy with the /Rxxxx/ command. Ideally
- you should use a program like Mark/Release to remove this second
- copy when finished in which case STACKEY will revert to using the
- original copy.
-
- You might want to also consider issuing some permanent
- palette change commands in your AUTOEXEC.BAT immediately after
- loading EGAPAL or VGAPAL.
-
- Do NOT use the version of FILEKEY distributed with STACKEY
- version 1.0 or 2.0 with this version of STACKEY.
-
- STACKEY finds itself in memory using the API and not the
- actual name so you can rename it to any convenient name you wish
- such as sk.com so long as the extension remains com.
-
- STACKEY's help uses a built in version of the CTRLALT
- Associates' MAKEDOC program currently under development. This is a
- shareware program that will let you make resident or non-resident
- executable display files. You can remove STACKEY.HLP if you are
- short for space. When you ask STACKEY for help, it looks in the
- current directory and then throughout the path to find STACKEY.HLP
- and if it is not found, STACKEY will display an error message.
-
-
- VIII.2 Also by the same authors
-
- STACKEY was developed by Barry Simon and Richard M. Wilson.
- Simon and Wilson have formed CTRLALT Associates to market their
- software. They are committed to the idea of shareware and both are
- founding members of the Association of Shareware Professionals. At
- the time of this release of STACKEY, CTRLALT Associates has two
- free programs and several other program under development:
-
- CTRLALT PLUS is our flagship product extending the popular
- free program CTRLALT. CTRLALT PLUS is expected to be released in
- 1990. It is a set of resident utilities including extensive cut
- and paste, a calendar, programmer's utilities (resident tables,
- emergency exit), two monitor support, a resident file viewer,
- dialer, calculator, color control and resident printer control.
-
-
-
-
- Chapter VIII:MISCELLANY Page 97
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- CTRLALT PLUS and STACKEY/BATUTIL are shareware and can be
- registered with Support Group, Inc. (see Section I.3).
-
- BIGECHO is a simple program which allows a BATch file to
- display characters which are 8 rows by 8 columns. Version 1.0 was
- released in September, 1986. It is available on many BBS systems
- and from some disk vendors. Most of its features are subsumed in
- BATUTIL.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter VIII:MISCELLANY Page 98
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- Appendix to Chapter VIII
-
- Here is a quick summary of the STACKEY command line syntax:
-
- - ? will give help
- - _ will send the remainder of the line to standard output
- - Place text inside single or double quotes
- - F1-F0,F-,F=; S1-S0,S-,S=; A1-A0,A-,A=; C1-C0,C-,C= for
- function keys
- - @x or (x for Alt-x where x=letter or number
- - ^x or ~x for Ctrl-x where x=letter or number
- (NOTE: @number for top row numbers; ^number for keypad)
- - LA,RA,UA,DA for arrow keys
- - PU,PD,HM,EN for Page Up/Dn, Home, End
- - IN,DE for Insert/Delete
- - N0,...,N9,N. for numeric keypad numbers and decimal point
- - G+,G-,G* or N+,N-,N* for Grey keys
- - PS for PrtSc
- - CP for Ctrl-PrtSc, CB for Ctrl-Backspace
- - TA or TB for Tab; ST or BT for Shift Tab
- - ES,BS,SP,CR for Escape, Backspace, Space, Enter
- - FF, LF for form feed (^L) and Ctrl-Enter
- - DQ,SQ for " and '
- - PH and WR for two kinds of "phony keystroke"
- - +/-N,+/-S,+/-C,+/-I to turn On/Off Num, Scroll, Caps Lock, Insert
- - SH(X,nnn) with X a subset of CALR simulates shifts for nnn ticks
- - CA invokes CTRLALT PLUS
- - Qn switches to Carousel partition n
- - Dn with n=1 or 2 invokes Desqview main menu
- - TE(idstring,keyid) for Tesseract programs
- - Z+/- clone speedup/slowdown
- - P-/+ to disable, reenable Shift-PrtScrn
- - BE for BIOS beeps
- - MP(msg), ME(msg) for popup messages
- - $x or *x for prompt metastrings with SEND extensions (see
- below)
- - \nnn with nnn=decimal number for Alt-keypad entry
- - Xhhhh with hhhh=hex word for direct hex entry
- - #nnn or )nnn to repeat the next keystroke nnn times
- - Wnnn to insert a delay of nnn ticks (18.2 ticks = 1 sec)
- - Mnnn to insert a delay of nnn minutes
- - SC(string) to scan at cursor position
- - SCn,m(string) to scan at absolute position
- - SS(string) and SSn,m(string) to scan silently
-
-
- Chapter VIII:MISCELLANY Page 99
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- - WB pause script until buffer is empty
- - WH pause script for restart hotkey
- - WK pause script for any key
- Convention: X=subset of CALR; Y=single keystroke like "a" or F1
- - WS(X,Y) pause for specific key
- - H!(X,Y) resets flush buffer hotkey (default=AL,!)
- - H*(X,Y) resets flush scan hotkey (default=AL,G*)
- - H-(X,Y) resets stop hotkey (default=AL,G-)
- - H+(X,Y) resets restart hotkey (default=AL,G+)
- - CL,NL,SL,SR CapsL, NumL, ScrollL, SysReq for hotkey only
- - ! to flush buffer
- - ; to stop reading command line (for comments)
- - /Bnnnn/ to change buffer size on initial loading
- - /Rnnnn/ to force extra loading with new buffer size
- - /i/ /s/ and /p/ for impatient, patient, smart processing
- - /t/ and /n/ to turn test mode on and off
- - /c/ and /d/ to turn continue mode on and off
- - /u/ and /o/ to push and pop the s,t,c flags
- - /?/ to query the s,t,c flags
- - Ln to set coLors on the CGA (n=0,...,15)
- - Pn to set palette on the CGA in mode 4 (n=0,1)
- - [c=nn] to map color number nn to slot c on the EGA
- - [#m;c=nn] to do the map in the permanent table for mode m
- #A:All palettes
- #T:Ultravision, text modes only
- #U:Ultravision
- - +/-B to turn blinking on/off on the EGA or VGA
- - IL(xx/xx/xx/xx) InLine command (USE WITH CAUTION!)
- - EX(filename) External inline (USE WITH CAUTION!)
-
- In summarizing utilities mode, minimal truncations are capitalized.
- Only use the leading capitol letter for x.
- - {BOOT} or {REBOOT} for a warm reboot
- - {BOOT=C} or {REBOOT=C} for a cold reboot
- - {MONitor=x} x=Color,Mono,Switch
- - {Prn} to switch LPT1 and LPT2
- - {COmm} to switch COM1 and COM2
- - {CUrsor=x} x=+/- to turn standard cursor on/off
- - {CUrsor=n,m} to put cursor on scan lines n through m
- - {CPosition=n,m} to move the cursor to row n, column m
- - {MODe=n} switch to allowed video mode
- - {LInes=n} n=25,43(50) to shift modes on the EGA (VGA)
- - {LO=xy} where x is + or - and y=N,S,C or I to toggle lock keys
- - {Wait=nnn} Real time pause of nnn clock ticks; n between 1 and 32K
-
-
- Chapter VIII:MISCELLANY Page 100
-
-
-
-
- Documentation for STACKEY, Version 3.0
-
-
- - {Until=HH:MM} Real time pause until time HH:MM
- - {DUMPP} to do a screen dump to printer
- - {DUMPF=x}, {DUMPL=x} to append screen to file with filespec "x"
- - {DUMPOF=x}, {DUMPOL=x} to overwrite screen to file
- - {HALT} stops batch file with ^C
- - {Keywait}, {Enterwait} pause for input
- - {Abortwait}, {~abortwait} pause for input to abort
- - {BEep=nn,mm} nn = inverse pitch, mm = duration
-
- PROMPT metastrings and extensions:
- - $v = DOS version - $t = time in HH:MM:SS.hh format
- - $n = current drive - $T = time in HHMM format
- - $p = current path - $H = hour from 0 to 23
- - $P = current path with \ - $d = date in DAY MM-DD-YYYY
- - $$ = the character $ - $M = month in MM format
- - $g = the character > - $D = day in DD format
- - $l = the character < - $Y = year in YY format
- - $q = the character = - $W = day of the week
- - $h = the character bks - $E = date in English
- - $b = the character |
- - $e = the character esc
- - $_ = CR/LF
-
- FILEKEY has the following conventions:
- - default interprets as pure text
- - $$ toggles between pure text and STACKEY command mode
- - $; in text mode suppresses CR and remainder of line
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter VIII:MISCELLANY Page 101
-
-
-
- INDEX
-
- abortwait 73 errorlevel 71
- Alt key combinations 18 extended ASCII code 22,78
- Alt keypad 22 external code 85
- API 88 file screen 70
- arithmetic 95 filekey 90
- beeps 70 filekey command mode 90
- BIOS buffer 76 flush buffer 41
- BIOS data area 76 flush scan 41
- blinking bit 60 flushing the buffer 45
- border colors 51 forty three lines 69
- boxes.com 93 Function keys 18
- Break status 48 halt 72
- buffer overflow 15 help 15
- buffer size 49 hotkeys 41
- Buffer, enlarging the 46 inline code 84
- buffer, flushing 45 interupts 74
- buffer, keyboard 76 keyboard buffer 76
- buffer, STACKEY's 43 keywait 73
- Caps Lock 21 L command 52
- CAROUSEL 24 large buffer 47
- cgacolor.bat 93 loading STACKEY 13
- CLONE SPEEDUP 24 lock toggles 72
- cold reboot 71 loops 36
- color codes - CGA 51 messages 26
- color codes, EGA 55 mode changes 68
- color.bat 93 modes, graphics 50
- colors on the CGA 52 music 70
- colors on the EGA/VGA 57 normal mode 48
- com port swap 67 NUL, redirection to 15
- comments 46 Num Lock 21
- continue mode 48 Numeric keypad 18
- Control key overscan byte 56
- combinations 18 P command 53
- copyright 9 palettes, CGA 53
- Ctrl-Break 19 palettes, permanent
- CTRLALT PLUS 23 on the EGA/VGA 59
- cursor control 69 palettes, temporary
- Cursor keys 19 on the EGA/VGA 57
- date 22 path, current 22
- delays 37 pause script 41
- DESQVIEW 24 permanent palettes
- directory, current 22 on the EGA/VGA 59
- disabling print screen 68 permission to copy 8
- disclaimer 9 phony keystroke 40
- discontinue mode 49 pop STACKEY flags 49
- dumpf 15 popup messages 26
- dword1 91 PRIMETIME 25
- EGA/VGA colors 57 print screen 68,70
- EGAPAL 91 printer swap 67
- enhanced keyboard 20 push STACKEY flags 49
- enterwait 73 query STACKEY flags 49
- errorlevel 15 reboot 71
-
-
-
- repeats 36
- resume script 41
- RrBbGg color labels 54
- scan 39
- scan silently 39
- screen dumps 70
- Scroll Lock 21
- second ASCII code 78
- seecolor.bat 93
- SIDEKICK 25
- SIDEKICK PLUS 25
- SKRES 47
- smart processing 43
- sounds.bat 93
- STACKEY's API 88
- swap ports 67
- temporary palettes
- on the EGA/VGA 57
- TESSERACT 24
- test mode 48
- text mode 50
- time 22
- Two key special codes 19
- ultravision 58
- Upper ASCII codes 22
- utilities mode syntax 63
- VGAPAL 91
- W command 64
- wait for buffer 38
- wait for hotkey 42
- wait for key 42
- wait for request 40
- waits 38
- waits 64
- warm reboot 71
-
-