s

Lattice News See pages 1-3

• New Document Composition Package • Trade Show Drawing Winners

Focus on See pages 3-9

• New Lattice C Soon Spring 1988 • Training Classes Available • Lattice Views Industry Topics • Techical Q & A

Focus on Lattice®News See pages 9-12, 16 • Undocumented Features of Lattice AmigaDOS C , Version 4.01 Lattice To Release New • “Compiler Companion” Available Document Composition Package • Technical Q & A Focus on RPG See pages 12-14

• New Programs Strengthen RPG II Support TM • Technical Q & A n the next few months. Lattice will be releasing HighStyle , our new Document Composition System. The new package is ideal for creating Current Product software manuals, catalogs, or other large, complex documents. It is also Version Numbers well-suited for producing memos and letters, proposals, or any document See page 15 which frequently changes content but rarely changes format.

> HighStyle controls page design through more than 100 straight forward, “English-like” com- mands and functions which are embedded in the Feature HighStyle PageMaker Xerox Ventura document text files or maintained in separate “for- Manual kerning Yes Yes Yes mat” files. Pre-defined formats and designs can be

Automatic paragraph leading Yes Yes Yes inserted into a document as it is being formatted, so the document’s content is kept completely separate Single word underline Yes No Yes from its design. This also ensures that memos, Automatic control of widows Yes No Yes letters, etc. appear exactly the same way each time Automatic creation of tables Yes No No they are printed regardless of who writes them. Automatic numbering of lists Yes No Yes Wayne Nartker, Lattice’s Vice President of Sales Automatic "bullet" points Yes No Yes and Marketing points out that HighStyle’ major Automatic Keyword points Yes No No strengths are its text-handling abilities compared to Automatic tabie of contents Yes No Yes Paste-Up Desktop Publishing Systems. Continued on next page... Automatic indexing Yes No Yes

1 Allows extensive text revision Yes No Yes This chart shows some ofHighStyle s special abilities

not found in other desktop publishing packages. If these Graphics card/display required No Yes Yes features are important to you, call Lattice for more information today.

A Lattice Works Spring 1988

HighStyle columns, pagination, and hyphenation. However, with simple commands, you Trade Show ... Continuedfrom previous page can permanently set or temporarily

change these settings as well as the pro- Drawings Winne i “With HighStyle , it is not necessary to for leading, justi- reformat a design when text is added or gram defaults kerning, deleted from a document. The design of fication and other typesetting factors. any document can be completely altered HighStyle' s power, however, comes e’d like to thank each of you by changing only one or two lines, rath- from its complete programmability. Doc- who stopped by our booth at er than the tedious process of re- uments can contain an unlimited number W the various trade shows formatting the entire document.” of macro commands. You can even Lattice attended last year. We’re always

While HighStyle focuses its power on “nest” macros and conditional com- glad to get the chance to meet our cus- text formatting, it does not neglect mands to reduce complex functions into tomers and find out from you what you graphics capabilities. You can create or single commands. You can also re- want to see in Lattice products. We hope alter graphic symbols with the package’s program all the commands and macros you were able to find out from us more icon editor. Any screen image can be provided in the package to completely about the wide range of products we captured with the “Snapshot” utility and customize your system. Once a docu- offer and what you can expect in coming called into the document as the docu- ment’s design is established, conditional years. ment is being printed. HighStyle will commands insure a consistent appear- As you may remember, at each show, create charts, tables, and graphs in far ance of a frequently used format regard- we were asking you to enter your names less time than any other system we’ve less of the document’s content or length. for drawings to be held for free prod- seen, and it will even generate bar Lattice has been using HighStyle ucts. Winners have already been contact- codes. internally for almost a year now. All our ed. They are: HighStyle will work on almost every new software manuals are being created computer system without requiring hard- using this system. Hewlett-Packard has Info ’87: ware, memory, or also used the product to create the man- SecretDisk II upgrades to work properly. It runs under uals included with their LaserJet print- Matthew Lampell, CPCU DOS 2.1 and above. You do not need a ers. Now, Lattice will begin sharing the Western Union Telegraph Co. mouse or other “pointer device”; a product with others. Based on our exper- One Lake Street graphics card is not required; and iences, we will also offer training Upper Saddle River, NJ 07458 HighStyle works just fine without other classes to help users take full advantage programs such as Windows or GEM. of HighStyle' s substantial features. ( You will need a graphics card to use the The retail price of HighStyle will be mmwmmmzm?/ icon editor $200. The complete package will in- .) Focus on C Unlike many desktop publishing sys- clude a word processor, type font man- tems, HighStyle is very easy to use for a ager, icon editor, screen image “snap- beginner. At its simplest level, anyone shot” processor, screen previewer, and Two New Versior can take the software out of the box and formatter. Also included are several begin creating highly-polished docu- icons, pre-defined forms, and examples. on the Horizon ments in a matter of minutes. Changing HighStyle will be available through the type size and style is as easy as Lattice dealers and distributors world- “ inserting commands as simple as begin wide or directly from Lattice. For further est anyone think that Lattice is largetext ,” “begin smalltext," etc.. information on HighStyle contact losing ground in the Compiler , L C HighStyle assumes automatic control of Lattice Sales at 2500 South Highland battles, we want to reassure you now design elements such as headers, foot- Avenue, Lombard, IL 60148 or call us at that the opposite is true. We have been ers, page numbering, line spacing, (312) 916-1600. devoting a huge amount of R&D into upgrading our current MS-DOS C com-

piler and creating an all new compiler as Lattice Works is published by Lattice, well. Incorporated. We would like to include news from and about users. Please send comments, Within weeks, all registered users of a suggestions, and news stories to our attention. Lattice C Compiler will receive a notice Thank You. in the mail of our latest version, 3.3. The new version of the compiler runs Lattice Works will be sent to all of our under and generates code for both MS- registered customers. Please be sure to DOS and OS/2. In addition, versions of complete and return the registration card the Lattice Screen Editor (LSE) and the enclosed with your purchase. C-SPRITE debugger which also run under both OS/2 as well as MS-DOS are now being bundled with the compiler.

i )

SideTalk AmigaDOS C Development System

Roger Stone Douglas Campbell s Utah Valley Community College Hebco Electronics Inc. 400 Catalpa, #302A 8939 Edwards Road Midvale, UT 84047 Cincinnati, OH 45209 RPG II Development System RPG II Development System Diana Nischan J. Eatherly Programming Supervisor of Systems DRC 11 Grammes Road 1828 L Street, NW Allentown, PA 18103 Washington, DC 20036 AmiExpo, New York: 3X Show, Washington, DC: AmigaDOS C Development System RPG II Development System Harry Lewis, President Kenneth Berlin Blue Bell Design, Inc. American Society for Training & Dev. 524 White Oak Road 1630 Duke Street, Box 1443 Blue Bell, PA 19422 Alexandria, YA 22313 COMDEX/Fall: Based on the attention Lattice

SecretDisk II received at these past shows, we are planning to exhibit at several trade Kyle Keenia shows in 1988. We’ll announce our trade NI Industries show schedule in an upcoming issue of 5215 W. Boyle Avenue Lattice Works and look forward to seeing Los Angeles, CA 90039 you there. Dan Knopoff selects winners from those of you who registered for free product drawings. We look forward to seeing you at our booths again at the trade shows where we will exhibit in 1988.

mode, or you can run the compiler in er; you will be able to obtain this new s ofLattice C OS/2 protected mode to create programs product through the update service that run under MS-DOS. The versions of Continued on next page ... the compiler, LSE and C-SPRITE run under either OS/2 or MS-DOS. A “The new package will “switch” on the compiler determines

Other features of Version 3 . 3 include whether it will generate code for MS- provide a complete compliance with emerging ANSI C stan- DOS, OS/2, or “family mode” programs programming environment dards, improved embedded system sup- which run under both. port, enhancements to the standard consisting of the best tools “We have made a strong commitment libraries, as well as bug fixes and other ” to our C Compiler and C programming available. advances in the compiler. The price also tools,” added Wayne Nartker. “In terms has been improved with this latest ver- of features and value, this version keeps sion’s suggested retail price being low- the Lattice C Compiler even with the ered to $450.00. If you are a registered competition. Then, within just a few user of the Lattice MS-DOS C Compiler, months of releasing Version 3.3, we will you will be able to upgrade for only release an entirely new product based on $75.00. the Lattice C Compiler. We are calling Lattice President, Dave Schmitt this new product Lattice C, Version 4.0.

stated, “This new version provides a When it is released, we will treat it as a

convenient path for a transition from brand new product because it represents

MS-DOS to OS/2. You can use this so many new features that calling it an-

product on an MS-DOS system to create other upgrade won’t do it justice. (Don’t

programs that run under OS/2 protected worry if you have the current C Compil- 3 I product and the better code generation, Lattice C Versions changes one of the most most important . .the new Lattice C Com- page in the new product is the new Source ... Continuedfrom previous piler will prove to everyone Level debugger which will be included that Lattice is in this market Those of you who had the opportunity in the compiler package. We know how like our competitor’s Code to visit Lattice during the COMDEX many of you not only to stay, but to be the View debugger, so we incorporated ” show in November had a chance to pre- best C Compiler available. features into this view portions of this all new C compiler many of Code View’s of our own. If which will be released this summer. product plus added a few Currently completing development, you saw the new debugger at COMDEX, can be debugged Version 4.0’s major new features include you saw how programs source code, assembly an integrated source level debugger, Lat- by displaying both. You can single step by C tice’s own true overlay linker, built-in code or instruction. functions, new keywords, and a new source line or by machine “HUGE” memory model. In addition, Register windows allow you to watch program Version 4.0 offers further compliance CPU registers and flags as the with ANSI standards, improved floating executes. The new debugger also dis- addresses, or point arithmetic, and numerous optimiz- plays values of variables, full set of ations which result in the compiler gen- ranges of memory. Its allow users to erating smaller, faster code. machine level commands debug at the assembly level as well as Dave Schmitt explains, “You know the C source level. how the competition among C language debugger runs in full screen, vendors has been increasing. We are The new multiple window mode or in command many optimizations which include in- convinced that this complete remake of eliminate a number of line mode. It automatically detects a line functions that the Lattice C Compiler will prove to you PC’s video hardware to support all library routines, and more efficient that Lattice is in this market — not only common color and monochrome moni- handling of Large memory model point- t0 stay — but to be the best C Compiler Dual monitor support keeps ers. It also adds new ANSI library func- available.” tors. pro- tions and ANSI pre-processor support. “Lattice will also offer programmers debugger output separate from the feature “With all the changes in this product the best value,” points out Wayne gram output, and a screen swap monitor we have gone to great lengths to retain Nartker. “The new package will provide ensures this separation on single on-line help compatibility with earlier versions of the a complete programming environment systems. It also features function Lattice MS-DOS C Compiler,” said consisting of the best tools available. We with pull-down menus and key will let Dave Schmitt. “In addition, this new will be including our new global opti- commands. A restart command com- version provides a convenient path for a mizer, debugger, an overlay linker that you restart the program with new without exiting the transition from MS-DOS to OS/2. will optionally overlay data, our “” mand line arguments of virtual memory al- Although OS/2 requires changes in the utility, and an enhanced Cross Reference debugger. Its use high way the compiler generates code, Lattice Generator. Plus we are adding our file lows both low memory usage and C will offer source level handling utilities including GREP, DIFF, speed. EXTRACT, BUILD, WC, SPLAT, and The new C Compiler introduces the compatibility.” “In terms of flexibility, features, and FILES. Finally, we are adding the “HUGE” keyword and Huge memory keyword value, our new Version 4.0 Compiler Lattice Screen Editor. Like Lattice C model. Using the “HUGE” pointers to use more effi- puts Lattice C ahead of the competition Version 3.3, the compiler as well as each allows “FAR” techniques which once again,” said Wayne Nartker. “And of the utilities will run under OS/2 and cient code generation you know Lattice goes MS-DOS. result in smaller .EXE files. The Huge as a current user, on to offer superior product support “These are not flimsy or stripped memory model allows programs to data limit without through the Lattice Bulletin Board, down tools that we have just thrown exceed the 64K static keywords. Byte’s BIX network, Lattice Telephone together,” Wayne said. “The Make util- requiring “FAR” or “HUGE” keywords in Version 4.0 Support Hotline, plus its frequent con- ity, overlay linker, and debugger offer Other new replaces tact and notices sent to registered users. features not available in any other include “CHIP” (which In addition, because Lattice C is avail- company’s products. The text editor and Lattice’s previous “CONST” keyword) keywords “CONST” and able on a wide range of systems, you file handling utilities are the same full- and the ANSI allows will find it much easier if you decide to featured products Lattice has offered “VOLATILE.” Using “CONST” certain optimiz- move your applications to other ma- separately in the past. Yet now we are the compiler to perform the chines.” including them with the compiler at no ations while “VOLATILE” prevents optimizations As always, we will notify each of our extra cost. compiler from performing registered users of the procedures to Along with the increased value of the that could be destructive to the application. soon as it is To increase speed and generate small- obtain the new compiler as Watch your mail for notification. 4 er code, the new compiler incorporates available. 2

and Software Development Facilities.

is examined — in- Lattice Offers Training The future of OS/2 cluding the Presentation Manager, for C and OS/ Extended Edition, OS/2 and SAA, and 80386 and future processors. The cost for this one-day seminar is $395.00.

f you are deciding to learn the C The seminars are conducted by Lat- OS/2 Programming is a three-day ses- language; If you will be creating tice’s technical and educational staff. sion that examines the OS/2 architecture Iprograms to run under OS/2; Or if Lattice created the original Lattice C and feature set in detail; the Application you will be responsible for implementing Compiler in 1981, and we have been Program Interface; Programming Design; OS/2 in your company, you can take ad- working with IBM on OS/2 since June and Programming Tools. Approximately vantage of Lattice’s extensive experience 1986 — testing the new operating sys- half of the seminar involves hands-on by attending our C Programming semi- tem and converting the Lattice C Com- work which includes several program- nar or one of our two OS/2 seminars. piler and programming tools. This ex- ming exercises to provide direct The C Programming classes provide perience has been distilled into three experience with the API and other an equivalent of a college level C fast-paced, informative courses designed aspects of OS/2 programming. The cost programming course in four days of to bring programmers and managers for the three-day seminar is $895.00. intense lecture and hands-on training. “up-to-speed” on the C language and Classes are held in Lattice’s training

The course is designed for programmers OS/2 as quickly as possible. facilities in Lombard from 9:00 a.m. un- who wish to learn the C language quick- The C Programming class covers the til 4:00 p.m.. Instructors will remain

ly. Knowledge of C, MS-DOS, or OS/2 difference between C and other lan- available after the seminars each day to

is not required; however a basic knowl- guages, C source file structure, types answer questions or provide individual

edge of data processing is required, and and classes of variables, variable math, consultation. The seminar fee includes a knowledge of other programming lan- flow control, data types, branching, and continental breakfast, catered lunch, a guages would be helpful. arrays. Programming techniques comprehensive seminar workbook, and Our one-day seminar, “OS/2 For Man- examine variable logistics, function as set of OS/2 programmer productivity

agers”, is designed for those of you who calls, function definitions, top-down de- tools. Reservations may be made at any will be introducing OS/2 into your sign, arguments, file I/O, pointers, func- time up to two weeks prior to the businesses as well as for those who must tion pointers, as well as other I/O func- seminar. manage OS/2 product development. The tions. In addition, the classes cover For further information or to register, three-day seminar, “OS/2 Programming” conditional compilations, recursive pro- contact: Education Department, Lattice, gives you an in-depth description of the gramming, structures and unions, and Inc., 2500 South Highland Avenue, OS/2 programming environment. All linked lists. The cost for this four-day Lombard, IL 60148. Telephone (312) Lattice seminars are divided into lecture seminar is $895.00. 916-1600, extension 900. sessions and hands-on workshops. OS/2 For Managers examines the his- tory and evolution of OS/2; how OS/2 Seminar Dates Scheduled at this time are: compares to DOS and ; Session Lattice Point C Pro- OS/2 For OS/2 Pro- gramming Managers gramming Process, Memory, and File management; Inter-process Communication; Dynamic May 3-6 April 28 April 19-21 View Linking; High-performance Human of May 24-27 May 19 May 10-12 June 21-24 June 30 June 14-16 Interfaces; the DOS Compatibility Mode; Questions, Comments & Answers

The following questions and issues have appeared on the Lattice Bulletin Board. If you have any questions on Lattice’s position on an industry issue, please feel to post the question on our Bulletin Board or send the question to Lattice Works.

Null Pointers Q. From: LARRY TYMPANICK I have a problem with Lattice’s defini-

Continued on next page ...

Lattice s training classes give you a fast, efficient way to learn OS/2 and C Programming. Discover new tips and techniques from the experts at Lattice. Call our Education Department today. 5 Lattice Works Spring 1988

at least (void *)0 avoids the undesirable cmp word ptr [bp + ;‘n’ is stored at Lattice Point ofView 4] , 0 situation where certain symbols are [bp + 4]

... Continuedfrom previous page predefined by the compiler and the pro- jz A1

grammer may not have access to that xor ax, ax tion of NULL. SPTR is unnecessary in symbol for their own purposes. jmp A2

my opinion, and I’m not even sure if it Al: A. From: JOHN MEISSEN would work as is on another machine. xor ax, ax (Lattice) Why don’t you just declare NULL as inc ax Prototyping was the original reason (char *)0 ? My interpretation of NULL A2: for defining NULL as 0 or 0L: is that it should not be used as a replace- dec word ptr [bp + 4] According to K&R, it is always ment for int 0. test ax, ax permitted to compare a pointer to jz TEST COND ‘0 ’ C . From: MIKE MILLER the integer constant . Thus, jmp END OF LOOP K&R page 192, paragraph 7.14 states: regardless of the type of pointer a TESTCOND: “However, it is guaranteed that assign- comparison to NULL when NULL

ment of the constant 0 to a pointer will is defined as 0 is always accept- produce a null pointer distinguishable able. from a pointer to any object.” This doesn’t strike me as horribly A. From: CARLOTTA ANSI Draft (10/1/86) states: “A inte- efficient. DECONCILIS (Lattice) gral constant expression with the value Isn’t it possible for the compiler to A NULL pointer is not a pointer 0, or such an expression cast to type generate better code than this? Since ‘n’ which points to a string containing ‘O’, void * is called a null pointer constant. is an integer (i.e. one word), I would 0L, ‘O’. It is a pointer which can be used A NULL is a pointer with a value of expect it to generate this: to signify an invalid pointer — for ex- zero. ample, a pointer which does not point to mov ax, word ptr [bp + 4]

C . From: GLENN DOBRATZ a valid string. dec word ptr [bp + 4] Yes, there is a difference between a For functions such as strtok() and test ax, ax

null pointer and a pointer to a void. But, stptok(), a NULL pointer is returned. jnz TEST COND I think the real question is: “Is a null Does this mean that you can condition a JMP END OF LOOP

pointer to a char different from a null break by saying: if (ptr — = (char *) TEST COND:

pointer to a void?”. ‘0’) ? It does not because by doing so, A purist would probably answer yes, you are testing for a pointer to the null

and I think I would agree. ANSI says character which is not the same as a Perhaps I expect too much! If the code no, however, and right, wrong, or indif- NULL pointer. generation is like this for this simple ferent, they have the last say. Optimized Code fragment, I wonder what it is like for But isn’t that really why #DEFINE other more complex expressions. exists? If you #define NULL and say Generation

that it will be used to represent pointers A. From: TOM PRODEHL Q . From: CHARLES HALL with null values, then does the mecha- (Lattice) I have a question concerning the code nism used in the #define really matter? I It’s always easy to find instances in generation for the Lattice ’C’ compiler. I don’t think so. which a compiler any compiler pro- noticed this one day whilst debugging a — — I think this has digressed from the duces what seems to be less than obvi- function: original question, which was, “Is there a ous code. To look at a fragment of C

int n, cond; better mechanism than SPTR & Co. for source and its translation and say “Why

communicating pointer size in those very didn’t it do it this way” is not fair

few instances where it really does matter because you can spot the obvious solu- whether pointers are 2 bytes long or while (1) tion to an isolated example but the com-

four?” My answer was yes. piler has to process all possible if state-

I proposed #define NULL (void *)0 ments, which means that it has to take a */ as a viable alternative to SPTR. Since if (!n— cond) /* this statement general approach. This means that in even a purist should object to using 0 or break; some cases less efficient code can be 0L for a null pointer, nothing short of generated. To suppose that the problem having a bunch of NULLx’s defined as only gets worse as the expressions get

(char *)0, (int*)0, (long *)0, . . ., complicated is false. The above statement generates the more should do. This is obviously too cumber- Also, it seems a little unreasonable to following code (labels added): some to be really practical, so some suggest that just because some code is

compromise is needed. No definition of legal C it should automatically generate

NULL is going to please everyone, but the most efficient code. Optimizations, when put into a compiler have a cost/ 6 benefit ratio associated; rarely used con- .

structs are the last to be optimized. Division With A. From: JOHN RILEY (Lattice) Perhaps one reason that the Lattice C One answer is to put your source files High Bit Set compiler code generation is so general is in a subdir and do a “LC *” from inside that it is basically a portable compiler. Q. From: JIM LINDSAY that subdir. That way you don’t have to Its original goal was not to be just a Is it true???: “unsigned long a =

type out all those file names. ’ 80x86 compiler. The same basic compil- (unsigned long) b / (unsigned long) ffff er is on the Amiga, Atari ST, and is a A. From: CARL KUCK comes out to be 0??? When I divide by from others to 80x86. So You could also try using a “make” 7fff everything works just fine. What is code generation is abstracted to nearly utility. Make would exec() the passes of going on here? the last step of object file generation. the compiler, without using LC.EXE. A. From: JOHN MEISSEN Realize too that optimizations rest on Ed. — Lattice also offers an excellent (Lattice) ideology as well as science. Differing Make utility, called LMK. The sign extension occurs because the views on levels of concern for aliasing, A* From: JOHN RILEY (Lattice) constant is (by default) of type int, the detection mechanisms for common MS-DOS limits you to a 127 character which is 16-bits on the 8086. You then subexpressions and so on can impact the command line. If you have THAT many — cast= it to a long. The cast operation code generated. Some optimizations can -d options on your command line you propagates the sign bit. OxffffL works be 95% successful and not break the pro- should put those in a .H file. because you are specifying the constant gram but in 5% of the cases, you can to be of type long in the first place. discover that a “bug” goes away when SideTalk on a Hence, no sign bit set. the optimizer is turned off. Network To specify a constant as unsigned you

would say OxffffU. Anyway, I suppose • Can anyone tell me how to run Q you mean the cast is to ‘unsigned long’, Product SideTalk in foreground mode AFTER so why do the sign extension? I suppose installing Novell Netware. Apparently the logic goes: Support the interrupts aren’t compatible. convert to a long A. From: MIKE MILLER convert to unsigned. Questions, Comments & There are a couple of things to look What if you try: Answers at. Most network adapter cards use a x = ((long)((unsigned)Oxffff)); comm interrupt, usually COM2 (IRQ3). The following questions and answers That can usually be changed, but you Memory Address on a 386 are taken from the Lattice Bulletin will also have to change the Novell . From: Board. The Lattice Bulletin Board is Q GARY MCKEE driver to use the different your best source of support for Lattice I am looking for the address of the interrupt. If you are receiving most, but products, because in addition to the 256K of memory that is above the nor- not all of the characters from the comm Lattice staff, many users of Lattice prod- mal 640K memory used by DOS on a port, then you may be getting zapped ucts are also willing and able to provide Compaq 386. because Netware disables interrupts for prompt answers. If you have any ques- long periods of time. A. From: BILL ROPER tions on any Lattice product, please feel Try 1024 Kb (although I haven’t free to write, call, send a message on A. From: JOHN RILEY (Lattice) worked with the machine). The rest of our FAX, or utilize our Bulletin Board. Yes, a lot of network cards use the the space below that should be reserved serial I/O interrupt lines. This can cause Running Out Space on to the BIOS, video, etc. of all sorts of problems with either the net- the Command Line work software, or in your case, SideTalk A. From: GLENN DOBRATZ (or any serial communications program). According to my 386 Tech Ref man- Q . From: GARRY SILVEY ual What you need to do is to try using a the 384K of memory above the 640K Is it possible to specify a file name different comm port instead that DOS uses is located at the high end that contains the command line param- (COM2 of COM1 for example). You of the 16MB 386 address space. If you eters for Ic? I.E. Instead of entering “LC may be able to see which IRQ line is taken by the have the Tech Ref, the information you -s xx yy zz”, can I enter “LC - network. From there you should be able seek is located on pages 3-4. The base filename”, where the file named contains to find a working serial port. address of the 256K that you are the above command line. permitted to use is FAOOOOh (Yes, 4 The reason for this is that I’ve run out A. From: RICK SEGAL zeros). Be forewarned that if you are of space in the command line, and have We have both Novell and SideTalk. using VDISK as distributed by to keep shortening my file names to get When using a Micom card and the COMPAQ, its first preference is to use LC to read the whole command line. It 3c501/3c505 cards, you can’t really run this 256K in what ever space you tell it would be nice to put the command line SideTalk in the foreground with any is available. in multiple lines in a data file, and have degree of luck. You can, however, run Continued on next page . . LC read that file. comm2 and the Novell intelligent card and shell. This seems to work okay. 7 Lattice Works Spring 1988

switch statement is that it generates very Product Support switch (unsigned int) case OxAOOO: efficient code. If you look at the disasm

*/ you will usually see a CMP for bounds ... Continuedfrom previous page /* do something break; case 0xA123: checking and then a JMP to the appro- e.g. /* do something else */ priate statements via a jump table Turning DOS Interrupts Off break; JMP CS:[BX + SOME OTHER OFFSET Q. From: JIM LINDSAY VALUE]; it’s a very efficient call. If switch statement is really huge it We would like to turn off interrupts your generate calls via temporarily (while writing some stuff to may not be possible to table and then indeed you would the screen). I don’t see anything in the default: a jump */ your most likely DOS Technical Reference. Can anyone /* do something completely different be better off putting hits first. either, (a) tell me how to do it, or (b) tell break; Thanks in advance. This implements a memory map for a me it can’t be done? A. From: CARL KUCK 6800 emulator. The implemented I/O A. From: CLIFF SHARP Changing memory models is another are separate cases in the addresses perfor- I don’t know of a standard existing interesting way of improving switch. Would putting the most frequently way to turn off interrupts in Lattice, but mance. When switching from Large to accessed case first help the performance? you could write two functions in assem- Data models, I observed a 25% increase Does anyone have any suggestions as to bly language to turn them off and back in the speed of the program I was work- a faster way? on again. The assembly language in- ing on. Unfortunately, I’m now getting structions you’ll need are CLI (CLear A. From: TOM PRODEHL close to running out of code space, but if Interrupt flag, disabling interrupts) and (Lattice) I can squeak it by, I think staying with D increase. STI (SeT Interrupt flag, enabling them). It depends on how many cases you’re model is worth the speed However, You may want to be careful about and how closely spaced talking A. From: TOM PRODEHL about the amount of time you keep the together they are. (Lattice) interrupts shut off. One option if they are close together Also you might (if you haven’t al- is to define separate functions for each A. From: SCOTT FISHER ready) use the DS model if you can. The case and create an array of functions and If you are writing in assembly, the DS model is a submodel of the D model calculate an index into the array. CLI instruction will turn off ALL inter- that assumes all pointer arithmetic can If there are only a few cases and you rupts. A STI instruction will turn inter- be done using offsets. This will speed up definitely know the order of more rupts back on. It is NOT a good idea to execution and may save some code frequent to least, use nested “if then leave interrupts disabled for any length space, too, since more efficient and few- else’s”. else” “if then pointer of time since it could affect the system er instruction to perform to time clock etc. Also, failing to re- A. From: JOHN MEISSEN arithmetic can be used. If you need enable interrupts upon exiting your (Lattice) perform pointer arithmetic over very routine will generally cause the system The compiler should handle the case large distances, though, it won’t work. to “hang” — requiring a cold start to get evaluation in the most efficient order, A. From: CLIFF SHARP the system operational again. This regardless of how you specify them (note Another way is using more global occurs because the keyboard interface is that ‘efficient’ in this case refers to code variables and fewer passed parameters to actually an interrupt driven procedure. generation). If you have a large number routines. Since they get pushed onto the If you are turning off the DOS inter- of cases, then the order is immaterial stack and a PUSH takes about a year on rupts to prevent “snow” on the screen, since it should generate a branch table an 8088 (three months on an 80286), this is not the method to use. You will that gets indexed by the case value. and since some addressing modes for need to watch the vertical retrace bit in However, if there are only a few cases, direct variable access take fewer clocks the CRT controller. By updating the or the values are very far apart, then it than addressing the stack frame, this can screen during a vertical retrace, no snow will probably generate if-else compari- sometimes pick up the tempo a little. will appear. son type logic. It may re-arrange the

evaluation order on you, so it may or DOS Re-Entrancy Optimizing For Switch may not help. Statements The best bet is to actually code it up, Q . From: NEIL NEWTON compile it, and disassemble it. If it gen- I have been trying to write memory . From: CARL KUCK Q erated if-else type logic, try re-arranging resident utilities. Using DOS functions large program, I have the In a model the order by cut-and-pasting and see if it sometimes messes them up and some- code: following has any effect. times cause no problems. Is there any reasonably good literature/example pro- A. From: DANIEL DOMAN grams that show how to deal with the It often depends on the compiler and re-entrancy problem? the memory model being used but one of the great charms of the C language 8

- A. From: JONATHAN applications do all their disk calls cal flag isn’t worth the cost of the two NIEDFELDT (Lattice) through DOS, but if you happen to be bytes of memory it consumes!) Unfortunately, you can not do ANY running one that doesn’t, the DOS criti-

DOS calls if the DOS CRIT flag is set.

The way DOS works is simple: it uses its OWN stack internally. That means if mmmmmmmmmmwmwm you call a DOS call that uses this stack, Focus on Amiga it will destroy the contents (values) of the old stack (it starts at the beginning each time). That means that DOS will Additional Information on the not be able to return from the first DOS call. Lattice C Compiler Look up int 28h for how to get around DOS CRIT being set constantly.

s a programmer you realize that Q. From: GLENN DOBRATZ no product is ever really fin- Where does DOS return the address of ished. There are always slight this ‘critical flag? Does it also encom- A improvements to make and new features pass the case of knowing if it is safe to to include. At Lattice we are always do disk I/O ? I have been searching, in working on our products, but at some vain, for some way of knowing whether point in time the manuals must go to the or not it is safe to do disk I/O during printer’s. During the time the manuals certain interrupts and have not found are being printed there are usually some one, yet PRINT spooler does it all the changes made to the product. time. So we have included here some sug- Short of intercepting int 15 and a host gestions, hints, and miscellaneous infor- of other things and becoming a mini- mation that was not able to be printed in operating system, how do you know this version of the manual. when it is safe to do disk I/O?

A. From: CLIFF SHARP An Extra Disk for the There’s no distinction, so when the Extra Files flag says it’s okay to do a DOS call, it’s Version 4.0 is now distributed on four okay to do ANY DOS call, even file Amiga diskettes to accommodate all the I/O. I tried this on my last job; one of last minute additions. The Extras direc- the guys was doing something with a Hints for Installation & tory on disk 4 contains several useful TSR that had to update a file every so Operation items from the Lattice BBS including often, and it would die a miserable death ConMan, the console handler used with The compiler package is a completely by the third update. about the He knew this package. self-contained environment. Disk 1 is a flag, but didn’t know about the fact that Disk 4 also contains the following bootable disk that leaves you in the CLI one has to check the WORD, not the additional libraries: environment with the necessary logical

BYTE at the given location; when I names already assigned. Therefore, on a lcnb.lib modified his code to check the word, it floppy disk based system no installation lcmnb.lib insert disk 1 worked, and to my knowledge he’s still is necessary; simply when lcmffpnb.lib using the system prompts you for the Work- the program. Icsnb.lib bench disk after the power-on or ctrl- Icmsnb.lib A. From: UWE ROSS amiga-amiga re-boot sequence (the boot lcmffpsnb.lib Beware, just because DOS thinks it’s procedure will require both disk 1 and amiga.alib — the original amiga.lib safe to do disk I/O doesn’t mean it really disk 2 to complete). (no indexing) is. INT 13h is not re-entrant under all The Compiler is shipped with and Workbench VI. and circumstances either, and there are some These libraries are compiled with the AmigaDOS 2, are necessary only for requires VI. 2 of KickStart. Also, to pro- pieces of software that do their disk I/O -bO option and those programs that can’t be compiled vide the maximum amount of free disk without using DOS, (Norton’s stuff without -bO. They correspond to the librar- space, no fonts or printer drivers are comes to mind). It would behoove all ies shipped with 3.10 except these now shipped with the compiler. After backing who want to do disk I/O in a TSR to trap have indexing. up the disks, copy the appropriate printer int 13 and set a flag when the processor driver from the devs/printers directory on goes there, then clear the flag when it Continued on next page... leaves. If the flag is set, don’t do disk I/O! (Admittedly 99.9% of the time, . v c

erable RAM disk driver can be used to C Compiler Info implement a compiler environment that Product can be recovered if the machine crashes. ... Continuedfrom previous page Support your WorkBench disk to the If you are creating a Terminate and devs/printers directory on disk 1 Stay Resident program by using Workbench (the icon based environ- Following are the most frequently cback.o, you can now tell LC to auto- ment) is not loaded by the boot proce- asked questions concerning the Lattice matically link in cback.o instead of c.o dure. This allows the maximum amount AmigaDOS Compiler. If you have any by using the -t option on LC. For exam- C of memory for program development. If ple to compile popcli you could do: questions on any Lattice product, please you want Workbench, simply type the LC -t -Lcdnv + popsup.a -dTINY = 1 feel free to write, call, send a message command “loadwb” at the CLI prompt. _main.c popcli. on our FAX, or utilize our Bulletin Board.

We suggest that if you will be using How do I use the short integers? the compiler on a single drive system, When using the background task Q. you can keep the the number of disk startup routine cback.o the linker may A. The -w option on LC (and LC1) swaps to a minimum by copying the generate the following error message: is used to tell the compiler to use short source file to ram and compiling it from Error 515: An ALV was generated (16-bit) integers. When you use this there. Of course, the optimum develop- to pointing data symbol option, all integers are passed as 2 bytes ment setup is a 2-megabyte ram expan- This message should be a Warning on the stack and are calculated with the sion. Then you simply copy the compiler message, and should display the symbol short form of the 68000 instructions. executables, library files, and header name XCEXIT. This is a performance increase the files to ram disk (see s/installJid). over The message itself is normal, and is a If you are using a two-drive system, standard long integer default but it does consequence of the method used by you may find that the link process is come with some pitfalls. In particular if cback.o to establish the faster if the destination drive is not the program as a you fail to declare a subroutine that background task. In to same as the drive with the libraries. order generate returns a pointer, it will instead only relocation that rel- Using disk 1 for source files, or using information would be return a 16 bit short which is not large the -o option with the driver program evant to data that might be copied to enough to hold a pointer. Also if you Tc\ can significantly reduce the number another part of memory, the exit code is pass a short integer to a function that of disk seeks performed during linking. assembled in a data section. Normally a expects a long integer or a pointer, then

C program would never reference some- the parameters will not match up. This is Try to use unsigned short integers for thing in a data section as a function. especially nasty when passing NULL be- array subscripting. The compiler will cause exec/types. h #defines NULL as 0. generate in-line hardware multiplies for « The compiler has a couple of features Finally, to assist in debugging with address calculations instead of calls to a to help with the option. Metascope, you can invoke the -w If you use -w function to do long integer multiplies. and fail to declare a routine but then use Although highly optimized, the long ADDSYM option of blink by using the result of a routine as a pointer the integer multiply routine is still over 3 the -La option on LC. compiler will issue warning message times longer than the single in-line number 101 “short multiply instruction. Undocumented value converted to a pointer”. To solve the problem of param- Compiler Options eter mismatches, use the -cf option on Aborting a compile (or any program -ce Disables printing the source line LC1. (see below) created with the default break-character that the error in along handler in was found this version) causes a request- Q» How do I use the -cf option? er to appear allowing the user to contin- with the error message. ue or abort. Under VI. 2 of AmigaDOS -cf Causes the compiler to insure that A« To solve the problem of param- these options may be selected via the prototypes exist for all functions in eter mismatches, the -cf option on LC left- Amiga key in conjunction with ei- the source file. and LC1 will cause the compiler to issue ther the V or the ‘b’ key. Left-Amiga- -c + Disables the compiler warning mes- warning message number 96 “No func- continues, while left-Amiga-b aborts. sage about using structures as pa- tion prototype for function” whenever

rameters in function calls. you call a function without a prototype.

This option is very useful to find bugs in A Recoverable RAM Disk driver from ASDG is available on the Lattice BBS. your program even before you attempt to Copyright restrictions prevent us from run it. In general if you can compile including the RRD with the compiler. with the -cf option and get no warnings, However, we highly recommend you you will not run into parameter take the effort to obtain it. If you have a mismatch errors. large expansion memory then the recov- o

The only potential area of problem (and faster) instructions and there is less windows from workbench. What is comes with functions that take a variable relocation information in the load file. wrong? number of parameters such as forkl, The side effect of this is that ALL A • Your program is requesting forkv, printf, sprintf and fprintf. For data must fit into this one global data standard I/O through _main. Since a these, you simply need to make sure that section. There are 3 exceptions to this background process has to respect you are passing the appropriate param- rule: special rules for its eters. output, you need to 1 . Items destined for chip with the get rid of the default standard I/O set up -c option on LC2 • What is a prototype and how can Q for it. This can be done by recompiling 2. Other modules compiled with the I define them? _main with the -dTINY option as above. -bO option A prototype is a declaration of a func- 3. References to CUSTOM or the Q • When I link my program with tion that tells the compiler what the CIA defines. cback. o, I get error message 515 from types of parameters are. For example You have several ways around this the linker. What is wrong? OpenQ takes a character string and a limitation: A. This is a normal message. The long returning a BPTR and is declared 1. Compile everything with -bO. This diagnostic is there to let you know when as: gives larger code but is the least an attempt is made to call something in troublesome thing to do. BPTR Open(char *, long); the data section. However, cback. o must 2. Put all accesses to the trouble work its magic for XCEXIT by creating We have supplied prototypes for all items into a separate module and a short stub routine in the data section. Amiga functions and the Lattice library compile only that module with -bO When you call exit, exit or XCEXIT, the functions. You need to #include the file (yes you can mix code that has linker eventually resolves your code to for the functions that you are calling. If been compiled with -bl and -bO in this stub in the data section, hence the you are using exec functions, you should the same program) message. # include . For dos 3. Use a level of indirection in the For programs not linked with cback. functions, #include ., declarations to access the problem you should pay attention to the message etc. The Lattice functions are found in: variables. A good example of this as it indicates a potential problem. can be found in POPCLI in the stdlib.h for general functions examples directory for accessing In my very large program, I stdio.h level 2 i/o Q* am custom. This is done as: comparing two function pointers to the iosl.h level 1 i/o same function but they don’t compare dos.h operating system extern struct Custom custom; equal. What is wrong with the compiler? interface functions struct Custom *customptr = string, h string functions &custom; A* There is nothing wrong with the #define custom (*customptr) For your own program, we suggest compiler, BUT because -r is now the default, the compiler uses PC relative either putting prototypes for all functions By doing this, there is no need to addressing for all subroutines. If your at the top of the source file or in a in- change the code at all. code clude file if your program consists of takes the address of a function it • How can I get rid of that will use a 16 bit relative more than one source file. In general it Q PC offset to window when I run from workbench? access the is good practice to have prototypes for function. If the target of the branch is greater than 32K away, then everything as it lets the compiler check A. The window is automatically every time the linker will have to create an ALV you compile your code. They opened by the code for _main when it stub to access the function. also serve as documentation to tell you detects that you ran from workbench. If you pass this address to another function then it what parameters a function takes. This is to allow you to write a program may call through this address without such as "Hello world’ which does a My program used to compile, Q* problem. However IF you attempt to printf to workbench for which there is no but now I get error message #510 from compare the address to another function output console. To get rid of this feature, the linker. What is wrong and how can I address, it MIGHT not be equal you must recompile _main.c (provided because fix it? the linker may have resolved the on disk 3 in the source directory) with addresses to different A.« With the 4.0 release, we have the -dTINY option: stubs. There are changed the default for all data from 3 potential solutions to this LC -dTINY __main.c problem: using the non -b relative addressing to -b

1 . Compile everything with the -rO relative. This means that while before Note that once you do this, you cannot option, (or only those modules that the code used a 32 bit address that was use default standard I/O (printf, puts, fixed up by the Amiga loader take the address of the functions in when your gets, . . .) because it will crash if you question). program ran, we now use a 16 bit value are invoked from workbench. assigned by the linker as an offset from • When I link my program with a global base data register (now A4). Q Continued on next page ... cback, it either crashes or opens up 2 This means that the code can use shorter Lattice Works Spring 1988

1 . Apply the enclosed patches to the Product Support • Because we change the compiler compiler Q default to -b, we elected to provide a set ... Continuedfrom previous page 2. add a #include string. h> to the < of libraries compiled without the option Dhrystones source code. (Note if so that you could write code that does 2. Arrange the modules so that all you had compiled it with -cf you not use the option or even wants to set modules affected are close enough would see the warnings for the up the base pointer. For normal usage that the linker does not create an failure to declare the routines) you will not need these libraries. ALV for the routine in question. 3. compile it with: You can detect an ALV by looking Q« My program worked under 3.10 LC -L -w -v Dhrystones at the cross reference section of the but seems to crash under 4.0. Have I found a compiler linker map for the symbol. If a What this shows is that our compiler problem?

reference appears in parens then it can produce a wide range of code with A# Certainly with a new product it is an ALV created by the linker. varying levels of support and safety. Our is possible, but it is more likely that the 3. CalLa function that does the default is safety and convenience for you new code generated by the compiler has comparison of the two pointers the programmer, yet we give the switch- brought out a latent bug in the program. taking into account ALV’s. Such a es for you to tell the compiler to let you We have found several programs that function would look like: go out on your own. just happened to work under 3.10 but

int compfunc(f 1 f2) , when recompiled under 4.0 failed to run Q • If I #include (an earlier version of is ex- char *fl, f2; I get an undefined DU a good reference to CStringBase from the linker ample) but in all cases compiling with = = if (fl f2) return(l); the -cf option showed up a routine which and my program crashes when I run it. /* Prevent blowing up for odd values */ wasn’t prototyped and caused the prob-

if (((long)fl & 1) ((long)f2 & 1)) return(O); A» proto/cstrings.h has been pro- lem. To be fair, we have found the oppo- vided for the few developers who have a site to be true, programs that didn’t run if (*(short *)fl = = 0x4ef9) fl = *(char copy of the cstrings library provided by (trek73 is **)(fl +2); under 3.10 one example) now This is library that Commodore. a was run under 4.0 without problems. if (*(short *)f2 = = 0x4ef9) f2 = *(char included in earlier versions of the oper- We recommend that you first compile **)(f2 + 2); ating system but are no longer distribut- -cf return (fl = — f2); your program with the option and ed. If you don’t know that you have it eliminate all messages first. This hope- You can then code: and why you have it then you don’t need fully will eliminate any bugs. If your proto/cstrings.h. The compiler libraries problem still persists, feel free to contact if(compfunc(pl, p2)) provide all the necessary string functions Lattice Technical support. As you can where you would have previously for normal C programs; cstrings is sim- see, we are serious about supporting and coded ply another flavor of handling strings. fixing any problems in the product and = will be more than happy to help out. if(pl = p2) Q • What are all these libraries on disk 4 with the ‘nb’ in the name? When you wish to compare the two function pointers.

Q. You advertised 1294 Dhrystones in the ads, but I can only get 900 (or mmmmmmmmmmmmmm 980). What gives? Focus on RPG A« Several things are going on. The other two important things to note are Two New Programs Strengthen that the Dhrystones fail to #include < string. h> even through it uses string RPG II Product Line functions. The other is that we compiled the Dhrystones with the -w and -v option to use the same options that our he RPG II compiler and plications on the PCs. Therefore we are competitor had been advertising with. To utilities are top selling taking steps to ensure that we have a get the you need to: 1294, products at Lattice,” said constantly-improving product available Wayne Nartker. “We expect this to con- to users from a growing number of tinue as PCs are incorporated into 3X outlets.” shops at an increasing rate. Our PC- Currently Lattice is finalizing an based compiler offers a very cost- “Authorized Reseller Program” designed efficient way for these companies to to increase support for consultants, recover the 3X system’s resources by \ARs and dealers who distribute the recompiling and running stand-alone ap- product and provide the first level of consultant or dealer before calling single task environment, the program support to end users. Lattice.” development cycle is greatly reduced,” John Robinson will administer the In addition to creating a reseller said Hansen. “Whether your programs

new RPG II reseller program which program, Lattice is also accelerating will be run on a System 3X or a PC, you offers substantial discounts and incen- RPG II product development. will notice an increase in your efficiency tives to resellers of the RPG II product Robert Hansen, Lattice Vice President by writing, compiling and testing the

line. There is a good chance many of of Engineering, has expanded the RPG programs on the PC.”

you already know John. He joined us in II product development staff. And he is For information on the Lattice RPG II November 1987 — bringing with him committed to transferring many of the Development System or information on more than seven years’ experience user requests received by the technical becoming an authorized reseller, call us providing VAR and corporate sales support group into product enhance- at (312) 916-1600 or send your request support as well as customer support. ments. According to Hansen, “The next to: John Robinson, Lattice, Inc., 2500 Before coming to Lattice, he worked for release will support color monitors, key South Highland Avenue, Lombard, IL companies including First Computer mapping, and improved network capa- 60148.

Corporation, and ComputerLand. bilities. We are currently working on adding a DFU (Data File Utility), an OCL processor, and an OS/2 version. We will also continue to examine language extensions for programming a PC with features not available on a 3X system.” Our current version of the compiler is

RPG II compatible with System 36, Ver- sion 5. We also offer a complete pro- gramming environment consisting of the

RPG II Compiler, Source Entry Utility, Screen Design Aid, and Sort/Merge Util-

ity. Unlike other PC-based RPG II com-

pilers, there is no run-time system or license required for programs created

with the Lattice RPG II compiler. “When our editing and design utilities are combined with a PC’s single user,

John Robinson brings to Lattice the experience and qualifications to help you take advantage of Lattice s VAR Support "... program. Call him today for complete whether your programs details. will run on a 3X System or a PC, you’ll notice an increase Under the new program, when you in your efficiency by writing, become a registered reseller, you receive compiling, and testing your our standard discount on all Lattice RPG II products plus additional discounts programs on the PC...” based on your quarterly sales volume. You can also take advantage of Lattice’s 30-day credit policy and Lattice’s 30-day money-back guarantee for your custom-

ers. Other proposed terms of the agree- ment include free demo units, lead referral from Lattice’s extensive adver- tising schedule, and free sales literature. “Lattice will continue to offer techni-

cal support for the products,” said Robinson. “However, this program

makes it easier for users to obtain pre-sales support from a knowledgeable consultant or VAR. In addition, most end-users are more comfortable obtain- ing the front-line support from a nearby r 13 Lattice Works Spring 1988

Product Q. SEU automatically compresses

my source files. How can I keep files , Support from being saved in a compressed mode?

A • When you go to save your source Following are some frequently asked file with the SAVE command (F3), the questions concerning the Lattice RPG II Lattice SEU will automatically convert products. If you have any questions on multiple blank spaces into tab characters any Lattice product, please feel free to to save disk space. You can keep this write, call, send a message on our FAX, from happening by adding a “/n” option or utilize our Bulletin Board. to your SAVE command. All spaces will be saved as blanks and you will have a

j standard ASCII file without tabs. See page 3-14 in your SEU manual for more information.

Q • How do I specify packed deci- mal data with the ICREAT utility?

A* Before answering this specific

question about ICREAT, first it is neces- sary to clear up some confusion about The value in specific header informa-

ICREAT and the building of index files. tion is for dBASE III or the ISHOW or

Index files can be built through RPG INDEX utility. For example, with spe- Output specifications or by using the cific header information you can build Lattice Sort/Merge utility ICREAT. See alternate indexes with the INDEX utility. the example source INIT.RPG on disk 3 Therefore, to answer the specific of your RPG compiler for more informa- question on building an index with pack tion on using an RPG program to build data, the only thing you need to specify

index files. that affects the file is the actual data or

The Lattice index file structure is field length in the file record. For exam- based on the dBASE III file standard. ple, if the data is contained in 3 bytes on There are two files that make up the the record, specify the field length in

index file - a file that contains the data ICREAT as 3. The field type and deci-

records and has the file extension .DBF mal position will not matter.

and a file that contains the keys and has NOTE: While there is no difference in

the file extension .NDX. file structure compatibility between Lat- III there Each file starts with a header record. tice RPG programs and dBASE ,

This record is used by dBASE III and is the potential for data incompatibili- the Lattice ISAM File Utilities and con- ties. dBASE III can not read packed tains information about the fields and decimal or binary data.

data in the file. The difference between building an

index file with an RPG program and

ICREAT is in the header record. An RPG program will build an index file with generic field information, while ICREAT allows you to build an index

file with specific field information. When using an index file in an RPG program, the only header information

that affects the program is the record

length and key specifications - length and type. The number of fields, specific names, field types, and decimal position information in the header record are merely extra documentation.

r Current Product Version Numbers

Software for the IBM PC and Compatibles Version

Lattice MS-DOS C Compiler 3.22 This list is included to keep you Lattice OS/2 C Compiler Upgrade 5.00.07 informed of our current product version C Cross Reference Generator (CXREF) 1.03 numbers. Refer to the history portion of C-FOOD Smorgasbord™ 3.20 your Lattice Update Card to determine if Code Sifter 1.20 your product has versions. C-SPRITE™ Debugger .2.02 changed Curses Screen Library 1.05 dBC III™ Library for Lattice C 2.00 dBC III™ Plus for Lattice C 1.01 Lattice Make Utility (LMK™) 2.20 Lattice Screen Editor (LSE™) 1.00 PANEL Plus Forms Manager 1.10 Scientific Subroutine Package for PC’s (SSP/PC) 1.10 HighStyle 1.00 SecretDisk® II 1.00 SideTalk 1.00 Text Management Utilities (TMU™) 2.10

RPG Software for the IBM PC and Compatibles Version

Lattice RPG II Compiler 2.01 Lattice Sort/Merge (LSM™) 2.00 Screen Design Aid (SDA) 2.01 Source Entry Utility (SEU) 2.00

C Cross Compilers for MS-DOS Targets Version

Lattice Apollo to MS-DOS C Cross Compiler 3.11 Lattice Pyramid to MS-DOS C Cross Compiler 3.20 Lattice SUN to MS-DOS C Cross Compiler 3.11 Lattice VAX/BSD to MS-DOS C Cross Compiler 3.11 Lattice VAX/SYS V to MS-DOS C Cross Compiler 3.11 Lattice VAX/VMS to MS-DOS C Cross Compiler 3.24 Plink86plus Cross Linker 2.12

C Cross Compilers for Other than MS-DOS Targets Version

Lattice MS-DOS to AmigaDOS C Cross Compiler 3.10 Lattice MS-DOS to NEC 78312/78310 Cross Development System 1.00 Lattice MS-DOS to 68000 C Cross Compiler 3.04 Lattice MS-DOS to Z80 C Cross Compiler 3.04

Software for the AMIGA Version

Lattice AmigaDOS C Compiler 4.01 dBC III™ Library 2.00 Lattice Make Utility (LMK™) 1.00 Lattice Screen Editor (LSE™) 1.10 MacLibrary™ 1.01 PANEL Forms Manager 6.20 Text Management Utilities (TMU™) 1.01 Unicalc® Spreadsheet 1.10

Software for the Atari Version

Lattice Atari C Compiler 3.04

15 Lattice Works Spring 1988 Compiler Companion Now Offered

f you do any programming on your MODULA-2, FORTRAN, PASCAL, IAmiga, we’re sure you’ll appreciate and ASSEMBLER programmers as well our new Compiler Companion which as C programmers will benefit from this consists of ten proven utilities designed product. to enhance your productivity. “You may recognize that the programs The Compiler Companion features in the Compiler Companion replace the EXTRACT and BUILD, which extract CXREF, LMK and Text Management file names from a directory and build a Utilities that we sold separately in the command file from the list; CXREF, past,” continued Wayne. “However, we which generates a cross-reference listing have re-compiled them using Version 4.0 of C language source files; DIFF, which of our AmigaDOS C Compiler so they compares files and reports the differ- require less memory and execute much ences; FILES, which locates files by faster. In addition, we have created a specified attributes; GREP, which match- single new manual that covers each es character string patterns within a file; utility in detail. And at $100.00, the

LMK, the Lattice Make Utility which Compiler Companion is substantially automates the management of files based lower than purchasing the individual on dependencies and rules; SPLAT, products.” which searches and replaces within one You can get the Compiler Companion

or more files; TOUCH, which updates from dealers and distributors worldwide the date and time stamps of individual or directly from Lattice. If you want files; and WC, which counts the number additional information, call our sales of words within a file. The price for all department at (312) 916-1600. this is only $100.00.

“This collection of utilities provides a complete programming environment for the Amiga regardless of the program- ming language used,” graid Wayne Nartker. “All the utilities but CXREF are totally independent of the programming language used. This means that BASIC,

BULK RATE U.S. Postage PAID Lattice Glen Ellyn, IL

Lattice, Incorporated Permit No. 597 2500 South Highland Avenue Lombard, Illinois 60148

Subsidiary of SAS Institute Inc.

i n e o d o r H j 1 s n n

w T O W f r e d e r c k s b u r a 4 1 3

\ ft n "f n "? a T 'X / H P P v Return Address Requested

;