updated: 6-15-2024 BEST VIEWED with ME.TTP EXIT without saving! Search PAGE Forward V PAGE Backward < MOVE to Beginning > MOVE to End of Buffer Instant Graphics! Online Graphics Script Interpreter Copyright 1988-2024 by Larry Mears Version 2.20 by Larry Mears, Freeware *** IMPORTANT USE WITH HSMODA07.ZIP set up a 32K serial buffer the ST's default serial buffer is only 256 bytes I believe, not near enough!! IG220.ACC needs it too. Set Interlink's serial port buffer to 31K. This allows IG to do it's graphics on the screen and not lose commands coming over the serial port at HIGH SPEEDs. :) 19.2K baud! Back in 1989 maybe a 4K or 8K serial buffer worked but we only had 2400 baud modems, 2.4K baud! The screen is not as fast as the serial port. Without a big serial buffer even ASCII text will drop out a little bit. Here's a couple of links to get HSMODA07.LZH / .ZIP www.scheutzow.de/museum/index.html https://github-wiki-see.page/m/z80andrew//SerialDisk/wiki/User-guide Also besides HSMODA07 that goes in the AUTO folder you may want to put KX.PRG or KRX.PRGs I included cuts off key click sound and or key repeats. These can mess up the TAP-A-TUNE in the IGDEV program. Why a new version? Back in 2019 Josh Renaud contacted me about IG. I knew some were still interested in the old computers, but nothing about that thru telenet actual BBSs are still up and running! I didn't have my old Atari 1040STf anymore but my nephew still did! He wasn't using it for his midi anymore and it was just in his way, wow! I was able to use MegaMax C and Laser C again on the actual hardware that it all started on. I was going to try and make the IG Editor better but the source that Kevin Moody gave me was corrupted by time, it still helped. I wanted to make a IG drawing program that worked in all 3 ST graphics modes. I got my idea together about how I wanted it and began my retro hobby. I kept the menus simple text but still mostly point & click. As I went along the path I got ideas about making IG better. It's still backward compatible with older IG versions but does much more. I retired this year and I'm 30+ years older since IG217 was released back in 1992. I'm in my mid 60's now, might live another 20+ years based on my relatives. I work out and ride motorcycles like I always have. Updating IG has been a good uplifting experience for me. I hope you enjoy my efforts! WHAT'S NEW? After working on this Retro project for 4+ years in what spare time I could manage I created a IG terminal and Drawing program smash up for developing IG scripts then ASCII uploading them. I also updated the ACC & EMU versions. **I'd like to note that the "I" command did NOT do a restorative resolution switch. I went back as far as IG210 and checked the source code the older manual says it does a RES switch but it did NOT. It did everything else but not RES switch. I added a I 5 option just for that, seems like a good idea. I recently discovered that the VDI Compatible Resolution Switch by Steve Cole and Lawrence Gold if executed before setting the color palette will mess with VT52 text color, so ALWAYS do a resolution switch FIRST then set the palette. Like G#I>5:I 0: otherwise you won't get the colors you expect. New for IG220 ------------- This version adds 2 new X commands. See X 11 and X 12 for the details. X 11 Loads the BitBlit Memory or Wipes with a BYTE value or random numbers. It can Load ALL 32000 bytes or a 4000 byte section from the serial port or disk. This is so you can Load a Bit Map for the screen it takes about 30 seconds for the whole screen or 4 seconds for a 4000 byte horizontal section at 19.2K baud the ST's max serial port speed. The X 12 command loads a color register palette, it loads 4 colors at a time. With these 2 commands and IGDEV13 and the IG GRAB commands Screen to Memory / Memory to Screen you can save out a IG script constructed screen as a stagnate Bit Map That may load faster than the script if it is a complex drawing. Also the IGDEV13 program can load a DEGAS/Elite uncompressed image into the BitBlit Memory .PI1 .PI2 and .PI3 only. You can save the whole screen or horizontal sections and it's palette also. See below the X 11 and X 12 commands for more details. I also added Clip Set to the I 5 command, before it just set resolution. Any time I refer to the DRAWER it is inside the IGDEV13.PRG by hitting the F1 key. I also created a IGX1220.TTP it will display multiple IG files just put a SPACE in between each filename. If the IG files are not in the same FOLDER as the IGX1220.TTP you will have to give it the PATH The IGX1220.TTP just displays the files if you want a pause in between each ADD a G#t 9: at the end of the scripts if they don't already have one. In the DRAWER I also added support for the color rotation command. *** IG219's 'G'rab command aka BitBlit is fixed so when IG switches from medium resolution to LOW it doesn't ask GEM how many bit planes but checks the resolution itself and sets the number of bit planes available so all BitBlit commands should work after a res switch not just SCREEN to SCREEN. I also added a new BitBlit command Memory to Memory, lets you do hidden Blits then pop them up. No clipping so stay within the X,Y bounds. IG219 BIGgest addition would be the the NEW f and z commands. PolyFill the f command draws a filled polygon with up to 128 sides. PolyLine the z command draws a connected line with a minimum of 2 end points and maximum 128 end points. Like the Line and Drawto IG commands but less IG script. IG219 has a new X 10 command it sets the begining point for the Drawto command. Just a feature, not that critical, because the Line or Plot command already set this as it should. I also added to the R and I commands options to SET the default VDI color palette and resolution. The IGDEV program has added support for these additions. I also added a full blown text editor ME.TTP, IGDEV passes the draw buffer to it as file so there is a decent text editor if you need to hand edit your IG script. It writes a file called BUFF.IG then passes that to ME.TTP, BUFF.IG gets wiped out every time it does that, but it might save you if you forgot to save your IG script at exit, at least from that hand edit point. The IGDEV program uses the out lined cross hair now. If you press the CONTROL key you get a drawing grid, multiple presses changes grid size. LEFT SHIFT key prints X,Y coordinates, mutiple presses changes position where X,Y is printed. The draw grid and X,Y coordinates may appear on top off some of your drawing but it is not permanate. They are just visual tools. I also fixed a bug that had been in all the IG2xx.ACCs that I wasn't aware of till recently, every exit would drop 310 bytes. With IG219.ACC this doesn't happen. The DEV progam and EMU didn't have this issue. IG218 has editable fill and line patterns, a new timing command that uses Vsync, internal double stepping for XORing with BitBlit, the Spray Paint command has color rotation, the random constant has two ranges r and R, the input command now uses all mouse pointers not just a polymarker. I changed the IG default color palette and tried to make resolution swapping better. I added a new option for the N command you can jump forward in the buffer, this allows you to jump to several short chip tunes as needed. There is new X 9 command that loads and executes IG graphic commands in the IG MIDI buffer. In the IGDEV10.PRG just HIT the F1 key to Draw and make Music. The IGS Editor Kevin Moody & Anthony Rau did not support Low Resolution limiting it to 4 colors. I really wanted it to support Low Resolution 16 color mode. When I wrote BIG Paint(DOS), Condor PAINT(DOS), Vectasketch and Sketchpad(JAVA applets) they all had many colors. IG needed that too. Bugs? Few and far between I hope but nobody is perfect. I will fix them if I can. Most of time the Drawer is doing exactly what you tell it to, it's command driven not a pixel bit painter. YOU have to THINK about what you do and do it in the proper order. IG Palette System Palette Register Pen Color Pen Color Number 0 White 0 White 0 1 Black 1 Black 15 2 Red 2 Red 1 3 Green 3 Green 2 4 Blue 4 Blue 4 5 Cyan 5 Cyan 6 6 Black yes 6 Yellow 3 7 Yellow 7 Magenta 5 8 Light Pink 8 Low White 7 9 Light Brown 9 Gray 8 10 Sandy Brown 10 Light Red 9 11 Sea Green 11 Light Green 10 12 Gray 12 Light Blue 12 13 Lake Blue 13 Light Cyan 14 14 Grass Green 14 Light Yellow 11 15 Dark Brown 15 Light Magenta 13 INTRO Instant Graphics! Desk Accessory graphics terminal or Instant Graphics! Emulator for Interlink brings 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 have used 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. **NOTE FLASH only has a 4k serial BUFFER and HSMODA has no effect on FLASH's serial buffer size and FLASH dominates the buffer size, I'm NOT recommending using FLASH with IG anymore because of this. FLASH at 2400 or 1200 baud probably work OK. 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 capture buffer to 8K and the RS232 buffer to 31K and save then rerun Interlink from the desktop. This MIGHT free up enough RAM to load version 2.20 If you set the RS232 buffer lower than 31K you will have to drop the BAUD Rate or drop outs may occur, experiment. 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. ***** NEW !!!!****** NOTE: IG218+ when grabbing number values from the serial port or a file ALLOWS a carriage return and line feed character to break the line the _ still works the same too, here is example draws a rectangle and a pyramid: G#9999,0,Test for new value(); routines.@ G#I>0:I>3:R>1,0:s>5:k>0: G#C>1,1:T>2,1,1:T>2,1,0:L>10,48, 1 5 2 , 48:D>152,94: G#D>10,_ 9 4 :D>10,48: G#&>0,639,4,0,L,4, 3 1 9 , 0, x,199 :t>4: *** Note: Utility programs I wrote rely on G#COMMAND>NUMS,NUMS: syntax 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. 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: LarryMears@hotmail.com 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 my EMAIL. 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. 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 IG Drawer makes IG creation easier but, a understanding of IG and a text editor such as ME.TTP is still useful for many things or tweeking script. IG Drawer is still great for drawings, tunes or doing simple BBS menus. The IG Drawer also allows hand editing the script end, good for adding or deleting commands to the end of BITMAPs. WARNING! Don't use ME.TTP for BIT MAPS It produces IG script compatible with IG 2.20 and above. New IG versions are written so that old IG script files are compatible. I don't expect any monetary support. I'm just doing this for a hobby. I hope it helps some SYSOPs and Users have some fun. Note that a ^C executed when IG is writing it's prompts may crash or exit the program, this is a ATARI TOS bug in it's ROM chips. =========================================================================== 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 Toggles Auto Line Feed on/off. F4 MIDI playback on/off toggle. ( Default MIDI playback on! ) OTHER KEYS INSERT set baud ....Set baud 300 thru 19200 baud. Note: No default at startup, this is so when using FLASH or Interlink the ACC baud remains the same as the host program. Some of the other RS323 parameters are changed by this option, always sets 8/N/1 I've not tested IG past 19200 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 ....Toggles Auto Line Wrap. 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 4=user defined 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. The IG Drawer will display examples. 0-9 for user defined, 8 sets pattern 0 as RANDOM, looks like dirt or sand mostly, 9 or greater sets pattern 0 as it's stored default, looks like Star Trek symbol. Patterns 6 and 7 are also used for user defined LINES. SEE X 7 command for defining these patterns. 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. 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. 23 SET LOOPS FOR FX'S 0-4 example: ------------------------- G#23,0: Command identifer = b 23 Sets how many times sound effects 0-4 are looped default is 5*200. If you change it's up to you to set it back. 1st parameter = How may times to loop. Range is 0 to 16. If greater than 16 then it's set to 5 the default. 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 or X 10 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 f Poly Fill G#f 3,100,0,150,100,50,100: ----------- f = command identifer Fills a area defined by the X and Y points. The enclosed area will be filled with the current fill pattern, fill color, border set with the A command. 1st parameter = number of paired X,Y points so the 3 means 6 parameters following. It also will be the number of sides the area will have. passing a 1 or 2 here draws a point or line. remaining parameters = X,Y pairs forming the points the last pair of points will be connected to the beginning points automatically by the routine. 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 4 = memory to memory 2nd parameter sets writing mode for the blit operation. mode logic...............Description 0 dest=0..............Clear destination block 1 dest=S AND 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 IF 1st PARAMETER = 4 "memory 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 7th = X destination, upper left corner 8th = Y destination, upper left corner q Quick Pause with Vsync or set Internal Double Stepping -------------------------------------------------------- G#q 180: G#q 9995: G#q 9999: NOTE: Vsync() waits until the screen's next vertical retrace occurs. Parameter = number of Vsync()s to pause, 60ths of a second max 180. No flow control with this delay. IF Parameter = 9995 double step the G command internally use 3 Vsync()s 9996 double step the G command internally use 2 Vsync()s 9997 double step the G command internally use 1 Vsync()s 9998 double step the G command internally use 0 Vsync()s 9999 Turn double step OFF 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>5:I 0: ------------- I = command identifier Initializes color palette 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. DESKTOP means what ever the setting was when IG is first opened this can be changed by the Control.ACC or by a program such as Interlink or Flash. The VDI and Instant Graphics color palette are hard coded and won't change. You can alter the palette you are using with the S command. IF using the I 5 command use it before ANY of the palette setting commands. Parameter: 0 = Set DESKTOP palette and attributes 1 = Set DESKTOP palette 2 = Set DESKTOP attributes 3 = Set Instant Graphics! default palette 4 = Set VDI default palette 5 = Set DESKTOP Resolution ***USE FIRST!! sets VDI Clipping area also even for MONO 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 z Poly Line G#z 3,100,0,150,100,50,100: ----------- z = command identifer Draws a connected line defined by the X and Y points. Line color, type and line end points apply. 1st parameter = number of paired X,Y points so the 3 means 6 parameters following. A minimum of 2 here required! I forced this because 1 here would crash the system! The maximum number of points is 128. remaining parameters = X,Y pairs forming the points of the Line. 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. MIDI, and sound chip. 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. NEW for IG218... Once the buffer is LOADED you can: EXE Buffer N>6,x=From(0-1664), y=To(1-1665)chip notes example N>6,300,701: Each note takes six bytes so 1666 notes possible in the 10001 byte buffer note 0 to 1665. I wrote a GFA Basic program that takes the IG Draw program's Tap A Tune notes and auto generates the N chip note byte format it's N_UTILB.PRG Keep in mind this buffer doesn't play in the background no multi tasking and you use it for one thing at a time MIDI or Chip Notes or with the New X>9 command that stores and Executes IG commands in it. 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_UTILB.PRG 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. DESKTOP color means the palette that has been set for the DESKTOP be it default or set with the Control Panel or program that the ACC or EMU was called from. If you Swap from MED to LOW RES select IG or VDI default palette. The R command sets the resolution then sets each VDI Pen color. 1st Parameter selects resolution to switch to: 0 = low resolution 1 = medium resolution 2nd Parameter is the system palette flag: 0 = no change 1 = DESKTOP colors 2 = IG default palette 3 = VDI default 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 7 = user defined ( see X 7 command ) 3rd parameter selects size and line end styles, and which user defined line -size- for polymarkers: 1 thru 8 for solid only lines: 1 thru 41 for user defined lines: pattern numbers 1 thru 32 -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. If you Plot your text off screen you can use this command as a way to COMMENT IG script. 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. 3 to 10 = MOUSE ZONE activates a GEM mouse pointer 3=Arrow 4=Hour Glass 5=Bumble Bee 6=Pointing Finger 7=Flat Hand 8=Thin Cross Hair 9=Thick Cross Hair 10=Outlined Cross Hair 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 or 2 activates a polymarker for a mouse pointer that you select with IG's "T" command A 3 to 10 activates the GEM mouse pointer 3=Arrow 4=Hour Glass 5=Bumble Bee 6=Pointing Finger 7=Flat Hand 8=Thin Cross Hair 9=Thick Cross Hair 10=Outlined Cross Hair 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 2 3 10 11 3 6 11 14 4 4 12 12 5 7 13 15 6 5 14 13 7 8 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. NOTE: to set color Rotation G#X 0,1,0,0,0,0: cut ON start at pen one to last pen available for the RESOLUTION you could say G#X 0,7,0,0,0,0: here if in LOW RES no effect in MONO of course. G#X 0,0,0,0,0,0: to shut OFF, The Drawer does this automatically even if you cancel. Once you say ROTATE to The Drawer it put the script in to ROTATE, has to be canceled with another script. I added ROTATE after the fact, this was the quick fix. ERASE LAST in The Drawer can take it out. 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: or G#X 2,9,9,100: --------------------------- Sets the range of the numbers returned when the 'r' or 'R' is used in place of constant value parameter given to a IG command. The first example sets r to a range of 0 to 50. The 2nd example sets R to a range of 9 to 100, setting R requires a extra parameter and the from parameters have to be equal. The range value can be from 0 up to 9999. The DEFAULT settings for random at startup are 0 to 199, so you might want to set them. 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:X>2,50,50,150: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 Load Fill Pattern ------------------- X 7 = Command identifer Loads a 16x16 bit pattern into one of the 8 pattern slots numbered 0-7 Patterns 6 and 7 also serve as Line patterns. 1st parameter is the pattern number you are loading into 0 to 7 the other 16 parameters are 17 character strings ending with the 17th as @ character. To set the bit for the pattern it has be a X upper or lower case. The other characters don't matter any mean 0, just put the @ symbol as the 17th character. I used minus signs, makes it easier to see the pattern. The Draw program has a Fill Pattern Editor. I thought about not writing one because this is so easy. The Draw Program won't store it like the example easy to see, because it trys to save lines, BBSs messages have limited lines. Although you could BitBlit the whole screen with the G command and contine in the following message! Example: G#X>7,1, ----------------@ ----------------@ --------XX------@ -------XXXX-----@ ------XXX-XX----@ -----XXXX-XXX---@ ----XXXXX-XXXX--@ ----XXX-----XX--@ ---XXXXX X XXXX-@ ---XXXXXXXXXXXX-@ ---XXXXXX---XXX-@ ---XXXX------XX-@ ---XXX-------XX-@ ---XX---------X-@ ---X------------@ ----------------@ 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 powerful animation tool in low resolution! NEW for IG218: 9 Loads or Executes the IG MIDI Buffer with any IG Commands ----------------------------------------------------------- X 9 = command identifier examples: LOAD buffer G#X>9,0,G#b>1:L>0,0,100,100:||} if 1st parameter is 0 then load until ||} is found G#X>9,0,IG Commands here until ||} if 1st parameter is 1 then Execute. EXECUTE the buffer anytime after loading with just G#X>9,1: if 1st parameter is 2 then ERASE CLEAR the buffer Sets the whole buffer to zeros and zeros the buffer counters. G#X>9,2: This buffer is used by the N command too so you have to decide what you want to use it for, music or any IG commands. You can not make a X>9,1: command inside the buffer while it's executing I put a trap in for that so no infinite loop. The buffer is 10001 bytes so 121 lines 80 characters LF/CR in general use with the IG Drawer more like 140 lines. NEW for IG219: 10 Sets the begin point for D the Drawto command ------------------------------------------------ X 10 = command identifier example: G#X>10,100,50:D>75,100: Using a L or P command also does the same thing X 10 just leaves the screen untouched. NEW for IG220: 11 LOAD or WIPE SCREEN BITBLIT MEMORY ------------------------------------- X 11 = command identifer example: G#X>11,0,0,49: Wipes ALL BitBlit Memory with 49 G#X>11,0,4,49: Wipes Horizontal Memory Section 4 with 49 if 1st parameter is a 0 then WIPE BitBlit Memory if 2nd parameter is 0 then WIPE ALL 32000 bytes of BitBlit Memory if 2nd parameter is a 1 thru 8 then WIPE a Horizontal portion of BitBlit memory with 1 being Topmost portion of BitBlit Memory and 8 being the bottom portion. These are 4000 byte sections. 3rd parameter = value to WIPE with 0 to 255 if you put 256 it will generate a random number for each byte, looks like bad TV reception. You can put a R or r here and it will fill the memory with ONE random value. All these values besides 0 and 255 just look like various vertical lines. if 1st parameter = 1 then LOAD and SHOW BitBlit Memory if 2nd parameter is 0 then LOAD and SHOW ALL 32000 bytes of BitBlit Memory, it will then attempt to get the 32000 bytes. if 2nd parameter is a 1 thru 8 then LOAD and SHOW a Horizontal portion of BitBlit memory with 1 being Topmost portion of BitBlit Memory and 8 being the bottom portion. These are 4000 byte sections, and it will attempt to get 4000 bytes. if 1st parameter = 2 then just LOAD BitBlit Memory if 2nd parameter is 0 then just LOAD 32000 bytes of BitBlit Memory, it will then attempt to get the 32000 bytes. if 2nd parameter is a 1 thru 8 then just LOAD a Horizontal portion of BitBlit memory with 1 being Topmost portion of BitBlit Memory and 8 being the bottom portion. These are 4000 byte sections, and it will attempt to get 4000 bytes. The BitBlit memory has to be transmitted correctly each BYTE has to be full range 0 to 255 and in order otherwise the image will not be correct. This is easy from a floppy or hard disk but can be done over Telnet. Once the BiBlit Memory is loaded it can be Blitted all over the screen with the Grab screen command G The LOAD and SHOW always uses the REPLACE mode. The X 11 command just loads or wipes it doesn't take care of the color palette or resolution. The IGDEV13.PRG creates the BitBlit Memory you first Grab the whole screen with Screen To Memory option it also gets the color palette settings just in case you want to save them at that Grab time. Use a Right Click on the SAVE option to save IG loadable BitBlit Memory. It will create it for you. The right click option does NOT save the drawing buffer commands. You can create a high detail IG script screen and save it as a BitBlit and just load it back in perhaps saving time and space. A full screen takes about 30 seconds at 19.2K baud one horizontal band takes about 4 seconds, 50 pixels high in monochrome 25 pixels high in MED and LOW resolution. While the Draw Buffer seems to be OK with loading Bit Blit memory I never really design it that way. EMACS doesn't like it. YMMV 12 LOAD Color Hardware Register Palette --------------------------------------- X 12 = command identifer example: G#X>12,0,0,1911,1792,112: if 1st parameter is a 0 then the next 4 parameters are color registers 0,1,2,3 with the color values if 1st parameter is a 1 then the next 4 parameters are color registers 4,5,6,7 with the color values if 1st parameter is a 2 then the next 4 parameters are color registers 8,9,10,11 with the color values if 1st parameter is a 3 then the next 4 parameters are color registers 12,13,14,15 with the color values So for MED resolution it only needs to be called once but for LOW resolution it's called 4 times if you need to set them all. The IGDEV13 program generates the color palette values when you use SET Palette/Save whole Palette It also grabs the actual values when you ALT-L in the terminal screen or when you GRAB Screen to Memory while using the IGDEV13 program. It will then save the proper palette at a RIGHT CLICK on SAVE Buffer/Mem ****************************** Converting DEGAS/Elite images: Set the GEM DESKTOP in the Resoluton of the DEGAS picture you want to convert .PI1 is LOW .PI2 is MED .PI3 is HIGH resolution. Run the IGDEV13 progam in the terminal screen Press ALT-L find the PICTURE.PI? you want to convert, not a .PC? file. It will load and display it reguardless of the resolution you are in currently, warn you when it is the wrong resolution, but still load just looking messed up. You have the power, maybe you want it messed up for effect. The cursor will most likely be blinking because you are still in the terminal mode. Next hit the F1 key. Now _RIGHT_ Click on SAVE Buffer/Mem a file selector will pop up CHANGE at least the Filename.EXT to .IG0 or .IG1 or .IG2 suggestions maybe Filenam0 to 8 to signify 0 whole screen, 1 to 8 which piece, otherwise you will be OVER WRITING your DEGAS.PI? file. It will then state it's going to save bit blit memory and also a tip to get something into bit blit memory first. It will display what's in bit blit memory and you will be asked which portion of the screen you want to save the horzontal lines are there to help only. Next is a chance to save the color palette or not. It will then attempt to save the color palette first and the bit blit data next, you will see how many bytes are saved then Tap a Key to continue. That just saved the palette and bit blit buffer to a FILE nothing else and NOT the Draw buffer. You have to LOAD it back in to actually use it, but first if you want to set the resolution, you may not depending on what you are doing, select BEGIN/EXIT Drawing click on one the BEGINs you want, the palette gets set from the converted DEGAS if you saved it, Next _Right_ click LOAD Buffer/Apnd load in your converted DEGAS image, the CLICK BEGIN/EXIT Drawing and select one of the ENDs. You can then Execute the buffer to display it. SAVE the buffer if you want to keep it that way. These Bit Maps saved are NOT suitable to post in a message. You should be able to use them for menus or maybe door games on your BBS depending on how the BBS handles the IG file. Don't try to edit these with EMACS (ME.TTP). It thinks it's a VERY LONG line and can mess up your work. --------------------------------------------------------------------------- =================== END OF TEXT G#I 0: