@database AmiSlate.guide @author Jeremy Friesner @wordwrap @node Main "Contents" @{b}@{u}AmiSlate V1.4@{uu}@{ub} by @{"Jeremy Friesner" link Me} AmiSlate is a program that allows you to draw pictures or play graphical type games with a friend over an AmiTCP or AS225 Internet link. NOTE: AmiSlate 1.4 is not compatible with v1.3 and lower! Weird things will happen if you attempt to connect the two. Make sure anyone you connect to has the latest version! @{"Disclaimer" link Disclaimer} Don't blame me! @{"Distribution" link Distribution} AmiSlate is DonationWare (tm) @{"Requirements" link Requirements} What do I need to run this program? @{"Introduction" link Introduction} What does AmiSlate do? @{"Installation" link Installation} How do I set AmiSlate up? @{"Using AmiSlate" link UsingAmiSlate} How to run AmiSlate @{"Credits" link Credits} Where it's due @{"Acknowledgments" link Acknowledgments} Thanks to... @{"ARexx" link ARexx} AmiSlate supports ARexx!! @{"Included Scripts" link IncludedRexxScripts} Games and Stuff @{"History" link History} Bug fixes and enhancements @{"Future" link Future} What next? @{"Known Problems" link KnownProblems} Bugs! Aack! @endnode @node Installation "Installation" To install AmiSlate, either run the supplied Installer script, or follow the directions below. Note that if you are upgrading from AmiSlate 1.0 or 1.1, you will need to manually edit your inetd.conf file to change the word "wait" on AmiSlate's line to "nowait". The Installer script isn't smart enough to do this for you. If you want to run AmiSlate without using its TCP connection capability, then installation is simple. You will only need to do steps 1, 4 and 5, below. If you want to connect to another person, on the other hand, then installation is a bit harder. However, follow the steps below and you should be OK. (Note: this is what works for me under AmiTCP 3.0B2-- AS225 or other versions of AmiTCP may vary slightly, so if you find a discrepancy, please tell me about it! To install for AS225, replace all references to amitcp: below with references to inet:, and all references to AmiSlate_AmiTCP to AmiSlate_AS225) 1) Copy the AmiSlate_AmiTCP executable to where you want it to be. I put mine in amitcp:bin, so if you put it elsewhere, substitute that directory wherever you see amitcp:bin, below. 2) Add the following line to the end of your amitcp:db/services file: AmiSlate 2955/tcp 3) Add the following line to the end of your amitcp:db/inetd.conf file: AmiSlate stream tcp nowait root amitcp:bin/AmiSlate_AmiTCP 4) Copy the SlateRexx directory to wherever it is you want to keep it. 5) Copy the SlateScripts directory to wherever you want to keep it. 6) Edit your s:User-Startup (or whatever file you do all of your ASSIGNs in at system bootup) to assign the logical drive SlateRexx: to the directory where you are keeping your AmiSlate ARexx scripts. Also, assign the logical drive SlateScripts: to the directory where you want to keep your AmiSlate scripts (the binary recordings). For example, I keep my AmiSlate ARexx scripts in the directory dh0:AmiSlate/SlateRexx, and binary scripts in dh0:AmiSlate/SlateScripts, so I added the lines: assign SlateRexx: dh0:AmiSlate/SlateRexx assign SlateScripts: dh0:AmiSlate/SlateScripts to my s:user-startup file. 7) Re-start your computer (just to be sure of things), and try it out! @endnode @node Credits @{b}@{u}AmiSlate V1.4@{uu}@{ub} Created by @{"Jeremy Friesner" link Me} ARexx port created with ARexxBox by Michael Balzer Compiled with DICE C by Matt Dillon @endnode @node Me "How to reach me" Here are some ways to get in touch with me: by @{i}EMail: @{ui}jfriesne@ucsd.edu by @{i}SMail: @{ui}Jeremy Friesner, 4780 Mt. Longs Drive San Diego, CA 92117 @endnode @node Disclaimer This software comes with no warranty, either expressed or implied. The @{"author" link me} is in no way responsible for any damage or loss that may occur due to direct or indirect usage of this software. Use this software entirely at your own risk. @endnode @node Distribution "AmiSlate is DonationWare" AmiSlate is DonationWare. I've put a lot of time into it to make it as fun and useful as possible, so if you find AmiSlate to your liking and use it often, please consider sending @{"me" link me} a $5 or $10 donation, and in return I will send you future upgrades directly and give your suggestions preferred treatment. However, if you can't afford that or for some other reason don't want to send money, that's okay also. Just send me email telling me that you're using it, and list any suggestions that you have for improving it. :-) Furthermore, if you have any cool ARexx scripts that you've written for AmiSlate that you think should be included in the AmiSlate archive, please send me those. Permission is given to include this program in a public archive (such as a BBS, FTP site or PD library) providing that all parts of the original distribution are kept intact. These are as follows: Listing of archive 'AmiSlate.lha': Original Packed Ratio Date Time Name -------- ------- ----- --------- -------- ------------- 2273 563 75.2% 27-Jan-96 19:05:06 AmiSlate.info 95864 47060 50.9% 27-Jan-96 19:04:58 +AmiSlate_AmiTCP 2003 1327 33.7% 27-Jan-96 19:04:58 +AmiSlate_AmiTCP.info 96212 47287 50.8% 27-Jan-96 19:04:58 +AmiSlate_AS225 2003 1328 33.6% 27-Jan-96 19:04:58 +AmiSlate_AS225.info 2228 518 76.7% 27-Jan-96 19:04:58 +Doc.info 50739 18683 63.1% 27-Jan-96 19:05:00 +AmiSlate.guide 4274 1247 70.8% 27-Jan-96 19:05:00 +AmiSlate.guide.info 40770 12309 69.8% 27-Jan-96 19:05:00 +AmiSlateRexx.guide 4274 1249 70.7% 27-Jan-96 19:05:00 +AmiSlateRexx.guide.info 3067 1289 57.9% 27-Jan-96 19:05:06 +EditTextFile.rexx 2273 563 75.2% 27-Jan-96 19:05:04 +ExampleRexx.info 1692 785 53.6% 27-Jan-96 19:05:04 +boxme.rexx 2177 964 55.7% 27-Jan-96 19:05:04 +constants.rexx 309 196 36.5% 27-Jan-96 19:05:04 +easyreq.rexx 176 132 25.0% 27-Jan-96 19:05:04 +getpixel.rexx 296 176 40.5% 27-Jan-96 19:05:04 +onoff.rexx 566 309 45.4% 27-Jan-96 19:05:06 +raster.rexx 377 231 38.7% 27-Jan-96 19:05:06 +remote.rexx 446 266 40.3% 27-Jan-96 19:05:04 +remotestringreq.rexx 2521 996 60.4% 27-Jan-96 19:05:04 +wait.rexx 8253 2627 68.1% 27-Jan-96 19:05:00 +Install_AmiSlate 1645 1259 23.4% 27-Jan-96 19:05:00 +Install_AmiSlate.info 1755 927 47.1% 27-Jan-96 19:04:58 +README 1096 487 55.5% 27-Jan-96 19:04:58 +README.info 2273 567 75.0% 27-Jan-96 19:05:04 +SlateRexx.info 32867 8769 73.3% 27-Jan-96 19:05:02 +backgammon.rexx 18494 5399 70.8% 27-Jan-96 19:05:04 +checkers.rexx 39433 9356 76.2% 27-Jan-96 19:05:04 +chess.rexx 1708 792 53.6% 27-Jan-96 19:05:02 +coords.rexx 1499 747 50.1% 27-Jan-96 19:05:00 +diamond.rexx 9210 3062 66.7% 27-Jan-96 19:05:02 +displaytext.rexx 888 496 44.1% 27-Jan-96 19:05:02 +explode.rexx 1055 558 47.1% 27-Jan-96 19:05:02 +explode2.rexx 1329 715 46.2% 27-Jan-96 19:05:04 +flower.rexx 1820 849 53.3% 27-Jan-96 19:05:02 +ghostcircle.rexx 3539 1361 61.5% 27-Jan-96 19:05:00 +Mandelbrot.rexx 1945 853 56.1% 27-Jan-96 19:05:02 +qix.rexx 1108 601 45.7% 27-Jan-96 19:05:02 +rainbowpen.rexx 18585 5166 72.2% 27-Jan-96 19:05:02 +reversi.rexx 5528 1883 65.9% 27-Jan-96 19:05:02 +simple.slatefont 3444 1565 54.5% 27-Jan-96 19:05:02 +surround.rexx 16166 3984 75.3% 27-Jan-96 19:05:02 +tictactoe.rexx 7109 2679 62.3% 27-Jan-96 19:05:00 +vector.rexx 2228 517 76.7% 27-Jan-96 19:05:04 +SlateScripts.info 11528 6183 46.3% 27-Jan-96 19:05:04 +Welcome.script -------- ------- ----- --------- -------- 509045 198880 60.9% 27-Jan-96 19:05:34 46 files No charge may be made for this program, other than a @{i}reasonable@{ui} copying fee, and/or the price of the media. @endnode @node Requirements AmiSlate requires an Amiga running Kickstart V37 (WorkBench 2.04) or higher to operate. AS225 or AmiTCP (3.0b or higher), an Internet connection, and a friend are not required, but life is definitely more fun if you have them :) AmiSlate opens the following libraries and devices: Library Minimum Version # ------- ----------------- intuition.library 37 graphics.library 37 gadtools.library 36 asl.library 37 icon.library 33 rexxsyslib.library 36 (AmiSlate will run without this) bsdsocket.library 2 (AmiSlate will run without this) iffparse.library 37 (AmiSlate will run without this) Device ------- timer.device @endnode @node Introduction Please read the @{"History" link History} section for information on changes and bug-fixes. AmiSlate is a program that lets you and a friend paint together on the same canvas, using two different Amigas that are connected by the AmiTCP AS225 networking packages. It also allows recording and playback of your paintings, and has extensive ARexx support that allows AmiSlate to be used as a base for simple network-aware @{"games" link IncludedRexxScripts} and other things. AmiSlate lets two communicating sessions be on screens of different sizes and depths; colors transmitted will be mapped to the closest color available on the remote client's palette. However, AmiSlate demands that the window size of both sessions be the same; when one client resizes its window, the other client will resize its window as well. Thus, if your AmiSlate window seems to be resizing itself spontaneously, blame your friend on the other end of the connection. ;-) @endnode @node UsingAmiSlate "Using AmiSlate" @{"The GUI" link GUI} Where do I click? @{"Startup options" link Startup} Command line arguments & ToolTypes @{"Menu options" link Menus} Explanation of cryptic menus @{"Keyboard Shortcuts" link Keys} For people too lazy to use the mouse @{"Serving Suggestion" link ServingSuggestion} Hints @endnode @node Keys There are keyboard equivalents in AmiSlate for most options available in the menus; those items with keyboard equivalents have the equivalent listed next to the item. Most keys, if pressed, will transmit a character to the "chat line" at the bottom of the window. There are a few "special" keys, however. To control palette selection, (at least until I put in a real palette requester) AmiSlate uses the DeluxePaint style of palette control keys, on the numeric keypad. The keys are as follows: keypad 1 : Decrement Blue in selected color keypad 2 : Increment Blue in selected color keypad 3 : Remove all Blue from selected color keypad 4 : Decrement Green in selected color keypad 5 : Increment Green in selected color keypad 6 : Remove all Green from selected color keypad 7 : Decrement Red in selected color keypad 8 : Increment Red in selected color keypad 9 : Remove all Red from selected color Note that if you have "Lock Palettes" selected, then palette changes will also affect the remote user's screen. Otherwise, they won't. @endnode @node GUI "The AmiSlate GUI" When started without any arguments, AmiSlate opens a requester to allow you to select what type of screen you wish to draw on. You may use this requester to pick either the WorkBench screen or your favorite type of Custom Screen. Note that at the moment, you can only use a Public Screen by specifying it as a Tooltype or command line argument. After you've selected a screen type, AmiSlate will open a window to draw in. Most of the window is taken up by the drawing area, but there are several areas around the right and bottom edges which have different uses: @{"The Toolbar" link ToolBar} - On the upper portion of the righthand side @{"The Palette" link Palette} - Below the Toolbar @{"The Chat Lines" link Chat} - Along the bottom of the window @{"The Menus" link Menus} - In the traditional Amiga menu spot :) @endnode @node ToolBar "The Toolbar" The Toolbar consists of eight little icons that run along the right side of the window. Any resemblance these have to Deluxe Paint icons, is of course complete and total coincidence ;-). Seriously, if you have ever used Deluxe Paint or any other half decent paint program, then these are probably self explanatory, but here's the rundown anyway: Starting from the upper left: The Dot Tool : Allows you to draw dotted lines by dragging the mouse. The Pen Tool : Allows you to draw connected lines by dragging the mouse. The Line Tool : Allows you to draw straight lines by... oh, you know how. The Circle Tool : Allows you to draw filled or empty circles and ellipses by dragging the mouse from the center of the circle until both radii are where you want them. Clicking on the upper left portion of this icon produces empty circles, while the lower right produces filled ones. The Square Tool : Allows you to draw filled or empty rectangles by dragging from one corner of the rectangle to the other. Select Filled or unfilled just as with the circle tool. The Polygon Tool: This allows you to draw shapes out of straight lines. (Sorry, no filled polygons yet!) Click once or draw out a line to start the polygon; you'll notice a little square appear on the polygon tool's icon. This indicates that a polygon draw is in progress. Click or drag out the next line of the polygon, and continue repeating this for as long as you want. When you are done drawing lines, either connect the last line to the original point of the polygon, or click on a Toolbar icon to reset the Polygon tool. The Flood Tool : Does a "Flood Fill" of the current color at whatever location in the drawing you click on. The Clear Tool : Clears the drawing window. Note that these tools can have their effects redefined by an ARexx script; if you want their original functions back, quit the ARexx script or @{"abort" link RexxMenu} it. @endnode @node Palette "The Palette" The Palette lets you choose the color you wish to draw with. The current drawing color is shown as "depressed" in the palette array, and the others are shown as "raised." The neat thing about the palette is that it automatically reconfigures itself in accordance with your window and palette size. Well, at least I think it's neat :-) @endnode @node Chat "The Chat Lines" The Chat lines allow you to converse more easily with the person you are connected to over a TCP link. They operate rather simply; If you press a key, it goes into the local chat line (the lower one), and the letter pressed will be sent to the other person's computer as well, where it will show up on the remote chat line (the upper one). The same thing goes in reverse for him/her. The delete and backspace keys can be used to remove boo-boos, but text that has scrolled off the screen cannot be recovered. Resizing or clearing the window will clear the chat lines. @endnode @node ServingSuggestion "Serving Suggestion" AmiSlate is designed to run as well as possible on a variety of screen sizes and depths. It is also designed to be able to connect between two users who are not running the same screen type. To do this, AmiSlate uses a palette matching scheme where colors are transmitted as 12-bit RGB values and the receiving computer uses the color with the "best fit". This will work, but may lead to less than the best results if the displays differ too greatly. (Specifically, two different colors on a deep display might match to the same color on a more shallow one, causing confusion to the user of the lesser palette, and possibly confusing the flood fill tool as well) To minimize color matching problems, it is best to run AmiSlate on a screen as much like your peer's as possible. When you receive an AmiSlate connection request, you will be given some information about your partner's screen at the bottom of the screen mode requester. Try to use a screen with the same depth as your partner. Furthermore, the color matching scheme will work best if you and your partner @{"Lock Palettes" link OptionMenu}. If you are using the same Screen Depth, this will guarantee a one to one, exact palette match. AmiSlate is designed to handle many operations simultaneously; it is possible to have both users drawing at once, and it is even possible to have the users drawing at the same time as ARexx scripts are drawing. In practice, however, such heavy loading of AmiSlate may lead to problems. If you are experiencing problems with AmiSlate during "heavy drawing", try easing off a little to let AmiSlate catch its breath. If you find a problem that is reproducible, email @{"me" link Me} about it so that I can try to fix it. @endnode @node IncludedRexxScripts "Rexx Scripts included with AmiSlate" There are several ARexx scripts included with AmiSlate; I intend to add to the collection as AmiSlate grows. To launch any of these, use the "Execute ARexx script" option in the Rexx menu, or if they are listed explicitely in the ARexx menu, you may simply select them. If you wish to manually launch them, you may do so by opening a CLI and typing rx LOCAL Where is the filename of the script, and is the ARexx port you wish it to communicate with. (usually AMISLATE) Also make sure you have your SlateRexx: directory set up as per the @{"Installation" link Installation} instructions, and that these scripts are in the SlateRexx: directory. AmiSlate uses the SlateRexx: assign to find these scripts, so it must be set properly. (The Installer should handle this for you) Note: All games involve two players. If you wish to play over a TCP link using two machines, only one person should execute an ARexx script themselves. The ARexx scripts know how to start another ARexx instantiation on the remote machine. (After asking the remote user's permission, of course) To play on one machine, simply start the ARexx script while AmiSlate is not connected to anyone. Chess - Mediates a game of chess. To play, just click and drag a piece where you want it to go. Castling is done by dragging the king onto the rook you want to castle with. For now, CheckMate isn't detected (it would make things even slower than they are!). Oh yeah, En Passant isn't implemented either, because I'm still a bit unsure as to what that is myself ;). Oh yeah, the person who initiates the chess game can control whether or not the chess pieces will be filled or line drawings. Click on the "dot" tool for line drawings, anywhere else for filled ones. TicTacToe - A cute little TicTacToe game. Simply click on the square you wish to put your mark in. Checkers - Lets you play checkers. To move a piece, click on it, and then click on where you wish to move it to. In this version of checkers, you are not forced to jump just because you have the opportunity. (because I *HATE* that!) Reversi - Lets you play Reversi (also known as "Othello"). Just click on the square you want to place your piece in. If you believe you don't have any possible moves and wish to forfeit your turn, click on one of the tools in the ToolBox. Backgammon - A nice game of Backgammon, complete with dice and the little cup to shake them in. ;) Click on the cup to roll the die, and move a piece with the same technique described to move checkers. Backgammon will mark the spikes that you are allowed to move to. The "doubling die" isn't implemented. Surround - A simple script to play a game of Snake/Surround/Tron/whatever with the arrow keys. You can play by yourself or two people can play, each by starting it on his/her own machine. DisplayText - Draws vector text on the canvas for you. When run, you are presented with a box represents the area the text will occupy. You can move it around, or hold down the left mouse button and move the mouse to resize it. Then press return when it's positioned how you want it. Then type your text into the requester that appears. The text will be previewed for you. You can then choose whether or not you want to keep it. Mandelbrot - Generates a colorful Mandelbrot plot on the AmiSlate window. This script was submitted for inclusion into the AmiSlate archive by Johan Torin. Vector - Draws and animates a 3D cube or ball. This script was submitted for inclusion into the AmiSlate archive by Johan Torin. Coords - Places a continually updating display of the current mouse coordinates and button status in AmiSlate's title bar. If you are connected to a peer who is broadcasting her mouse coordinates, it will display those as well. RainbowPen - Cycles the current Foreground pen through the user's palette so that when you draw, you get a neat "rainbow" effect. Flower - A line "orbits" around the center of the drawing area to make a cute little design. Qix - Draws an animated line that bounces around your screen. The line uses XOR mode, so your drawings will not be affected. For extra fun, run two or three of these at once, on one or two computers. Watch AmiSlate beg for mercy ;-) BoxMe - Just a dorky little demo of the interactive capabilities of AmiSlate ARexx; Draws a box around the current mouse position whenever you press or let go of the mouse button. Diamond - Remember those "make curves out of straight lines" projects that you dazzled all of your friends with in the third grade? Well, this draws four of them to form a diamond in the user's current pen color. Explode - Draws 300 lines worth of violent explosion on your window :) Explode2 - Draws a little explosion whenever you click or let go of the mouse button. GhostCircle - A little XOR circle follows your mouse pointer around the canvas. This script demonstrates mouse polling via the WaitEvent timeout feature. @endnode @node ARexx AmiSlate contains extensive support for ARexx scripting. AmiSlate's ARexx port is designed to run concurrently with the user's input, rather than "taking over" control from the user. This means that your ARexx scripts can be highly interactive, even down to the level of interpreting mouse clicks from the user! Documentation on ARexx commands is included in this archive, in the file AmiSlateRexx.guide. Also included are several example/test scripts in the ExampleRexx directory, and even a few modest @{"games and applications" link IncludedRexxScripts} in the SlateRexx directory. @endnode @node Startup "Starting AmiSlate" AmiSlate can be started from either the Shell or the WorkBench. It supports a few command line arguments. Each of these arguments also has a ToolType equivalent. Look in the AmiSlate icon for examples of these ToolTypes--they are there, just commented out with parentheses. If you specify no arguments on the command line, AmiSlate will try to find parameters in an icon with the same name as the executable. Template: AmiSlate WBSCREEN/S,TOP/K/N,LEFT/K/N,WIDTH/K/N,HEIGHT/K/N, PUBSCREEN/K,REXXOUTPUT/K,REXXOUTPUT/K,OUTQUEUE/K/N, TRANSMITPOINTER/S,LOADIFFPALETTES/S,NOEXPANDWINDOW/S, NOPROTECTPENS/S,REXXMENU1/K,REXXMENU2/K,{...} @{"WBSCREEN/S" link WBScreenArg} Opens AmiSlate window on Workbench screen @{"TOP/K/N" link TopArg} Assigns default Y co-ordinate to window @{"LEFT/K/N" link LeftArg} Assigns default X co-ordinate to window @{"WIDTH/K/N" link WidthArg} Assigns default width to window @{"HEIGHT/K/N" link HeightArg} Assigns default height to window @{"PUBSCREEN/K" link PubScrArg} Opens AmiSlate on given Public Screen @{"REXXOUTPUT/K" link RexxOutArg} Sends Rexx scripts' output to given file @{"OUTQUEUE/K/N" link OutputQArg} Sets size of Output Queue @{"TRANSMITPOINTER/S" link TransmitPointerArg} Sets default for menu item @{"LOADIFFPALETTES/S" link LoadIFFPalettesArg} Sets default for menu item @{"NOEXPANDWINDOW/S" link NoExpandWindowArg} Sets default for menu item @{"NOPROTECTPENS/S" link NoProtectPens} Sets default for menu item @{"REXXMENU#/K" link RexxMenuArg} Assigns a script to a menu item (# = 0-9) @endnode @node RexxMenuArg "REXXMENU#/K" REXXMENU1 through REXXMENU0 allow you to keep your favorite ARexx scripts just a keypress or menu select away. Any ARexx script that you specify in one of these arguments will be put as a menu item in the Rexx menu. The path and .rexx extension (if any) will be stripped from the name in the menu, but will be remembered by the program. Usage Example: AmiSlate REXXMENU1=SlateRexx:Chess.rexx @endnode @node OutputQArg "OUTQUEUE/K" AmiSlate is designed never to block input from the user. (Well, at least as close to never as possible) However, it may be the case that the remote AmiSlate client is not yet able to accept data from the local client; in this case, AmiSlate puts the data generated by user commands into a local queue, and sends it as soon as the remote client is ready for it. Data is not lost until the queue is filled. This keyword allows you to set the size of the queue (the default is about two kilobytes). To set the size of the queue, specify it in bytes, as shown. A large outqueue will keep AmiSlate from "locking up" during large data sends, like IFF transmission. A small queue will use less memory. Usage Example: AmiSlate OUTQUEUE=12000 @endnode @node RexxOutArg "REXXOUTPUT/K" This keyword allows you to specify a destination for any console output that ARexx scripts run by AmiSlate might produce. It is useful for debugging your ARexx scripts. Usage Example: AmiSlate REXXOUTPUT=ram:myrexx.out or, more fun: AmiSlate REXXOUTPUT=speak: @endnode @node WbscreenArg "Workbench Screen" This keyword causes AmiSlate to appear on the Workbench Screen. Usage Example: AmiSlate WBSCREEN @endnode @node PubScrArg "Specify a Public Screen" This allows you to specify the name of a Public Screen upon which you want the AmiSlate window to appear. If a Public Screen with the given name does not exist, AmiSlate will fail with a "Couldn't lock public screen!" error. Remember, with Public Screen names, alphabetical case counts! Usage Example: AmiSlate PUBSCREEN=MyPubScreen @endnode @node HeightArg "Specify window height" This allows you to set the height of the AmiSlate window. Usage Example: AmiSlate HEIGHT=250 will make the AmiSlate window 250 pixels tall. @endnode @node WidthArg "Specify Window width" This allows you to set the width of the AmiSlate window. Usage Example: AmiSlate WIDTH=350 will make the AmiSlate window 350 pixels wide. @endnode @node LeftArg "Specify window X-coordinate" This allows you to set the horizontal position of the AmiSlate window. Usage Example: AmiSlate LEFT=60 will make the AmiSlate window appear 60 pixels from the left of the screen. @endnode @node TopArg "Specify window Y-coordinate" This allows you to set the vertical position of the AmiSlate window. Usage Example: AmiSlate TOP=60 will make the AmiSlate window appear 60 pixels from the top of the screen. @endnode @node TransmitPointerArg "Specify whether or not to Transmit the Pointer" This argument allows you to set the initial state of the @{"Transmit Pointer" link OptionMenu} option in the Option Menu to "checked". By default, this menu option is unchecked. Usage Example: AmiSlate TRANSMITPOINTER @endnode @node LoadIFFPalettesArg "Specify whether or not to load IFF Palettes" This argument allows you to set the initial state of the @{"Load IFF Palettes" link OptionMenu} option in the Option Menu to "checked". By default, this menu option is unchecked if the AmiSlate window is opened on the Workbench screen or public screen, and checked if the AmiSlate window is opened on a custom screen. This startup argument can be used to override that logic. Usage Example: AmiSlate LOADIFFPALETTES or AmiSlate LOADIFFPALETTES=TRUE will ensure that the @{"Load IFF Palettes" link OptionMenu} option is checked, no matter what screen the AmiSlate window opens on. Conversely, AmiSlate LOADIFFPALETTES=FALSE will ensure that the @{"Load IFF Palettes" link OptionMenu} option is not checked. @endnode @node NoExpandWindowArg "Set initial state of Expand Window option" This argument allows you to set the initial state of the @{"Expand Window" link OptionMenu} option in the Option Menu to "unchecked". By default, this menu option is checked. Usage Example: AmiSlate NOEXPANDWINDOW @endnode @node NOPROTECTPENS "Set initial state of Protect GUI Pens" This argument allows you to set the initial state of the @{"Protect GUI Pens" link OptionMenu} option in the Option Menu to "unchecked". By default, this menu option is checked. Usage Example: AmiSlate NOPROTECTPENS @endnode @node Menus "AmiSlate menus" AmiSlate has a few menus for you to play with... @{"Project" link ProjectMenu} - The usual @{"TCP" link TCPMenu} - Network connection and disconnection @{"Script" link ScriptMenu} - Draw recording and playback @{"Options" link OptionMenu} - Other random stuff @{"Rexx" link RexxMenu} - Launch and abort ARexx scripts @endnode @node ProjectMenu "Project Menu" Open IFF - Allows you to load an IFF-ILBM graphic file into AmiSlate. The file can be up to 256 colors deep, and any size (although it may be cropped if it's too big for your window/screen. Note that loading an IFF can be slow, especially if it has lots of color changes (such as a photograph). Also note that the colors of the IFF are not guaranteed to be preserved 100% accurately. Open Brush - Works much like Open IFF, only you are prompted to choose the position of the graphic on the canvas. The window will not be resized when using this option. Save IFF - Saves the drawing canvas to an IFF-ILBM file. About - Opens a leetle info-window about @{"me" link Me} and the program. Quit - Makes AmiSlate go away. @endnode @node TCPMenu "TCP Menu" This menu controls connecting and disconnecting to a remote Amiga that has AmiSlate installed. Connect - Connect to a given host. Note that you don't need to specify the user's name at that host, just the computer's name. Disconnect - Sort of the Internet equivalent of hanging up, I suppose. This menu is only enabled if you have AmiTCP or AS225 running when AmiSlate is started. @endnode @node ScriptMenu "Script Menu" This menu controls the recording and playback of AmiSlate's proprietary "scripts". These are NOT ARexx scripts; if you don't believe me, try loading one into your text editor ;). For ARexx scripts, check out the @{"Rexx" link RexxMenu} menu. Play Script - Select a previously recorded script for playback. Record Script - Start recording drawing events to the file you specify. To stop recording, select this item once again. Append Scripts - If this item is checked, and the user chooses the name of an existing file as the output destination of the "Record Script" command, then AmiSlate will add the new data to the end of the old file. Otherwise, AmiSlate will overwrite the old file. @endnode @node OptionMenu "Options Menu" This menu controls options that didn't really belong to any of the other menus. IFF Load - There are three subitems under this option. They are as follows: Load Palette - When this is selected, @{"loading an IFF file" link ProjectMenu} will cause the screen colors to change to those of the IFF file's palette. If this is not selected, the IFF's colors will be mapped into the current palette instead. This option defaults to true for custom screens, and false for Workbench of public screens. Expand Window - While this is selected, any IFF file that is loaded into AmiSlate that is bigger than the size of the drawing canvas will cause AmiSlate to try and enlarge its window to accomodate the IFF. Protect GUI Pens - If this option is selected, pens 0, 1, 2, and 3 of AmiSlate's screen will not be overwritten during IFF palette loading or palette synchronization. This will keep the window border and gadgets looking normal, at the possible expense of some color accuracy in the pictures loaded. Safe Flood Fills - This option allows you to toggle between two different methods of transmitting flood fill information to a peer or file. If it is checked, AmiSlate will use @{"Safe Flood Fills" link SafeFlood}, otherwise AmiSlate will use @{"Not-So-Safe Flood Fills" link UnSafeFlood}. Lock Palettes - This option is only accessible if you are connected to another person. Selecting this item will cause your peer's palette to be copied to your palette. If your palette is the same size as your partners, this will guarantee that you are both using the same palette. If your palettes are not the same size, it will help, but a match is not guaranteed. Furthermore, as long as this item is selected, any adjustments made by one of you to his/her palette will be transmitted to the other person, thus keeping the palettes "In Synch". Transmit Pointer - This option is only accessible if you are connected to another person. If it is checked, the other person will be able to see your mouse pointer move around the canvas. Resynch to Remote - If things get out of whack, you can select this and your partners screen will be copied to yours, putting you back "in sync". Reset Palette - If your palette has been modified, selecting this will cause the screen palette to revert to its original configuration. Clear Chat Bar - Clears your outgoing portion of the Chat Bar. Identical to typing control-X. Send Bell - Causes a DisplayBeep on both the local and remote displays. Identical to typing control-G. @endnode @node SafeFlood "Safe Flood Fills" In Safe Flood Fill mode, AmiSlate will transmit (or store) a flood fill as a number of horizontal lines. Because the shape of the flood fill is transmitted (or stored), this ensures that any slight inconsistencies between screens (i.e. a missing pixel on the flood boundary) will not lead to enormously different results after the flood. This method is necessarily slower and more disk-space hungry than @{"the alternative" link UnSafeFlood}, but is much more reliable, especially in @{"less than optimal conditions" link ServingSuggestion}. @endnode @node UnSafeFlood "Not-So-Safe Flood Fills" In Not-So-Safe Flood Fill mode, AmiSlate will transmit (or store) a flood fill operation as a single set of co-ordinates and a color. The only error-checking done is to make sure that the color of the first pixel flooded over at the remote end is the same as the color of the first pixel flooded over locally. After that, the flood fill is left free to go its merry way. This can lead to some havoc if you aren't careful with it, but it is much less bandwidth and disk-space intensive than @{"the other way" link SafeFlood}. If you wish to use this mode, be sure to read the @{"Serving Suggestion" link ServingSuggestion}. @endnode @node RexxMenu "The Rexx menu" This mode controls the launching and aborting of ARexx scripts. Note that AmiSlate runs these scripts asynchronously, so that it is quite possible to have multiple ARexx scripts running at once. Doing this with scripts that make use of WaitEvent will most likely lead to undesirable results, because each script will only receive information about every other event. (Or every third event, if there are three, etc.) However, if you are running only non-interactive scripts (explode, flower, qix, etc.) you should be able to run several scripts simultaneously without problems. If your ARexx scripts start to get out of hand, select Abort Rexx Scripts to get rid of them. Execute Rexx Script - Allows you to select an ARexx script to run in conjunction with AmiSlate. Abort Rexx Script - Causes AmiSlate to send a Quit message to any Rexx script with a pending WaitEvent() call, then to close its ARexx port for a brief period. This should cause most ARexx scripts to go away. [Custom ARexx Command] - There are ten entries of this type in this menu. They default to "Unused ARexx Slot", and in their default state cannot be selected. However, using the @{"REXXMENU#" link RexxMenuArg} startup argument, you can program them to execute ARexx scripts of your choice. Once the program has been started, these cannot be changed. This menu is only enabled if you have ARexx running. @endnode @node Acknowledgments "Thanks" Thanks go to the following people: @{i}Matt Dillon@{ui} for DICE. @{i}Commodore@{ui} for the nifty computer and O/S. @{i}NSDi@{ui} for AmiTCP, which made AmiSlate possible. @{i}Pekka Pessi@{ui} for his help with AmiTCP related problems. @{i}Michael Balzer@{ui} for ARexxBox, which made the ARexx port coding ten billion times easier. @{i}Scott Ellis@{ui} for the source code to AmiPop, a nice TCP and AS225 programming example. @{i}Jayson Mondala@{ui} and @{i}Brian Gunn @{ui} for beta testing. @{i}Tim Koch@{ui}, for making life so bloody interesting... ;-) @{i}my friends@{ui}, and all the nice people on the Internet who helped me out with Amiga problems. @endnode @node History "What's new, what's old, what's changed" ( "-" = new feature, "*" = bug fix) 1.4 : (Released 1/27/96) * Fixed coords.rexx, which was broken. * Fixed a coordinate problem that appeared when people connected to people using screen fonts of differing heights. It was causing some ARexx scripts to run amok... * Clicking "CLR" no longer clears the chat lines. * The ARexx script launching no longer relies on the "rx" command. This should clear up the problems some people were having with launching ARexx scripts after running AmiSlate from the Workbench. * AmiSlate now properly opens and closes rexxsyslib.library, and if the library is not available, disabled the Rexx menu. * Rexx drawing no longer interferes with tools being dragged out. - Added @{"Checkers.rexx" link IncludedRexxScripts} to the included ARexx scripts directory. - Added @{"Backgammon.rexx" link includedRexxscripts} to the included ARexx scripts directory. - Added @{"Reversi.rexx" link includedRexxscripts} to the included ARexx scripts directory. - Added "Clear Chat Bar" item to the @{"Options Menu" link OptionMenu}. - Added "Send Bell" item to the @{"Options Menu" link OptionMenu}. - Added "Transmit Pointer" option to the @{"Options Menu" link OptionMenu}. - Added @{"TRANSMITPOINTER" link TransmitPointerArg} startup argument. - Added @{"LOADIFFPALETTES" link LoadIFFPalettesArg} startup argument. - Added @{"NOEXPANDWINDOW" link NoExpandWindowArg} startup argument. - Added @{"NOPROTECTPENS" link NoProtectPensArg} startup argument. - Added SETPENCOLOR ARexx command. - Added TRANSMITPOINTER ARexx command. - Added TRANSMITGRAPHICS Arexx command. - Added POINTERX and POINTERY return fields to the GETREMOTESTATEATTRS ARexx command. - Added REMMOUSEMOVE keyword to the WAITEVENT ARexx command. - Added REMX and REMY return values to the WAITEVENT ARexx command. - All board game ARexx scripts now set a standard palette when redrawing the board. This avoids some visual glitches during gameplay. - Coords.rexx can now keep track of the remote pointer, if the remote user is transmitting its position. - Reversi.rexx is now much faster, as it no longer automatically checks to make sure a move is possible. You must now click on one of the tools in the ToolBox to initiate the check. - Tab now works properly in the chat lines. - Now includes a version of AmiSlate that is compatible with AS225! - Rewrote much of the Installer to handle AS225 installation, etc. - Added the "Open Brush" menu item to the @{"Project Menu" link ProjectMenu} - Added TOP and LEFT keywords to the LOADIFF ARexx command. 1.3 : (Released 08/05/95) - If AmiSlate is started with no arguments, it will read arguments in from the icon associated with the executable (if there is one). This means that you can have startup arguments for a remotely initiated AmiSlate session, by placing an icon with (the AmiSlate executable that you have specified in amitcp:db/inetd.conf) - AmiSlate will also look at the icon tooltypes to try to fill in any ARexx scripts for the ARexx menu that you didn't specify on the command line. - Added the option to abort from script playback, IFF Loading, and flood fills via the escape key, and the ability to quit AmiSlate during all of the above via the close box. - GhostCircle.rexx now prompts the user for circle radius, and is faster. - Added @{"DisplayText.rexx" link IncludedRexxScripts} to the included ARexx scripts directory. - Added @{"Surround.rexx" link includedRexxscripts} to the included ARexx scripts directory. - Added @{"Coords.rexx" link includedRexxscripts} to the included ARexx scripts directory. - Added the MouseX, MouseY, and Button result fields to the WaitEvent ARexx command. - Added new result fields to the WAITEVENT ARexx commands return record. Namely: LastKey, MouseX, MouseY, and Button are now returned. - Added the MOUSEMOVE event to WAITEVENT's repertoire. - Upgraded ARexx scripts to take advantage of the above two additions - Implemented a (hopefully) somewhat better palette arbitration screen: now if there is pen contention (i.e. trying to stuff a 32 color pic into an 8 color palette), the higher colors will not replace the lower ones; rather the pens will be set to the "average" of the lower and higher colors. If you think this is worse than the old scheme, let me know! - Most Rawkey events are now detected by WAITEVENT and dealt with as KEYPRESS. (i.e. you can now use the arrow keys, etc. with ARexx scripts) * Changed the behavior of GETPIXEL so as not to cause error messages. * New radio button choice of "update/install" to Installer script * Fixed the chess game so that it runs properly under a 4-color screen. * Removed the 2000 pixel width limit on IFF pictures. * ARexx-drawn circles are now clipped properly on the bottom of the canvas. * The REXXMENU0 option now works. * Fixed a bug that would cause crashes if you did a WAITEVENT 0. 1.2 : (Released 5/25/95) - Now works with AmiTCP4.0! Actually, it always did, but the AmiSlate line in inetd.conf was slightly wrong. Changing the "wait" keyword to "nowait" fixes it. - Added (somewhat compressed) raster data transmission. - Added "Load IFF" and "Save IFF" features, along with more options in the Options menu (formerly the misc. menu) to support them. - Improved palette handling. Now loading a picture's palette and/or locking your palette to your partner's screen will assign colors to pens in the least disturbing manner possible. - Added four new ARexx commands, SetRaster, PutRasterPixels, LoadIFF, and SaveIFF. - Slightly improved fairness of task dispatching... AmiSlate instances running at low priority should no longer be completely taken over by "busy-waiting" ARexx scripts. - The timeout feature of the WaitEvent ARexx command is implemented. - There is now a nice Installer script included with the distribution. - The MouseMove queue is made shorter during Circle dragging to reduce needless "catching up" and make the tool more responsive. - added "GhostCircle" ARexx script - The ASL file requester will "remember" directories for IFF pics. - "Lock Palettes" now functions differently, and is always available regardless of any palette size. - When the Output Queue is completely full, AmiSlate will now switch to Synchronous transmission, instead of losing data. - AmiSlate's maximum window size is now set to the smaller of the two screen sizes in a connection, so there should be no more problems with one person sizing their window too large for the other person's screen. (Actually, there never were any problems with this, but it's "cleaner" now...) * Fixed a nasty bug that would cause the flood fill tool to sometimes go into an infinite recursion and eat all your memory. * The circle tool will no longer "seize up" when you drag the mouse off of the canvas. Rather, it will still resize in whatever dimension it still has room for. * The circle ARexx command now reduces the size of circles that are too large to fit on the screen, instead of failing. This makes it consistent in operation with the other tools. * The "in use" dot on the Polygon tool now is drawn in the correct place regardless of the screen font. * The "minimum window height" value now depends on the title font size. * The output queueing was broken. Fixed. 1.1 : (Released 3/24/95) - ARexx scripts now more informative if the user tries to run them manually from the shell. - Implemented DisplayBeep, SetUserFColor, and GetPixel Rexx commands. - Diamond.rexx now draws more cleanly. - Added Append Scripts option to script menu. - Added Castling, Pawn promotion, error messages, and filled/line mode to the Chess game. - Added Explode2.rexx to distribution. - Added customizable quick-run entries to the Rexx menu. - Typing "AmiSlate ?" from the CLI now gives a command template * Added Diagonal win lines to the TicTacToe game, and corrected a bug that caused win lines not to be drawn for player X in one-client mode. * SetFColor and SetUserFColor now return the pen number in rc2 instead of rc. ARexx was giving error messages whenever a high pen number was returned. * The ScreenMode requester now handles large font sizes and 3.0 style ListViews somewhat better. * Fixed an IntuiMessage leak that caused tools to stop working after about 3 seconds under AmigaDos 3.x. 1.0 : (Released 03/11/95) - First release. Undoubtedly full of bugs. @endnode @node Future "What's Next?" Note: These are things I'm thinking of implementing; Whether I actually implement them or not depends on how difficult they will be to implement and user response (both in the form of @{"communications" link me} and @{"donations" link Distribution}). - Implement palette mapping better. The current method is rather ad hoc. - Better control of screen selection - More ARexx scripts . More little screen-drawing ditties (Moire, etc.) . Other board games . Anything neat sent to me by users :-) . A script that ties in with DigiView to give a periodically updated remote video display. If only I hadn't sold my DigiView... - More ARexx commands as necessary (it's good to be the king!) - Implement Background Color support (a la DPaint with right mousebutton) - AS225 support - Bug Fixes Galore @endnode @node Knownproblems "Known Bugs and Other Problems" Here are the things that still don't work right with AmiSlate V1.4: - Incoming ARexx and network events are not processed while the user is choosing a position for a brush to load. - AmiSlate doesn't handle resizes well while positioning a brush. - Aborting ARexx scripts from the menu item can have a sllloooowww response time if a non-waiting ARexx script (like qix.rexx) is running. Try using the key-combination instead, for some reason it's faster. - Running multiple ARexx scripts from AmiSlate at once and then aborting all scripts can cause Enforcer hits, hangs, and even crashes. Be careful! - Background color pens/drawing are not implemented. - A few ARexx commands are not done. See AmiSlateRexx.guide for details. - You can select up to 8 bitplanes on any ScreenMode, not just up to the number of bitplanes that ScreenMode can actually do on your Amiga. - There is no en passant in the chess game. - An AmiSlate session that was started by inetd sometimes isn't able to connect to any other AmiSlate processes via the "Connect" menu item. Actually, it connects, but the connection is immediately closed (!?) - There is no accounting for aspect ratios of varying screenmodes. - Opening an IFF for the first time causes a 64 byte memory leak. - Resizing the window while in positioning mode for DisplayText.rexx causes garbage to be left on the screen. Don't do it. @endnode