text:
FacebookTwitterGoogle Bookmarks

Expand your Amiga's music capability to a new creative edge . Introducing MIDI GOLD MIDI Interface Hardware for the Commodore Amiga Personal Computer Dual MIDI Out and single MIDI In connections. Sync Out connection provides clock and start/stop control for drum machines and other devices. Connects directly to the serial port. Custom metal enclosure. Complete with interface cable. Full technical information will be made available to all Amiga product developers. PRICE .95 - Call or write for availability. GOLDEN HAWK TECHNOLOGY 427-3 Amherst Street, Suite 389 Nashua, New Hampshire 03063 (603) 882-7198 Weekdays 2PM-10PM EST DEALER INQUIRIES WELCOME Amiga is a trademark of Commodore-Amiga, Inc. The Lattice programmer has to use the ATOM utility to specify CHIP or FAST memory, after compilation and linking. This is an admitted temporary fix tor Lattice users. ATOM stands for "Amiga Temporary Object Modifier". The ATOM utility massages an object file, so this must be done after every compile and link. So far, few developers are constrained by this, but it is a serious theoretical problem, for future Amiga programs that take advantage of several megabytes of memory.

Click image to download PDF

Document sans nom May 1986 Vol.1 Number 4 U. S.A. $ 2.50 Canada $ 3.50 Commodore Amiga™ Information and
Programs SCRIMPER! Screen Image Printer in C! Roomers Miga Mania Tutorials Forth C, Basic Reviews Sky fox Arcticfox AMICUS CD ROM Our First Amazing Hardware Project: Connect your own IBM 5 1 4 Drive Rmazing Computing & Rmazing Dealers The following are Amazing Dealers, dedicated to supporting as well as selling the Commodore-Amiga™. They carry Amazing Computing™, your resource for information on the Amiga™. If you are not an Amazing Dealer, but would like to become one, contact: PiM Publications P. O. Boh 869 Fall Riuer, MR. 02722 1-617-679-3109 Atnsama Adax
Da: a Syslwns Huntsville ComputerLand of Sacramento Command
Computers Birmingham ComputerLand of Stockton Madison Books &
Computers Madison Computer Literacy Book Shop Mers Photo &
Computer Shop Montgomery Home Computing Center Universal
Computer System Mobile K J Computers Ridgecrest Computer Ctr,
Inc, Arizona S. O.S. Computers Computer West Pheonix Software First
Copperstato Business Systems Pheonix The Computer Room North
American Digital Tucson The Floppy Disk Inc. Tronixlools
Tucson Winner's Circle HI Electronics Arkansas Sis Inc. Mt.
Home Colorado The Micro Shop Little Rock Citadel Computers
Computer Room California Ideal Computer Systems Brown Knows
Computing Redlands Micro World C. F.T. Clairomonl Sun Country Computers Century Computer Systems
La Habra Whole Life Distributors Champers Computer Supply
Studio City Computer Attic Palo Alto Connecticut Computer
junction Sanata Ana Connecting Point Computer Nook, Inc. San
Bernadine Mnemonics Inc. ComputerLand Freemonl Freemonl
Personal Computer Contor ComputerLand of Citrius Hts. Citrius Hts. Software Kingdom P.O. A1007 ComputerLand of Sacramento Downtown Spectrum Computers Goorgelown Norwalk Norwich Easl Windsor Now Haven Commodore Computer Shop Ocala Computer Bar Pennsacota Computer Image Miami Computer Terminal tuc. Sebring Computer Ware Inc. Tamarc Computers 4 Ronl W. Palm Beach Computers Plus South Daytona Colronics Inc. Stewart
Education Computers Elc. Taiahnsse Family Computers Sarasota Florida Bookstore Gains vine Gulf Coast Computer Elect. PanamaCSy Megaport Computer Conter Venice Micro’s Etc. Altamonte Springs MSI Business System Brooksvillo New Age Electronics St. Petersburg Orlando Electronics Co. Orlando Rainbow Computr Contor Orlando Random Access Computers Inc. FL Walton Beach Softwalls Computer Center inc. Holly Hill The Open Door Cocoa The PC Collection Coral Gables Georgia Future System Augusta Software South Inc. Savannah icwa Easy Keys Computer Center Iowa City Micro Computer Applications LTD Marshalltown Howe Ave, Stockton Sunnyvale San Bruno Granada Hilts Ridgecrest Los Angeles Santa Rosa Scotts Valley Downey Berkley Sunnyvale Colorado Springs Aurora Evergreen Lakewood Colorado Springs Englewood Idaho AB1 Computer 4 Video Illinois Campa Batavia Champaign Park Ridge Nilas Naperville Normal Sterling South Bend FI. Wayne Fort Wayne Michigan City Greenlield Indianapolis West Lafayette BA Business Computers Computer Resolution Computerland O'HarB ComputerLand of Nies litini Microcomputers Inc, The Memory Expansion Unique Computer Indiana Eurkat Computer Ctr. Eytrex Computer Computer Corner Computer People Inc. Greg Chaney Microcomputers Inc. Vons Computers Kansas Data Bank Corp. Wichita Liberal Newton Manhattan Topeka J 4 L Electronics MidKansas Computers Midwest Computers Thoroughbred Computers Kentucky MicroAge Computer Store Reality World Computers Lexington Lexington Louisiana Computer Time Shreveport Metairie Metairie Melalrie Lafayette Modern Business Machines Software Center International Soltware Mart The Computer Clinic Massachusetts Cluo Computer Cambridge Leominster Marshfield Norwood Wellsley Tewksbury Amherst Cambridge West Newton Pinstleld Wheaton Ocean City Baltimore Rockville Baltimore Comp uteri and HCS Computer Center LCA Video 4 Computer Ctr. Memory Location OmniTok Computors Pioneer Valley Data Equipment Tech Computer Store Tne Bit Bucket Tycom Inc. Maryland Computer Cratlers CampulerWorld Micro Computer Center Software Advantage The Logical Choice Inc. Maine Computer Barn Valley Computers Damariscotla Auburn Grand Rapids Polowskey Ann Amor Traverse City Lansing Pontiac Allen Park Novi Midland Ukonoa St. Joseph Grand Rapids Roseville Madison Heights Grand Rapids Livonia Kalamazoo Ypsdianpi Farmington Hills Michigan Sasic Computer Center Bils-Bytes-Nibbles Chelsea Computer Computer Supply Co. Direct Access Edmunton Computer Center Galaxy Compulers Michigan Sottware Midland Computer Shop Pro-video Professional Computer Systems Programs Unlimited Roseville Computer Store Slip Disk Soltware Plus Specialists Computer The Sottware House Ye Old e Computer Shoppe Retail Computer Center Inc. Minn. es aia Computer Place Computer Specialties Plus Compulers, etc. Minneapolis Monlicsllc Eagan Hboing Minnetonka Hopkins MCO of HiPbing Inc. Online Computers Specialists IM Missouri Associated Computer Services Brands Mart Computers Commputer Concepts Data Byte Systems Plus Springfield Kansas City Columbia St. Louis independence Mississiccl Enterprises Unlimited Jackson Montana Appeigren Computer Services Great Talis Notth Carolina Digit! Raleigh TDS Computers Carrooro Aeon. Paheia _ Computer Associates Fargo The Computer Store Minot Nebraska BULLSEYE Lincoln Double E Eleelroules Omaha New Hampshire Computer Mart of New Hampshire Nashua New Jersey South Orange Fairtiek) Ridgewood Family Computer Centies Family Computer Centres Family Computer Centres Nffry Mexico Academy Computors New Horizon Computer System Pago One Newstamd Technical Concepts Albuquerque Alamogordo Albuquerque Les Trues Ncr ada Century 23 Inc. Las Vegas Las Vegas Carson City Computer World ComputerLand of Carson New York Amuse Byto Shop Castle Computer CIA Sottware Center Compurite Center Computers Etc. New York Merrick Latham Flushing White Plains Syracuse Jamestown New York Gsen Falls Scotia Kenmore Massena Rochester Storey Brook Rome Hicksville Computer Outlet Leigh's Computers Ray Supply Inc. Soltware S Such Sottware Supermarket Star Tech Systems Tedmw Business Products The Working Computer Video Computer Center World Computers Inc. Oh'o Computer Network Compulers Plus o! Ohio Earthrise Micro Systems Earthrlse Micro Systems Earthrlse Micro Systems Lakes Consumer Electronics Micro Center Microwave Magic North Coast Programming Quality Computer Appliances Quality Computer Appliances Saxtan Computer Center SottwaireCentre International Sottware and More Newark Upper Sandusky Delaware Columbus Columbus Akron Columbus Fairtiek) Willoughby Toledo Toledo Sandusky North Olmsted Cincinnati Oklahoma Colonial Video 4 Computer PCTech Bartlesville Tulsa Oklahoma City Lawton Second Hand Sottware Video-Comp inc. Oregon Coackamas Computers Computron Business Systems Computron Business Systems IB Computers Software Center Soltware Express Coackamas Portland Tigard Portland Beaverton Eugene Alpha Omega EBE Basic Computer Systems Data Soltique Computerware Pittsburgh Computer Store Triangle Computers Warren Hermitage Pittsburg Pittsburgh Indiana atiotiajsland. CompUlopia Complltopia Micro Limits Micro Limits Providence Warwick Smithlield Warwick International Computer Services Johnston South Carolina Avcom International Inc. Horizon Horizon West Columbia Greenville Greenville Tennessee CompulerLab of Memphis Eastern Computer Inc. Sottware First Texas Byte by Byle C. E.M. Corporation Colonial Video Colonial Video Computer Age
Computer Age Computer Concepts Computer Magic Computer
Revelations Computer Time Inc. Metroploitan Computer Micro
Search Micro Search Inc. Regency Educational Systems Solid x
Sottwaire Centre Sottware Terminal The Computer Experience
Thye Computer Shop Ul&l Computors Plus yiroinla Colony Ltd. Computer Annex Diskovery Family Computer Center Virginia Micro Systems Wasti'ncioa A. P.P.L.E. CO-OP Bob Mascott Com-Sotl Computers Computers +
Computron Business Systems Micro Age Computer Store Programs
Plus Wisconsin Colodron Compulers Soltware Shoppe TMW
Sottware Inc. Canada Compute or Play Compute works Computer
Shop Data Pro Computer Store of Calgary The Sottware House
Hindsln Computing Red Deer Micro Systems Memory Lane Computer
King Conit Nutec Sprite Strider Super Sottware Canadian
Conputer Era Microtnan ComputorWork! J. W. Allen Kobetek Mlnicomp Arkon Chatam Computer ComputerLand
Comspec Electronics 200t Hastings Data The Computer £ You
Thornbill Sottware Co. Deitronie Sotare Mierodata Into Meroier Lava) Micro Vision Troulque Oistrbullon Visipro Dfslribuled in Canada by Avila Sottware Distubutors 4 Phased Olslribulors Inc. t-600-661-8358 Memphis Knoxville Nashville Austin Brazoria Houston Houston Dalas Houston Waco Austin Houston Marshal Richardson Huston Houston Dalas Watauga Dalas Fort worth San Antonio Aqaleen Murray Hampton Morgantown Fails Church Fairfax Woodbrfdgo Renton Seattle Everett Tacoma Yakima Beiivew Seattle Racine Fond Du Lac Wavsan Aberta Aberta Aberta Aberta Alberta Alberta Aberta Aberta Aberta British Columbia British Columbia British Columbia British Columb'a British Columbia British Columbia Manitoba Manitoba Maritime* Maritime* Maritmes Maritmes Ontario Ontario Ontario Ontario Onlario Ontario Onlario Ontario Quebec Quebec Quebec Quebec Quebec Quebec Quebec Concord, Ontario Southeast Calgary, Abeda MetaScope gives you everything you've always wanted in an application program debugger: • Memory Windows MetaScope: The Debugger Move through memory,
display data or disassembled code, freeze to preserve display
and allow restoration. • Other Windows Status windows show register contents and program
state with freeze and restore: symbol, hunk, and breakpoint
windows list current definitions. • Execution Control Breakpoints with repetition counts and
conditional expressions; trace for all instructions or
subroutine level, both single-step and continuous execution. • Full Symbolic Capability Bead symbols from files, define new
ones, use anywhere. • Dift Source file c.omj • Filter Texl file filter. • Comp Simple file compere. • Dump File dump utility. • MelaSend Amiga to PC file transfer. • MelaRecy PC;o Amiga file transfer, Metadigm products are
designed to fully utilize the capabilities of the Amiga'" in
helping you develop your programs. If you're programming the
Amiga, you can't afford to be without them. Dealer Inquiries Welcome • Powerful Expression Evaluation Use extended operator set
including relationals, all assembler number formats. • Direct to Memory Assembler Enter instruction statements for
direct conversion to code in memory. • and More! Log file for operations and displays, modify search fill memory, etc. MetaSeribe: The Editor MetaSeribe has the features you need in a program editor: • Full Mouse Support Use for text selection, command menus,
scrolling or use key equivalents when more convenient. • Multiple Undo Undo all commands, one at a time, to level
limited only by available memory. • Sophisticated Search Replace Regular expressions,
forward backward, full file or marked block. • Multiple Windows Work with different files or different
portions of the same file at one time. • Keystroke Macros Record keystroke sequences or predefine,
assign to keys you choose. • and Morel Copy between files, block copy move delete, set tabs
and margins, etc. MetaScope $ 95.00 MetaSeribe $ 85.00 MetaTools
$ 69.95 19762 MacArthur Blvd. Suite 300 Irvine. CA 92715 (714) 955-2555 (California residents +6%). Visa MasterCard accepted. Amiga is a trademark of Commodor®-Amiga Inc. PUBLIC DOMAIN SOFTWARE PiM Publications, Inc. has AMICUS Disks 1 through 8 and Fred Fish Disks 1 through 11 available at special prices Per disk $ 6.00 to Amazing Computing Subscribers or $ 7.00 to non subscribers (FM Residents add 5% sales lax) Make checks payable to: PiM Publications Inc. P. O. Box 869 Fall River. MA 02722 Everyone is encouraged to
distribute this software freely to your friends, members, and
customers. Please allow 4 weeks lor delivery Rmazing Computing Publisher: Joyce A. Hicks Circulation Manager: Doria Gamble Assistant to The Publisher: Robert James Hicks Corporate Advisor: Robert H. Gamble Managing Editor: Don Hicks Hardware Editor: Ernest P. Vlvelros AMICUS Editor: John Foust Amazlna AuCiora: John Foust Don Hicks Kelly KauUman Perry Klvolowitz Richard Minor George Musses Jr. Daniel Zigmond A The AMIGA Special Thanks to: Robert H. Bergwall RESCO, Inc. David Street E. P.V. Consulting New England Technical Services Interactive
Tutorials Inc, Advertising Sales: 1-£ 17-379-3109 Amazing
Computing™ (ISSN 0836-9430) is published by PiM PUBLICATIONS,
Inc., P.O. Bo* B69, Fall River, MA. 02722. Subscriptions: in
the U. S.. 12 issues lor $ 24.00; Canada and Mexico, $ 30.00; Overseas,
$ 35.00, Printed in the U.S.A. Copyright C 1936 by PiM
Publications, Inc. All rights reserved. Rmazing Computing Table of Contents May 1986 The Amazing... C Tutorial; Part Four John Foust reviews Aztec C from Manx and its application on the Amiga 8 Skyfox and Arcticfox reviewed Ervin Bobo battles in the Electronic Arts' dimension 15 "ROOMERS" The AMIGA 19 Build your own IBM 51 4 Drive Connector Ernest Viveiros with the help of some friends creates ourfirst hardware article 21 Forth: Part two John Bryan and the Elements of Style in Forth 27 Amiga Basic Tips Rick Wirch shows the more active calls and how to use them 29 Scrimper by Perry Kivolowitz A 'C' program to print your Amiga screen 33 Microsoft Basic: part two Kelly Kauffman on Amiga Basic Commands with a listing 49 Miga Mania Perry Kivolowitz discusses dealer loyalty 51 The AMICUS Network: Amicus by John Foust 54 Microsoft CD ROM Conference 59 Jim O'Keane looks at Microsoft's Conference and CD ROMS in general Amiga BBS Numbers 63 Departments; From the Editor 4 Letters 6 Index of Advertisers 64 From the Editor: by Don Hicks May Welcome to the fourth issue of Amazing Computing. This is a super issue for us. We have packed the magazine with beginner and advanced user information. April Fool I hope all of our readers appreciated the light touch we placed on the April issue's front cover. We thought a lew misspelled words might bring smiles. Listen, this is supposed to be fun and no one in their right mind would misspell a word on the front cover. Would they? New Authors We are beginning to see the effects of our search for "new" writers. We have been asking for contributions of articles and tips to the magazine, and they are now coming in quickly. However, there is always room for your contribution. We are not asking for oniy the experienced and previously published author, we want you. We want your enthusiasm and your growth. Your ideas and practice. Remember, anything you believed was important to place on the Amiga, is important to our other readers. Our pay rates will not make you rich, but they are a nice reward for doing what you already enjoy. Amazing Computing is excited about the prospects of you publishing your deeds. Let us see them. CD ROM Jim O'Keane has entered his first article for AC. Jim has written a report on the recent CD Rom conference by Microsoft. In a hope to better understand this new technology, Jim has given us an insider's perspective of the technology and the conference. Our First Hardware Project! Our hardware editor, Ernest Viveiros, has written his first hardware article for Amazing Computing. Working with information supplied by a reader in Maine, Jim Rutherford, and our AMICUS editor, John Foust, E.P.V. was able to construct an interface between a Shugart IBM 5 1 4 drive and the AMIGA, it utilizes the Transformer software from Commodore. And Works! This is Mr. Viveiros' first article, and although short on words, he has conveyed exactly what he wanted lo say with schematics and graphics. Basic Both Rick Wirch and Kelly Kauffman have supplied us with insight into the Amiga's Basic. Their research and articles should help a few of us along the way to better understanding our machines. C John Foust has taken a look at the new compiler from Manx, Azteck C. His pari review and part tutorial should be of interest to the C users in our group. Scrimper! Nol to be out done, Perry Kivolowitz has contibuled a great new program to the C community, scrimper!. In an article that is part listing, part tutorial, Perry has brought a little reason to the tangle mess some of us feel when manipulating the hidden controls of our Amigas. Although the listing is long, we feel information should be of special interest. Entertainment! Mr. Bobo has returned with a close took at two releases from Electronic Arts, Skyfox and Arcticfox. There are some pure breds who refuse to admit their Amigas are ever used for games. Well, if that is true, great. But remember, some of the better advancements in graphics and speed have been through the use of play. To be able to play and exercise both the machine's capabilities and ours, allows us to extend both. I am reminded of the Apple II. It was supposed to be an excellent game machine. It was through the use of its graphics and capabilities that an entire new way of working with computers was discovered. Doesn't it seem obvious we should use our play to further ourselves. And besides, after careful study and work, I finally won at Arcticfox and these are the same reasons I used to explain my time spent before the game to my boss, Joyce. Comdex As I write these words, we are preparing a trip to Atlanta Georgia and Comdex. For the unitiated, Comdex is a meeting of Suppliers and Dealers in the Computer market, it is the stage where each supplier and manufacturer must try to outshow the other. The strength of the competition is in showing the superiority of their product in one way or another over everyone else. Many Amiga developers have told us to "see us at Commodore's booth at Comdex." We have no idea what to expect, since this will be our first Comdex, but I am certain it is worth note and will be the central piece of our June issue (besides, I have never been to Atlanta). See you then, and keep those articles coming. This assembler code can benefit programmers who want to see the actual machine language the compiler is producing, to search for bugs, or to learn more about the way a compiler works. In comparison, the Lattice compiler produces an intermediate file, with a filename extension of '. q', called a "quad file," which becomes an object file after the second pass of the compiler. There is a Lattice utility called 'ornd1, for Object Module Disassembler, which can disassemble a Lattice object file into assembly language source. I noticed one simple difference right away. I had made a series of simple text filters using the Lattice compiler, and 1 compiled them with the Manx compiler. 1 was amazed at the code size reduction. Some of these filters were 18 K with Lattice, but only 6 K with Aztec. However, I noticed the last few lines were missing from each text file! Passed through the filter. I needed an explicit 'fdose ()' in the filter to properly close the output file, in the Manx version. Apparently, Lattice's implicit exitQ at the end of a program did this for me, while Manx did not. ('Filter' is a common name for a program that converts one file to another, translating it in some way. This filter removes carriage-returns and other spurious characters.) Small programs The code in Listing One compiled in a 3:05 minutes with the Lattice compiler, and the executable load file was 10492 bytes. Under similar compilation conditions, the Manx program compiled in 1:00 minute, and the program was 3716 bytes. Please note that these times reflect having the Manx library in RAM: while the Lattice libraries were not. Both compiles were driven by a simple EXECUTE batch file. More on this later. By linking the Lattice amiga.lib before Ic.lib, the code size went from 14944 to 10492 bytes, since amiga.lib contains some functions nearly identical to functions in Ic.lib. I remembered that Lattice adds symbol names to the load file, by default, while Manx has an option to do so. The StripA program, supplied to developers on the Wack disk, removes the symbols from a load file. Using this, the Lattice file above was reduced from 10492 bytes to 9932 bytes. I knew this comparison was a little harsh on Lattice. I decided to rewrite the filter, and try again. Instead of standard C calls, I used AmigaDOS calls. This should be a better measure, since both compilers simply make calls to the AmigaDOS routines, and the overhead would stand out more than code that was fattened by standard I O routines. See Listing Two. $ 395 IS ALL YOU NEED FOR OUR 2400 bps MODEM $ 395 FOR CTS 2424 ADH $ 395 includes the bells & whistles ‘Autodial autoanswer * 2400 1200 600 300 bps operation ‘Synchronous asynchronous
‘Remote and Local Diagnostics ‘CCITT V..22 bis, V..22 A B, Bell
103 113 & Hayes Command Set Compatibility $ 395 includes an
Amiga Modem Cable $ 395 includes your choice of Maxicomm™ or
On-Line™ software. $ 395 includes a two-year warranty Add $ 2.50 for shipping and handling Mass, residents adcT5% sales tax. Visa and Mastercard Accepted Lakewood Associates 315S Chestnut Street Needham, MA 02192 (617) 332-2554 Listing A Manx Lattice Manx Manx libs in RAM:
libs on disk, libs on libs in precompiled Lattice with
Alink disk RAM:. h files libs on disk FASTER switch
'cc'or'lcl' 0:15 0:15 0:15 0:20 0:20 starts (1:15) (1:15)
(0:30) (2:40) (2:40) 'as' or lc2' 1:30 1:30 0:45 3:00 3:00
starts (1:00) (1:05) (1:10) (0:45) (0:45) 'In’ or Alink
2:30 2:35 1:55 3:45 3:45 starts (3:20) (1:00) (1:10) (2:45)
(1:45) Compile ends 5:50 3:35 3:05 6:30 5:30 Resulting load
file size Manx: 13,564 Lattice: 26,440 (27,496 before
StripA) You can remove another few K from a Lattice program
by turning off stack checking. It seems as though there are
a dozen tittle optimizations one can perform on a Lattice
program, just to make it the same size as Manx. Why should
a programmer sacrifice standard C routines for AmigaDOS
routines? I have not mentioned executable program speed.! Have heard many reports that Aztec programs are much faster than equivalent Lattice programs, but I cannot verify these claims. Conventional wisdom suggests that a smaller program will run faster, given the same C code, and I'd agree. Speed comparisons are a large, rusty can of worms that I'll leave to another writer, in another column. I worry that speed comparisons often deteriorate into that field of advertising called "benchmarketing." Just like the Intel vs. Motorola debates... Manx assembler The Manx assembler is invoked during every compile, so the times in the listings should demonstrate that it is fast. It is a macro assembler, but its largest shortcoming is incompatibility with the Metacomco assembler. This isn't Manx's fault, of course, but only a detriment to Amiga developers. The Manx assembler does not have as many assembler directives as the Metacomco assembler, so converting the assembler header files from Lattice to Manx can take quite a while. Of course, another shortcoming of Manx in general is that the object files are incompatible with the Metacomco linker. Considering the snail's pace of Alink, a.k.a. "Deep Thought", this might nol be so bad. I have heard a rumor that Manx will have a conversion utility for this in the future. Disk organization The Manx disk is usable right from the shipping box. This saves the time and headache to organize the files into a manner conducive to quick compiles. The Lattice compiler requires a tedious reorganization of the original disks. This includes optimizing the EXECUTE batch files for use of the RAM: disk, for example. With the first version of Lattice, many developers decreased compilation times by stripping the comments from the include' files. This increased the amount of free space on the disks, and eased the job of the compiler. This sort of out-of-the-box organization is present in the Lattice compiler for the IBM PC. It has an install batch file which creates the proper directories on your hard disk, and copies the files from the distribution disks. The organization of the Manx disks is appreciated. Portable code While C is often praised as a portable language, people who program in C know this is often far from the truth. It may be possible to write portable code, but many programmers are lazy, and assume that a program will never be ported. The simple rules of portable code are often violated for the sake of quickly generated code. There are several incompatibilities of this sort between Manx and Lattice C. The most major difference is the default size of an ‘inf. Manx thinks that an 'ini' is sixteen bits, while Lattice thinks an 'inf is four bytes, or 32 bits. Manx and Lattice agree that a 'long' is 32 bits. AmigaDOS functions use a 32 bit data type. What Lattice considers to be a short, Manx considers an ’inf. A Lattice programmer who assumes 'inf is a generic storage type for every datatype will have troubles porting to Manx. For example, a Lattice programmer knows that a Lattice 'inf will hold a 68000 address, which requires 32 bits, and might use this assumption in a program implicitly. This use only becomes explicit under close examination of the code. Remember, C will let you assign almost anything to anything, so a programmer might try to store an address value in an 'inf variable, which doesn't work when an 'inf is 16 bits, and an address is 32 bits. Of course, one could argue that 32 bits is a natural size of data on the 68000, and that 'inf should be the most natural data type on a machine, so they should be the same on the Amiga. This is the opinion of the Lattice manual, and many C programmers. +l option Actually, Manx knew this, and included a command-line option, to tell the compiler to make 'inf a 32 bit data type. This will resolve most conflicts between Manx and ill-written Lattice programs. Incompatibilities can still occur when the size of a 'struct' is to stay the same, and the 'struct' includes 'inf or 'short' types. The latest revision of the C language standard allows passing a struct as a return value from a function. Manx does not allow this, but Lattice does. Manx does not have enumerated types, while the latest Lattice compiler does. The first Amiga Lattice compiler professed to allow 'enum's, but the compiler would always Guru Mediate when it found one. Another problem is in the declaration of argv[], the standard method of passing corummand line arguments from the operating system to a C program. As developer D.J. James pointed out to me, Manx only allocates enough elements in this array to hold the number of arguments from the command line, and no more. TH£ oxatok. ST££Qf VKOPSSOX for the, AMIGA Take advantage of your AMIGA'S speaking powers with THE ORATOR. THE ORATOR allows you to compose text in either regular English, or using the Phoneme method (or a combination of both). A complete text editor permits you to change the spelling of words in order to get rust the right sound. You have complete control over the Rate, Pitch, Tuning, Voice, and Mode o (each individual phrase by simple, mouse controlled sliding bars and boxes. A phrase can be any length up to 140 characters, and at least ZOO phrases can string together in a single continuous tile. Your story, poem, jokes, or whatever, along with their voice settings, can be saved in a compact sequential tile that you can use in your own BASIC programs. THE ORATOR also comes with THE PHONEME TUTOR, a program that makes it easy to learn the Phoneme method of text input. Includes complete documentation and a utility program lor use In your own programs. Requires the AMIGA with 512K memory, one disk drive, and AbasiC or Amiga BASIC. Both versions are included on the disk Price: $ 39.95 postpaid COD.add$ 4 (Indiana residents add 5% sales tax) Mail check or money order to: THE QUALITY COTTAGE v 'y 6301 F University Commons f)(Suite 308 3 South Rend, In 46635 (21!)‘ 234-4401 AMIGA ts a cl Commodore.-Amiga Inc. ProForma™"An Enhanced Text Processor ProForma™ Is a powerful text processor and formatter with roots in NROIf, a Unix text processor. When used with an Amiga editor, ProForma™ becomes a professional document production tool. ProForma™ supports most popular letter quality and dotmatrix printers, Vertical format control — page length, header format, window line, variable line spacing, Horizontal formal control • margins and indent. Multicolumn Print — up to 1 text columns per page. Fill and justification Tabular Data format Headers and looters — with page numbering. Character formating ¦ boldface, underline, italics, superscript subscript, strikeout, double width, alternate fonts (up to 3), Macro definition — create new ProForma™ commands. Change bar generation — for revision control. Table of Contents Generation index Generation Document preview — formatted documents on the screen. Suggested Retail Price-$ 75.00 ProForma™ developed by Future Concepts, Inc., exclusively distributed by: Professional Network Services Corporation 315 Chestnut Street Needham, MA 02192 (617) 449-6460 Dealer Inquiries Invited ProForma™ • a trademark
of Professional Network Services Corporation * * character
formals and fonts vary with printers supported. The commercial version of Manx includes a series of Unix-like utilities. The manuals are very clear about the incompatibilities of each tool as compared to the Unix equivalent tool. This is a nice touch, and makes a Unix-head feel right at home. The documentation is specific enough to list which Unix command line switches are implemented for each program. Inline assembly code The Aztec compiler allows inline assembly language, separated by asm' and Tfendasm’ directives. This is nice for quick and or dirty coding, but even the Aztec manual recommends that assembly language routines should be placed outside of C source code. Of course, inline code is highly nonportable. Often, it depends on the register usage assignments of a particular compiler, and these assignments can change. Register usage Aztec C uses 68000 registers D0-D3 for register variables, and registers D4-D7 for intermediate values. It uses registers A0 and A1 for temporary values, and A5 is its slack frame pointer, in small data models, A4 points to the middle of the data segment. A6 is for temporary values, with A7 pointing to the top of the stack. Lattice uses a different set of registers than Manx, and some programmers have pointed out that Manx uses a strange set of registers, as compared to other 68000 C compilers. This only hinders a few applications, where a programmer could use a more efficient, optimizing compiler on some other 68000-based machine, and transfer the code to the Amiga. Large and small models Aztec allows small and large code and data models. This doesn't mean the size of a block of code or data is limited, as in the 8086 family of processors. Instead, these are the basis for code and data optimizations. A small code model means that call or jump instructions must be within 32 K bytes of their destination, since position-independent instructions are used, specifying the destination as an offset from the PC. An address register will be reserved, and it will point to the middle of the code segment, so instructions can use it as a base address, and supply an offset from that base, to form a destination address. However, H a small code model funclion needs to reference a location beyond 32 K bytes away, the linker will build a jump table, which means the function will use the jump table as a stepping stone to the distant location. A large code model program uses position-dependent references for jumps and calls, these are resolved at load time by the normal executable file loader. This also means that a large model program will take longer to load, since the operating system loader must patch the absolute (or position-dependent) references, adding the load address (base address) of the code segment to each jump, call or data instruction, which carries an offset. In its translation of the C source code, the compiler can optimize the machine code to use relative instructions, using the address of the center of the segment as the base address, and supplying a constant offset from that base, plus or minus 32 K bytes. The 68000 has shorter, faster instructions for branching and data manipulation that use this sort of base and offset indexing. A small data model program is limited to 64 K of contiguous global and static data. A data register will be reserved to point at the middle of this segment, and all data references will be offset from that register. A large data model program can have an unlimited sized data segment, since absolute instructions will be used to reference the data. The Manx manual explains these tradeoffs very well. The use of overlays is discussed in similar detail. Other options for 'cc' include setting the size of many compiler symbol tables, including the expression, symbol abd 'case' tables. The preprocessor also predefines FILE. _LINE, TUNC symbols, very useful in debugging. These expand to the filename, line number, and currently-compiling function name, respectively. CHIP or FAST memory The Aztec linker allows the programmer to specify whether code and data for each link module should be placed in CHIP or FAST memory on loading. The first 512 K of memory you have in your machine is MEMF_Chip memory. This is the only memory accessible to the video hardware, so all video images in use must be placed in this memory. Additional memory beyond 512 K is called MEMF_FAST memory, or just FAST memory for short. For example, a program might have several icon images it needs in video memory. But the rest of the program should be in FAST memory, if possible, to leave more video memory for other programs. The FAST memory is considered fast because it sees no contention from the video chips. The video chips will sometimes "steal cycles" from the processor, in order to manipulate CHIP memory. Programs executing in CHIP memory will run slightly slower at these times. Expand your Amiga’s music capability to a new creative edge... Introducing MIDI GOLD MIDI Interface Hardware for the Commodore Amiga Personal Computer • Dual MIDI Out and single MIDI In connections. • Sync Out connection provides clock and start stop control for
drum machines and other devices. • Connects directly to the serial port. • Custom metal enclosure. • Complete with interface cable. • Full technical information will be made available to all Amiga
product developers. PRICE $ 79.95 — Call or write for availability. GOLDEN HAWK TECHNOLOGY 427-3 Amherst Street, Suite 389 Nashua, New Hampshire 03063 (603) 882-7198 Weekdays 2PM-10PM EST DEALER INQUIRIES WELCOME
Amiga is a trademark of Conunodore-Amiga, Inc. PRESENTS? INFO BASE How avail able lor the Ami Qa I INFO BASE Is a powerful, yet easy to use Data Base program, designed lor the Amiga to store and relrieva information in an organized manner, Each record can contain up to 200 fields of Inlomnalion. You create, design, and edit custom print torrrs. Each print form, you design, can create a different type of printout such as mailing labels, multi column reports, invoices, fists, etc.... h addition, text can b« Incorporated into the design cl print lorms, allowing both text and Held information io be printBd on the same line. INFO BASE FEATURES • DESIGN DATA BASES, ALLOWING UP TO 200 FIELDS OF INFORMATION FOR
(US) Enclose Check, Money Order, or Cashiers Check. Phone orders wit be shipped C.O.O. and must add *3.00 S & H. Please allow 10-14 days for delivery. Hsm©t Box, 725 Kenmore, NY 14217 (716) 877-3510 Dealer Inquiries Welcome INFO BASE requires an
Amiga with 512K RAM and at least one disk drive. (Listing One) * This fitter changes Cft LF to LF, and removes binary. * * Usage: * cdf21f infile outfile * V include "stdio. h" main () int
c; while ((c=getchar ())!°EOF) if (o31 && c 127) putchar (c);
else if (c==10 j| c==9) putchar (c);} fdose (stdout);}
(Listing Two) * This fitter changes CR LF to LF, and removes
binary. * * Usage: * cdf21f infiie outfile * 7 extern struct FileHandle
*luput (), *Output (); int Read (), WriteQ; main () struct
FileHandle *infp, ‘outfp; char inbuf[1]; infp = Inputs); outfp
= Output (); while (Read (infp, inbuf,1 L}==1 L) if (inbuf[0] 31
&& inbuf[0] 127) Write (outfp, inbuf,1L); else if (inbuf[0]= =*10
| inbuf[0]==9) Write (outfp, inbuf,1L);} r no need to CloseQ
any files 7 • AC-SKYFOX X Entertainment Reviews l by Ervin Bobo, reviewed
by Erv Bobo Of all the games slated to be transferred to the
Amiga format, probably none was more eagerly awaited than
SKYFOX. It seems that many people who had seen it run on other
machines multiplied what they had seen by the power of the
Amiga and expected something great. They will not be
disappointed. There are no great changes in SKYFOX, however, but a collection of subtle changes that leads one to the idea that the capabilities of the Amiga finally allowed it to be fine-tuned. And like an automobile newly tuned, it gets off to a roaring start. I you are familiar with the C64 version, the first thing you will notice is that the theme now sounds like real music, rather than like a clavier. (SKYFOX boasts stereo sound, so be sure your system is hooked up and the volume knob set way up.) There are the same fifteen scenarios and five skill levels from which to choose, depending on how lucky you feel. Select one and you are whisked to a briefing room where a tactical map shows the location of your own installations, enemy tanks, planes and motherships. Once you have digested this, press the fire button and you will find yourself in the cockpit of SKYFOX, ready to be launched from a long tunnel. While control can be by either joystick or mouse.! Found the joystick to be easiest. Probably because of greater familiarity. If you picked a multilevel scenario, you can now choose whether to begin your defense at a high level (enemy planes) or a low level (tanks and motherships). Whichever you choose, you will eventually need to do the other in order to beat off the entire attack. The strategy that seems to work forme, is to begin low. The cockpit is full of instrumentation: a clock that measures elapsed mission time; speed and altitude displays; missile status; a radar screen and much more. A touch of the fire button fires your laser cannon, but you must be lined up on your target. If you can’t line up, as when tanks are too close to you, engage a heat-seeking missile by pressing "H" or a guided missile by pressing HG". The missiles have a greater range than your cannon o course, but use them wisely for their numbers are limited. With all it's controls and instruments, however, SKYFOX is not a flight simulator, nor was it ever meant to be. It is an arcade game, pure and simple and good for hours of mindless entertainment, but with the distinction of being as fast and as furious as the REAL arcade games, the ones that keep asking you for quarters. Your mission is to fend off an alien attack with as little loss of colonists' life and loss of bases as possible and you are given three planes in which to accomplish this. If you are shot down, you find yourself back looking at the tactical map and ready to go up again. At any time during the fighting, you may call up the map by pressing Control "R". The map is superimposed over your windscreen. There is also an autopilot. Pressing "A" kicks in your afterburners and sends you 1o the closest threatened area, dropping you right in the center of a hot situation. However, autopilot will not work if the enemy is near you: clear one area before trying to go to the next. You should also keep track of your coordinates and your course so that you may return to your base for refueling and resupply of ammo. If your base has been destroyed, however, your only option is to stay aloft and keep fighting. You can't win, but you may make the alien victory more costly. At the end of a round of play, the status board tells you how many colonists and bases are left as well as how many of the enemy have been destroyed. As to what the Amiga version of SKYFOX offers that is new, consider these: cleaner graphics, more clearly detailed and defined; super sound; improved joystick control; faster loading. And, contributing greatly to the flow of the game, there is no wait for disk access when you fly from a high level to low, or vice versa. This, of course, is because SKYFOX is dumped into ram and as a result everything happens just a bit sooner than before. However, one thing has not changed: You are still going to have your hands full; things are going to stack up on you; and you will go down in flames more than once. Which brings up another point: even the crash-and-burn routine has been improved. Enjoy. ARCTIC FOX reviewed by Erv Bobo Like SKYFOX, ARCTIC FOX begs to be enjoyed in full stereo sound and before we are through I will recommend an economical way to do just that. But first... Aliens have established a base at the South Pole. Firmly entrenched behind a force field, they are busily converting the atmosphere of Earth into a mixture of gases that will be deadly to humans. Because of the hostile terrain, it is thought that the ARCTIC FOX, a supertank of the near future, is the only weapon in our armory that might stand a chance of destroying the aliens and their base. Once again, you and your trusty computer are off to save the world but this time there is a difference, for you are dealing with the first arcade strategy game to be constructed especially for the Amiga. The differences are noted quickly. Key in Level 1, the Enemy Preview, and you will see an enemy tank appear in the distance, heading toward you and slanted slightly to your right, quickly growing in size as he approaches. Then, just short of filling the screen, he slews to the left, now presenting himself in three-quarter profile. You realize you have, for the first time, seen a very close approach to true 3D. And the redrawing of the tank as it turned to present other
faces to you was smoother than anything you have ever seen on
a home computer. And if you are not yet convinced of the 3-D effect, launch a seeing-eye missile and guide its course with the joystick so that it curves around that mountain or arcs over that hill to show you the enemy lurking on the other side. You see it all in 2-D, of course, for you are looking at a video representation. The heavy armor of the FOX does not allow for windows. To either side of the large video screen, dials and gauges apprise you of your weapons status, oxygen remaining, course, location and elapsed time. In the foreground, hovering over the control panel, is a pair of gloved hands and they belong to you. You move the joystick and the right hand moves the control lever in the same direction. Use a keyboard command, such as a missile launch and the left hand presses the correct button to carry out the action. Through it all, you hear the swishing of your treads on the snow and ice; the rumble of your turbine engine; the muffled clanking as an enemy tank approaches; the crack of lightning and the roll of thunder; the whoosh of a missile being launched... The list goes on, but I am still not sure 1 have heard every sound ARCTIC FOX has to offer. In Level 1, no play is involved. The enemy vehicle parades before you and a legend below the viewscreen apprises you of the strengths and weaknesses of each piece. Level 2 is training. Here, the FOX is invulnerable and the enemy weak and stupid. With unlimited weapons, you can destroy everything in front of you._ Level 3 should be called advanced training. The FOX is not invulnerable and the enemy armor is better, but you are still not playing for the money, For that, you go to... Level 4, the Tournament: here, your weapons are limited; the enemy is strong and crafty and you are going to have your hands full just staying alive — not to mention waiting for the energy flux in the force field so that you can slip through and destroy enemy headquarters. Due to atmospheric turbulence caused by the alien activities, a thunderstorm or blizzard can blow up at any time and will. Because these storms are electrical, you can almost count on them to scramble you radar, located just below the main viewing screen. If you also happen to be in a blizzard, you are blind except for brief glimpses through the blowing snow. These storms are as well done as everything else in the game and everything else is done very well. This one is going to become a classic. Documentation is good, setting the scene and explaining the armaments and defenses. A quick-reference card is included and can be kept handy during play. One word of warning: there are tactics available in Level 2 that do not apply in Levels 3 and 4. Since they are silly things like being able to bound into the air, they will not be missed. The true gamer will appreciate much more the effect of climbing a hill or rolling over the remains of a destroyed tank: in the latter move, one side of your tank will tilt upward and you will hear the motor straining to overcome the obstacle; in the former, your tank tilts up, levels, then tilts down as you descend the hill, adding 1o the 3-D effect. Like any good adventure game, ARTIE FOX maintains consistency: if you destroy an enemy at coordiantes X, V the remains will be there when you return. While the arcade aspects of the game are probably obvious, what with launching missiles and firing cannon, there is a strong element of strategy present as well as a need for navigational skills. You will not master it quickly, nor will you wish to; this is a game to be savored over many sessions. About the stereo sound: It was impractical to move my main stereo unit from living room to computer room; the portable "boom box" from the family room was, by the family’s decree, to stay put. The solution was in the form of a small stereo amplifier from Radio Shack. Mine is the Model SA-150. It takes up little space on the hutch and allows for stereo earphones or speakers or both. Best of all, by feeding the two Amiga sound channels to the Tape input and then using the V connector to go from Tape output to the Amiga monitor, I can still receive monitor-only sound even when the amplifier is powered down and so have Ihe best of both worlds. You will enjoy ARCTIC FOX without stereo, of course, but I urge you to try it with it for in this game sound is the fourth dimension. • AC-Mi Amiga File a database management system for the
Commodore Amiga™. MjNfufifi man39cm°n system with. Databa. * Pull-Down Menus... Written in "c V Horfz Scrolling (8) Field Type.,.. Asending il riding Sorting | the first serious,
professional-quaiity, full-featured database management
system for the Commodore Amiga™. SoftWood Company presents Southwest Reel Estate Listings Dwelling Location Beds Bath Pool i Auto Price 1 House Santa Monica 3 2 Yes i 2 1200,000 2 House Santa Barbara 4 3 Nd! 2 1350,000 3 House Phoenix 4 2. 5 Nd! 2.5 $ 275,000 4 House Santa Barbara 3 2 Yes | 2 $ 320,000
5 Condo Phoenix 3 2 No I No $ 150,000 6 House Sonta Barbara 4 3
No j 2 $ 350,000 7 House Los Angeles 3 2. 5 No! 25 $ 225,000 8 Condo Santa Barbara 3 2 Yes i NO $ 225,000
9 Apt Santa Monica 2 1. 5 No i No $ 200,000 to House Iueson 3 2 No I 2 $ 100,000 11
House Phoenix 4 2. 5 No; 2.5 $ 110,000 Format mailing labels by positioning
fields on form... Automatic scrolling of data within a field
during data entry... Optionally capitalize the first letter of
each word automatically... Modify form as needed for
convenient placement of data... Data entry form automatically
created by system during database definition... Additional
features 1 of the New Mi Amiga ™ File: Variable-length record
management for optimal space utilization... Flexible database
definition allows user to add remove fields at any time...
805-966-5884 Dealer Inquiries Welcome. All Major Credit Cards.
Checks, Money Orders, C.O.D. Accepted Spreadsheet Format
provides overview of the database. Easily define column widths, placement, and justification... Format numeric fields with commas, dollar signs, and or decimals... Transfer quickly between full database and selected records... Print columnar reports from list including automatic page headings and cummulative totals... Transfer conveniently from selected record to data entry form. Thwest Real Estate Listings Dwelling Location Santa Barbara Price 350000.00 Mortgage 280000.00 n House Beds 4 Baths 3 Garage 2 Pool No | jowner Carry Yes No Owner Finance | Accept New Delete Undo CcmiDoiore, Amiga, and Intuition are trademarks of Commodore-Amiga, Inc. © Copyright SoftWood Company, 1986. They're Here.... But, not for long! PiM Publications, inc. wishes to thank all of the fantastic Amiga owners who have accepted Amazing Computing as a resource for their Commodore Amiga. The response was far beyond our expectations. Your letters praised Amazing Computing™ and encouraged us to continue to deliver Commodore Amiga information and programs. Amazing Computing’s success does have one draw back, our First three issues are in great demand and short supply, if you have not already purchased a copy of these treasures from your Amiga dealer, or he has sold out, PiM Publications will make back issues available, for as long as they last, at our Back issue price of $ 3.50 each. Please send check or money order (no phone orders please) to: Back Issues Amazing Computing PiM Publications, Inc. P. O. Box 869 Fall River, MA 02722 if you want to be sure you do
not miss an issue, then subscribe! Amazing Computing is available by subscription, no phone orders, please) for 12 issues: $ 24.00 in the United States $ 30.00 in Canada and Mexico $ 35.00 Overseas _Amazing Computing™ your resource to the Commodore Amiga "Roomers" by The AMIGA It's not easy to write about the cutting edge of product announcements when you have a lead time of more than a day (I), but some roomers are worth willing about anyway. The ’’Amiga re-launch" is an example. Soon after CBM got its financial woes settled, it went ahead with big plans to "re-launch" the Amiga. That means giving the monitor away with the system, stepping up advertising, making a big splash at Comdex, and introducing some significant products. The "buy an Amiga get a monitor free" is scheduled to run until May 15. Come on. Who lowers prices and then raises them? Look for CBM to announce that "the promotion was so popular, we're extending it another two months" or something similar. CBM is now shipping the Transformer, with 5-1 4" drive. The product isn't as complete as CBM wants it to be (some problems with color screens and 40-column setups), but I'm told no further work will be done on it, because it's late enough already, and there’s this other thing... Commodore is supposed to have a big showing at Comdex Spring, April 28 — May 1, Now of course by the time you read this, it will be after Comdex. CBM is expected to have from 50 to 75 Amigas set up, filled with products from both CBM and third party developers. The latest news I have is that Commodore will announce an add-on side car to the Amiga that will have either an 8088 or 80286, 512K (why not 640K?) Memory, a color graphics adapter, a 5-1 4" floppy drive, room for an IBM hard disk and three expansion slots for $ 500. I guess they're going to rip out the insides of their PC-10 and PC-20 IBM clones that have done so well in Canada and Europe and put it in a box to hang off the Amiga. Sources say your dealer should have one to show you by the end of this month. The folks at Commodore-Amiga are considering a version of Preferences that will allow you to bring up the Workbench screen in 640x400 (interlaced) mode. It seems that many people are looking for this! The problem, of course, is flicker of single-width horizontal lines, especially the drag bar. Version 1.2 of the system will see a different style of drag bar to relieve this. Future versions may see a different default text font, similar to what Sun did to reduce flicker on their interlaced workstation, Also in version1.2: faster directory listings, an extra screen in preferences to let you set the serial device characteristics (including MIDI speed) new library calls, and some bug fixes. There are other toys out there, like FED (Font Editor), DISKDOCTOR ADDBUFFERS (to your drive), and MicroEmacs (uses Intuition, menus, mouse, supports interlace mode, loadable function keys, etc). I don't know if these programs wifi see the 1.2 distribution, because CBM is talking about a programmer's utility" disk. I've also heard about a 'best of the public domain' disk from CBM... these two disks could be the same. Some rumors flying around about the EXTRA_HALFBRiGHT mode (where you can get 64 colors at once). As you may know, the first umpteen-thousand Amigas were shipped with revision 5 of Denise, which does not have the EXTRA HALFBRIGHT mode, while the rest were shipped with rev 6, which has it. It is not true rev 7 took away EXTRA HALFBRIGHT... it's in there! Amigas are now being manufactured with rev 8 of Denise, and the EXTRA HALFBRIGHT mode is still a feature. Still no word on how CBM will make new Denise chips available to people without 1he half-intensity mode, but the chip is socketed, so there is no soldering to be done. For you Amiga C programmers, an undocumented option on ALINK will decrease your link times as much as 80%! The option is 'faster', which should appear at the end of the ALINK command line. Although it speeds up the linker, it also does no memory checking, nor does it deallocate memory as it should, It was put in as a quick hack by a staffer at Amiga who was sick of waiting lor ALINK. It was not supposed to find its way into the release version, but here it is. Use it for speed, but watch your memory usage! The Amiga music scene is a mess. First, Cherry Lane goes out of business. They were making a MIDI interface box and some software for the Amiga. The program 'Concertcraft' was a subset of Harmony, a Cherry Lane product, so it was also axed. Next, Commodore decides to get out of the MIDI business altogether, even though they had a boatload of MIDI interfaces already assembled. Then they decide maybe they should at least sell the MIDI interface, since they said they would and have made them already, but nobody will see the interface for a few months! Hayden Software, who announced Sound Vision, decided they didn't want to develop for the Amiga after all. Poof. Instant Music, from Electronic Arts, has been scrapped. Deluxe Music Construction Set is due "sometime this summer". The rack-mountable Amiga reportedly died along with Cherry Lane. Oh well. Some third party developers stand to make a TON of money, from my viewpoint. The Mimetics packages should do just about everything you need to do with a MIDI package; at least to start. The box from Golden Hawk Technology is cheaper and has more features than the CBM MIDI interface would have (MID! In, 2 outs & drum sync; as opposed to MIDI in out thru), as well as being available sooner. Why all this suddenness about the MIDI software and the IBM packages? I hear that there was a bit of a shakeup at CBM, the MIDI and IBM products were coming along far too slowly for the upper management's tastes. Something is shaking in the developer support area. Many developers have complained the support they have been getting from West Chester has not been enough. Carl Sassenrath, designer of the Amiga's Exec, has asked publicly for comments on Amiga support, and he promises changes are in the making. I wish I knew more. My guess is Carl (who no longer works for Commodore-Amiga) is planning to start an Amiga technical support service. Others, who I have talked to and seem to know more agree, things will be looking up for developers, and Carl will be one reason. On the subject of new product directions... Amiga has completed its ZORRO expansion specification. Although the Amiga provides an 86-pin connector, the ZORRO spec calls for 100-pin boards! These extra 14 pins will be used for intelligent boards to talk to each other without the Amiga even knowing they are doing so. I'm sure we will see more innovative uses for those extra 14 pins! Also in the future: after version 1.3 of the system, which should be the release where CA feels the bugs are worked out, Kickstart will be put into ROM on all new machines. AmigaDOSAWorkbench will still come on floppy, so future improvements will be possible. In the premiere issue of Amazing Computing, I reported on the Ranger, the new Amiga. Well, yes and no. The latest information I have is that "Ranger" is an ideology, not a machine. It describes a range of products. The current Amiga will become a new Amiga by swapping chips, boards, and external devices. You decide what configuration you need... 1024x768 resolution? New graphics chips, new monitor, etc. More number crunching? 68020 at 14mHz and a math coprocessor. Better sound? A new 16-bit Digital-to-Analog converter is on the way. IBM compatibilty? No Problem. UNIX? Got that coming too. Commodore is looking at the Amiga as a three-in-one machine (AmigaDOS, MS-DOS, UNIX) like they did with the C-128 (C-128, C-64,' Having said that, there IS a new Amiga about to be announced. You should see it before August, and it will be similar to what is described above, all in one package. Price around $ 4000, available by Christmas. It will be positioned as a UNIX-based CAD workstation. Also heard: an Amiga A1000 with expansion slots built in. It's a little thicker than the current Amiga. Don’t expect to see this one though, as the general theory is that it will create too much confusion for the consumer. Other hardware notes: The ZORRO backplanes will be available from DSI, Byte-by-Byte and Ameristar. Ameristar has announced an Ethernet interface and NFS, the Sun Network File System, which allows transparent file serving across an Ethernet. Hook your Amiga to a VAX through NFS and never worry about file storage again! Ameristar also has prototyping boards available now. Lastly, there's a hot rumor that Commodore-Amiga has developed a DMA-driven 20MB hard disk and may show it at Comdex. Miscellaneous notes... Look for high-end music and video manufacturer Fairlight to incorporate the Amiga into future products... Tex, a text processing package designed by Donald Knuth at Stanford, has been ported from Pascal to C and compiled on the Amiga. Look for it this summer... TextCraft has been revamped, it now better supports multitasking, uses Intuition for its user interface, and has some new features. It will be called TextCraft Plus and will be available this month... Sublogic has delayed release of Flight Simulator II and Jet until July and August, respectively... SSI, makers of Word Perfect, are porting it to the Amiga... Autocad is being ported to the Amiga, to compete with Aegis' Pro Draw CAD package... Microsoft is updating AmigaBASIC, and is working on more products for the Amiga... See you next month! • AC* The Amiga computer derived its name from the Spanish word
AMIGA, meaning friend. We are about to see how friendly the
Amiga really is as we connect an IBM™ compatible 5 1 4" disk
drive to the Amiga disk drive interfacing hardware, Build Your
Own IBM Drive connection by E.P. Viveiros Amazing Computing
Hardware Editor with assistance from Jim Rutherford and John
Foust Interfacing an IBM compatible 5 1 4" disk drive 1o the
Amiga is a fairly straight forward task. Nearly all of the
required interfacing circuitry has been designed into the
Amiga’s disk controller with the exception of one unique
function. The Amiga disk drives and controller are unique, they latch the motor drive signal at the time its' SELn turns on and remains latched until the next SELn. The drives are also designed to turn off after a system reset. The circuitry required to emulate this unique Amiga function consists primarily of a latching device (in this case a 74LS74 flip flop), a line driver, 74LS05 and several pull up resistors. All of the parts required to construct the "latch board" are readily available, with the exception of the DB23 connector, required to attach the adaptor to the rear of the 3 1 2" disk drive. I know of no readily available source for the required DB23 connector and unless you are looking for a fairly large telephone bill, don’t start making phone calls; it seems as though I called a thousand different houses and no luck. There are a number of ways in which any hardware project can be brought into reality; but only two reliable methods will be considered in this article. The first, and in my opinion the preferred method, is through the use of a Printed Wiring Board assembly. A printed wiring board, however is not easily fabricated, especially when one is dealing with a two sided PWB. For those readers not willing to design and etch the required PWB themselves, wire wrapping is the way to go. I have provided three forms of documentation for the latch assembly;
details of how to wrap the latch PWB, build the cable or any
detail here, since no one should attempt this project unless
they possess the basic electronic knowhow. The enclosed lists
and diagrams should be clear for the technically competent. I
am not saying it is a difficult project, in fact it is quite
easy, just be sure you know what you are doing and you will
not be sorry later. The latch assembly can be wired using the information on the schematic or the From-to list. One word of CAUTION The Amiga J7 connector has pin outs for both 5 and 12 VDC but they must not be used to power the 5 1 4" disk directly., According to the Amiga hardware manual, the output of the pins are 270 and 160 milliamps, while the 5 1 4" disk will require approximately 1 ampere. However, J7—12 can be used to power the latch board since the current drawn is minimal. They say "THE PROOF OF THE PUDDING IS IN THE EATING.™ The 5 1 4" disk coupled with Commodore’s Transformer software opens up a whole world of available software. Thousands of programs are available and most will run under the transformer software. This hardware project may not be the most elegant way of solving the Amiga Disk Motor Latching phenomenon, but it works. I know, since I have a SHUGART SA455 wired in and running. Good luck to anyone attempting this project. TAKE YOUR TIME CHECK YOUR WORK OUT... AND IF YOU FOLLOWED INSTRUCTIONS PRECISELY, YOU WILL HAVE YOUR SA455 UP AND RUNNING IN NO TIME AT ALL. HAPPY COMPUTING E. P. Viveiros Hardware Editor, Amazing Computing Magazine For
information on boards and kits to build your own IBM
Connection, contact; Teddy Bear Systems C O Amazing Computing,
PiM Publications Inc. P. O. Box 869 Fall River, MA 02722 __ Schematic Latch Assembly
Figure 1 The board design is strictly a matter of personal
taste and the following are simple suggestions or approaches.
The boards presented are intended to be attached between the
Amiga and the 5 1 4 disk drive, but could as easily fit into
the drive. The choice is yours. Amazing Computing claims no
liability for this assembly, only that it works for us. OOOOOOOOOOOOOOOOO ooooooooooooooooo QtcTte Q-fC2lO I I o (} w II O 0 coo 5 o 1 g o O 2 0 « 0 0 * 0 ) 0 0 o r* 0 0 i
) (I ooooooooooooooooo ooooooooooooooooo A A AA Alternate for
SIP package. TTTT Figure 2 DB25 DB23 CONVERSION DB25...... ¦ i ii i iiimnim-tj m mini 1 2 3 4 5 6 7 8 9 10 11 12 13 f 0000000000000 Mlq N* 14 15 16 17 18 19 20 21 22 23 24 25 Ms oooooooooooop Standard Connector Cut with hack saw on dotted line li 12 3 4 5 6 7 3 9 10 11 12 1|3 I ¦oooooooooooof P, 1 14 15 16 17 18 19 20 21 22 23 24 25 i | S. ¦I ooooooooooo •sill ¦I.I wg I; Remove shaded section of connector. Cut off pins 13 and 25 flush with connector 123456789101112 1 mo ooooooooooo |1L k 13 14 15 16 17 18 19 20 21 22 23 Jf. OOOOOOOOOOO Warning!!!! Use this numbering system when wiring the LATCH BOARD is Remember you now have a DB23 connector Figure 3 Cable connections FROM TO COMMENTS J7-22 Shugart-8 — 19 — 18 — 18 — 20 — 17 — 22 — 16 — 24 — 15 — 26 — 14 — 28 — 13 — 32 — 7 Shugart-Wire J7-3,4,5,6,7 — 6 to all odd pins on — 5 Shugart connector — 4 — 3 — 2 — 30 — 1 — 34 — 21 1. -10 SHUGART-10 74LJ05-5 74LS05-4 Shugart-16 74LS74-3
74LS05-6 74LS74-6 74LS05-3 J7—10 74LS74—1 74LS74—1 R2 NOTE
R1, R2, R3, R4 J7-8 74LS74-2 have common end 74LS74-2 R 1 tied to
+5vdc (J7-12) R3 R4 74LS74-4 74LS05-6 "HU 74LS74-7 74LS06-7
74LS74-7 J7-3 Ground 74LS74—14 74LS05—14 74LS74—14 J7—12 +5vdc
DO NOT POWER C1—1 74LS74-7 51 4 DISK FROM THIS Cl-2 74LS74—14
PIN OR J7-23(+12vdc) C2-1 74LS05-7 C2-2 74LS05—14 Figure 4
SA455 Shugart Amiga Jumper Configuration The jumpers on the
drive must be in the indicated positions for the LATCH BOARD to
function properly. Foj U u To“q O O 0 O O_ o rrn Jumper Positions 1=1 O o 7 " r~ci o o o o L Figure 5 Latch Assembly Parts List 1- 74LS74 1- 74LS05 4-
220001 4 Watt Resistor (A SIP would be an improvement) 2-.01
mf Decoupling capacitor 2- 14 pin wi re wrap sockets Mounting
board with. 100 hole spacing 1 — DB25 male connector (DB23 see
instructions) 1 — Shugart SA455 disk drive Connectors and
cabling (dependent upon layout} None of the above parts are
particularly critical so feel free to substitute; just do not
get carried away. Any variety of the 7474 or 7405 will work,
but be cautious of the 54 series since most have different
pinouts. The two capacitors are not necessary to the board's
function but are included because they are good design
practice. As for the resistors or sip network, just about any
value resistance and wattage will do. I have only had time to experiment with Shugart disk drives, however other manufactures should work as well also; remember I said should and I make no guarantee! *AC” As of this writing,! Still have not received a working implementation of Forth for my Amiga, even though one is available in the public domain, it is probably for the best, since I do not want to burden you with too many details yet. I would like to spend a bit more time presenting a general overview of the structure and philosophy of Forth before getting into details specific to the Amiga. Forth Part 2 byJon R. Bryan if you are interested in learning Forth or even if you have extensive experience with the language, I recommend that you buy a copy of the book "Thinking Forth" by Leo Brodie. It is published by Prentice-Hall, and any bookstore can order a copy for you if they do not have it in stock. It is subtitled "A Language and Philosophy for Solving Problems," and gives the best exposition of Forth style that you are likely to see. It has certainly given me a number of useful ideas which I have been able to use and not just in Forth programs), and it is a joy to read. It is one of the most clearly written books I have ever read on any subject. THE ELEMENTS OF STYLE Forth has a number of unusual features. First, it is interactive. You can execute words and compile definitions directly from the keyboard. Second, it is a "stack-oriented" language. You may not consider that a "feature," but the approach returns a number of benefits which I will be discussing in much greater detail. Third, Forth uses postfix notation, which you may have heard referred to as "Reverse Polish" notation, or RPN. The use of RPN is largely a consequence of the use of a stack. And last (for now), Forth is "extensible." Writing a program in Forth consists of extending the language to encompass an application. If you do not understand all that, bear with me. It will eventually become clear. Because it is interactive, and because by the time this tutorial is printed there should be several versions of Forth available for the Amiga, you might want to try the examples as you go. The best wav to learn Forth is by using it. One of the first things you have to learn in Forth is how to handle the "stack." In computer jargon, a stack is a "Last In, First Out," or LIFO, data structure, and is often compared to the spring-loaded stacks of plates and trays you see in cafeterias. Forth's data stack provides a simple mechanism for passing parameters between words, and also for hiding information about those parameters. Passing parameters and calling functions is implicit in Forth. In some languages you might be required to use the expression: CALL DRAW_LINE(Xstart, Ystart, Xend, Yend) explicitly calling out the variables to be passed to the function DRAWJJNE, whereas in Forth you would simply say DRAWJJNE and hide the details about which parameters DRAWJJNE expects and how they get on the stack. No CALL or its equivalent is necessary, since DRAWJJNE "knows" how to call itself, and where to get its parameters. It may expect Cartesian coordinates, but they could just as easily be Polar, and at this level you do not care. In fact, in line with much recent thinking in computer science, YOU DON'T WANT TO KNOW. The more information about parameters, data structures and algorithms you hide, the smaller the chances are for bugs and design errors to creep into your programs, and the easier it is to make changes later. So implicitness is great, but how do you use the stack? It turns out to be very simple — and implicit. Since Forth is interactive, if you want to push a value onto the stack you can simply type in the value and hit RETURN. Pushing more than one value onto the stack is as simple as this (and you can try it now): 1 2 3 4 5 RETURN OK The numbers 1 through 5 are now on the stack, with 5 on top. Once Forth is finished doing what you have asked of it, it always concludes by saying "OK." Forth provides another word for printing out the top stack value, called. (dot). Executing. Pops the top stack value and outputs it to the screen. Here is another example which will type out all the values we just placed on the stack: RETURN 5 43 2 1 OK Executing another. Would result in an "Empty Stack" message unless you would put something else on the stack previously. Compiling a number into a definition is just as simple. If you needed a word which would put the values 1 through 5 on the slack, here is how you could do it:: 1thru5 (-1 2345) 1 2345; and when you executed 1 thru5, the values would be pushed onto the stack. The basic stack operators are DUP, OVER, SWAP, ROT and DROP. The word DUP duplicates the top value p C L 0 ™ «Ti Wsht L‘rrr1-'1-r-Jr y, i i,. S..• ¦¦ f ¦: '+ K. -VZS ¥ i'- 'V* §j — "A--. Printed Circuit Layout For the AmigaTM • Powerful workspace operations • High performance • Semiautomatic routing • Trace yield • Sip dip pingrid • 288" sq. — 2 layers • Full silkscreen • Full color • Area rotation • Magnification (zoom) • Surface stretch • Dot matrix checkplot • Camera ready std plotters • N-layer capability • Object libraries • Multiple pad types •.050 centers • Block operations • Abs. Rel & local measurement • Editing; move, copy, delete • Global trace following • Supports hard drives Introductory Price $ 1024 Functional Demo
Disk 575 (credit towards purchase) POLO (c) SoftCircuils, Inc.
AMIGA (c) Commodore. Inc. FIRST in a series of engineering
workstation products from SoftCircuits, Inc. *401 S.W. 75th
Terrace North Lauderdale, FL 33068 * (305) 721-2707 on the
stack. OVER makes a copy of the second value, leaving the copy
as the new top value. SWAP exchanges the positions of the two
top values. ROT moves the third value to the top. DROP pops the
top value and discards it. Here are examples, where the value on the top of the stack is the furthest to the right. Stack Before Stack After 123 DUP 1 233 123 OVER 1 232 123 SWAP 132 123 ROT 231 1 23 DROP 1 2 I'll save two other stack operators called PICK and ROLL for later discussion. One natural result of the use of a stack is postfix notation. If you want to add two numbers they first have to be on the stack. 2 2 + RETURN OK. RETURN 40K or 2 2 +. RETURN 4 OK Another Forth convention is operators destroy their arguments. In other words, when you execute 2 2 +, the two values will be replaced by the single result. Likewise with subtraction, multiplication and division. Postfix notation is also used for logical tests, which include (less than), (greater than) and =. (For some reason I had trouble in the beginning remembering in which order and worked on their arguments, until I finally realized that 3 4 is the same as 3 4.) ¦AC-Forth includes a full set of conditionals for writing structured programs. These include IF... ELSE... THEN, REPEAT... UNTIL, BEGIN... WHILE... REPEAT and DO... LOOP. Postfix also applies to them, as in one of the examples from last month:: 7FLOSS LAZY? NOT IF FLOSS THEN; The flag for IF is left on the stack by the two words LAZY? NOT. If the flag is "true," FLOSS will be executed, otherwise the word will do nothing. In other words, if you're not lazy, floss your teeth. The use of the stack and postfix notation imposes an extra burden on you, the programmer, but it also provides many benefits, some of which I have attempted to illustrate here. More will become apparent as you use the language. Well-written and designed Forth programs can be very easy to read; partiy because algorithms can be expressed so concisely, without the clutter of Calls, parameter lists, or the other excess baggage imposed by most other languages. The final feature of Forth which I would like to cover is its extensibility. It is one of the language's greatest strengths, and one which is shared by very few of its contemporaries. All of Forth's words are contained in an open-ended "dictionary." Writing a program consists of defining new words in terms of existing words and creating new machine-level words when necessary. They all become a part of Forth as it exists on that particular machine. A program in Forth is simply a word which encompasses an entire application. That word is composed of other words, and the chain continues down to the lowest machine-level primitives. Even the primitives are words, and they look and behave just like the so-called "high-level" words. One of the central concepts of Forth is that all code should look and feel the same, whether it's "low" or "high" level. Superficially you can't tell whether a word has been written in machine language or Forth. All of these features, plus many more, combine to make Forth a very elegant, powerful language. I am eagerly awaiting Multi-Forth from Creative Solutions, the people who produce MacForth for the Macintosh and versions of Forth for several other 68000-based computers. They have told me that their implementation for the Amiga is the best one they have done so far, and that it will begin shipping on the 31st of March (next week, at the time I am writing this). UBZ Forth was supposed to be here already, and I will have the public domain Mountain View Press implementation in my hands this week. So, next month, I'll be writing about Forth on the Amiga! Amiga C Compiler $ 14995 Everything you need to develop programs on the Amiga, including a full set of libraries, header files, an object module disassembler, and sample C programs. New Amiga Products From The Developers of Amiga G. Unicaic $ 79-95 A complete spread sheet package for Amiga, with the powerful features made popular by programs such as VisiCalc, SuperCalc, and Lotus 1-2-3. Unicalc pro ides many display options and generates printed reports in a variety of formats and print image files. Supports 8192 rows of 256 columns, and includes complete on-line help. Lattice MacLibrary $ 100.00 The Lattice MacLibrary is a collection of more than sixty C functions enabling you to rapidly convert your Macintosh programs to run on the Amiga, diis allows you to quickly and efficiently take advantage of the powerful capabilities of the Amiga Lattice Make Utility $ 125 00 Automated product generation utility for Amiga, similar to UNIX Make, LMK rebuilds complex programs with a single command. Specify the relationships of die pieces, and automatically rebuild your system die same wav every time. Lattice Text Utilities $ 75-00 Eight software tools for managing text files. GREP searches for specified character strings; DIFF compares files; EXTRACT creates a list of files to be extracted from the current directory;.fibYZI? Creates new files from a batch list; WC displays a character count and a checksum of a specified file; ED is a line editor which utilizes output from other Text Utilities; SPLAT is a search and replace function; and FLITS lists, copies, erases or removes files or entire directory structures. Lattice Screen Editor (LSE) $ 100.00 Fast, flexible and easy to lean editor designed specifically for programmers. LSE's multi-window environment provides die editor functions such as block moves, pattern searches, and "cut aid paste ’ Plus programmer features such as an error tracking mode and diree assembly language input modes. OTHER AMIGA PRODUCTS AVAILABLE FROM LATTICE: Panel: Screen Layout Utilities $ 195-00 Cross Compiler: MS-DOS to Amiga C $ 250.00 dBCffl: library of data base functions $ 150.00 Cross Reference Generator $ 45.00 With Laffice products you get Lattice Service including telephone support, notice of new products aid enhancements, and a money-back guaraitee. Corporate license agreements available. Phone (312) 858-7950 TWX 910-291-2190 INTERNATIONAL SALES OFFICES: Benelux: De Vooght Phone (32 -2-720-91-28. England: Roundhill. Phone (0672) 34675 Japan: Lifeboat Inc. Phone (03) 293-47) 1 France: SR. Phone (1) 46-66-11 -SS The Amazing Mail: Dear Amazing Computing Editor: I have recently bought an Okimate 20 printer for my Amiga. Some of my homemade Basic programs generate a color picture, however,! Cannot figure out how to get my Amiga to print the output window picture on my Okimate. I know this involves some CL1 manipulation... But what?? Would you please ask someone to write an article on how to make a hard copy of a color Basic output window on the Okimate (and other) printer (s). I know this information would be very useful and valuable to your A.C. readers. Love your magazine. Looking forward to the next issue. Sincerely, Stu Thomson Chelsea, MA Mr. Thomson, Having no ready answer, I am placing your request in this forum with the hope that one of our readers will chip in. Ed. Dear Sirs, Enclosed please find a one year subscription to your incredibly informative publication Amazing Computing.! Constantly await the arrival of the next issue at the local Amiga dealer and I am sure he will appreciate me not coming in every two days to see if it has arrived. Thank You, Tim Levin Topeka, KS Keep visiting your dealer, you do not want to miss all the new Amiga products on the way. Dear Friends, I just looked at the March issue of your wonderful journal. It is great. To get this I had to leave an arm with the person I borrowed it from. So HELP! Please start my subscription. Thank you, "Lefty" Amberse Banks Modesto, CA Please be more cautious. Back issues are still available and you would not have needed to sacrifice your appendages. Dear Mrs. Gamble, I most definitely want to feed my Amiga right, lord knows it needs it. Please accept my CHARTER SUBSCRIPTION to your new publication "AMAZING COMPUTING". I have a copy of your premiere edition, but being a beginner.! Really can't afford to miss an issue of your valuable publication. Sincerely, Patrick E. Dugan McFarland, Wl Dear Amazing of Amazing, I'm sorry I missed the premiere issue and I hope I'm not too late to get one. One of the reasons I bought an Amiga is that Borland was going to come out with Turbo Pascal for the machine. I have given up on them ever coming out with what they promised over six months ago. If you guys know something that's even the least bit encouraging please let the world know about it. I recently purchased a copy of COMPUTESI's AmioaDOS Reference Guide by Sheldon Leeman and Arian Levitan. I think it is a terrific book and I recommend it to ail. They do a great job in explaining the DOS commands and providing examples and the built-in editors are covered in great detail Don’t you think the drives on the Amiga are slow? Do you think they planned it that way so everyone would run right out and buy a hard drive? I think my not-souped-up Kaypro II will beat the Amiga in transferring files. If I get time I'll do a test and let you know. Enough already, I gotta get back to my Amazing Computing and my amazing Amiga. I think you have a value packed product even though it has the unlikely title of Amazing Computing. Sincerely yours, Benjamin T. Bajorek Dearborn, Ml Unlikly Title? If the Amiga is amazing, why shouldn't computing on it be as thrilling? HiDon. et. al. I was very pleased with your first two issues. Judging from them AC will be an invaluable resource for all Amiga owners. I am also pleased that CompuServe and the Amiga Forum have been able to play some role in the formation of this great magazine. 1 hope that all concerned groups can continue in supporting each other in supporting the Amiga (Amicus, A.C. CompuServe, BiX Use Net...) Looking forward to many more great AC issues. George M. Jones Amiga Forum Worthington, OH George, we like CompuServe also, but don't forget Peoplenet as explained by John Foust in this issue's AMICUS column Gentlemen, I saw, I read, I want! I would like to subscribe to Amazing Computing. Hope to hear from you soon. Sincerely, Steve G. Mankowski We heard, we listened, you gotl Mr. Hicks, Thank you for taking the time to help me out with my "beginner's problems” related to using Amicus Disk 1. After our conversation, I purchased the DOS-Manual from Bantam. This lead me to try from Abasic to load Abasic stuff Games Saucer.bas. The program loaded but would not run. As you suggested,! Went to CLI and used ED to delete line 0. The program then worked like a charm. I had been a fan and subscriber of your magazine, now I'm also a fan of the Managing Editor! Sincerely, Harlan Tait West Haven, CT Thanks. However, I got all my information from George Musser's first two articles on CLI in our first two issues. The credit belongs to George. Dear Sirs: I recently entered a program called Racetrack, from a book "Programming Languages: featuring the IBM PC and compatibles" by Stieglerand Hansen. It contains a structure with which I am not familiar, (ie. A=B=C) I'm getting an “illegal function call" in the requester box. If anyone knows of another way to express this, I'd appreciate knowing of it. I’d like to get by this stopping point. The code as written is: 28530 IF ONMAP THEN HITFENCE = (MID$ (MAP$ (YNOW%), XNOW%,1) = FENCE$): FINISHED = (MID$ (MAP$ (YNOW%), XNOW%,1) = FINISHLINES Also, when a line such as print tab (30-I); (l, J); prints down the screen and you have to remove tab to get it to print across, I do get a bit exasperated. I like your magazine but hope that you will give a review to any programming books that come out. I’m still mixed up on proper use of conditionals. Sincerely, Allan W. Wardell, O.D. Providence, Ri Working..... Dear Mr. Hicks: You must imagine how excited I was to find your magazine Amazing Computing at the MicroLimits store up in Smithfield. With the incredible lack of documentation on the Amiga (even from Commodore) I have to say that finding your magazine made my week. But finding out that the publisher was practically just up the street, drove me absolutely wild! Regards. Paul White Tiverton, Rl We are a small and unassuming lot. Dear Readers, Please continue to send in your thoughts and suggestions. We do love hearing from you. The AC staff. • AC* It’s Finally Here!! A Database Management System for the
AMIGA with all the EXTRAS: • EXTRA Easy to use. No new language to learn, just look at the
pictures. • EXTRA Flexibility, with pull down menus, automatic filing and
field sizing, • EXTRA On line help, Just press for command information. • EXTRA LOW introductory price... JUST $ 49.99!!! Eastern Telecom Inc. 9514 Brimton Drive Orlando, FL 32817 We’ve got ALL the EXTRAS for you. Order NOW! (305) 657-4355 The Amazing C Tutorial: part four Manx Aztec C compiler system review by John Foust This column is both a review of Manx Sotfware System's Aztec C compiler and the fourth installment in the C tutorial series. A review of a compiler can give any C programmer a better insight into the language, and it may answer questions in the minds of budding programmers. The review must start with an apology la both Lattice and Manx, since this review draws comparisons between the two compilers. That in itself is a normal function of a review, but Amazing Computing has yet to review the Lattice compiler, the official development system for the Amiga, it has been available to developers for over a year. The Manx compiler has demonstrated speed and efficiency in code side and execution time, and draws much attention for these differences, so the two development systems are compared and contrasted here. Manx Software Systems offers the Aztec C compiler in two varieties: Developer and Commercial. The list price of the Developer system is $ 299, and the Commercial system is $ 499. Some software ads have mentioned a Personal version, but this is currently a non-product — it does not exist, It may be sold in the future, according to a Manx representative. The personal version was advertised as a less-optimized compiler, provided without an assembler, and with fewer library and utility routines. A less-optimized compiler produces slower and larger programs, in general. A developer would prefer an optimized compiler, since the redundant machine language instructions would tend to bloat and slow any program. An optimized compiler applies a set of rules to remove excess or redundant machine language instructions. An example of optimization is to keep often-used values in registers, since register instructions execute faster than memory-to-memory instructions, as a rule. According to people who have called Manx to order the compiler, there have been several special prices for the package. One person mentioned a $ 100 discount given to Lattice owners, and another said they got a 25% student discount. The Developer package includes the C compiler, assembler and tinker, the necessary object libraries and an object librarian. The Commercial package includes the source code to the Aztec library functions, and a series of utilities, including a text editor, detailed below. These include the programs in the Developer package and more object file conversion utilities. Upgrades The Commercial system also comes with a year of free updates. The Developer system does not. With the developer system, updates are $ 15 for minor updates, and as much as $ 50 for a major version number upgrade. After a few weeks, my first upgrade package arrived, since 1 had the commercial version. It was a set of pages to replace and augment parts of the manual. The Aztec compiler converts C source code to human-readable assembly language source code, and then assembles that code to produce the object file. This tutorial was written to serve a twofold purpose, one, to teach people how to use some powerful graphics routines not directly supported in AmigaBasic, and two, to help people who have used AbasiC, convert their existing programs to AmigaBasic. AmigaBasicTips by Rick Wirch For those of you who have used both Basic's obviously AmigaBasic is so much easier to use, and has so many features that AbasiC looks pale in comparison. But, many people who have used AbasiC may miss some of the features that Microsoft chose not to implement. These new features are implemented using one of AmigaBasic's most powerful abilities, the ability to call functions written in other languages. (These are all functions in the graphics ROM routines, or KICKSTART RAM to be more precise). To use these routines you must first have the 'graphics.bmap’ file in the directory (or drawer) where your AmigaBasic program is going to reside. You may either drag the ’graphics.bmap’ icon into the drawer on your work disk from the ’BasicDemos’ drawer on your ‘Extras' disk, or write your program in the 'BasicDemos' drawer where the 'graphics. bmap' file is presently. Second, at the top of the program you need to have a statement like this: LIBRARY "graphics. library". Third, if you have any DEF1NG, DEFSTR, DEFDBL, or DEFSNG statements that have the same letter range as the first letter of one of the following functions, the function must be called explicitly as a function that returns a long integer. For example, the statement: CALL Move (RP&, X, Y) would become: CALL Move&(RP&, X, Y) if there was a DEFINT M-Z statement. Fourth, all of the graphics routines need a pointer to the RASTPORT. This pointer can be initialized with the statement: RP& = W1ND0W(8) after any custom windows are opened. Finally, upper or lower case letters are important in the name of the routine. For example, Move would work, but Move would not work. With this, all of the initialization necessary to call graphics routines has been completed and we are ready to call the routines. I will now give a brief explanation of some routines, and an example of its usage. Move: This is a useful graphics routine and is used in conjunction with other routines. A sample line of code to call it is: CALL Move (RP&, X, Y) where RP& is the RASTPORT pointer initialized above, X is the horizontal or X-axis position, and V is the vertical or Y-axis position. This routine simply moves the cursor to the current X, V pixel location. After this routine is called, the PRINT statement in AmigaBasic will print from that position. Therefore the PRINT AT (112, 87); "Hi there" statement used in AbasiC would become CALL Move (RP&, 112, 87): PRINT "Hi there" in AmigaBasic. This routine will also affect any AmigaBasic statements with the STEP 3 1 2" Disks (DS.DD) 10 529.95 1 53.15 3 1 2* Diski (DS.DD) Plain Label Bund Jeall CLASSIC IMAGE, INC. — PRESENTS DIABLO — Graphic mind challenge game 129.95 DISK LIBRARY — Now you can File, Catalog, Update Search, Cros3 Reference, Report 549.95 dealer Inquiries invited Amiga System Covets — W mouse LOGO 521,95 Amiga Disk Cover — 1010 or 1020 with LOGO 57.99 Paper T F-F F White.9 1 2x11,201b. 150 58.99 Paper T F-F F Winle, 9 1 2 x 11, 201b. 1000 522.95 Paper T F-F F l 2'Greenbar,91 21l I, lSlblOOO 518.99 Index Cards — T F-F F,3x4 500 57.95 Rolodex Cards-T F-F F, 2 1 6x4 500 SS.95 Labels-T F-F F, Address 1000 55.00 M. W. RUTH CO.. AMR56 510 Rhode Island Ave, Cherry Hill, NJ 08002 (609) 667-2526 S&H-S2.50 US S&.H-S4.50 CN Visa US S’s only Master
We stock what we sell, for fast delivery. Send for FREE CATALOGvAll available AMIGA items ATTENTION PROGRAMMERS — Let us take over the headaches of publishing your software. We are looking for ail items related to the “AMIGA". Thus the! NVERSE(1) function in AbasiC becomes CALL SetDrMd (RP&, 4) in AmigaBasic, and INVERSE(O) becomes CALL SetDrMd (RP&, 0). The INVERSE(1) causes printed text to be printed in inverse video and INVERSE(O) reverts text to normal video forthose people who have not used AbasiC. Another use of SetDrMd is to draw lines, circles, or boxes on a background without disturbing the background. This use is accomplished by setting the drawing mode to COMPLIMINT with CALL SetDrMd (RP&, 2), and drawing every line, circle or box twice. The first time the line is drawn in, and the second time the line is erased leaving the background untouched. Finally, the DRAWMODE command is the AbasiC equivalent of SetDrMd. AUG AMIGA USERS' GROUP 08000 Yon will receive our official newsletter. Evaluations on software and hardware, Advanced updatings, technical Information, rroblom-solving, program exobango, Buying discount service, and much more. Send $ 18.00 US for Charter Membership to: AMIGA USERS' GROUP 08000 Box 0701 • Attn: Jay Forman Cherry Hill, NJ 08034 COOT) 007-2620 « Vlea Master-Add $ 1,00 argument, as the last point will now be the point specified in the Move statement. Finally, for AbasiC users, the Move statement is the same as AbasiC's LOCATE (X, Y) statement. SetDrMd: This routine sets the drawing mode. It affects every operation that outputs to the screen. Thus it affects the AmigaBasic PRINT, LINE, CIRCLE, and other graphics routines. It would be called in this manner: CALLSetDrMd (RP&, mode) where once again RP& is the RASTPORT pointer to the current window, and mode is a number composed by adding one or more of the following number together. 0 = JAM1 (just the foreground color is printed onto the background) 1 = JAM2 (both foreground and background colors are printed) 2 = COMPLIMENT (XOR mode or every pixel is complemented) 4 = INVERSE VIDEO (foreground and background colors are exchanged) Flood: AmigaBasic already has a PAINT or Floodfill routine, but anyone who has used it realizes that it does not work as you would expect it to work. Fortunately, the graphics ROM routines contain a Floodfill function that works as you expect a Floodfill to work. Flood fills an area, where all adjacent pixels of the same color as the one specified at location X, V are replaced with the colored pattern set by PATTERN, or a plain color if no pattern is set. It is called as follows: CALLFIood (RP&,1, X, Y) Flood can also work like AmigaBasic's PAINT routine if it is called like this: CALL Flood (RP&,0, X, Y) SetOPen: If you wish to have an area outlined that has been either AREA or Flood filled use the SetOPen routine. SetOPen sets the outline pen color. This outline pen is used to outline an area filled with AREA statements, or an area filled with the Flood routine. It would be called like this: CALLSetOPen RP&, color) where color is the color register number for the outline. This routine is the same as PENO in AbasiC. Also, the PENA and PENB statements in AbasiC are set in AmigaBasic using the COLOR statement, where COLOR A, B would set PENA to A, and PENB would be set to B. SetSoftStyle: This routine is not implemented in AbasiC and is a welcome addition to AmigaBasic. SetSoftStyle changes the style of text output to the screen. It affects the PRINT statement and AmigaBasic's output itself, ft is called as follows: CALL SetSoftStyle (RP&, style, 255) where style is a number composed of one or more of the following numbers added together. 0 = normal text 1 = underlined text 2 = boldfaced text 4 = italicized text Therefore CALL SetSoftStyle (RP&, 3, 255) would change the text output to underlined and boldfaced text. With italicized text, if strings are printed out they look correct, but single characters will overlap unless Move is used lo put a larger space between each character output. The Iasi two graphics routines that I will describe MUST be used with the utmost caution. These routines draw lines on the screen in a differant manner than the LINE function in AmigaBasic. But, if a line is drawn outside of the limits of the current window with these routines the system will crash and reboot. Draw: This routine draws a line between the last point used in a Move or Draw routine and the point specified by X, Y. It is called in this manner: CALL Draw (RP&, X, Y) It is the AmigaBasic equivalent of DRAW (TO X, Y) in AbasiC. SOFTWARE! AVAILABLE RIGHT NOW AED PROGRAM EDITOR PROGRAM EDITOR FOR THE AMIGA FEATURES: Easier to use than Amiga's full screen editor Uses Tull Amiga keyboard Includes a printer formatter for Cll Search A Replace Clock moves A replace Includes a browser for CLI JQ9.95 Hultlple files Hult1Dle windows CTRIEVE FEATURES: DATABASE TOOLBOX Open Index Create CetTot GetKey Chokey Getae GetNext Close Index AddKey DelKey Gale GetPrev PolyDraw: This routine draws a polygon between the points in the two dimensional integer array specified. It is called like this: CALL PolyDraw (RP&, NumPoints, VARPTR (array%(0,0))) It is the AmigaBasic equivalent of MAT DRAW NumPoints, array% in AbasiC. Well, that is the end of this tutorial. This should answer some of the questions people without AbasiC might have about its foreign graphics commands, and this tutorial should allow people who have AbasiC to use the routines they lost in AmigaBasic, * AC* Dealer Inquiries Welcome 3 Micro Search (713) 988-2818 9651 Bissonnet * Houston, TX 77036 MCALL NOWS! Amiga is a trademark of Commodore-Amiga, Inc, Amazing Writers We are looking for you.... Isn't it great to have the power of an Amiga and then be able to extend your knowledge through trial and implementation? There you are with a brand new way of utilizing the machine we have all grown to love, and you are keeping the information to yourself! Is this fair? Is this right? Of course not! You have done the work, now take your bows and earn a little green for the effort. Amazing Computing is dedicated to making the Amiga understandable to all, we need your input. We are looking for the "doers" who have completed the small utilities and breakthroughs that were were required to finish their projects. Why not help the rest of us? Think of the prestige in being printed in a magazine that now reaches Amiga owners across the globe! We do pay our writers! Ok, you will not get rich, but we do try to compensate you for your efforts. This is your time to show your stuff, not as an experienced writer, but as an Amiga user that knows how to untangle at least one small section of this fascinating machine. If interested pleases mail a letter to: Editor Amazing Computing PiM Publications Inc. P. O. Box 869 Fall River, MA 02722 Please include your name,
address and phone number. Remember, our only guide line for writers is BE ACCURATE. We can help you with almost everything else, the experiences and insight must come from you. A submission of hardcopy and electronic text files is most helpful. A Screen Image Printer (SCRIMPER) by Perry S. Kivolowitz The Amiga personal computer supports a device independent printer command named, “PRD_DUMPRPORT." This command is interesting in that by using it, any graphics displayable on the Amiga’s screen can be printed on a printer capable of printing bit maps. As it turns out, most printers already supported by the Amiga include this essential capability. A while back.! Wanted to write a program to exploit this (very sophisticated) feature of the Amiga personal computer. At that time, I had not had any experience with device input output or with the use of requesters. What resulted was a program called "scrimper" which stands for"SCReen Image PrintER." This issue of Amazing Computing contains the source code to scrimper. This article is intended to serve as a user guide and, moreover, an explanation as to how the program works. In my discussion of scrimper, I will assume a familiarity with messages and message passing (which if you do not have, you can get by reading last month's Miga-Mania). Also, of course, I will assume some familiarity with the C programming language. The Scrimper User Manual On many occasions I have wanted to take a snap shot of the screen and send it to my printer. What I wanted was a small program I could load once and then whenever I wanted to dump a screen I could execute one, then immediately get back to whatever it was that I was doing. Scrimper does exactly this. Once loaded into memory, it will hang around until its close gadget is selected. I did not want this program to occupy much room either in memory or on the screen, so the window scrimper creates is just large enough to contain its title bar, close gadget and back front gadgets. When scrimper is not the active window, it does not take up any c.p.u. time. In fact, even when scrimper is the current window, it is waiting for menu events from the IDCMP (intuition Direct Communications MessagePort) and not using the c.p.u. When you depress the menu mouse button (or the RMB, right mousebutton), scrimper presents a menu which lists (in depth order) the screens currently present on your Amiga. Each screen will be represented by a line in the menu. The contents of the line is usually the screen title (for example: "Workbench Screen"). However, if the program owning the most recently active window on a screen has set its own screen title using SelWindowTitles, the screen title listed in the menu will be that of the program and not the default screen title (for example: The GfxMem program by Louis A. Mamakos sets the screen title to "Graphical memory display by Louis A. Mamakos"). Select one of the screens from the menu. Releasing the RMB and then depressing it again will reveal the function menu. Having selected a screen here is where you decide what you want to do with it. This version of scrimper lets you do one of four things: (1) "return to screen selection" Choose this if you made a
mistake in screen selection or no longer care to do anything
to the screen you selected. (2) "selected screen to front" By choosing this the selected
screen snaps to the front (ie becomes the front most screen
in the depth ordering of screens). If the next mouse button you press is the right one (RMB) the workbench screen will switch back to the front. This is handy for checking on the progress of a program running on its own screen and then quickly switching back to the workbench. If you were to press the left mouse button (LMB) next, She screen you just brought to the front would become the current screen. In fact, where ever the mouse’s pointer happened to be when you clicked the LMB, if there was a window there, it would become the current window. (3) “print selected screen" Upon selecting this item, scrimper
will bring the selected screen to the front (for half a
second). Then the workbench Tffesctte your Recipes] omyu,
Cu'tstuc Over 200 *J[ecij e$ in 8 C(itarQorLes. 'Etfit and ad'd Oyf H 7’CCCJ CS, Organize and search fdes Gg catagorg or ingredient. Send cfteefi pr?nemcij orrfor jor $ 25.95 id-' Soifywirc 10. 'Box 700 roz Saii §osc, Ca.. 95170 This feature reduces wear
and tear on your print head as well as prolongs the life of
your printer ribbon. If, after having selected a screen but before selecting a function, you should deactivate scrimper (by activating another window), scrimper will go back to the screen selection menu. Error messages which scrimper might produce include: • "Could Not Allocate Printer Port" If this requester appears,
the CreatePort call needed to create a message port for talking
to the printer failed. The only thing you can do is hit the
"ok" button and scratch your head. * "Could Not Open Printer" If this requester appears, scrimper
could not gain access to the printer device. This could be for
a number of reasons: * Some other program has the printer device open. Someotherprogram opened the printerdevicebutdid not close it when it terminated. * The required files are not present on your system disk. These files include the directory "devs" which should contain "printer.device" as well as a subdirectory called "printers." There should be a file within "printer" which matches the printer you have specified in preferences. Screen will again be moved to the front. Scrimper was giving you a chance to make sure that you selected the correct screen. At this point, scrimper will ask you if that is really the screen you want to print. If you say "no" at this point, scrimper will let you back out to the screen selection menu. Scrimper will now try to allocate enough chip memory to make a snap shot of the selected screen. If not enough chip memory is available, scrimper will ask: "Not enough chip memory for asynchronous print. Continue?" If you say "no", scrimper will go back to the screen selection menu. If you say "yes”, scrimper will use the actual memory used by the screen for the print out. This means if you modify the screen while scrimper is printing it, you will get unpredictable results. If there was enough memory to print or, if there was not but you answered "yes" to the "Not enough chip memory" requester, scrimper will ask you: "Remap Transparent Color To White?" If you say "no" the background color of the screen (the blue in a standard workbench screen) will be printed as it is. If you say "yes" scrimper will automatically change the background color to appear white. Scrimper can be started from the workbench by creating a tool icon for it. Remember, programs ran from the workbench cannot contain “printt" statements. Description Of Scrimper Code This version of scrimper is divided into two modules, scrimper. c and prinler. c. Let's discuss printer. c first since it is shorter and more simple. In fact, we will save the discussion of scrimper. c for next month. I will provide a lot of detail in my discussion. My goal, in the discussion, is not only to explain how scrimper does what it does, but to provide an in-depth tutorial example on how to program in C and specifically how to program in C on the Amiga. You should be able to use the following discussion as a jump off point for your further learning and investigation of Amiga programming, First I define a manifest constant called MAX_CREGS to have the value of 32. This represents the maximum number of color registers the Amiga can make use of (without EXTRA_HALFBRITE_MODE). We will use this number in a few places, so it pays to define the constant. Next comes two static declarations. One for the printer port and the other for the dumprastport I O packet. When declaring such things as these, I ask myself if the variables I am declaring are going to be used in other modules. If not, I declare them as statics to make their symbols private to the module in which they are being declared. If I ever need to import the private symbols into another module, I can always remove the static qualifier. The advantage of doing this is i do not need to worry about declaring another module private variable someplace else and have a naming conflict. Also, good programming style dictates that details of a module’s implementation should be kept as hidden as possible from other modules (hidden data types). In this case, there really is not a down side but, in general, the disadvantage to declaring something static is the variable will then occupy space in the object file on disk where perhaps, if they were not declared as static, the variable would be instantiated by the operating system's process loading facility (and not take up any disk space in the program’s executable file). Next, 1 declare some external procedures. In Manx C this is very important since the routines I am declaring return pointer results. If I did not declare them as external routines returning pointers, Manx v ould clip the 32 returned address into a 16 bit integer (and, of course print a warning). T declare CreatePort as a function returning a pointer to a structure of type MsgPort. We will use this to create a message reply port so we can receive results back from the printer device.! Declare FindTask as a function returning a pointer to a structure of type Task. One of the tricks you can learn from the scrimper code is my use of FindTask in a routine which changes the priority of the printer device handler. As it turns out, when it is installed, the printer device handler runs at far too high a priority. My experience has shown it runs at a priority of 0, while normal user processes run at a priority of -5. This is definitely a problem since, if the printer is active for long periods, it will effectively block a user program from running. I will talk more on this later. I next declare AilocRaster to return a thing called a PLANEPTR. This is an Amiga supplied typedef which really means "pointer to an unsigned byte” (in include graphics gfx.h). Typedefs are a convenient way of cutting down on the number of characters you have to type. For example, in this case we can say PLANEPTR instead of "unsigned char V Also, PLANEPTR stands out better than the actual type and makes for more understandable code. After this, comes a few more declarations including the external window pointer “w" which is actually defined in scrimper. c. This Program Is DANGEROUS!! We Go See something New every time you turn on your Amiga! Significant Silly Fu n ny We ircl includes Phrases-Stories Tricks Trv some FUN! $ 10.95 for disk to: Ronald Peterson 148 Nashua St. Milford NH 03055 AMIGA is a trademark of Commodore-Amiga, Inc. Close_mask is what I use to keep track of what resources I have acquired (and must ultimately return). Each time I open or allocate something, I set a bit in clo$ e_mask. On exit, 1 simply run through the bits in close_mask. If the specific bit is on, that means I must return some specific resourse. Rast_count is the same sort of animal as close_mask. Rast_count keeps track of the number of bit planes (or rasters) I have allocated using AilocRaster. I declare and use a counter (instead of using close_mask) since there could be many planes allocated which must be returned. A counter lends itself to keeping track of multiple like resources more so than bit oriented flags. The two defines declare which bits in close_mask will have what meaning. If bit 0 is on in closejmask, it means I have to deallocate the message port, if bit 2 is on, I must close the printer device. There is a hole (between bits 0 and 2) because, in an earlier version of scrimper, I was keeping track of something else as well. This is a good example of why defining a symbol to stand for a numeric constant is a good idea. In a glance I can tell which bits in closejmask are available and of those that are in use lean get an idea for what they are being used. Next come several IntuiText struclure definitions which are passed to Intuition as arguments in AutoRequest calls. IntuiText's are used extensively when programming with intuition so let's talk a bit about them. Kin AMIGA 2S6K CARD EU Only $ 129.00 1 YEAR WARRANTY AMJQi gives you a creative edge. C* MICHIGAN SOFTWARE M DISTRIBUTORS inc. «3 S GRAND RIVER • NOVI, MICHIGAN 4M» TELEPHONE (313) 348-4477.43 1j.L_ The first two values are unsigned bytes which represent which color registers will be used to render the text. The first value represents the color of the text. If the third value is set to JAM2, the second value represents the color of the background of the text. Remember the first and second values represent color register numbers not colors themselves. This means, of course, that if you are rendering on a two bit plane raster, you can not specify a color register of, say, 21. Other drawing modes include JAM1 (which is used in scrimper) and XOR. See the Intuition documentation for more details about these. One more tid bit about the first two values of an IntuiText: If they are -1, Intuition will use default values. The fourth and fifth values in an IntuiText represent horizontal and vertical offsets at which the text will begin. The ofisets are based from the fop left corner of whatever the IntuiText structure is going into. For example, the "no" IntuiText is going inside a boolean gadget. If the fourth value in the IntuiText were 0, the (ext would begin as high as it could within the surrounding boolean gadget. Similarly if the fifth value were 0 the text would begin as far to the left as possible while still staying inside the boolean gadget. The sixth value in an IntuiText structure tells Intuition what font is to be used to render the text. Specifically, the sixth value is a pointer to a structure of type TextAttr. In this tutorial I will not go into how to open and manage fonts. Suffice to say that if you supply a NULL pointer, Intuition will substitute the default font (for the screen from which your program is being run). Finally the seventh value is a pointer 1o a string which comprises the text you want to print. Why CBM declared this as an unsigned character pointer is beyond me. But since it is declared that way, you have to cast your character pointer into an unsigned charades pointer to avoid a warning from most C compilers. As with most instances of strings in the C programming language, you must terminate the string with a NULL byte. This is done automatically when you enclose characters in double quotes (in C). By the way, recall we want a pointer to a character, and yet in scrimper I pul a bunch of characters inside of double quotes. Where do I work in this pointer stuff? Well, in C the list of characters surrounded by double quotes is actually an expression. The value of the expression is the address (read that: pointer) of (lo) the first character inside the double quotes. Voila! Instant pointer! The last value in an IntuiText structure a pointer to another IntuiText structure. Usually this value is set to NULL as it is in many of the structures in scrimper. However, if you set this value to the address of another IntuiText structure, the second one will be "chained" to the first. That is, the second will be drawn whenever the first one is drawn. The starting location of the second structure will be the final starting position of the first structure after its offsets have been computed. There is one example of this in scrimper, The IntuiText "no_mem2"is chained to "no_mem.” "No_mem2" will have its top edge 10 pixels lower than the top edge of "no_mem" where ever it is that " no_mem" finally ends up. Now, into the routine dump_screen. Dump_screen takes five arguments; (1) s — a pointer to the screen to be printed. (2&3) bx and by — offsets into the screen of where to begin printing. In this version of scrimper these Iwo parameters will always be zero. But, if you wanted to print only a small section of the screens you'd pass the section's top edge and left edge in by and bx (beginning y and beginning x). (4&5) width and heigh! — this is the number of pixels in the x and y directions we want to print. In this version of scrimper width is always the width of the screen and height is always the actual height of the screen. Notice, the oniy argument I fully specify is "s." The last four parameters do not have to be explicitly typed since they are integer parameters. Any thing other than integer parameters should be explicitly typed (in fact, if the parameter is a pointer type, it must be explicitly typed to avoid compiler warnings and possible errors), Actually, if your goal is really portable code you should not even count on the implicit integer data type. For example, the Aztec C compiler (from Manx) defaults to 16 bit integers. What if I passed a number larger than 16 bits can represent? Obviously, some kind of error! When it comes to argument passing and to typing in general in the C programming language, take a lesson from the March Hare who said, "Then you should say what you mean." Next comes some local variable declarations. I declare req to be a pointer structure of type lODRPReq, the request block for asking the printer device to dump a rastport. The initialization is a little funny in that if you were to say: * req = &request; as a normal C statement, you would be saying
"put the address of request into the structure pointed to by
req" which is a big mistake. What we intended is make req point
to the beginning of request. As a normal C statement this would
correspond to: req = & request; The way to rationalize this is
that we have just declared a pointer variable
("some_type*some_pointer__variable") so, if we were to provide
an Initializer what would we initialize? A pointer. To review this (ahem) pointer: register struct lODRPReq *req a &request; is the same as saying: register struct lODRPReq *req; req = & request; and NOT the same as: register struct lODRPReq *req; * req = & request; You might wonder why! Go through the effort
of setting up req to point to request. Why not use request
straight off. Weli, two reasons. First I know that I will be doing a lot of references to the address of request when I start assigning Conversation With A Computer A (It’s a lot of fun, a brain teaser and a programming guide too!) 'Very highly recommended by me is Conversation With A Computer, from Jenday Software, a set of games and conversation written in Amiga Basic, and shipped with the source code provided. It is entertaining, amusing, thought provoking, and just plain fun. If you have any interest in programming in BASIC on the Amiga, this is a must have for the examples.” f MATTHEW LEEDS, software reviewer for Microcomputer and Powerplay magazines A A This program really shows off Amiga's talents: lots of color graphics, mouse routines, voice synthesis, sound? And animation. The 2,000 lines of Amiga Basic can be listed to screen or printer. The documentation describes in detail, module by module, how it all works. There is a coded example of virtually every one of Amiga Basic’s powerful features. You'll be challenged to three mind games. Memory Test will drive you to drink. Battle of Numbers and Pegboard are two of the most elegant logic games of all time. It’s your brain against Amiga's silicon! The program is professionally packaged with comprehensive typeset documentation, it requires 512K. It is not copy protected. JENDAY SOFTWARE RO. Box 4313 Garden Grove, CA 92642 (714) 636-3378 CARDINAL ANNOUNCES ITS 2x2 EXPANSION DISK DRIVE
GIVE YOUR AMIGA 2. 6 MEGABYTES 2x2 CONSISTS OF: 2 5 1 4” 80 track drives,
electronics and software. AMIGA DOS MODE — Emulates 3. 5" drives with 880K each. PC DOS MODE — Provides dual 40 track, 360K drives. S595.00 PLUS SHIPPING FIRST SHIPMENTS IN JULY 1986. S 25.00 Refundable deposit reserves your drive. Cardinal Software 14840 Build America Drive Woodbridge, VA 22191 Info: (703) 491-6494 L t s m 0 Order now! 800 762-5645 values to the members of the request structure. So, l would like to keep the address of request someplace handy like a register. Second, req is less to type then request! In the next line the initialization of drp to point to rp is very important. Drp is a pointer to a RastPort structure which is what must be passed to the printer device to tell it what to print. I know that when! Make the call to the printer device I will pass it a pointer to one of exactly two RastPorts. Here I am initializing drp to point to one of them (sort of making an assumption). If I find out later that I assumed wrong, I can fill in the other value later. In general, initializing a variable to its most likely final value is often done in programs. I do it from time to time (like here) as a holdover from my days as an assembly language programmer where it was definately more efficient (one whole instruction!) To do it this way. One more bit of trivia. A hold over from my days as a Fortran programmer, notice I declared a miscellaneous integer variable "i." Man, old habits die hard! First, we initialize close_mask to 0. Recall that dosejnask will have a bit set on for each resource I allocate to scrimper and must remember to give back to AmigaDos. It would not be too cool to have some stray bits turned on in close_mask when I went to start deallocating things. We move the selected screen to the front most position so the user can get a look at it. Notice I just go ahead and use the value of “s." Ordinarily I would check first to see if s was a valid pointer by comparing it to NULL (which is used by convention to specify that a pointer has no actual value). I do not do this check in this case because ihe routine which calls dump_screen checks s for NULL for me. But, if I had wanted to perform the check here, I would have said something like: if (Is) return; or if (s == NULL) return; NULL, by convention has the same value as "falsity" so the first statement is the most efficient way of coding a test of a pointer for equality to NULL. Next, I call the Dos routine Delay, Delay will pause your program for the specified number of dock ticks (which on ihe Amiga occurs 50 times a second). Notice, I cast the 30 into a long integer by placing an "L" after it. All integer arguments passed to any Amiga library routine are expected to be passed as 32 bit values. Since Aztec C defaults to 16 bit, integers the cast to a long is required for properly working code. The call to Delay keeps the selected screen in front of all others for about half a second. Then, we put the workbench screen back in front. Next I put up the requester asking if you really wanted to print the screen I was just showing. I do this by calling AutoRequest which is an Intuition call. Auto request is a very simple way of formatting and displaying very simple requesters. To put up your own requester requires a lot of code to handle IDCMP events coming back as a result of the user clicking gadgets and such. AutoRequest handles all that for us allowing us the luxury of being able to put up a real live requester with only one C function call. The requesters that AutoRequest can render are, however, limited to a little text (called the "body" of the requester) and one or two boolean gadgets. In short, requesters rendered with AutoRequest can ask a question after which the user must respond with exactly one boolean gadget selection chosen from at most two boolean gadgets. Scrimper uses AutoRequests to render both one and two choice requesters. The two choice requester is useful for asking yes or no questions. By convention the "yes" or "true" choice is rendered on the left while the "no” or "false” choice is rendered to the right. One choice requesters are useful for putting up some information for the user to read. AutoRequest wilt not return (and thus your program will not continue) until the user selects the one boolean gadget available. By convention, one choice requesters are always rendered on the right (where the "false" or "no" gadget goes). The boolean gadgets rendered by AutoRequest will always be RELVERIFY gadgets which means you will need to both depress the LMB and release it while over the gadget in order for the selection to be made. You provide AutoRequest a pointer to the window you want the requester associated with. Also, you pass three IntuiText structures corresponding to the body text, the text for the "true" gadget and text for the "false" gadget. The offsets of the body text are based from the upper left corner of the requester so you have control over where the body text goes. However, Intuition automatically chooses where to place the boolean gadgets based upon the width and height of the requester which you provide. The offsets of the gadget texts are based on where ever Intuition finally places the gadgets. If your body text is too large for the width you have specified, Intuition will truncate the text to fit the width. One more thing about the body and gadget texts, they will be rendered in the screen’s default font II the TextAttr pointer field in the IntuiText structures are equal to NULL. If they are not, intuition will try to render the texts in the specified font. When calling AutoRequest, you can also tell Intuition what other kinds of events you want to consider positive and which you want to consider negative. Usually you will specify these flags (called PositiveFlags and NegativeFlags in the documentation) to be zero meaning you want only the boolean gadgets to constitute a response from the user._ LI YET ANOTHER UNFAIR ADVANTAGE. Although you haven't had your Amiga for very long, you may find ihai you need a more powerful line interpreter. Consider these features: Pi | Search paths User definable command-line editing Definable function keys Ursix-like wildcards More versitile redirections Command aliases Built in commands Command history All available new. At a reasonable price, from Z O X s o THE AMIGA TOOLSMITHS. PO. Bo* 283. LomHI MA. 01853-0283 USA it At % I *) ti. tlyfM'i trf Cc»nn, Ak, r As £j tr* If you specify nonzero
flags, you should in fact be specifying one of the defined
IDCMP flags. For example, specifying PositiveFlags to be
DISKINSERTED means that while the requester is up on the screen
and a disk should happen 1o be inserted, you want this to be
considered equivalent to the user having selected the "true"
gadget. AutoRequest returns either true or false depending upon which gadget (or equivalent event) the user selected. In scrimper, right after moving the workbench screen back into the front most position, I present a requester asking you if the screen just shown is really the one you want to print. If you decide it was not, you would select the “false" gadget (represented by the "no" IntuiText structure). This would cause AutoRequest to return false so in the next statement, I would return to the main routine which would accomplish an abort of the print. If we really want to print the selected screen, I go ahead and initialize my internal rastport using InitRastPort. InitRastPort, by the way, is how the current font will be associated with a new rastport. The purpose of a rastport is to contain a few items of information as well as to point to the BitMap structure which will actually contain the graphical data shown on the screen. In fact, right after initializing our internal BitMap structure, we make the internal rastport point to the internal bitmap. We still, at this point are assuming we will have enough memory to make a snap shot of the selected screen. In the subsequent "for" loop,! Try to allocate as many bit planes as the selected screen has. Notice the compound initializer in the for loop which initializes both "i" and "raft_count." You can read the for loop as follows: i = 0; raft_count = 0; while (i s- BitMap.Depth) ‘all the other stuff * i++;} In other words, all for loops can be expressed as while loops as follows: for (initialization; continuing condition; loop control) statements is the same as: initialization; while (continuing condition) statements; loop control;} In ihe loop, we try to allocate a raster large enough to one plane of the selected screen. If the AilocRaster fails, notice we immediately call free_raster. Free_raster depends on rastjcount to be an accurate reflection of the number of rasters ACTUALLY allocated. That is why we increment raft_count after we are sure the allocation was successful and why we were careful to initialize it to zero before the loop started. If one of the AllocRaster's fail, we ask the user if they want to print using the actual memory of the selected screen. If so we make the”drp" pointer point the raslport of the selected screen instead of our internal rastport. This way, when we actually make the printer call whether we are actually passing the internal rastport or the selected screen rastport, our printer call looks the same. If drp still points to the internal rastport when we finally fall through the bottom of the loop, it means we will be using the internal rastport and bit map. If this is the case, we need to initialize the internal bit map as well as actually take the snap shot of the selected screen. Notice right after the opening brace, I declare some new local variables. An opening brace in C is the start of a statement block. Anytime you start a new statement block, you have the opportunity of declaring some more local variables. The variables declared inside of the statement block are, in fact, REALLY local since they are defined only between the starting brace and the corresponding ending brace. In this case, I know that the variables src and deft are used only within this statement block. Further, the two variables should be placed in registers. It would be a big waste of registers to allocate two to src and deft when the variables are needed in only the smallest of sections of dump_screen. Declaring them from within the statement block gives me the best of both worlds.! Gel the variables placed into registers and I do not need to tie down the registers for the whole routine. The assignment of "cm" is interesting, it is a structure assignment. The C compiler generates the code to transfer all of the bytes in the source structure to the memory set aside for the target structure. The original C language did not have this feature. Structures had to be assigned one component field at a time or copied by some blind byte mover like memcopy. Some years after the original C compilers became available structure assignment (and enumeration types) were added to the "standard" language. I do the struclure assignment because most of the fields in "cm" will ultimately have the same value as the ColorMap from the selected screen. So, why copy the whole structure over and then correct what will be different. In the "for" loop I am copying over the selected screen's color mappings. Notice the double check I do to decide when to end the loop. I will end the loop when the loop counter reaches the stored number of colors OR the logical maximum number of color registers a screen can have. This way, even if the stored count is erroneous (too large or negative) I will not over run my preallocated buffer. Checking such as this is known as "firewalling" and is a good practice in loops, especially a loop which modifies memory. Next, I put up a requester to see if you want to remamp color register zero to white. Color register zero is normally the background color (although using paint programs like Deluxe Paint, you can change this). For example, if you were to print the King Tut picture that comes with D.P. without remapping color register zero, you would get quite a bit of black which translates into heavy ribbon and printer wear. Unfortunately, some pictures use the background color as part of the overall picture. Again citing King Tut as an example, if you were to remap color register zero to white, you would get white splotches in non-pleasing locations. The Delay statement is there to allow Intuition time to redraw the workbench screen after removing Ihe latest requester. If this Delay were to be left out and you were printing the workbench screen, the last requester would always be in the picture. Finally, we take the snap shot of the selected screen with ClipBlit, ClipBlit requires pointers to a source and destination RastPort. Also, you need to pass an x and y offset within the source RastPort as well as an x and y offset in She destination RastPort. The width and the height of the region you want to operate upon are also passed. Finally, the last argument to ClipBlit is a specifier which tells the Amiga’s Blitter how to perform the copy. In this case, I want just a straight copy which is represented by hexidecimal CO. In specifying the blit operation, only the upper four bits are used (the "C" digit). A complete discussion of the way to construct these parameters is given in RKM. Suffice to say the digit actually represents a logic equation specifying how the source and destination are to be mixed. The last statement before the next closing brace, assigns zero to both the beginning offsets since we are using our own internal RastPort, of course we are starting from the upper left corner. If we are not using the internal RastPort (because there wasn't enough memory available to allocate one) we make the printer i o request block point to the selected screen's ColorMap directly instead of the internal colormap (which would not have been initialized). Now we get to open up the printer's message port as well as the print device. In last month’s Miga-Mania we discussed the role of message ports in device i o. We have to declare the message port before opening the device since one of the arguments passed to the OpenDevice call will be what the CreatePortcall returns. As with other functions which return pointers, in Manx C you have to explicitly declare the function as returning a pointer lest its return value be truncated to the 16 bit integer. If for some reason I could not allocate the message port, i put up a single gadget requester informing you of this unfortunate development. Note that the single gadget is passed as the "false" gadget. Intuition expects this convention will be followed. I discard the return value of the AutoRequest call since it is not needed, a single valued requester can only return a single value. Also, the gadget is there only to allow you to tell scrimper to go and continue after you have read and pondered the weight of the requester body text. Similarly we open the printer device itself. Notice that after each valid open of a resource, I "or" in the corresponding bit into closejmask. The syntax: variable operator= expression; is a shorthand for: variable = variable operator expression;So the statement: close_mask j= SPORT; is the same as: Haven’t You Set Your AMIGA’S Time And Date Once Too Often? Introducing A-TIME A clock calendar card with battery back-up, so you will never have to set the time and date in your AMIGA, EVER AGAIN! • Plugs into the parallel port, • A completely transparent printer port is provided, with total
compatibility to all I O operations. • Battery back-up keeps the clock calendar dale valid on power
down. • Custom case with a footprint of only 22.*" x Vx“ x VW (W x D x
II) in standard AMIGA color. • Leap year capability. • A-TIME package contains: l-A-TIME clock calendar module I-3.5“
DS Utilities Disk Operating instructions PRICE $ 49* AVAILABLE:
NOW Mail chock to: AKRON SYSTEMS DEVELOPMENT (ASD) P. 0. BOX 6408 (409) 833-2686 BEAUMONT, TEXAS 77705 include 33.50
for shipping and handling For MC VISA orders call (409)
833-2686 AMIGA is a trademark of Commodore — Amiga inc. For
the purposes of scrimper, ignore DestCois and DestRows. They
will be ignored by the printer device since I will be asking
the printer device to compute the largest printable area and
expand (or shrink) the picture to fit. Ordinarily these fields would specify how many printer pixels wide and high you wanted the print out to be. We should all pause to think about how sexy the ability of the Amiga to shrink and expand arbitrary bit images to fit into (arbitrary) arbitrary sizes on (nearly) arbitrary printers. It is really tough, for example, to shrink an image in such a way that it remains true to the original. To top it off, we need only make this one (PRD_DUMPRPORT) call to harness this facility. All persons should pause to reflect this feature while facing Los Gatos (or wouldn’t it be West Chester in this case?). The last initialization of the request block is heavy black magic. Simply, I'm asking the printer device to use all of the available space on the printer BUT make sure you do not change the aspect ratio of the picture. There are multitudes of other flags which can be set in io_Special. Believe me, the discussion of the how io Special intereiates to DestCois and DestRows (and everything else) is best not duplicated outside the Amiga manuals considering the already long length of this article. To explain all the options in a PRD_DUMPRPORT would take another one hundred lines of text. Finally, we submit the i o with DolO. DoIO is synchronous. That is, the DoIO call will not return until the i o completes (either in error or properly). DoIO takes care of stripping the message coming back from the printer device (on our message port) so we won't have to worry about it. All that remains is to close down the printer device and return whatever resources I had allocated. The call close_down_printer in turn calls free_rasters to actually give back raft_count bit planes of original width and height. Close_down_printer then closes the printer device and then deletes the allocated printer port. Notice close_down_printer could be called at any intermediate point in the execution of scrimper whenever an error might have been found in dump_screen. That is, the routine will return only those resources actually allocated to scrimper. Since the Amiga is a true multitasking machine, processes are given priorities under which they share the most prized resource in the machine, the central processing unit. As it turns out, the printer device when loaded and running, runs at an all too high priority. Normal user process run at a priority of -5. The printer device comes in at a substantially better priority of 0 (the more positive the priority the better). This means that given the choice of running your processes (like Deluxe Paint if you were running it and scrimper at the same time) and the printer device handler, the device handler would win every time. Your processes would run only when the printer device relinquished the cpu for some reason (which would be often enough for you to see, your processes are stil! Running). Alter_printer_priorly changes the priority of the printer device handier by modifying its task control block. First we find the task control block by catling FindTask giving the name of the printer device process. If FindTask returns a real live task block pointer (which it should since previous to the call to alter_printer_priority we called OpenDevice on the printer which would load and start running the printer device handler if it had not already been in memory) we set its priority down to something more reasonable. The calls to Forbid and Permit are needed to make sure that between the call to FindTask and the modification of the priority in the resulting task block, the task does not terminate. Forbid prevents the Amiga from changing from one process to another. Permit allows this (mutli-tasking) to happen again. One last note. Scrimper will leave the printer device driver resident in memory after scrimper terminates. If you want to explicitly purge memory of the printer support (to make more memory available for other things) you would attempt to allocate a ridiculously large amount of memory (say 24 Mbytes). The Amiga, while trying to honor the request, will ask all expendable drivers to give up the memory in which they are sitting. For this to work, you have to make the memory request after closing the printer device since while someone has the printer device open it is not expendable. Since the amount of memory requested is ridiculously large, no memory will be allocated so there isn't any resource to give back after the allocation attempt. Man, I am typed out! Next month we will pick up the explanation of the mainpast of scrimper, scrimper. c. Scrimper. c contains ail the menu handling stuff as well as some interesting C language constructs, So, tune in next month and Happy Scrimping!!! include execAypes. h include exec memory. h struct Menultem screenjo_front = ffinclude intuition intui1ion. h &print screen, — 5,0,0,11, include libraries dos. h ITEMTEXT | ITEMENABLED | HIGHCOMP, include libraries dosextens. h 0, (APTR) &scrn_2jmtjt, NULL. NULL, NULL}; include workbench star (up, h r struct Menu function menu*= NULL, SCREEN IMAGE P R 1N TE R (SCRIMPER) 10,0,130,10, MENUENABLED, Copyright 1986 By Perry S. Kivolowitz "Select Function", define WWIDTH 640 &screenJo front}; strucl Menu screen menu = define MAX_SCREENS 20 NULL, define SIZE_MI (sizeof (struct Menultem)) 10,0,120,10, define SIZEJT (sizeof (struct IntuiTexJ)) MENUENABLED, extern void 'OpenLibrary (); "Select Screen", NULL}; extern void 'GetMsgQ; extern void *OpenWindow (); struct jmptbl extern void *ilemAddress); struct Menu 'menu; int is_cli = 0; int (*init)(); int (*cleanup)(); int which_screen = 0; int ('pick)(); char *window_titie = "SCReen Image PrintER VO.6 (PSKivolowitz)"; extern char ‘callocQ; struct jmptbl scrn Jmptbl = &screen_menu, struct IntuitionBase ’Intuit ionBase; screenjnit, struct GfxBase ‘GfxBase; generic_cleanup, struct Window *w; screen_pick}; struct Screen *s[MAX SCREENS); char *stifles[MAX_SCREENS); struct jmptbl f unejmptbl = struct IntuiMessage 'message; &function_menu, int screen_count = 0; funejnit, extern generic_cleanup (); generic_cleanup, funejnick}; extern screenJnitQ, scree n_pick); extern tunc_init), tunc_pick (); struct NewWindow nw = struct IntuiText print scrn it« 0,10, WWIDTH,10, — 1, — 1, ACTIVEWINDOW | INACTIVEWINDOW | 0,1, JAM2,0.0, NULL, CLOSEWINDOW|MENUPICK, (UBYTE *) "print selected screen", NULL}; WINDOWDEPTH | WINDOWDRAG | NOCAREREFRESH j struct IntuiText back 2 scrn lt = WINDOWCLOSE, NULL, NULL, NULL, 0,1, JAM2,0,0, NULL, NULL, NULL, 0,0,0, O. WBENCHSCREEN}; (UBYTE ’) "return to screen selection’, NULL}; struct IntuiText scrn 2 frnt it = 0,1, JAM2,0,0, NULL, define IBPtr struct IntuitionBase* allot_menuJtem (p, i, s) (UBYTE *) "selected screen to front", NULL}; register struct Menultem **p; struct Menultem back to screen select = register char *s; NULL, — 5, 22, 0,11, ‘p = (struct Menultem *)calloc (1.SIZE Ml); ITEMTEXT | ITEMENABLED j HIGHCOMP, if (*p) 0, (APTR) &back_2_scrn_it, NULL. NULL, NULL}; (*p)- Nextltem = NULL; struct Menultem print_screen = (*p)- Height = w- WScreen- Font- ta_YSize; (’p) — TopEdge =. I' (*p)- Height; &back to screen select, — 5,11,0,11, (*p)- Left Edge = -5; ITEMENABLED | ITEMTEXT | HIGHCOMP, (*p)- Flags= ITEMTEXT | ITEMENABLE | 0, (APTR) &print_scrn_it, NULL, NULL, NULL}; The Memory Location 396 Washington St. (Rt. 16) Wellesley, MA. 02181 (617) 237-6846 AMIGA OTOERS I HAGIBB A STORE BUILT AROUBD THE
HIGHCOMP; (‘p) — Command = NULL; (*p)- Subitem = NULL;
(*p)- NextSelect = NULL; (*p)- MutualExclude = (long) ~(1 «i);
allocJntuitext (&((*p) — ltemFill), s); if (! (*p) — ltemfill) *p =
NULL; else (*p)-= Width = Intuit extLength ((’p) — ltemFill);}
} allot_intuitext (p, s) register struct IntuiText "p; register
char's;! Register char'd = NULL; register int length = stden (s) + 1; if (length & 1} length++; * p = (struct IntuiText *)calloc (1, SIZEJT); if(*P) d=calloc (1
, length}; if (d) (*p)- FrontPen = 0; (*p)- BackPen = 1;
(*p)- LeftEdge = 0; (*p)- TopEdge =0; (*p)- DrawMode = JAM2;
(*p)- ITextFont = NULL; (*p)- NextText = NULL; (*p)-! Text =
(UBYTE*) d; strepy (d, s);} else *p = NULL;}} define EVEN(S)
((S) & 1? (S) + 1: (S)) get_screens () register int i = 0;
Forbid (); s[0] =w- WScreen; stifles[0] =calloc (1
EVEN(strien (s[0]- Title)+1)); screen_count = 1; if (stifles[0])
(strepy (stifles[0], s[0]- Title); while (s[i++]- NextScreen)
s[i] = s[i-1]- NextScreen; stifles[i] = calloc (1,
EVEN(stden (s[ij- Title)+1)); if (stifles[i])
strepy (stifles[i], s[i]- Title); else PermitO; return ((int)
FALSE);} screen_count++;}} PermitQ; return ((int) TRUE);
build_menu (menu, scrn) register struct Menu ‘menu; register
struct Screen 'scrn; register inti; register struct Menuttem
'p; if (get_screens ()) allot_menu_item (&menu- Firstltem, 0,
stifles[0]); if (imenu- Firstltem) return ((int) FALSE); p =
menu- Firstltem; for (i = 1; i screen_count; i++)
alloejnenuJtem (&(p- Nextltem), i, stitlesfi)); if
(ip- Nextitem) return ((int) FALSE); p = p- Nextltem;} return
((int) TRUE); 1 return ((int) FALSE); main () extern void
massage_left_edges); is_cli = 1; IntuitionBase = (IBPtr)
OpenLibraryf intuition. library", OL); if (IintuitionBase)
ifdef PRINTS if (is_cli) prin1f ("could not open intuition
library nH); endif exit (1);} GfxBase = (struct GfxBase *)
OpenLibrary ("graphics. library",0L); if ([GfxBase) ffifdef
PRINTS if (isjeli) prints ("could not open graphics library n");
endif CloseLibrary (intuitionBase); exit (1);) if (! (w =
(struct Window *) OpenWindow (&nw))) ifdef PRINTS if (is_cli)
prints ("could not open dummy window n’); endif
CloseLibrary (GfxBase); CloseLibrary (intuitionBase); exit (1);}
SetWindowTitles (w, window_title, -1L);
set_widths (&function_menu); massageJeft_edges (&function_menu);
while (message=(struct IntuiMessage *) GetMsg (w- UserPort))
ReplyMsg (message); while (getmenu (&scrnjmptbl)); out: while
(message=(struct IntuiMessage *) GetMsg (w- UserPort))
ReplyMsg (message); The AMIGA learning curve is steep! Choose
a porting house that's well advanced along the curve! Advanced Systems Design Group Your Port of Entry into the Amiga Marketplace 280 River Rd., Suite 54A Picscataway, N.J. 08854 1-201-271-4522 Amiga is a trademark of Commodore-Amiga, Inc. SetWindowTitles (w, NULL, NULL); CloseWindow (w); CloseLibrary (GfxBase); CloseLibrary (intuition); exrt (O);} screen__pick (code) USHORTcode; (which_screen = ITEMNUM(code); return (getmenu (&tunc_jmptbl));} freeallQ register int i; register struct Menultem *p = screen_menu. Firstltem; register struct IntuiText‘t; register struct Menultem *pnext; for (i=0; i screen count; i++) if (strtles[r]) free (stifles[i]); while (p) (if (p- ltemFil! t=(struct Intuitext *) p- ltemFill; if (t) if (t- IText) free (t- IText); free (t);}} INTRODUCING AMIGA DOS & MICROSOFT'BASIC TEMPLATES Get the Guru Busters!™ I----------- ----------- ------3? AmigaDOS S3.95? Microsoft Basic S9.95? Both S1G.95 Charge my:? Visa Credit Card No__ Name_ Address_ City_ Q MasterCard? Check money order _Exp. Date_. State.. ZIP. Signature ___ Michigan residents add 4% sales tax. Add SI,50 shipping & handling Mail to: Slipped Disk • 31044 John R • Madison Heights, Ml 48071 Dealer inquiries welcome. Phone: (313)583-9803 Allow 3-4 weeks for delivery pnext = p- Nextitem; free (p); p=pnext;} screen_menu. Firstltem = NULL; scree n_count = 0;} vo'd massage_left_edges (menu) register struct Menu 'menu; register int max_width = 0; register struct Menultem ‘p = menu- Firstltem; if (ip) return; while (p) if (p- Width max_width) max_width = p- Width; p=p- Nextltem;} p=menu- Firstitem; while (p) ((struct IntuiText *) (p- ltemFill)) — LeftEdge = (max width — p- Width) 2; p- Width = max_width; p=p- Nextltem;}} set_widths (menu) register struct Menu "menu; register struct Menuitem *p = menu- Firstltem; while (p) p- Width = intuiTextLength (p- ltemFill); p=p- N ext Item;)} tunc_pick (code) USHORT code; register struct Screen *scrn; extern struct Screen *verify_screenjoointer (); register ULONG class; if (scrn=verify_screen_pointer ()) switch (ITEMNUM(code)) case 2;return ((int) TRUE); case 1; ClearMenuStrip (w); dump_screen (scrn,0,0, scrn- Width, scrn- hleight); return ((int) TRUE); case 0; if (scrn (== w- WScreen) break; ScreenToFront (scrn); Wait (1 L«w- UserPort- mp_SigBit); message=(struct IntuiMessage *)GetMsg (w- UserPort); if (message) class=message- Class; ReplyMsg (message); if (class!=INACTlVEWINDOW) ScreenToFront (w WScreen); if (class == CLOSEWINDOW) return ((ini) FALSE);} return ((int) TRUE);} DisplayBeep (w- WScreen); re1urn ((int) TRUE);} struct Screen *verify_screen_pointer () register struct Screen *hoped_for; register struct Screen *p; if (! (hoped_for = s[which_screen])) return (NULL); p = s[0]; while (p) if (p ™ hopedjor) return (hopedjor); p=p- NextScreen;) return (NULL);} tunc_init () ClearMenuStrip (w); SetMenuStrip (w, &function_menu); return ((int) TRUE);} generic_cleanup () ClearMenuStrip (w); freeall ();} screen_init () if (ibuild_menu (&screen_menu, NULL)) return ((int) FALSE); massage_1eft_edges (&screen_menu); SetMenuStrip (w, &screen_menu); return ((int) TRUE);} getmenu (jmptbl) register struct jmptbl *jmptbl; register struct Menultem *mi; register ULONG class; register USHORT code, code_save; register int ret_val; if (! (*jmptbl- init))) return ((rnt) FALSE); while (1) message = (struct IniuiMessage *) GetMsg (w- UserPort); if (Imessage) Wait (1 L « w- UserPort- mp_SigBit); continue;} class = message- Class; code = message- Code; ReplyMsg (message); switch (class) case CLOSEWINDOW; (*jmp1bl- cleanup)(); return ((int) FALSE); case INACTIVEWINDOW: case ACTIVEWINDOW; (*jmptbl- cleanup)(); return ((int)TRUE); case MENUPiCK: if (code == MENUNULL) continue; while (code!= MENUNULL) mi = (struct Menultem ’) [temAddress (jmptbl- menu, (long) code); code_save = code; code = mi- NextSeled;} ret_val = (*jmptbl- pick)(code_save); (*jmptbl- cleanup)(); return (ret_val); include exec types. h include exec memory. h include exec tasks. h include intuition intuition. h include devices printer. h r SCREEN IMAGE PRINTER(Printer. c) Copyright 1986 By Perry S. Kivolowitz The author grants permission to duplicate and reproduce this software provided that no commercial gain can be had as a consequence of use or reproduction of this software and that this and other identifying informat-be left intact. This software is provided as a service to the readers of Amazing Computing and does not imply a commitment on behalf of Ihe author to provide support nor can the author be held liable for the consequences of use or misuse of this software. defineMAX_CREGS32 static struct lODRPReq request; static struct MsgPort "pport; extern struct MsgPort 'CreatePortQ; extern struct Task *FindTask (); extern PLANEPTR AllocRasterQ; extern struct Window *w; static struct BitMap bm; static struct RastPor! Rp; static int close_mask; static int raft_count; definePPORT0x0001 definePRlNTER0x0004 static struct IntuiText no_port = (0,1, JAM1,10,16, NULL, (UBYTE ’) "Could Not Allocate Printer Port”, NULL}; static struct IntuiText no_lp = 0,1, JAM1,20,16, NULL, (UBYTE *j "Could Not Open Printer", NULL}; static struct IntuiText no_mem2 = 0,1, JAM1,10,16, NULL, (UBYTE *) "asynchronous print. Continue?", NULL}; static struct IntuiText no_mem = 0,1, JAM1,30,5, NULL, (UBYTE *) "Not enough chip memory for.,&nojmem2}; static struct IntuiText remap = 0.1.JAM1,17,10, NULL, (UBYTE*) "Remap Transparent ColorTo White?", NULL); static struct IntuiText ru_sure = (0,1, JAM1,22,5, NULL, (UBYTE *) "Print The Screen?", NULL); static struct IntuiText yes = (0,1, JAM1, 6,4, NULL, (UBYTE *) "Yes", NULL); static struct IntuiText ok = (0,1, JAM1,7, 4, NULL, (UBYTE*) "OK", NULL); static struct IntuiText no = (0,1.JAM1,7, 4, NULL. (UBYTE*) "No", NULL); dump_screen (s, bx, by, width, height) struct Screen's; register struct lODRPReq ‘req = &request; struct RastPort *drp = &rp; struct CoiorMap cm; unsigned short color_table[MAX_CREGS], *src, *deft; int result; int i; close_mask = 0; ScreenToFront (s); Delay (30L); ScreenToFront (w- WScreen); result= AutoRequest (w,&ru_sure,&yes,&no,0L,0L,200L,60L); if (Iresult) return; InitRastPort (Srp); lnit81tMap (&bm, (long)s- BitMap.Depth, (long)width. (long)height); rp. BitMap = &bm; for (i = 0, raft_count = 0; i s- BitMap.Depth; i++) bm. Planes[i] = AllocRaster ((long) width, (long) height); if (ibm. Planes[i]) (free_rasters (width, height); result = AutoRequest (w,&nojnem, &yes,&no,0L,0L,300L,6QL); if (Iresult) return; drp = Ss- RastPort; break;} raft_count++;} src = (unsigned short *) s- Viewport. ColorMap- ColorTable; deft = colorjable; cm = *s- ViewPort. ColorMap; for (i = 0; i cm.Count && i MAX J3REGS; i++) * deft++ = *src++; cm. ColorTable = (APTR) colorjable; if (AutoRequest (w, &remap,
Syes, &no, 0L, 0L, 320L.60L)) (r make trnsprnt color into
white * colorjable[0] = OxFFF;} if (drp=s&rp) Delay (60L);
ClipBlit (&s- RastPort, (long)bx, (long)by, drp,0L,0L,
(long)width, (long)height,0xC0L); bx = by = 0;} if ((pport =
CreatePort (NULL, 0L» == NULL) (void)
AutoRequestfw.&nojDort. NULL.&ok. OL. OLJOOL. eOL);
close_downj rioter (width, height); return;} close jnask |=
SPORT; if (OpenDevice ("printer.device",0L, req,0L)) (void)
Auto Request (w,&noJp, NULL,&ok,0L,0L,300L,60L);
close_down_printer (width, height); return;} close_mask [=
PRINTER; alter_printer_priority (); req- io_ColorMap = &cm;
req- io_Message. mn_ReplyPort = pport; req- io_Command =
PRD_DUMPRPORT; req- io_Rast Port = drp; req- io_Modes
=s- ViewPort. Modes; req- io_SrcX = bx; req- io_SrcY = by;
req- io_DestCols = req- io_SrcWidth = width; req- io_DestRows
= req- io_Srcheight = height; req- io_Special = 0x8C;
DolO(req); close_down_printer width, height);}
close_downj rioter (w, h) free_rasters (w, h); if (close_mask
& PRINTER) CloseDevice (&request); if (close_mask & SPORT)
DelelePort (pport);} freejasters (width, height) register
int i; for (i = 0; i raft_count; i++) FreeRaster
(bm. Planes[i], (long) width, (long) height)';}
alter_printer_priority () register struct Task *pd;
Forbid (); pd = FindTaskfprinter.device"); if (pd &&
pd- tc_Node. ln_Pri = 0) pd- tc_Node. ln_Pri = -5; Permit ();} • AC* This time around, you will be familiarized with some of
Mbasic's de's and don'ts for programming. If there was ever a
time to take a look at a Mbasic program listing, this is it. Load up any program in your "BasicDemos" drawer and then LIST it like I showed you in last month's installment. Microsoft Basic Tutorial Part II: MBASIC Commands by Kelly Kauffman CIS 70206,640 Take special notice of one thing, there are NO fine numbers. Line numbers were used and still are) in some Basic’s on other machines (even the old AbasiC with rev. 1.0 of the WB and Kickstart). They tell the computer what order to execute commands in. Things are different now. Line numbers are now completely optional. The program will execute from the top-down, and it will process each command as it runs into it. Now you may be asking yourself, "What if I have to want the program do something, say, 30 or 50 times?" Well, I'm glad you asked. A SET of commands can be given a name. When you name a group of commands, this section becomes what is called a "Procedure," An example follows: Hello: (Procedure name followed with a":") PRINT "Hello Amiga User!" PRINT "Having fun???" Note that you MUST follow a procedure’s name with a colon. Now that is fine and dandy, but what if, like you asked before, you want to do that forever and ever (or at least until we slop the program)? You would stick in after the second PRINT statement the following: GOTO Hello So that your entire listing would look like this: Hello: PRINT "Hello Amiga User!" PRINT "Having fun???" GOTO Hello Now when the program is RUN, this would print the words in quotes forever, or at least until you press CTRL-C to stop the program. See how simple it is??? It is important to note that if you RUN the program without the GOTO command, the computer will automatically stop and return control back over to you. Now say you wanted it to print something else besides that. That's simple too. Simply move your cursor up to the word "User!" In the second PRINT statement using the four arrow keys on your keyboard. Press the "BACK SPACE" key until all that's left is "Hello " (Note to still leave the space after the word Hello.) Now type "Amazing Computer Reader!" (Without the quotes.) Your listing should now look like this: Hello: PRINT "Hello Amazing Computer Reader!” PRINT "Having fun???" GOTO Hello NOW when you RUN the program, it will print out the new information. YOUR FIRST COMMANDS: As you can tell the command PRINT writes whatever follows in quotes on the screen. It is MANDATORY, for now, that you enclose what you want it to write on the screen in quotes. The GOTO command will make the computer stop at the GOTO command and continue running the program at the procedure name that you specify AFTER the GOTO command. IT IS VERY IMPORTANT that you do not name your procedures the same as the Mbasic commands. For instance, don’t name a procedure PRINT: or GOTO: — this is one of the best ways to confuse the computer and generate an error. These commands (PRINT, GOTO, etc.) are called Classic Concepts F UT URE WARE ™ presents: ©ntn av mm if@kiiib (ortho AMIGA™ computer ONLY $ 14.95! (Introductory Price) INCLUDES; • 13 Fresh New Fonts • Font Reference Booklet • Ideas for Using Fonts • Install Utility Program Video Titling * Headlines * Cards
Wordprocessing * Paste-up Page-layout * Letterheads * Signs
Newsletters * Desktop Publishing Compalblewrth WORKBENCH,
NOTEPAD, DELUXE PAINT™, AEGIS IMAGES™ ard many others. Send $ 14.95 US money order or check plus $ 1.00 postage and handling to: FVTUREWARE™FONTS, P.O. Box 94276, 6871 No. 3 Rd., Richmond, B.C. Canada V6Y2A6 Amiga isa (raderuarit c CemmcdorfrAmiga g'e Images is a CacJemaik o (Aegis Devekzment ise Paht Is a trallaraiti of Elearsnic Arts RESERVED WORDS. For a complete list of Reserved Words, consult your Amiga BASIC manual, page A-13 and A 14. One thing that I cannot stress enough is experiment. BUT BEFORE YOU GO Galavanting AROUND YOUR KEYBOARD, MAKE ABSOLUTELY, POSITIVELY SURE THAT YOUR DISK(S) IN YOUR DRIVE(S) ARE WRITE-PROTECTED!!!!!!!!! In other words, slide the little tabs on the back's of the disks so that you CAN see through the little hole. Now you can play to your hearts content and not worry about losing any information. Besides, it's ALWAYS a good idea to make and use Back-Up copies of your disks. Now go ahead, LOAD up a program, LIST it, look at all the different commands that they use. Look 'em up in your manual and try to figure out just exactly what they're doing. I'm a firm believer in the experimentation method. Take statements from the LIST window, and type them into the "BASIC" window and hit return. If they generate an error, big deal. If it does something, make a mental note of it. Then play around with that one for a bit, and move on. This is the best way to begin building your knowledge of AmigaBASIC. I will be back again next month to explain to you more Mbasic commands and tricks!!! Until next time, here is a quick little program you can type in and play around with. Guess Number by Kelly Kauffman CIS 70206,640 RANDOMIZE TIMER setup: CLS PRINT "Guess the Number between 1 and 100" a$ ="Guess the Number between 1 and 1 hundred." X$ =TRANSLATE$ (a$) SAY x$ x=INT(RND*100) gs=0 guess: PRINT "What is your guess INPUT g gs=gs+1 IF g x THEN PRINT "Too High!" A$ ="Too High." X$ =TRANSLATE$ (a$) SAY x$ END IF IF g x THEN PRINT Too Low!" A$ ="Too Low." X$ =TRANSLATE$ (a$) SAY x$ END IF IF g=x THEN PRINT "You got it in";gs;"guesses!" PRINT "Congratulations!" A$ ="You did it!" X$ =TRANSLATE$ (a$) SAY x$ PRINT PRINT "Want to play again (Y N)"; INPUT y$ y$ =UCASE$ (y$) IF y$ ="Y" THEN GOTO setup! Fy$ o"Y"THEN END END IF GOTO guess • AO Currently, most people purchase their Amiga's from computer
specialty stores. Competition against such stores from either
other local computer specialty stores new to the Amiga scene or
from mail order houses will undoubtedly become fierce in the
time to come (if it hasn’t already!). In the long run competition between vendors who want our money can only help, us, the consuming public. But, is bottom line sticker price the only criteria we should use in choosing who to buy from? Is there room in the cutthroat world of computer retail for "dealer loyalty?" If you are dealing with a computer store you are doing so out of a sense of dealer loyalty even if you do not recognize it. Why buy the Delux Fence Maker from your dealer if you can get five bucks off from the ad in the back of Zorkmid Magazine? "Weil", you say to yourself, “if I have a problem with my Fence Maker I can go to ol'Bopka who'll give me my hard earned fazoolas back or will exchange my copy of the Fence Maker for another one on the spot”. This is an example of dealer loyalty. Knowingly paying a little extra for a product to ensure that someone acting in good faith will stand behind the product you purchased. The basis of dealer loyalty is the interhuman loyalty you build between yourself and another individual. Better dealers often encourage their sales people to deal with specific customers on a lasting one-to-one basis. The resulting relationship is profitable for both consumer and vendor since you get a sales person who understands your needs and the dealer gets faster and more reliable sales for exactly the same reason. By purchasing computer products through a flesh and blood dealer, you have the opportunity to asses the worth of a product before you buy. Also, before you spend your money, you have access to a local expert, your steady sales person. After you purchase a product you have a recourse against faulty or less than useful products in the form of the dealership at which you made the purchase. To help your local dealership work for you, there are several things you can do: (1) If you do not already deal with one specific sales person,
try to establish such a one-on-one liason. Dealing with the
same person on a regular basis is the key to a dealership's
ability to match your needs 1o products. (2) Communicate your needs fully to your steady sales person.
Take the time to explain to them your needs, what your
expectations are, and how you see your Amiga personal
computer fitting in. (3) If you become aware of products you are interested in that
your focal dealership does not have, don't keep it a secret.
Consumers often get a headstart on new products over sales
organizations. Do not assume a policy decision has been made
somewhere to not carry a product when what is more likely the
case, the dealership just is not aware of the new product. (4) Provide your sales person with feed back. Were you happy with
the product you were sold? An answer of yes or no is useful
information to your sales person. Someone else's bad reaction to a product may influence your sales person to not suggest that product for your use. And, your glowing report of another product may help steer others to the same product. A GREAT COMPUTER... OUTSTANDING SOFTWARE......AND INCREDIBLE PRICES! There may not be a better personal computer than the Commodore Amiga. But no computer can be better than the software that runs on it. Micro-Systems Software, makers of OnLine! And BBS-FC for the Amiga, proudly announce another link in their chain of value-packed software. Analyze! Is a powerful electronic spreadsheet program. Essentially, this program is a full-screen calculator where you can organize your data into rows and columns. These rows and columns can be analyzed with simple mathematics or complicated formulas. Rows and columns can be duplicated to avoid retyping. Both data and formulas can be edited with only a few keystrokes. From home budgets and check registers to financial modeling and your company's general ledger, all manner of bookkeeping tasks become faster and easier with Analyze! An outstanding value at only $ 99! On Line! Combines features and convenience in a high quality package that will meet al! Your telecommunications needs. With On Line!, you can use your Amiga as a window to the world of information that is just on the other side of your telephone. You can link up with commercial information services for stock quotes, airline information and reservations, technical databases, and thousands of other business and entertainment tasks. You can also plug into local bulletin board systems (BBS) and discover a new world of Information and software for your computer. Corporate users can use OnLine S to let their Amiga access data stored on the company's mainframe computer. OnLine! Is the finest program of its type available for the Commodore Amiga. You can't lose when you gel "online" with OnLine!. All for a down to earth price of only $ 69! 2400 bps modems!2400bpsmodemsarebreakingthe speed barrier in telecommunications, and Micro-Systems is breaking the price barrier in 2400 bps modems. Transfer files 2 times faster than a 1200 bps modemand 8 times faster than a 300 bps modem. Micro-Systems will sell you a Hayes Smartmodem compatible 2400 bps modem, a special Amiga serial cable, and a copy of OnLine!, all for $ 429. That's right, the modem, the cable, and the software, all you need to begin using your Amiga as a terminal to the world, priced at $ 429! Hundreds less than our competition! Micro-Systems Software, Inc. 4301-18 Oak Circle Boca Raton, FL 33431 (800) 327-8724 National, (305) 391-5077 Florida Ask us about our
Amiga bulletin board program, BBS-PC. The first BBS for Amiga! AMIGA, OnLine!, Analyze!, BBSPC, and Smartmodem are trademarks of Commodore-Amiga, Inc., Micro-Systems Software, Inc., and Hayes Microcomputer Products, Inc, respectively. Local computer specialty dealerships offer significant opportunities to consumers to make better purchasing decisions (especially in the aftermarket of software and addons). Take advantage of ready access to products before you buy to ensure the products meet your needs. However, do not misuse your dealer by consistently "window shopping" at a dealer and then buying mail order. Mail order, of course, has its useful and proper place but should not be used at the explicit expense of your local dealer. To sum up, one of the most capable buying guides available is found within the shop walls of your local Amiga dealer. Make use of the facilities the dealership has to offer by establishing a personal rapport with a specific sales person (or small group of sales people). Get to know them and, certainly, let them get to know you. It has been said in the retail trade that the best customer is the repeat customer. While your local dealership may not be superior to mail order on the basis of price, the interhuman qualities of service and support are often far more valuable. It is upon what transpires between the sales person and you that the dealership rests its efforts to make you a repeat customer. Avail yourself! Due to the size of my Scrimper article for this month's Amazing Computing™ and the shortness of life, this month's Miga-Mania will be short! User Group News 3 Champaign County Amiga User's Group The CCAUG meets the first Tuesday of each month at 7 p.m. in Urbana Illinois. Contact: Wayne Hamilton 907 West Nevada Urbana II, 61801 or Russ Jacobson 402 McArthur Drive Urbana, IL 61801 Wayne can be reached during the day at (217) 333 8703 while Russ can be reached (also during the day) at (217)344 1481. These numbers are where these guys work so be nice! Keep those cards and letters cornin'! See you next month with more Miga-Manial — AC-SYMPHONY MUSIC LIBRARY the library contains over 800 four
voice stereo music pieces to turn m dr Vour AMIGA into a
sophisticated Jukebox providing you with over 30 J 1 hours of
music. Turn your AMIGA into an incredible music machine. * Over 800 masterpieces in entire library. ‘ Over 100 songs in each volume. Not just single note music, but 4 full voice arrangements ’ F.ach volume contains over 3 hours of music. * Stereo, Mono, and MIDI output simultaneously. Vou may specify sound of each of the voices. Over 30 hours of music in entire library. User selectable tempo. Selections may be played thru any MIDI synthesizer using the MIDI CONNECTION (sold separately). User selectable key (transposition). Includes Jukebox program to allow you to: 1f Select all pieces and sit back to hours of uninterrupted music. 2) Select the order you wish the pieces to be played. 3) Select the number of times you wish each piece to be played. SYMPHONY LIBRARY Vol 1 Music from Stage, Screen & TV Pop Music from the 50's, 60's, & 70's Old tune Favorites Classical Christmas (popular Ik traditional) Patriotic Polka Party SYMPHONY LIBRARY Vol 2 Music Potpourri Barbershop Quartette Religious Music Hits of the Bo's Variety THE MIDI CONNECTION SYMPHONY LIBRARY Vol 3 Pop Music from the 4(Js, 50’s, 60’s, 70s Beatles Medley SYMPHONY LIBRARY Vol 4 TV Theme Music Beethoven, Broadway, & Blues Kenny Rodgers Greatest Hits Best of the Beatles Country Classics SYMPHONY LIBRARY Vol 5 Popular Potpourri Polka Party Classical Tribute to Bach Christmas Treasure Surprise! SYMPHONY LIBRARY Vol 6 Nostalgic Richard Rogers Songbook Music From the Movies Pop Music from the 60's, 70's, A 80's SYMPHONY LIBRARY Vol 7 Variety Classical Pop Music from the 30‘s thru 80's Popular Classics A The MIDI CONNECTION is a hardware interface to allow you to connect the AMIGA to any MIDI synthesizer, drum machine, sampler and more. MIDI IN and OUT connectors with cables allow easy installation. The MIDI CONNECTION may be used with our SYMPHONY MUSIC LIBRARY or the MIDI SYMPHONY. THE MIDI SYMPHONY The MIDI SYMPHONY program and the MIDI CONNECTION hardware interface give you the features you need to compose serious music using MIDI equipment. Features include: • Supports up to T6 tracks. • Metronome available for
synchronization. • Tempo may be modified. • Change key (Transposition). • Quantizing to 32nd or 64th. • Playback any or all tracks at any tempo. • Tracks may be deleted, copied, transposed or mixed. COMING SOON • Filter out unwanted channel or type of MIDI data. • 10,000 events per track. • 40,000 events all tracks. • May be used as a sequencer. • Menu driven. • Overdubbing. • User friendly graphics display. • Simple music editing. • Real Time recording and playback. • Playback all or individual tracks. • Track delete, copy, transpose or mix. • Editing SYMPHONY SOUND SAMPLER. This high speech digital
sampler allows you to create and modify sounds. When used
with the SYMPHONY Piano Keyboard, you can turn your AMIGA
into an EnsOniq Mirage. SYMPHONY WRITER. A composition program specifically for developing sheet music. SYMPHONY 61 note Piano Keyboard. This professional quality keyboard transforms your AMIGA into a real synthesizer. CASIO CONNECTION, This program and the 61 note keyboard allows CZ-10I and CZ-1000 owners to use a full size keyboard. AMIGA is A trademark of Commodore-Amiga Inc. Mirage is a trademark of Ensontq Inc.
— Speec l, S, le mJ ifyeect 38W2S5 DEERPATH ROAD BATAVIA, ILLINOIS
60510 (312) 879-6880 We accept CASH, CHECK, COD, VISA and MASTER CARD
orders. Shipping and handling US and Canada. S3.00 Shipping and handling outside the US and Canada...... S5.00 COD charge . S2.00 Illinois residents add S' YK, sales tax. The AMICUS NETWORK by John Foust There is much good news for the AMICUS Network and Amazing Computing magazine. First, the public domain software library has grown. Also, Amazing Computing is now online on the People Link network. If you have a modem for your Amiga, you can join many other Amiga fans in the two Amiga sections of the Commodore Club. The current AMICUS software library is available for downloading in Section 15, plus the software on the Fred Fish disks. As new software arrives, it will be added to the library immediately. If you want just one AMICUS program, there would be no need to order the AMICUS disk, or find it at a user group, since you could get a copy in a few minutes on People Link. The best thing about People Link is the price. Online charges, including packet network costs, are currently $ 4.25 an hour in the evenings, for any baud rate, 300, 1200, or 2400 baud. Compare this to other networks, which might charge as much as $ 15 an hour in the evenings, I have also heard a rumor that People Link is planning to allow uploading of software, to the People Link computers, without charging for the time it takes. So. If you have new public domain software, it would not cost extra to share it with other People Link members. By the time you read this, this change may be in effect. Then again, it might be just a rumor... People Link signup You can get a People Link account for no charge, and signup includes a free hour of online time, to help you get acquainted with the system. Signup is automated. Call 1 (800) 826-8855 with your modem, at any baud rate. If you are in Illinois, call (312) 8229712. The signup will only take a few minutes. It entails giving
your name, address, phone and preferred billing method. A
credit card is best, since your charges will be posted
automatically. Or, you can prepay your account, by check.
If you would just like a free demo account, you can ask for
that, too. In a few days, you should receive a preliminary account number and password. You can use this to log in for the first time. You should get an information packet with instructions for the system, and a list of local access numbers to People Link. In most cities, you can reach People Link with a local call to Tymenet or Telenet. On log in, you can type 'GO 68' to get to one of the Amiga clubs. 'GO 68' brings you to section 14, the original People Link Amiga section. 'GO 680' (note the extra zero) will go to the Amazing Computing section. You can type HELP at any prompt, for more assistance. Public Networks Public electronic networks, such as People Link, CompuServe, the Source and Delphi, are a world unto themselves. They vary in quality and services. For example, CompuServe offers airline reservations and an online Grolier encyclopedia, and stock quotes. Most offer two forms of electronic messaging. One is private, user-to-user mail messaging, and another is messaging in a public context. The public messages are usually grouped into forums or clubs. People Link has a Commodore Club, which has two sections for the Amiga. CompuServe has the AMIGAFORUM, and Commodore itself had a forum, plus the Commodore discussion maintained in the Toronto Pet User Group, TPUG. In a club or forum, you can read the messages from hundreds of network members. Some people never speak up, and add to the discussion, and that's OK. Many people are overwhelmed by the complexity of some of the ongoing discussions. Others, such as developers, find this sort of discussion an excellent way to answer questions quickly. Once,! Needed some information on Amiga Basic, long before it arrived in the version 1.1 upgrade. I needed to know the syntax of the sound commands, for an article that was due.! Posted a message early one morning, and by mid-morning, I got a phone call from someone who had an early copy of the manual. A few minutes later, I got a private mail message, with the answers to my questions. Several months later, I was able to return the favor. This person — another writer himself — needed details of using sprites in C. i had a tutorial on my computer, and I sent a copy of it to him via electronic mail. Online friends One of the more popular attractions on People Link is the PARTYLINE. Similar to CB on CompuServe, PARTYLINE allows People Link users to gather and talk to each other in realtime. Everything you type is echoed to every other user in a line, and viceversa. Each text is prefaced by the "handle" of the speaker, so you can follow the conversation. You handle defaults to your login name, but it can be changed. There are 99 lines available on People Link. PARTYLINE is a stunning experience at first — a dozen people might be holding a conversation at once. Sometimes, it is orderly, but other times, there might be several threads of conversation happening at once. Just introduce yourself, and ask questions. The people there will be happy to help out a novice user. Some lines are dedicated to certain themes. For instance, line 29 pretends to be a bar — when you listen to line 29, don't be surprised to see people ordering Pan Galactic Gargle Blasters, and asking to pass the popcorn. Say "hi" to the innkeeper, who goes by the handle ARIA WIND, and tell her AFTER TOUCH sent you. Public messages Almost all networks allow public and private storage of files, within the computers of the network itself. While private file storage is available, it has little benefit to most people. Public storage of files and documents is more useful. Usually, each club or forum has its own storage areas. Attention: Amiga Developers What A Deal!! If you are an Amiga developer with an Amazing Amiga product, Amazing Computing can help. To assist in the development of other startup companies, PiM Publications and Amazing Computing have offered advertising rates to Amiga developers at ridiculously low rates. Our aim is to create a forum for developers in Amazing Computing. We believe we can help the Amiga market produce good, productive software if new development companies have an opportunity to reach their customers without using all of their resources. Therefore, we have offered advertising rates far below what other publications can offer. And our magazine is seen and read by the people Amiga developers want to reach, Amiga owners and Amiga dealers. Our ridiculously low ad rates are only in effect for a limited time. If you are developing a product for this fast growing market, please take advantage of these rates while we can still offer them. For more information contact: Advertising Sales Amazing Computing PiM Publications, Inc. P. O. Box 869 Fall River, MA 02722 617-679-3109 Amazing
Computing, your Amiga resource. PUBLIC DOMAIN SOFTWARE PiM Publications, Inc. has AMICUS Disks 1 through 8 and Fred Fish Disks 1 through 11 available at special prices The list of Public domain is growing rapidly!! Don't miss the perfect way to expand your Amiga library. These are great tor starting a User group or supporting an existing one. These disks are a must for dealers who want to get there customers "up and running" on their Amigas. Most programs are now icon driven Our Disks include files and tutorials to let you "get into" your Amiga. Everyone is encouraged to distribute this software freely to your friends, members, and customers. Per disk: $ 6.00 to Amazing Computing Subscribers or $ 7.00 to non subscribers (MA Residents add 5% sales tax) If you would like a listing of the current disks and programs, please send $ 1.00 and a self addressed stamped envelope. Make checks payable to: AMICUS Disks Pirn Publications Inc. P. O. Box 869 Fall River, MA 02722 Please allow 4 weeks for
delivery When a member uploads a new program from their own
computer to the network computer, and the file is approved by
the people who oversee the club, the new program will be
visible to ali members. In this way, new public domain programs are distributed. New programs are quickly cross-posted between the many different networks, and filter up from smaller, local bulletin boards. Disclaimer I spend a lot of time on electronic networks, gathering the latest software, and reading and posting public messages to other Amiga users. I subscribe to CompuServe, Delphi and People Link, i cancelled my subscription to the Source, as there wasn't much of interest to me there. But this unabashed plug for People Link is based on two factors. One, it is a nice network, with a good Amiga section. Two, it is cheaper than any other. (Well, three reasons: I'm fond of the place. I have met lots of nice people there.) New AMICUS programs: Disk 5 Disk 5 was not full last month. Since then, the latest IFF description texts and example source code have been added. I got these files days before AIN closed temporarily. (At press time, the developer's online information service, the Amiga Information Network, had just dosed. Negotiations were pending for a Switch to CompuServe.) Disk 5 also contains the files necessary to write your own printer drivers. Disk 6 Disk 6 now contains over two dozen IFF pictures from Deluxe Paint and video digitizers. This disk makes a good demo of the Amiga's video capabilities. Of course, there is a lot of fun in cutting, pasting and rearranging the images with Deluxe Paint — especially the digitized images. Disk 7 Disk 7 is the Digi-View video digitizer demo disk. This has the widely-circulated demo of HAM pictures, plus several IFF format pictures. Hick Wirch has been busy making the AMICUS disks more user-friendly, and accessable from the Workbench, at the click of an icon. All text files, including most C source code, are clickable. This brings up the 'more' program to display the file. IconExec, described below, has made many programs available at the Workbench level. Disk 8 Disk 8 is full of new programs of interest to Amiga Basic users. Amazing Computing author Rick Wirch has converted most of the Abasic programs from AMICUS disk 1 and 2 to Amiga Basic, along with his own contribution from last month's issue, Deluxe Draw. Deluxe Draw demonstrates the power and flexibility of BASIC programs that use these calls. MODULA-2 the successor to Pascal Over a dozen.BMAP files are provided on this disk. These are needed as an interface between Amiga Basic and hundreds of operating system talis. See Rick Winch's article on some elementary graphics calls that use this method, or the source code to Deluxe Draw, from last month’s issue. Other new Amiga Basic programs include a rat-maze program from an issue of Kilobaud, circa 1981. It's amazing how long BASIC programs can kick around. I am still waiting for the real moldy, useless games like CIVIL WAR to get ported to the Amiga. Those have been ported to almost every BASIC-toting computer since the PDP-8. RatMaze is rather unique, for its use of 3-D graphics. It was originally on an Apple. I still have the issue of Kilobaud that carried the source code... It has a program called YoYo, which pretends to be a zero-gravity yo-yo. It tracks your mouse movements, and the little shaded yo-yo goes winging around, as if it was on a rubber band, Another new Amiga Basic program is a version of Clue, like the board game of the same name. This game is menu-driven, a twist on the interface of most games. The executable programs on disk 8 include StarTerm, the first shareware program in the AMICUS library. It is a fully loaded terminal program, including a dialing directory. Shareware is a type of public domain software. Usually, the shareware software carries a notice asking you to contribute to the authors, if you feel the program is useful to you. Sometimes, the authors are nastier to commercial or governmental users of the software, and demand a payment, and threaten to haunt your conscience for the rest of your life if you don’t pay. I came across a shareware program that asked you to contribute to the American Cancer Society, instead of the authors. Shareware is a twist on software marketing. Marketing a program is a large investment, even compared to the programming time and effort. Of course, some shareware programs are not commercial quality. The authors prefer small compensation to no compensation — usually, popular public domain programs only bring popularity to their authors. Browse is a text-viewing program from Louis Mamakos, the author of GfxMem, the graphic memory usage indicator. ¦ CODE statement lor inline assembly code. ¦ Error lister will locate and identify all errors in source code. » FULL interlace to ROM Kernel, Intuition. Workbench and AmigaDos i 32-bit native code implementation with all standard modules, i Supports transcendental functions and real numbers. ¦ Modula-2 is NOT copy protected. ¦ 320-page manual Benchmark* Compile Unk Execute Serve of Eratosthenes 16 32 5. 3 Null Program 14 10 — Added feature* of Modula-2 not found in
Pascal ¦ CASE has an ELSE and may contain • Programs may be broken up into subranges Modules for separate
compilation ¦ Dynamic strings of any size • Multitasking is supported ¦ Machine level interface ¦ Module
version control Bitwise operators ¦ Open array parameters (VAR
ARRAY Direct port and Memory access OF REALS:) Absolute
addressing ¦ Type transfer functions Interrupt structure ¦
Definable scope of object Pascal and Modula-2 source code are
nearly identical. Modula-2 should be thought of as an
enhancement to Pascal (they were both designed by Professor
Niklaus Wirth) Regular Venion: $ 09*95 Developer** Vertlon:
$ 149.95 The developer's version supplies an extra diskette
containing all of the definition module sources, a symbol file
decoder, link and load file disassemblers, a source file cross
references ihe hermit file transfer utility and the source code
to several of the Amiga Modules. Tdf SOFTWARE, INC. 10410 Markison Road ¦ Dallas, Texas 75236 * 1214) 340-4942 Telex1.886442 CompuServe Number: 75026,1331 Browse starts with a menu bar with "DFO:" and "DF1:" as items, if you select a drive, it adds a new menu bar, to the left of the first, with the files and subdirectories of that drive listed as menu items. This continues until you select a file. Browse displays the fife, a page at a time, with the option of paging forward or back. Source code is included. SavelLBM is a program to turn any Amiga screen into an IFF format file, This is handy for capturing appealing demo screens, for example. Currently, only the executable version is here, but the source should foliow soon. Scrimper is Perry Kivolowitz's screen printer, featured in the last issue of Amazing Computing. Source code is included with the executable. ScreenDump and PDScreenDump are two programs that will print the current display to the printer. ScreenDump presents a menu bar, with a Print button, and a button to display information about the authors. PDScreenDump was written by Carolyn Scheppner, of Commodore's tech support group. It allows you to select all the parameters of the screen dump, such as scaling and shading. Scheppner hopes someone wilt "intuitionize" the program, since it is presently guided by straight, C input. KwikCopy is a straightforward disk copy program, that will help rescue failed disks, It copies everything it can, and simply skips blocks that have read errors. AMIGA CUSTOM PRINTER DRIVER:$ 35+S H Create your own printer driver for virtually any printer. • MENU DRIVEN * WORKS THRU PREFERENCES We are world famous for
our selection of Amiga software!_ Call our Amiga BBS at night
or call during store hours to order! We specialize in COMMODORE AND AMIGA COMPUTERS e,0fTWA?f. Dealers Welcome: call for pricing on our printer driver. T1B)S73-5321 3162' i Delaware Ave. Kenmore, N.Y. 14217 & THE PRINTED STOREhauseO Mike Meyer wrote a Workbench clock that Is only as tali as a menu bar, and as wide as five or six characters. Every fifteen seconds, it moves to the front window, and displays the current time. Source code is included. SetAlternate, SetWindow, and IconExec are from John Toebes. SetAlternate exercises a property of icons to have an alternate image when single-clicked. It takes two icons created with IconEd, and merges them into one. For example, you can design two trash can icons, open with a closed lid, and one with the lid open. SetAlternate will merge the two icons together. Then, when the closed can icon is clicked once, the open can icon will appear. Clicking twice invokes the program or opens the window, as before, SetWindow allows programs that do not have icons to run from the Workbench, with a clickable icon. As Toebes explains in the source code, some part of the operating system is failing to set the ToolWindow field in She startup message that gets passed to the starting program. This program works around that, and sets up a window to your specifications. IconExec is used in conjunction with SetWindow. It allows EXECUTE command sequences to be started from the Workbench. You fill in the Tool Types fields you see in the Workbench Info menu item. When the icon is doubleclicked, the elements in the ToolTypes array are Executed one at a time. The 'libdir' program will list the hunks in an object file. Source code is not available at this time, but there are several other programs in the AMICUS library that give examples of disassembling object and load files. The 'disksalv', by Commodore employee Dave Haynie, is a program to help restore disks with bad sectors. It needs two disk drives, though. It tries to read every sector from a disk, and copies them to another, but does not use the bitmaps from the damaged disk, it rebuilds the bitmaps, and writes that to the restored disk. Haynie has promised a bigger and better version in the future. 'Arc' is a widely used file compression program, like 'sq' and 'usq'. By analyzing a file, it can substitute common sequences of bits with a smaller, unique sequence of bits, and compress the file. For text files, 'arc' can achieve 30-40 percent compression, and somewhat less on binary files. 'Arc' can also archive a number of files together in a single file. This file is easier to transmit across modem lines, since the files within can be decompressed to their original sizes, removing the constant hassle of chopping files transmitted wish the Xmodem protocol. 'Arc' is constantly tweaked and updated by its authors. II is a standard archival method in the IBM PC world, and the Amiga version is compatible with the IBM version. The texts on Disk 8 include directions for making your own 5 1 4 disk drive, for use with the IBM emulator. See the current Amazing Computing article for a description of this process in more detail. Some incentive for rolling your own drive has been removed by Commodore's reduction in the price of the 5 1 4 drive, of course. It also includes an explanation of the Guru Meditation numbers, a list of the bugs in Lattice V3.03, methods of allowing quotes in command line arguments, a few preliminary reviews of the MicroForge hard disk drive, and a simple printer-spooler: an EXECUTE file for sending texts to the printer, while you are doing something else. Disk 9 Disk 9 was not full at press time. It has Wombat Terminal, yet another communications program. 'Image', by Randy Manchester, is a program to turn a Deluxe Paint brush file into C source data statements. In the absence of programmer-level art tools for designing gadgets, 'Image' bridges the gap between C and Deluxe Paint. Next issue In the next issue, the COMDEX Spring computer show will be featured here. At last word, Commodore has a display, and planned to fill it with Amiga developers showing their wares. Don Hicks and I should gather a full report of the show. • AC* In the first week of March, Microsoft Corporation hosted
the first international CD ROM conference. This event was widely publicized in both optical media journals and microcomputer magazines. Microsoft CD ROM Conference by Jim O'Keane Microsoft tried to attract industry leaders to this event. Some people called it the Woodstock" of the computer industry. In fad, they advertised the conference with a full-page, color ad in Byte magazine. They succeeded to a degree that no one expected, even Microsoft. Microsoft was expecting five-to six-hundred attendees, and limited the attendance to 800. To their surprise, more than 1000 people turned out to learn if all the press about CD ROMs was true. Sessions for both novices and experts were offered, as well as an exhibition hall with about twenty exhibitors. The sessions discussed important issues such as a standard file structure for CD ROMs and the use of CD ROM data bases. One of the more interesting applications was a portable aircraft navigation computer, with maps on CD ROM. In the exhibition hall, conference attendees could try out a sample CD ROM that was given to each attendee. Microsoft also gave each attendee a large textbook on CD ROMs. The sample CD ROM contained selections from a multimedia encyclopedia. Each page could be displayed on the screen. Certain words were highlighted in the text. If selected with a pointer, these portions of the encyclopedia entry would bring up a related digitized picture. Some entries were animated, or had CD audio to accompany them. It was a very effective demonstration of the possibilities of CD ROMs. Unfortunately, the demo disc requires an IBM AT, with a Hitachi CD ROM drive, an EGA graphics board, Microsoft Windows, and an optional AT&T Tanga display board! For those of you unfamiliar with the above hardware, it would cost about $ 10,000 for the system described. It's too bad they couldn't have used an Amiga, but at the time of development there was no way to control an available CD ROM drive with an Amiga. Microsoft has no plans to release a multimedia encyclopedia, and did not announce any other products using a CD ROM. Many other CD ROM products were demonstrated, including the Grolier CD ROM encyclopedia by Knowledge Set, formerly known as Activenture. Also available was a database from Datext, and a CD ROM drive from RTI. One available CD ROM holds all the programs in the PC-SIG, a national IBM user group. The PC-SIG disc has about 300 megabytes of public domain programs for the IBM PC. Also shown were several SCSI compatible drives by Philips, Sony, Denon, and Sanyo. Most were the same size as full-height 5 1 4" drives. Several manufacturers announced a half-height drive for the IBM PC. It is expected to be available in the fourth quarter of this year. Videotools exhibited their CD Publisher system which allows a would-be CD ROM publisher to use an IBM PC NEW! EXPERT SYSTEM KIT Those of us who get excited about computers have been looking for the application that takes us into the twenty-first century. This is it! Now you can create an expert system that will grow with your Amiga. Would you like a computer system straight out of science fiction sitting in your own home or office? How powerful can it be? As big as your imagination, because you build it the way you want it! We supply the EXPERT SYSTEM driver along with a sample knowledge base. Complete instructions guide you to creating your own application. Experiment with artificial intelligence! The software driver analyzes your data and learns to draw the correct conclusions. Think of the applications! Diagnose circuits, plant and animal diseases. Predict events based on past performance weather, stock market, sports. Build the ultimate science project or develop a commercial application! We will be supporting this kit with a newsletter so you can share knowledge bases, techniques and ideas, PRICE: $ 69.95 plus $ 3 shipping and handling. COD add $ 4. Visa MC orders call 1612) 871-6283. Money orders or checks to: Interactive Analytic Node 2345 West Medicine Lake Drive Minneapolis, Minnesota 55441 based system to simulate a CD ROM, and guide the CD mastering process. This system would greatly reduce time and cost involved in preparing a 550 megabyte database. By far, the most exciting announcements were made by Philips International, one of the major innovators in the optical disc industry, Philips is one of the largest electronics manufacturers in Europe. They produced the first CD ROMs and CD ROM drives. Philips was largely responsible for the initial CD audio standard and the subsequent CD ROM standard. As followers of the optical disc industry had known for several months, Philips had been working on a new standard for storing information on CD ROMs. Much to everyone’s relief, they finally formally announced CD-I. CD-I an acronymn for "CD interactive." This is the new standard for many types of media stored on a CD disc. It supports many types of data, including audio, video, and program code. This chart describes the data formats defined by CD-I. (The audio information listed includes the amount of sound a single CD-I disk can hold, for each type). Audio Digital (CD audio quality stereo) 1 Hour Hifi (FM radio quality stereo) 2 hours MidFi (AM radio quality stereo) 4 hours Speech (Phone quality mono) 16 hours Video Digitized video Lores 384x280 pixels RGB 8 bits or 15 bits Hires 768x560 pixels RGB 8 bits or 15 bits Graphics Animation 4,7 or 8 bits Text Coding Bitmap 120 meg Chars System Font 600 meg Chars Executable Code, within a CD-I player A CD-I player should be based on the 68000, and capable of understanding the system calls from the OS-9 operating system Well, if that looks like a mind-full, it is. During the conference, people thought of more and more uses for a standard like this. Although the graphics resolutions look odd, keep in mind that the height and width include oversoar, the border around your Amiga screen, and that European television has more lines per picture. Most of Europe uses the PAL system, while we use NTSC video definition. Please note the distinction between a CD ROM drive, and a CD-I player. Many computer types will be able to access information on a CD ROM, using the CD-I standard. A CD-I player is a consumer device, a standalone computer, probably without a keyboard as we know it. The standard for CD-I players requires a 68000 based system, which can understand the operating system calls for the OS-9 operating system. OS-9 is an operating system widely used on Tandy Color computers, and other 680xx family processors. If you are wondering where this leaves Amiga users, it can be said in three words — "in the pink!" The Amiga is just what the doctor ordered for developing and using CD-I discs. It has a 68000 processor, digital sound output, and hires graphics. With a version of OS-9 on a KickStart disk, it could be made into a CD-I player. It is rumored that the authors of OS-9 are making an Amiga version of their operating system. Of course, CD-I represents an incredible source of graphics and audio data. Can you imagine an educational game built around a CD-I or CD ROM disc? Don't get excited too soon, since CD-I players aren't expected to be in the stores until the first quarter of 1987, and titles will probably drag behind by another few months. Meanwhile, if you get an SCSI port for your Amiga, it will only be a matter of time before a CD ROM drive will be available. Besides, you can always use the SCSI port to connect one of those archaic, magnetic hard disk drives with a measly 40 Mbytes of storage. About the author: Jim O'Keane is an engineer for em's Optical Recording Project, at the Menominee, Wisconsin plant. He currently is in charge of mastering both CD ROM and CD audio discs. He is a graduate of University of Wisconsin with a BSEE degree, with an emphasis in computer science. Jim has worked with projects ranging from lasography to music software. Readers with an interest in optical media can reach him at: Jim O'Keane 2421 Fryklund Dr. 10 Menomonie, W! 54751 • AC* THE EXPLORER A too! To match your curiosity! Would you like...to scout the inner workings of your Amiga?...a live window onto memory to watch what other tasks are doing?...an on-line memory map to tell you where you are?...to actually see the assembly language code, in human readable form, that exists inside your Amiga?...to step through a piece of code to see what it does?...to capture your own source code and customize it? The EXPLORER has some powerful features that make it a superb extension of your curiosity. Features: display memory and files in Hex and ASCII, memory modify, search, move, fill, display and change registers, disassembly trace, load programs, disassemble to disk. Output to printer or disk file. Powerful commands: loops, text display, realtime RAM view, & more! The EXPLORER puts your sense of wonder in charge! The EXPLORER can be used for serious program development too! As a debug tool the EXPLORER’S command set is compact and efficient. You can execute your commands within loops, creating live displays of RAM or registers while you test your program. You control the display format too, and even display informative messages. No need to waste valuable time typing that patch into memory every time you debug. Simply write a new command to do it for you. After all, what are computers for? When you want to save the contents of RAM or a series of trace steps for future examination, just send them to the printer, or better yet, send them to a disk file! PRICE: $ 49.95 plus $ 3 shipping and handling. COD add $ 4. Visa MC orders call (612) 871-6283. Money orders or checks to: Interactive Analytic Node 2345 West Medicine Lake Drive Minneapolis, Minnesota 55441 For those of you unfamiliar with the technology of CD ROMs, here is a short description of CD ROMs, and how they are made. CD ROM: The New Papyrus? CD ROMs are an offshoot of compact audio discs, which are in turn an offshoot of the videodisc. Videodiscs were first developed in the late 70s. They hold up to 60 minutes of high quality video, per side. They are noted for high quality audio, and are popular in rock and classical music markets. There are three major US video disc factories, as well as some specialty houses. CD audio discs use the same basic technology as the videodiscs. Information is represented as a spiral track of pits on a reflective surface. The pits are detected with a laser beam, and converted back into information. While the videodisc contains an FM modulated video signal, the CD disc contains digitally encoded audio. Audio CD players and discs were introduced in 1982. Up to one hour of music can be put on a CD disc, which only has one usable side. CD discs also have built-in error correction and detection, which can correct error bursts up to 3500 bits long. About eight thousand titles are available for audio CD’s now, and pressing plants cannot keep up with the demand for discs. CD ROMs are an adaptation of CD audio discs. They have an additional layer of error correction, which gives an error rate of one bit in 1013 bits. Up to 550 megabytes of data can be stored on a 12 centimeter disc. Drives were introduced in 1984, and became commercially available in 1985. The CD ROM production process is long, and fraught with pitfalls. The data is first compiled by the publisher, and organized into an easily accessable form. This usually involves making an index. Later, special software is used to find data on the disc, by using the index, which is also stored on the disc, with the data itself. The publisher's data is transfered to 9 track, half-inch computer tape, the standard means of transporting large quantities of data in the mainframe business, and shipped to the CD plant. There, the data is read from the tapes onto large hard disks. The error correction codes and header information is added. The mainframe is connected to a laser beam recorder, where the data is used to modulate a laser beam, to create the series of pits in the master disc surface. The master disc is then coated with aluminum so it can reflect the laser beam. It is checked on an inspection player. After the master is verified as free of mastering errors, it is used to produce stampers. The stampers are negative images of the CD ROM. The stampers are used to mold the CD ROMs from polycarbonate, a strong plastic. Most CD plants use a form of injection molding. The molded Cds are then coated with aluminum and sealed with a protective coating. Then the label information is printed on the disc. All of the above steps are carried out in a class 100 clean room, the same level of air quality needed in integrated circuit manufacturing. • AC* Amiga BBS Numbers: by Richard Rae CIS: 72177,3516
DISCLAIMER: This is merely a compilation of information
appearing on CIS and from other sources. No representations as
to accuracy are expressed or implied. Location Name Phone Number Hours Baud Notes AZ Phoenix Amiga Talk 602-846-3901 24 HOUR 300 CA Los Angeles AmigaBoard 213-478-9788 300 1200 Beta testing BBS Software CA Developers Exchange 408-372-1722 1200 MaxiCorp Board CA THE WELL 415-332-6106 1200 Programmer Network CA San Carlos FANG 415-595-5452 6PM-7AM 300 24 HOUR on weekends CA RSVP 415-659-9169 1200 Fidonet node CA San Francisco WELCHNET 415-664-2811 1200 Fidonet node CA BBS-JC 415-961-7250 24 HOUR 300 1200 2400 Amiga section CA Del Mar Dreamscape 619-755-2863 24 HOUR 300 1200 2400 CA San Clemente VIVID XPRESS 714-493-6094 24 HOUR 300 1200 BBS source available CA Costa Mesa Amiga's Den 714-646-2723 24 HOUR CA Irvine 714-660-1462 CA Amiga Xpress 805-397-4812 24 HOUR 300 1200 CA Ventura VTBBS 805-656-3746 24 HOUR 300 1200 2400 Amiga section CA Santa Barbra Computation 805-967-0895 CO CO Springs SHAMUSST 303-597-7543 24 HOUR 300 1200 Amiga Atari ST board CO Denver A. B. C, 303-693-4735 24 HOUR 300 1200 2400 DE Beagle Nest
302-731-7842 10pm-10am 300 1200 2400 Amiga is section 6 DE
Wilmington PC-NUG Board 302-737-2294 24 HOUR 300 1200 Amiga is
section 21 FL Miami MIAMI AMIGA 305-255-5307 24 HOUR 300 1200
FL Ft. Lauderdale AMIGA MAIL 305-486-7021 9PM-8AM MSS BBS-PC
on Amiga FL 305-737-1590 1200 FL Jacksuvilie CASS Ml AMY
904-733-4515 24 HOUR 1200 Fidonet node IL 312-357-2089 IL
GlenElyn Lattice 312-858-8087 300 1200 2400 Fidonet node IL
Wovsed 200 618-378-2133 5PM-8AM 300 1200 Use "UsemameiGUEST"
KS MEGASTAR 316-251-7417 5PM-6AM 300 1200 MD Baltimore
301-254-8078 24 HOUR 1200 Ml Novi Downld 313-348-4479 24 HOUR
300 1200 348-4477 (Voice) 1st! MO St Louis Systems+ 314-361-1270 24 HOUR MO 816-474-1052 1200 Amiga is section 14 NB 506-357-9660 NC MMS 919-779-6674 24 HOUR 300 1200 2400 Amiga section NC CompTel Cntr 919-832-7282 24 HOUR 300 1200 NE Omaha Wind Dragon 402-291-8053 24 HOUR 300 1200 Fidonet 14 614 NH Laconia Sanctuary 603-524-0136 24 HOUR 300 1200 NJ English ton AMY PALACE 201-446-1424 24 HOUR 300 1200 Amiga, Atari and Mac NY New York AMUSE 212-269-4879 300 1200 2400 Fidonet 107 34 NY 212-534-2858 1AM-6PM NY New York 68000 BBS 212-927-6919 68000 General Board NY Bartwater AMY ADVANTAGE 516-661-4881 300 1200 Amiga Advantage Board NY 5th Generation 716-377-3985 24 HOUR 300 1200 NY MUSICNET 914-442-4006 300 1200 MIDI Board, 375 YR OH Dayton AmigaBoard 513-898-0702 24 HOUR 300 1200 OH Columbus Earthrise 614-868-1100 TN Connection 615-868-7860 24 HOUR 300 1200 IX Dallas Rising Star 214-231-1372 300 1200 2400 Fidonet 124 15. Sect,3 TX Dallas Nomads Nook 817-926-8922 300 UT SaltLake TechniSoft 801-264-8290 24 HOUR 1200 Fidonet 15 464 WA 206-874-6381 24 HOUR 300 1200 Fidonet node WY Black Diamond 307-682-7987 24 HOUR 300 1200 Amazing Computing™ Index of Advertisers Adept Software 34 Metadigm, Inc. 2 Advanced System Design Group 45 Michigan Software Distributors 36 Akron System Development 41 Microsearch 31 Amiga Users' Group 30 Micro-Systems Software, Inc. 52 Byte by Byte CHI M. W. Ruth Co. 30 Cardinal Software 38 PiM Publications Inc. 18,52,55,56 Discovery Software Cll Proffesional Network Services Corp. 12 Eastern Telecom Inc. 7 The Quality Cottage 11 Futureware™Fonts 50 Ronald Peterson 35 Golden Hawk Technology 13 Slipped Disk 46 Harvsoft 14 SoftCircuits 28 interactive Analytic Node 60,61 Software Supermarket 58 JenDay Software 37 SoftWood Company 17 Lakewood Associates 9 Speech Systems 53 Lattice, Inc 5 TDI Software 57 The Memory Location 44 Zoxso 39 COMING NEXT MONTH! In Amazing Computing June News From COMDEX Spring: all the goodies Amazing tutorials: The Amazing C Tutorial Forth The Amazing AmigaBasic™ Tutorial ROOMERS Miga-Mania. The AMICUS™ Network New software and hardware releases for the Amiga™. New Amiga™ public domain software and, as always, a few surprises! IS EVERYTHING YOU EXPECT BECAUSE YOU’RE GOING TO BUY ONLY ONE DISK BACKUP UTILITY FOR YOUR MAKE IT Marauder works on any standard Amiga with 256K of memory and one disk drive. Marauder backs up most copy-protected software titles. Marauder's user interface is ciear-cut. Easy to understand, and easy to use. Marauder's manual is written in plain English without confusing technica! Terms. Marauder insures that your valuable software investment will be protected against theft, loss and accidental erasure. XNSUDEl IS EVERYTHING YOU NEED Marauder takes advantage of Amiga's optional external disk drive and extra RAM if you have them, Maurauder, itself, is not copy protected in any way. Marauder uses Amiga's advanced graphics and processing power to its fullest advantage. Marauder automatically formats your backup disk while copying. Many complicated protection schemes are easily handled by Marauder's parameter-entry mode two numbers is all it takes. Current parameters for all titles will be available FREE to registered users at any time. BEST OF ALL XNSUDEL is AVAILABLE NOW!!! You can get Marauder at the SPECIAL INTRODUCTORY PRICE OF m ONLY $ 39.95 S3 call now (215) 546-1533 (Dealer Inquiries Welcome) 3DISCOVERY VSSOFTWARE 262 South 15th Street • Suite 300 • Philadelphia. PA 19102-3801 WtiteHand. BYTE BY ByfE INTRODUCES WRITE HAND FOR THE AMIGA WRITE HAND is a general word processor and form letter generator that gives you the most features for your dollars. Developed to meet the special needs of small business. WRITE HAND is easy to leant and easy to use. WRITE HAND challenges you to compare the following features dollar-for-dollar, feature-for-feature to those of other word processors on the market today. • Extensive on-line HELP service • Form letter generator • Powerful editing capabilities • Formats documents while you edit • Reviews and merges files while you edit • Moves blocks of text and figures of any size • Provides word wrap, holding and underlining Make WRITE HAND the
tool that moves your business into the productive world of
electronic word processing. Suggested Retail Price: $ 50.00 Call or mail orders to: BYTE bu BYTE. MiruaAtm*. 3736 Bee Cave Rd., Suite 3 Austin, TX 78746 (512) 328-2985 Major credit cards and CODs accepted. Certified
checks and money orders only. BYTE BY BYTE INTRODUCES FINANCIAL PLUS FOR THE AMIGA. FINANCIAL PLUS is the affordable way to put your business at your fingertips. FINANCIAL PLUS is the complete accounting solution with five systems in one: • General Ledger • Accounts Payable • Accounts Receivable • Payroll • Word Processor FINANCIAL PLUS is adaptable. You customize eacli
company according to its size and bookkeeping needs. An easy-to-read, easy-to-leam users guide provides comprehensive instructions for setting up your own books, Plain-English menus are the system "roadmaps" for both die novice;md for the more experienced. Because FINANCIAL PLUS is a totally integrated accounting system, no longer must you purchase individual packages, store entries on separate diskettes, or run confusing transfer programs to obtain complete integration. Suggested Retail Price: $ 295.00 Call or mail orders to: & BYTE bu BYTE.. CORFOIAriO'k 3736 Bee Cave Rd., Suite 3 Austin, TX 78746 (512) 328-2985 Major credit cards and CODs accepted. Certified
checks and money orders only. 1 had to use the V option on 'Ic2', to turn off runtime stack checking, to remove two unresolved externals in the link, xcoyf and main, I linked Astartup. o instead of Lstartup. o. Surprisingly, the Lattice version of this, after StripA, was 1516 bytes. The Manx version, with the same code, was 1760 bytes, The compile times were similar to the results given in the standard I O example. RAM: disk use The compiler uses the RAM: disk effectively, depending on environment variables. The default startup disk is usable right out of the package, and a simple SET statement will shave quite a bit of time from each link. Manx has an interesting feature that can shave off another thirty seconds or so off most compile times. Most often, the ’ include' files for a program do not change over time, it's the program source code that changes most often. For every compile, the compiler has to scan and parse the same old h' files. The Manx compiler can 'precompile' the include files for a program, and write the internal compiler symbol table to disk. Later on, on subsequent compiles, the compiler can read in the pre-parsed symbol table, and load it into the internal tables, and begin the compilation process with a jump on the game. In most Amiga programs that interface to the Intuition and the operating system, the sheer size of the include files is often greater than the source code itself. This feature can save a large proportion of time, compared to the programming effort required. Large programs To compare compile speeds for larger programs, I used the Amigaterm telecommunications program by Michael Mounier. This is roughly 32 K of source. It is one of the dozen or so example programs provided on disk two of the Manx system. The results are posted in Listing A above. What does this ail mean? On the surface, Manx appears to be far superior, at least in terms of compile time and code size. Lattice looks slow and fat. Looking deeper, Lattice clearly suffers from large, fat standard C routines. In the pure AmigaDOS program, Manx and Lattice might come out equal, as in the filter example above. But Manx has smaller library routines, and that can make a difference. Lattice declares a sialic number of array elements for argvQ, and so a not-so-smart programmer might use the extra, unused pointers-to-char elements of the array under Lattice, but the program wouldn't work without modification under Manx. For the sake of this example, assume ’arge' is 3, which means argv[0], argv[1], and argv[2] hold pointers to charades strings. Argv[3] is available to hold another pointer under Lattice, but not under Manx. Compiler-specific functions Also, compilers are often supplied with a large number of compiler-specific functions, and those will always be incompatible. For example, all Lattice compilers include routines for many string manipulation functions, Most are easily written from scratch, upon closer examination. The Lattice names are cryptic, but somewhat regular, since the name of the function serves as a mneumonic to the type of its return value, For example, Lattice has a 'stpchrf)' function, that searches a character string for a given character, and returns a pointer to it, if found. The 'p' in the name says it returns a pointer, the 'st' says it is a string function. The corresponding Manx function is called 'index ()’ — a little more easy to understand, but it doesn't describe the return value. Manx has a set of extended functions, too. Most are similar to Unix system calls, and some enhance the Amiga operating system. One set provides a method for starting new processes in a nicer way than the AmigaDOS functions. Manx has an 'fexecl ()' call that loads and calls another program, and returns its exit code. This capability is lacking in the ExecuteQ AmigaDOS call, which doesn't return the error exit code. Also, ExecuteQ will fragment memory, in its present incarnation. It also loses about fifty bytes of memory every time it is called. Aztec C can use this flexibility in the size of 'inf to an advantage. Sixteen bit operations are smaller and faster on the 68000, and if a program can get along with 16 arithmetic, it can run faster, in a smaller code size. However, if you need 32 bit 'inf arithmetic, you need to link with a different set of system libraries, to include the 32 bit operators. (If you think it is peculiar for this situation to occur, the key to this is the C language definition. It says that 'long' should be no smaller than 'inf, so both compilers are correct in their assignments of 'inf and 'long' to 32 bit types.) The Lattice programmer has to use the ATOM utility to specify CHIP or FAST memory, after compilation and linking. This Is an admitted temporary fix tor Lattice users. ATOM stands for "Amiga Temporary Object Modifier". The ATOM utility massages an object file, so this must be done after every compile and link. So far, few developers are constrained by this, but it is a serious theoretical problem, for future Amiga programs that take advantage of several megabytes of memory, Manual details The manual appears to be missing a chapter on system-specific dependencies. One section of the manual referenced this chapter, as I noticed when I was searching for information on the Aztec implementation of argvj]. The first few pages of the manual are a tutorial, it covers the basics of formatting a disk, and continues with "Think of a disk as a closet where we want to store different sorts of items". Then it explains 'cd'. Why bother including this? Fortunately, it doesn't last long, and the rest of the manual does not retain this attitude. The manual is generally clear, and very explicit in the areas of interest to systems-level programmers. (This reminds me of microprocessor manuals that start with "microprocessors only understand ones and zeroes", and by page 19, its talking about "the sign-extended displacement integer in the low-order eight bits of the extension word.") (Another prime offender is the AmigaDOS Developer's Manual. Its first few pages include whimsical instructions explaining how to write programs on the Amiga. To paraphrase, it says "Write your program, compile it, link it, and load it, and watch it run!" I’m not joking, and I'm not leaving many words out, either. Were they trying to fill space?) The Aztec manual has an extra 'style' chapter. It starts out with obligatory handwaving about the virtues of structured programming, and continues by explaining the difference between '=' and '=='. Yawn, again. Neither experienced or novice programmers need this. A recounting of C programming cherry-pitialis and style suggestions can, and do, fill several books, Novice programmers should not expect a compiler manual to be a tutorial in C, and most heavy-duty programmers are reticent to change their C style. Summary Overall, the Manx Software Systems Aztec C compiler system is aimed directly at the Amiga software market, and it should edge out the Lattice compiler for many developers. Manx code is small and fast, and its compile times are far superbrtothe Lattice compiler,_ 2 fill in the command which in this case is 3 screen's mode was. Information kept in this field include things like'' is this screen interlaced? Is it high res4 etc." 4 only sections of a screen (for example, one window).

Click image to download PDF

Merci pour votre aide à l'agrandissement d'Amigaland.com !

Thanks for you help to extend Amigaland.com !

Information cookies

Les cookies sont des petits fichiers qui sont stockés sur le disque dur de l'utilisateur par votre explorateur lorsque vous vous connectez à un site internet. Les cookies peuvent être utilisés pour stocker des informations relavtives à votre navigation et ne sont pas supposés persister.

Il y a plusieurs types de cookies:

  • Cookies système qui facilitent la navigation de l'utilisateur, ainsi que l'utilisation de diverses options ou services proposés par internet tels que l'identification de la session, l'autorisation d'accès à certaines zones réservées, l'optimisation des commandes, le remplissage des formulaires, l'enregistrement, la sécurité ainsi que l'utilisation de certaines fonctions (videos, rés;seaux sociaux, etc..).
  • Cookies de service qui permettent à l'utilisateur d'accéder aux service en fonction de ses préférences(langue, explorateur, configuration, etc..).
  • Cookies d'analyse qui permettent l'analyse anonyme du comportement de l'utilisateur du site et de mesurer son activité afin de développer un profil de navigation amélioré sur le site.

Ainsi, lorsque vous accédez à notre site, conformément au Réglement Général sur la Protection des Données no 2016/679 du 27 avril 2016 (RGPD), entré en viguer le 25 mai 2018, nous devons vous demander l'autorisation d'utiliser ces cookies, afin d'améliorer notre offre de services. Nous utilisons Google Analytics afin de collecter des informations de statistiques anonymes telles que le nombre de visiteurs de notre site. Les cookies ajoutés par Google Analytics respectent la politique de confidentialités de Google Analytics. Si vous le souhaitez, vous pouvez désactiver les cookies de Google Analytics.

Cependant, veuillez noter que vous pouvez activer ou non les cookies en suivant les instructions données par votre explorateur internet.

Visite depuis
Visite depuis