updated: 1-26-92 Instant Graphics! Online Interpreter Copyright 1988-92 by Larry Mears All rights reserved. Version 2.17 by Larry Mears, Shareware Now with online point and click commands, and greater control over sound effects! INTRO Instant Graphics! Desk Accessory graphics terminal or Instant Graphics! Emulator for Interlink bring a whole new concept in online graphics and sound! Now see TRUE online graphics and hear sound and MIDI music over the modem! If you are tired of the bland VT52 colors that most ST BBS' offer, then you will be pleasantly surprised by the super fast graphics and sound this NEW terminal emulation unlocks! INSTALLATION Place IG.ACC in root directory of your boot drive A: or C: and select it from the menu bar to use, you have to stay in the accessory to see the graphics and hear the sound effects. The desk accessory has some features not found in the IG.EMU both have their own virtues use which best serves your needs. I use both at the same time, you need a 1mb ST or better to do that. If you only have 512K and are using the ACC with FLASH, drop all extra AUTO folder programs and ACCs. Boot up and run FLASH FIRST, do not select the ACC and then run FLASH. If you do FLASH will think there isn't enough RAM. At least this is how it is on my 1040ST running a 512K ramdisk to simulate a 520ST with 512K. The IG.EMU loads into INTERLINK just like your ANSI or ATASCII Emulator does. Just double click on the ??? for your "Style" of communications and away you go! If you do this with the RECORD feature on, then it can be done automatically for you when you boot up Interlink. If using a 512K ST with Interlink remove extra AUTO folder programs, all desk ACCs and choose STARTUP parameters from Interlinks dropdown menu, set the buffer to 28K and the RS232 to 8K and save then rerun Interlink from the desktop. This should free up enough RAM to load version 2.17 If it still bombs do the same thing and drop the buffer by 2K each time till it'll load in properly. Setting it to 28K should work WITHOUT ANY EXTRA transfer ".TXF" protocals loaded in should do it but I may be wrong, I just tried to simulate the 512K RAM condition. There are many good ramboards out there on the market and RAM is fairly cheap now go to a 1 meg if you can. SOME BACK GROUND IG does VDI graphics by way of a attention command sequence, simular to a Hayes modem, and interprets one letter commands and values up to 9999. It also does VT-52 graphics in their standard form or with special attention commands, thus allowing VT-52 graphics by choice, if the standard escape sequences aren't used. So what's so great about VDI? Well it means lines, circles, ovals, rectangles, fill patterns, system fonts, you can have BIG COLORED text any where on the screen. IG with a little help from the users out there could open a new door for telecommunications. This terminal would allow better game programs to be written for FOREM's doors. Another use is bar and pie charts. A good idea would be to have a online comic strip. Ascii publications such as ST-REPORT could embed graphics commands into their text for illustration purposes. There are lot's of possibilities and if I come up with anymore good ideas for commands I'll try incorporate them into the next version. SYNTAX IG is case sensitive. G# gets it's attention g# does not. commands can be chained with the > character but they can not exceed one line, unless you use the _ option (IG 2.13+) as the first digit in a number passed. In other words IG does not check for a linefeed or CR all the time, it will try to interpret it as a command, chain character, value, or value separator. Line noise will of course blow it's performance to shreds. Any non numerical character can be used as a value separator, I suggest a comma or space. I like to use a : to separate commands when chaining but you can use any non numerical character. If you don't use the chain character you have to have some character there anyway so why not a space, looks good and saves confusion. When using the W command the string is ended with the @ character and if chaining the next command comes directly after the @ no separator at all. OK, I guess you need to see some examples to study over. Chain example: G#I>0:k>0:s>4:g>2: G#A>3,8,1:B>0,0,639,149,1:A>1,1,1:C>2,2:B>30,15,610,134,1: G#E>4,18,0:C>3,3:W>170,35,Instant Graphics!@C>2,1: G#V>319,80,60,0,119:A>3,3,1:V>319,80,60,119,239:A>3,1,1: G#V>319,80,60,239,360:E>0,9,0:T>2,1,2:T>2,1,52: G#L>90,80,240,80:C>3,1:W>140,77,REST@ G#T>2,1,51:L>390,95,540,95:W>445,92,WORK@ G#L>390,60,540,60:W>445,57,PLAY@ G#p>24,19:We all wish it were that way! G#k>1:t>2:t>5:I>0:s>0:g>0: Notice the C directly after the @ in line number 3 and the colon at the end of the last line to keep the carriage return from being eaten as a value separator. If you want the carriage return and linefeed to not be present in your display use the ">" chain indicator and put a : after the last digit in the line. IG213+ allows splitting of lines with the _ character, the _ has to be used in place of the first digit in a value passed, see below. example below, for Medium Resolution: ( This example could be shrunk in size with the & command's READ DATA option it could elimnate all the L>'s but one. The line end points would ALL be read from the modem THEN plotted. ) G#I>0:k>0:s>4:g>2: G#L>206,35,225,44:L>225,44,236,112:L>236,112,226,_ 169:L>226,169,206,159:L>206,159,196,92:L>196,92,206,_ 35:L>206,35,226,169:L>225,44,206,159:L>236,112,196,92: G#L>411,30,433,39:L>433,39,443,106:L>443,106,432,163: G#L>432,163,411,152:L>411,152,400,86:L>400,86,411,30: G#L>411,30,432,163:L>433,39,411,152:L>443,106,400,86: G#L>329,83,334,75:L>334,75,345,80:L>345,80,350,93: G#L>350,93,350,114:L>350,114,345,121:L>345,121,334,117: G#L>334,117,329,104:L>329,104,329,83:L>288,84,293,77: G#L>293,77,304,81:L>304,81,309,94:L>309,94,309,115: G#L>309,115,304,123:L>304,123,293,118:L>293,118,288,105: G#L>288,105,288,84:L>329,83,288,84:L>288,84,273,87: G#L>273,87,283,92:L>283,92,309,94:L>309,94,350,93: G#L>350,93,365,90:L>365,90,355,85:L>355,85,329,83: G#L>329,104,288,105:L>288,105,273,108:L>273,108,283,113: G#L>283,113,309,115:L>309,115,350,114:L>350,114,365,111: G#L>365,111,355,106:L>355,106,329,104:L>345,80,304,81: G#L>304,81,283,92:L>283,92,283,113:L>283,113,304,123: G#L>304,123,345,121:L>345,121,365,111:L>365,111,365,90: G#L>365,90,345,80:L>334,75,293,77:L>293,77,273,87: G#L>273,87,273,108:L>273,108,293,118:L>293,118,334,117: G#L>334,117,355,106:L>355,106,355,85:L>355,85,334,75: G#L>278,90,283,103:L>283,103,278,111:L>278,111,273,98: G#L>273,98,278,90:L>257,90,262,103:L>262,103,257,111: G#L>257,111,252,98:L>252,98,257,90:L>278,90,257,90: G#L>283,103,262,103:L>278,111,257,111:L>273,98,252,98: G#L>360,87,365,100:L>365,100,360,108:L>360,108,355,95: G#L>355,95,360,87:L>381,87,386,100:L>386,100,381,107: G#L>381,107,375,95:L>375,95,381,87:L>360,87,381,87: G#L>365,100,386,100:L>360,108,381,107:L>355,95,375,95: G#L>257,94,261,102:L>261,102,257,108:L>257,108,254,99: G#L>254,99,257,94:L>236,95,240,103:L>240,103,237,108: G#L>237,108,233,100:L>233,100,236,95:L>257,94,236,95: G#L>261,102,240,103:L>257,108,237,108:L>254,99,233,100: G#L>381,90,384,99:L>384,99,381,104:L>381,104,377,96: G#L>377,96,381,90:L>401,90,405,98:L>405,98,401,103: G#L>401,103,398,95:L>398,95,401,90:L>381,90,401,90: G#L>384,99,405,98:L>381,104,401,103:L>377,96,398,95: G#L>236,98,238,102:L>238,102,237,105:L>237,105,235,101: G#L>235,101,236,98:L>216,99,217,103:L>217,103,216,105: G#L>216,105,214,101:L>214,101,216,99:L>236,98,216,99: G#L>238,102,217,103:L>237,105,216,105:L>235,101,214,101: G#L>401,93,403,97:L>403,97,401,100:L>401,100,399,96: G#L>399,96,401,93:L>422,93,423,97:L>423,97,422,99: G#L>422,99,420,95:L>420,95,422,93:L>401,93,422,93: G#L>403,97,423,97:L>401,100,422,99:L>399,96,420,95: G#t>5:I>0:s>4:k>1:g>0: You can execute commands on fly in the same line by having several G#'s. G#v 1:Turn inverse video on G#v 0:and back off. Notice the space between the command and the number, meaning don't chain and the colon after the numbers. The colon will be eaten by the routine that gets numbers from the modem. It has to know when to quit and any non numerical character gets swallowed. A colon after the commands parameters are passed looks good anyway, right? Shades of BASIC huh? Also the commands are case sensitive. A w is a totally different command than W , so be careful. There is a pause command called t lets you pause a screen, it sends a ^S times it and then sends a ^Q. Good for messages with multiple screens or long graphic welcome bulletins. Report bugs and comments to: ( IG online graphics interpreter author, write me a letter or send EMAIL to Larry Mears at FNET node 74 ) Don't be to hard on me I have many many many months into this project and made very little from it, actually it is a loss money wise. Don't be to picky but if you do find a bug capture the IG script that caused it with the graphics OFF then send it to me on disk or upload it to BIG CITY 205-880-9896 WWIVNET...email 1@2509. You could upload it into a EMAIL message if you like. Be sure to include a explaination of the bug as it may not be apparent to me, it may be a syntax error or something like that. Oh, need to know it is was the EMU or ACC and how much memory you have, what AUTO folder programs you run and other ACCs. Larry Mears 11027 Crestfield Dr. Huntsville, Alabama 35803 USA I'll try to fix bugs if I can but, I can not guarantee a fix and I will not be held responsible for any problems caused by use of this software. Just use Flash's or InterLink's buffer(unfiltered mode) to edit the graphic files. The Moody/Rau IGS editor is sort of like a paint program and worth having, a guy with a understanding of IG and a text editor can out do the IGS editor it is still great for doing CURVES or doing simple BBS menus. A IG programmer can always go in there and tweak the IG script with a text editor to soup up performance. Look for IG_ED00.ARC. It produces IG script compatible with IG 2.12 and above. New IG versions are written so that old IG script files are compatible. The IGS editor is a SEPERATE Shareware project from the IG EMULATOR and ACC, supporting the editor does not support the IG terminal and vice versa. Note that a ^C executed when IG is writing it's prompts will crash or exit the program, this could be fixed at the cost of several K of memory by using printf instead of Cconws, but memory is tight for half meg users. ============================================================================ KEYBOARD COMMANDS for IG.ACC ---------------------------- FUNCTION KEYS F10 cut graphics off ....Allows online entry of graphic commands. F9 cut graphics on ....Executes any graphics commands from the modem. Important! Default mode is graphics on. If typing in a graphics message on a BBS push F10 first. To view it push F9 and tell the BBS to list the message. Do not use ^S and ^Q while graphics commands are executing! F8 execute from file....Read a text file execute imbedded graphics commands. This allows off line composing. F7 read file only ....Read a text file ignore graphics commands. Note: When reading or executing text files it's ok to use ^S ^Q and ^C . F6 duplex toggle..... use half duplex on GENIE. F5 locks out the Resolution switch command. F4 MIDI playback on/off toggle. ( Default MIDI playback on! ) OTHER KEYS INSERT set baud ....Set baud 300 thru 9600 baud. Note: No default at startup, this is so when using FLASH and the ACC the baud remains the same as the host program. None of the other RS323 parameters are changed by this option only baud and I've not tested IG past 2400 baud. + Plus Sign ....MIDI out SYNC, If music is garbled hit it. CLR HOME restore ....Clear screen, restore resolution and colors. HELP screen ....Short list of keyboard commands. UNDO exit ....Exits Instant Graphics! Sets screen to 24 text lines, good to go back to "Flash/Interlink". LEFT SHIFT+UNDO ....Exits Instant Graphics! Sets screen to 25 text lines, use when exiting to the Desk Top. ################################################################################ !!!! PLEASE READ NEW CHANGES FOR IG214+.EMU FOR INTERLINK !!!! See the entries under UNDO and the INSERT keys also half duplex must now be set with control+shift+p . This was necessary in order to steal the MOUSE from Interlink so POINT and CLICK menus could be done online. It also keeps that annoying STATUS line from popping up in your graphics when you've already got rid of it! It gives IG the FUNCTION keys too, so I might use them for special features later on. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - KEYBOARD COMMANDS for IG.EMU ---------------------------- UNDO ....Give MOUSE and FUNCTION keys to Interlink till another character is received via the serial port while graphics are ON. Tap once when BBS is waiting for input, such as at logon when the BBS is asking for name/password, then hit your Function key to shoot out your name/password to the BBS. Use the same way for file transfers, tap UNDO then hit F2. The Interlink status line can be updated also this way. Tap UNDO while BBS is waiting for input from you and your Interlink status line will update until another character is received via the serial port. Same goes for using the Interlink Mouse buttons to jump to Interlink's GEM menus, dialer and the double button file transfer click. CLR HOME restore ....Clear screen, restore resolution and colors. INSERT ....Cuts graphics ON or OFF, sound indicator doodle doodle doo = ON dunt = off While graphics are ON the Interlink status line will not be updated and the MOUSE belongs to IG as well as all other keys function keys included. A control+shift+INSERT will cut graphics off but doesn't give Interlink the mouse or functions keys and status line, a almost useless feature, a quirk really. Important! Default mode is graphics on. If typing in a graphics message on a BBS push INSERT first. + Plus Sign ....MIDI out SYNC, If music is garbled hit it. control+shift+m MIDI playback on/off toggle. Default MIDI playback on! control+shift+r ....locks out the Resolution switch command. control+shift+p .....duplex toggle, use half duplex on GENIE. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INSTANT GRAPHICS! ----------------- A attributes for fills G#A 1,1,0: ---------------------- A = command identifier Sets attributes for fills and sets border option. 1st parameter selects pattern type: 0=hollow, 1=solid, 2=pattern, 3=hatch 2nd parameter selects pattern index number it ranges 1-24 for type pattern and 1-12 for type hatch. These patterns are illustrated in the ST BASIC manual, page 95 in mine. 3rd parameter specifies if a border is to be drawn around the filled area. 1=yes, 0=no b bells and whistles G#b>0: -------------------- b = command identifer. Allows special sound effects to be played using the ST's Sound Chip. number Description -------------------- 0 Alien Invasion 1 Red Alert 2 Gunshot 3 Laser 1 4 Jackhammer 5 Teleport 6 Explosion 7 Laser 2 8 Longbell 9 Surprise 10 Radio Broadcast 11 Bounce Ball 12 Eerie Sound 13 Harley Motorcycle 14 Helicopter 15 Steam Locomotive 16 Wave 17 Robot Walk 18 Passing Plane 19 Landing ~~~~~~~~~~~~~~~~~~~~~~~ Sound Effects Utilities ----------------------- ID Description -- -------------------------- 20 Alters Sound Effects 0-19 Example: alters sound effect number 7 " G#b 7: " G#b>20,1,7,12,1,30,0: breakdown of parameters: b 20,play_flag,snd_num,element_num,negative_flag,thousands,hundreds "The sounds in IG use GIST. GIST is the GI Sound Tool by: Synthetic Software 880 Wisconsin Street San Francisco, CA 94107 415-285-8832 ANTIC was selling it. If they aren't anymore contact Synthetic Software. Buy GIST and you can create all sorts of neat sounds that can be converted into IG loadable format. Without GIST it's a shot in the dark. GIST let's you edit sounds with a graphics interface it's a great piece of software, buy it!" Command Identifier = b 20 Let's you alter any sound effect. The sound effects each have 56 elements that corespond exactly with the elements that GIST saves out in the '.C' file as a " int array ". You take the values in the GIST '.C' sound file and put them into IG one at a time with the b 20 command PARAMETER NUMBER 3. If you don't have GIST you can play around with the & LOOP and this command to come up with variations. 1st parameter = play_flag. If this is anything other than 0, then the sound will be played with the new setting, otherwise it alters it but does not play. Setting this flag to 1 is useful for using the & LOOP and running through a series of changes to hear what the effect your alteration has on the sound. 2nd parameter = snd_num. This is the sound effect you wish to alter. It can be any effect 0 to 19. 3rd parameter = element_num. This tells which one of 56 elements to alter in the sound effect's array they are 0-55. Element 0 is duration, element 1 is frequency. 4th parameter = negative_flag. If this is a 0 then the value changed in the effect will be positive, a 1 here or any number other than 0 will set the value in the sound effect array as a negative number. 5th parameter = thousands. This is a number from 0 to 32 that is multiplied by 1000 by IG internally and added to the next parameter to make up the actual value that is stored into the element number specified by parameter 3. 6th parameter = hundreds. The hundreds, tens, and ones of the value to be placed into the sound effect element specified by parameter 3. You can exceed this and use 4 digits here, it just adds the 5th and 6th parameters together to get a range of values from -32767 to +32767 that GIST requires. PLEASE NOTE that sound effects 0-4 are looped by IG internally 1000 times each for effect. It's like this in basic FOR I=1 to 1000:SOUND_EFFECT:NEXT I This will give a different effect than you hear if you are using the GIST sound editor so bear this in mind. To transfer a whole new sound from GIST ".C" format this little IG command will have to be called 56 times. Look in this ARC to see "IF" I wrote a GFA BASIC v2 GIST2IG.BAS converter. You could use a effect that was close to the one you needed and only change a few elements. The & LOOP and this command should be able to produce some amazing Sounds with some effort. 21 STOP ALL SOUND AT ONCE example: -------------------------- G#b>21: command identifer = b 21: Shuts off all sound effects that are being played. 22 RESTORE SOUND EFFECT example: ----------------------- G#b>22,19: Command identifier = b 22 Restores a sound effect to IG's default. Use to insure that a sound effect is what it should be or to restore after a alteration as a courtesy to your SYSOP and other IG users. You can use the & LOOP to restore all the effects real fast. 1st parameter = sound effect number to restore. range is 0 to 19. B box G#B 0,0,100,100,0 ------ B = command identifier General purpose command for drawing rectangles. All attributes effect this command. 1st parameter = upper left corner X coordinate 2nd parameter = upper left corner Y coordinate 3rd parameter = lower right corner X coordinate 4th parameter = lower right corner Y coordinate 5th parameter = rounded corners flag 0=no 1=yes C color set G#C 0,2: ----------- C = command identifier Selects the Pen number to perform the screen operation with. 1st parameter selects screen operation pen to change. 0 = Polymarker color, used for the (P plot command). 1 = line color 2 = fill color 3 = text color, used with the ( W command ). 2nd parameter selects the Pen number 0 thru 15. D line DRAWTO G#D 149,99: ------------- D = command identifier draws a line from the last polymarker plot, draw LINE or DRAWTO command. You should use the P or L command to first establish a point for DRAWTO to begin at. See also the entry for T and C commands. 1st parameter = X coordinate 2nd parameter = Y coordinate E text EFFECTS G#E 8,18,1: -------------- E = command identifier Sets VDI text effects for text put on the screen with the W command. 1st parameter selects font effect they can be combined 0 = normal 1 = thickened (bold) 2 = ghosted 4 = skewed 8 = undelined 16 = outlined 2nd parameter sets text size in points 1/72 of a inch. Values the default system font may be printed in: 8 9 10 16 18 20 3rd parameter sets the text rotation. 0 = 0 degrees 1 = 90 degrees 2 = 180 degrees 3 = 270 degrees 4 = 360 degrees F flood FILL G#F 600,0: ------------ F = command identifier Fills a area by replacing the color found at specified X Y coordinates till it hits another color or edge of screen. 1st parameter = X coordinate 2nd paraneter = Y coordinate g Graphic scaling G#g 1: or G#g 2: or G#g 0: ------------------ g = command identifier Turn graphic scaling on or off. When on all X Y coordinates are plotted to an imaginary screen 10,000 by 10,000. 0,0 is in the upper left corner, while the lower right corner is 9999,9999 This means graphics plotted with graphics scaling should look approximately the same in all resolutions! In practice though it's only really good for general positioning. The new Y coordinate *2 will save you time when converting graphics. Make your graphics for medium resolution and then when you do the mono version just add a G#g 2: at the top of your script and a G#g 0: at the end if you want to cut it back off. this should fix the medium res graphics to run in 640x400 mono mode with only the adjustment of the 'S'etcolors, 'C'olor, and maybe the 'c' command Keep in mind that none of these 'g' options work within a "& LOOP". Parameter: 0 = off 1 = on 2 = Y coordinate *2 if in monchrome 640 x 400 mode will not change value if in low or medium resolution. G grab screen G#G 0,3,0,0,100,100,100,50: screen to screen -------------- G#G 1,3,0,0,100,100: screen to memory G#G 2,3,200,50: memory to screen G#G 3,3,50,50,75,75,150,100: piece of memory to screen G = command identifier Screen grab, "Bit-Blit". Grabs a rectangular portion of the screen copies it to another portion of the screen or to memory, or copies memory to screen, depending on 1st parameter. The whole screen can be blitted to memory and back! 1st parameter sets type of blit to do: 0 = screen to screen 1 = screen to memory 2 = memory to screen 3 = piece of memory to screen 2nd parameter sets writing mode for the blit operation. mode logic...............Description 0 dest=0..............Clear destination block 1 dest=SAND D 2 dest=S AND (NOT D) 3 dest=S.............Replace mode 4 dest=(NOT S) AND D...Erase mode 5 dest=D...............Destination unchanged 6 dest=S XOR D.........XOR mode 7 dest=S OR D..........Transparent mode 8 dest=NOT (S OR D) 9 dest=NOT (S XOR D) 10 dest=NOT D 11 dest=S OR(NOT D) 12 dest=NOT S 13 dest=(NOT S) OR D....Reverse Transparent mode 14 dest=NOT (S AND D) 15 dest=1...............Fill destination block The rest of the parameters depend on the 1st parameters setting: IF 1st PARAMETER = 0 "screen to screen" 3rd = X source, upper left corner 4th = Y source, upper left corner 5th = X source, lower right corner 6th = Y source, lower right corner 7th = X destination, upper left corner 8th = Y destination, upper left corner IF 1st PARAMETER = 1 "screen to memory" 3rd = X source, upper left corner 4th = Y source, upper left corner 5th = X source, lower right corner 6th = Y source, lower right corner IF 1st PARAMETER = 2 "memory to screen" 3rd = X destination, upper left corner 4th = Y destination, upper left corner IF 1st PARAMETER = 3 "piece of memory to screen" 3rd = X source, upper left corner 4th = Y source, upper left corner 5th = X source, lower right corner 6th = Y source, lower right corner 7th = X destination, upper left corner 8th = Y destination, upper left corner H hollow set G#H 0: ------------ H = command identifier When on non solids are drawn, a circle will be drawn instead of a disk. Parameter 1=on 0=off I initialize G#I 0: ------------- I = command identifier Initializes color pallet and most attributes to what ever they were before the Instant Graphics ACC was executed. Issue this command at the start of each graphic sequence and you'll have a common starting point. Parameter: 0 = Set resolution, pallet, and attributes 1 = Set resolution and pallet 2 = Set attributes 3 = Set Instant Graphics! default pallet J elliptical arc G#J 0,199,400,600,0,270: ----------------- J = command identifier Draws a elliptical ARC, which is part of a oval. 1st parameter = X coordinate for the oval center 2nd parameter = Y coordinate for the oval center 3rd parameter = X radius of the oval 4th parameter = Y radius of the oval 5th parameter = begining angle to start drawing at 6th parameter = ending angle to to stop drawing at k cursor G#k 0: --------- k = command identifier Turns text cursor on or off and sets BACKSPACE as destructive or nondestructive. Parameter: 0 = cursor off 1 = cursor on 2 = destructive backspace 3 = nondestructive backspace K arc G#K 300,99,75,90,180: ------ K = command identifier Draws a ARC, which is part of a circle. 1st parameter = X coordinate for the circle center 2nd parameter = Y coordinate for the circle center 3rd parameter = radius of the circle 4th parameter = begining angle to start drawing at 5th parameter = ending angle to to stop drawing at L draw LINE G#L 0,0,300,150: ----------- L = command identifier Draws a line between specified points. See also the entry for T and C commands. 1st parameter = begining X coordinate 2nd parameter = begining Y coordinate 3rd parameter = ending X coordiante 4th parameter = ending Y coordinate M drawing MODE G#M 1: -------------- M = command identifier Parameter sets drawing mode. 1 = replace 2 = transparent 3 = XOR 4 = reverse transparent n chip music G#n 13,1,16,60,200,2: ------------ n = command identifer Treats IG's sound effects as musical notes. There is no flow control with this command. Note: Long tunes should use this command within a "& LOOP" or use the 'N' command. The values listed below apply to the 'N' command except 'N' takes it's parameters as a ASCII string of characters one BYTE per parameter a 255 value is the max that can be passed to 'N'. Values are passed as characters with the proper ASCII value to 'N'. Sound effects for this command may be altered with "b 20". PARAMETERS for 'n' command . . . . . . . . . . . . . . 1st parameter is the effect number to use from 0-19. These are the same effects as the 'b' command uses exception that n doesn't loop the first 5 effects internally. 2nd parameter is the voice to use 0-2. 3rd parameter is the Volume 0-15. 4th parameter is pitch 0-255. A 0 will play no effect but allow TIMIMG and STOP type to be executed. 5th parameter is timing 0-9999. This stops IG in it's tracks for a specified time in 200ths of a second, unless the user taps a key. 6th parameter is stop note type 0-4. 0=no effect, sound remains on. 1=move selected voice into release phase. 2=Stop select voice immediately. 3=move all voices into release phase. 4=Stop all voices immediately. ( same as "b 21" ) N noise command G#N>2: --------------- N = command identifier The N command is for handling sound. Currently only MIDI, but other things may be handle by N in the future, 1st parameter = N operation to perform. If 1st parameter = 0, 1, 3 or 4 a 2nd parameter is required, which is number of MIDI data bytes to read into the MIDI buffer, MAX of 9999. Load only midi: N 0,9998,datadelaydatadelaydatadelay.... sound chip N 3,9996,DataDataDataDataDelayData.... Load and execute: N 1,9998,datadelaydatadelaydatadelay.... sound chip N 4,9996,DataDataDataDataDelayData.... The 0 means load the MIDI buffer only, then the number of bytes to load followed by a comma, then the MIDI data in the form data byte, delay byte, back to back with the data byte always first. The delay is in 200ths of a second so a delay of about 1.25 seconds between each data byte is the max. After the MIDI buffer is loaded with a N 0 or 1 command a N 2: (midi) or N 5: (sound chip) issued later will replay the buffer without reloading, like G#N 2: If a user CONTROL C's or CONTROL X's the MIDI data while it is being loaded the MIDI buffer will be set to 0 and N 2: will play nothing. However it a user aborts while MIDI is being played the MIDI buffer will remain intact. If a user has the MIDI option off (F4 function key on the ACC, control+shift+m for the EMU) MIDI data will be still loaded but not executed. If line noise creeps into the MIDI buffer when it's loaded it will garble the sound, the user might be able to recover by pressing the + key to try to get the MIDI flow out to the ports in proper sync datadelaydatadelay, line noise can get it in reverse order. DATA FORMAT FOR SOUND CHIP The data to the sound chip routine is in ASCII values ie " a capital A represents 65 ". the format is: Effect_numberVoiceVolumePitchTimingStop_effect 0-19 0-2 0-15 0-255 0-255 0-4 When a 0 is passed as a pitch value timing and stop effects can be issued without executing a note. For more details see the "n" command. *** Download MS2IG.ARC for a Music Studio to IG MIDI file converter. *** See "n" command also and look for N_UTIL1.LST in arc. O CIRCLE G#O 300,100,75: ---------- O = command identifier Draws a disc or circle depending if the H command is active or not. 1st parameter = X coordinate of circle center 2nd parameter = Y coordinate of circle center 3rd parameter = radius of circle P polymarker PLOT G#P 149,99: ----------------- P = command identifier Plot a point or polymarker shape on the screen. See also the entry for the T and C commands. 1st parameter = X coordinate 2nd parameter = Y coordinate Q ellipse G#Q 300,100,200,60: ---------- Q = command identifier Draws an ellipse, which is a OVAL. See H and A commands also. 1st parameter = X coordinate of oval center 2nd parameter = Y coordinate of oval center 3rd parameter = X radius of oval 4th parameter = Y radius of oval R set Resolution G#R 1,0: ---------------- R = command identifier Allows to switch between low and medium resolution. Low resolution allows the use of 16 VDI colors! Medium resolution only allows 4 colors. If the resolution selected is the one the system is currently in, IG ignores it. This is so you can set the set the color palette and not do a resolution switch. Resolution switching might cause havoc for some commercial terminals you may be using IG with, although it shouldn't with FLASH 1.60 and Interlink. With Interlink IG.EMU the CLR HOME key will restore Medium resolution, with the ACC it's automatic. 1st Parameter selects resolution to switch to: 0 = low resolution 1 = medium resolution 2nd Parameter is the system palette flag: 0 = no change 1 = default system colors. 2 = IG default color palette s screen clear G#s 0: --------------- s = command identifier Clears whole screen or portions of it. Parameter: 0 = Clear screen home cursor. 1 = Clear from home to cursor. 2 = Clear from cursor to bottom of screen. 3 = Clear WHOLE screen with VDI. 4 = Clear WHOLE screen with VDI and VT52 cursor will be set to home. 5 = Clear,Home,ReverseOff,Text Background to reg 0, Text Color to register 3. All done with VT52, a VT52 quick reset of sorts. S set PEN color G#S 1,0,0,7: -------------------- S = command identifier 1st parameter selects pen color to change 0 thru 15. 2nd parameter selects red color level 0 thru 7. 3rd parameter selects green color level 0 thru 7. 4th parameter selects blue color level 0 thru 7. t time a pause G#t 2: --------------- t = command identifier Tells IG to send ^S, times it for X seconds and then tells IG to send ^Q. Any key will abort the pause prematurly. MAX time is 30 seconds if more of a pause is needed chain a few together. G#t>30:t 5: I'm hoping this will eliminate the BBS from timing out and logging a user off. Parameter = number of seconds to pause, 30 max. T line, marker TYPES G#T 2,1,4: --------------------- T = command identifier 1st parameter selects lines or polymarkers to change. 1 = polymarkers ( effects output of the P command ) 2 = lines ( effects D and L commands ) 2nd parameter picks type of line or polymarker depending value of 1st parameter. for polymarkers: 1 = point 2 = plus sign 3 = star 4 = square 5 = diagonal cross 6 = diamond for lines: 1 = solid 2 = long dash 3 = dotted line 4 = dash-dot 5 = dashed line 6 = dash-dot-dot 3rd parameter selects size and line end styles. -size- for polymarkers: 1 thru 8 for lines: 1 thru 41 -line end styles- 0 = both ends square 50 = arrows on both ends 51 = arrow on left, squared on right 52 = arrow on right, squared on left 53 = arrow on left, rounded on right 54 = arrow on right, rounded on left 60 = rounded on both ends 61 = rounded on left, squared on right 62 = rounded on right, squared on left 63 = rounded on left, arrow on right 64 = rounded on right, arrow on left U rounded rectangles G#U 100,0,300,150,1 -------------------- U = command identifier Draws a rounded rectangle. 1st parameter = upper left corner X coordinate 2nd parameter = upper left corner Y coordinate 3rd parameter = lower right corner X coordinate 4th parameter = lower right corner Y coordinate 5th parameter = 0 selects filled rounded rectangle with no borders. 1 selects rounded rectangle affected by all attributes and H command as well as line patterns set with the T command. V pieslice G#V 50,50,100,180,270: ----------- V = command identifier Draws a pieslice, which is part of a circle. 1st parameter = X coordinate for the circle center 2nd parameter = Y coordinate for the circle center 3rd parameter = radius of the circle 4th parameter = begining angle to start drawing at 5th parameter = ending angle to to stop drawing at W WRITE text G#W 50,100,DEVO E-Z Listening Disc@ ------------- W = command identifier Writes text on screen at any X Y coordinate. Carriage Return and Linefeed are ignored (IG214) so you can split the text to be written across two lines, the maximum length is 128 characters. The @ symbol ends the text to be written. See also the E and C commands. 1st parameter = X coordinate 2nd parameter = Y coordinate 3rd parameter = text ended with @ Chain example: G#W>20,50,Chain@L 0,0,300,190 Y elliptical pieslice G#Y 80,80,100,200,0,180: ---------------------- Y = command identifier Draws a elliptical pieslice. which is part of a OVAL. 1st parameter = X coordinate for the oval center 2nd parameter = Y coordinate for the oval center 3rd parameter = X radius of the oval 4th parameter = Y radius of the oval 5th parameter = begining angle to start drawing at 6th parameter = ending angle to to stop drawing at Z filled rectangle G#Z 10,10,200,100: ------------------ Z = command identifer Fills a area. The A commands border set has no effect on this fill. 1st parameter = upper left corner X coordinate 2nd parameter = upper left corner Y coordinate 3rd parameter = lower right corner X coordinate 4th parameter = lower right corner Y coordinate < INPUT Command G#< 1,0,1: ---------------- Gets input from user's keyboard and transmits it as soon as the chain " > " from the last G# is broke. Should be used near the end of a MENU, as the BBS will continue to send to the terminal while the INPUT command is waiting on the user. This is so the BBS will be waiting for INPUT when IG sends the user's response at '>' exit. The INPUT command is good for letting you use any 4 colors you want for a BBS MENU and then to issue some reset commands. ie G#<>1,0,1:I>0:k>1:s>0: Also optionally INVOKES MOUSE routine for the X 4 command so ZONES can be pointed to and clicked on, you must use X 4 to define and load the zone strings first and you should use IG to draw some borders around the zones so the user will know where and what he is selecting when he clicks on a ZONE, that way you have the job of cosmetics, that's half the fun anyway. The selected Zone's associated data string is transmitted to the BBS as soon as IG exits the chain from the last G# . ZONE 47 is the default ZONE, it's associated data string will be sent if no ZONES match where the user clicked. You should always define ZONE 47. ( Check out X 4,9998: LOOPBACK also!) You may find the X 3 and the X 6 command useful too. 1st parameter = Transmitt carriage return at the end of the string INPUTted? 1 = YES 0 = NO 2nd parameter = INPUT type 0 = One key, (hot key input for FoReM) 1 = String, with a return to end input from user, max string length = 128 2 = MOUSE ZONE, activate a POLYMARKER mouse pointer, use the " T " command to select mouse type and size and the " C " command to set mouse color. User moves mouse and clicks on a "ZONE". Selection is processed when button is released. The associated ZONE string is copied into INPUT's string to be transmitted to BBS at the end of the IG script chain. 3rd parameter = Output options 0 = Don't show input typed from user on his screen. Has no effect on Mouse ZONES. 1 = Show input typed from user on screen. Has no effect on Mouse ZONES. 2 = Show input but throw it away, don't transmit it at the end of the chain. Does effect Mouse ZONE. 3 = Don't show input from user, and throw it away too. Does effect Mouse ZONE. Note: If 2 ZONES areas are over lapping on the screen the ZONE with the lower value ID number will get selected when the mouse is clicked on both ZONEs at the same time. +----+--------------------+ user clicks in here ---> |ID=1| | ZONE 1 gets selected +----+ ID=10 | | | +-------------------------+ +----+--------------------+ user clicks in here ---> |ID=7| | ZONE 2 gets selected +----+ ID=2 | | | +-------------------------+ ? Ask IG G#? 0: -------- ? = command identifier Asks the Instant Graphics terminal questions. Transmit it to the BBS ( Host system ). 1st parameter selects the question to ask. 0 = Version number, IG will transmit in ASCII to the host system the version number it is. 1 = Ask IG where the cursor is and the mouse button state. When this question is asked a 2nd parameter is passed also, like G#? 1,0 the zero means just check the cursor and mouse buttons and send it to host system immediatly. If the second parameter is a 1 then the user can move the cursor with the mouse until a button is pressed then the cursor location and button state is transmitted. In other words a point and click cursor!!! The cursor and and mouse button state is sent in three characters, subtract 32 from the ASCII value of these characters to arrive at COLUMN number 0-79 ROW 0-24 BUTTON 0-3 With this command the cursor should be enabled with the G#k 1 command. 2 = Ask IG where the mouse is and button state. A second parameter is required when this question is asked, like G#? 2,0 the zero indicates that IG is to send the BBS the mouse coordinates immediatly a 1 will activate a polymarker for a mouse pointer That you select with IG's "T" command. The user can move the pointer around till he clicks a button then the host system is sent the X,Y,Button in a ASCII string just like this 420,150,1: It's up to the host system to convert the ASCII string into actual numbers. The "g" command has no effect on this command in version 2.12. 3 = Asks IG what resolution the terminal is in 0: low resolution 320x200 1: medium resolution 640x200 2: high resolution 640x400 & loop a command G#& 0,198,6,0,L,4,0,0,x,y: ----------------- XOR stepping example: G#G 1,3,0,0,50,50: G#&>198,0,2,0,G|4,2,6,x,x: & = command identifier Loops a operation specified number of times with stepping, special options for XOR ing and the 'W'rite text command. The CHAIN character > only works directly after the &> You can loop a chain of commands, see parameter 5, but you can't loop a loop. Still this command is very powerful and worth the effort to learn. 1st parameter = FROM value if from value bigger than TO value loop will detect and step backwards. 2nd parameter = TO value 3rd parameter = step value, positive number only. 4th parameter = DELAY in 200 hundredths of a between each step of the loop. 5th parameter = command Identifier to loop. optional specification character after 5th parameter instead of comma: | = XOR stepping @ = get text for W command everytime otherwise text written from loop with the W command is last text written with W command before the loop was executed. W command now ignores CR and LF so loop command can be used for easy Written text placement with the loop's stepping. NOTE: (Chain Gang) If a > symbol is given here as a command identifer chain gang option is invoked. This allows multiple commands to LOOPed. Instead of one command specified for this parameter a string of command identifers are passed. The > to get IG's attention to chain gang and ending with the @ FOLLOWED by a comma. Like this >CL@, C is at command position 0 L is at command position 1 The position of the command is the key to which command will be executed. There can be up to 128 (0-127) commands in this command string in any order you like. Example: switching line color and drawing lines too G#I>0:k>0:s>4:S>3,0,0,6: G#&>0,636,4,0,>CL@,16,0)1,3:1)319,99,x,0:0)1,2:1)319,99,+2,0: You can replace the ) above with the commands themself and it will work G#&>0,636,4,0,>CL@,16,0C1,1:1L319,99,x,199:0C1,2:1L319,99,+2,199: G#t>6:I>0:s>4:b>7:k>1: 6th parameter = number of parameters command that to be looped requires. You should at least specify the number the command requires ie L command requires 4 , ie W command 2. You can specify multiples of the required number such as 8 or 12 for the L command Max up to 2048. It's just a total of all the parameters required that follows it. This will work like BASIC's READ DATA statements between each loop step. Also note a _ underscore may be used to split parameters across lines if it is used in place of the first digit of value, this will make huge detailed files smaller (DEGAS conversions). REMAINING parameters = whatever the command being looped requires. If you use a "x" as a parameter it will be stepped in the direction of the FROM TO values, if you use a "y" the loop will step the value in a reverse direction. You can use both "x" and "y" at the same time. If you use a number it will remain as a constant for the command being looped through out the loop execution. Adding a + before constant will add the "x step value" to the constant. Adding a - before the constant will subtract the constant value from the current "x step" value. Adding a ! before the constant will subtract the "x step" value from the constant. Like so : G#&>10,30,2,0,L,4,100,+10,-10,+600,!99: loop Written text option example: G#E>0,18,0:C>3,2:s>0: G#&>20,140,20,0,W@2,0,x,A. Item 1@ B. Item 2@ C. Item 3@ D. Item 4@ E. Item 5@ F. Item 6@ G. Item 7@ G#W>200,140,Power Graphics with IG!!!@ G#& 140,20,20,0,W,2,200,x: G#W>10,180,That's so DEVO!!!@ Example of loop used to READ DATA and step within at the same time in both directions, once you get used to the "& loop" you will use it a lot!! G#I>0:s>0:k>0:L>300,10,340,10:S>2,7,4,5:S>1,0,0,0: G#&>85,300,5,0,D,24,340,10:340,60:420,60:420,85:_ 340,85:340,180:85,180:x,85:220,85:220,60:x,60:x,10: G#L>300,180,300,85:A>1,1,1:C>2,2:F>320,20:E>0,10,0:M>2: G#C>3,1:W>210,141,Because of@ G#W>210,156,God's Love@ G#W>210,171,we are.@M>1: G#t>3:G>1,3,80,8,421,181:s>0: G#&>0,220,4,0,G,16,2,3,x,x:2,3,y,y:2,3,x,y:2,3,y,x:t>2:s>0: G#&>0,638,4,0,G,8,2,3,x,9:2,3,y,9: G#t>3:s>0:k>1:G>2,3,80,8:p 0,20: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Modified VT-52 COMMANDS ------------------------ c COLOR G#c 1,1: -------- c = command identifier Sets text and background color 1st parameter selects text or background 0 = background 1 = text 2nd parameter = color register 0 thru 15 Note: color registers can be changed with the S command but the ST's VDI pen numbers do not corespond with color register numbers here a reference chart: register pen register pen 0 0 8 9 1 2 9 10 3 6 10 11 4 4 11 14 5 7 12 12 6 5 13 15 7 8 14 13 15 1 d delete line G#d 4: -------------- d = command identifier Deletes specified number of text lines, the bottom line on the screen is scrolled upward. Parameter = number of lines to delete. i line insert G#i 1,3: -------------- i = command identifier Inserts lines at cursor position or top of screen. 1st parameter selects type of insert. 0 = move cursor up a line until it hits the top of the screen, then insert blank lines. 1 = Insert line at cursor, bottom line is scrolled off. 2nd parameter = number of times to perform this operation. l line clear G#l 0: ------------ l = command identifier Clears text lines. Parameter: 0 = Clear whole line and carriage return. 1 = Clear line from begining to cursor inclusive. 2 = Clear line at cursor to end of line. m cursor motion G#m 1,20: ---------------- m = command identifier Homes or moves cursor a line at a time or a column at a time, from current position. 1st parameter selects direction. 0 = Home cursor. 1 = up 2 = down 3 = right 4 = left 2nd parameter sets number of times to do this operation. p position G#p 70,19: ----------- p = command identifier Positions cursor at column, line. Like X Y only with characters. 1st parameter = column 0 thru 79 2nd parameter = line 0 thru 24 r remember G#r 0: ----------- r = command identifier Remembers or recalls cursor position. Parameter: 0 = remember cursor position 1 = recall cursor position, and put it there v inverse video G#v 1: ---------------- v = command identifier Turn inverse video on or off. Parameter: 0 = off 1 = on w line wrap G#w 1: ------------ w = command identifier Turns line wrap on or off. Parameter: 0 = off 1 = on ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ eXtended Commands ----------------- Extended commands are invoked by a captial X and a number ranging from 0 to 9999, this is sort of like the old 8 bit XIO thing. Opens a door for 10,000 new commands!!! 0 SPRAY PAINT G#X 0,400,50,200,145,200: --------------- X 0 = command identifier Plots polymarkers at random in a rectangular area with specified concentration. 1st parameter upper left corner X coordinate. 2nd parameter upper left corner Y coordinate. 3rd parameter X range from upper left corner, 255 max. 4th parameter Y range from upper left corner, 255 max. 5th parameter concentration, 9999 maximum. 1 SET COLOR REGISTER G#X 1,4,0: -------------------- X 1 = command identifier Sets a color register with Xbios 7. Use to set a specific register. The S command differs in that it sets a PEN's register. 1st parameter = color register 0 thru 15. 2nd parameter = color value 0 thru 9999, note that the ST only uses up to 1911, larger values may prove useful on STE. 2 SET RANDOM FUNCTION RANGE G#X 2,0,50: --------------------------- Sets the range of the numbers returned when the 'r' is used in place of constant value parameter given to a IG command. Above example sets r to a range of 0 to 50. The range value can be from 0 up to 9999. To use it in the line command or any other like so: L 0,r,400,r: another example with the & "loop" command: G#s>0:X>2,0,639:P>0,0:& 0,128,1,0,D,2,r,r: 3 RIGHT MOUSE BUTTON MACRO G#X 3,2,1,1,30,C'mon Baby let's do the Twist!: -------------------------- X 3 = command identifier Set's a string of ANY characters to be transmitted when the RIGHT mouse BUTTON is pressed. Intended for pulling up a FUNCTION menu on a BBS, but could be used to tell a MAINFRAME to TYPE a IG script file for a POINT and CLICK navigation menu. 1st parameter = operation Deactivate --> if 1st parameter is 0 then mouse macro is shut off and no other parameters are to follow. example: X 3,0: Reactivate --> if 1st parameter is 1 then mouse macro is ON and requires a 2nd parameter to tell it whether or not to transmit a carriage return at the end of the string. examples: X 3,1,0: = no CR X 3,1,1: = send CR at end. LOAD with,activate,deactivate --> if 1st parameter is a 2 then a whole bunch of parameters follow. 2nd parameter cuts the mouse macro on or off. 0=off 1=on 3rd parameter tells it whether or not to send a carriage return at the end of the string. 0=no 1=yes 4th parameter is the length of the string in characters that the mouse macro will be sending, don't count the seperator at the end of the string. 5th parameter is the string to send. it can contain any characters at all and has to be at least one character and not more than 80. At the end of the string a seperator is required anything can be used I suggest a : for good looks. examples below: X 3,2,1,1,3,m/a: X 3,2,1,1,5,f/L: X 3,2,1,1,1,?: X 3,2,1,1,25,c:\bin\type c:\ig\menu.ig: 4 DEFINE and LOAD ZONE data G#X 4,0,0,0,79,49,3,f/L: ---------------------------- X 4 = command identifier Defines a rectangular area and associates a string of characters with it, a ZONE. The string is sent to the bbs by the " < " command if the mouse option is used. This allows point and click operation of remote systems. Zone ID -> 1st parameter = zone number to define/load This is a number between 0-47 or optional value is 9999-9997. If Zone ID is 9999 ALL Zone's retangular areas are defined as -1,-1,-1,-1 by the terminal internally. This is to give a quick clean slate. Cutting Zone LOOPBACK on will make the user select a valid defined Zone. A console bell will ding and the the terminal will continue to poll the mouse until a valid defined Zone is selected. Default is off only to help maintain compatiblity with older prexisting IG scripts. examples G#X 4,9999: G#X 4,9998: Zone LOOPBACK On G#X 4,9997: Zone LOOPBACK Off (default off) No other parameters are required if Zone ID is 9999-9997. Define Rectangle -> 2nd parameter = upper left corner X coordinate 3rd parameter = upper left corner Y coordinate 4th parameter = lower right corner X coordinate 5th parameter = lower right corner Y coordinate Load string data -> 6th parameter = number of characters in string to transmit to bbs, maximum 80. 7th = the string itself with a ending : seperator, don't count the seperator as part of the string length required for parameter number 6. 5 FLOW CONTROL SHUTDOWN G#X 5,0: or G#X 5,1: or G#X 5,4: ----------------------- G#X 5,2,19,2: or G#X 5,3,17,2: X 5 = command identifier Back by request, no flow control. Stops the IG terminal from sending Control-S's and Control-Q's on all commands or alters the values sent that XONs and XOFFs the flow and number of repetitions, for safety. This should be used with caution. No flow control is good for issuing a short pause " t " command and let the RS232 buffer get ahead of the terminal, when the pause is over a burst of speed will occur as the terminal catches back up. Data may be lost this way so be careful. Altering the XON XOFF values and repetitions is good for BBS programs that don't use the standard ^s ^q sequence. IG's default is ^s once XOFF and ^q once XON. The defaults work fine with FoReM and Turbo, so if you switch them be SURE to issue a G#X>5,4: in your log off file to reset the defaults. FoReM sysops may want to add this G#X>5,4: in their welcome file for safety sake. 1st parameter = flow control on/off 0 = OFF 1 = ON 2 = ON set xon value, repetitions 3 = ON set xoff value, repetitions 4 = ON set to IG's defaults 2nd parameter = ASCII value to send for XON or XOFF. For instance put a 65 here for a captial A. This parameter not included if 1st parameter = 0 or 1 or greater than 3. 3rd parameter = number of repetitions to send the the XON and XOFF character. You can have IG send different for XONs than XOFFs. Like send 2 XONs and 3 XOFFs. This parameter not included if 1st parameter = 0 or 1 or greater than 3. 6 LEFT MOUSE BUTTON CR/LF G#X 6,1: or G#X 6,2: or G#X 6,0: ------------------------- X 6 = command identifier Activate / deactivate left MOUSE button as a CARRIAGE RETURN and or Linefeed. 1st parameter = 0 = OFF normal mode, default 1 = ON as a CARRIAGE RETURN 2 = ON as a CARRIAGE RETURN with LINEFEED. Note: This doesn't affect the < INPUT command's mouse zone option either way. It should work ok with this active. I wanted to be able to leave my hand on the mouse and hit the button to read the next message while online and not have to mess with the right mouse macro 'X 3'. You can just set the mouse in your lap and click to read messages. You probably wouldn't want this active with the '?' ASK IG command. 7 reserved ---------- 8 Rotate Color Registers G#X 8,1,3,20,10: ------------------------ X 8 = command identifier Rotates color registers left or right a certain number of times. 1st parameter = Starting color register number 2nd parameter = Ending color register number 3rd parameter = 0 = Reset the registers to what they were when detected with X 8,1,1,1,1: This will reset all the color registers. Any other number = number of times to shift colors. Note: If the 1st parameter is less than the 2nd parameter, then the colors will shift to the right. If the 1st parameter is greater than the 2nd parameter, then the colors will shift to the left. 4th parameter = number of 200 hundredths of a second between each color shift. range 0-9999. An application of this function would be to draw a waterfall using, say... registers 8 to 14 for various shades of blue. Once it is drawn properly, you could make the water start flowing with the following: G#I>0:k>0:R>0,2:A>1,1,1: G#C>1,5:C>2,5:&>0,300,20,0,Z,4,x,5,+15,35: G#&>0,0,0,0,>CF@,90,0C2,0:1F0,11:0C2,1:1F20,10:0C2,2:1F50,10:0C2,3:1F70,_ 10:0C2,4:1F90,10:0C2,6:1F130,10:0C2,7:1F150,10:0C2,8:1F170,10:0C2,9:1F_ 190,10:0C2,10:1F210,10:0C2,11:1F230,10:0C2,12:1F250,10:0C2,13:1F_ 270,10:0C2,14:1F290,10:0C2,15:1F310,10: G#X>8,1,15,150,0:X>8,1,1,1,1:t>3:I>0:R>1,1: Or you could make steam coming out of a locomotive, a flaming mine, lettering made of scrolling rainbows, lightning behind clouds, etc. This command is limited in med resolution, worthless in hi res, and a very powerful animation tool in low resolution! --------------------------------------------------------------------------- =================== END OF TEXT G#I 0: