LnSOS BOOT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!) OMNIS 3 - Tech Note #3 Paging Through Multiple Screens (Entry Formats) We found that our 'flat file' database, with a set of two screens reserved for entering & retrieving data, would not respond to the "ESC >" and "ESC <" commands for moving,OMNIS.TECH.8 "C D,OMNIS.TECH.9%? C D)PRINT.ALL kC-READ.ME.FIRSTLpC D %SEG.T ^jCŸ/ DISKNAME.DATDD<C D,OMNIS.TECH.2R C D ,OMNIS.TECH.39CD ,OMNIS.TECH.4CD,OMNIS.TECH.5:CD ,OMNIS.TECH.6CD ,OMNIS.TECH.7yCDIII.INF.15u' *MENU.MAKER * |l,OMNIS.TECH.1LjC D -OMNIS.TECH.10,C D-OMNIS.TECH.110C D-OMNIS.TECH.125C D-OMNIS.TECH.13: >dLԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@L to the next and previous screens. In addition we found that after entering the last value on screen 1 we did not automatically go on to the first field of screen 2, as we would have liked. It appeared that we would have to constantly use the G(o) umeric value which appears in the lower left corner of the screen. This is a mystery to me; perhaps its a reference to available memory or some such; let me know if you have further thoughts. -da ces. (Handy enough that we imbedded it as a principle function of the Cut & Paste /// module of our Power Keys program; this allows such a screen dump from within any Apple /// program. In addition a cntl-x command causes a display of a n OMNIS 3 - Tech Note #4 Screen Dump Command We have found that the cntl-S command (e.g. press the Control and "S" keys together) will cause a copy of the current text screen to be sent to the printer device. Very handy in some circumstane. -da f course, by the time you work up to such a level of complexity you will have most likely defined a set of your own menus with the G command imbedded within command strings. s then appropriate. Of course, by the time you work up to such a level of complexity you will have most likely defined a set of your own menus with the G command imbedded within command strings. -da en sets (e.g. three screens for Update Individual Transaction and two others for Post to Ledger, etc). You would typically not wish to move automatically between the entry formats for such distinct functions ant the required G(o) commands ihe 12 screen/format limit0 by mixing these values (e.g. 1=Y,2=N,3=Y,4=N,5=N,6=Y defines three sets with, respectively, 2, 3, and 1 screens each. The use of multiple primary screens should be reserved for identifying completely separate scre1 with a PRIMARY=NO for following screen(s) effectively defines that set of screens as a multi page screen for data entry & retrieval; exactly what we wanted in this case. It seems likely that multiple sets of screens can be defined (up to t command to move between them (e.g. G1, G2). Turns out thats not necessary at all. If you define the second screen (and any later ones you have) as a NON-PRIMARY screen, the page-through function works fine. So a PRIMARY=YES for screen -da / program; call for details). In addition a cntl-x command causes a display of a numeric value which appears in the lower left corner of the screen. This is a mystery to me; perhaps its a reference to available memory or some such; le -da e actual change can take some time to process against a large database and, as happened to us in the situation noted in Note #5, an incorrect or mis-understood format or formula can "mass strange" yoiur database. Inst OMNIS 3 - Tech Note #6 Testing Search & Mass Change Formats Its really not a very good idea to define the entire automatically repeating Mass Change command and let it loose on your database without some testing first. Th nce this is NOT TRUE for the record, OMNIS sets FLAG to its boolean value for NOT-TRUE, zero. These boolean truth values using 0=false and 1=true can be very useful in defining search formulas and update calculations, but not for this rtype of casease you would enter COST * 1.07 for the Formula part. WHAT is happening in the erroneous case is that OMNIS is finding the records with FLAG=x based on the search then setting FLAG to the evaluation of the formula FLAG=' ' for that record; siicit in the naming of the FLAG field as a calculated field. SO... the actual entry next to 'Formula :' in this case should be simply ' ' (e.g. space in single quotes). IF you wanted to do a calculation like COST = COST * 1.07 for a 7% cost incrted records all have FLAG changed to 0 (e.g. zero)... WELL... whats happening is that we are putting the full formula, left and right sides, in the spot for "formula" which should only hold the right side of the formula; the 'FLAG =' part is impl ' ' (i.e. space) using a search format for all FLAGs with value 'x'. We went ahead and defined the transparent screen format described in Tech Note #2 with the formula for FLAG (attribute I+) as follows : FLAG = ' ' We found that the selec OMNIS 3 - Tech Note #5 A Note on Formulas Just a note on an easily missed issue of defining OMNIS formulas which hung us up for 2 or 3 hours. We wanted to do a mass change on a field (see tech note #2) named FLAG changing all values toead you should set up a dummy record at the beginning of our database (do this when you enter your first record) or alter an early record so it will (hopefully) get a hit on the proposed Search Format. Now, instead of using the R(epea OMNIS 3 - Tech Note #8 Inserting Lines & Characters This one may well be documented in the manual but I haven't found it yet (and that sort of situation is the type that led to this series of notes !) If you are working with one of the OMNIS scre 1. Current Open Orders 2. Monthly Shipping History 3. ... which will be linked to execute the report formats R.COO and R.MSH. More on this as we experiment with it. -da .ff rt formats R.COO and R.MSH. More on this as we experiment with it. -da formats and tie them into a menu that we will build which includes meaningful menu lines. So the menu will have entries like : port formats and tie them into a menu that we will build which includes meaningful menu lines. So the menu will have entries like : 1. Current Open Orders 2. Monthly Shipping History 3. ... which will be linked to execute the repo" ? SOOTXPX just doesn't fit the bill. It seems reasonable to consider combining these two into a solution. Although we haven't done it yet here on our system it seems that the best place to start with menus will be to take the growing list of cryptic ree a need for anyways. The limitation of OMNIS "format" names to 7 characters can be equally intimidating AND annoying; how do you give a meaningful and memorable 7 character name to a Search format that is finding "all open orders from Texas for Product x OMNIS 3 - Tech Note #7 A Good First Use for Menus The very powerful OMNIS facility for User-Defined menus tends to intimidate new users and seems, perhaps, reserved primarily for building the so-called "turnkey" type applications that you might not havOMNIS 3 TECH NOTES PLUS! ss Change menu you have defined with meaningful Menu names for the new MC spec. -da d in the R(epeat command and let it run. Once it has run correctly you may add it to a Mass Change menu you have defined /E/G1 or whatever to force the update, then inspect it. Only when the search format & fomulas appear to be working correctly should you add in the R(epeat command and let it run. Once it has run correctly you may add it to a Mat) command in a command string just manually enter the S(earch command and escape-out if you don't soon match up to the expected record. If you are testing a Mass Change as per Note #2, manually enter the Command string G12en definition functions such as designing an Entry Format or a Report Format you will often find that you need to insert a character or line into an existing "design". Although the M(ove command sequence can be very nice for moving blocks of te!"ithin Main OMNIS puts us in the Select Pascal Programs Catalyst sub-menu so we added OMNIS execution entries to that menu to allow re-entry to, for instance, the Utilities functions. But re-executing OMNIS at this point seems to bypass entit the INTERPRETER PATH to CATALYST/PASCAL, the INITIAL PREFIX to .PROFILE/OMNIS or whatever you are using, and the PROGRAM PATH to .PROFILE/OMNIS/SYSTEM.STARTUP and save the setup. Uncertainties : We find that exiting to the "system" menu from wS3U.CODE SYSTEM.STARTUP SYSTEM.LIBRARY OMNIS3.INFO Rename the file SYSTEM.LIBRARY to SYSTEM.STAR.LIB. We copied the OMNIS3.INFO file to the catalyst boot disk as well. Now edit the Catalyst Menu to contain an entry for OMNIS. Se$&'()yst program selector to be quite straight forward. Using System Utilities create an appropriate subdirectory such as .PROFILE/OMNIS (but see Note #1) and copy the following files to that directory : OMNIS3.CODE OMNI OMNIS 3 - Tech Note #9 Using OMNIS with Catalyst Although we haven't entirely figured out some peculiarities involving 'switching' between OMNIS Main and Utility programs we have otherwise found that OMNIS installation under the CatalVOLUME NAME (/DISKNAME) OR DEVICE NAME (.Dx)"P12);::"80C";a$;:Zb$="CHANGING DISKS"$d=23:=0::"80C";b$;::12).n=12:=20:"MAKE A NEW MENU FOR DISK: ";N$xN$)<2110=N$ :210 I=1L(A$(I),A$))200B$0 WAP /// SIG MENU.MAKER PROGRAM (v. 6.2) =".D1"210: Coldstart (320: Warmstart &*X=11000: TEXT SLOW-DOWN LOOP ,X.1 CHANGE DISK SUBROUTINE23œ202:2200<RFa$=" YOU MAY SELECT YOUR DISK BY ht and left one character and ESC-right arrow and ESC-left arrow move the cursor to the left and right end of the line... so try the same with the TAB/insert command and we find a similar 'magnification' of the effect. Nice. a fear of really messing things up because of an unexpected command function rearing its ugly head. In this case we have developed a clear sense that the ESCape key is generally a 'Power Key' within OMNIS; right and left arrows move the cursor rigt the ESC-TAB sequence will insert a line. It was a double pleasure to discover this since not only is it useful but it demonstrates a reassuring consistency of OMNIS which makes it easier for a new user to anticipate commands and not developxt around on the screen it's a bit of a pain for this simple function. We discovered that the TAB key functions as a character insert; e.g. pressing Tab will move everything on the current line to the right one character. It turns out, additionally, tharely the .D1 accesses which the main execute does (presumably finding and using .D1/OMNIS3.INFO ?). Any thoughts you can pass along on this would help. Additionally we find that setting OMNIS3.CODE as the PROGRAM PATH in catalyst starts up OK but without the main Intro menu. OMNIS seems to use some count of accesses to a file (OMNIS3.INFO) and periodically require the insertion of the original OMNIS disk which has a large 'dummy file' apparently sized and placed on the disk OMNIS 3 - Tech Note #11 Backing Up OMNIS Data Files If you are working with large OMNIS datafiles on a hard disk you will typically find that the "pre-sized" datafiles are cumbersomely large for normal disk/file transfer and backup.16,B) THEN 240 #1, d$="":=10:"80C";d$ ž#1300I=0"I=I+1:#1;A$(I):290,#1 6L=I-1@j=1:same=0 J:SEG=0 Tœ2030^CT<1CT=1cCT>13000Zha$="{,|,~,}; selects; to new disk; J/2)=4:=+1:ۙ=44B$(J);:J=J+1I:1,180,22:2,280,21:2,2380,23:8A$(1000),B$(1000),C%(511),C$(20),name$(20):=10:=0UCA=128:LCA=UCA+32CT=15 IF PREFIX$= PREFIX$+MID$(B$(I), copies externally to the OMNIS program using your current system utilities. The additional effort to partly imbed these functions in OMNIS does not seem worth it. -da e have removed it. In genSUTILS.CODE and OMNIS will, in fact execute it directly; but its really not much different from exiting to Catalyst and re-executing Utilities so we have removed it. In general we recommend that you do all your disk formatting and copying and file +-ions, as well as the main menu for the function just point you to using the Apple /// System Utilities program. We have tried adding the main System Utilities program (SYSTEM.STARTUP from the system utils boot disk) to the main directory as SY OMNIS 3 - Tech Note #10 OMNIS Disk Utilities The OMNIS system for some of the other systems (e.g. Apple ][) includes a number of DISK UTILITIES for formatting, copying disks, etc. The documentation for Apple /// use of these funct#.38<=>?@ess here. -da move from Omnis Main to Omnis Utilities and we recommend that you just exit to Catalyst main menu and re execute OMNIS for the new function until you or we fully understand the process here. ny thoughts ? Generally this is only an issue if you want to move from Omnis Main to Omnis Utilities and we recommend that you just exit to Catalyst main menu and re execute OMNIS for the new function until you or we fully understand the proc in some specific way. Once when we were running off of an executed OMNIS from the hard disk/pascal pgms sub-menu we were prompted for this disk but OMNIS wouldn't find it and it appeared to be looking to the hard disk for that dummy file. A (We work mostly with a file of 1900 blocks - 950K which won't fit on any floppy as a single file). Of course the Backup /// program can be used to backup such oversize files to multiple floppies but it can be a pain in the next to use. If your data /12t is a pain and we will look into means of accomplishing this. Advanced Visicalc is said to be perfectly happy with the OMNIS DIF format as long as it is saved with a file name ending with ".ASCI". This forces the file to be saved as an Asciipeek at our daily-dif (see note #12) backup in 3EZ. Given the 30 field limit of 3EZ database and the other size limits of it and the 3EZ spreadsheet we don't plan too many return visits to 3EZ. Still, the inability to export into the 3EZ spreadsheehe problem is an inflexibility of 3EZ pieces. OMNIS stores its DIF files from a datafile with the field names saved as labels and 3EZ appears unwilling to accept this perfectly reasonable format. Frankly we only discovered this in attempting to 467rom current 3EZ based applications. As it turns out though, 3EZ Pieces is a good deal more finnicky about what it will accept as a DIF file for IMPORT. DIF files produced by OMNIS cannot apparently be read by 3EZ pieces. It appears that t OMNIS 3 - Tech Note #12 OMNIS <--> 3EZ Pieces DIF Interfacing OMNIS seems pefectly content to accept 3EZ Pieces data "IMPORTS" in the DIF file format; many of you who are planning to move from the EZ to the POWerful will be using this to migrate f"BASIC 0":150A$="TEXT 0":150A$="CAT 0":150A$="FONT 0":150A$="FOTO 0":150A$(L),"BLOCKS")510*=27:=19:"FREE MEMORY AVAILABLE: ";=7:=20:"80C";A$(L);$:=5:THPOS=4:I=1:IBOTM=J-1:620Q=:=26:=21:sic; +Q Quits."r12);::"80C";a$;:+w#9,"DISKNAME.DAT":#9;DISKNAME$:#9|d$=DISKNAME$$=23:=0::"80C";d$;::12)201M=3:=14:"This /// SIG Disk is \^ 19";Р,2)", Washington Apple `, Ltd."=4:B$(1)="":B$(2)=""A$=file into multiple 'connected' files carrying the less-used fields in smalled separate files and the backup question (and the potential completeness of a DIF file) may be approached differently. -da the day which is easily stored on a MicroSci 572K floppy. Copying the small library .DL file effectively preserves a backup of the entire application. Of course once we and you get more experienced with OMNIS we will break up that flat u have an inefficient data design with large fixed length character fields which aren't actually used in many records (e.g. 79 character "addl notes" type fields. Our 950K TTT.DD1 file spins out as a 350K DIF file in about 40 minutes at the end offile or files are just simple "flat files", e.g. no connections or subsidiary files, you might consider an alternative approach to backup, to whit: backup out to a DIF or ASCII file. This typically slims down the final file considerably if, like us, yofile instead of the normal Datafie format of OMNIS and is duly noted in the Documentation. -da calc is said to be perfectly happy with the OMNIS DIF format as long as it is saved with a file name e1600 =Q:WW=0A=:A=21A=9&oldprefix$=40A=31410: Control C "aborts" program to Basic(:A=13770: Return Selects a file *DA=27:50: Escape to change disks/FA=324000: back out one directory level 3GA=(80+UCA)A=(80+L8C";"ANY KEY RETURNS TO THE MENU.">G$:::320H: Error Routine 202:U=11:"79C";"BAD PATH ERROR (NO DISK IN DISK DRIVE OR DESIRED FILE NOT FOUND.)"X=11000:X:::210Z a$="{,|,~,}; selects; back 1 leve 1600 &:WW=1:0 :SEG=1;".D1/SEG.F" SEG=1".D1/SEG.G"diskname$=3802  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T READ PASCAL TEXT FILES."04=10:"7M$="NOVEMBER":1750M$="DECEMBER":1750826);"-";M$;" ";Ѡ,2));", ";"19";Р,2);" ";/П,2))=>13П,2))-12;џ,6);:1780$П,2))=0"12";џ,6);:ٟ;$П,2))=>12" PM-":" AM-" 1830WW=1530 =26:=211660,1670,1680,1690,1700,1710,1720,1730,1740^M$="JANUARY":1750hM$="FEBRUARY":1750rM$="MARCH":1750|M$="APRIL":1750M$="MAY":1750M$="JUNE":1750M$="JULY":1750M$="AUGUST":1750M$="SEPTEMBER":1750M$="OCTOBER":1750T 0")2070H540R\A$="RUNNING "+B$(I),16,B)f"79C";A$;:=0pB$(I),16,B) z::SEG=1".D1/SEG.T"t=+B$(I),16,B) yCT=CT+1~240:=24:=0:"@ ..... "DATE.TIME.LINE" ....JM=Ҡ,4,2))BTM1630,1640,1650,0=+IBOTM/2-.5):I=IBOTM:I/2=I/2)I=I-1 œ2120B=B$(I),16)," ")-1 B$(I),"BASIC 0")850B$(I),"TEXT 0")890 B$(I),"CAT 0")1140*B$(I),"FONT 0")18504B$(I),"FOTO 0")1930>B$(I),"PASTXB$(I);v:520: 500THPOS=4:I/2=I/2)I=I-1I=IBOTM THPOS=44:I/2<>I/2)I=I+1I2=-1:I=I-2:IBOTM<30THPOS=44I=IBOTM/2)*2:=+IBOTM/2)-1:ts ! -da or character sets for very stylish reports indeed. If you are really bold you might experiment with sending codes to put your printer into graphics-dot mode (if it has one, of course) and furthers indeed. If you are really bold you might experiment with sending codes to put your printer into graphics-dot mode (if it has one, of course) and further imbed a sequence of codes to define and cause the printing of logos or small graphics in repor9; 80, 96+ and 132+ characters per line in the Hardware Definition section of OMNIS you can imbed sequences of ANY control characters in any report and effectively take advantage of your printers multiple fonts or character sets for very stylish report OMNIS 3 - Tech Note #13 Imbedding Printer Control Characters in Reports Do note the very flexible facility OMNIS offers for imbedding ANY set of control characters in a report. Although you can define three general sequences for reports ofCA)"PRINT.ALL": OA+P 3HA=(81+UCA)A=(81+LCA):::: OA+Q Quits 3IA=(83+LCA)A=(83+UCA)"PRINT.SHOW": OA+S 2JA=(68+LCA)A=(68+UCA)/Screen.Savers/HELLON=THPOS:B$(I);XA<8A>11540bA-7640,660,690,720l:=THPOS:l; "Y"C$<>"y"C$<>"N"C$<>"n"1170*C$="N"C$="n"]_`79C";"PRESS ANY KEY TO HALT LISTING"::202 1020#2,B$(I),16,B)ž#242:::1160Z=1#2;A$:"78A";A$Z=Z+1:Z>1842:::Z=1980*:=23:=0::"79C";"CONTINUE...?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"10 MENU.MAKER TEXT MODULESEG=0"MENU.MAKER"890&*X=11000: TEXT SLOW-DOWN LOOP ,X.1,180,22:2,280,21:2,2380,23:z:A$="LISTING "+B$(I),16,B)$=01:=0::"80C";A$;::12)>=23:=0::"g into different command paths. At this level one begins to see some of the potential power of the Sequence "Command Language" available in OMNIS 3. .ffbranching into different command paths. At this level one begins to see some of the potential power of the Sequence "Command Language" available in OMNIS 3. nd these specs and query the user for responses which cause branchinc reporting and/or audit-trailing could be built into the Entry Sequence and you can link the mass-change spec to other Main files. In addition you can define entire menu systems around these specs and query the user for responses which cause uct Code XYZ in Region 2. These criteria would be build into a Search Format which the Entry Sequence would incorporate with the 'Alter Search', AS command as in : AS mysearch/R/G2/E/G1 It appears that 'hooks' to Report Formats and automatiction using the Menu Format commands. Additional "mass change specs" could reside in the same menu or sub-menu. Selection criteria could be added to any particular mass-change spec. This would allow, for instance, increasing COST by 7% only for Prodre than one free screen. It is a rare application that uses anything approaching the dozen screens available for simple data entry and retrieval. This Entry Sequence may be executed directly or you could build it into a menu as a labelled selereen" and these could take advantage of OMNIS powerful Date, Character string, Numeric, Range-checking and Logical functions as well as temporary numeric and character fields. More than one "mass change spec" could be defined using moall records, e.g. "R/G2/E/G1". This sequence can either be selected as part of a user-built menu or directly executed with the "(C)om - Enter Command Sequence" command. EXTENSIONS : More than one field could be updated by the mass change "scthe transparent screen with invisible field will cause no change in the current display), a complete Edit (E) update of the relevant values (in this case only COST) and a return to screen 1 (G1). Commencing with an (R)epeat command will repeat for ".D1/MENU.MAKER",220 d$="" A$="PRINTING "+B$(I),16,B)=01:=0::"80C";A$;:#3,B$(I),16,B)Z=1#3;b$:"78A";b$Z=Z+1:Z=18:1290 1260 #4,B$(I),16,B)#5,".PRINTER"+ž#4#5;12):::".D1/MENU.MAKER",220(204::"79A";""; 2D=1:F=1 <#4;a$ FD=D+1 P#5;a$ZD=60#5;12)dD=60D=1nF=F+1::d$;::Y=1100:Y x13402  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T R~240:=24:=0:"@ ..... "DATE.TIME.LINE" ....JM=Ҡ,4,2))BTM1630,1640,1650,1660,1670,1680,1690,1700,1710,1720,1730,1740^M$="JANUARY":1750hM$="FEBRUARY":1750rM$="MARCH":1750|M$="APRIL":1750M$="MAY":1750M$=B$(I),"CAT 0")1140*B$(I),"FONT 0")18504B$(I),"FOTO 0")1930>B$(I),"PASTXT 0")2070H540R\A$="RUNNING "+B$(I),16,B)f"79C";A$;:=0pB$(I),16,B) z::SEG=1".D1/SEG.T"t=+B$(I),16,B) yCT=CT+1I=1:I=2I>2=-1:I=I-2:IBOTM<30THPOS=44I=IBOTM/2)*2:=+IBOTM/2)-1:0=+IBOTM/2-.5):I=IBOTM:I/2=I/2)I=I-1 œ2120B=B$(I),16)," ")-1 B$(I),"BASIC 0")850B$(I),"TEXT 0")890 81+LCA):::: RebootN=THPOS:B$(I);XA<8A>11540bA-7640,660,690,720l:=THPOS:B$(I);v:520: 500THPOS=4:I/2=I/2)I=I-1I=IBOTM THPOS=44:I/2<>I/2)I=I+1I13000Zha$="{,|,~,}; selects; to new disk; J/2)=4:=+1:ۙ=44B$(J);:J=J+1I:1,180,22:2,280,21:2,2380,23:8A$(1000),B$(1000),C%(511),C$(20),name$(20):=10:=0UCA=128:LCA=UCA+32CT=15 IF PREFIX$= PREFIX$+MID$(B$(I),1acdefghiOLUME NAME (/DISKNAME) OR DEVICE NAME (.Dx)"P12);::"80C";a$;:Zb$="CHANGING DISKS"$d=23:=0::"80C";b$;::12).n=12:=20:"MAKE A NEW MENU FOR DISK: ";N$xN$)<2110=N$ :210 I=1L(A$(I),A$))200B$(/ WAP /// SIG MENU.MAKER PROGRAM (v. 6.1) =".D1"210: Coldstart (320: Warmstart &*X=11000: TEXT SLOW-DOWN LOOP ,X.1 CHANGE DISK SUBROUTINE23œ202:2200<RFa$=" YOU MAY SELECT YOUR DISK BY VEAD PASCAL TEXT FILES."04=10:"78C";"ANY KEY RETURNS TO THE MENU."!>G$:::".D1/MENU.MAKER",320"JUNE":1750M$="JULY":1750M$="AUGUST":1750M$="SEPTEMBER":1750M$="OCTOBER":1750M$="NOVEMBER":1750M$="DECEMBER":1750826);"-";M$;" ";Ѡ,2));", ";"19";Р,2);" ";/П,2))=>13П,2))-12;џ,6);:1780$П,2))=0"12";џ,6);:ٟ;$П,2))=>12" PM-":" AM-" 1830WW=1530 =26:=21 1600 &:WW=1:0 :SEG=1;".D1/S EG.F" SEG=1".D1/SEG.G"diskname$=3802  CATCH PASCAL TEXT FILES OMNIS 3 TECH NOTES - AS ORIGINALLY COMPILED BY: D A DataSystems 3792 Windover Dr. Hamburg, NY 14075 716-648-2462 (DA Datasystems no longer exists - all its programs were placed2010C$="N"C$="n"200;:=23:=0::"79C";"PRESS ANY KEY TO HALT LISTING": 20002,280,21 DF$(I)=D$+"/DISKNAME.DAT"F$(I)=D$+"/FLASHNAME.DAT"410:ۺ310 PRINTER v 1.0 p$ 900A$="PRINTING"+F$(I):$=01:=0::"80C";A$;::12)F=23:=0::"79C";"PRESS ANY KEY TO HALT PRINTING"::2,280,21 2000*:=23:=0::"79C";"CONTINUE...?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"#1,D$::"Processing directory ";34);D$;34);", please wait."; ž#1880*#1;A$:A$)<48104A$,3,4)<>"TEXT"810>X=X+1:".";HE=15:F$=A$,16,15)RF$,E,1)=" "E=E-1:850\F$(X)=D$+"/"+F$,E)f810p:  Pausež#1740#1;A$:A$)<4710A$,3,4)="TEXT"X=X+1710 :X>YN=P::7);"There are no text files in the ";34);D$;34);" directory." ::I=P::7);"Unable to locate and open ";34);D$;34);" directory." ::IT$=N$,E,1):T$=" "T$=","610XE=E+1:E>N$)610:590bD$=N$,S,E-S)l:v:E>S+1600:D$="": œ770P=3:"Looking for ";34);D$;34);" directory." #1,D$=P3:"Reading from ";34);D$;34);" directory." I>X200300S=1:D=1:B=1570D$=""500 Y=X:S=ED$(D)=D$:640 X=Y440D=D+1:S=E:440D=D-1:X=0F$(X):X=0 J=1D D$=D$(J)790&J0 :œ6303DE=S+1:N$,S,1)=" "N$,S,1)=","S=S+1:580%Njlmnž#2390 ^1000c: h#2;a$ma$rY=1150:Y0wB=B+1: Count the number of lines printed xB=15B=30355yB=60#3;12)zB=60B=1 {#3;a$|360B<=20#3;13)::410#3;12):Z=11000:ZI I=3d: PRINTER V. 1.0 ::=2::"PRINT.ALL v. 1.0":3=4:"Directory Name(s) or return to quit: ";n$N$)=0::"MENU.MAKER"430 X>0260I=11000:I:200: ,I=1X 14000 6#2,F$(I)@#3,".PRINTER" J12405l=ơ):: Routine to back up one directory level.a$=С,l-1) s=a$)a$=a$,s-1)a$,1)="/"5060:s=s-1 5030=a$240( MENU.MAKER 6.10 * Thanks to C.M.Davidson for his help!NOT FOUND.)"X=11000:X:::210Z a$="{,|,~,}; selects; back 1 level; G$:::320H: Error Routine 202:U=11:"79C";"BAD PATH ERROR (NO DISK IN DISK DRIVE OR DESIRED FILE into the PD) OMNIS 3 - READ ME FIRST! Introducing OMNIS 3 for the Apple /// OMNIS 3 has been available for the Apple /// for almost 4 years (we saw an advertisement in an old 1981 British Apple magazine); and it has gained a reputation over those yearoqrstuvwxyz{|program than the TUTORIAL... Having done it ourselves the hard way we suggest that the extra time spent plodding through the tutorial/manual now will save hours of thumbing through it later - this really is a tremendously flexible and powerful program whi and the entire user base. RECOMMENDATION Well I hate to say it but the TECH NOTES series is not a substitute for a re-write of the manual. You've just GOT to read the ENTIRE manual first; and we cannot see a better, more complete introduction to the series - such a multi-faceted product can only be adequately supported if it stands upon a wide-ranging usage base. We cannot alone run OMNIS through all its paces and thus need YOUR feedback and comments on YOUR applications to guide us in supporting youcting the current users with various support options. In addition we have set about to creating a set of ADDENDA to the User Manual in the form of the enclosed "TECH NOTES". We will be adding to these and definitely request and expect your feedback to thisf the program in November 1985 and the 50% list price reduction (tied, naturally, to some "cross-your-fingers" type volume commitments). We have tentatively agreed to take over technical and customer support for the /// version from Blyth and will be contall done. They did not feel the potential Apple /// sales volume justified a similar re-write and neither do we. But we did still consider OMNIS the most powerful DBMS for the /// - if a bit pricey for an "orphan" market. Hence the "Revival" on our part oross the board. Their early (premature ?) release of an OMNIS 2 for the Mac in the first mac-month with the original documentation was roundly panned. So for the new Mac version they did a re-write of the entire manual; the result is, we are told, quite we the program developers, Blyth Software (now with California Offices) recognized this but took a quite realistic look at the Apple /// market of 1985 and hesitated. They have recently released a MacIntosh version of OMNIS 3 which is drawing RAVE reviews act, personally, that the TUTORIAL approach taken by the documentation was inadequate - I don't like tutorials and rarely have the patience to take the time to walk through them; the resulting "dartboard" attempts to use the program can be frustrating. Well Mac version ...sigh). This led to a manual that was scattered with notes to the effect that 'Apple ][ users should ignore the next paragraph', 'Apple /// users should skip this section...' and similar interruptions of the reading. Additionally I also feltionally the system was originally developed under the UCSD Pascal System which allowed eventual "ports" of the program to the wide variety of machines appearing on the scene in those halcyon days of the early 80's. (Nowadays you just do an IBM and maybe aoped in Britain and the examples in the manual (and marketing literature) occasionally slip into Pounds and British Postal codes and similar idioms which often add an extra level of potential mis-understanding to the otherwise quite complete examples. Addis as being one of the most powerful Database Managers available for the machine. Unfortunately it also gained a reputation for carrying with it a somewhat "inaccessible" User Manual. Mostly this was a result of two things. The system was originally develch you probably will build a large percentage of your Apple /// usage around. Acknowledging the flaws and occasional omissions of the manual up front we still cannot see how you can fill in the holes without knowing the road. So we recommend the following "startup" process. 1. Install the system in your floppy or hard-disk based system using the guidelines in the manual. Read the /// notes in the manual. Read our NOTES #1, 9 and 10 if applicable. 2. Scan through the entire manual to get a feel primarily rary limitations on the TOTAL LENGTH and/or 'depth' of that Pathname. We loaded all our OMNIS files up under catalyst in the directory named : .PROFILE/CATALYST/OMNIS3 and set this up as our default directory... crash !! The system gave a very mber 4 just so you can refer to #4:myfile. Stick to the standard /// format ".PROFILE/MYFILE". You have the option of specifying DEFAULT DIRECTORY within OMNIS and should do so. BUT... What the documentation does not say is that OMNIS imposes some arbitlly in the OMNIS docs (e.g. #4:myfile), you may, and probably should, do all your file/volume access by standard Apple /// volume and device names. So don't bother with the device numbering and bizarre "spin" options to find that your PROFILE is device nu & Hard Disk Directories .fj You may easily load your complete OMNIS system and datafiles up to a hard disk such as a PROFILE or INFAX unit. Rather than fool around at all with the confusing device numbering format used by Pascal and referenced occasiona_________________________________ 3792 Windover Dr. Hamburg, NY 14075 716-648-2462 "Supporting the Apple /// Since 1982"c .fj .lm5 .rm87 .cj OMNIS 3 - Tech Note #1 Pathname Lengths at your command in the OMNIS program. Daryl Anderson .ff .lm0 .rm65 .cj !Q D A DataSystems"Q .rm130 .cj ________________________________________________________________________________________________ regularly frustrating but not too far down the line it starts to get exciting as you begin to realize the breadth and depth of powerful features at your command in the OMNIS program. Daryl Anderson featuresements to be pretty obscure as you read & work with them. Give yourself some time climbing this learning curve but then do call us if you feel stymied or need some assistance. Having myself gone through the process of learning to use the beast I know it isect them appropriately. Keep in mind that OMNIS is quite flexible in allowing re-configuring of most anything down the line (you just need some patience for those long - overnight - file reorgs !). 8. You WILL get stalled at times; you will find some elome Entry Formats for data entry & retrieval. We strongly recommend a simple "flat file" for now. Unless necessary for the initial application try to avoid multiple connected files; usually you can work with 2 or 3 single applications first then later connish to move that data into this application via a DIF file format if available. 6. Read through the TECH NOTES again. 7. Finally sit down and DESIGN your first production application ON PAPER. Draw up lists of fields and field attributes and sketch our sead and create your own TEST database application. We suggest a simple, single-file Address Book with indexes on Last Name and Zip and simple reports including one label-style and one 'boilerplate' letter type. If you maintain name & address data you may war note should be pulled up in the following steps. 4. Read through the entirety of the User manual WHILE setting up the sample application described in the manual. Take a few 1-2 hour daily sessions to do this. 5. Now delete those sample files and go ahfor its style and general terminology. You will probably find that the regular linking of descriptions to specifics of the ongoing tutorial/example makes this stage difficult. 3. Now scan through our TECH NOTES so you will have a sense of when a particulcryptic Pascal Error message and crashed totally. WHATS WRONG ? We have not completely defined the parameters of this error situation but it appears that the error occurs if the length of the PATHNAME (e.g. 24 for the above) is above a certain value. It is also possible that the number of directory 'levels' of the pathname (e.g. 3 in the above) might be an issue. We did find that .PRO/OMNIS3 works fine but also .PRO/X/OMNIS3 so it appears that total length is the main issue. We haven't had time to work ows up to 12 screens per dataset this should not present a problem. We will assume a single screen used for data entry/retrieval so we'll use screen #2 for our Mass Change worksheet. 2. Since we want to use the screen-2 data strictly as a 'worksheet' we wnd update the value and then returns to the main screen. This Entry Sequence is headed by a repeat code which will force it to execute for all records. It can then be triggered by a few keystrokes. 1. Find a free entry screen to work with. Since OMNIS allss is to define a re-calculation of the COST field on a separate 'transparency' screen where it is defined as an invisible field. We will then define an Entry Sequence which Jumps, transparently, to that second screen and does an automatic Edit to change aertain delete functions using multiple screens in an "Entry Sequence". We follow a similar approach with Mass Change. For the sake of this example, lets say we want to increase all occurrences of a field COST by 7%. Heres what we do. 0. The overall proceentation with this and future technical notes. MASS CHANGE FUNCTION The basic approach to setting up a mass change facility in OMNIS 3 follows the method described in the User Manual pages 4-105 to 4-108 in which is described a facility for automating cifies the entire set of pros & cons of this program since it demonstrates the relative opacity of the user manual but also a wide range of powerful and extensible techniques available to the user of the program. We hope to augment the justly maligned documhe product (and cut the price be more than half from $445 to $195) you can guess that we managed to establish a means of accomplishing a very powerful and flexible mass-change function in OMNIS 3 which is detailed here. In many ways the whole situation typ function appeared available in OMNIS 3. The lack of such a facility seemed peculiar in such an otherwise tremendously powerful program. Since the user manual is almost as limited as the program is unlimited, we went hunting. Well, since we have revived tunction. After shipping off a weeks worth of orders on Monday we simply do a mass "clear" of the "on order" flag and a mass change of the "ship date" to the current date. A glance at the OMNIS 1 documentation showed a Multiple Update command but no similarhe OMNIS 3 package for possible 'revival' 3 months ago we naturally tried to match its features against those of the non-/// DBMS system we were using to run the business. Now one thing that we do a lot is the so-called "mass change" or "multiple update" f92 Windover Dr. Hamburg, NY 14075 716-648-2462 "Supporting the Apple /// Since 1982"c .fj .lm5 .rm87 .cj OMNIS 3 - Tech Note #2 MASS CHANGE .fj When we first started evaluating t -da .ff .lm0 .rm65 .cj !Q D A DataSystems"Q .rm130 .cj _________________________________________________________________________________________________________________________________ 37iles up to a 'root level' directory (e.g. .PROFILE/OMNIS) or shorten the overall prefix (e.g. .PROFILE/CATALYST/O3). Please do report back to us any further specific situations that cause problems and we will add your feedback to this note. up a character at a time to establish the exact 'break point' yet. WHAT TO DO ? We do know that a 24 character Path Prefix for OMNIS will not work. So you should work with a value under that. If you findthat you get the error either move all the OMNIS fill take advantage of the 'transparent overlay' feature of OMNIS. Edit the entry for the dataset and press esc-C to change the sequences. Go to the screen-2 entry and enter "+" as the 'transparent char". .ff .cj OMNIS 3 - Tech Note #2 (cont) .fj 3. Although the field COST probably does appear on screen #1 (and may even be calculated as a complex relation to other numeric fields) we can also define a field COST on screen-2. In this case we will define an Invisible Calculated field (attributes 'I+') named screens can be defined (up to the 12 screen/format limit0 by mixing these values (e.g. 1=Y,2=N,3=Y,4=N,5=N,6=Y defines three sets with, respectively, 2, 3, and 1 screens each. The use of multiple primary screens should be reserved for identifying completction works fine. So a PRIMARY=YES for screen 1 with a PRIMARY=NO for following screen(s) effectively defines that set of screens as a multi page screen for data entry & retrieval; exactly what we wanted in this case. It seems likely that multiple sets ofiked. It appeared that we would have to constantly use the G(o) command to move between them (e.g. G1, G2). Turns out thats not necessary at all. If you define the second screen (and any later ones you have) as a NON-PRIMARY screen, the page-through fung data, would not respond to the "ESC >" and "ESC <" commands for moving to the next and previous screens. In addition we found that after entering the last value on screen 1 we did not automatically go on to the first field of screen 2, as we would have l 716-648-2462 "Supporting the Apple /// Since 1982"c .fj .lm5 .rm87 .cj OMNIS 3 - Tech Note #3 Paging Through Multiple Screens (Entry Formats) .fj We found that our 'flat file' database, with a set of two screens reserved for entering & retrievintems"Q .rm130 .cj _________________________________________________________________________________________________________________________________ 3792 Windover Dr. Hamburg, NY 14075 nd these specs and query the user for responses which cause branching into different command paths. At this level one begins to see some of the potential power of the Sequence "Command Language" available in OMNIS 3. .ff.lm0 .rm65 .cj !Q D A DataSysearch/R/G2/E/G1 It appears that 'hooks' to Report Formats and automatic reporting and/or audit-trailing could be built into the Entry Sequence and you can link the mass-change spec to other Main files. In addition you can define entire menu systems arou mass-change spec. This would allow, for instance, increasing COST by 7% only for Product Code XYZ in Region 2. These criteria would be build into a Search Format which the Entry Sequence would incorporate with the 'Alter Search', AS command as in : AS mysntry Sequence may be executed directly or you could build it into a menu as a labelled selection using the Menu Format commands. Additional "mass change specs" could reside in the same menu or sub-menu. Selection criteria could be added to any particulars temporary numeric and character fields. More than one "mass change spec" could be defined using more than one free screen. It is a rare application that uses anything approaching the dozen screens available for simple data entry and retrieval. This Ehe "(C)om - Enter Command Sequence" command. EXTENSIONS : More than one field could be updated by the mass change "screen" and these could take advantage of OMNIS powerful Date, Character string, Numeric, Range-checking and Logical functions as well a of the relevant values (in this case only COST) and a return to screen 1 (G1). Commencing with an (R)epeat command will repeat for all records, e.g. "R/G2/E/G1". This sequence can either be selected as part of a user-built menu or directly executed with tCOST which has the formula COST * 1.07. 4. Now if we define an Entry Sequence command "G2/E/G1" it will force a jump to screen 2 (G2) (but the transparent screen with invisible field will cause no change in the current display), a complete Edit (E) updateely separate screen sets (e.g. three screens for Update Individual Transaction and two others for Post to Ledger, etc). You would typically not wish to move automatically between the entry formats for such distinct functions ant the required G(o) commands is then appropriate. Of course, by the time you work up to such a level of complexity you will have most likely defined a set of your own menus with the G command imbedded within command strings. -da .ff .lm-648-2462 "Supporting the Apple /// Since 1982"c .fj .lm5 .rm87 .cj OMNIS 3 - Tech Note #6 Testing Search & Mass Change Formats .fj Its really not a very good idea to define the entire automatically repeating Mass Change command and let it loose onQ .rm130 .cj _________________________________________________________________________________________________________________________________ 3792 Windover Dr. Hamburg, NY 14075 716These boolean truth values using 0=false and 1=true can be very useful in defining search formulas and update calculations, but not for this rtype of case. -da .ff .lm0 .rm65 .cj !Q D A DataSystems"roneous case is that OMNIS is finding the records with FLAG=x based on the search then setting FLAG to the evaluation of the formula FLAG=' ' for that record; since this is NOT TRUE for the record, OMNIS sets FLAG to its boolean value for NOT-TRUE, zero. ual entry next to 'Formula :' in this case should be simply ' ' (e.g. space in single quotes). IF you wanted to do a calculation like COST = COST * 1.07 for a 7% cost increase you would enter COST * 1.07 for the Formula part. WHAT is happening in the erats happening is that we are putting the full formula, left and right sides, in the spot for "formula" which should only hold the right side of the formula; the 'FLAG =' part is implicit in the naming of the FLAG field as a calculated field. SO... the actlue 'x'. We went ahead and defined the transparent screen format described in Tech Note #2 with the formula for FLAG (attribute I+) as follows : FLAG = ' ' We found that the selected records all have FLAG changed to 0 (e.g. zero)... WELL... wh Just a note on an easily missed issue of defining OMNIS formulas which hung us up for 2 or 3 hours. We wanted to do a mass change on a field (see tech note #2) named FLAG changing all values to ' ' (i.e. space) using a search format for all FLAGs with va_______________________ 3792 Windover Dr. Hamburg, NY 14075 716-648-2462 "Supporting the Apple /// Since 1982"c .fj .lm5 .rm87 .cj OMNIS 3 - Tech Note #5 A Note on Formulas .fj e know if you have further thoughts. -da .ff .lm0 .rm65 .cj !Q D A DataSystems"Q .rm130 .cj __________________________________________________________________________________________________________thin any Apple /// program; call for details). In addition a cntl-x command causes a display of a numeric value which appears in the lower left corner of the screen. This is a mystery to me; perhaps its a reference to available memory or some such; let m a copy of the current text screen to be sent to the printer device. Very handy in some circumstances. (Handy enough that we imbedded it as a principle function of the Cut & Paste /// module of our Power Keys program; this allows such a screen dump from wi 716-648-2462 "Supporting the Apple /// Since 1982"c .fj .lm5 .rm87 .cj OMNIS 3 - Tech Note #4 Screen Dump Command .fj We have found that the cntl-S command (e.g. press the Control and "S" keys together) will cause0 .rm65 .cj !Q D A DataSystems"Q .rm130 .cj _________________________________________________________________________________________________________________________________ 3792 Windover Dr. Hamburg, NY 14075 your database without some testing first. The actual change can take some time to process against a large database and, as happened to us in the situation noted in Note #5, an incorrect or mis-understood format or formula can "mass strange" yoiur database. Instead you should set up a dummy record at the beginning of our database (do this when you enter your first record) or alter an early record so it will (hopefully) get a hit on the proposed Search Format. Now, instead of using the R(epeat) command in useful but it demonstrates a reassuring consistency of OMNIS which makes it easier for a new user to anticipate commands and not develop a fear of really messing things up because of an unexpected command function rearing its ugly head. In this case we havtions as a character insert; e.g. pressing Tab will move everything on the current line to the right one character. It turns out, additionally, thet the ESC-TAB sequence will insert a line. It was a double pleasure to discover this since not only is it nd that you need to insert a character or line into an existing "design". ALthough the M(ove command sequence can be very nice for moving blocks of text around on the screen its a bit of a pain for this simple function. We discovered that the TAB key funcn the manual but I haven't found it yet (and that sort of situation is the type that led to this series of notes !) If you are working with one of the OMNIS screen definition functions such as designing an Entry Format or a Report Format you will often fi Hamburg, NY 14075 716-648-2462 "Supporting the Apple /// Since 1982"c .fj .lm5 .rm87 .cj OMNIS 3 - Tech Note #8 Inserting Lines & Characters .fj This one may well be documented i -da .ff .lm0 .rm65 .cj !Q D A DataSystems"Q .rm130 .cj _________________________________________________________________________________________________________________________________ 3792 Windover Dr. ingful menu lines. So the menu will have entries like : 1. Current Open Orders 2. Monthly Shipping History 3. ... which will be linked to execute the report formats R.COO and R.MSH. More on this as we experiment with it. ining these two into a solution. Although we haven't done it yet here on our system it seems that the best place to start with menus will be to take the growing list of cryptic report formats and tie them into a menu that we will build which includes means can be equally intimidating AND annoying; how do you give a meaningful and memorable 7 character name to a Search format that is finding "all open orders from Texas for Product x" ? SOOTXPX just doesn't fit the bill. It seems reasonable to consider combS facility for User-Defined menus tends to intimidate new users and seems, perhaps, reserved primarily for building the so-called "turnkey" type applications that you might not have a need for anyways. The limitation of OMNIS "format" names to 7 characterndover Dr. Hamburg, NY 14075 716-648-2462 "Supporting the Apple /// Since 1982"c .fj .lm5 .rm87 .cj OMNIS 3 - Tech Note #7 A Good First Use for Menus .fj The very powerful OMNIspec. -da .ff .lm0 .rm65 .cj !Q D A DataSystems"Q .rm130 .cj _________________________________________________________________________________________________________________________________ 3792 Wipect it. Only when the search format & fomulas appear to be working correctly should you add in the R(epeat command and let it run. Once it has run correctly you may add it to a Mass Change menu you have defined with meaningful Menu names for the new MC a command string just manually enter the S(earch command and escape-out if you don't soon match up to the expected record. If you are testing a Mass Change as per Note #2, manually enter the Command string G12/E/G1 or whatever to force the update, then inse developed a clear sense that the ESCape key is generally a 'Power Key' within OMNIS; right and left arrows move the cursor right and left one character and ESC-right arrow and ESC-left arrow move the cursor to the left and right end of the line... so try the same with the TAB/insert command and we find a similar 'magnification' of the effect. Nice. -da .ff .lm0 .rm65 .cj !Q D A DataSystems"Q .rm130 .cj ___________________________________________s boot disk) to the main directory as SYSUTILS.CODE and OMNIS will, in fact execute it directly; but its really not much different from exiting to Catalyst and re-executing Utilities so we have removed it. In general we recommend that you do all your disk. The documentation for Apple /// use of these functions, as well as the main menu for the function just point you to using the Apple /// System Utilities program. We have tried adding the main System Utilities program (SYSTEM.STARTUP from the system util648-2462 "Supporting the Apple /// Since 1982"c .fj .lm5 .rm87 .cj OMNIS 3 - Tech Note #10 OMNIS Disk Utilities .fj The OMNIS system for some of the other systems (e.g. Apple ][) includes a number of DISK UTILITIES for formatting, copying disks, etcQ .rm130 .cj _________________________________________________________________________________________________________________________________ 3792 Windover Dr. Hamburg, NY 14075 716-ties and we recommend that you just exit to Catalyst main menu and re execute OMNIS for the new function until you or we fully understand the process here. -da .ff .lm0 .rm65 .cj !Q D A DataSystems" hard disk/pascal pgms sub-menu we were prompted for this disk but OMNIS wouldn't find it and it appeared to be looking to the hard disk for that dummy file. Any thoughts ? Generally this is only an issue if you want to move from Omnis Main to Omnis Utilit of accesses to a file (OMNIS3.INFO) and periodically require the insertion of the original OMNIS disk which has a large 'dummy file' apparently sized and placed on the disk in some specific way. Once when we were running off of an executed OMNIS from the (presumably finding and using .D1/OMNIS3.INFO ?). Any thoughts you can pass along on this would help. Additionally we find that setting OMNIS3.CODE as the PROGRAM PATH in catalyst starts up OK but without the main Intro menu. OMNIS seems to use some counelect Pascal Programs Catalyst sub-menu so we added OMNIS execution entries to that menu to allow re-entry to, for instance, the Utilities functions. But re-executing OMNIS at this point seems to bypass entirely the .D1 accesses which the main execute does CATALYST/PASCAL, the INITIAL PREFIX to .PROFILE/OMNIS or whatever you are using, and the PROGRAM PATH to .PROFILE/OMNIS/SYSTEM.STARTUP and save the setup. Uncertainties : We find that exiting to the "system" menu from within Main OMNIS puts us in the SSTARTUP SYSTEM.LIBRARY OMNIS3.INFO Rename the file SYSTEM.LIBRARY to SYSTEM.STAR.LIB. We copied the OMNIS3.INFO file to the catalyst boot disk as well. Now edit the Catalyst Menu to contain an entry for OMNIS. Set the INTERPRETER PATH toyst program selector to be quite straight forward. Using System Utilities create an appropriate subdirectory such as .PROFILE/OMNIS (but see Note #1) and copy the following files to that directory : OMNIS3.CODE OMNIS3U.CODE SYSTEM.5 .rm87 .cj OMNIS 3 - Tech Note #9 Using OMNIS with Catalyst .fj Although we haven't entirely figured out some peculiarities involving 'switching' between OMNIS Main and Utility programs we have otherwise found that OMNIS installation under the Catal______________________________________________________________________________________ 3792 Windover Dr. Hamburg, NY 14075 716-648-2462 "Supporting the Apple /// Since 1982"c .fj .lm formatting and copying and file copies externally to the OMNIS program using your current system utilities. The additional effort to partly imbed these functions in OMNIS does not seem worth it. -da .ff .lm0 .rm65 .cj !Q D A DataSystems"Q .rm130 .cj _________________________________________________________________________________________________________________________________ 3792 Windover Dr. Hamburg, NY 14075 -da .ff .lm0 .rm65 .cj !Q D A DataSystems"Q .rm130 .cj _________________________________________________________________________________________________________________________________ 3792 Windover Dr. HamburIS DIF format as long as it is saved with a file name ending with ".ASCI". This forces the file to be saved as an Asciifile instead of the normal Datafie format of OMNIS and is duly noted in the Documentation. ts of it and the 3EZ spreadsheet we don't plan too many return visits to 3EZ. Still, the inability to export into the 3EZ spreadsheet is a pain and we will look into means of accomplishing this. Advanced Visicalc is said to be perfectly happy with the OMNames saved as labels and 3EZ appears unwilling to accept this perfectly reasonable format. Frankly we only discovered this in attempting to peek at our daily-dif (see note #12) backup in 3EZ. Given the 30 field limit of 3EZ database and the other size limiore finnicky about what it will accept as a DIF file for IMPORT. DIF files produced by OMNIS cannot apparently be read by 3EZ pieces. It appears that the problem is an inflexibility of 3EZ pieces. OMNIS stores its DIF files from a datafile with the field nly content to accept 3EZ Pieces data "IMPORTS" in the DIF file format; many of you who are planning to move from the EZ to the POWerful will be using this to migrate from current 3EZ based applications. As it turns out though, 3EZ Pieces is a good deal mr. Hamburg, NY 14075 716-648-2462 "Supporting the Apple /// Since 1982"c .fj .lm5 .rm87 .cj OMNIS 3 - Tech Note #12 OMNIS <--> 3EZ Pieces DIF Interfacing .fj OMNIS seems pefect -da .ff .lm0 .rm65 .cj !Q D A DataSystems"Q .rm130 .cj _________________________________________________________________________________________________________________________________ 3792 Windover D get more experienced with OMNIS we will break up that flat file into multiple 'connected' files carrying the less-used fields in smalled separate files and the backup question (and the potential completeness of a DIF file) may be approached differently. 0K TTT.DD1 file spins out as a 350K DIF file in about 40 minutes at the end of the day which is easily stored on a MicroSci 572K floppy. Copying the small library .DL file effectively preserves a backup of the entire application. Of course once we and youF or ASCII file. This typically slims down the final file considerably if, like us, you have an inefficient data design with large fixed length character fields which aren't actually used in many records (e.g. 79 character "addl notes" type fields. Our 95versize files to multiple floppies but it can be a pain in the next to use. If your data file or files are just simple "flat files", e.g. no connections or subsidiary files, you might consider an alternative approach to backup, to whit: backup out to a DIhat the "pre-sized" datafiles are cumbersomely large for normal disk/file transfer and backup. (We work mostly with a file of 1900 blocks - 950K which won't fit on any floppy as a single file). Of course the Backup /// program can be used to backup such o 716-648-2462 "Supporting the Apple /// Since 1982"c .fj .lm5 .rm87 .cj OMNIS 3 - Tech Note #11 Backing Up OMNIS Data Files .fj If you are working with large OMNIS datafiles on a hard disk you will typically find tg, NY 14075 716-648-2462 "Supporting the Apple /// Since 1982"c .fj .lm5 .rm87 .cj OMNIS 3 - Tech Note #13 Imbedding Printer Control Characters in Reports .fj Do note the very flexible facility OMNIS offers for imbedding ANY set of control characters in a report. Although you can define three general sequences for reports of 80, 96+ and 132+ characters per line in the Hardware Definition section of OMNIS you can imbed sequences of ANY control characters in aigns a character or number from the keyboard to a variable.10 PRINT "Press A key" 20 GET Key$30 PRINT "YOU PRESSED ";Key$40 ENDThe GET statement may befollowed by either a numeric oralphanumeric variable. Mostprogrammers assign the input to!a strentFREReturns the number of bytes remaining available to the user. PRINT FRE19065The amount of free memory depends on the size of the Apple///'s memory and the program in!memory. Max memory is 512K on an Apple ///.ZGET Statement GET variableAssints the"string AZ and line 30 repeats fromline 10.The initial value of "control#variable" B has been incremented bythe default value of 1.! A loop structure may contain$other loops within it, provided thatthe loops are nested. FRE: FREE Statemets up a program loop that"repeats the series of instructions!inside the loop a given number of times. The loop begins with FORand ends with NEXT.10 FOR B=1 to 10 20 PRINT "AZ" 30 NEXT B40 END"Line 10 sets up the loop to repeatten times. Line 20 prrints value of M to 2 decimals"50 Prints value of M to 3 decimalsThe variable X is called a dummy variable and has no effecton the program. It's simply!used to define the relationships.-FOR-NEXT Statement*FOR [control variable {,control variable}]S(X) = INT (X*100+.5)/100$20) DEF FNB(X) = INT (X1000+.5)/100030) M = 6.12345640) PRINT FNA (M)50) PRINT FNB (M)60) END"10 defines function A for rounding off to 2 decimals and 20 defines!function B for rounding off to 3.30 Assigns that value to M"40 P Returns -.01In these examples, the baseequals 10 and the power is 2.t FN: FUNCTIONUser-defined functionFN function name (arith.exp.)Process the value given byarithmetic expression accordingto a previously defined set of instructions.#10) DEF FNA00PRINT -10^(-2) Returns -.012. As a numeric variable:B=10:P=2PRINT B^P Returns 100PRINT B^P^P Returns 10000PRINT -B^(-P) Returns -.013. Any valid combination:PRINT B^2 Returns 100PRINT 20^P^2 Returns 10000PRINT -10^-P 403.428793EXP is the opposite of LOG.EXPONENTIATIONAritmetic operator base ^ powerPerforms an arithmetic#exponentiation: It raises "base" tothe power of "power."1. As a numeric constant:PRINT 10^2 Returns 100PRINT 10^2^2 Returns 100 us any further specific situations that cause problems and we will add your feedback to this note. -da work with a value under that. If you findthat you get the error either move all the OMNIS files up to a 'root level' directory (e.g. .PROFILE/OMNIS) or shorten the overall prefix (e.g. .PROFILE/CATALYST/O3). Please do report back to) and further imbed a sequence of codes to define and cause the printing of logos or small graphics in reports ! -da .ff ny report and effectively take advantage of your printers multiple fonts or character sets for very stylish reports indeed. If you are really bold you might experiment with sending codes to put your printer into graphics-dot mode (if it has one, of courseing variable and convert thestring to a number using VAL. GOSUB StatementGOSUB line numberCauses the program to branch to the indicated line. When RETURN#is encountered, the program returns to the line number following theGOSUB."10 PRINT "Type C to continue, E toEnd." 20 INPUT C$ 30 If C$="C" then GOSUB 1000:END40 If C$="E" then END$50 PRINT "invalid entry. Try Again.":GOTO 1060 END||1000 REM Subroutine| 2000 RETURNA subroutine must always end with a RETURN statement to cause"program execen the programjumps to line 40 and ends."If NO, it jumps to line 50. Other-$wise, it executes the ELSE statementand goes back to line 10.The ELSE clause can not be usedon a separate program line.= IF...THEN StatementIF logical exp. THEN line #Caus is a conditional statement, one of the most common in BASIC.10 INPUT "YES or NO"; X$20 IF X$ = "YES" GOTO 40 30 IF X$ = "NO" GOTO 50: ELSE 10$40 PRINT "The program is now at line 40.": END#50 PRINT "The program's now at line 50."If line 20 is YES tht window.All parameters are relative tothe current window dimensions. VPOS is not affected with use ofHPOS.W IF...GOTO StatementIF logical exp. GOTO line #Sends program execution to theline number if the logicalexpression is true (non-zero). ThisS = arithmetic expressionSets the horizontal position(column) of the cursor in therange of 0 to 255.$You can find the current position ofthe cursor with PRINT HPOS. 100 HPOS = 40"This moves the cursor horizontallyto the 40th column within thecurrenrs on aWHITE background."40 For T=1 to 1000: NEXT T 50 NORMAL60 PRINT "WHITE characters on aBLACK background."70 ENDNo parameter is required forHOME. Home may be used in immediate ordeferred mode.HPOS: HORIZONTAL POSITIONReserved variableHPOession" is rounded to an integer before evaluation."Decimal range is -65535 to +65535.if (-): 2's compliment is used.UHOME StatementHOMEClears the screen and sets thecursor to the upper-leftmost position.10 HOME 20 INVERSE30 PRINT "BLACK characteEXT J#Line 10 sets up a loop to repeat 15times.!Line 20 displays the Hex value of the decimal value of variable J:1 2 3 4 5 67 8 9 A B CD E FLine 30 repeats to line 10The dollar sign ($) identifiesthe string function.""Arithmetic expr from leftto right, on the basis of theirASCII code numbers.: -2HEX$: HEXADECIMALString functionHEX$ (arithmetic expression)Returns a string that#represents the hexadecimal value of"arithmetic expression."10 FOR J= 1 to 1520 PRINT HEX$(J) 30 N0 IF B>=A then PRINT "TRUE": ELSE PRINT "FALSE"$30 IF A>=B/C then PRINT "TRUE": ELSE PRINT "FALSE""40 IF X$>Y$ then Print "TRUE":ELSE PRINT "FALSE"Line 20 is TRUELine 30 is TRUELine 40 is TRUE: -: -: -The strings are compared character by characterharacter from leftto right, on the basis of theirASCII code numbers.GREATER THAN OR EQUAL TORelational operatorexpression 1 >= expression 2Allows a logical comparrison#to be made between two expressions. 10 A=10:B=20:C=2:X$="Trusty":Y$="Trust""2usty":Y$="Trust"!20 IF B>A then PRINT "TRUE": ELSE PRINT "FALSE"#30 IF A>B/C then PRINT "TRUE": ELSE PRINT "FALSE""40 IF X$>Y$ then Print "TRUE":ELSE PRINT "FALSE"Line 20 is TRUELine 30 is FALSELine 40 is FALSEThe strings are compared character by che!next line. GOTO can be used as a debugging tool in direct mode to resume execution from any point. GREATER THANRelational operatorexpression 1 > expression 2Allows a logical comparrison#to be made between two expressions. 10 A=10:B=20:C=2:X$="TrO 20"At line 10 the program branches toline 40 and the statement is#printed. The program then branches back to 20 at line 50 and printsthe statement at line 20.If "line number" refers toa nonexecutable statement (like!REM) the program continues to tution to continue from the next statement following theGOSUB statement.GOTO StatementGOTO line numberCauses the program to branch tothe indicated line. 10 GOTO 40#20 PRINT "Jumping back to line 20."30 END"40 PRINT "Program now at line 40." 50 GOTes the program toexecute given instructions if#specified conditions are true (non-zero).#IF-THEN is a conditional statement.10 INPUT "YES or NO"; X$20 IF X$ = "YES" THEN 40 30 IF X$ = "NO" THEN 50: ELSE 10$40 PRINT "The program is now at line 40.": END#50 PRINT "The program's now at line50."If line 20 is YES then the programjumps to line 40 and ends.If NO, it jumps to line 50,otherwise it executes the ELSE!statement and returns to line 10.  The ELSE clause can not be on a separate program lihe ASCII code number of the key is returned. If it equals A"(ASCII A) then the program ends atline 40. At line 50 the ON KBDstatement is re-enabled. The"RETURN statement sends things back to line 20, and then to line 10.The last statement of asubroued variableKBDContains the ASCII code numberof the last key pressed on the keyboard.10 ON KBD GOTO 30 20 GOTO 10 30 PRINT KBD40 IF KBD = 65 THEN END50 ON KBD GOTO 30 70 Return At line 10, the program jumps toline 30 when any key is struck.#At 30, tckground."70 ENDNo parameter is required inafter INVERSE. INVERSE may be used in immediateor deferred mode.vINVOKE StatementINVOKE pathname[,{pathname}]Loads assembly languagesubroutines into memory.INVOKE .D1/BGRAF.INV KBD: KEYBOARDReservasic has 16 numeric functions...NINVERSE StatementINVERSESets screen output in the inverse mode. 10 HOME 20 INVERSE 30 PRINT "BLACK characters on a WHITE background." 40 For T=1 to 1000: NEXT T 50 NORMAL60 PRINT "WHITE characters on aBLACK baNT(exp)Returns the largest whole number less than or equal to thevalue of the argument.PRINT INT (23.499)23PRINT INT (23.5)23"arithmetic expression" can beeither a constant, variable, an!arithmetic operation or any valid combination.Business BNSTR ("BLABLABLA","A",7) Returns 92) As a string variable:A$= "BLABLABLA" B$="A"PRINT INSTR (A$,B$,1) Returns 3(etc.)"starting position" should not!be larger than the maximum string length, which is 255 characters.A INT: INTEGERNumeric functionIches for a substringwithin a string and returns a#number representing the position ofthe first character of the substring.#1) string expression as a constant:PRINT INSTR ("BLABLABLA","A",1) Returns: 3PRINT INSTR ("BLABLABLA","A",4) Returns: 6PRINT Irforms any necessary string to numeric-!type conversions, similar to VAL.#A directory may be opened as a TEXT#file is by specifying the pathname.#INPUT#, like CAT, then accesses it.&INSTR: IN & STRINGString functionINSTR (subject$,target$[start])SearA "?" is used as a prompt.INPUT#File statementINPUT# file#[,rec#];var[{var}]]REads a line of text for each#variable in a list. The file being"read is defined by the user with anumber from one to ten.10 INPUT#1, 45; WIN$INPUT# automatically pefrom the keyboardand assigns the value(s) to theindicated variables.$INPUT "Enter today's date (MM/DD/YY) ";Date$Multiple data items typed onthe same input line must beseperated by commas. Pressing RETURN or ENTER signalsthe end of the input line.le INDENT is assigned a value of 5 in direct mode beforeentering the program. With LIST:10 For X = 1 to 10020 PRINT X30 NEXT XThe system's default value isset to 2 spaces.[INPUT StatementINPUT [string,|;]variable{,var}Accepts input esponding value.INDENTReserved variableINDENT= arithmetic expressionContains the number of spacesto be used to indent FOR...NEXTloops in a program listing.INDENT=510 For X=1 to 100 20 PRINT X 30 NEXT XLISTIn this example, the reservedvariab6432, "The Apple ///"PRINT USING displays output!according to the format specified in line 20.IMAGE can only be used asa program statement."Each specification, seperated by a"comma, corresponds to one printing$field and controls the format of thecorrne.  IMAGE Statement&IMAGE specification [{,specification}]Stores the formatspecifications to be used by aPRINT # USING statement.#IMAGE is optional and allows you to"use the same format several times.20 IMAGE 5#.3#,80C#100 PRINT USING 20; 2357.tine to which programexecution has been transferredwith ON KBD must be RETURN. The ON KBD statement must be re-enabled just before RETURN.LEFT$String function-LEFT$(string expression,number of characters)Returns a string (of the!specified length) that's composedof the leftmost characters of astring expression.!PRINT LEFT$ ("Business Basic", 3) Returns: Bus"string expression" can be aconstant, variable or any combination.If "number of characters" is> the total length of "string!expression",than 0: LOG (0) orLOG (-2) returns an "IllegalQuantity" error message.#The natural logarithm is log to thebase e.(MID$String functionMID$(expr$,exprrnm[,exprnm])Returns a substring from a given string. The first integer#specifies the position of rns the natural logarithmof "arithmetic expression."May be used in immediate or indeferred mode.PRINT LOG (.23145/6.3)Returns: -3.30394The numeric expression may bea constant, variable or any combination."arithmetic expression" mustbe greater ret.FileWhen listed by a CATALOG!statement, locked files are shown with an asterisk (*) to the leftof their file type.!An entire volumn may be protected by placing tab over disk cutout.LOG: LOGARITHMNumeric functionLOG (arithmetic expression)Retuogramin memory is erased.LOCKFile statement LOCK pathnameProtects a file from being!inadvertently deleted, changed or!renamed. The LOCK statement mustbe followed by the file orsubdirectory name to be locked.LOCK /P/Stocks/Apple.Co.LOCK .D2/SecOAD pathnameLoads a Basic program intomemory from a file.LOAD .D1/Apple.3LOAD /P/Graphics.PgmWhen LOAD is executed, all!variables are set to 0 and stringvariables to null strings. All!files are closed (except the file"being loaded). Any current pr through 100.3) Lists from 20 through 100.4) Lists from 20 to end.!5) Lists all lines from beginning to line 100.The listing can be temporarilyhalted in immediate mode by"pressing Control and C, or Controland 7 on the keypad.1LOADFile statement LST StatementLIST [line][TO|,|-[line]]Lists (on the output device)!the current program (or specifiedpart) in memory.Range is from 0 to 65529.1) LIST2) LIST 20,1003) LIST 20-100 4) LIST 20- 5) LIST -1001) Lists all lines in memory.2) Lists from 20Days%=263LET is optional so these twoexpressions are equivalent.Although "variable name=value" looks like a relational expression, it is interpreted by Basic as an assignment statementand has no logical value.!Programmers use LET for emphasis.LI The strings are comparedchracter by character, fromleft to right, on the basisof their ASCII code numbers.LETAssignment statement*[LET] variable | reserved variable = valueAssigns the value of anexpression to a variable name.LET Days% = 263 sions.! 10 A=10:B=20:C=2:X$="Trusty":Y$= "Trust"# 20 IF B<=A then PRINT "TRUE": ELSE PRINT "FALSE"% 30 IF A<=B/C then PRINT "TRUE": ELSE PRINT "FALSE"40 If X$<=Y$ then PRINT "TRUE":ELSE PRINT "FALSE"Line 20 is TRUELine 30 is TRUELine 40 is FALSEseLine 40 is FalseThe strings are comparedcharacter by character, fromleft to right, on the basis oftheir ASCII code numbers.LESS THAN OR EQUAL TORelational operatorexpression 1 <= expression 2Allows a comparrison to bemade between two expresadebetween two expressions.! 10 A=10:B=20:C=2:X$="Trusty":Y$= "Trust"" 20 IF BB/C then PRINT "TRUE": ELSE PRINT "FALSE"# 40 IF X$>Y$ then Print "TRUE":ELSE PRINT "FALSE" - Line 20 is TRUE Line 30 is FALSE Line 40 is TRUE - - -The strings are compared! character by character from left to rightom$left to right, on the basis of theirASCII code number. NOT EQUAL TORelational operatorexpression 1 <>expression 2Allows a logical comparison#to be made between two expressions. 10 A=10:B=20:C=2:X$="Trusty":Y$="Trust""20 IF B<>A then PRINT "TRUERINT (100<50)20 PRINT NOT (100<50)30 END$Line 10: The expression is evaluatedto false; prints 0.Line 20: The expression isevaluated to true since NOT has reversed its logical evaluation; prints -1.The strings are comparedcharacter by character, fr0 PRINT "WHITE characters on aBLACK background."70 END - -No parameter is required afterNORMAL.NORMAL may be used in eitherimmediate or deferred mode.NOTLogical operatorNOT (expression)Reverses the logical evaluationof an expression.10 Ptructure may contain other#loops within it, provided the loops are nested.SNORMAL StatementNORMALResets the screen output inthe normal mode.10 HOME 20 INVERSE30 PRINT "BLACK characters on aWHITE background."40 For T=1 to 1000: NEXT T 50 NORMAL6at#10 times. Line 20 prints string AZand line 30 repeats.#** FOR control variable = aexpr1 TOexpr2[STEP aexp3]|NEXT [control variable{,control variable}]The initial value of control"variable B has been incremented bythe default value of 1."A loop sreplaced by the newone.0NEXT StatementFOR...NEXT (see **)Sets up a program loop that"repeats the series of instructions!inside the loop a given number oftimes. 10 FOR B=1 to 10 20 PRINT "AZ" 30 NEXT B 40 END -# Line 10 sets up the loop to repeEXT:HOME:NEW This command clears the graphics!screen, returns the cursor to the top left hand side of the screen!and clears the program in memory.When a program is loaded froma peripheral unit, the programstored in the computer's memory!is erased and pression may be a"constant, variable or combination.Business Basic has ninearithmetic operators.NEW StatementNEWErases the progam currentlystored in memory, clears allvariables, and closes all openfiles.Immediate or deferred mode.NEW100: Tcombination.Business Basic has ninearithmetic operators.&MULTIPLICATIONArithmetic operator+numeric expression 1 * numeric expression 2Performs an arithmeticmultiplication.PRINT 20*20 Returns 400PRINT -20*(-10) Returns 200The numeric exer value thatis the remainder of the integer"division of numeric experssion1 bynumeric expression2.PRINT 4 MOD 3 Returns 1PRINT 27 MOD 4 Returns 3PRINT 45 MOD 8 Returns 5The numeric expression my bea constant, variable or any o branch to a statement orstatement list when execution continues past a specified file.$10 REM ON EOF# Statement: File CopyUtility Program#20 INPUT "Type the source file nameto be copied"; L$30 OPEN #1 AS INPUT, L$$40 INPUT "Type the copy file name to print to";L$50 OPEN#2 AS OUTPUT, L$"60 ON EOF#1 PRINT "Copy completed"70 CLOSE80 END90 INPUT#1;L$:PRINT#2:GOTO 90 OFF EOF#1ON EOF# is very similar to theON ERR statement, except the ON$EOF# recognizes only one error code."RESUME can't be used wirst line in list":Return 200 PRINT "Second line in list":Return300 PRINT "Third line in list":ReturnLine 20 sends program execution"to 100,200 or 300 depending on the#value given X in line 10 (1,2 or 3)If the value of "arithmetic!expression" is 0, StatementON expr GOSUB line [,line]...Transfers progam execution toone of several specifid line!numbers depending on the value of"expr" (arithmetic expression)Allows one of several paths.... 10 INPUT X20 ON X GOSUB 100,200,300:END||100 PRINT "Fithings back! to line 20, and then to line 10.The state statement of asubroutine to which programexecution has been transferredwith ON KBD must be RETURN.CONTROL C can't halt program#execution when ON KBD is in effect.ON...GOSUB: ON,GO & SUBROUTINEne 10, the program jumps to line 30 when any key is struck.$ At 30, the ASCII code number of the! key is returned. If it equals A# (ASCII A) then the program ends at line 40. At line 50 the ON KBD statement is re-enabled. The# RETURN statement sends entON KBD statementlistCauses program execution to#branch to the line number specified"after the GOTO or GOSUB statementswhen any key is pressed. 10 ON KBD GOTO 30 20 GOTO 10 30 PRINT KBD 40 IF KBD = 65 THEN END 50 ON KBD GOTO 30 70 Return! At lihe program continues.": ON ERR is used only as a program statement. The ON ERR statement$should be placed at the beginning ofa program. The error-handling$subroutine must be free of errors oran endless loop may result.ON KBD: ON & KEYBOARD Statem to the specified line number.#If a program contains more than one%ON ERR, only the latest will be used. 10 ON ERR GOTO 70 20 DIM A (12) 30 FOR X=1 TO 12;READ A:NEXT X 40 GOTO 80 50 DATA 1,2,3,4,5,6 60 END: 70 IF ERR=4 THEN RESUME 40#: 80 PRINT "T#except that ON EOF# recognizes only one error code. RESUME can't beused with ON EOF# either. If!program goes past file end and ON"EOF not on, error message results.6ON ERR: ON & ERROR StatementON ERR statementlistCauses prgoram execution to$branchT "Type the source file nameto be copied"; L$30 OPEN #1 AS INPUT, L$$40 INPUT "Type the copy file name to print to";L$50 OPEN#2 AS OUTPUT, L$"60 ON EOF#1 PRINT "Copy completed"70 CLOSE80 END90 INPUT#1;L$:PRINT#2:GOTO 90ON EOF# is similar to ON ERR,EOF#: ON & END OF FILEFile statementON EOF# filenum statementlistAllows program execution to"branch to a statement or statement"list when execution continues pastthe end of a specified file.$10 REM ON EOF# Statement: File CopyUtility Program#20 INPUTO 100 20 GOTO 10 100 PRINT KBD110 IF KGBD = 65 THEN END120 ON KBD GOTO 100 200 RETURN OFF KBDOF KBD may be used inimmediate or deferred mode.CONTROL-C can't halt program#execution when ON KBD is in effect.!CONTROL-7 will stop but not halt.ON OFF ERR has no parameters oroptions.OFF KBD: OFF & KEYBOARDFile statementOFF KBDCancels the ON KBD statement.ON KBD causes the program to!branch to a specified line number"after the GOTO or GOSUB statementswhen any key is pressed.10 ON KBD GOram stops and message displayed.10 ON ERR GOTO 70 20 DIM A (12)30 FOR X=1 TO 12;READ A:NEXT X 40 GOTO 8050 DATA 1,2,3,4,5,660 END70 IF ERR=4 THEN RESUME 40!80 PRINT "The program continues." OFF ERR may be used eitherin immediate or deferred mode.th ON EOF#."Error message will be displayed if%ON EOF isn't on & DATA read past end.OFF ERR: OFF & ERRORFile statementOFF ERRCancels the most recentlyexecuted ON ERR statement.$ON ERR causes a brach to a specifiedline number. If error occurs,$progor greater than 3, program execution branches to"the first line number in the list.Range is from 0 to 255 for"arithmetic expression."w ON...GOTO StatementON expr GOTO line [,line]..Transfers program execution!to one of speveral specified linenumbers depending on the value"of "expr" (arithmetic expression). 10 INPUT X20 ON X GOTO 100,200,300:END||100 PRINT "First line in list":Return 200 PRINT "Second line in list":Return300 PRINT "Third line in list":Return -Line 20 sends program executionaccording to the setting of thepaddles.YPERCENT Identifiervariable name%Identifies a numeric variableas being of the integer type.A variable withou an identifieris automatically of the single-precision type.10 A=420 B=3 30 K%=A/B"40 PRINT "ThectionPDL(0<=expr<=3)Returns the vertical and!horizontal position (0-255,0-255)#of a joystick connected to PORT'S A"or B in the back of the Apple ///.$20: VPOS=(PDL(0)/10:HPOS=(PDL(1)/30)!This example positions the cursorwithin the visible screen areamed left to right.Order of evaluation:1() :Parentheses2+|- :Unary plus|minus3^ :Exponentiation4*|/|MOD|DIV :Multiplication;Floating Point Division; Modulodivision; Integer division.5+|- :Addition|SubtractionB PDL : PaddleNumeric funr than the value of INDENT.PARENTHESES ()Operatorarithmetic expressionUsed to define the specificvalue that is currently being operated on.1. DIM X(23,7)2. D$ = CHR$(78)3. PRINT TAB (30); "DCBA"!In 3, the mathematical operations will be perfor= arithmetic expressionContains the maximum length#of lines output on a printer by the LIST command. OUTREC=80 This causes the printer to starta new line as soon as the#specified column position (80 here) is reached.The value of OUTREC must be!greateauses normal screenoutput to be resumed. 0 is thescreen's file reference #.Don't use the TRACE statementto debug programs using OUTPUT#unless you want the TRACE-generated line sent to the filename.KOUTREC: OUT & RECORDReserved variableOUTREC ll PRINT, LIST,"TRACE and CATALOG statement outputis sent to the specified device%(.printer, .d2, .console, .ram, etc.) 1. OUTPUT#2 2. OUTPUT#0#The file reference number following!the OUTPUT# statement must be thesame as the OPEN# statement.OUTPUT#0 cis met#since 20 doesn't equal 50 nor is 50<> 50.Strings are compared character by character from left to right.Business Basic's Three logicaloperators: AND, OR, NOT."OUTPUT#File statement OUTPUT# file#Directs screen output to a!specified file. Ar condion is met." 40 Print "One condition is met."50 A$="A":B$="B":C$="B"60 If A$=B$ OR C$<>B$ then 80 70 PRINT "One condition is met."$80 PRINT "Neither condition is met."90 ENDLine 40: One condition is met because A1000 Apple ///$articles and numerous A3 Data Bases.Tipnis Associates Box 42001Cincinnati, OH. 45242 513-791-3805Software#Computer Aided Manufacturing Systemable list.* A comma must separate each expression.* Write# persofrms no numeric to string-type conversions whiletransfering information from expressions to the file; it just writes a binary image of numericdata to the file.e of the"first expression is written to the$first field in the specified record.!If no record number is specified,!records are written sequentially.$* A comma seperates file number fromrecord number."* A semicolon must seperate recordnumber from the varilly the value$of each expression in its expressionlist to a field in a data file#whose reference number is specifiedfollowing the number sign.WRITE#1,32;A%,B&,C$"* Record number following the filenumber specifies where writingshould start. The valuhe cursor moves to the"lower-left corner of the specified#window. A coordinate value of 0 is!automatically converted to 1. Therange is from 0 to 255.JWRITE#File statement>WRITE# file number[,record number][;expression[{,expression}]]Writes sequentiaorizontal coordinate;#9 is the vertical coordinate of the upper-left corner of the window.16 is the horizontal coordinate (column 16)19 is the verticle coordinate(row 19) of the lower-rightcorner of the window.When the WINDOW statement is!executed, tOW Statement.WINDOW aexpres1,aexpres2 TO aexpres3, aexpres4Sets the position and size ofthe "window" (any square orrectangle area within the total screen) where text is displayed.$Maximum parameter values: 80c x 24l.100 WINDOW 6,9 to 16,196 is the hr vertically to!the sixth line within the currentwindow.The valid range is 0 to 255."All parameters are relative to thecurrent window dimentions.$When VPOS is used to move the cursor#vertically, the cursor's horizontalposition is not affected.WINDftwareStatPro$Stats/Graphics Spreadsheet$$$$$$Apple Resource GuideWall Street Consulting Group19 Prospect St.South Orange, NJ. 07979 201-762-6652Software!Asset/Liability Consulting System$GAAP Mgmt/Policy ReporterAutomated "Repo