8L2C)pJJJJ IH(ȱH:=IH[H`@HcH  $ +   I/H`JLNGȄBȄF aK  haaFF  mJm# KKJ UJ )J ۈ) ;J3ȱJFȱJGJKaȄM  aaNNJFLGJL LGLIFEuHUSTON!' '/LIFELIKE.SYSTEM 0_  LIFE348  NORMAL9& FREDKIN:$b)INVERSE;(b*KLEE<? H/;/;C.1.1.READ.MEm !%#3 SCRIPTSPBH.PACK.3.3%GPBH.PACK.DOC3.3*YLIFELIKE.DSKA' LIFEBUGFIXLIB A%.%3READ.ME7 %%TOOLGLUE.ASM#HC%0%0TOOLGLUE.MACROS y%0%1BUGFIXLIB1.0 >dMԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@LLnSOS BOOT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!)? &PRODOS `DaElH$?EGvѶK+`L HHLy XP LM ŠϠĠӠS)*+,+`F)) (*=GJFjJJA QE'+ '== `@ STSP8QSS8 m P o R(8R-b*B2=67 SALAMANDER>:b+SURFACE.TENSION?;b+PLATES@;b,STRIPESAĬ;Ĭ*GLIDER.GUNCbL0 LIFE.RULES(Uus SN ('/0@@%LX  HHo ws dkx)ɀ3hh`ILgx 2  (` xxi):0c::b::ޘJJȘ`` s0LsRRRRRRRRRRRRRRRR !!!"""###$$$%%%&&&'''((()))***+++,,,---...///    !"#$%&'()*+,-./  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPP@@00 pp``PP@@00 L LLLH6h`H 6h` ru"8 s`0UH"8`L LL&LH$r tsh`H$r@  0$ 0`L3L`'s8` i` T]ciou{莁莇 `xI   9Is(`  Lg ɍ`@    y; f,JG yK yi y*, yġө yǩ yc y`444443644442450H h`Hόh ` K 14B 4D 0P XD Z cZ2DNT16-I*H<~v<'> L)L?La* &**<=` 11` JJ Lgy  3F`LLI`H05` 2:xZ^50T8Hh5(` ^gxZ^50T8h5( Lg !> @A~ 8 Ҁ Ҡ亠ɠ򠣤 kH ~uh Lp8fp wLY7LL@עL`8 iL LLLg$0 ` $ i` :96758m99:0խ9<:= <` ~m0խ<= < Lg  !"#$%&'()*+,-./01234567 ͍`,,8 i0 80,, %+1L ͍`8 iw}膃膉膏膕膛膡LmL9`,,8 i0 80,, QRTV_ 0 Z0 a0 0 0 \1 u1 1 1 0 1 2 32 |2 3 3 3L3 LR9,-./`*+` =<_Q<=; X0.ŠŠĮӠ٠ٮ 98`,a0br`8 $w8f{0ɠ 򬂠䠢肠󮟠宂à날Š僠儠󮂠킠à䬠Š󮟠뮃砢좠Š󮂠Π_Z_ZŮ_Z߇_Š堧ŧŬ傠埠߇ߠZ_Z宂_Z䮂_Z䠤_Z_Z䈠_Z󠰲_Z_Z٢嬠e9 HO eh`\9_9` WM WM  WM  VM WM VM WM  VM WM WM WM VM WM VM WM VMWVWMWVWMWVWMVWVMWVWMVWVMWVWMVWVMt ru k vg9 98 v; 98 ?9 g8@IL@NO `{0)ɀ `f N8D)= Sw @ @ t ~ua8% ^ ~u8v@ 98v`<堯 y0 4ԍ]]])CB ]FjFj$ R98`)l7 k7)i/ k4`` k7"#? k7$%`L^ @ @@ k7&'e9`7 Ů k7()`7@@ ŮҢs >Hs 6h<> k75v50HHHHHUH@HH "h <i0HHHHUH@HH "h #`%LR9$q0`i D3 @`$qp 3@ `3@ ` * ߽ *߽ ߽VWDE߽LZLTVWDEZ[ߠL_ k ]4 6 5 @"p o7 7 7L7*12))q N8,d90q`$q)Jv`<Dž= < < ===t)s ux p* d (Iz`,,JJJJ 2 *) 2*, 22 222)*)2*)*JJJJ2 *`J ` (,) R9${40H"hH "h8̍U""8`D1X` k1+ ɯ  r1 01 k `ŮͭxaMb% =tư 1d9` `,d90 ,@,w`s DrX k ts dk dk Pk${5 ru ve@ ~ubA ]AW@T@X@U@ S@L2@|BFJMY\\ZVWVWVWVWVWVWVWVWVWVWVWVWVWV_ZVWVWVWVWVWVWVWVWVWVWVWVWVWV_ZVWVWVWVWVWVWVW NPBCBCBCBCBCBCBC P^ P P P P PPWVWVWV_PPWV$ ~uM`= N ~uN tr PL%N k @ MLSw== N ~uCN tr> PLfN k@LMO@ N ~uRN tr PLN k N MLSw@= f g Sw N ~uN tr PLN kN M whhL|B@ ru ~uby ~uCy u ]LCM>MDM?M =MLMx8Q NaNP}M>堢 $ ~uOM`= fM ~upM tr $PLM k @ MLSw Pw(` t$ k ~uM M8` ~uM w $ t$Lw>堢 cK tbK` L(`H Lh(` LI< L !LLKL] !Lc< 8<e<?>$?<JH] LK u uh ??`  !"#$술__[__T_TTT____________剠_TTT_T_`4!?!f\f\f\f\ff^f^f^f^Z _Z_Z_Z%_ʕˊ͋ɠ ru ~uby ~u5y ~u~J t ~uJ t onditions __󂠰_LL_枠__T߇_I isplay controls _I__ eighborhod __艠__________䋠_TTT__㮂_____    #  ####H t!H$ i w {wLwP5?>,+*H wh Lw ~uH`,,,L,èLv w HLw" $2X,Y,L v{  vH`II irth / urvival c FG G'GBGEGNGQGTG^GmGI`I`ɠI`ɴɸ쩀,@`,õI`,,µ t`ɠɶI`I` N|Gf`   ##&   ##&     " "'"'""'E LE \LE YLEhhL|BA ru vH( i sE EZFE[F YFLgF k F i tGf u CH u"c tb(H L( h( L/F tGH i tGhf`8f F GFGFL 45e545 E .f @d w kM =t A ` `0;扥Ō卐拥LкMд45Ɖƈ LwE`>f$ ~uE`ʕˊ͋ɠEFFFFFFFFFFEEROXOFFFxHHFF` MhhLF JL SP ,`) f,`0 C f,C%0iiLZD8,,@Љ`?$ ~ucDb q cLq$$Pʊeš塅Lg`$0$ v($PF 5fLMLMLŌM卐LM8L劅4M勅5 4e C @dLBIC*ʊ GGJ~`G@` AC8n{`?```H888h`8iA`_aa_^bb^]cc]i;`,,`)` C f,``,@`,)e`,JJJea`,,C,/$ C f؉,b`Df`eeLCmCDDwBWB_BNRkBqBOeBffx C MhhL|B JLZB LZB \LZB YLZBhhLFAF BG B ^F i  C f g sB,' 'BB(BB BB s&B i C C g qD  C g  kWVWV_PPWVWVWV_PPWVWVWV_PPWVWVWV_PPWVWVWV_PP^PPPPPPNR-a̠ɠƠŠ̠ɠˠ/`>A A 5y CyMyA= f g Sw N ~uO lf tr PL O AR kHO MhhL|B@ Pw N ~uN tr2 PLXO sp kO M? s0 kO M vH`@@@@@ Pw N ~uO tr- PLO AR sp kO M s0 kO M vH`@@@@@)adce` $P MLM X ~uP ŕP M  tPP B,P6HJJJJ) PhH**i P ~uPh)  Pг `報)da ru ~uPLQ)da ru ~uPLQ)da ru ~uP;CB]]ȱB]] u ^ u] s]] ]B` ] B 0 ]B ` u] ^]( ] ]ʎ] u] ^ uL'^] BH)? tȱB$ȱB@ȱBA uh ^L^l@ w@ w u]`($ vPPʆ0$x x], ] ].,] ]]]] ]], ] ]/,] ]]]] ]] y8] ]]]] ]_ rux${5 C e]LLL)CBDE`)JJJ`H123h21` xx:BiZZ [ Z8i   < $ 0ɠ < ɭ< <ȱ <8a宠`  ~uQ[ sɛ`ɕ!ɊɈɋ ʆ L6[ L&[ 8L\<=e<<=<ͱZ=Z!<= Y ru ~uby ~uMy u ]Y~Y+ZY,Z *ZLZ$q) \ P \( \ V` V@ P8f Z Z "[L\Z \ t k $ M`ZMANUAL ȕZZZZZ ѯZ ʢZZeZeZͦZZZ8 v ~uX ~uX ~u8X ~uXX L6Y ~uX ~urX oY ~uX oY w oY ~uX oY ` w0,LxPZHZ0Z Y YY w@󠠮䍍 Pw ~uW ~uy s4W XhhLF@ V`@ ~u7W w {w ~uW w {w ~uW ~uW v ~uWV@ t M`=ЧЛ蠯󍍠󠠠f栠󍍠蠠䠠X ~uU t kU Mhh` @@@`18)@`]ʭ A`,I,,,G tG`> $ s `LB t$` a LB@ VJ% Pw M ~uV M8``> ~u]UUUUU ULT qU FUiUNUNUNUNUNUtUwUU@ L]F A `,I,,,GLv4렿UXVVPV=V=V=V=V=V[V^VjV ŮU@@?@ 0 01 󠲠23468󿠮:󿠠=砽?@  ru ~uS,I ~uS BU ~uT V U uR ~uy lf sR  5ShhL|B TLR` V V,IL X@ `a `11 fSA ġG H 11ţLt(adce`,ɯɠ.򠠠0 (! th(MLM k`ˠ忠ٯΩ k@ Pw M ~uR t Pw(` M` R k4R kLM` ǂR` R `c`e ~uR`<ЧŠ򠧿п f g Sw ~LQH R R hRhLQLPw= hM ~u,Q tr $PL=Q X R ~uPAɯ R ~uA R@ k@4R k@LM hR Q MLMQ%RRhRR! M ~uQ H MhɃJɛFR% &! t"#$ k H"#(ʆ([)$,Q3$ʊ,Q2$0$0!(<='<Pe<<= S` `0 J ,,, Kx Kx xĽ` Ȣ _cec _cYc _cqc _cbc _cnc _c_c _cVc _ckc``,`  <=<,B`H C`h) C`=ߥ=`ii`$@` f E$0 d ` w k =t ` `0ݍ`  D` D`ɠ` f$0 d 0R R0 0!1R!R1!1"2R"R2"2Lol Čnn^l n n` cl n)DFL}l nSlnÍn n ol%#nVl L{lG,NL}lUl"n) m o oblnWln ˶n olL-o^l<o o=Lk`$-0-`-8`s k0 s0h:h;:ȱ:\l:bgʆb`bbgcchc`ch$z9 ;8didƐ$g k=bh k=c`t dkxiƐiƐ$ڼx]x0x( HkF]0( HkG PkF HkJ*G HkJ+***+FG (ke(`P@   0  (  (p  ( ` (  PP  P $0@PP0`igh8f-jbkcgbJb` ,j jj i-ickbješ塅`ca`Ɛ $ккк@ к к к0 к к( к к(p к к( к` к( к кPP к кP к$0(@кPккP0к( ġLg,IR,P$v ^ _$ Sw t$ ~u9g @d qD`=$(eš$8塨$eţ$8壪`hh` v i( ġ` i( ġL4x,кPe w1 f1 f wŤ f11ţ ``$p0L$p0 Ō印扥Ō卐L-11 fġ&Hh&11۩` ru vyy  fLg.I/&'` sg f&%.&0%/&&`)0 00` sg f&%/JJJJ,f`,V<=@A.//.G4P!$<%.$@%.$>%/G2P!$<%.$@%.$>%/G$<%.$@%.>%/( JġLe =t `J11ţLdf` e gL@d w<=<= ` e f g dL@d *id `x`8岅峅eeii$B t $ Ju$ Ju $ Ju$ Ju $ Ju``61 f f ݩ, f fġ11䣐΢O1.I/1GJxK1>?'.I/cȾȾȾȾBJ 10L_bLcJIJ&%.&泘42LcJ5JIJ汘42$0LBc &%/&&Lc c8 *ii8dGBxiC xB BA [b dLg fLgƋƊF .f fƉƈLd11xccdcpcKicc&c.cGccccocJcc%c-cxcccmcXcacGccclcWc`cxcccgc[cscGcccfcZcrc&#3R#R3#3$4R$R4$4%5R%R5%5&6R&R6&6'7R'R7'7(8R(R8(8)9R)R9)9*:R*R:*:+;R+R;+;,R.R>.>/?R/R?/?0L` 5f d%A x<` bl)o[l*o (oLolbl=o k=`+HJJJJ7x*h)Axe*+`3Lf H)JJJ< e<Ý к̀$ ss * ss*I g` w s` =t` kʊ`sH s0hH sh(Hh`( w =t0`$q0$z0`.bj.aj)*$*` xx =tȪ: :,bl8r=r 7r olHH ~uprXr ɛɍɿ8`ɕ$(Ɉ rL~rɯ%@ƠXrXrɮ ɺXr۰%A XrL~rH0AɯXrӱ  $i $`$q qH) q NqhjJJJJ q|q q q$`$i$`! "H q h `xL< e<` @A~ 8 P !> @A~ 8 $  * P !> @A~ 8 u !> @A~ 8  !> @A~ 8 % !> @A~ 8 P !> @A~ 8 u)OBJECTS34Ib(+OSCILLATORSN1bSLOW.PLATESRPP,GLIDER.GUN.2T+SIMPLE.FUSEY*SPARK.FUSE]FIGURE.8_42 aT   p  BDEF ppp w p P !> @A~ 8 &PULSARa$$%RPENTd$$(CHESHIREg$$$AGARj$$&BAKER1n$$&BAKER2r$$p     }MOPQ       t pp pp |       HJKL    }  pp    ~~||p pp  p  SUVW ppp w p P !> @A~ 8 X) w pp  p42 aT \^ XZ[ fh ce `b mop ikl vx G%CLOCKw$$&MANUALzAӬ)  qst suited for the computer. LIFE has been called a computer solitaire game, but you can't win or lose by playing it. LIFE is more of a simulation program than a game. I view it as a window into an alternate universe. LIFE purports to simulate the grof LIFE was introduced to the world through Martin Gardner's "Mathematical Games" column in the October 1970 issue of Scientific American. It does not require any advanced math to play. Although it was played originally on a checkerboard, LIFE is ideally Running LIFELIKE on different model Apple IIs . . . . . 12 64K Apple II, II+, //e; //e 80-column cards; LIFELIKE and extra memory boards; The //gs Introduction The game of LIFE John Conway's game ong up with different rules Alternate Universes . . . . . . . . . . . . . . . . . . 10 Other main menu options . . . . . . . . . . . . . . . . 11 Editing the cursors; The disk menu; Reading or printing the manual; Quit Still lifes; Oscillators; Spaceships; Questions The rules editor . . . . . . . . . . . . . . . . . . . . 7 Changing birth/survival conditions; Display controls; Changing the neighborhood; Disk and print options; Starti . . . . . . . . . . . . 3 Editing the LIFE image; Testing simple LIFE patterns; Instant replay; Cursor control; Printouts; Saving screens to disk LIFE as we know it . . . . . . . . . . . . . . . . . . . 6 paddles or a mouse. None of these extras, however, are required. Introduction . . . . . . . . . . . . . . . . . . . . . 2 The game of "LIFE"; Special features of "LIFELIKE"; Booting up The screen editor . . . . . . .e II computers. It uses the ProDOS operating system, and therefore will run on the Apple //e, Apple //c, Apple //gs, or 64K Apple II or II+. The program takes advantage of Apple //e 80-column cards, extra memory cards, mousetext display, and either game Massachusetts 02173 Your honesty will help keep my price down and will provide you with the latest LIFELIKE version, manual, and technical support (in the form of my phone number). LIFELIKE is a new version of Conway's game of LIFE for all Apply{|}~_____________________________ The program "LIFELIKE" is shareware. Please copy it and pass it around. If you like it, please send $15 (along with your comments and suggestions) to Sean Nolan, 4 Grimes Road Lexington, ______________________________________________________________________________ L I F E L I K E version 2.2 Copyright 1987 by Sean Nolan, Curiously Reptilian Software _________________________________________________wth of cells (bacteria, if you like) on a flat, featureless expanse. For your purposes, LIFE's universe is the display screen of your monitor. This screen is divided up into rows and columns, as is an ordinary checkerboard. Each square, or cell, can be either on (alive) or off (dead) in a given turn. Whether the cell will be alive in the next turn depends on how many cells nearby are also on. Each cell has eight neighboring cells, including diagonal neighbors. If either two or three of these neigIFE patterns and 'run' them. The rules editor, which is described later, makes LIFELIKE unique. This editor lets you modify the rules governing how many neighbors are necessary for birth/death/survival (and a lot of other things too) when LIFE screens arnt is highlighted, press RETURN. You can usually (but not now) get out of a LIFELIKE menu by pressing ESCape. The top two menu choices, "Screen editor" and "Rules editor" are the most important parts of the program. The screen editor lets to draw L | | | Quit LIFELIKE | |___________________________| In this menu, as in any LIFELIKE menu, you move the highlight around with the arrow keys. When the option you wa | Cursor Editor | | | | Disk Menu | | | | Read or print manual | | Screen Editor | | | | Version 2.20 | | Rules Editor | | | |____________________| u should now see the main menu: ______________________ | | _____________________| | | | L I F E L I K E | - 2 - If you have an Apple //e with a 80-column card, you will now be asked whether or not you see stripes on the screen. This is to test whether your Apple //e supports double-resolution graphics (not all do). YoE can be watched at over 50 frames per second. Finally, LIFELIKE can run backwards. Booting up Let's try out a few LIFE patterns. Boot up your LIFELIKE disk and press RETURN twice to get past the bootup screen and the initial help screen. luded for hard copy output. LIFELIKE is fast. Most normal resolution LIFE patterns can run at ten generations per second on a 1 mhz. Apple II. Double-resolution (80 column) LIFE runs, naturally, at about half that speed. With the cycle option, LIFid LIFE neighbors. You can set a maximum age for all cells (LIFE normally has no limit). You can set a "mutation" rate. LIFELIKE has full disk support. You can save both LIFE images and files of LIFE rules onto disk. Printer dump routines are incopular game, gives you control over the LIFE rules. The rules for how many neighbors are necessary for birth, death, or survival are under your complete control. You can also change the rules that determine which of the eight bordering cells count as valhese can produce beautiful and complex images. Another is that LIFE patterns are in some sense unpredictable, in spite of the fact that the rules are purely deterministic. Special features of LIFELIKE LIFELIKE, unlike most other versions of this pcell that has exactly three neighbors will experience a birth in the next generation. These are the only rules. Once the next generation is computed, the process is repeated. One surprising feature of the game of LIFE is that such simple rules as thboring cells are occupied by other live cells, then our cell will survive to the next generation. If a live cell has fewer than two neighbors it dies from isolation. If it has more than three neighbors it dies from overcrowding. In addition, any empty e 'run' in the screen editor. You can get to any part of LIFELIKE through the main menu, but you do not need to. All main menu options can be accessed with a single control character command from within either the screen editor or the rules editor. The screen editor Select the screen editor from the main menu. You should now see: ** * * * ** ** * *** * * * ** * ** * * * ** * * ** es: - 4 - "B" Backs LIFE up one generation. "C" Starts and stops high-speed CYCLEing of LIFE images already viewed. To produce these images you must first advance with "S" or "A". Cursor control ages on a 64K Apple II, II+, or //e. On a 128K machine, LIFELIKE will save 39. With additional memory cards (see details on last page) LIFELIKE can backup or cycle over a thousand generations. Two screen editor commands let you get at these stashed imagay LIFELIKE is able to run backwards, sort of. Since LIFE is not backwards deterministic, LIFELIKE cannot calculate a previous LIFE generation. Instead it saves screen images as it advances through LIFE generations. LIFELIKE will save 16 screen imtterns down, erase the screen and try these, preferably one at a time: ** ** ** ** ** * Now press "R" to randomize the screen, and then "S" to turn it on. Instant repley to advance one LIFE generation. Repeat the "A" key until the patterns have settled down into predictable repeating patterns. You can also press the "S" key to start and stop continuous full-speed LIFE. Once you've got the mechanics of testing pa) to draw cells and button #1 (the solid-apple or option key) to erase them. Testing simple LIFE patterns Draw a simple pattern on the screen, such as * ** or *** or **** or ******* then press the "A" kbar. Cells that are on will go off, and vice versa. If you are using a mouse then you can use the mouse button instead of the spacebar to toggle cells. If you are using game paddles, or have a //e, //c, or //gs, you can use button #0 (the open-apple keyn with a mouse, game paddles, joystick, Koala Pad, or the four arrow keys. The keys I-J-K-M also act as arrow keys, for the convenience of Apple II and II+ users. You can turn a cell on or off by moving the cursor over it and then pressing the spaceells. For your purpose, erase the screen by pressing "E". You can press "R" to randomize it again. Now press "E" again. The screen should be empty except for one lone, blinking orange dot. That is your cursor. You can move the cursor around the screeisting all commands that are available from the current (rules or screen) editor. You can press any key to get out of the help page. Editing the LIFE image Now get back to the screen editor. Your screen should be filled with a random pattern of ce screen editor to flip you to the rules editor. Pressing TAB again will flip you back. If you have an Apple II or II+ without a TAB key, use control-I instead. Try it a few times. Typing "?" from either of these two editors will display a help page, l * Generation 0 0 Survivals Population 768 0 Births Position = 20,20 0 Deaths - 3 - You can press TAB from th* ** ** ** ** * * ** ** * * * * * * * ** *** ** * * * * ** * * * * *** *** * *** * * * * * **** * * ** * ** * * * * * * * ** * * * * *** *** ** * * * ** ** * ** * * * ** * * * ** * * * * * * * * * * * ** LIFELIKE has ten built in screen-editing cursors. Pressing any of the digit keys "0" through "9" will change the cursor shape. The default cursor, #1, is the orange blinking dot. Cursor #0 is blank (useful for taking poloroid pictures of the screen). Cursors numbered 2 through 9 initially have the shapes of common or interesting LIFE patterns. Cursor #3, for instance, is a glider. Erase the screen, then press "3", the spacebar, and the "S" key in that order. You should see the glider 'walking' acrosst back to the screen editor by typing ESCape again. Saving screens to disk You can save pictures of LIFE screens onto disk by typing control-S. You can load them back by typing control-L. When asked for a filename to load or save, you can type "?have changed the printer configuration (and are therefore asked whether you want to save the changes) type "Y" so that the next time LIFELIKE is booted, your printer setup will load automatically from disk. You can now print the screen by typing "P" or ge the hex code for an ASCII carriage return. Hex notation, although cumbersome, gives you maximum flexibility. You can make the distinction between "high" and "low" ASCII codes if you like. Press ESCape to get out of the printer setup menu. If you printout. When typing in the desired string you must type the hex code for the characters. For example, if you want to send five carriage returns to the printer before beginning the image dump, set the initialization string to "8D8D8D8D8D", since "8D" is would like to change, type any printable key (such as space, punctuation mark, a letter or digit) to change what is printed for a particular age cell. An additional option allows you to define an initialization string to send to your printer before are using the generic dump routine, you can choose any six text characters to represent the six colors (including black) of your LIFE image. Move the highlight through the print setup menu with the arrow keys. Once the highlight is over the character youto toggle it. Notice that when the Imagewriter is selected, most of the other menu choices disappear. This is because the lower menu choices are relevant only when using the generic print routine. - 5 - If you e or in color (color requires a color ribbon and an Imagewriter II). The generic printer dump routine prints the LIFE image as text characters. The top option in the printer set-up menu allows you to choose between these two routines. Press RETURN Typing "?" after control-P brings you to a printer set-up menu. LIFELIKE contains two printer dump routines. The first one, for the Imagewriter I or II printer with a super-serial card, produces an attractive graphic image in either black and whitire LIFE image, only half of which will be on the screen at any time. You don't need to remember all of these commands. A help page listing of all of them is only a "?" away. Printouts Typing control-P allows you to print out the LIFE image.ate the image through the display screen. These commands are mainly for the benefit of Apple II and II+ owners, who are unable to display 80-column graphics. If you choose 80-column mode on these machines, you must use the "Z" and "X" keys to see the enty (":" on an Apple II or II+, "-" on a //e, //c, or //gs) rotates the cursor ninety degrees. The key to the right of the rotate key ("-" on an Apple II or II+, "=" on a //e, //c, or //gs) flips the cursor left-to-right. The "Z" and "X" keys rotst-walking glider. You can, however, use two other keys to rotate and mirror-image your cursor. Together, these commands allow you to send gliders in all directions (and what happens when gliders collide?). The key to the right of the "0" (zero) ke the screen towards the south-east. By the way, you can edit the cursor shapes by typing control-E (more about this later). But suppose you want a glider to walk to the north-east, or any other direction? The shape stored in cursor #3 is a south-ea" to see a catalog of all LIFE images you have saved on the disk. If you save an image into a ProDOS subdirectory that does not exist, the subdirectory will be automatically created. There is no (and no need for) a special "CREATE SUBDIRECTORY" command. If you want a particular image to be loaded automatically everytime LIFELIKE is run, just save it as "LIFE.PICTURE". LIFELIKE will then load it instead of producing it's normal initial random screen. LIFE as we know i______________________ | Birth / Survival conditions | |----------------------------------------| | Neighbors 0 1 2 3 4 5 6 7 8 | | ----------------------s you change the laws of physics in your miniature LIFE universe. You can get to it by way of the main menu or by typing TAB (or control-I) from within the screen editor. - 7 - ___________________in the theology of LIFE, I recommend that you get "The Recursive Universe" by William Poundstone (William Morrow & Co., New York 1985, $15.95). This is the book that inspired LIFELIKE. The rules editor The rule editor letlifes there are that are less then n cells in size? Can an oscillator be constructed that has a period of any desired number? Are there LIFE patterns which can have no predecessor and can only appear in generation #0 ? For those who are interested there any way to predict, ahead of time, what happens to a straight row on n cells when it is turned on? Can any LIFE patterns grow without limit? This is assuming, of course, an infinite workscreen. Is there a formula that will tell you how many still ne cell every two generations. This speed is sometimes described as "half the speed of light", since no LIFE pattern can propagate any faster then one cell per generation. Questions For the philosophically inclined, here are some puzzles: Isss the LIFE plane. The glider is the commonest spaceship, which moves one cell diagonally every four generations. The other naturally occurring spaceships are stored as default cursor shapes 5 through 7. These all move orthogonally at the rate of oleft of the screen. Type "S" to turn the pattern on. Oscillators are no fun when still. Spaceships Spaceships are a special kind of LIFE oscillator which come back to their original shape, but not in their original position. Spaceships move acroe as well as some engineered still-lives. Type control-L from the screen editor, and load "OSCILLATORS". An engineered object is a (usually spectacular) form that is unlikely to arise naturally from a random screen, such as the 'wristwatch' in the upper horizontal every other generation, it is said to have a period of two. Other oscillators have periods of 3, 4, and even 14. Naturally occurring oscillators are rarer than still lives, only four are common. The picture file "OSCILLATORS" shows thesemi-stable LIFE objects which flip back and forth between two (or more) states. The "blinker", a line of three cells on, is the commonest one. Each generation the blinker changes from a vertical to a horizontal row, or vice versa. Because the blinker is, CANOE, or AIRCRAFT CARRIER. Cursor #8 is another still-life, the "EATER", named so because a properly positioned eater can absorb an endless stream of gliders shot into it. - 6 - Oscillators Oscillators are s, the "Block", is available as built-in cursor #2. It consists of four live cells arranged in a square. There are an infinite number of still lifes, although only a few are naturally common. Most of these have interesting names, such as MANGO, PONDt Still lifes All random screens will eventually settle down into a constellation of familiar (to LIFE enthusiasts, that is) patterns. Some of these patterns are stable, unchanging forms. These "still lifes" lead to themselves. The commonest one--------------- | | Cell off . . . B . . . . . | | Cell on . . S S . . . . . | |________________________________________| ________________________ | Display controls | ________________ |----------------------| | Neighborhood | | Screen width 80 | |--------------| | Splitscreen Yes | | Y Y Y | riants of LIFE sometimes require a different percentage in order to get a good random primordal soup. "Mutations per generation" selects how many "errors" you want on the screen per generation. This is normally zero. A mutation will appear as a cely between LIFE generations. This will be in addition to the time LIFELIKE takes to compute a generation. "Random fill" chooses what percent of the screen will be filled when a random screenfull is generated. Normal LIFE does best at about 30%. VaWith wraparound off, cells do not grow beyond the screen edges. When wraparound is on, the screen edges are logically connected. Patterns that exit the screen on the right will reenter on the left. "Delay" selects, in hundredths of seconds, the delaplitscreen" selects either mixed text and graphics mode (with population and generation number displayed underneath your LIFE picture) or full screen graphics. "Wraparound" determines what happens when a LIFE pattern reaches the edge of the screen. olumn LIFE is selected on an Apple II, II+, or IIe unable to display 80-column graphics, you will be able to see only half of your image at a time. In this case you must use the "Z" and "X" keys from the screen editor to scroll within your image. "Srab-bag of miscellaneous controls. - 8 - "Screen width" selects either a 40- or an 80-column LIFE screen. Press "4" (for 40-column), "8" (for 80-column), or the spacebar (to toggle) to change the width. If 80-cds to rules that cause either the LIFE pattern to die out entirely or to churn endlessly with chaotic patterns. Interesting LIFE rules require a judicial balance of forces. Display Controls The options on the lower left of the rules editor are a g indicates survival. A dot indicated that the cell will die. Once you've changed a rule, you can press TAB and "S" (for Start) to immediately see how it effects patterns on the screen editor. Changing the birth/death conditions at random usually leaccour, that the cell will stay empty. As things stand, new cells will be born only when they have exactly three live neighbors. The second row corresponds to rules for whether a cell that is already on should survive into the next generation. A "S"n in order for a cell to be born or survive to the next generation. A letter "B" in the top row (refer to rule editor illustration above) means that there will be a birth if an empty cell has that number of neighbors. A dot indicates that no birth will opacebar, or your mouse or game paddle buttons. A few of the rules require numeric input. Each rule is described below in turn. Changing birth / survival conditions The most important rules are those concerning how many neighboring cells must be orules by moving the cursor over the desired rule with the arrow keys, I-J-K-M, mouse, or game paddles. When the rule is highlighted, you can now change it with a keypress. Most rules can be toggled between their two valid states by pressing RETURN, the s | | | | | Mutations/gen 00 | | Y Y Y | | Max cell age none | |______________| |______________________| You can change the life | Wraparound Yes | | | | Delay in sec. .00 | | | | Random fill 25 % | | Y * Y | |______________________| | | l that was born where it should not have, or survived when it should have died. You can change the numbers for "Delay", "Random fill", and "Mutations" by pressing the spacebar (to zero them) or a digit key. Please note that when you type a digit key the new digit rolls in. Changing the mutation rate, for example, from one to two requires you to type "0", "2". "Maximum age for cells". In normal LIFE, a cell can die only because it has to few or too many neighbors. Stable shapes, like the block, cas, but in inverse video: black pixels represent live cells, colored pixels dead ones. "KLEE" was so named because the resulting shapes created out of a random screen reminded me of the spirit of Paul Klee's drawings. These rules are unusual in that of rules (birth if empty cell has two neighbors, no cells ever survive) with some surprises. Try an initial pattern of two live cells side by side in an otherwise empty screen. "INVERSE" is a set of rules designed to display the normal LIFE patternpular variant on Conway's rules. The LIFE34 universe contains still lifes (rare), alternators (common), and at least one spaceship. Unlike normal LIFE, however, LIFE34 seems to have simple patterns which grow forever. "B2" is an absurdly simple setcreen editor, and then press "R"andom and "S"tart. The traditional LIFE rules are on the disk as "NORMAL", so that you can get them back after experimenting with some of the exotic variants below. "LIFE34" (pronounced "life-three-four") is a po screens is itself a challenging game. I have supplied on the disk half a dozen or so rule files that I have found interesting. The best way to sample the rule variants below is to load them from the rule editor with control-L, press RETURN to go to the sows you, by changing the rules, to create 25,165,824 different cellular automata games. The vast majority of these games tend towards either dull predictability or uninteresting chaos. Discovering rules that create interesting order out of initial randomally on bootup. The automatic loading of a rules file follows the system program startup convention, and therefore can be controlled by some program selectors (such as Catalyst or ProSEL). Alternate Universes LIFELIKE all the closed-apple (or option) key is pressed, only the cursor shapes will be saved or loaded. Starting up with different rules You can easily change the default bootup rules for LIFELIKE. Any set of rules saved as "LIFE.RULES" will load automatices when loading. You can, if you wish, load or save only the rules or the cursors by using the open and solid apple keys (or game paddle buttons). If the open-apple key is pressed during loading or saving, only the LIFE rules will be saved or loaded. Ifeen images. Control-P prints out the rules, rather than a LIFE image. - 9 - When you save a rule file onto disk you also save the current cursors. The cursor shapes are brought back from disk along with the rulEE" and "PLATES" are two. Disk and print options The control-character commands that access the disk or make printouts in the screen editor also work in the rules editor. Control-L and control-S allow you to load and save rule files instead of scry count orthogonal neighbors as valid. You can set LIFE to play on a hexagonal grid by turning off two diagonal neighbors. You can make LIFE asymmetric. Several of the RULe files supplied on your LIFELIKE disk specify only orthogonal neighbors; files "KLing cells (orthogonal and diagonal) affect the fate of a cell. You can, if you wish, edit this neighbor list. You can change the active neighborhood by moving the cursor over the desired square and pressing the spacebar to toggle. Some LIFE variants onln exist forever. But in LIFELIKE you have the option of setting a maximum age beyond which no cell will survive. Selecting "0" sets no limit. The highest allowable maximum age is five. Changing the neighborhood In normal LIFE, all eight neighbordiagonal neighbors do not count. All of the above rules are recognizably "Lifelike". They all produce different still lifes and alternators. The rules described below, when used with random fields, do not produce small objects built out of cells. Some of them instead act as simple image processors, or seem to mimic natural processes. - 10 - The "SALAMANDER" rules act as a smoothing algorithm. "SURFACE.TENSION" is a variant of "SALAMANDER". "PLATES"a revision-B (or later) motherboard and an 80-column card. If your card is a regular rather than extended 80-column card, however, you must connect pins 50 and 55 on the card with a wire. There will be no ill effects, unless you try to use the card on a graphics. LIFELIKE does not support the older Apple II 80-column cards such as Videx. The earliest //e's, those with a revision-A motherboard, can't display 80-column graphics, period. In order to display double-resolution graphics, you need both chine you will be able to back up or cycle through only 16 images when in 40-column mode, and only eight when in 80-column mode. //e 80-column cards In order to display 80-column LIFE on a //e you need an 80-column card capable of double-resolutiona minimum of 64K of RAM. If you have a 64K Apple II, II+, or //e without an 80-column card then you will be limited to seeing 40-columns of LIFE image. You can use the Z and X keys to scroll around within your image to see it all. Also, on a 64K maIFELIKE and transfers control to the ProDOS quit code program selector. Running LIFELIKE on different Apple //'s 64K Apple II, II+, or //e LIFELIKE will not run on a 48K Apple II or II+, as the ProDOS operating system requires nter in some other slot than slot 1, you can change the slot by first changing the slot number in the screen editor printer set-up menu (go to the screen editor and type control-P, "?"). - 11 - Quit This exits Lthe software. You also have the option of printing the manual. Unless dire circumstances require it, I recommend that you do not choose the "Read manual in 40 columns" option. It will not look nice. If you wish to print the manual out but have your prits the ProDOS prefix to the subdirectory indicated. You never need to change the Prefix unless you want to save LIFE files on other disks or in subdirectories. Reading or printing the manual This allows you to read the LIFELIKE manual from within ist of all volume names online. "Delete a file" needs no explanation. "Rename a file" allows you to rename a file within a single directory. "Online" lists the names of all ProDOS disks currently in your disk drives. "Set prefix" seume or subdirectory desired. If you wish to see the main catalog of your LIFELIKE disk, simply press return when prompted for a directory name. Pressing return always displays the default (set by Prefix) directory. Pressing "?" instead will give you a l. The disk menu The disk menu can be accessed from the main menu or by pressing control-D from either the screen or rule editor. It contains disk commands that are rarely, if ever, needed. "Catalog". This gives a complete catalog of any volhe same way as you do the LIFE screen, using mouse, arrow keys, I-J-K-M, or game paddles. If you are not using game paddles you can use the keys "2" through "9" to move the cursor to the middle of the cursor shape you want to edit. Press ESCape when done cursors Screen editor cursors numbered 2 through 9 are user definable. They can be edited from the cursor editor, which is accessable either from the main menu or by pressing control-C from either the screen or rules editor. You edit the cursors t is another rule set where only orthogonal (not diagonal) neighbors count. Checkerboard patterns grow like crystals out of a random screen. Where two patterns meet there is a phase conflict. Other main menu options Editing therevision-A Apple //e. If your card is an extended 80-column card and you have a revision-B motherboard, make sure that the jumper pin is on. If it isn't, you won't get double-resolution graphics. LIFELIKE and extra memory boards LIFELIKE will recognize and use up to 2 megabytes of additional memory on a MultiRAM //e, MultiRAM //c, or RAMWORKS board for image backups. It will also use the memory on an Apple II Memory Expansion Card. With 2 meg, LIFELIKE can backup and cycle 1000 generations.  +;ikH ,> UDivide;8 [HH HH " ~TOOLERRORhDhFDD  +;ik g ,B InitialLoadXh\h\XX +;i kH ,> SDivide;8 [HH HH " ~TOOLERRORhDhFDD  ~TOOLERRORhXhXh\h\XX +;i k`,> LongMul";8 [;8H H HH " ~TOOLERRORhXh2,B ReadTimeHex HHHH " ~TOOLERRORh*h,h.h0**k`,A LongDivide";8 [;8H H HH "" ~TOOLERRORh*h,h.h0**k*,@ ReadMouse HHH" ~TOOLERRORh$h&h($$k +;i k2,B GetAbsClamp HHHH+" ~TOOLERRORh*h,h.h0**k2,D GetMouseClamp HHHHevice GetInGlobalsGetInputDevice GetOutGlobalsGetOutputDevice^,> FWEntry ;8 [HHHHH H HH$" ~TOOLERRORhVhXhZh\VV 3g FWEntry GetAbsClamp GetMouseClamp ReadMouse ReadTimeHex LongDivideLongMulSDivideUDivide InitialLoad InitialLoad2 LoadSegNameRestart UnloadSegGetLoc GetErrGlobalsGetErrorD@,7XXXXXXXXXX  TOOLGLUE.A@"_,8CK\S [g t t M  wo megabytes on a //gs memory card is required to backup the full 1024 generations. - 12 - nning LIFELIKE. The Apple //gs LIFELIKE works on the Apple //gs, running two and a half times faster than it does on a //e. Depending on the amount of memory in your //gs, LIFELIKE may be able to back up as few as 63 or as many as 1024 images. T If you are using any of the above memory cards as a ramdisk, however, LIFELIKE will recognize that fact and will not use the additional memory. Your ramdisk will be undamaged. If you want LIFELIKE to use it, delete all files from your ramdisk before ru";8 [;8 H H HH " ~TOOLERRORh]h_h_hche]] +;i k j ,C InitialLoad2%;8 [;8 H H HHH " ~TOOLERRORh`hbhbhfhh``+;ik g ,B LoadSegName";8 [;8 HH HH " ~TOOLERROe 1.1 libraries, the toolerror() function will return the error from the previous tool call. The library and source in this package correct this error. The affected tool calls are: FWEntry, GetAbsClamp, GetMouseClamp, ReadMouse, ReadTimeHex, LongDivide,-------------------------------------- This library also corrects problems with all the calls that have tool glue in ORCA/C -- in the 1.1 library, they don't store the tool error correctly. This means that after using calls which require tool glue with thr is to copy all of the files out of the library folder, then copy them back in one-by-one in alphabetical order. My thanks to Matt Deatherage for finding this bug and tracking down the problem. Mike Westerfield ---------------------------------------ug fix, place the file BUGFIXLIB in the library folder of your ORCA/C system. This file must come _before_ the ORCALIB file, which must, in turn, come before PASLIB (if it is being used) and SYSLIB. One way to be sure the libraries are in the correct orde These files correct a bug in the Restart tool glue subroutine which can cause a crash when compiling some Apple sample code. The source code for the corrected library is provided, along with a library with the corrected source code. To install the b$h$h($$kk",D GetOutGlobals HH " ~TOOLERRORhh k*,F GetOutputDevice HHH " ~TOOLERRORhC GetInGlobals HH " ~TOOLERRORhh k*,E GetInputDevice HHH " ~TOOLERRORh$h$h($$hh k*,E GetErrorDevice HHH " ~TOOLERRORh$h$h($$k", +;ik*,= GetLoc HHH " ~TOOLERRORh(h&h$$$k",D GetErrGlobals HH " ~TOOLERRORhZh\TT+;ikP,@ UnloadSeg;8 [HHH HH" ~TOOLERRORhJhLhNJJ Rh]h]hahche]]+;ik ^,> Restart;8 [;8 H " ~TOOLERRORhThVhV LongMul, SDivide, UDivide, InitialLoad, LoadSegName, Restart, UnloadSeg, GetLoc, GetErrGlobals, GetErrorDevice, GetInGlobals, GetInputDevice, GetOutGlobals, GetOutputDevice and InitialLoad2. You can use this library with provided source in a couple of ways. The easiest is to take the provided BUGFIXLIB and put it in your LIBRARIES directory before ORCALIB or ORCAGLIB, just as Mike says. You can also use MAKELIB to replace the file TOOLGLUE.A in your copies of ORCALIB and ORCAGLIB with the file TOOLGLUE.ord returned xRegExit ds 2 aRegExit ds 2 status ds 2 end **************************************************************** * * GetAbsClamp - returns the absolute device clamp * * Outputs: * Returns a pointer to a record with th eModeEntryPt _FWEntry sta >~TOOLERROR pl2 >yRegExit pl2 >xRegExit pl2 >aRegExit pl2 >status lla addr,yRegExit creturn 4:addr yRegExit ds 2 rec1 work pointer csubroutine (2:eModeEntryPt,2:yRegValue,2:xRegValue,2:aRegValue),4 pha pha pha pha ph2 aRegValue ph2 xRegValue ph2 yRegValue ph2 e following * structure: * * typedef struct FWRec { * int yRegExit; * int xRegExit; * int aRegExit; * int status; * } * **************************************************************** * FWEntry start addr equ ***************************************************** * * FWEntry - Firmware Entry * * Inputs: * aRegValue, xRegValue, yRegValue - registers on entry * eModeEntryPt - call address * * Outputs: * Returns a pointer to a record with th0 * **************************************************************** * ToolGlue start dummy routine end **************************************************************** * * MiscTool - Miscelaneous tool kit * ***********arameter list as InitialLoad(). * * 2. All tool calls now store the tool error number returned * by the toolbox in ~toolError. * * 3. All instances of "~toolError" changed to "~TOOLERROR" * because C is case-sensitive -- Matt Deatherage 9/5/9, 1990 * Byte Works, Inc. * **************************************************************** * * August 1990 * * 1. Restart() has been corrected to expect a single * parameter. In the previous version of the library, * it expected the same p keep obj/toolglue mcopy toolglue.macros case on **************************************************************** * * ToolGlue - Glue routines for tools that return records * * June 1989 * Mike Westerfield * * Copyright 1989erage Developer Technical Support Apple Computer, Inc. rks, Inc. If there is an error in the changes I made, it is my fault. I changed all instances of "~toolError" to read "~TOOLERROR" because C is case-sensitive. I also added glue code for InitialLoad2, which is missing from the 1.1 libraries. Matt DeathA from this library (you can get it by either building the source or by extracting it from BUGFIXLIB). NOTE: I changed some things in this library from what Mike Westerfield sent to me; the resulting code and library are still the property of the Byte Woe following * structure: * * typedef struct ClampRec { * int yMaxClamp; * int yMinClamp; * int xMaxClamp; * int xMinClamp; * } * **************************************************************** * GetAbsClamp start pha pha pha pha _GetAbsClamp sta >~TOOLERROR pl2 >yMaxClamp pl2 >yMinClamp pl2 >xMaxClamp pl2 >xMinClamp lda #yMaxClamp ldx #^yMax pl4 >remainder lla addr,quotient creturn 4:addr quotient ds 4 remainder ds 4 end **************************************************************** * * extern LongMulRec LongMul(); * * typedef struct LongMulReivide start addr equ 1 csubroutine (4:divisor,4:dividend),4 tsc sec sbc #8 tcs ph4 dividend ph4 divisor _LongDivide sta >~TOOLERROR pl4 >quotient ruct LongDivRec { * Longint quotient; /* LongDivRec - Quotient from LongDiv*/ * Longint remainder; /* LongDivRec - remainder from LongDiv*/ * } * **************************************************************** * LongD 1 weekDay ds 1 end **************************************************************** * * IntMath - Integer Math Tool Kit * **************************************************************** * * extern LongDivRec LongDivide(); * * typedef st pl2 >second pl2 >hour pl2 >day pl2 >extra lda #second ldx #^second rtl second ds 1 minute ds 1 hour ds 1 year ds 1 day ds 1 month ds 1 extra ds nth; * char extra; * char weekDay; * } * **************************************************************** * ReadTimeHex start pha pha pha pha _ReadTimeHex sta >~TOOLERROR in hex format * * Outputs: * Returns a pointer to a record with the following * structure: * * typedef struct TimeRec { * char second; * char minute; * char hour; * char year; * char day; * char moxPos lda #mouseMode ldx #^mouseMode rtl mouseMode ds 1 mouseStatus ds 1 yPos ds 2 xPos ds 2 end **************************************************************** * * ReadTimeHex - returns the time nt xPos; * } * **************************************************************** * ReadMouse start pha pha pha _ReadMouse sta >~TOOLERROR pl2 >mouseMode pl2 >yPos pl2 >******** * * ReadMouse - return mouse statistics * * Outputs: * Returns a pointer to a record with the following * structure: * * typedef struct MouseRec { * char mouseMode; * char mouseStatus; * int yPos; * i>xMinClamp lda #yMaxClamp ldx #^yMaxClamp rtl yMaxClamp ds 2 record returned yMinClamp ds 2 xMaxClamp ds 2 xMinClamp ds 2 end ******************************************************************************************** * GetMouseClamp start pha pha pha pha _GetMouseClamp sta >~TOOLERROR pl2 >yMaxClamp pl2 >yMinClamp pl2 >xMaxClamp pl2 Outputs: * Returns a pointer to a record with the following * structure: * * typedef struct ClampRec { * int yMaxClamp; * int yMinClamp; * int xMaxClamp; * int xMinClamp; * } * ****************************Clamp rtl yMaxClamp ds 2 record returned yMinClamp ds 2 xMaxClamp ds 2 xMinClamp ds 2 end **************************************************************** * * GetMouseClamp - returns the mouse clamp * * c { * Longint lsResult; /* LongMulRec - Low Long of result*/ * Longint msResult; /* LongMulRec - High long of result*/ * } * **************************************************************** * LongMul start addr equ 1 csubroutine (4:multiplier,4:multiplicand),4 tsc sec sbc #8 tcs ph4 multiplicand ph4 multiplier _LongMul sta >~TOOLERROR pl4 >lsResult pl4 >msResult startAddr ds 4 dPageAddr ds 2 buffSize ds 2 end **************************************************************** * * extern LoadSegNameOut LoadSegName(); * * typedef struct LoadSegNameOut { * Pointer segAddr; * Word ph2 flag ph2 type _InitialLoad2 sta >~TOOLERROR pl2 >userID pl4 >startAddr pl2 >dPageAddr pl2 >buffSize lla addr,userID creturn 4:addr userID ds 2 ************************************************************ * InitialLoad2 start addr equ 1 csubroutine (2:flag,4:name,2:uID,2:type),4 tsc sec sbc #10 tcs ph2 uID ph4 name *** * * extern InitialLoadOutputRec InitialLoad2(); * * typedef struct InitialLoadOutputRec { * Word userID; * Pointer startAddr; * Word dPageAddr; * Word buffSize; * } * * Matt Deatherage - 9/5/90 * ****artAddr pl2 >dPageAddr pl2 >buffSize lla addr,userID creturn 4:addr userID ds 2 startAddr ds 4 dPageAddr ds 2 buffSize ds 2 end *************************************************************1 csubroutine (2:flag,4:name,2:uID),4 tsc sec sbc #10 tcs ph2 uID ph4 name ph2 flag _InitialLoad sta >~TOOLERROR pl2 >userID pl4 >sttruct InitialLoadOutputRec { * Word userID; * Pointer startAddr; * Word dPageAddr; * Word buffSize; * } * **************************************************************** * InitialLoad start addr equ quotient ds 2 remainder ds 2 end **************************************************************** * * Loader * **************************************************************** * * extern InitialLoadOutputRec InitialLoad(); * * typedef soutine (2:divisor,2:dividend),4 pha pha ph2 dividend ph2 divisor _UDivide sta >~TOOLERROR pl2 >quotient pl2 >remainder lla addr,quotient creturn 4:addr quotient from SDivide*/ * Integer remainder; /* IntDivRec - remainder from SDivide*/ * } IntDivRec, *IntDivRecPtr ; * **************************************************************** * UDivide start addr equ 1 csubrt creturn 4:addr quotient ds 2 remainder ds 2 end **************************************************************** * * extern IntDivRec UDivide(); * * typedef struct IntDivRec { * Integer quotient; /* IntDivRec - equ 1 csubroutine (2:divisor,2:dividend),4 pha pha ph2 dividend ph2 divisor _SDivide sta >~TOOLERROR pl2 >quotient pl2 >remainder lla addr,quotienotient; /* IntDivRec - quotient from SDivide*/ * Integer remainder; /* IntDivRec - remainder from SDivide*/ * } IntDivRec, *IntDivRecPtr ; * **************************************************************** * SDivide start addr lla addr,lsResult creturn 4:addr lsResult ds 4 msResult ds 4 end **************************************************************** * * extern IntDivRec SDivide(); * * typedef struct IntDivRec { * Integer quuserID; * Word fileNum; * Word segNum; * } * **************************************************************** * LoadSegName start addr equ 1 csubroutine (4:sName,4:fName,2:uID),4 tsc sec sbc #10 tcs ph2 uID ph4 fName ph2 sName _LoadSegName sta >~TOOLERROR pl4 >segAddr pl2 >userID pl2 >fileNum pl2 >segNum lla addr,seg********************************************************* * GetErrorDevice start pha pha pha _GetErrorDevice sta >~TOOLERROR pl4 >ptrOrSlot pl2 >deviceType lda #ptrOrSlot e(); * * typedef struct DeviceRec { * LongWord ptrOrSlot; /* DeviceRec - slot number or jump table ptr*/ * Word deviceType; /* DeviceRec - type of input device*/ * } DeviceRec, *DeviceRecPtr, **DeviceRecHndl ; * ******* pl2 >orMask pl2 >andMask lda #orMask ldx #^orMask rtl orMask ds 2 andMask ds 2 end **************************************************************** * * extern DeviceRec GetErrorDevic * Word andMask; * } TxtMaskRec, *TxtMaskRecPtr, **TxtMaskRecHndl ; * **************************************************************** * GetErrGlobals start pha pha _GetErrGlobals sta >~TOOLERROR end **************************************************************** * * TextTools * **************************************************************** * * extern TxtMaskRec GetErrGlobals(); * * typedef struct TxtMaskRec { * Word orMask; _GetLoc sta >~TOOLERROR pl2 >curLevel pl2 >curPattItem pl2 >curPhraseItem lda #curPhraseItem ldx #^curPhraseItem rtl curPhraseItem ds 2 curPattItem ds 2 curLevel ds 2 uct LocRec { * Word curPhraseItem; * Word curPattItem; * Word curLevel; * } LocRec, *LocRecPtr, **LocRecHndl; * **************************************************************** * GetLoc start pha pha pha ds 2 fileNum ds 2 segNum ds 2 end **************************************************************** * * Note Sequencer * **************************************************************** * * extern LocRec GetLoc(); * * typedef stre (4:segaddr),4 pha pha pha ph4 segaddr _UnloadSeg sta >~TOOLERROR pl2 >userID pl2 >fileNum pl2 >segNum lla addr,userID creturn 4:addr userID { * Word userID; * Word fileNum; * Word segNum; * } UnloadSegOutRec, *UnloadSegOutRecPtr ; * **************************************************************** * UnloadSeg start addr equ 1 csubroutinserID creturn 4:addr userID ds 2 startAddr ds 4 dPageAddr ds 2 buffSize ds 2 end **************************************************************** * * extern UnloadSegOutRec UnloadSeg(); * * typedef struct UnloadSegOutRec (2:uID),4 tsc sec sbc #10 tcs ph2 uID _Restart sta >~TOOLERROR pl2 >userID pl4 >startAddr pl2 >dPageAddr pl2 >buffSize lla addr,uputRec { * Word userID; * Pointer startAddr; * Word dPageAddr; * Word buffSize; * } * **************************************************************** * Restart start addr equ 1 csubroutineAddr creturn 4:addr segAddr ds 4 userID ds 2 fileNum ds 2 segNum ds 2 end **************************************************************** * * extern InitialLoadOutputRec Restart(); * * typedef struct InitialLoadOut ldx #^ptrOrSlot rtl ptrOrSlot ds 4 deviceType ds 2 end **************************************************************** * * extern TxtMaskRec GetInGlobals(); * * typedef struct TxtMaskRec { * Word orMask; * Word andMask; * } TxtMaskRec, *TxtMaskRecPtr, **TxtMaskRecHndl ; * **************************************************************** * GetInGlobals start pha pha _GetInGlobals sta >~TOOLERROR p LDA &N1 PHA AGO .E .D &N1 AMID &N1,2,L:&N1-1 PEA &N1 AGO .F .E AIF S:LONGA=1,.F SEP #%00100000 .F MEXIT .G MNOTE "Missing closing '}'",16 MEND MACRO &LAB PL2 &N1 LCLC &C &LAB ANOP AIF S:LONGA=1,.A REP #%00100000 .A &C AMID &N1,1,1 AIF "&C"<=0,.D SEP #%00100000 LONGA OFF .D MEND MACRO &LAB PH2 &N1 LCLC &C &LAB ANOP &C AMID &N1,1,1 AIF "&C"="#",.D AIF S:LONGA=1,.A REP #%00100000 .A AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.G &N1 AMID &N1,2,L:&N1-2 LDA (&N1) PHA AGO .E .B MACRO &LAB LLA &AD1,&AD2 &LAB ANOP LCLA &L LCLB &LA AIF S:LONGA,.A REP #%00100000 LONGA ON &LA SETB 1 .A LDA #&AD2 &L SETA C:&AD1 .B STA &AD1(&L) &L SETA &L-1 AIF &L,^B LDA #^&AD2 &L SETA C:&AD1 .C STA 2+&AD1(&L) &L SETA &L-1 AIF &L,^C AIF &LA^ptrOrSlot rtl ptrOrSlot ds 4 deviceType ds 2 end ******************************************* * GetOutputDevice start pha pha pha _GetOutputDevice sta >~TOOLERROR pl4 >ptrOrSlot pl2 >deviceType lda #ptrOrSlot ldx #def struct DeviceRec { * LongWord ptrOrSlot; /* DeviceRec - slot number or jump table ptr*/ * Word deviceType; /* DeviceRec - type of input device*/ * } DeviceRec, *DeviceRecPtr, **DeviceRecHndl ; * *********************orMask pl2 >andMask lda #orMask ldx #^orMask rtl orMask ds 2 andMask ds 2 end **************************************************************** * * extern DeviceRec GetOutputDevice(); * * type andMask; * } TxtMaskRec, *TxtMaskRecPtr, **TxtMaskRecHndl ; * **************************************************************** * GetOutGlobals start pha pha _GetOutGlobals sta >~TOOLERROR pl2 > #^ptrOrSlot rtl ptrOrSlot ds 4 deviceType ds 2 end **************************************************************** * * extern TxtMaskRec GetOutGlobals(); * * typedef struct TxtMaskRec { * Word orMask; * Word ************************************************ * GetInputDevice start pha pha pha _GetInputDevice sta >~TOOLERROR pl4 >ptrOrSlot pl2 >deviceType lda #ptrOrSlot ldx typedef struct DeviceRec { * LongWord ptrOrSlot; /* DeviceRec - slot number or jump table ptr*/ * Word deviceType; /* DeviceRec - type of input device*/ * } DeviceRec, *DeviceRecPtr, **DeviceRecHndl ; * ****************l2 >orMask pl2 >andMask lda #orMask ldx #^orMask rtl orMask ds 2 andMask ds 2 end **************************************************************** * * extern DeviceRec GetInputDevice(); * * >"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.F &N1 AMID &N1,2,L:&N1-2 PLA STA (&N1) AGO .D .B PLA STA &N1 .D AIF S:LONGA=1,.E SEP #%00100000 .E MEXIT .F MNOTE "Missing closing '}'",16 MEND MACRO &LAB _READTIMEHEX &LAB LDX #$0D03 JSL $E10000 MEND MACRO &LAB _FWENTRY &LAB LDX #$2403 JSL $E10000 MEND MACRO &LAB _GETMOUSECLAMP &LAB LDX #$1D03 JSL $E10000 MEND MACRO &LAB _READMOUSE &LAB LDX #$1703 JSL $E10000 MEND MACRO &LAB _GETABSCLAMP &LAB LDX #$2B03 JSL $E10000 MEND MACRO &lab csubroG,>LIBRARY  TOOLGLUE.AG ":1>nM Tbp  CRO &LAB _GETERRORDEVICE &LAB LDX #$140C JSL $E10000 MEND MACRO &lab _InitialLoad2 &lab ldx #$2011 jsl $E10000 MEND ND MACRO &LAB _GETINGLOBALS &LAB LDX #$0C0C JSL $E10000 MEND MACRO &LAB _GETINPUTDEVICE &LAB LDX #$120C JSL $E10000 MEND MACRO &LAB _GETOUTGLOBALS &LAB LDX #$0D0C JSL $E10000 MEND MACRO &LAB _GETOUTPUTDEVICE &LAB LDX #$130C JSL $E10000 MEND MA0A11 JSL $E10000 MEND MACRO &LAB _LOADSEGNAME &LAB LDX #$0D11 JSL $E10000 MEND MACRO &LAB _UNLOADSEG &LAB LDX #$0E11 JSL $E10000 MEND MACRO &LAB _GETLOC &LAB LDX #$0C1A JSL $E10000 MEND MACRO &LAB _GETERRGLOBALS &LAB LDX #$0E0C JSL $E10000 MERO &LAB _LONGMUL &LAB LDX #$0C0B JSL $E10000 MEND MACRO &LAB _SDIVIDE &LAB LDX #$0A0B JSL $E10000 MEND MACRO &LAB _UDIVIDE &LAB LDX #$0B0B JSL $E10000 MEND MACRO &LAB _INITIALLOAD &LAB LDX #$0911 JSL $E10000 MEND MACRO &LAB _RESTART &LAB LDX #$O .D .B AIF "&C"<>"[",.C PLA STA &N1 LDY #2 PLA STA &N1,Y AGO .D .C PLA STA &N1 PLA STA &N1+2 .D AIF S:LONGA=1,.E SEP #%00100000 .E MEXIT .F MNOTE "Missing closing '}'",16 MEND MACRO &LAB _LONGDIVIDE &LAB LDX #$0D0B JSL $E10000 MEND MACG MNOTE "Missing closing '}'",16 MEND MACRO &LAB PL4 &N1 LCLC &C &LAB ANOP AIF S:LONGA=1,.A REP #%00100000 .A &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.F &N1 AMID &N1,2,L:&N1-2 PLA STA (&N1) LDY #2 PLA STA (&N1),Y AGLDA (&N1),Y PHA LDA (&N1) PHA AGO .E .B AIF "&C"<>"[",.C LDY #2 LDA &N1,Y PHA LDA &N1 PHA AGO .E .C LDA &N1+2 PHA LDA &N1 PHA AGO .E .D &N1 AMID &N1,2,L:&N1-1 PEA +(&N1)|-16 PEA &N1 AGO .F .E AIF S:LONGA=1,.F SEP #%00100000 .F MEXIT .#&worklen+&totallen tcs aif &len=0,.j tya .j rtl mend MACRO &LAB PH4 &N1 LCLC &C &LAB ANOP &C AMID &N1,1,1 AIF "&C"="#",.D AIF S:LONGA=1,.A REP #%00100000 .A AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.G &N1 AMID &N1,2,L:&N1-2 LDY #2 4,.e ldx &r+2 ldy &r ago .h .e aif &len<>10,.g ldy #&r ldx #^&r ago .h .g mnote 'Not a valid return length',16 mexit .h aif &totallen=0,.i lda &worklen+2 sta &worklen+&totallen+2 lda &worklen+1 sta &worklen+&totallen+1 .i pld tsc clc adc return &r &lab anop lclc &len aif c:&r,.a lclc &r &r setc 0 &len setc 0 ago .h .a &len amid &r,2,1 aif "&len"=":",.b &len amid &r,1,2 &r amid &r,4,l:&r-3 ago .c .b &len amid &r,1,1 &r amid &r,3,l:&r-2 .c aif &len<>2,.d ldy &r ago .h .d aif &len<> &len amid &p,1,2 &p amid &p,4,l:&p-3 ago .d .c &len amid &p,1,1 &p amid &p,3,l:&p-2 .d &p equ &totallen+4+&work &totallen seta &totallen+&len &i seta &i+1 aif &i<=c:&parms,^b .e tsc aif &work=0,.f sec sbc #&work tcs .f phd tcd mend MACRO &lab cutine &parms,&work &lab anop aif c:&work,.a lclc &work &work setc 0 .a gbla &totallen gbla &worklen &worklen seta &work &totallen seta 0 aif c:&parms=0,.e lclc &len lclc &p lcla &i &i seta 1 .b &p setc &parms(&i) &len amid &p,2,1 aif "&len"=":",.cf{ cT FWEntry GetAbsClamp GetErrGlobalsGetErrorDevice GetInGlobalsGetInputDeviceGetLoc GetMouseClamp GetOutGlobalsGetOutputDevice InitialLoad InitialLoad2 LoadSegName LongLERRORhh k*,E GetErrorDevice HHH " ~TOOLERRORh$h$h($$k"  +;ik*,= GetLoc HHH " ~TOOLERRORh(h&h$$$k",D GetErrGlobals HH " ~TOOhZh\TT+;ikP,@ UnloadSeg;8 [HHH HH" ~TOOLERRORhJhLhNJJOOLERRORh]h]hahche]]+;ik ^,> Restart;8 [;8 H " ~TOOLERRORhThVhV H HHH " ~TOOLERRORh`hbhbhfhh``+;ik g,B LoadSegName";8 [;8 HH HH " ~TialLoad";8 [;8 H H HH " ~TOOLERRORh]h_h_hche]] +;i k j,C InitialLoad2%;8 [;8 H  +;ikH,> UDivide;8 [HH HH " ~TOOLERRORhDhFDD  +;ik g,B InithXh\h\XX +;i kH,> SDivide;8 [HH HH " ~TOOLERRORhDhFDDH " ~TOOLERRORhXhXh\h\XX +;i k`,> LongMul";8 [;8H H HH " ~TOOLERRORhX2,B ReadTimeHex HHHH " ~TOOLERRORh*h,h.h0**k`,A LongDivide";8 [;8H H Hp HHHH" ~TOOLERRORh*h,h.h0**k*,@ ReadMouse HHH" ~TOOLERRORh$h&h($$k +;i k2,B GetAbsClamp HHHH+" ~TOOLERRORh*h,h.h0**k2,D GetMouseClamDivideLongMul ReadMouse ReadTimeHexRestartSDivideUDivide UnloadSeg^,> FWEntry ;8 [HHHHH H HH$" ~TOOLERRORhVhXhZh\VV,C GetInGlobals HH " ~TOOLERRORhh k*,E GetInputDevice HHH " ~TOOLERRORh$h$h($$k",D GetOutGlobals HH " ~TOOLERRORhh k*,F GetOutputDevice HHH " ~TOOLERan change the order be deleting the library files and copying them back in, one by one, in the correct order.s. Link errors. This is almost always caused by the libraries appearing in the wrong order in the libraries folder. The ORCALIB library must come before PASLIB (if it is in use) and SYSLIB, and PASLIB must come before SYSLIB for proper linking. You cn more RAM, though, including: Modify Apple's toolbox header files so they don't include any .h file except types.h, switch to the text-based system for large compiles, be sure your RAM disk is set to 0K, and remove any unneeded desk accessories or driver Out of memory errors. GS/OS and the new libraries require more memory that their older counterparts, so some programs that would compile before won't compile on a machine with the same amount of memory. There are some things you can do besides invest ie all occurrences of wmWhere with where, and all occurrences of wmMessage with message. For information about the changes made in this version, see the RELEASE.NOTES file that was copied to the ORCA.C disk (the disk labeled Desktop System). Trouble? g a 1.25M system, you will need to use the text-based environment to compile some of the large desktop applications, like REVERSI and MINICAD. Also, Apple has changed a few names in the toolbox header files. In both REVERSI and MINICAD, you should replacs - GS/OS 5.02 System Disk #2 :C.1.1.Update - Orca/C 1.1 Update Disk Finally, a repeat of the end of the Installation Instructions: The last step is optional. If you like, you can recompile the various samples on the samples disk. If you are usinmy scripts (naah, couldn't happen :-)... really, I tested them!). Next, the required disks. Other than the COPIES of your ORCA/C distribution disks, the scripts will ask you for the following disks: :System.Disk - GS/OS 5.02 System Disk #1 :System.Toolks could cause errors while in the Installer and more than likely will mess up your copies of ORCA/C 1.1. Also, this update should NOT be done to your master 1.0 disks. Perform it ONLY on copies of your distribution disks just in case there IS an error in  one else had volunteered any scripts, I made some. First, some warnings. I made these scripts (one for each disk) strictly to update version 1.0 disks to version 1.1 using the ORCA/C 1.1 Update Disk and GS/OS System Disk version 5.02. Using any other disWell, to quote the Instructions, "Welcome to ORCA/C 1.1, the latest version of ORCA/C." When I first saw the instruction sheet, I thought it seemed rather complicated and decided that what was needed was for the Installer to have to do this work! Since noRORh$h$h($$kSCRIPTSuHUSTON!'  'C.1.1.BOOT.DISK -!C.1.1.DESKTOP-:: 4:Delete System:Fonts:Times.10 ~:::Workspace::: 4:Delete System:Fonts:Times.12 ~:::Workspace::: 4:Delete System:Fonts:Venice.14 ~:::Workspace::: 4:Delete System:Fonts ~:::Workspace::: 4:Delete System:FSTs:Pro.FST ~:::Workspace::: 4:DSystem:Fonts:Geneva.10 ~:::Workspace::: 4:Delete System:Fonts:Geneva.12 ~:::Workspace::: 4:Delete System:Fonts:Helvetica.10 ~:::Workspace::: 4:Delete System:Fonts:Helvetica.12 ~:::Workspace::: 4:Delete System:Fonts:Shaston.16 ~:::Workspace:stem:Drivers:Modem ~:::Workspace::: 4:Delete System:Drivers ~:::Workspace::: 4:Delete System:Fonts:Font.Lists ~:::Workspace::: 4:Delete System:Fonts:Courier.10 ~:::Workspace::: 4:Delete System:Fonts:Courier.12 ~:::Workspace::: 4:Delete orkspace::: 4:Delete System:Drivers:Console.Driver ~:::Workspace::: 4:Delete System:Drivers:ImageWriter ~:::Workspace::: 4:Delete System:Drivers:Printer ~:::Workspace::: 4:Delete System:Drivers:Printer.Setup ~:::Workspace::: 4:Delete Sykspace::: 4:Delete System:Tools:Tool032 ~:::Workspace::: 4:Delete System:Tools ~:::Workspace::: 4:Delete System:Desk.Accs ~:::Workspace::: 4:Delete System:Drivers:AppleDisk3.5 ~:::Workspace::: 4:Delete System:Drivers:AppleDisk5.25 ~:::Wrkspace::: 4:Delete System:Tools:Tool025 ~:::Workspace::: 4:Delete System:Tools:Tool026 ~:::Workspace::: 4:Delete System:Tools:Tool027 ~:::Workspace::: 4:Delete System:Tools:Tool028 ~:::Workspace::: 4:Delete System:Tools:Tool029 ~:::Wororkspace::: 4:Delete System:Tools:Tool019 ~:::Workspace::: 4:Delete System:Tools:Tool020 ~:::Workspace::: 4:Delete System:Tools:Tool021 ~:::Workspace::: 4:Delete System:Tools:Tool022 ~:::Workspace::: 4:Delete System:Tools:Tool023 ~:::Wo:Workspace::: 4:Delete System:System.Setup ~:::Workspace::: 4:Delete System:Tools:Tool014 ~:::Workspace::: 4:Delete System:Tools:Tool015 ~:::Workspace::: 4:Delete System:Tools:Tool016 ~:::Workspace::: 4:Delete System:Tools:Tool018 ~:::Wthe ones Byteworks ships now. Once you have a floppy-based version, you can update your hard disk. ~:::Workspace::: 4:Delete ProDOS ~:::Workspace::: 4:Delete System:System.Setup:Tool.Setup ~:::Workspace::: 4:Delete System:System.Setup:TS2 ~:: disks! You may need them sometime in the future.\\ :System.Disk~* These install scripts follow the ORCA/C 1.1 Installation Instructions (yellow sheet) that came with the ORCA/C 1.1 Update Disk. When done, they will have made a set of disks identical to SCRIPT V1.10 Xn Orca/C v1.1 :BOOT.DISK Update This script updates an Orca/C v1.0 Boot Disk to GS/OS v5.02. Files will be removed. Before using these scripts, make a copy of the three disks that came with your ORCA/C package. Never change the originalelete System:FSTs:Char.FST ~:::Workspace::: 4:Delete System:FSTs ~:::Workspace::: 4:Delete System:Start.GS.OS ~:::Workspace::: 4:Delete System:GS.OS ~:::Workspace::: 4:Delete System:Error.Msg ~:::Workspace::: 2:Copy ProDOS ProDOS ~:::Workspace::: 2:Copy System:FSTs:Char.FST System:FSTs:Char.FST ~:::Workspace::: 2:Copy System:FSTs:Pro.FST System:FSTs:Pro.FST ~:::Workspace::: 2:Copy System:Drivers:AppleDisk3.5 System:Drivers:AppleDisk3.5 ~:::Workspace::: 2:Copy System:DriverSCRIPT V1.10 Xn Orca/C v1.1 :ORCA.C Update This script updates an Orca/C v1.0 Desktop System disk to v1.1. Files will be removed. Before using these scripts, make a copy of the three disks that came with your ORCA/C package. Never change the originalWorkspace::: 2:Copy System:GS.OS System:GS.OS ~:::Workspace::: 2:Copy System:Error.Msg System:Error.Msg ~:::Workspace::: 2:Copy System:GS.OS.Dev System:GS.OS.Dev ~:::Workspace::: 2:Copy System:ExpressLoad System:ExpressLoad ~~ without causing an error. (Creating the CDevs folder) ~:::Workspace::: 2:Copy System:CDevs:General System:CDevs:General ~:::Workspace::: 4:Delete System:CDevs:General ~:::Workspace::: 2:Copy System:Start.GS.OS System:Start.GS.OS ~:::e Desk.Accs folder) ~:::Workspace::: 2:Copy System:Desk.Accs:CtlPanel.NDA System:Desk.Accs:CtlPanel.NDA ~:::Workspace::: 4:Delete System:Desk.Accs:CtlPanel.NDA ~* Note: The following is the only way I could find to create an empty directory tem:Fonts:Shaston.16 System:Fonts:Shaston.16 ~:::Workspace::: 2:Copy System:Fonts:Venice.14 System:Fonts:Venice.14 ~* Note: The following is the only way I could find to create an empty directory without causing an error. (Creating thls:Tool029 ~:::Workspace::: 2:Copy System:Tools:Tool034 System:Tools:Tool034 ~:::Workspace::: 2:Copy System:Fonts:FastFont System:Fonts:FastFont ~:::Workspace::: 2:Copy System:Fonts:Font.Lists System:Fonts:Font.Lists ~:::Workspace::: 2:Copy Syspace::: 2:Copy System:Tools:Tool026 System:Tools:Tool026 ~:::Workspace::: 2:Copy System:Tools:Tool027 System:Tools:Tool027 ~:::Workspace::: 2:Copy System:Tools:Tool028 System:Tools:Tool028 ~:::Workspace::: 2:Copy System:Tools:Tool029 System:Toostem:Tools:Tool021 System:Tools:Tool021 ~:::Workspace::: 2:Copy System:Tools:Tool022 System:Tools:Tool022 ~:::Workspace::: 2:Copy System:Tools:Tool023 System:Tools:Tool023 ~:::Workspace::: 2:Copy System:Tools:Tool025 System:Tools:Tool025 ~:::Worksystem:Tools:Tool016 ~:::Workspace::: 2:Copy System:Tools:Tool018 System:Tools:Tool018 ~:::Workspace::: 2:Copy System:Tools:Tool019 System:Tools:Tool019 ~:::Workspace::: 2:Copy System:Tools:Tool020 System:Tools:Tool020 ~:::Workspace::: 2:Copy Sy System:System.Setup:Sys.Resources System:System.Setup:Sys.Resources ~:::Workspace::: 2:Copy System:Tools:Tool014 System:Tools:Tool014 ~:::Workspace::: 2:Copy System:Tools:Tool015 System:Tools:Tool015 ~:::Workspace::: 2:Copy System:Tools:Tool016 S System:System.Setup:TS3 System:System.Setup:TS3 ~:::Workspace::: 2:Copy System:System.Setup:CDev.Init System:System.Setup:CDev.Init ~:::Workspace::: 2:Copy System:System.Setup:Resource.Mgr System:System.Setup:Resource.Mgr ~:::Workspace::: 2:Copy :System.Tools:System:Drivers:UniDisk3.5 System:Drivers:UniDisk3.5 ~:::Workspace::: 2:Copy System:System.Setup:Tool.Setup System:System.Setup:Tool.Setup ~:::Workspace::: 2:Copy System:System.Setup:TS2 System:System.Setup:TS2 ~:::Workspace::: 2:Copy etup System:Drivers:Printer.Setup ~:::Workspace::: 2:Copy :System.Tools:System:Drivers:SCSI.Manager System:Drivers:SCSI.Manager ~:::Workspace::: 2:Copy :System.Tools:System:Drivers:SCSIHD.Driver System:Drivers:SCSIHD.Driver ~:::Workspace::: 2:Copy s:AppleDisk5.25 System:Drivers:AppleDisk5.25 ~:::Workspace::: 2:Copy System:Drivers:Console.Driver System:Drivers:Console.Driver ~:::Workspace::: 2:Copy System:Drivers:Printer System:Drivers:Printer ~:::Workspace::: 2:Copy System:Drivers:Printer.S disks! You may need them sometime in the future.\\ :C.1.1.UPDATE~* These install scripts follow the ORCA/C 1.1 Installation Instructions (yellow sheet) that came with the ORCA/C 1.1 Update Disk. When done, they will have made a set of disks identical to