Switch Control Panel (SWCP) Copyright (c) 1988-89 by Tim Grams All Rights Reserved This program is shareware. That means you may try it out, but if you use it, you are expected to pay for it. Send $15 (or $20 for a disk) in the form of a personal or cashier's check to: Tim Grams P.O. Box 462283 Garland, Tx 75046-2283 USA If you find no use for this program after a week or so, please do me the favor of either passing it on or deleting it. If you do pass it on, make sure this documentation file goes with it. Description ----------- SWCP is a ProDOS 8 utility program for the Apple IIGS that switches and maintains the control panel. It runs stand alone from its own menu, or in conjunction with a program launcher. Launchers that pass startup strings work best, because through them you can create macro-like command strings for repeated operations. PROSEL, ECP, and JUMPSTART are in that category. In addition to simply setting control panel options, you can use the startup string capability of SWCP to make a change while launching programs. In effect you can have a control panel configuration unique to each application. SWCP changes are instantly performed, without resets or reboots. If you need to do such things, SWCP will do various types. SWCP changes do not affect the permanent control panel settings unless you wish them to. The actual control panel in Battery Ram is seperated from the current (transitory) settings you make with SWCP. You can save either current or permanent settings to file and restore them as you wish, even when launching programs. Requirements ------------ SWCP requires an Apple IIGS and rom version 01 or less. Memory requirements are negligible. Because some of the features of SWCP are facilitated by non-standard methods, be aware that SWCP may not function with future rom or system software revisions. Registered owners will be appraised of any necessary upgrades. SWCP Revision History --------------------- v2.3 - purge memory quit code protection smartport restore quit bug fix v2.2 - 16-bit launcher quit fixes set prefix bug fix optional guard removal on slot boot v2.1 - additional menu display values smartport rearrange command serial port initialize v2.0 - non-permanent changes cp file save/restore configuration settings improved reset and boot keyboard settings display width/type v1.3 - enhanced prefix handling startup device, slot boot and hardware reset faster color changing volume control option v1.2 - keyboard command entry text, background, and border colors better smartport device support v1.1 - dynamic switching of ProDOS disks v1.0 - basic slot and speed switching Installation ------------ Unpack the SWCP files into their own directory (folder). As an example, if your volume is called /HARD1, put the files into /HARD1/UTIL. You can put SWCP in any directory, but for ease of use place it close to the root directory. The configuration program SWCP.BAS is an Applesoft program, so BASIC.SYSTEM must be present in the volume root directory. First Thing ----------- Execute the SWCP file. When you reach the command line arrow prompt, type in: FS and press the return key. You have now saved a copy of the current control panel settings in a file. If you ever need to restore all your settings at once, just execute SWCP and type: FR If you want to, play around with SWCP. Change text colors to get the feel of it. First notice what number your current text color is set to from the value on the right of the screen. Change it to red for example by entering T1 Then enter the FR and watch your original text color return. Remember that another FS will overwrite your saved control panel settings! Command List ------------ Function Command n values -------- ------- -------- Boot Slot BSn 1..7 Configure SWCP CF Display Color,Monochrome DC,DM Display Width DWn 40,80 External Slot En 1..7 File Restore,Save FRn,FSn {0..99} Internal Slot In 1..7 Key Buffer Enable,Disable KE,KD Keyboard Layout KLn 0..9 Startup Device Pn 0..9 Permanence Enable,Disable PE,PD Quit Code Disable Q Remove Guard RG Reset-Power,Boot RS,RP,RB Smartport Rearrange Enable SE,SD Speed Fast, Slow SF,SS Text,Background,Border Colors Tn,Bn,Dn 0..15 Volume (audio) Vn 0..14 General Usage ------------- SWCP takes a string of text input describing the control panel change to make. In general the command format for changes (switches) consists of a one or two letter command, optionally followed by a numeric argument. No spaces. You can chain more than one switch together, ie T1B2. You can launch a program and make the switches at the same time by providing both the program pathname and the switches. All you do is append the switches to the end of the program name with a semicolon. /DISK/BASIC.SYSTEM;T1 The launched program can be either a P8 or a GSOS application. If it is P8, when it "quits" your control panel is automatically set back to the way it was before the program was launched. You may also set prefix and provide a startup string to the launched program. Full syntax is described below. Configuration Settings ---------------------- SWCP has a few configuration settings which you can change, including permance enabling, permanence protection, protected slots, and more. Details for each setting are found in the applicable function description below. To get to the configuration program, either run SWCP.BAS from Applesoft, or use the CF command from SWCP. You will be shown current settings as well as a list of suggested defaults. Use the arrow keys to get to and change current settings in the fashion of the control panel CDA. If you want to set all settings to the "default" values press "D". If you want to restore the values to what they were before you started making changes, press "E" and the values present on entry will be re-established. When you are done, select either "R" to run SWCP or "Q" to quit to your launcher. DHRFIX ------ Some programs leave the hardware video registers on the GS set incorrectly if you want to run a program that uses double hires graphics. For your convenience SWCP will automatically reset these whenever it is run. It manipulates the hardware directly, so you can disable this option from the configuration program if it gives you trouble. Display Type ------------ You can set your display to either color or monochrome. This can help the appearance of many programs, especially old DOS 3.3 games. Display Width ------------- Set to either 40 or 80 columns. Again some programs like one setting or the other. File Restore/Save ----------------- You can save and restore up to 100 control panel image files. These will be placed in your SWCP directory and named "SWCP.F00" thru "SWCP.F99". If you dont give a number to the save or restore, then file SWCP.F00 is assumed. Only one FRn or FSn command is allowed per command line. The file save or restore is done before any other switches, regardless of the position in the command line. You may manually lock the files (with another program) if you wish to keep them from being altered, but be warned that you will generate an error if you try to save over a locked file. You may use file restore while launching programs. Whether you save/restore the permanent or current temporary settings depends on your current default. If you want to force it one way or another, include the one-time permanence enable/disable commands (PE and PD) in the command line. Keyboard Buffering ------------------ Some programs like to run with keyboard buffering either enabled or disabled. This is handy for running games,etc. Keyboard Layout --------------- This defines what keycode each key returns according to a particular language set. You probably don't need to use this, but in some cases it is very handy. For instance, you normally run PRODOS using a non-English key layout, but would like to temporarily switch to English (US) while running the PC Transporter so you can use the MSDOS key layout capability. Language Code -------- ---- English USA 0 English UK 1 French 2 Danish 3 Spanish 4 Italian 5 German 6 Swedish 7 Dvorak 8 French Canadian 9 Permanence or Not ----------------- Perhaps the most powerful feature of SWCP is the fact that you can make control panel changes that do not affect the permanent control panel settings. These are actual changes to the current control panel buffer in memory (and to the system state), but not to the battery backed-up settings saved when you power down the computer. Such capability is very useful as you will find out. Needless to say, such operation of the GS is considered non-standard. In order to prevent other programs from messing with the current "temporary" settings, SWCP will jealously "guard" against changes by programs other than itself if a non-permanent change is done. The guard is not perfect and only applies to the "effects" of control panel changes. If any other program makes a change to the control panel, it will be allowed, but the effect may not be apparent until the next reset. This allows the control panel CDA to still function for example. Because this is a non-standard approach, you may have difficulties in certain situations. The configuration program can setup defaults for permanence or guard use as you wish. You can also choose between using permanent or nonpermanent changes from the command line to override the default permanence setting on a one command basis. Use only one PE or PD per command line. PE's and PD's affect all the changes in the command line regardless of where they are placed. Use RG to remove the "guard". It will be performed after all other switches thereby preventing the guard from being placed if non-permanence is your default. The configuration program can setup defaults for both as you prefer. Current permanence default and guard presence are displayed in the SWCP menu. There is a problem booting GSOS with the BSn boot slot command when the guard is in place. For this reason, a configuration default is provided so that the guard can be removed when the command is used. If you use the reset commands to boot, the guard is always removed (along with most desk accessories). Quiet Mode ---------- This is set from the configuration program. If you enable quiet mode, then the SWCP emblem is not displayed when launching programs, making SWCP "invisible". On the other hand, you may wish to have quiet mode disabled so you know when SWCP is running. Resets and Boots ---------------- SWCP will do three types of machine resets and one slot boot: RP - Power-up type reset RS - Normal OA-cntrl-reset RB - Special booting situation reset BSn - Old style slot boot. RP is a power-up type reset. It changes a byte in the ADB micro ram which flags the Apple GS to perform a full power-up reset (changing ramdisk size if needed). It will start a boot according to the device specified in the (permanent) control panel. RS is the standard three finger "open-apple, control, reset". It also will start booting according to the setting in the control panel. This is the reset you are probably most familiar with. RB means "reset for boot". It is a call to the firmware that will cause a boot scan too, however it doesn't affect the memory image of the control panel. You change the startup device non-permanently with SWCP and at the same time use RB to "reset" boot from a device other than that which is set in the control panel (a 3.5 disk perhaps). Most useful if you boot from rom or harddisk. If you don't, you may never need to use it. While not a reset, the BSn command will boot slot n in the fashion of PR#5. This type of boot does not reset any hardware conditions, but it is related to the resets since they also cause booting as a side effect. Reset Details ------------- Why so many resets? Do you have to use them all? Not at all. RS works fine for plain resets. However, the more you use the GS and the more complex your computer system is, the more likely you will encounter situations where a specific type of reset (boot) is most appropiate. If you use copy protected games, seamless launching from a launcher may require such diversity (since games often expect that you are running them directly from reset). The order of the boots I described above go from a real "hard" reset to a "soft" reset. Reset and (then) boot are done in stages. From power-on the GS first has to read the control panel to find out how to setup the hardware, actually setup the hardware, start up certain toolsets, and can only then access a disk drive to "boot". At this point, _much_ has been done and the program you wish to run is still on disk. This is about where a PR#5 would begin. If you have been running the GS in a normal fashion, and have toolsets already active, the memory fragmented, DA's installed, and maybe a few interrupt handlers running like heartbeat screen blankers or keyboard macro utilities, a program can easily tell that it is not running off of an original boot. A game might halt. Or it might simply be written with the assumption that there is nothing else running on the machine and that memory is unoccupied and available. Clashes with programs that are unexpectedly running in the background can cause problems. The "harder" the reset, the "cleaner" your GS is to a program. The trick is finding which stage works the best. GS/OS for example does not like a soft PR#5 type boot, but P8 programs that don't require or use GS specifics may work fine. The best reset to use will vary according to the situation or application presented. Serial Port Initialize ---------------------- If you switch either of the serial slots (1 or 2) to their internal settings, the port is automatically re-initialized. You can disable this from the configuration program if it gives you trouble. Slot Stuff ---------- Just like the control panel CDA you can set a slot either internal function or external (your card). These changes are made immediately and PRODOS is updated accordingly, so you dont have to reset. As with the regular control panel, you cannot have slot 7 set for Appletalk and slots 1 and 2 both set to their internal function. If you switch slot 5 external, you lose the smartport devices. Beware of switching out the device you run SWCP from unless you will quit back and restore the setting. You can designate two slots in the configuration program that you wish to protect from changes. SWCP comes with protection for slot 5 enabled. Set the configuration option to zero if you really need to switch slot 5. The boot slot command will do an old style boot, like the PR# convention used in Applesoft, if a boot device is present on the given slot. Setting the startup slot really sets what "device" you want to begin the boot startup scan on a reset. Smartport rearrangement is active if it is enabled in the configuration program. This means if you normally run SWCP from a romdisk which is your startup device, then changing the startup device without also booting can mean a crash. If you do this, use the SD one-time smartport rearrange disable as described below. Smartport Rearrangement ----------------------- Devices controlled by the GS smartport include 3.5 floppy drives, internal ramdisk, and/or romdisk. These devices are mapped (at least as far as P8 is concerned) in the following order: Slot 5 Drive 1 (S5D1) Slot 5 Drive 2 (S5D2) Slot 2 Drive 1 (S2D1) Slot 2 Drive 2 (S2D2) Order of drive mapping of actual drives depends on which smartport device is selected to be available for booting. Boot devices "must" map to drive one and since smartport devices are controlled from slot 5, the available boot device will be mapped to S5D1. When you select slot 5 in the control panel, you are selecting the (first) 3.5 floppy disk to be boot device and so it goes into S5D1. Selecting "scan" from the control panel does the same thing. The ramdisk, romdisk, and any additional 3.5 drive are then mapped into S5D2, S2D1, and S2D2. If you select the romdisk or ramdisk to be the boot device, it will get placed in the S5D1 mapping position, followed by remaining ram/romdisk and 3.5 drives. SWCP will do this same mapping dynamically if you change the startup device. The control panel CDA does this too, but you have to reset to make the remap take effect. In most cases this is academic since changing the startup device is done very infrequently. SWCP is set this way by default since it is handy for booting 3.5 drives if you have a romdisk (see booting 3.5's below). If you would rather not worry about it or it gives you trouble, than you can turn off the rearrangement in the configuration program. You can also make a one-time temporary change to the default setting by use of the following commands from the command line: SE - enables smartport rearrangement SD - disables smarport rearrangement Speed Changing -------------- Set it either fast or slow "normal" as the GS control panel calls it. System Volume ------------- Sets overall audio volume that the GS outputs. Don't blast your ears!! If you set it to 0 and use GSOS, you will get a flashing border instead of the regular GS bell. The bell will sound (or border flash) if you make the change from the SWCP menu. Text Color Switches ------------------- Switch text, background, or border settings. If you are running with permanence disabled, be aware that the normal GS control panel CDA will set your color back regardless of whether the guard is active or not. 0 = Black 4 = Dark Green 8 = Brown 12 = Green 1 = Deep Red 5 = Dark Gray 9 = Orange 13 = Yellow 2 = Dark Blue 6 = Medium Blue 10 = Light Gray 14 = Aqua 3 = Purple 7 = Light Blue 11 = Pink 15 = White If you get an error here, its probably because you are not allowed to set the text and background to the same colors (just like the CP). However, if you switch both at once you can effectively swap the colors. ----------------- Esoteric Commands ----------------- Forced Manual Entry ------------------- This is an old command which you may never use. It forces the SWCP menu to appear. Only useful if you use an SWCP.DEF file to provide input. See "Alternative Input for Non-Startup Launchers" below. M forces manual (menu) input Quit Disable ------------ By default SWCP switches the control panel back the way it was after a launched P8 application finishes. You may want to leave the CP that way even after the application quits (for boot startup resets maybe). Just string in a "Q" with the parameters: /HARD1/BASIC.SYSTEM,T1Q Q disables SWCP P8 quit code Hexadecimal Entry ----------------- For adventurous types, $XXYY or HXXYY will set BRAM offset XX to YY. Enter both parts in hex. You can string this too, but it must be at the end: SSE2$XXYYXXYY Warning: incorrect values here can be dangerous. You could accidently scrub your default CP settings if you give it an out of range parameter. You can set any offset between $00 and $3F. Use the file restore option to fix things. Syntax Definition ----------------- Here is a formal definition of the syntax that SWCP expects: { [prefix;] application; [startup;] } switches The first three fields are relevant only when you are launching a program. The switches are what drive the CP changes. Everything enclosed in brackets is optional. The input line is first scanned for semicolons that seperate the fields, then the following rules are applied: 1. If one field, that field must contain switches. 2. If two fields, must be application;switches. 3. If three fields, must be either prefix;application;switches or application;startup;switches. 4. If four fields, must be prefix;application;startup;switches. Usually the first two forms are sufficient. -------------------- Setting up Launchers -------------------- PROSEL Setup ------------ For applications launched from PROSEL, supply the input line by means of the "startup" provided for each selection. In most cases that means putting SWCP in place of the application, and moving the application to the "startup". Assuming the SWCP program resides in directory UTIL on the disk /HARD1, you can construct the PROSEL entry in various ways: PREFIX: APPLICATION: /HARD1/UTIL/SWCP STARTUP: /HARD1/BASIC.SYSTEM;T1 or (better) PREFIX: /HARD1 APPLICATION: /HARD1/UTIL/SWCP STARTUP: BASIC.SYSTEM;T1 or (if you like) PREFIX: ? APPLICATION:?UTIL/SWCP STARTUP: ];T1 The startup field in the PROSEL editor is limited to 40 characters BEFORE expansion. Internally, PROSEL supports 64 characters. SWCP accomodates up to 128 by means of startup string, SWCP.DEF text file or direct keyboard entry. About Prefixes -------------- A program frequently needs access to supporting executable or data files as it runs. A common approach is to put all such files along with the program in their own directory. It is possible for most programs to know what directory they are running from, but in some cases that information is no longer available. Also, some programs may not bother to check where they are running from. Result is a program that won't work properly or just crashes. Prefixes and ProSel ------------------- ProSel (and SWCP) allow you to set your prefix before launching for such reasons. Logically then, any application pathname you specify does not have to have the prefix provided with it, since you have in effect changed the default prefix. Recognizing this, SWCP accepts partial pathnames for the application. Full pathnames are also acceptable and may be necessary in some situations. ECP Setup --------- From ECP, you invoke the SWCP program directly from the command line. Put SWCP in the CMDS subdirectory. Then enter: : SWCP to get to the SWCP menu. When you learn the syntax, you can just add any parameters directly: : SWCP I6 or : SWCP "/HARD1/TIC/TIC;I2" Note that quotations are necessary if your command string contains non-filename characters such as semicolons. You may wish to define function keys for ease of operation. ECP and Prefixes ---------------- ECP does not let you set prefix in the same command line that you use to launch your program. Since that may be necessary for some programs, you can supply a prefix in the SWCP command line if you wish and then specify the application to run: : SWCP "/PREFIX;/APPNAM;STARTUP;I6 or maybe : SWCP /HARD1/APPS/MMM,/HARD1/BASIC.SYSTEM,MAUG.MSG.MGR,T12B0D0 JumpStart Setup --------------- If you prefer launching from a super hires launcher, newer versions of JumpStart can also be used with SWCP. To force a startup string, begin the run list entry with a back slash. Here is an example where slot 6 is setup to recognize the PC Transporter: Run List entry: "\MSDOS" Launch program: "/Hard1/Util/SWCP" Startup string: (for system w/PCT in slot 6) "/Hard1/Msdos/Aepc.System;e6" A more advanced approach that makes use of SWCP's own ability to pass a startup string follows: Run List entry: "\Lotus 1-2-3" Launch program: "/Hard1/Util/SWCP" Startup string: "/Hard1/Msdos/Aepc.System;Start123;e6" This directly launches SWCP to make sure slot 6 is external and at the same time provides a startup string to the Transporter. When MSDOS is booted and LAUNCHER.EXE is invoked in the AUTOEXEC.BAT file, 1-2-3 is automatically executed as though "Start123" was entered from the MSDOS command line. JumpStart sets the default prefix to that of the launched program. If you need the prefix set to a directory besides the one SWCP is in, put the prefix and a semicolon before the name of the application: "/Hard1/Msdos;Aepc.System;Start123;e6" Command.Com Setup ----------------- If you use Command.Com, put SWCP in the BIN directory. Then just give inputs as described for ECP, except no quotations. Instead of semicolons use an asterisk (*) to seperate fields. Alternative Input for Non-Startup Launchers ------------------------------------------- If input is not provided by the selecting program when SWCP is run, a file SWCP.DEF (on the same directory as SWCP) is looked for to provide the input line. This means you can supply parameters from the FINDER if you have a text editor. You will quit back to whatever launcher you use. If you want, rename SWCP. The ".DEF" is appended to whatever you call SWCP. ------------------------- Some Application Examples ------------------------- 5.25 Smartport Floppies ----------------------- With the GS, you seldom need to access the 5.25 drives anymore. With SWCP, you can leave you default slot 6 setting as "your card" and just switch in the floppy when you need it with: I6 PC Transporter Application -------------------------- Suppose you have a PCT and a hard drive (my particular problem). I like the HD in slot 7 because from it I can get to the slot 5 or 6 floppies. If you run copy protected programs you know that can be a must. The flavor of MSDOS that I run is very mouse-less, and so S4 would be a perfect slot for the PCT. The normal problem with putting the PCT in S4 is that the mouse IS used on the GS, and it needs to be around when MSDOS finishes. But with SWCP you can use: /HARD1/MSDOS/AEPC.SYSTEM;E4 When you quit from MSDOS, your mouse function is restored. PCT stuff --------- Choose your slot for the PCT based on what you need available from ProDOS and/or MSDOS. Slot 6 is perfect. Slot 5 is fine if you dont ever use the PCT ramdisk or connected drives from ProDOS. If you dont use the comm port from MSDOS, slot 2 makes a lot of sense. An example of using slot 4 was given above. If you use the PCT ramdisk or drives from ProDOS, make sure your default slot setting is such that the card is seen when you power up your machine, or more specifically when you run the AE modified PRODOS file that installs the PCT drivers. Comm Program Application ------------------------ I use a comm program (TIC) which must run in slot 2. I also have a hard disk there for convenience when I run APW. It doesnt need to be there when I use the modem, so I switch in the internal port only while I'm online: /HARD1/TIC/TIC;i2 and of course the PCT uses the serial port so you would modify the earlier example to /HARD1/MSDOS/AEPC.SYSTEM;e4i2 An Applesoft Startup application -------------------------------- The above examples show some basic slot switching. When I run text programs, I like to use different text colors. For instance I run TIC in one set of screen colors then switch to different settings when running John Tierney's Maug Message Manager. MMM launches through Applesoft and requires a startup string, so I use this PROSEL construct: PREFIX: /HARD1/APPS/MMM APPLICATION: /HARD1/UTIL/SWCP STARTUP: /HARD1/BASIC.SYSTEM;MAUG.MSG.MGR;T12B0D0 but actually use the PROSEL abbreviations: PREFIX: ?APPS/MMM APPLICATION: ?SWCP/SWCP STARTUP: ?];MAUG.MSG.MGR;t12b0d0 and get around the editor's limitation on startup length. Booting 3.5's ------------- Often you have a special program that will only work if you boot it off of a floppy disk. Copy protected disks immediately come to mind, but programs based on older operating systems also fall in that category. If you normally boot from that device, then you can just reset and boot the device. However, if you boot from hard disk or rom, all you really want to do is a temporary boot of the 3.5 without affecting the permanent startup setting. PDP5RB will usually work. That will kill any desk accessories you have running. In addition, if you use Appletalk there may be problems, so you may find that a "classic" boot variation works better: PDP5BS5 Remember, making slot 5 the startup device will change the slot mapping arrangement of smartport devices if you normally boot from rom or /RAM5. Booting 5.25's -------------- This is very similar to booting the 3.5 floppies. In many cases you also have to worry about setting speed to slow, and possibly changing display settings. SWCP will let you build whatever combination you want. This one works for most programs. PDI6P6SSRB As with the 3.5 disks, vary the command according to your particular requirements. ------------------- Miscellaneous Stuff ------------------- I am always looking for ways to improve SWCP. If you've got a suggestion, please share it with me. Many of the useful features of SWCP have evolved that way. I am curious about how you may be using the program, be it with digitizers, tape backups, sound boards, hard disks, printers, scanners, CD rom,.. or just your favorite software program. Unless you use the hex input, I dont think you will get in much trouble. However, prudence dictates that I warn you that I will not be held liable for any damage or problems to hardware or software beyond the purchase price of SWCP. Just in case you do switch your way to infinity somehow, you might want to keep some bootable floppies (system disks) handy to get you back on your way. You can also reset control panel defaults by powering up with the option key held down and selecting "2" for 60Hz and default settings. There are a lot of hardware and switching combinations. Obviously I can't test them all to know whats best for you. Let me know about any bugs and I'll try to fix them. If you have a problem, include a description of hardware involved, default slot settings, as well as what software was used and what sequence of events generated the problem. Be sure to let me know what revision of SWCP you are using. Shareware --------- Please respect the shareware nature of this program. It is set up this way for two main purposes: 1) To let me know that the Apple market appreciates this kind of program and 2) So I can provide you better support as well as notify you of significant future upgrades. As an incentive, if you send in the fee, I'll tell you how to remove the oppressive "beg-for-money" shareware screen. Registered owners can get the latest revision of SWCP on disk for $5 (US dollars). Other Useful Programs --------------------- John Intondi has designed a nice ProSel Screen for driving SWCP called ENVIRONMENT. It contains options for changing many common CP setups including booting very quickly. Look for ENVI.BQY. Loren Damewood has written a set of system programs to switch the control panel. These programs are small but fast and you dont have to worry about parameters. Look for QUIK.BNY and SHRTCU.BNY. The DHRFIX method used in SWCP comes to you through the kind generosity of Rick Oshlo, DHRFIX.BNY has details on it. Thanks to.. ----------- ..everyone who has contributed very useful suggestions for upgrades, fixes, and neat ideas. Special thanks to those who take the time to write. I hope you like the results. Special thanks to Dave Hill for assisting with 16 bit launch testing. The program is dedicated to the kind and helpful people of the Compuserve Maug(tm) forum. Tim Grams P.O. Box 462283 Garland, Tx 75046-2283 USA Compuserve 73537,2601 AppleLink PE Tim Grams Genie TGRAMS