NNNNNNkp NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNYrO`  `! #@%`')+-/1 3@5`79;=?/C@EGIOQ S@U`WY[]_a Oe`gikmoq s@u`wy{}@` @ ` @ ` @ ` / @ ` ǀ ɠ / @ ` ׀ ٠  @` @`!Aa /Aa!!#A%)+-//3A5a79;?A!CAEaGIKM/SAUaWO`  `! #@%`')+-/1 3@5`79;=?/C@EGIOQ S@U`WY[]_a Oe`gikmoq s@u`wy{}@` @ ` @ ` @ ` / @ ` ǀ ɠ / @ ` ׀ ٠  @` @`!Aa /Aa!!#A%)+-//3A5a79;?A!CAEaGIKM/SAUaWST33 et BIN kETERNAL kLIB kPCOMMAND kSRC k START1_1 k&BOOT BATk=TCOMMAND TOSk>JCDESKTOP INFkOREADME 1 +PtREADME 2 #kQRMD208 ACC'kYONTROL ACCm[. k.. kAS TTPkBCAT TTPk(CC TTPkGREP TTPkAyHD TTPkFMKP BATkKPMKT BATkLPOBJ BATkM%SS TTPkNPUE TTPkcx`@t,O .#HOHN0 NVNF0<=@0<=@0.2.Al@`0.Rn`A / . @0. 0/N'VJ@gD 9./ 9H/Aj /N4 Ap /N40<3`Ar / . @0. 0/N'VJ@g0<3`A< / . @0. 0/N'VJ@g0<=@`L . @0. 0/N pJ@f(A / . @0. 0/N%` 9H"9HЁ/N+F 9H/ 9H"9HЁ/N,8N,N- 9H/N50.J@gN.0<N^NuN^Nu-Dmaxtext=%ld maxrel=%ld copyright 1987 - Mark A. Johnson -L-M not foundNV0<33 <#H#H <D/0<H?NA"<-@0<".H//0<?N>6 2<H//0<?N>6 #H 9H2<H//0<?N>6 #. 9H/0<H?NA#H 9./0<H?NA#& 9./0<H?NA#* 9H"<e& 9&"<e 9*"<d,A /A /N%0<?N3 9H2<H#H0<3A #H0<=@0.2<Al2`0.Rn`0<2.hA22.1`0<=@0."9.HlF`0.Rn`0<"9& A2."9* A2.`0<=@0.2<AlN`0.Rn`0<A2.0<Ao2.Rn!`0<2<AAB2<10<AB2<10<AB2<100<tA2. 9H"9HЁA2.!`nNP-@0<dA2. 9HA2.! 9H".Ё#H 9H2<HJg 9HRH`~0.J@fTAH0<0H?AH0<0H?AH0<0H?N .` @:g @.g @!g``h 9H/N50<N^NuN^Nuassemble %s rskip %s mul declNV 9H/N7=@2< Ag00.2<DAAfA. /A /N%`N^Nupremature EOFNV0.`T0. ?0. ?N``0. 2<.AfN 6?N(`H0. 2<$Af NP=@ 0. ?N'`NP=@ 0. ?N*`P0. ?0. ?N`60. ?0. ?N`NP=@ NP=@ AB0. 00?N*0. ?N)b`0. ?0. ?N`0. ?0. ?NT`0. ?0. ?N`0. ?0. ?N#@`n0. ?0. ?N"`TNP=@ 9 =@ 0. D@"9H A2. 1N)`0. ?0. ?Nt`0. ?N`0. ?0. ?N`NP=@ 9HAx2. !`NP=@ 0. ?N*L`N%v` @$g @*g @ig @agf @ogD @eg @tg @xg @rg @cg| @sgZ @bg @pg @jg @=gR @lg0`tN^NuNVNP=@NP=@0<=@0.2<An.`0.Rn`0.2<4.iAf``0.`0 /N%`(N%v` @lg @wgf @bgH`N^Nucan't adjust a long indexNV0.`X0. 2<vAf200.J@g 00.2<iAfBNP=@NP=@0.2<A2.4< iA2.A?N*`0.2<lAfLNP=@NP=@0.2<.A2.4< iA?N*0.?N*`0.2<oAfNP=@NP=@NP=@0.J@g>0.2<(A2.4< iA2.A?N*0.?N*`*0.2<A2.4< iA2.A?N*`0.2<xAfhNP=@NP=@NP=@0.2<0A2.4< iA2.A?N*0<2.4< iA?N*`0.2<dAfrNP-@NP=@0<<2.A2.4< iA?N*0. 2<lAf .2<H?N* .?N*`N%vN^NuNV0.2<eAf&0 @g @g @gd @g @ g @ g @g``J0.2<uAf6AB0.002.4<iA2.A?N*`N%vN^NuNV0.`0NP=@0.2<A2.A?N*N 6?N(`h0.2<oAfNP=@NP=@NP=@0.J@g>0.2<@A2.4< iA2.A?N*0.?N*`*0.2<A2.4< iA2.A?N*`0.2<xAfhNP=@NP=@NP=@0.2<A2.4< iA2.A?N*0<2.4< iA?N*`V0.2<iAfBNP=@NP=@0.2<A2.4< iA2.A?N*`N%vN^NuNV0.2<aAg0.2<dAf|0< =@0.2<aAf0.2<A=@0. 2<aAf0.2<@A=@NP=@NP=@0.2.4< iA2.A?N*`0.2<sAfFNP=@0. ?N$=@0 . @2<HAf& . @2<HAf 0<`0<N^Nu`0<N^NuN^NuNV 9H/ 9&/N(v 9HA2.!0<?N*0<?N*N^NuNV 9H/ 9*/N(v 9H/ 9&/N(v0.?N*0<?N*N^NuNV . 2<H-@ . 2<H=@ ."9.mA^ /AF /N% . @ .0A22.20HA". A".N^Nuout of bit mapNV . 2<H-@ . 2<H=@ . @ .0A22.20HA2<AN^NuN^NuNV0.A291 9HA29Ry!0<?N*N^NuNV0<=@0.29AlrAxC0.01 0-@A0. 0-@=@ .".2<H"9H A2.10.Rn`0<3N^NuNVA0. 0-@ 9H2<H-@ .2<H"9H A".1 ."9H A".4<H҂1N^NuNV09J@g0.?A^ /N40."9H A"9HRH1 9H"9H谁mA2 /A /N%N^Nuemit %x out of textNV0<=@=@0.2<AlA0.02<dHAf0A0. 0".ЁA2.!`PA0.02<uHAf0Ao0. 0/AB /N40<=@0.Rn`L0.J@g0<?N3N^Nu%s undefined NV0<`?N/ ./N/0<H/N/ . /N/0<H/N/0<H/N/0<H/N/0<?N/N^NuNV0<H-@ ."9H䰁l ./ 9*/N) J@gT .=@ 9H @0.00=@A0. 0/N/ .2<HЁ-@`. .R=@ 9H @0.00?N/`RN^NuNV0<@0<H-@ ."9H䰁l ./ 9&/N) J@g.Jgl .".Ё-@ .".2<Ho&0<?N/t .2<HЁ-@` .".?N/t .-@`( .".Ё-@ ./N/0<@ .R`.0<?N/tN^NuNVA /A /N6 -@Jg0<=@0.2<Al`0.Rn`Ao0. 0JgZA0. 0/A0.0H?Ao0. 0/A8 / ./N4` ./N5N^Nuya.mapw%s %c %ld NV 9H/0.?N909J@g 0.2<A?A /N4N^Nu%x NV0.2<`?N/t0.?N/tN^NuNV .2<H?N/ .?N/N^NuNV .-@ . @0< 0". A2<"0Ё". A2<"0Ё2<HЁ-@ ./ ./0<?0<J?NA Jg0<D@?N30<3A A2<! .2<HЁ-@0<-@-@ . @Jg . @Jg" . @2< HAn .R` .-@ . @Jg" . @2< HAo .R` . @Jg0<".R A . @2<HAf .2<HЁ-@` .A29Ry!`0<A29!0<=@0.2<Alt`0.Rn`0<A2.A0<A2.A1@A2.A1@A2.A@`A0<A #A0<A #A0<A #0<"9 A"9 A"9 A .Jg&0<?0<=? ./ 9/N3 .Jg&0<?0<?NA0<". AN^NuNV . @0(2<Ao< . @A / . @0(H/ . @(H?0<@?NA =@0<". A1@0.2<An 0<D@`0.N^NuN^NuNV0<=@0.2<Al6A0.A2<HAg`0.Rn``0.2<Am0<N^Nu . @2<wHAf*0<? ./0<-@` .2.//N?=@A0.2<A0A2.Rn`0.2<Af0<0A2.Rn0.SnJ@g$A0.0".R A` .N^NuN^Nu0123456789ABCDEFNV0<=@ . 2<Hl0.Rn . D-@ .2<Hl0.Rn .D-@ ./ . /0.?N?* -@0.2<Ag0.2<AJ@g .D` .N^NuN^NuNV . / ./0<?N?* N^NuN^NuNV . / ./0<?N?* N^NuN^NuNV0<-@0.2<Af` . JgR . 2<Jg .".Ё-@ . 2<-@ .2<-@``0<=@ ."<Jf0 . ".c"0.Rn .2<-@`0.J@gZ . ".e . ".-@ .R0.Sn .2<-@ .2<-@` . ".e . ".-@ .R0.2<Af . -@ .N^NuN^Nu P&&0,  l <  "  6""D*" .,T* >2 X   "    0( .>8:    `4f     2&.6 (6 66* $  "( "8 " ( " 2, ( "&" 2 &2\&""&B"$&<& &&    2, ( (j "&,&pf0&0R"   6l, ,$" D  .& *,D**$":"( "  "> && 4   @ ~ֈj$X(` ,O .#ONLNV0.2<Af 9^/N`0<=@0.2.Al`0.Rn`A / . @0. 0/N-@2<Hg& ./N ./Nd`0 . @0. 0/A" / 9f/N `jN^Nurcan't open %s NV ./N6=@2<DAAg 9b/0.?N `N^NuNV .-@ . @0< 0". A2<"0Ё". A2<"0Ё2<HЁ-@ ./ ./0<?0<J?NA J@g0<D@?N0<3A8 A2<! .2<HЁ-@0<H-@-@ . @Jg . @Jg" . @2< HAn .R` .-@ . @Jg" . @2< HAo .R` . @Jg0<".R A . @2<HAf .2<HЁ-@` .A29Ry!`0<A29H!0<=@0.2< Al`0.2<dA=@`0<A>2.4<BH0<A>2.4<BH0<A>2.4<BH0<A>2.4<BH`A>0<HA #^A>0<dHA #bA>0<d2<dAHA #f0<"9f A2<H"9b A2<H"9^ A2<H .Jg&0<?0<=? ./ 9^/N6 .Jg&0<?0<0.H02<HAg`0.2<dA=@``0.2< Am 0<HN^Nu . @2<wHAf*0<? ./0<0.HA -@0<". A2<H". A2<H0.". A2<H0.". A2<H .N^NuN^NuNV .2<Hgx . @0<H02<HAf ./N X . @0<H0Jg" . @0<H0H?0<>?NA0<". A2<HN^NuNVA / . /Aj /N ./Aj /N>N^NuNV .2<Hf 0<D@N^Nu . @0<H02<HAff . @0<HA /0<H/ . @0<H0H?0<??NA =@0.2<Ag 0<D@N^Nu0<=@` . @0<H02<HAf . @0<H0H=@0.". A2<H0HAm . @0<HA /0<`H/ . @0<H0H?0<??NA =@0.2<An00<". A2<H". A2<H0<D@N^Nu0.". A2<H0<=@`J0.2<A". A2<H` 0<D@N^Nu . @0<2.AH02<HA=@ . @0<H02<HAf*0.2< Af ./0< =@?N 0.N^NuN^NuNV . @0<H02<HAoP . @0<HA / . @0<H0HH/ . @0<H0H?0<@?NA =@0<". A2<H0.2<An 0<D@`0.N^NuN^NuNV . R @H=@J@gp0.2<%AfN . R @H=@` .T @0".R A` .-@ .X @ -@ .-@ . @Jg .R @".R A``0< ? .T @0? ./Nx-@`0<? .T @0? ./Nx-@`r0<? .T @0? ./Nx-@`F0.".R A`2`. @og @xg @dgN @sg @cg``0.".R A`|0<". AN^NuNV . 2<Hf 0<D@N^Nu0<=@ . @0<H02<HAfZ0.". A2<H . @0<HA /0<H/ . @0<H0H?0<@?NA =@` . @0<H02<HAf . @0<H02<`HAf . /N X=@ . @0<H0H=@0.2<A". A2<H0.". A2<4.BH` 0<D@N^Nu . @0<H02<HAf*0.2< Af . /0< ?N =@0.2<An 0<D@`0.N^NuN^NuNV . @Jg& . / .R @H?N `N^NuNV0.2< Af0. 2<Al80<-".R A0.?0. D@? ./NxN^Nu`X0. 2< Ao*0.?0. 2< H? ./Nx-@0. 2< HH@2<0A".R A`|0.2<Af0. 2<h` 0. 2<h=@0.J@g"0.?0.? ./Nx-@A00. 2.4<BAH0".R A .N^NuN^Nu0123456789ABCDEFP *. @ .& <j  ,,XZV:x`L$,O .#LOLNNVN0<=@0.2.Ald`0.Rn` . @0. 0 @2<-HAf0<3` . @0. 0/N` 9T/N09J@gA /N40<N^NuN^Nucopyright 1987 - Mark A. Johnson NV 9X-@09\=@ 9P-@0<3\ .#XA / ./N#P2<g\Nm092<EAg0092<#Af N`0<?N ` 9P/N`A4 /N .#X0.3\ .#PN^Nurcan't open NV0<=@0.2<Al2`0.Rn`0<A$ 2.!`A* /A /N#TN^Nuyc.outwNV0.29Ag,0.?09?A6 /N0<309=@Nm0.N^NuN^Nusyntax error, %c should be %cNV09\? 9X/A /N4 0.?0.?0. ? ./N4 A\ /N4Ry092< Ao$A6 /N40<?NN^Nu** %s line %d: too many errors NVNmA /NvJ@gNm092<sAgA /NNw=@2<(Af09?NR`0.?09?N6092<'AmA, /NNm`A" /NvJ@gNw=@0.2< An`0.2<=@0<=@Nw=@2.Ag*`0.Rn`0.A&2.H`0<A&2.HA& /NNm`A 0.002< A=@0<2.A?0<?N'=@0<=@0.29Al2A0.002.Ag`0.Rn``0.29Al0.AN2.1`A /N`0.2<AfD0.2<Af 0<`0<?0.?0.?0.?0<?N " `r0.2<Ag0.2<AfD0. ?0.?0.?0.?0.2<Af 0<`0<?N$4 `AJ /N092<,AfNm`Nm0<N^NuN^Nubad arg decl(declare)NV0<=@A /NvJ@g0<=@`A /NvJ@g.0<=@0.2<AgA /N`XA /NvJ@g0<=@`4A /NvJ@g0<=@Ah /N0.J@gNm0.N^NuN^Nuexternregisteronly local register varstypedefstaticstatic ignoredNV092<sAfBA309002<Af$A;0900=@Nm`0<=@=@A /NvJ@g0.2<A=@Nm`fA /NvJ@g0.2<A=@Nm`6A /NvJ@g0.2<A=@Nm```jA /NvJ@g0<2.A=@Nm`Ar /NvJ@g0<2.A=@Nm`AH /NvJ@g0<@=@Nm`|A$ /Nv=@J@fA /NvJ@g"0<P=@0.?N"L=@`(0.J@g0<2.A=@` 0<D@N^Nu0.?0.?0.2<PAf 0<`0<?N'=@0.J@g<092<*Af,0.?0< ?0<?N'=@Nm`0.N^NuN^NulongunsignedshortintcharvoidunionstructNVNm092<]Af20.2<Af0<=@ <-@` 0< =@`2A /N'0.2<Af 0< `0<=@0<]?Nt092<[Af0. ?0.?N=@ ./0. ?0.?0<?N' N^NuN^NuNV0<?0. ?0<0?0<?N'?0.?NNm0. 2<Af 09ݼ=@0<330<?0<?N'=@092<)AgX0<s?Nt=@0<?0<?0.?0.?0<?N " 092<,AfNm`Nm0<?N J@g`N!092<{Af:0<A32.10. ?0.?N(0<=@` 0<=@0.3ݼ`0<)?Nt0<=@0.N^NuN^NuNVA30.00`\0. A32.10. A;2.1`@A$ 0. 0/A, /N` @g @g`N^Nuredeclare %sNV0.?NzNm092<{AfX0<3m3mNm092<}Ag"Nz092<,AfNm`NmN)L`J092<"Af4AF09 0/0<D@?NNm`NzN^NuNV092<&Af 0<`0<=@J@f092<sAf80.J@gNm09?N00<s?Nt`n092<"Af09?NnNm`BA /N'J@g .2<H?N .?NN^NuNVA 0.00=@`.0<N^Nu0.2<AJ@g 0<N^Nu0<N^Nu` @g @ g`N^NuNV0<D@?0.?NN^NuN^NuNVA 0.00=@`(0<N^NuA /N0<N^Nu`* @@g @0g @g @Pg @ g0.2<AJ@g 0<N^Nu0.2<AJ@g 0<N^Nu0.2<AJ@g 0<N^Nu0. 2<Ao(A$ 0.  0/A. /N0<N^NuN^Nustruct assign nyiundefined symbol, %sNV0<=@0.29Al`0.Rn`A0.002.AfXAN0.00". A0A0.00". A0A0.00". A00<N^Nu`A30.00`hA;0.00". A0`^A$ 0. 0/AR /N0<?0<?N'". A0` @g @g`0<N^NuN^Nu%s undefinedNV0<=@0.29AlH`0.Rn`A0.002.AfAN0.00N^Nu`A30.00`A;0.00N^Nu` @g @g0<?0<?N'=@0.?0<0?0<?N'N^NuN^NuNVA 0.00`A 0.2<AA -@A 0.2<A00?N(". A"//0<?N. -@`pA 0.2<A00=@Aݾ0.00-@`40.?N-@` @Pg @g2` .N^NuN^NuNV0<=@0.29AlD`0.Rn`A0.002. AfA /N`0. A2910. AN2910.2<Af0.J@gD0.2<An6092<Ao&Sy09A291`T092.A?N%309D@A2910<A291Ry092<AmA$ /NN^Nuarg redeclaredtoo many localsNV0<=@0<=@0.29Al~`0.Rn`0.A2.10<A2.1AN0.00?N(=@0.2.A?N%=@`N^NuNVNm092<sAfA309002<AfA;0900=@`H09nRyn=@0<D@A2.10<?0.?09?NNm`P092<{Af.09nRyn=@0<D@A2.1`A /N092<{AfNmA0.002<DAAgA /N09=@0<30.?0.J@g 0<`0<?N J@g`0<}?Nt09?N%Aݾ2.10.30.N^NuN^Nubad struct declredefine structNV0. Ap29 10. AX29 10.J@g80.29Ao 0.30<A@29 1`f0. ?N(2<c09?N%309A@29 1092.A3A0.00A(29 109 A2.1Ry 09 2<AmA /NN^Nutoo many fieldsNV0.2<AJ@g 0.Rn0.N^NuN^NuNVA 0. 002< AfA 0. 2<A00=@A 0.002<PAfA 0.2<A00=@A0.00=@0.2<DAAgx`A(0.00=@`Ap0.002.Af:AX0.00". A0A@0.00". A0N^Nu`A$ 0. 0/A, /N0<". A00<". A0N^Nu%s not a field NV09ݼ=@0. A 29ݼRyݼ10.2<Ao 0. A 29ݼRyݼ10.2<Ao 0.A 29ݼRyݼ10.2<Ao 0.A 29ݼRyݼ109ݼ2<XAmA /N0.N^NuN^Nutoo many typesNV0<3NN4=@0.?N:J@g`A0.2<AA -@ . @ ". A A0.002<Af 0<`0<N^Nu`*A* /N <". A 0<N^NuN^Nunot a constantNV0. 30<3 3m3m30<30.?NzNzN0<D@?0<D@?N)Nzv09?NzN)LN^NuNV0<=@0.29mΰAl:`0.Rn`AF0. 0/0.?N`0<3m3mN^NuNVA> /NvJ@gNm0<?N3@=@0. ?0.?N)A /NvJ@gLNDx=@?N{80.?N{ Nm0. ?0.?N)0.=@0.?N{ `A /NvJ@glNmNDx=@?N{ 0<?N3@=@0.?0.?N)0.?N{80.?N{ `A /NvJ@gNmNDx=@?N{ NDx=@NDx=@0.?0.?N)0.?N{ A /NvJ@fA /NNm0<?N3@=@0.?N{80.?N{ 0.?N{ 0<;?Nt`A* /NvJ@gL0. 2<AlA /N0. ?N{8Nm0<;?Nt`A /NvJ@gL0.2<AlA /N0.?N{8Nm0<;?Nt`DA /NvJ@g N/f`"At /NvJ@g0. ?N0`AP /NvJ@gNm2<;Ag`0<?N3=@0<?0.?N?09?N?09?NZ?Nl0<;?NtNzv`VA /NvJ@gNm092<(AgA /N0<?NVNw=@2<)Ag0.?NV`0< ?NVNm0<;?Nt`092<{Afj09=@Nm0<?N J@g`092<}Ag0. ?0.?N)`Nm0.3`<092<;Af Nm`"0<?N30<;?NtN^Nuifelsewhiledowhilebad docontinuecan't continuebreakcan't breakforswitchreturnasmbad asmNVNm0<(?Nt092<;Ag0<?N30<;?NtNDx=@?N{ 092<;Ag0<?N3=@` NDx=@0<;?Nt092<)AgbNDx=@?N{8NDx=@?N{ 0<?N30.?N{80.?N{ ` 0.=@0<)?Nt0.?0.?N)0.?N{80.?N{ N^NuNV09=@Nm0<?N3@=@0<?0.?N?0<?0.?NZ?NlNDx=@?N{8NDx=@=@0<{?Nt092<}AgA /NvJ@gNmA09A /N'NDxA 29Ry1?N{ 092<ȰAmA: /N0<:?Nt``A$ /NvJ@g2Nm0<:?NtNDx=@?N{ `0.?0.?N)`Nm0.?N{80.?N{ 092.AoH09SyA 0900?A09 0/N`0.2.Ag0.?N{80.?N{ N^Nucasetoo many case'sdefaultNV0<(?Nt0.?N3=@0<)?Nt0.N^NuN^NuNV0<3NN4=@09ݼ=@0.J@g40<?0<?NDx?0<?0.?ND =@`(0<?0<?0<?0.?NK"=@0.3ݼ0.N^NuN^NuNVN:?N4=@092<,Af0NmN4?0.?0<?0<?NC=@0.N^NuN^NuNV0.?N4=@092<=Af0<)?NtN:?0.?0<?0<?NC=@`N4=@0<)?Nt`rNmN:?0< ?0<?NC=@`FNmN:?0<?0<?NC=@`NmN:?0<?0<?0<?NC=@`NmN:?0<?0<?0<?NC=@`Ar /NvJ@gNA=@`AT /NvJ@gNm0<(?Nt0<n?Nt=@092<,AfNmN4=@` 0<D@=@0.?0.?0<?0<?NC=@Nm`209=@0.?0<?0<?NC=@Nm`NC>=@NmN:?0.?N@b=@`09?09?AF /N`f @~g @!g @-g @sg @MgX @Pg @*g @&g @(g0 @"g @lg @ng`x09`|0.?0<?0<?0<?NC=@Nm`0.?0<?0<?0<?NC=@Nm`PNA`?0.?0<?0<?NC=@`$Nm092<)Af0<D@=@` N4=@0.?0.?0<?0<?NC=@Nm`Nm09?0.?0<?0<?NC=@0<s?Nt`Nm09?0.?0<?0<?NC=@0<s?Nt`B0.N^Nu`6 @ag @.gb @(g @[g @Mg @PgX``FN^Nusizeoftrap%c (%d) not a factorNVA0. 00`NA0. 2<AA -@`@0. ?0.?0<?0<?NCN^Nu` @g @g`0.`Z . @ Jf 0<`0<". AH `J . @ D". A `4 . @ F". A `` @g @g @g0. N^NuN^NuNVNmN4=@0<]?Nt092<[Af NA``0<=@0.?0.?0<?NCN^NuN^NuNVNm09`zNm0<?N=@0<)?Nt``A /A /A /09?NNm`,A` /N` @sg @(gz`0.?N(-@ ./0<?0<?NCN^NuN^Nubad sizeofNVAx -@0<@ . @.0JgD09". A.0HAf.2<HAN^Nu` .R.`0<N^NuN^Nu|^&EN<>LGSR+-*/%NV092<!Af 0<N^Nu092<-Af 0<N^Nu092<~Af 0<N^Nu0<N^NuN^NuNV09N=@0. A29NRyN10. A29NRyN10.2<Ao 0.A29NRyN10.2<Ao 0.A29NRyN109N2<ȰAmA /N0.N^NuN^Nuout of expr nodesNV09 Ry N^NuN^NuNVA0.00=@0.2<Af8A0.2<A002. Af0. ?N{8`0.?NJ^J@f~0<?0.?0.?0.?NK"=@0.?0.?N?Np0. J@g 0<`0<=@0. ?0.?N6`H0.2<AfR0<?0.?0.?A0.2<A00?NK"=@0<?0.?0.2<A?A0.2<A00?NK"=@0.2<A?0.?0.?0.?NkR=@0.2<A?0.?0.?N?NA0.2<A00=@0. J@f0.?NI=@0.?NZ2<Af0.2<A=@0. ?0.?N6`0.2<AfX0.?0.?0. ?0. J@f 0<`0<?A0.2<A00?ND =@ `0.2< Af80. J@g0.?0.?0. ?0. ?A0.2<A00?ND =@ 0.?0.?0. ?0. ?A0.2<A00?ND =@ `0.?0.?NDx?0. J@f 0<`0<?A0.2<A00?ND =@0.?0.?0. ?0. ?A0.2<A00?ND =@ 0.?N{ `B0.2< Af40. J@g0.?0.?NDx?0. J@f 0<`0<?A0.2<A00?ND =@0.?0.?0. ?0. ?A0.2<A00?ND =@ 0.?N{ `0.?0.?0. ?0. ?A0.2<A00?ND =@ 0.?0.?0. ?0. ?A0.2<A00?ND =@ 0. N^NuN^NuNV0.2<Af 0<N^Nu0.2<Af 0<N^Nu0.2<Af 0< N^Nu0.2<Af 0<N^Nu0.2<Af 0<N^Nu0.2< Af 0<N^NuN^NuNVA0.00=@A0.2<A00=@0.2<Af&0.2<Am0.2< An 0<N^Nu0.2<Af0.2<Af 0<N^Nu0.2< Af 0<N^Nu0.2< Af 0<N^Nu0<N^NuN^NuNV0. 2<Al0. 29AmA 0 /NA0.00=@A0.2<A00=@A0.2<A00=@A0.2<A00=@0.?NJ^J@g0. ?0. ?NDx?0<?0.?ND =@0. ?0<H/0<?N|NDx=@?N{80.?N{ 0. ?0<H/0<?N|0.?N{ 0<?0<?N'=@` h0.H`0.2<Af 0<`0<?0<?N'=@0. ?0.?0.?0.?N?N|`0. ?0. ?0<?0. ?0. ?0.?NK"?0.?Nc4=@`0. ?0. ?0.?0.?0.2<Af 0<`0<?NYR =@`nA /A /A /0.?N=@0.?0.?N=@2<Af0.J@g0. ?0.?ND`80.J@gA~ /N`0. ?0.?N0.J@g0<=@`0. ?0. ?N<`l0.J@g"0. ?0.?0.?N`B0.J@g0. ?0.?N<`0. ?0.?0.?N`&0. ?0. ?0.?0.?Na=@0.?N=@J@g(0. ?0. ?0. ?0.?N|6`J0. ?0. ?0. ?N0.J@g0<=@`0. ?0. ?N<`t0. ?0. ?0.?N`=@0. ?0<?0. ?0.?N?N~`"0<?0. ?0. ?0.?NK"=@0<?0. ?0. 2<A?0.?NK"=@0.2< Ag0.2< Af20. 2<A?0.?0. ?0.?NV=@`.0. 2<A?0.?0. ?0.?NkR=@0.?N=@0.?NZ=@0.2< Af0.J@g 0<=@0.2<AfD0.2<Am60.2<An(0. ?0. ?0.?0.?NX@`*0. ?0. 2<A?0.?0.?N}00.2<Af(0. ?0. ?0.?0.?Nc4=@``0.2<Af 0<`0<?0.?0. ?0. ?0.?N] =@`0. ?0.?Nf0<?0<?N'=@0.?0< ?0<?N'=@0.J@g0<=@`0. ?0. ?N<`0<?0. ?0. ?0.?NK"=@0. ?0.?0.?N?N}`H0. ?0. ?0.?Nh=@0.J@g0<=@`0. ?0. ?N<`A /0. ?0. ?0.?Nj0 =@0.?N=@J@g(0. ?0.?0. ?0.?N~`T0.J@g0. ?0.?0. ?N0.J@g0<=@`0. ?0. ?N<`:0. ?0. ?NDx?0<?0.?ND =@0<?0. ?0. ?0.?NK"=@NDx=@?N{80.?N{ 0<?0. ?0. ?0.?NK"=@0.?N{ `0.=@0<?0. ?0. ?0.?NK"?N=@0. ?0.?0.?N?0.?NZ?Nl`0<?0. ?0. ?0.?NK"0<?0. ?0. ?0.?NK"=@`0.?AT /N` @g @g @ gV @g @g @ g0 @g @gN @g @g @g. @g& @g @g @g @gt @gl @ g @g @g`B0.J@g0. ?0. ?NvA 0.002<Af6A 0.2<A00?0< ?0<?N'=@0.N^NuN^Nuexpr too complicated®isterunknown node %dNVA 0.002< Af 0<`0<=@A 0. 002< Af 0<`0<=@0.J@g0.J@fxA 0.2<A00?N(=@0. ?N=@0. ?NZ?0.?0.?0.?Nj0.N^Nu`0.J@f0.J@gxA 0. 2<A00?N(=@0.?N=@0.?NZ?0. ?0.?0.?Nj0. N^Nu`(0.?0. ?0. ?0.?NkRN^NuN^NuNV0.?0. ?N[0.2<A?0<?N}0.?0<?N}0<?0. 2<AH/0<?N|0<?0<?N}0.J@g At `Ap /Nx*?N{h0< ?N|0.2<Ao0.?0<?Nh0.?0. ?N\N^Nu_lop_ulopNV0.?0.?N[0. ?Nf=@ 0.J@gA0. 00H`0A0. 2<A00=@A$ 0. 0-@0.?NH=@0.?N{h`A -@0<?0<?A0. 2<A00?N`=@0<?N{`A -@0<?0<?A0. 2<A00?A0. 2<A00?Na=@0<?N{`4A /N` @gx @g @g`A 0.002<0Af"A 0.2<A00=@` ./A /N`,0. ?N{0<?0<?N'=@0. J@g0. ?N|0.2<Ao0.?0<?Nh0.?0.?N\0.N^NuN^Nu*fncfnc[]bad call%s not a functionNV0<=@0<=@0<=@0.2<Al@`0.Rn`0.2. Al0.2.A=@0.2<h=@`0<=@0.2<AlP`0.Rn`0.2.Am0.29Am0.2.A=@0.2<h=@`0.J@g0.?NN^NuNV0<=@0<=@0<=@0.2<Al@`0.Rn`0.2. Al0.2.A=@0.2<h=@`0<=@0.2<AlP`0.Rn`0.2.Am0.29Am0.2.A=@0.2<h=@`0.J@g0.?NN^NuNVA0.002<AfR0.J@g(0<?0. ?0. ?0.?NK"=@A0.2<A00=@A /A /A /0.?N=@0.?0.?N`$=@0.?0.?N=@0.J@g"0.?0.?0.?N`H0.J@g"0.?0.?0.?NZ`0.?0.?0.?N0.J@f(0<?0. ?0. ?0.?NK"=@`0. ?0. ?0.?Nh=@A 0.2<A00=@0.?N=@0.J@g$0. ?0<?0. ?0.?N~0.?0.?N`$=@0. ?0.?0.?N0.J@f$0. ?0<?0. ?0.?N~0.N^NuN^NuNVA 0.002< Af.A 0.2<A00?N(=@`A 0.2<A00=@`20.?A4 /N` @g @ g`0.N^NuN^Nubad indirectionNV0<?0.?0. ?0.?NK"=@0. =@=@0. J@gZA 0.00H`8A 0.2<A00=@`,A* /N` @ g @g`0.?N(=@0<?0.2<A?0.?A0. 00?NK"=@0.?N=@0.?NZ?0.?0.?0.?Nj0.2.Ao$0.?0.?0< ?0<?N}00.2.Af 0.RnA0. 2<A00=@ `0.N^NuN^Nubad indexingNVA0.00=@A0.2<A00=@A0.2<A00=@0. ?N=@0.2<AfA /A /A /0.?N=@0.?0.?N=@0. ?0.?0.?0.?NZ?Nl0.J@g"0.?0. ?0.?NJ`B0.J@g0.?0. ?Nv`0.?0. ?0.?N`*0.2<Af0.?0. 2<A?0.?0.?Na=@0.?N=@0. ?0.?0.?0.?NZ?Nl0. ?0. 2<A?0.?0.?N|`0.2<Af0.?0. 2<A?0.?N`=@0.?N=@0. ?0.?0.?0.?NZ?Nl0.?0<?0. ?0.?N`0.2<Ag0.2<AfA /0.?0. 2<A?0.?Nj0 =@0.?N=@0. ?0.?0.?0.?NZ?Nl0.J@g(0. ?0.?0.?0.?N`A2 /N`A( /N0.N^NuN^Nubad lvaluebad lvalueNV0.209?N @NmN^Nu09?N lNmN^Nu` @g @g`~092<'AfVNw?Nt3#Nw2<'AgA /N0<n3`092<"Af09m3AR09mHA AF29mRym!0<"3Nw=@2<"Ag.0.?NtAR29mRymH`0<AR29mRymH09m2<AmA /N09m2<2AmA /N`"Nw?09?Nv309J@g609?A /09?09?AR /N409N^NuN^Nubad char conststrings too longtoo many strings[%c(%d) %s %d] NVNw=@0.2</Af|Nw=@2<*AfLNw=@0.2 . @.2<HAH02. HAf . @.HH0HN^Nu`0. ?Nw0.N^NuN^Nu++--&&||==!=<=>=<<>>->P M A O E N L G S R a NV ./A /Nw N^NuN^NuNV .R @". R Af> . @2<HAf& . @2<HAf 0<`0<N^Nu`0<N^NuN^NuNV09mJ@g$APSym09mH0H=@`2 9P/N=@0.2< Af09\Ry\0.N^NuN^NuNV0.2HAf .2<Ё-@` .ACd29CbRyCb!`0<ACd29Cb!0<=@0.2<Alt`0.Rn`0<AC2.A0<AC2.A1@AC2.A1@AC2.A@`AC0<A #JAC0<A #JAC0<A #J0<"9J A"9J A"9J A .Jg&0<?0<=? ./ 9J/N .Jg&0<?0<?NA0<". AN^NuNV . @0(2<Ao< . @A / . @0(H/ . @(H?0<@?NA =@0<". A1@0.2<An 0<D@`0.N^NuN^NuNV0<=@0.2<Al6AC0.A2<HAg`0.Rn``0.2<Am0<N^Nu . @2<wHAf*0<? ./0<& " , &2.. ". 4P^  >$.$ b`"NH. &. ,  "">    & p*N&T6 &H$4 F   & $  :   J*":   ..8<          & &                     "6 *$$ ,$ (  (@&004      0  r"" " ~: $ & ( Nd(  ,$(( 0.&,& ,.FB& &2 &&& "" >& 2F0. ,*$ &, , & &,H0p,0F 0& 0(,*,& ".  &" &N,@*."$& $*$$*.$<<>:** ,$"0 ,$\.Z$((&0 >":& &$ :& (4& "J& ,H@N :  (*&L<.*":&""88@dR6: * ."j.     "         V."Lt"4P (&L $ &&&(((2:484**&*2:6.$$28: 0022022* 020*(0,(((6x.$ "> && 4   @~ֈj$*`,O .#ONNV0.2<Af,A / 9#/N40<?N> . @0< 0/A /NA /N0<-@0.2<Af( 9#/A / ./NL `0<=@0.2.Al`0.Rn`A / . @0. 0/N -@2<gZ0.2<Ao . @0. 0-@ ./A / ./NL ./N `0 . @0. 0/A< / 9#/N4 `2N^Nuusage: grep pat file ... rcan't open %s NV . @@JgH.2<AHAm,.2<ZHAn.2<AHA2<aA". A .R`N^NuNV ./0<?A /N JgxA /NA / . /NJ@g@ .Jg ./A4 /NA /A /N`fN^Nu%s: %sNV0<@ . R @@Jg`.". A.0f6.R. . @.02<HAf 0<N^Nu` 0<@`0<N^NuN^NuNV .-@ . @0< 0". A2<"0Ё". A2<"0Ё2<HЁ-@ ./ ./0<?0<J?NA J@g0<D@?N>0<3A A2<! .2<HЁ-@0<-@-@ . @Jg . @Jg" . @2< HAn .R` .-@ . @Jg" . @2< HAo .R` . @Jg0<".R A . @2<HAf .2<HЁ-@` .A29Ry!`0<A29!0<=@0.2<Alt`0.Rn`0<A|2.A0<A|2.A1@A|2.A1@A|2.A@`A|0<A ##A|0<A ##A|0<A ##0<"9# A"9# A"9# A .Jg&0<?0<=? ./ 9#/NX .Jg&0<?0<N^NuycNV0.?0<L?NAN^NuNV0<? . /0.?NA=@2<Ao 0.". A@0.". A`80.? . /A, /09#?N4 0.?N>N^Nucan't open %s (%d) NVA / ./A# /Nx 9#/A# /NN^NuNVA / . /A# /Nx ./A# /NN^NuNV . R @H=@J@g0.2<%Afh . R @H=@0.2<lAf 0<`0<=@J@g . R @H=@0.` .T @0".R A` .-@ .X @ -@ .-@ . @Jg .R @".R A``0.J@g& .-@ .X @ -@ .-@` .T @0H-@0.? ./ ./N , -@`F0.".R A`2`. @og~ @xgv @dgn @sg @cg``0.".R A`b0<". AN^NuNV . -@0.`P0<=@`X0<=@`L0< =@ . 2<Hl0<-".R A . D-@` @xg @og`0<=@ .Jg`& .2.//N-@` .2.//N=@A0.2<A0A2.Rn0<.?0<?NA`z0.J@f0<A2.Rn0.SnJ@g$A0.0".R A` .N^NuN^Nu0123456789ABCDEFNV .2<g\ . @2<HAf ./N ( . @(Jg . @(H?0<>?NA0<". AN^NuNV . @0(2<Ao< . @A / . @0(H/ . @(H?0<@?NA =@0<". A1@0.2<An 0<D@`0.N^NuN^NuNV ./N4=@0.2<DAAf0<N^Nu0. Sn 0<=@0.2. Al`0.2<DAAgP` ./N4=@`0.". A2.Rn0.2< Af``0<". A2. .N^NuN^NuNV0<=@0.2<Al6A|0.A2<HAg`0.Rn``0.2<Am0<N^Nu . @2<wHAf*0<? ./0< && 4   F$d ~ֈ` ,O .#ON*NV0.2<Af 9/N`0<=@0.2.Al`0.Rn` . @0. 0/Av /NvAh / . @0. 0/N-@2<Hg" ./N ./N B`v0<N^NuN^Nu%s rNV0<=@0<=@0.2<Af0<?0.?Nh0<:?N0< ?N0<=@0.2<Al ./N =@2<DAAf`0.Rn ./N =@2<DAAf(0.2<hA2.Rn1`6`.0.2<h2.AA2.Rn10.Rn`R0<=@0.2.AlH`0.Rn`0<?A0.00?Nh0< ?N`0.2<Al(`0.Rn`A /Nv`A /Nv0<=@0.2.AlT`0.Rn`A0.002<h?NA0.00?N`0< ?N`0.2<Ag(0<?0.?Nh0< ?NN^Nu | NV0. 2<Ao$0. 2<A?0.2<h?NhA$0.2<AH0H?NN^Nu0123456789ABCDEFNV0.2<A=@0.2< Am$0.2<An0.?N`0<.?NN^NuNV .-@ . @0< 0". A2<"0Ё". A2<"0Ё2<HЁ-@ ./ ./0<?0<J?NA J@g0<D@?N0<3A8 A 2<! .2<HЁ-@0<H-@-@ . @Jg . @Jg" . @2< HAn .R` .-@ . @Jg" . @2< HAo .R` . @Jg0<".R A . @2<HAf .2<HЁ-@` .A 29Ry!`0<A 29H!0<=@0.2< Al`0.2<dA=@`0<A2.4<BH0<A2.4<BH0<A2.4<BH0<A2.4<BH`A0<HA #A0<dHA #A0<d2<dAHA #0<"9 A2<H"9 A2<H"9 A2<H .Jg&0<?0<=? ./ 9/N .Jg&0<?0<?NA0<". A2<HN^NuNV .2<Hf 0<D@N^Nu . @0<H02<HAff . @0<HA /0<H/ . @0<H0H?0<??NA =@0.2<Ag 0<D@N^Nu0<=@` . @0<H02<HAf . @0<H0H=@0.". A2<H0HAm . @0<HA /0<`H/ . @0<H0H?0<??NA =@0.2<An00<". A2<H". A2<H0<D@N^Nu0.". A2<H0<=@`J0.2<A". A2<H` 0<D@N^Nu . @0<2.AH02<HA=@ . @0<H02<HAf*0.2< Af ./0< =@?N0.N^NuN^NuNVA / . /A /N ./A /NN^NuNV . @0<H02<HAoP . @0<HA / . @0<H0HH/ . @0<H0H?0<@?NA =@0<". A2<H0.2<An 0<D@`0.N^NuN^NuNV . R @H=@J@gp0.2<%AfN . R @H=@` .T @0".R A` .-@ .X @ -@ .-@ . @Jg .R @".R A``0< ? .T @0? ./N-@`0<? .T @0? ./N-@`r0<? .T @0? ./N-@`F0.".R A`2`. @og @xg @dgN @sg @cg``0.".R A`|0<". AN^NuNVA / ./A /N 9/A /NN^NuNV 9/0.?NN^NuNV . 2<Hf 0<D@N^Nu0<=@ . @0<H02<HAfZ0.". A2<H . @0<HA /0<H/ . @0<H0H?0<@?NA =@` . @0<H02<HAf . @0<H02<`HAf . /N 6=@ . @0<H0H=@0.2<A". A2<H0.". A2<4.BH` 0<D@N^Nu . @0<H02<HAf*0.2< Af . /0< ?N=@0.2<An 0<D@`0.N^NuN^NuNV . @Jg& . / .R @H?N`N^NuNV0.2< Af0. 2<Al80<-".R A0.?0. D@? ./NN^Nu`X0. 2< Ao*0.?0. 2< H? ./N-@0. 2< HH@2<0A".R A`|0.2<Af0. 2<h` 0. 2<h=@0.J@g"0.?0.? ./N-@A00. 2.4<BAH0".R A .N^NuN^Nu0123456789ABCDEFP& N&,4H(B"T @ .& <h(  z,,  ZV:xd:cc %1.c d:as d:prg.s yc.out -l d:gem.a rm %1.prg yc.out ren ya.out %1.prg d:cc %1.c d:as d:ttp.s yc.out -l d:lib.a rm %1.ttp yc.out ren ya.out %1.ttp rm %1.s d:cc %1.c ren yc.out %1.s `M,O .#UOUN;NVN,0.2<Ao . @0< 0/NZN&N:N=@H`N+D`N`N$`N,2`N,`N`N!`|N`rN`hN*`^N`T0.?N'(`@0.?N `,N/`"` Mg Kg Pg Hg =g (g 'g 9g| 8gr 7gh 6g^ 5gT 4gJ 3g@ 2g6 1g, 0g" sg qg pg lg ig gg fg eg dgn cgZ bgF``(N^NuNV0<=@0.2<dAlf`0.Rn`0<=@0.2<Al<`0.Rn`0<AU2.d4.҂!``0<3ކ3ބ0<3ތ3ވ0<3z3x0<=@0.2<AlR`0.Rn`0< Aސ2.H0<Aު2.H0<lA2.H`0<#x0<3܎0<=@0.2<Al6`0.Rn`A|0.A /N\`0<A|0N:N^NuNV09ވ2<A3ފ09ފ2<dAo 0<d3ފ0<=@09ތ3ގ09ގ2<Alt0.Aސ29ގH0HA2<PAlP`09ގRyގ`0.A29ގ10.Aސ29ގH0HA=@`0<?0<?N:0<?N;`09ތ=@0.29ގAlv`0.Rn`0<a2.A?A /Aܐ /NA: Aܐ /0<l?Aސ0.H0H? 9/N90 `09ވ=@0.29ފAl`0.Rn`0<?0<2.49ވBA?N:N;0.?A /Aܐ /NA: Aܐ /0<l?0<? 9/N90 `|0<?N;`N;80<3zN^Nu%c..............................%d.....NV09xJ@gN09zJ@g09ވ=@0.29ފAl`0.Rn`09ތ=@0.29ގAl`0.Rn`AU0.d2.Ё 0-@JgRA0.00?0<2.49ވBA?N: ./0.? 9/N `|`N0<?0<?N:09܎H"<d//0<?NL 2<H//0<?NL =@0.?A /Aܐ /NA: Aܐ /0<l?0<? 9/N90 0<?0<?N:N;80<?AU09ބd29ކЁ 0/N'/09ބ?09ކ2<aA?A /NA` A09ކ00?0<29ބ49ވBA?N:0<3z3xN^Nu%d%%%c%d: %sNVAސ0. H0H=@Aު0. H0H=@A0. H0H=@ .2<f,A /0.?0.? ./N90 ` . @02<Af0 . @A /0.?0.? ./N90 `J ./N/-@0.? ./N7t/0.?0.? ./N90 N^NuNV0<=@ ./NE.=@2< AgB0.2 _g @g /g *g -g +g0<". A0 9x". A!@ .#x09܎Ry܎N^NuNVAX /AP /N $-@Jg ./NZN^Nuload fileNV ./AX /NHA / ./NB-@JgN,Aܐ #/ ./N J@gpN-@ . @H=@H`:N-@ . @2<aHA3ކ .2<HЁ/N5 3ބ09ކ?09ބ?N4J@g$ND/09ކ?09ބ?N`N-@Jg ./N5 =@N-@Jg" ./N5 Aސ2.HN-@Jg" ./N5 Aު2.HN-@Jg . @A2.H`` fgD =g`n0<3z3xN ./NA`" ./A /NA`N:NN^Nur can't open NVAX /A /N $-@Jg ./AX /NHA / ./NB-@0<=@0.2<dAl`0.Rn`0<=@0.2<Al`0.Rn`AU0.d2.Ё 0Jg^0<?AU0.d2.Ё 0/N'/0.?0.2<aA?A / ./NA`t`J0<=@0.2<Al`0.Rn`Aސ0.H02< HAf:Aު0.H02<HAfA0.H02<lHAg^A0.H0H?Aު0.H0H?Aސ0.H0H?0.?A / ./NA`B ./NAN^Nusave filew= %c%d %s f %d %d %d %c NVA /Ax /N $-@JfN^Nu ./A /NHA /A /A /A / ./N3J@fN^Nu0</A /N $-@Jg ./Aݼ /NHA / ./NB-@0.=@0.2.An`0.Rn`0.=@0.2.AnJ`0.Rn`AU0.d2.Ё 0/0.? ./N ` ./0< ?NF`~ ./NAN^Nuprint windowfile namewNV0</A /N $-@Jg . @2<aHAm . @2<zHAn . @2<aHA3ކ .2<HЁ/N5 3ބ09ބ2<Al 0<3ބ09ބ2<dAm 0<c3ބ09ކ2<Al 0<3ކ09ކ2<Am 0<3ކNN^Nugo to cellNV09ބ29ވAm809ބ29ފAl&09ކ29ތAm09ކ29ގAm$09ބ3ވ09ކ3ތ0<3xN^NuNV .2<f0<N^Nu . @0H`Z0.?0.?0.?0. ? . @ (/N -@0.?0.?0.?0. ? . @ (/N -@ ./ ./ . @0?Nr N^Nu . @ (2. H2.HЁ=@ . @ (2.H2.HЁ=@0.H/0.H/0.?0.?N4J@g 0<`0<?Nr N^Nu . @ (/ . @ ( / . @ (/ . @ (/ . @0?NrN^Nu`B g( @g /g *g -gx +gn`vN^NuNV0</A! /N $-@JfN^NuA /A /A /A / ./N3J@fN^NuAU09ބd29ކЁ 0-@0.=@0.2.An`0.Rn`0.=@0.2.AnZ`0.Rn`0.?0.?09ކ?09ބ? ./N /0.?0.?N``0<3zN^NudestinationNV0</A! /N $-@JgL . @2<rHAf N!`$ . @2<cHAf N"`N^Nu0<3xN^Nuinsert (row or col)NV0<b=@0.29ބAm`0.Sn`0<=@0.2<Al`0.Rn`0.?0.2<A?0.?0.?AU0.d2.Ё 0/N -@ ./0.?0.2<A?N``\0<=@0.2<Al:`0.Rn`0</0.?09ބ?N`N^NuNV0<=@0.29ކAm`0.Sn`Aސ0.H0Aސ2.4<BHAު0.H0Aު2.4<BHA0.H0A2.4<BH0<=@0.2<dAl`0.Rn`0.2<A?0.?0.?0.?AU0.d2.Ё 0/N -@ ./0.2<A?0.?N``0< Aސ29ކH0<Aު29ކH0<lA29ކH0<=@0.2<dAl:`0.Rn`0</09ކ?0.?N`N^NuNV0</A% /N $-@JgL . @2<rHAf N%"`$ . @2<cHAf N%`N^Nu0<3xN^Nudelete (row or col)NV09ބ=@0.2<bAl`0.Rn`0<=@0.2<Al`0.Rn`0.?0.?0.?0.2<A?AU0.2<Ad2.Ё 0/N -@ ./0.?0.?N``\N^NuNV09ކ=@0.2<Al`0.Rn`Aސ0.2<AH0Aސ2.HAު0.2<AH0Aު2.HA0.2<AH0A2.H0<=@0.2<dAl`0.Rn`0.?0.?0.2<A?0.?AU0.d2.4<BЁ 0/N -@ ./0.?0.?N``N^NuNV0.2<=Ag(0.?A' /A /NA: ` 0<AA /A' /N $#Jg.ND/09ކ?09ބ?N0<3zN^Nu%centerNV0<Aܐ0. ? ./N(Aܐ N^NuN^NuNV .2<fN^Nu . @0=@H`XA+ /A /NA:`A+ /A /NA:` . @A /A+$ /A /NA: `V . @ (? . @ (2<aHЁ?A+( /A /NA: `0<? . @ (/N7t/A+. /A /NA: `0.?N0=@0.2. Al A+2 /Aܐ /NH`0.? . @ (/N( . @0?Aܐ /A+4 /Aܐ /NA:0.? . @ (/N(0.2. Al A+: /Aܐ /NH`0<A`A+< /Aܐ /NH`0. ? . @ (/N(0<A` . @0?A+> /A /NA: `x`t _g~ @g /g *gz -gp +gf g g g gj g>``A /Aܐ /NH`N^NuERRFREE'%s%c%d%s(%s%c)-ERR%dNVA,, /A, /N $-@Jg . @2<yHAf0</09ކ?09ބ?NA09ކ00?0<29ބ49ވBA?N:A,0 /0<l?Aސ09ކH0H? 9/N90 N^Nublank this cellyesNV0<?AU09ބd29ކЁ 0/N'-@ ./A, /N $#Jg.ND/09ކ?09ބ?N0<3zN^NueditNVAު09ކH0H?A. /Aܐ /NA: Aܐ /A. /N $-@JgL ./N5 =@0.2<Ao 0<`0.Aު29ކH0<3zAސ09ކH0H?A. /Aܐ /NA: Aܐ /A. /N $-@JgL ./N5 =@0.2<Al 0<`0.Aސ29ކH0<3xA09ކH0H?A. /Aܐ /NA: Aܐ /A. /N $-@JgN . @2<lHAg . @2<rHAf& . @A29ކH0<3xN^Nu%dfixed decimal%dcolumn width%cleft or right justifyNV0<?0<?N:A/d /NA`0<?0<?N:A/ /NA`N:NN^Nucell entry: type "= expr" or "'label" commands: blank copy delete edit format goto insert load print quit saveNV .2<f <N^Nu . @0H` <N^Nu . @ (N^Nu . @ (=@ . @ (=@AU0.d2.Ё 0/N/N^Nu . @ (/ . @ (/N2N^Nu` . @ (/N/-@ . @ (/N/-@ .".ЁN^Nu . @ (/N/-@ . @ (/N/-@ .".N^Nu . @ (/N/-@ . @ (/N/-@ .".//0<?NL 2<dH//0<?NL N^Nu . @ (/N/-@ . @ (/N/-@ .2<dH//0<?NL ".//0<?NL N^Nu . @ (/N/-@ .DN^Nu`p _g /gX *g -g +gH @g g g g g gN^NuNV <-@ . @02<Af . @02<Af . @ (=@ . @ (=@ . @ (=@ . @ (=@0.=@0.2.An|`0.Rn`0.=@0.2.AnR`0.Rn` .HAU0.d2.Ё 0/N/"LЁ-@`` .N^NuN^NuNV . @2<aHA". A0 .2<HЁ/N5 ". A0 . @Jg .R @2<.HAg` . @Jg> . @2<aHA". A0 .2<HЁ/N5 ". A0`" . @0". A0 . @0". A0 . @0? . @0?N4J@g. . @0? . @0?N4J@g 0<`0<N^NuN^NuNV0.2<Am40.2<dAl&0. 2<Am0. 2<Al 0<`0<N^NuN^NuNV .2<f 0<N^Nu0<=@ .R @H=@?N6J@g 0.2< 2.4<0BA=@`0.N^NuN^NuNV <-@ .2<f <N^Nu0<H-@ .R @H=@?N6J@g6 .2< H//0<?NL 2.4<0BHЁ-@`0.2<.Af .R @H=@0<=@0.2<Alv`0.Rn` .2< H//0<?NL -@0.?N6J@g* .2.4<0BHЁ-@ .R @H=@` .N^NuN^NuNV0.2<0Am0.2<9An 0<`0<N^NuN^NuNV0.2<aAm0.2<zAn 0<N^Nu0.2<AAm0.2<ZAn 0<N^Nu0.2<.Af 0<N^Nu0.?N6N^NuN^NuNV .2<Hl 0<`0<=@J@g .D-@0<=@0<AܐSn2.H .2< H//0<?NL 2<0HЁAܐSn2.H .2< H//0<?NL -@0.2< Af0<.AܐSn2.H .Jg`r0.2< AoH0.2< Af0<.AܐSn2.H`0<0AܐSn2.H`0. 2<Af0<Aܐ2< H`$0. 2<Af0<Aܐ2<H0.J@g0<-AܐSn2.HAܐ0.HA N^NuN^NuNV0.2<rAfl0<=@ . @0.H0Jg`0.Rn``0.2. Al,`0.Rn` ./0< ?NF`0<=@0.2. AlD . @Jg6`0.Rn` ./ .R @H?NF`0.2<lAf:0.2. Al,`0.Rn` ./0< ?NF`N^NuNV0<?NA-@ .2<HJg .N^Nu` .2<HN^NuN^NuNV0<?N;0<Y?N;0.2< A?N;0. 2< A?N;N^NuNV0<?N;0<E?N;N^NuNV0<?N;0<K?N;N^NuNV0<?N;0<J?N;N^NuNV0<?N;0.J@g 0<p`0<q?N;N^NuNV0.?0<?NAN^NuNV . @Jg .R @H?N;`N^NuNV .-@ . @0< 0". A2<"0Ё". A2<"0Ё2<HЁ-@ ./ ./0<?0<J?NA Jg0HAf .2<HЁ-@`009|2<Al .A~29|Ry|!` <A~29|!0<=@0.2<Alt`0.Rn`0<A2.A0<A2.A1@A2.A1@A2.A@`A0<A #A0<A #A0<A #"0<"9" A"9 A"9 A .Jg\0<? ./0<=?NA=@"9 A@0<"9 A0.2<Al0.? ./N@ .Jg . @2<>HAg.0<? ./0<?NA0<". AN^NuNV . @0(2<Ao< . @A / . @0(H/ . @(H?0<@?NA =@0<". A1@0.2<An 0<`0.N^NuN^NuNV0<=@0.2<Al6A0.A2<HAg`0.Rn``0.2<Am0<N^Nu . @2<wHAf*0<? ./0< 4$ "& h  & H48L04  V,>V "    4    Z(8:  0  Z*8 L      b2$fHf > l& (.`&J"Z&>" ("l$ (T$ .  >   .      < 4  .   ( ( DX  &(( "NTpJ$$zR(( B*&XFb"J8 0$D0B$      @~Ђ0&`d &,BNc&`FCLEAR68K V02.00, Copyright(c) 1984, Digital Research XXXX-0000-654321 o#r"h#rE?/ NPN o AdpNu#rBNuNV0/"/ NBrd0< Ad"NB?<NAN^Nu o2/0/ HSoQBNu o0/JfBNuf SNuNV ytBhpN^NuNVH>. JGl0D@>?.aT`n`b ytJhfB yt h *h yu6fB@`B yt!M yt1m  yt(` yt0("ytSi0SGJ@fpJL N^NuNV yt"yt"i 1i pN^NuNVH>. JGl0D@>?.a*T``z yt0("yt"i 2) AfH yt ( "yu6")fB@`J yt"yt"i !Q ytBh yt(` yt0("ytRi0SGJ@fpJLN^NuNV yt"yu6"i!Q ytBh yt(pN^NuNV yt"yu6!i ytBh yt(pN^NuNVHJn l0. D@>?.a|T`l9tf 3u0tyt yt*h `*U0. Sn J@g yu6f yt!M .a? yt1_ yt(pJL N^NuNVHJn l0. D@>?.aLT`r9tf 3u0tyt yt*h `*m0. Sn J@g yu6 (f yt!M .a$? yt1_ yt(pJL N^NuNVH*nBFBD`65@ H>|:| f|`| m|fREREytn <RDm f0JL N^NuNVH>. Jnf yt(H>UGJGn~`*JGl0D@>?.arT`b`0"yt)H> yt*h`*U0SGJ@g yu6f yt!M yt!M ytBh yt(pJL N^NuNVH>. Jnf yt(H>UGJGn~`*JGl0D@>?.aT`h`0"yt)H> yt*h`*m0SGJ@g yu6 (f yt!M yt!M ytBh yt(pJL N^NuNV yt"yt!i  yt"yt1i.e"N,ppN^NuNVH ytJf.e-N,pB@`Z yt*h yt>( yt"yt!i yt"yt1i yt!M yt1G yt(pJL N^NuNVH yu6*Pu2f*U f*yt JL N^NuNVH >//<eDN*PP>|fp`0|f BW?</a\*@ fB@` `az*@.a JL0N^NuNVH *n yu6S(fH yu6"yt!i  yu6"yt1i yu6"yt!i yu6"yt1i#u6 yt!M yt!m yt(-HR-Jf4 yt!m yt1m yt!m  yt1mp`P(yt`Btg8f2 yt!l yt1l yt!l yt1l`(T fpJL0N^NuNVH>//<eXN*PP>|fp`JGf 9u6`BWBg/a\*@ gu2fp` -o.epN,pB@`n -fa(@f(yu2.aD.a>|g0`<.N[.&yt`(K&Sf&S f#t`(.N[.N)pJL8N^NuNVH a>|g0` yu2J(fFNJ*@ fB@`(mS,f)m 9m)m 9m+yu2 yu2R(*yt`< -u2f. yu2 h+P yu2 h+P BmBBm-*U fpJL0N^NuNVnH yu2(.u2ad:|g0`.e/9u2Nb6X.eafJ@g.eaXJ@fB@`&yt`Kn+g*`  B k-P` n0( T@H܀ n-P +f.?< / at\  IffSIJg*` мe` мdHJGfB.naJ@fB@` &S fJpJL8N^NuNVH>. ,.`6SG0G//< /NdPм0 _/< /Nd0P, lSG м02G` SG0G JGfJLN^NuNVH.NbX<>N*@ fB@`xBG` M2G2GQ RGFm yu2 h h yu2 h+h yu2 h!M yu2* yu2 ("yu2")f yu2!MpJL N^NuNVH*yt`-f -gp`*U fB@JL N^NuNVH*n(yt`8.f/ NaXJ@f ,g.eN,pB` `(T fJn g>vNY(@ fB`xBWN&@ f .N[.B`\(t#t)KBlB Bl0.@B,)K.e/ Nb6X./ fNb6X&'K JL8N^NuNVH *n-f -g.eN)>|g0`0-`.N m(Pf+mBmB BmpJL0N^NuNVH>P//<f N*PP>|g0` .aJLN^NuNVH>P//<fN*PP<|g0`*yt`-fv./ NaXJ@fX yu6S(fH yu6"yt!i  yu6"yt1i yu6"yt!i yu6"yt1i#u6 yt!M-HR-Jf2 yt!m yt1m yt!m  yt1m`N(yt`Btg8f2 yt!l yt1l yt!l yt1l`(T f yt&h yt(H>HǏ`&k0SGJ@g yu6 (f yt!K yt(.f%N,pp`6*U f|./aX`D>//<f2N*PP<|f0`JFf./atX`BWBg/N \*@ f f.BW?</N \*@ f.f`N,pB@` yu6S(fH yu6"yt!i  yu6"yt1i yu6"yt!i yu6"yt1i#u6 yt!M yu6(H"yu6R).a JL8N^NuNVH-yu6.N <|g0`d n(./.Nb6X.N<|gܼ|f.fuN,p`.fN,pBnB`l>N*@ f|`x0.T@HѮ yu6 h(h( yu6*+L yu6 h!MBG` M2G2Gi RGnmRn.]?</N\<JFgvN|f>/./<fN,pP&yt`< +u6f. yu6 h'P yu6 h'P BkBBk+&S f|fB@`pJL8N^NuNVH *n `RJf`S g -:g -\f(n` .мg Jg ;fBJL0N^NuNVH>P//<fN*PP>|g0`^.a>|fH./9u6Nb6X yu6(*yt` -u6f-*U f0JL N^NuNVH yu6(fp`` yu6J(f.fN,pB@`D.u6a@>|f, yu6(*yt` -u6f-*U f0JL N^NuNVH.N@>JGgB@` yu6 h*PBF0F-H`00- =@>/  NX>JGfRF0.T@HѮ*U yu6fJGf"N>JGf>/./<fN,pP`NJGgB@`pJL N^NuNVH>P//<fN*PP>|f0`^JGf.f/9u6Nb6X`./9u6Nb6X*yt` -u6f-*U fpJL N^NuNV0<@3f>NY#tJtf#rt3fB@3f3f3rN^NuNV 9trg .tN[.B@3f3f3r3fN^NuNVBW/.?<=Nd\3rlp` aPBytB@N^NuNV./Nb6XBW/?<r?<>NdTaB@N^NuNVH*nBG`^0yftRyf09fyff:.t0yf/?9r?<@NdPJl.g!N,pp`&ByfRGn mfg*|f=| `B@JL N^NuNVHBG09fyff,.t0yf/?9r?<?NdP3fByf09fyfl`0yftRyf< fRytJGo0G ( fSG`*0GRGn f>t/<g1N,pX``Z0GB n009fyfo.gPN,pp`"JyffJGg.g`N,pp`p`B@JLN^NuNVH>.<||JFf|>WNY*@ f>/<gN,pXB` ;F;G JL N^NuNVH*n&yt`(f'U f'U Bkf'UBk&S f(yt`$J,ff)UBl f)U Bl(T f m U!m.N[.JL8N^NuNVH>. yu6 (g~ yu6(f| yu6(*yt` -u6f 0-A*U fJL N^NuNVH>a yt&h yu6f ytJhg.gN,pB@`>af-@fB@`-k n n 'n n!nBF`0. 2F@ RFnm yt!n yt1np` yt>(0+ nko> 0.Wa-@fB@`^K (n ` 2HЁм f0.H` 2+ HЁм f k n S!n n!k.N[.`@-K0."ni (K0+ H *L0.H`% 2HЁм fBF`0. 2G@ RFnm-yt`~ nf n!n n f, n!n .tg nhl 0."ni nf n!n nhl 0."ni n-PJf~pJL8N^NuNVH>a: yt&h yt>(>a:-@fB@`K (n ` 2HЁм fI ` 2+ HЁм fk n!k'n n h n -yt`r nf n!n n f nho n!n ` 0"ni nf nho n!n` 0"ni n-PJfpJL8N^NuNVH`F yt&h yt>( yu6fB@`*<+ Gno<.JFf0>aaJ@gJn g> aJ@fB@`Sn`>a*K (MJn g&`H>azJ@fB@`Rf*K ` 2+ HЁм fk -yt`h n f& nhn0"ni nho n1G nf& nhn0"ni nho n1G n-PJfnJnfpJL8N^NuNVH yt&h -S yu6 (fJk f.ap`D n0( 2+k An*K0+ H (n ` n0( HЮм f-yt`b n (f n!K n ( f n!K 0+ "ni n (f n!K0+ "ni n-PJf n0( k n& n P!K.N[.p`Z n> 0+ Wa-@fB@`gWNY*@ fB@`ZBG` M2G2GgRGygmJgg .gN[.#gyg0.2yggRygpJL N^NuNV0.ygmp``0n"yg0H|N^NuNVH.i/Nb6X no n ./NX.aN.j N,p no n .N4BytN>a>JyogN)N>| gBFz|Uf|zBD.iN,p`X|UfE`(|-f JDfdBEx`JDfBEx02 A:|JDm>`JEg0D@>`>/<iN,pXa0>0|0m|9o|Ug|-g|f JEfRE0D@:|Xf a<>|JtgR|)g <itdBWBgaT`JFg yt0UTt yt0Tt yt0Tt>??aX`JLN^NuNVH N("BW?</.N \*@>?</<iN \#u2>NY(@ g gJu2f >NV#u6#t#tB)M|)m)m BlBBlB,09nVS@@B,|JL0N^NuNVH >.09nT(@k*|k`,Uf&Byt?. ?. mNX<3tt0`d\eо| m|~o |mD|n>Jn nBytJn lB@`p`,Byt>?. NT<3tt0`BytB@JL0N^NuNVH>Nd>|f a(>0|`JGm|n|@|0JLN^NuNVH>Nd>|am |zn| JGm|n|@|0JLN^NuNV yu6(g yu6(f> ?.NT> ?.aTN^NuNVHJnf6N hJ@g,>BgN LTN>.iN)>|g0`N=N(LBWNVJLN^NuNVJtfJtg.iN,pB@`.iN,p#gtpN^NuNVJtf.iN,pB@`.jN,pBtpN^NuNVHJtfJtg.jN,pB@`Jn np`v#gtBFz yt>|U@TtDf| yt:Tt yt>Ttx|)g>??aX8|gBtܸ|fSn f0JLN^NuNV.jN,pJtg3)gBtpN^NuNV.jVN,pN^NuNV.kv/<j/<jv?<Nd N^NuNV>NdN^NuNV`HI``- мe n(H< n(H@ yt2F pPBW?N=T n&h+g p*@b@aId*|nfSKff| J+g*|nfSKf| I`` H>N= мeJL8N^NuNV0.yof 0. yogB3o3 o0.H| n\0. H| n].nZ?< NdTN^NuNVBW?9nVaT.n?< NdTByoN^NuNVH./Nb6X.o/NaX>@//aFP>|fp`.JGg( .yg .Yfp` .ng .NfB@``JLN^NuNVHBGJtg>` 02G RG yt:0TtJ@f0G B n JfB@`p`.a>Nd:0`02G RG0G BRGJtgH0@Hйt԰icBWBgN'Tp`jBF` n 0`H"yt2TtRFGm> ?<NdTByo n JfB@`$p`.o ?< NdTTyoBWBgN'Tp`JGg>.o ?< NdTSyoSG0G  l.o?< NdTSyo``>.o?< NdTSyoSG0G  l.o?< NdTSyoJGf`b0.S@@l@02G RG| l>^?<NdTRyo E@>?<NdTRyo`H |n`rW hN`DJLN^NuNVH.o?< NdTBW?9nVaTK `|%g>?<NdTRyo` nH>R0`j> ?aTT`p>?aTT`^>?aTT`N> /aXX`>.?< NdTX`,>?<NdTRyo`H |nrW hN nH>0RJ@f<.o ?< NdT3oJL N^NuNVHJnl0.D@=@>-?<NdT>.HǏ JGg > ?aT0.H H@0@"|n0H>?<NdTRyoJLN^NuNVHJl .D-@>-?<NdT0. H//.Nd0P.Jg > /aX . H@H>W0?<NdTRyoJLN^NuNV3 tpN^NuNVH? yu6 h*PBFB ytʻ f$ ytʼhf*m fx ` 5` H8|m f yu6g *UBF`RFR`BWa\=@BCJg//<d/NcP/Nd0P6.?/??9tRW?.RW/<o$N,ppJL N^NuNVHBEBF`F yt h 0` H>|| g | gJnf*| f|`| m|fRERERF ytʼhm0JLN^NuNVH yt*h yt>(m fSGlB@`D5p H:|SGlB@`05p H<|0"M4G@ 0"M4G@ >NpJL N^NuNVH>Nd<Jn lB@`6Jn fp`,| fNB>|fSn f0`>?. NTJLN^NuNVJn lB@`ZJn g n o 3 tp`@Jytf> ?<NT`&> ?9tBganTHtH@WNTN^NuNVHJn lB@`:Jn fp`0>. NB<|fSGf|f> ?.NT<0JLN^NuNVHJn lB@`n`\ yt*h yt0(m f0 yu6g$ UJh f>BgNT>|g0`"`NB>|g0`0. Sn J@fpJL N^NuNVH yt*h `*LJm f(m yu6f(MBG`RG(T yu6gJl gJGfp` yt!U ytBh>NlJL0N^NuNVHJn lB@``BGBE`0 yt h 0P H<|| g| f| f|RGRE yt h h mNBJ@g::Hŋg> ?NTJ@g:HŋHEg> ?NTJ@fB@`0. Sn J@ffpJLN^NuNVJn l0. D@>?.a6T`.Jng9tfN!Tyt>?. NlTN^NuNVHJn l0. D@>?.aT`JJng9tfN!Tyt> ?.NT>|f>?. NlT>0JLN^NuNVH9tfN!TytJnf$ yt h >( yt0(@JGf~`Jn f yt>( ytBh`bJn oL yt h >( yt0(@RG yt h *P` yu6fB@`00- R@@*USn f`.oHN,pB@`>?NlTJL N^NuNVHJn lB@`T`DBF`4| f>BgaxTJ@fB@`4`>?<NTJ@fB@`RF>N">l0. Sn J@fpJLN^NuNVH.Qa>|g0`@9tfN!Tyt yt!n yt1n>?.NlTJLN^NuNVH.Qa<|g0`t9tfN!Tyt*n>.`Bm f> N!<|g0`4*UBG` 5p H>WN!<|g0`RG0.SnJ@fpJL N^NuNVH.Qa:|g0`X>N*n>.`6m f*UBG`*5p H<||Am|Zn0| "M4G@ RG0.SnJ@fpJL N^NuNVH.Qap:|g0`X>N*n>.`6m f*UBG`*5p H<||am|zn0|"M4G@ RG0.SnJ@fpJL N^NuNVH*n ytJf.oRN,pB@` yt ( "yt")fv yt* yt0("yt2)Al( yt;h yt0("yt2)A;@`& yt;h yt0("yt2)A;@p` yt&h yt<( yt(h >, yt0(@RG` yu6gD(T ytʹf. yt* yt;h0"yt2)A;@p`0, R@@ yu6 (g<&k0+ R@@ ytʷf$* yt;h0"yt2)A;@p`. yu6fX yu6 (fF.omN,pB@JL8N^NuNVH.oa>|gJGf0`"|f> ?.aPT` > ?.a TJLN^NuNVH yt*h yt>(`m f*UBGz `5p H:|RG9tH>?aTJ@gn(M<&|t`: yu6gVl f(TBFz `4` H:|RFH>?aTJ@g(Jf yt!L yt1F yt(p` yu6fT.o|N,pB@JL8N^NuNVH.oa>|gJGf0`"|f> ?.aT` > ?.a TJLN^NuNVH&|t`RJ+f yt*h yt>(JGf(*m yu6f.o|N,pB@`>- RGSG0m fz ` 5p H:|H>?aTJ@g(M<-K`LJFf(l yu6gh<, RFSF0l fz ` 4` H:|S nH>?aDTJ@g0 <tమf yt!L yt1F yt(p``JL8N^NuNV nam nznn  na m nz nn 0.n fp`B@N^NuNVH K(n`HJGfJ9tgD [(|t`( ]d | m|f ^ G@`|%fHJGf]: B>P//N*PP<|fR.NbX:6PH>|g|fSEB@H"N4E@<JEo./<tNb6X`JFf J9tg|0JL0N^NuNVH09nV@>NY#tJtf >NV09nV@>NY#tJtf >NVBG`Z>nXXWNY*@ f >NV0Gt >nXXWNY*@ f >NV0Gt RGynVmJL N^NuNVBW?9nVN)4T.o?< NdTN^NuNV3o3 oN^NuNVH0yot*P09nXyon M2ynX|$`X n f> a09o|f`< n m nf>^a0.r@@>a`0."M4yo@RyoJL N^NuNVH0yot*P` M2yo| Ryo09nXyonJL N^NuNVH.o?< NdT(yt`J,g,f(*lBG` g lg*URG,H@m,HJGoSG,H@m,HSG` JGl,H@JGlBG` ,HHǏ*l `SG*mJGg l (f)M,*l,H,H||fN`RG*U f yt2G pPBW?aTBF`5` H>WaRFm ma`,H| gv`` yt2G pP yt2G pPBW?aT lgBF`5` H>WaRFm m*UaRG,H,HA@m,g.N(^B,B,(T fX yt*h yt(H3t`Ryt*U ytʻ fByu0BG`65p H:|RG| f yu0`| m|fRyu0Ryu0 ytʾhm09nXyu0n09nXS@3u0JyogtBG`> yt2G pP0Gt&PBF` K2F| RFynXmRGynVmBWBgN)4T.o?< NdTByoByo.o?< NdTBG`<0Gt&P+g$S0Gt-P.T/ T?a<\RGynVm.o?< NdT>u0?9tN)4TJL8N^NuNVH yt2n p(g.o?< NdT*n (n`RR09nXHЮ gHg09nXHЮ gBG6ynX 09nXHЮ-@`SS  g~ n(H+g-KJGf*`Sg n ( g n-K >?.N)4T`H>?<NdTRyoݻfg.o?< NdT`ݻf yt2n p(g.o?< NdTJL8N^NuNV0. "yt@ yt(pN^NuNVJnf 3o` ytB( yt(pN^NuNVH yt*P f*yt#t#u6pJL N^NuNVH *yt(ytʻf`*Uf#t#u6pJL0N^NuNV0. D@>?.aTN^NuNVH yt*hJn l`*U0. Rn J@g yu6f`"`*m0. Sn J@g yu6 (f yt!M yt(BG` ytʻ fp`l yu6g*URG yt(H@m yt*h yt(H>HǏ`*U0SGJ@g yu6f yt!M ytBhpJL N^NuNVH `F*yt#t mS(f( m!m  m1m m!m m1m.N[. 9tذtf`J yt*P yt mS(f( m!m  m1m m!m m1m.N[. ytJf yt(h yt(H>`SG(lJGg yu6 (f ytB(09nVS@"yt@ yt!L yt(pJL0N^NuNVH yt (l" yt(H>/<oN,pXB@`>NY*@ f.oN,pB@`t yu6R(+yu6 yt+h yt;h yt+h yt;hB-B- yt(H>SGHǏ yt(H<SFG yt(hBE`RE(T ytʹ f yt(hGn>Gf(T0"yt@ yt* yt 0"yt)HAR@@F`t-yt` &n n-P .tf f#t`&*t ythGRG? yt(_@0"yt@`(T0SGJ@f yt!L+L yt(-pJL8N^NuNVH Jn l0. D@>?.a$T` ytJf.pN,pB@` yt*P f*yt`*U tf-Hn n.pN,pB@` ytʻf0(mBG`(TRGn l mf+L0. -A`H yt(hBG`(lRGn l yu6 (f yt!L?. yt(_@?. yt(_@0. -A yt(-pJL0N^NuNVH Jn l0. D@>?.aT` ytJf.p'N,pB@` yt*P f*yt`*U tf yt(Hn n.p7N,pB@` ytʻf6(mBG`(lRGn l m (f+L0. -A`B yt(hBG`(TRGn l yu6f yt!L?. yt(_@?. yt(_@0. -A yt(-pJL0N^NuNVH ytJfBWBgaTJ@fB`*yt`*U gtg JL N^NuNVN^NuNVJn l0. D@>?.a~T`t>BgNTJ@fB@`\`@`>BgNTJ@fB@`BaJ@g`>BgNTJ@fB@`"aJ@f0. Sn J@f>BgNTN^NuNVJn l0. D@>?.aRT`P`@`>BgNTJ@fB@`6a`J@g`>BgNTJ@fB@`a@J@f0. Sn J@fpN^NuNVHJn lB@```>BgNTJ@fB@`aJ@g`l yt0h"yt"i 0 H>||am0|zn*| 0"yt"i $yt4j@ >N>BgNTJ@fB@`a~J@f0. Sn J@f\pJLN^NuNVHJn lB@```>BgNTJ@fB@`a*J@g`l yt0h"yt"i 0 H>||Am0|Zn*| 0"yt"i $yt4j@ >N>BgNTJ@fB@`aJ@f0. Sn J@f\pJLN^NuNVHJn lB@`&``>BgNTJ@fB@`a`J@gaXJ@g yt0h"yt"i 0 H>||am0|zn*| 0"yt"i $yt4j@ >N>BgNTJ@fB@``l yt0h"yt"i 0 H>||Am0|Zn*| 0"yt"i $yt4j@ >N>BgNTJ@fB@`arJ@f0. Sn J@fpJLN^NuNVHJn lB@` yt*h yt<(BG`D`>BgNTJ@fB@`ZRGa J@g`>BgNTJ@fB@`8RGaJ@f0. Sn J@f yt!M yt1F>?NlTJL N^NuNVHJn lB@`>BgNTJ@fB@`vBG`@`>BgNTJ@fB@`XRGa^J@g`>BgNTJ@fB@`8RGa>J@f0. Sn J@f>BgNTJ@fB@`>?NlTJLN^NuNVH yt0("yt"i 2) AfB@`d yt0h"yt"i 0 H>||am |znp`2|Am |Znp`"|0m |9np`|$g|_fp`B@JLN^NuNVHN^ BW/<eNXX>/<eNXX>/<eNXX n2n B*n`&HHмq @g H| `HRJf> /.NQXJL N^NuNVH BWN\#t#tByt.e a*n`N`RJgHHмq @fJg2 "g 'fFH>/ RNX(@ f.pJ/ aVX H> M2GBRG.Ra`BG`RG M2GJg5pHHмq @gJ5pg M2GBRGH`BWNVBW/ RNXXJ@g.R/<p\aX`l>NV ->f@>/ TNXX|f>B?<NY.\|f.R/<pia|X`$BW/ RNUX|g.R/<pxaVX`>?/ NXJf>*/ NXJg-|{.8?<NT>/ ?<N`\<f.p/ aX`^.H?/.aZ\.NbX>RWNb(@./ Nb6X.a>/ ?<N`\<f`.a`|g`JfBaSyt.tN|f.p/<pa*XB/9t?9tN"D\>NVJL0N^NuNV|./Nb6X. /NaX.p/NaX.?< NT>NVN^NuNVH*n yt XtRytJL N^NuNVH*n. (nGVfJL8N^NuNVHN]>|fp`>N^,08*@u:JnfU.e/.NbXJ@f U0`R`.e/.NbXJ@fU0`2>/.?N`\J@g3#q3rqp`U0JL N^NuNVBW?. /.a:\N^NuNVBW?. /.a"\N^NuNV>?. /.a\N^NuNVNV6>NN^NuNVHBG`0мp.NVhRG|mJLN^NuNVH*n0-|g*.NWP-g .N[.B@H+@+@Bm m>NVJL N^NuNVH>.>N^*@ f3 q3rqp`NBF0|f>?<>NcT<l|>N^,>N]JFf0``3q3rqpJL N^NuNVN^NuNVH*n0-| |f, -<o >/-?N]&\>Gg mp`J-gJg-g;| `;| `>0- D@H/?NY.\Bm +mB@JL N^NuNVHN]>|fp`>N^,08*@u:Jn fUJnfU.e/.NbXJ@fU;n 0``.e/.NbXJ@fU0`d>/.?N`\J@g>N]3q3rqp`0U>B-H?NY.\BWB-H?NY.\0JL N^NuNVBW?. /.a\N^NuNVBW?. /.a\N^NuNV>?. /.a\N^NuNVH>N^*@ f3 q3rqp`$>?-/. ?<BNcP+@U -JL N^NuNV>B?.a\N^NuNVH>.^GORG>a*@ fB` >/ aXJL N^NuNVH (yq*T`ZB@0-BA2-@F@J@g>N\B`:B@0-ne `*qf>a*@ f>N\B`(M*U`JL0N^NuNVH n*PB@0. X@me n `F(MB@0. HH@B@H@B@0-n 9@B@0,F@9@( n ;n B@0-F@;@#q PJL0N^NuNVH >.|?GG0@>N\*@fB`* R*@(M9GB@0,F@9@.Pa 9qJL0N^NuNVH *nQB@0-BA2-@F@J@g>N\p`(yqeeecd(T`e2 BA2-IHABAHAЁ" BB4,JHBBBHB҂b #qB@`n BA2-IHABAHAЁf T0(mB@0-F@;@ T*`* BA2,IHABAHAЁfB@0-lB@0,F@9@(`(#qB@JL0N^NuNVH *n.a>. ^GORG>a-@fB`J n(PPg2d`Sn Jn f`B0. B0. `%Sn Jn f>/.aXJL0N^NuNVN^NuNVN^NuNVH >.HμgR*yr(Gr.N|f3 q3rqp`>Bg/ N\ JL0N^NuNVH>N^*@ fp`XJnfB@`N-g3 q3rqp`0-g>/. / N^P``>/. / N` PJL N^NuNVH|BG` qf q0`RG|m3q3rqpJLN^NuNVp2.`F@HqB@N^NuNVHBG`>aRG|mJLN^NuNVH 0.8*@u:0.@BUB-+| BB> Bg/ N\> ?< / N\JL0N^NuNVH>.|e3 q3rqB`0B@08*@u:-f3 q3rqB` JL N^NuNVH *n(n >.B@=@=@``Rnnc L2n  fB@0.ncf>?.B@0.W B2.Ё//-/ Ncr=@B0.ѭJnf3q3rqp`^=n`8Rn>?</<q/-/ Ncr=@B0.ѭnb4 -o+mB@0.JL0N^NuNVH*n>?./. /-/ Ncr=@Jnf3q3rqp` B0.ѭ -o+mB@0.JL N^NuNVH*n 0.8мu:-@~.a&M`RJg :fJgc .Am .On*K`K0.`BW/ ?<o n1GBG`BW/ ?<NNc\JgB@`0<>`d>ONcJgB@`0<>`J.?<=NcT>o n1GBG`,.?<ANcT>``||b@0@q PN0JL8N^NuNV n am n zn n nHRJfN^NuNVH *n (n`RJff .JL0N^NuNVH *n(n `op`lp`JgJfHHAJL0N^NuNVH *n (nf .JL0N^NuNVH *n(M`RJf HJL0N^NuNVN^NuNVH *n(n `$H>a0H>a&op`lp` JfJfB@JL0N^NuNVH>.|am |zn|0JLN^Nu _B0Z"yrCCbNC NJg .NuNV n=h.0n/0n/NcP/?.?<?NcPN^NuNV n=h.0n/0n/NcP/?.?<@NcPN^Nu#tNA/9tNuNVBBJlDRBJ lD RB0. -@0.2. An=@ .gDN^NuNV/. /.Nd0 9tN^NuNVH?BCB..,. f#t <`hlDRCJlDRCn8fzB`0l :HGH`xe`Jge`|fD#t D`#t JLN^Nu#tNN/9tNu#tNM/9tNu#tNA/9tNuStack Overflow$C runtimeCON:LST:[Mark set]No mark in this windowUse [next] buffer: Kill [current] buffer: Buffer is being multiply displayedC Size Buffer File- ---------- ------ ----Cannot select builtin bufferDiscard changesRead file: Visit file: [Old buffer]A namesake buffer exists; give another name: Cannot create buffer[New file][Reading file][Read %D bytes in %d lines]Write file: No file name[Wrote %D bytes in %d lines]Name:  Cannot open file for writingWrite I/O errorWrite I/O errorlong line %d is being split...File read errorThe last line ended without \nCannot allocate %d bytesbug: linsert)mainArg: 4Arg: %d[List]Unsaved buffers exist! QuitNot now[Start macro]Not now[End macro]Not now^G...ok!ported at Case Western Reserve University; 03/04/86please Visit File 'keybind.doc'1234567890-= qwertyuiop[] asdfghjkl;'`\zxcvbnm,./ Ž·!@#$%^&*()_+ QWERTYUIOP{} ASDFGHJKL:"~|ZXCVBNM<>? 1234567890-= QWERTYUIOP[] ASDFGHJKL;'`\ZXCVBNM,./ Ž·@ABD3EFG'H3fI0J2XK3LCM1XNO1PQ08R:S8T/V~W5*Y4Z&OO34Z L">(&*~DPDhFE`DC'..CK0KB LC&XFL6*O1NDPPDhR SU6V>W"XZI=.(&)&1E`2FBE'.F.|KZNCPDZH\HO!C.><BK0CMDOFKLMUL8V*W5O3fePYrc +J+t***++t,Ddosx-,,-,-$0123456789ABCDEF microEmacs -- -- File: qK [y/n]? ^G    qKX=%d Y=%d CH=0x%x .=%D (%d%% of %D)neg killNo mark set in this windowBug: lost markNot foundForward SearchBackward SearchKqJfepKqCannot split a %d line windowCannot allocate WINDOW blockOnly one windowImpossible changeOnly one windowImpossible change: unmatched quoteCannot open Cannot append Cannot create : No matchStack Overflow $   qq a@aaa&a^aa`!!!!"CP/M-68K(tm), Version 1.2, Copyright (c) 1983, Digital Research XXXX-0000-654321R N4   ">    "  6  > T02 *2       &Z        4 " , 4 :  L , :$ &6D>$        " 8>       & ,  > 0  (   ,( .   (  "  $  , <,4@ 2  ^ d8t n      RJ (  .,  .  D:&    ""  @& &$   n 2$       0 * d * 0.0. *0 &F T"0  , , 2 .0N4   "L@ 2$L~j       N *> N  RD ~Z:         8   Rh          n     2   : <          B   :B   @ &B *4 J (  R (  R$ (   (  F "& , *  j   , ,D( 0 <    >  h 0HN&  jp".86 Jp $""@2&"fHR">* h$f 0 t2)A;@`& yt;h yt0("yt2)A;@p` yt. k.. kCONFGRAMTOSkETERNAL PRGkETERNAL TXTk`6 o"h###BbByNP/,HNVA@-HN?. Hz=@?.Hz?<N 0@dhHyHz?<N?.NHz?<NXHy?<PHnNNXHn?S@r VR?/LNNuHNaS@r VT?/LNNu#j _0 @g "_J@jp`0M"|Mp2 Ag $_JAjr`2M$|Mr@g\HbGNe$4SBkQ4@SBpQ0"|N` 4SBkQ4ASBrQ$|NLbJ@f pC^$I/9jNuHn _024SBgQ@4BAAc/LnNuHyNRRange error during set-operationHn _0246@SCBgQAn68DCCc 0AgRB`/LnNuHn _0@CEHS@rIVW.J?/LnNuHn _0@CEHS@rIVV.J?/LnNuHn _0@CEHS@2FA_VW.J?/LnNuHn _0@CEHS@2FAYVW.J?/LnNuHn _0@274BAAc7V`tO>/LnNuHn _0@"_24BAAc1V`t>/LnNuHn _02S@AC2YQ/LnNuHn _02S@AC2YQ/LnNuHn _02S@AC2FAYQ/LnNuB9`PBy _0g$_jp"_// HN LJ@fP)J9f" f |` f|` f |` f|`4<G BQB) @e *:f&Jrt `e QG 4tWJBkZG L3 J9f g< g6`d f H@?3|NAXNu _4` _t6 Bo r aSB`2aNH? _r ar a/L?Nu _r aN _4` _t"x0HgJJjDxvCPzp cRЀ`|e W0R"f`6 _4` _t2xJAjDAxvCPp0 2H@0RJAfJg<-RBlCSBr aQSCaQN _4v` _46"_JBjtJCkgCe4`BSCr aQSBk aQN _v` _60@d Cst`CntJCgkCe4`BSCr aQSBavQNFALSETRUE _6kfv2_t Cc"4YBv` _6kfv"_t Cc4QBvSBkr a(QSCC" A0 9c^a JgYC`NH "oA/ NPL NuBy(_ _/ C( g  f,t4(H / /?(?<@NA LJkvfNu4(SBraQNu(g^ f,H tHy/<??<@NA LNu fH t` fH t` f NuHyK` Hy$0< LNt6 4 J J ^     $"  ,*< * * , , 0 , " nBB6 2J XpD D   ( 0@L< x 0  `L*O.|f*m - ЭЭм// ??<JNA B?< NA\#b(|6*|."U Qg?</<L?<=NAP @k`>/<^/<??<?NA f:??<>NAXB9^3J3339_9`` <d3t м&"ҹ2Ҽl|#r:#vF#~@ |"U~"Q yN"Ҽ #r"Ҽ2#v"Ҽ#~ U2093/9b?< NA\BgNA ofpNu of 9.Nu of y."or2/ p 0/ $ f(/fI2< QSfNu/fI2<?QSfNuNNN\auto\ramdisk.dat8 .* Z 0LThis is the best RAMdisk I know of. It can be configured to install under any drive identifier, plus it takes a minimum of space and effort to set up, plus it survives a system reset. To use it, place ETERNAL.PRG in your floppy disk AUTO folder. Make sure it is the first thing you put in the folder. Then, add CONFGRAM.TOS. To configure the disk, run CONFGRAM.TOS, and answer the prompts. To use it, reboot. The first time you turn on the computer, the reboot which is performed is normal. After that, it shouldn't happen. One last thing -- Install the correct disk icon onto the desktop. . k.. kGEM A k;HGEM C ƾkEGEM H ˾kLIB A ξk9LIB C Ӿk4.PRG S ؾkSTDIO H ۾k TTP S ݾkP: _cprg csv lll 8 0 sll 0 -10 lll -10 0 tda 0 0 ldw 3 0 adw 4 0 lxl 0 0 0 lll -10 1 tda 1 0 ldw 5 1 adw 4 1 lxl 0 1 1 obl 12 1 0 lll -10 1 tda 1 0 ldw 7 1 adw 4 1 lxl 0 1 1 obl 12 1 0 ldw 256 1 xtw 1 obl 12 1 0 sll 0 -6 lll -6 0 phl 0 lll 8 0 phl 0 ldw 0 0 phw 0 ldw 74 0 phw 0 trp 1 pop 12 tsl 0 brc 4 0 ldw -1 0 phw 0 jsr appl_exit pop 2 * 0 lag ct0 0 tad 0 0 sgl 0 aes0 lag global 0 tad 0 0 sgl 0 aes1 lag ii0 0 tad 0 0 sgl 0 aes2 lag io0 0 tad 0 0 sgl 0 aes3 lag ai0 0 tad 0 0 sgl 0 aes4 lag ao0 0 tad 0 0 sgl 0 aes5 lag ct0 0 tad 0 0 sgl 0 vdi0 lag ii0 0 tad 0 0 sgl 0 vdi1 lag pi0 0 tad 0 0 sgl 0 vdi2 lag io0 0 tad 0 0 sgl 0 vdi3 lag po0 0 tad 0 0 sgl 0 vdi4 jsr main slw 0 -2 llw -2 0 phw 0 jsr appl_exit pop 2 ret efn 10 : appl_init csv ldw 10 0 sgw 0 ct0 ldw 1 0 sgw 0 ct2 ldw 0 0 sgw 0 ct4 sgw 0 ct3 sgw 0 ct1 jsr aes lgw io0 0 ret ret efn 0 : appl_exit csv llw 8 0 phw 0 ldw 76 0 phw 0 trp 1 pop 4 ret efn 0 : v_opnvwk csv ldw 100 0 sgw 0 ct0 ldw 0 0 sgw 0 ct1 ldw 11 0 sgw 0 ct3 lll 12 0 tda 0 0 low 0 0 0 sgw 0 ct6 lag ii0 0 tad 0 0 sll 0 -8 ldw 0 0 slw 0 -2 * 0 llw -2 0 ldw 11 1 cmw 0 1 brc 9 1 jmp 2 * 3 llw -2 0 ilw 1 -2 jmp 0 * 2 lll 8 0 tda 0 0 llw -2 0 adw 2 0 lxw 0 0 0 lll -8 1 tda 1 0 llw -2 1 adw 2 1 sxw 0 1 0 jmp 3 * 1 jsr vdi lag io0 0 tad 0 0 sll 0 -12 ldw 0 0 slw 0 -2 * 4 llw -2 0 ldw 45 1 cmw 0 1 brc 9 5 jmp 6 * 7 llw -2 0 ilw 1 -2 jmp 4 * 6 lll -12 0 tda 0 0 llw -2 0 adw 2 0 lxw 0 0 0 lll 16 1 tda 1 0 llw -2 1 adw 2 1 sxw 0 1 0 jmp 7 * 5 lag po0 0 tad 0 0 sll 0 -16 ldw 0 0 slw 0 -4 * 8 llw -4 0 ldw 12 1 cmw 0 1 brc 9 9 jmp 10 * 11 llw -4 0 ilw 1 -4 jmp 8 * 10 lll -16 0 tda 0 0 llw -4 0 adw 2 0 lxw 0 0 0 lll 16 1 tda 1 0 llw -2 1 ilw 1 -2 adw 2 1 sxw 0 1 0 jmp 11 * 9 lgw ct6 0 lll 12 1 tda 1 0 sow 0 0 0 ret efn 16 : vq_extnd csv ldw 102 0 sgw 0 ct0 ldw 0 0 sgw 0 ct1 ldw 1 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 llw 10 0 sgw 0 ii0 jsr vdi lag io0 0 tad 0 0 sll 0 -8 ldw 0 0 slw 0 -2 * 0 llw -2 0 ldw 45 1 cmw 0 1 brc 9 1 jmp 2 * 3 llw -2 0 ilw 1 -2 jmp 0 * 2 lll -8 0 tda 0 0 llw -2 0 adw 2 0 lxw 0 0 0 lll 12 1 tda 1 0 llw -2 1 adw 2 1 sxw 0 1 0 jmp 3 * 1 lag po0 0 tad 0 0 sll 0 -12 ldw 0 0 slw 0 -4 * 4 llw -4 0 ldw 12 1 cmw 0 1 brc 9 5 jmp 6 * 7 llw -4 0 ilw 1 -4 jmp 4 * 6 lll -12 0 tda 0 0 llw -4 0 adw 2 0 lxw 0 0 0 lll 12 1 tda 1 0 llw -2 1 ilw 1 -2 adw 2 1 sxw 0 1 0 jmp 7 * 5 ret efn 12 : v_clsvwk csv ldw 101 0 sgw 0 ct0 llw 8 0 sgw 0 ct6 ldw 0 0 sgw 0 ct3 sgw 0 ct1 jsr vdi ret efn 0 : v_clrwk csv ldw 3 0 sgw 0 ct0 ldw 0 0 sgw 0 ct1 ldw 0 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 jsr vdi ret efn 0 : v_pline csv ldw 6 0 sgw 0 ct0 llw 10 0 sgw 0 ct1 ldw 0 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 lll 12 0 sgl 0 vdi2 jsr vdi lag po0 0 tad 0 0 sgl 0 vdi2 ret efn 0 : v_gtext csv ldw 8 0 sgw 0 ct0 ldw 1 0 sgw 0 ct1 lag ii0 0 tad 0 0 sll 0 -6 ldw 0 0 slw 0 -2 * 0 lll 14 0 tda 0 0 llw -2 0 xtw 0 lxb 0 0 0 tsb 0 brc 4 1 jmp 2 * 3 llw -2 0 ilw 1 -2 jmp 0 * 2 lll 14 0 tda 0 0 llw -2 0 xtw 0 lxb 0 0 0 lll -6 1 tda 1 0 llw -2 1 adw 2 1 xtb 0 sxw 0 1 0 jmp 3 * 1 llw -2 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 llw 10 0 sgw 0 pi0 llw 12 0 sgw 0 pi0 jsr vdi ret efn 6 : vs_clip csv ldw 129 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 1 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 llw 10 0 sgw 0 ii0 lll 12 0 sgl 0 vdi2 jsr vdi lag pi0 0 tad 0 0 sgl 0 vdi2 ret efn 0 : v_pmarker csv ldw 7 0 sgw 0 ct0 llw 10 0 sgw 0 ct1 ldw 0 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 lll 12 0 sgl 0 vdi2 jsr vdi lag pi0 0 tad 0 0 sgl 0 vdi2 ret efn 0 : v_fillarea csv ldw 9 0 sgw 0 ct0 llw 10 0 sgw 0 ct1 ldw 0 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 lll 12 0 sgl 0 vdi2 jsr vdi lag pi0 0 tad 0 0 sgl 0 vdi2 ret efn 0 : v_contourfill csv ldw 103 0 sgw 0 ct0 ldw 1 0 sgw 0 ct1 ldw 1 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 llw 14 0 sgw 0 ii0 llw 10 0 sgw 0 pi0 llw 12 0 sgw 0 pi1 jsr vdi ret efn 0 : vr_recfl csv ldw 114 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 0 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 lll 10 0 sgl 0 vdi2 jsr vdi lag pi0 0 tad 0 0 sgl 0 vdi2 ret efn 0 : v_bar csv ldw 11 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 0 0 sgw 0 ct3 ldw 1 0 sgw 0 ct5 llw 8 0 sgw 0 ct6 lll 10 0 sgl 0 vdi2 jsr vdi lag pi0 0 tad 0 0 sgl 0 vdi2 ret efn 0 : v_arc csv ldw 11 0 sgw 0 ct0 ldw 4 0 sgw 0 ct1 ldw 2 0 sgw 0 ct3 ldw 2 0 sgw 0 ct5 llw 8 0 sgw 0 ct6 llw 16 0 sgw 0 ii0 llw 18 0 sgw 0 ii1 llw 10 0 sgw 0 pi0 llw 12 0 sgw 0 pi1 llw 14 0 sgw 0 pi6 ldw 0 0 sgw 0 pi7 sgw 0 pi5 sgw 0 pi4 sgw 0 pi3 sgw 0 pi2 jsr vdi ret efn 6 : v_pieslice csv ldw 11 0 sgw 0 ct0 ldw 4 0 sgw 0 ct1 ldw 2 0 sgw 0 ct3 ldw 3 0 sgw 0 ct5 llw 8 0 sgw 0 ct6 llw 16 0 sgw 0 ii0 llw 18 0 sgw 0 ii1 llw 10 0 sgw 0 pi0 llw 12 0 sgw 0 pi1 llw 14 0 sgw 0 pi6 ldw 0 0 sgw 0 pi7 sgw 0 pi5 sgw 0 pi4 sgw 0 pi3 sgw 0 pi2 jsr vdi ret efn 2 : v_circle csv ldw 11 0 sgw 0 ct0 ldw 3 0 sgw 0 ct1 ldw 0 0 sgw 0 ct3 ldw 4 0 sgw 0 ct5 llw 8 0 sgw 0 ct6 llw 10 0 sgw 0 pi0 llw 12 0 sgw 0 pi1 llw 14 0 sgw 0 pi4 ldw 0 0 sgw 0 pi5 sgw 0 pi3 sgw 0 pi2 jsr vdi ret efn 2 : v_ellarc csv ldw 11 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 2 0 sgw 0 ct3 ldw 6 0 sgw 0 ct5 llw 8 0 sgw 0 ct6 llw 18 0 sgw 0 ii0 llw 20 0 sgw 0 ii1 llw 10 0 sgw 0 pi0 llw 12 0 sgw 0 pi1 llw 14 0 sgw 0 pi2 llw 16 0 sgw 0 pi3 jsr vdi ret efn 2 : v_ellpie csv ldw 11 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 2 0 sgw 0 ct3 ldw 7 0 sgw 0 ct5 llw 8 0 sgw 0 ct6 llw 18 0 sgw 0 ii0 llw 20 0 sgw 0 ii1 llw 10 0 sgw 0 pi0 llw 12 0 sgw 0 pi1 llw 14 0 sgw 0 pi2 llw 16 0 sgw 0 pi3 jsr vdi ret efn 2 : v_ellipse csv ldw 11 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 0 0 sgw 0 ct3 ldw 5 0 sgw 0 ct5 llw 8 0 sgw 0 ct6 llw 10 0 sgw 0 pi0 llw 12 0 sgw 0 pi1 llw 14 0 sgw 0 pi2 llw 16 0 sgw 0 pi3 jsr vdi ret efn 0 : v_rbox csv ldw 11 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 0 0 sgw 0 ct3 ldw 8 0 sgw 0 ct5 llw 8 0 sgw 0 ct6 lll 10 0 sgl 0 vdi2 jsr vdi lag pi0 0 tad 0 0 sgl 0 vdi2 ret efn 0 : v_rfbox csv ldw 11 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 0 0 sgw 0 ct3 ldw 9 0 sgw 0 ct5 llw 8 0 sgw 0 ct6 lll 10 0 sgl 0 vdi2 jsr vdi lag pi0 0 tad 0 0 sgl 0 vdi2 ret efn 0 : v_justified csv ldw 11 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 llw 8 0 sgw 0 ct6 llw 20 0 sgw 0 ii0 llw 22 0 sgw 0 ii1 lag ii2 0 tad 0 0 sll 0 -4 ldw 2 0 sgw 0 ct3 * 0 lll 14 0 ill 1 14 tda 0 0 lob 0 0 0 lll -4 1 ill 2 -4 tda 1 0 xtb 0 sow 0 0 0 tsw 0 brc 4 1 jmp 2 * 3 lgw ct3 0 igw 1 ct3 jmp 0 * 2 jmp 3 * 1 llw 10 0 sgw 0 pi0 llw 12 0 sgw 0 pi1 llw 18 0 sgw 0 pi2 jsr vdi ret efn 4 : vswr_mode csv llw 10 0 phw 0 ldw 32 0 phw 0 llw 8 0 phw 0 jsr vset pop 6 ret ret efn 0 : vs_color csv ldw 14 0 sgw 0 ct0 ldw 0 0 sgw 0 ct1 ldw 4 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 llw 10 0 sgw 0 ii0 lll 12 0 tda 0 0 ldw 0 0 adw 2 0 lxw 0 0 0 sgw 0 ii1 lll 12 0 tda 0 0 ldw 1 0 adw 2 0 lxw 0 0 0 sgw 0 ii2 lll 12 0 tda 0 0 ldw 2 0 adw 2 0 lxw 0 0 0 sgw 0 ii3 jsr vdi ret efn 0 : vsl_color csv llw 10 0 phw 0 ldw 17 0 phw 0 llw 8 0 phw 0 jsr vset pop 6 ret ret efn 0 : vsl_type csv llw 10 0 phw 0 ldw 15 0 phw 0 llw 8 0 phw 0 jsr vset pop 6 ret ret efn 0 : vsm_type csv llw 10 0 phw 0 ldw 18 0 phw 0 llw 8 0 phw 0 jsr vset pop 6 ret ret efn 0 : vsm_height csv ldw 19 0 sgw 0 ct0 ldw 1 0 sgw 0 ct1 ldw 0 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 ldw 0 0 sgw 0 pi0 llw 10 0 sgw 0 pi1 jsr vdi lgw po1 0 ret ret efn 0 : vsl_udsty csv llw 10 0 phw 0 ldw 113 0 phw 0 llw 8 0 phw 0 jsr vset pop 6 ret ret efn 0 : vsl_width csv ldw 16 0 sgw 0 ct0 ldw 1 0 sgw 0 ct1 ldw 0 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 llw 10 0 sgw 0 pi0 ldw 0 0 sgw 0 pi1 jsr vdi lgw po0 0 ret ret efn 0 : vsl_ends csv ldw 108 0 sgw 0 ct0 ldw 0 0 sgw 0 ct1 ldw 2 0 sgw 0 ct2 llw 8 0 sgw 0 ct6 llw 10 0 sgw 0 ii0 llw 12 0 sgw 0 ii1 jsr vdi ret efn 0 : vsm_color csv llw 10 0 phw 0 ldw 20 0 phw 0 llw 8 0 phw 0 jsr vset pop 6 ret ret efn 0 : vst_height csv ldw 12 0 sgw 0 ct0 ldw 1 0 sgw 0 ct1 ldw 0 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 ldw 0 0 sgw 0 pi0 llw 10 0 sgw 0 pi1 jsr vdi lgw po0 0 lll 12 1 tda 1 0 sow 0 0 0 lgw po1 0 lll 16 1 tda 1 0 sow 0 0 0 lgw po2 0 lll 20 1 tda 1 0 sow 0 0 0 lgw po3 0 lll 24 1 tda 1 0 sow 0 0 0 ret efn 0 : vst_point csv ldw 107 0 sgw 0 ct0 ldw 0 0 sgw 0 ct1 ldw 1 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 llw 10 0 sgw 0 ii0 jsr vdi lgw po0 0 lll 12 1 tda 1 0 sow 0 0 0 lgw po1 0 lll 16 1 tda 1 0 sow 0 0 0 lgw po2 0 lll 20 1 tda 1 0 sow 0 0 0 lgw po3 0 lll 24 1 tda 1 0 sow 0 0 0 ret efn 0 : vst_rotation csv llw 10 0 phw 0 ldw 13 0 phw 0 llw 8 0 phw 0 jsr vset pop 6 ret ret efn 0 : vst_color csv llw 10 0 phw 0 ldw 22 0 phw 0 llw 8 0 phw 0 jsr vset pop 6 ret ret efn 0 : vst_effects csv llw 10 0 phw 0 ldw 106 0 phw 0 llw 8 0 phw 0 jsr vset pop 6 ret ret efn 0 : vst_alignment csv ldw 39 0 sgw 0 ct0 ldw 0 0 sgw 0 ct1 ldw 2 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 llw 10 0 sgw 0 ii0 llw 12 0 sgw 0 ii0 jsr vdi lgw io0 0 lll 14 1 tda 1 0 sow 0 0 0 lgw io1 0 lll 18 1 tda 1 0 sow 0 0 0 ret efn 0 : vsf_interior csv llw 10 0 phw 0 ldw 23 0 phw 0 llw 8 0 phw 0 jsr vset pop 6 ret ret efn 0 : vsf_style csv llw 10 0 phw 0 ldw 24 0 phw 0 llw 8 0 phw 0 jsr vset pop 6 ret ret efn 0 : vsf_color csv llw 10 0 phw 0 ldw 25 0 phw 0 llw 8 0 phw 0 jsr vset pop 6 ret ret efn 0 : vsf_perimeter csv llw 10 0 phw 0 ldw 105 0 phw 0 llw 8 0 phw 0 jsr vset pop 6 ret ret efn 0 : vsf_updat csv ldw 112 0 sgw 0 ct0 ldw 0 0 sgw 0 ct1 llw 14 0 ldw 16 1 obw 14 1 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 lll 10 0 sgl 0 vdi1 jsr vdi lag ii0 0 tad 0 0 sgl 0 vdi1 ret efn 0 : vset csv llw 10 0 sgw 0 ct0 ldw 0 0 sgw 0 ct1 ldw 1 0 sgw 0 ct3 llw 8 0 sgw 0 ct6 llw 12 0 sgw 0 ii0 jsr vdi lgw io0 0 ret ret efn 0 : rsrc_gaddr csv ldw 112 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 1 0 sgw 0 ct4 sgw 0 ct2 ldw 0 0 sgw 0 ct3 llw 8 0 sgw 0 ii0 llw 10 0 sgw 0 ii1 jsr aes lgl ao0 0 lll 12 1 tda 1 0 sol 0 0 0 lgw io0 0 ret ret efn 0 : rsrc_saddr csv ldw 113 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 1 0 sgw 0 ct3 sgw 0 ct2 ldw 0 0 sgw 0 ct4 llw 8 0 sgw 0 ii0 llw 10 0 sgw 0 ii1 lll 12 0 sgl 0 ai0 jsr aes lgw io0 0 ret ret efn 0 : graf_handle csv ldw 77 0 sgw 0 ct0 ldw 5 0 sgw 0 ct2 ldw 0 0 sgw 0 ct4 sgw 0 ct3 sgw 0 ct1 jsr aes lgw io1 0 lll 8 1 tda 1 0 sow 0 0 0 lgw io2 0 lll 12 1 tda 1 0 sow 0 0 0 lgw io3 0 lll 16 1 tda 1 0 sow 0 0 0 lgw io4 0 lll 20 1 tda 1 0 sow 0 0 0 lgw io0 0 ret ret efn 0 : graf_rubberbox csv ldw 70 0 sgw 0 ct0 ldw 4 0 sgw 0 ct1 ldw 3 0 sgw 0 ct2 ldw 0 0 sgw 0 ct4 sgw 0 ct3 llw 8 0 sgw 0 ii0 llw 10 0 sgw 0 ii1 llw 12 0 sgw 0 ii2 llw 14 0 sgw 0 ii3 jsr aes lgw io1 0 lll 16 1 tda 1 0 sow 0 0 0 lgw io2 0 lll 20 1 tda 1 0 sow 0 0 0 lgw io0 0 ret ret efn 0 : graf_dragbox csv ldw 71 0 sgw 0 ct0 ldw 8 0 sgw 0 ct1 ldw 3 0 sgw 0 ct2 ldw 0 0 sgw 0 ct4 sgw 0 ct3 llw 8 0 sgw 0 ii0 llw 10 0 sgw 0 ii1 llw 12 0 sgw 0 ii2 llw 14 0 sgw 0 ii3 llw 16 0 sgw 0 ii4 llw 18 0 sgw 0 ii5 llw 20 0 sgw 0 ii6 llw 22 0 sgw 0 ii7 jsr aes lgw io1 0 lll 24 1 tda 1 0 sow 0 0 0 lgw io2 0 lll 28 1 tda 1 0 sow 0 0 0 lgw io0 0 ret ret efn 0 : graf_movebox csv ldw 72 0 sgw 0 ct0 ldw 6 0 sgw 0 ct1 ldw 1 0 sgw 0 ct2 ldw 0 0 sgw 0 ct4 sgw 0 ct3 llw 8 0 sgw 0 ii0 llw 10 0 sgw 0 ii1 llw 12 0 sgw 0 ii2 llw 14 0 sgw 0 ii3 llw 16 0 sgw 0 ii4 llw 18 0 sgw 0 ii5 jsr aes lgw io0 0 ret ret efn 0 : graf_growbox csv ldw 73 0 sgw 0 ct0 ldw 8 0 sgw 0 ct1 ldw 1 0 sgw 0 ct2 ldw 0 0 sgw 0 ct4 sgw 0 ct3 lal 8 0 tad 0 0 sgl 0 aes2 jsr aes lag ii0 0 tad 0 0 sgl 0 aes2 lgw io0 0 ret ret efn 0 : graf_shrinkbox csv ldw 73 0 sgw 0 ct0 ldw 8 0 sgw 0 ct1 ldw 1 0 sgw 0 ct2 ldw 0 0 sgw 0 ct4 sgw 0 ct3 lal 8 0 tad 0 0 sgl 0 aes2 jsr aes lag ii0 0 tad 0 0 sgl 0 aes2 lgw io0 0 ret ret efn 0 : graf_watchbox csv ldw 75 0 sgw 0 ct0 ldw 4 0 sgw 0 ct1 ldw 1 0 sgw 0 ct3 sgw 0 ct2 ldw 0 0 sgw 0 ct4 llw 12 0 sgw 0 ii1 llw 14 0 sgw 0 ii2 llw 16 0 sgw 0 ii3 lll 8 0 sgl 0 ai0 jsr aes lgw io0 0 ret ret efn 0 : graf_slidebox csv ldw 76 0 sgw 0 ct0 ldw 3 0 sgw 0 ct1 ldw 1 0 sgw 0 ct3 sgw 0 ct2 ldw 0 0 sgw 0 ct4 llw 12 0 sgw 0 ii0 llw 14 0 sgw 0 ii1 llw 16 0 sgw 0 ii2 lll 8 0 sgl 0 ai0 jsr aes lgw io0 0 ret ret efn 0 : graf_mouse csv ldw 78 0 sgw 0 ct0 ldw 1 0 sgw 0 ct3 sgw 0 ct2 sgw 0 ct1 ldw 0 0 sgw 0 ct4 llw 8 0 sgw 0 ii0 lll 10 0 sgl 0 ai0 jsr aes lgw io0 0 ret ret efn 0 : graf_mkstate csv ldw 79 0 sgw 0 ct0 ldw 0 0 sgw 0 ct4 sgw 0 ct3 sgw 0 ct1 ldw 5 0 sgw 0 ct2 jsr aes lgw io1 0 lll 8 1 tda 1 0 sow 0 0 0 lgw io2 0 lll 12 1 tda 1 0 sow 0 0 0 lgw io3 0 lll 16 1 tda 1 0 sow 0 0 0 lgw io4 0 lll 20 1 tda 1 0 sow 0 0 0 lgw io0 0 ret ret efn 0 : wind_get csv ldw 104 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 5 0 sgw 0 ct2 ldw 0 0 sgw 0 ct4 sgw 0 ct3 llw 8 0 sgw 0 ii0 llw 10 0 sgw 0 ii1 jsr aes lgw io1 0 lll 12 1 tda 1 0 sow 0 0 0 lgw io2 0 lll 16 1 tda 1 0 sow 0 0 0 lgw io3 0 lll 20 1 tda 1 0 sow 0 0 0 lgw io4 0 lll 24 1 tda 1 0 sow 0 0 0 lgw io0 0 ret ret efn 0 : wind_create csv ldw 100 0 sgw 0 ct0 ldw 5 0 sgw 0 ct1 ldw 1 0 sgw 0 ct2 ldw 0 0 sgw 0 ct4 sgw 0 ct3 llw 8 0 sgw 0 ii0 llw 10 0 sgw 0 ii1 llw 12 0 sgw 0 ii2 llw 14 0 sgw 0 ii3 llw 16 0 sgw 0 ii4 jsr aes lgw io0 0 ret ret efn 0 : wind_set csv ldw 105 0 sgw 0 ct0 ldw 6 0 sgw 0 ct1 ldw 1 0 sgw 0 ct2 ldw 0 0 sgw 0 ct4 sgw 0 ct3 llw 8 0 sgw 0 ii0 llw 10 0 sgw 0 ii1 llw 12 0 sgw 0 ii2 llw 14 0 sgw 0 ii3 llw 16 0 sgw 0 ii4 llw 18 0 sgw 0 ii5 jsr aes lgw io0 0 ret ret efn 0 : wind_open csv ldw 101 0 sgw 0 ct0 ldw 5 0 sgw 0 ct2 sgw 0 ct1 ldw 0 0 sgw 0 ct4 sgw 0 ct3 llw 8 0 sgw 0 ii0 llw 10 0 sgw 0 ii1 llw 12 0 sgw 0 ii2 llw 14 0 sgw 0 ii3 llw 16 0 sgw 0 ii4 jsr aes lgw io0 0 ret ret efn 0 : wind_close csv ldw 102 0 sgw 0 ct0 ldw 1 0 sgw 0 ct2 sgw 0 ct1 ldw 0 0 sgw 0 ct4 sgw 0 ct3 llw 8 0 sgw 0 ii0 jsr aes lgw io0 0 ret ret efn 0 : wind_delete csv ldw 103 0 sgw 0 ct0 ldw 1 0 sgw 0 ct2 sgw 0 ct1 ldw 0 0 sgw 0 ct4 sgw 0 ct3 llw 8 0 sgw 0 ii0 jsr aes lgw io0 0 ret ret efn 0 : wind_find csv ldw 106 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 1 0 sgw 0 ct2 ldw 0 0 sgw 0 ct4 sgw 0 ct3 llw 8 0 sgw 0 ii0 llw 10 0 sgw 0 ii1 jsr aes lgw io0 0 ret ret efn 0 : wind_update csv ldw 107 0 sgw 0 ct0 ldw 1 0 sgw 0 ct2 sgw 0 ct1 ldw 0 0 sgw 0 ct4 sgw 0 ct3 llw 8 0 sgw 0 ii0 jsr aes lgw io0 0 ret ret efn 0 : wind_calc csv ldw 108 0 sgw 0 ct0 ldw 6 0 sgw 0 ct1 ldw 5 0 sgw 0 ct2 ldw 0 0 sgw 0 ct4 sgw 0 ct3 llw 8 0 sgw 0 ii0 llw 10 0 sgw 0 ii1 llw 12 0 sgw 0 ii2 llw 14 0 sgw 0 ii3 llw 16 0 sgw 0 ii4 llw 18 0 sgw 0 ii5 jsr aes lgw io1 0 lll 20 1 tda 1 0 sow 0 0 0 lgw io2 0 lll 24 1 tda 1 0 sow 0 0 0 lgw io3 0 lll 28 1 tda 1 0 sow 0 0 0 lgw io4 0 lll 32 1 tda 1 0 sow 0 0 0 lgw io0 0 ret ret efn 0 : event_multi csv ldw 25 0 sgw 0 ct0 ldw 16 0 sgw 0 ct1 ldw 7 0 sgw 0 ct2 ldw 1 0 sgw 0 ct3 ldw 0 0 sgw 0 ct4 llw 8 0 sgw 0 ii0 llw 10 0 sgw 0 ii1 llw 12 0 sgw 0 ii2 llw 14 0 sgw 0 ii3 llw 16 0 sgw 0 ii4 llw 18 0 sgw 0 ii5 llw 20 0 sgw 0 ii6 llw 22 0 sgw 0 ii7 llw 24 0 sgw 0 ii8 llw 26 0 sgw 0 ii9 llw 28 0 sgw 0 ii10 llw 30 0 sgw 0 ii11 llw 32 0 sgw 0 ii12 llw 34 0 sgw 0 ii13 llw 38 0 sgw 0 ii14 llw 40 0 sgw 0 ii15 llw 36 0 xuw 0 sgl 0 ai0 jsr aes lgw io1 0 lll 42 1 tda 1 0 sow 0 0 0 lgw io2 0 lll 46 1 tda 1 0 sow 0 0 0 lgw io3 0 lll 50 1 tda 1 0 sow 0 0 0 lgw io4 0 lll 54 1 tda 1 0 sow 0 0 0 lgw io5 0 lll 58 1 tda 1 0 sow 0 0 0 lgw io6 0 lll 62 1 tda 1 0 sow 0 0 0 lgw io0 0 ret ret efn 0 : objc_draw csv ldw 42 0 sgw 0 ct0 ldw 6 0 sgw 0 ct1 ldw 1 0 sgw 0 ct3 sgw 0 ct2 ldw 0 0 sgw 0 ct4 llw 12 0 sgw 0 ii0 llw 14 0 sgw 0 ii1 llw 16 0 sgw 0 ii2 llw 18 0 sgw 0 ii3 llw 20 0 sgw 0 ii4 llw 22 0 sgw 0 ii5 lll 8 0 sgl 0 ai0 jsr aes lgw io0 0 ret ret efn 0 : objc_find csv ldw 43 0 sgw 0 ct0 ldw 4 0 sgw 0 ct1 ldw 1 0 sgw 0 ct3 sgw 0 ct2 ldw 0 0 sgw 0 ct4 llw 12 0 sgw 0 ii0 llw 14 0 sgw 0 ii1 llw 16 0 sgw 0 ii2 llw 18 0 sgw 0 ii3 lll 8 0 sgl 0 ai0 jsr aes lgw io0 0 ret ret efn 0 : objc_offset csv ldw 43 0 sgw 0 ct0 ldw 1 0 sgw 0 ct1 ldw 3 0 sgw 0 ct2 ldw 1 0 sgw 0 ct3 ldw 0 0 sgw 0 ct4 llw 12 0 sgw 0 ii0 lll 8 0 sgl 0 ai0 jsr aes lgw io1 0 lll 14 1 tda 1 0 sow 0 0 0 lgw io2 0 lll 18 1 tda 1 0 sow 0 0 0 lgw io0 0 ret ret efn 0 : objc_edit csv ldw 46 0 sgw 0 ct0 ldw 4 0 sgw 0 ct1 ldw 2 0 sgw 0 ct2 ldw 1 0 sgw 0 ct3 ldw 0 0 sgw 0 ct4 llw 12 0 sgw 0 ii0 llw 14 0 sgw 0 ii1 llw 16 0 sgw 0 ii2 llw 18 0 sgw 0 ii3 lll 8 0 sgl 0 ai0 jsr aes lgw io1 0 lll 20 1 tda 1 0 sow 0 0 0 lgw io0 0 ret ret efn 0 : objc_change csv ldw 47 0 sgw 0 ct0 ldw 8 0 sgw 0 ct1 ldw 1 0 sgw 0 ct3 sgw 0 ct2 ldw 0 0 sgw 0 ct4 llw 12 0 sgw 0 ii0 llw 14 0 sgw 0 ii1 llw 16 0 sgw 0 ii2 llw 18 0 sgw 0 ii3 llw 20 0 sgw 0 ii4 llw 22 0 sgw 0 ii5 llw 24 0 sgw 0 ii6 llw 26 0 sgw 0 ii7 lll 8 0 sgl 0 ai0 jsr aes lgw io0 0 ret ret efn 0 : menu_bar csv ldw 30 0 sgw 0 ct0 ldw 1 0 sgw 0 ct3 sgw 0 ct2 sgw 0 ct1 ldw 0 0 sgw 0 ct4 llw 12 0 sgw 0 ii0 lll 8 0 sgl 0 ai0 jsr aes lgw io0 0 ret ret efn 0 : menu_icheck csv ldw 31 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 1 0 sgw 0 ct3 sgw 0 ct2 ldw 0 0 sgw 0 ct4 llw 12 0 sgw 0 ii0 llw 14 0 sgw 0 ii1 lll 8 0 sgl 0 ai0 jsr aes lgw io0 0 ret ret efn 0 : menu_enable csv ldw 32 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 1 0 sgw 0 ct3 sgw 0 ct2 ldw 0 0 sgw 0 ct4 llw 12 0 sgw 0 ii0 llw 14 0 sgw 0 ii1 lll 8 0 sgl 0 ai0 jsr aes lgw io0 0 ret ret efn 0 : menu_tnormal csv ldw 33 0 sgw 0 ct0 ldw 2 0 sgw 0 ct1 ldw 1 0 sgw 0 ct3 sgw 0 ct2 ldw 0 0 sgw 0 ct4 llw 12 0 sgw 0 ii0 llw 14 0 sgw 0 ii1 lll 8 0 sgl 0 ai0 jsr aes lgw io0 0 ret ret efn 0 : menu_text csv ldw 34 0 sgw 0 ct0 ldw 1 0 sgw 0 ct2 sgw 0 ct1 ldw 2 0 sgw 0 ct3 ldw 0 0 sgw 0 ct4 llw 12 0 sgw 0 ii0 lll 8 0 sgl 0 ai0 lll 14 0 sgl 0 ai1 jsr aes lgw io0 0 ret ret efn 0 : menu_register csv ldw 35 0 sgw 0 ct0 ldw 1 0 sgw 0 ct3 sgw 0 ct2 sgw 0 ct1 ldw 0 0 sgw 0 ct4 llw 8 0 sgw 0 ii0 lll 10 0 sgl 0 ai0 jsr aes lgw io0 0 ret ret efn 0 : form_pf csv lal 12 0 tad 0 0 phl 0 lll 8 0 phl 0 lag _pfb 0 tad 0 0 phl 0 jsr _dopf pop 12 lag _pfb 0 tad 0 0 phl 0 ldw 0 0 phw 0 jsr form_alert pop 6 ret efn 0 : form_do csv ldw 50 0 sgw 0 ct0 ldw 1 0 sgw 0 ct3 sgw 0 ct1 ldw 2 0 sgw 0 ct2 ldw 0 0 sgw 0 ct4 llw 12 0 sgw 0 ii0 lll 8 0 sgl 0 ai0 jsr aes lgw io0 0 ret ret efn 0 : form_dial csv ldw 51 0 sgw 0 ct0 ldw 9 0 sgw 0 ct1 ldw 1 0 sgw 0 ct2 sgw 0 ct3 ldw 0 0 sgw 0 ct4 llw 8 0 sgw 0 ii0 llw 10 0 sgw 0 ii1 llw 12 0 sgw 0 ii2 llw 14 0 sgw 0 ii3 llw 16 0 sgw 0 ii4 llw 18 0 sgw 0 ii5 llw 20 0 sgw 0 ii6 llw 22 0 sgw 0 ii7 llw 24 0 sgw 0 ii8 jsr aes lgw io0 0 ret ret efn 0 : form_center csv ldw 54 0 sgw 0 ct0 ldw 0 0 sgw 0 ct1 ldw 5 0 sgw 0 ct3 ldw 1 0 sgw 0 ct2 ldw 0 0 sgw 0 ct4 lll 8 0 sgl 0 ai0 jsr aes lgw io1 0 lll 12 1 tda 1 0 sow 0 0 0 lgw io2 0 lll 16 1 tda 1 0 sow 0 0 0 lgw io3 0 lll 20 1 tda 1 0 sow 0 0 0 lgw io4 0 lll 24 1 tda 1 0 sow 0 0 0 lgw io0 0 ret ret efn 0 : form_error csv ldw 53 0 sgw 0 ct0 ldw 1 0 sgw 0 ct2 sgw 0 ct1 ldw 0 0 sgw 0 ct4 sgw 0 ct3 llw 8 0 sgw 0 ii0 jsr aes lgw io0 0 ret ret efn 0 : form_alert csv ldw 52 0 sgw 0 ct0 ldw 1 0 sgw 0 ct3 sgw 0 ct2 sgw 0 ct1 ldw 0 0 sgw 0 ct4 llw 8 0 sgw 0 ii0 lll 10 0 sgl 0 ai0 jsr aes lgw io0 0 ret ret efn 0 : aes csv lag aes0 0 tad 0 1 ldw 200 0 trp 2 ret efn 0 : vdi csv lag vdi0 0 tad 0 1 ldw 115 0 trp 2 ret efn 0 /* * the GEM library * contains both AES and VDI stuff, though not all of it */ extern int ct0, ct1, ct2, ct3, ct4, ct5, ct6; extern int ii0, ii1, ii2, ii3, ii4, ii5, ii6, ii7, ii8, ii9, ii10, ii11, ii12, ii13, ii14, ii15; extern int io0, io1, io2, io3, io4, io5, io6, iox[40]; extern int pi0, pi1, pi2, pi3, pi4, pi5, pi6, pi7, pix[6]; extern int po0, po1, po2, po3, pox[12]; extern int *ai0, *ai1; extern int *ao0; extern int *aes0, *aes1, *aes2, *aes3, *aes4, *aes5; extern int *vdi0, *vdi1, *vdi2, *vdi3, *vdi4, *vdi5; extern int global[16]; /* * the c runtime start up routine for GEM processes * no argv argc stuff, no stdio (use TOS routines for file access) * * assumes a startup prg.s of * . _bstk 2048 * . _estk 4 * taa 7 6 * lll 4 0 * sgl _estk * lag _estk 7 * jsr _cprg * plus definitions for all the above externs */ #define SETBLK 0x4A #define EXIT 0x4C _cprg(tpa) long tpa; { int i; long x, *lp; /* compute size of program, give memory back to TOS */ lp = tpa; x = lp[3] + lp[5] + lp[7] + 0x100; if (trap(1, SETBLK, 0, tpa, x)) appl_exit(-1); /* set up the aespb and vdipb arrays */ aes0 = &ct0; aes1 = global; aes2 = &ii0; aes3 = &io0; aes4 = &ai0; aes5 = &ao0; vdi0 = &ct0; vdi1 = &ii0; vdi2 = &pi0; vdi3 = &io0; vdi4 = &po0; /* run the program */ i = main(); /* close up shop */ appl_exit(i); } /* GEM application init */ appl_init() { ct0 = 10; ct2 = 1; ct1 = ct3 = ct4 = 0; aes(); return io0; } appl_exit(i) { trap(1, EXIT, i); } /* VDI routines for the GEM library */ /* * GEM:VDI open virtual workstation * "in" should point to work_in[11] * "out" should point to work_out[57]; * "handle" is both input and output */ v_opnvwk(in, handle, out) int *in, *handle, *out; { int i, j, *intin, *intout, *ptsout; ct0 = 100; ct1 = 0; ct3 = 11; ct6 = *handle; intin = &ii0; for (i = 0; i < 11; i++) intin[i] = in[i]; vdi(); intout = &io0; for (i = 0; i < 45; i++) out[i] = intout[i]; ptsout = &po0; for (j = 0; j < 12; j++) out[i++] = ptsout[j]; *handle = ct6; } vq_extnd(handle, owflag, out) int *out; { int i, j, *intout, *ptsout; ct0 = 102; ct1 = 0; ct3 = 1; ct6 = handle; ii0 = owflag; vdi(); intout = &io0; for (i = 0; i < 45; i++) out[i] = intout[i]; ptsout = &po0; for (j = 0; j < 12; j++) out[i++] = ptsout[j]; } /* GEM:VDI close the workstation */ v_clsvwk(handle) { ct0 = 101; ct6 = handle; ct1 = ct3 = 0; vdi(); } /* GEM:VDI clear the workstation */ v_clrwk(handle) { ct0 = 3; ct1 = 0; ct3 = 0; ct6 = handle; vdi(); } /* GEM:VDI poly line output */ v_pline(handle, count, pxy) int *pxy; { ct0 = 6; ct1 = count; ct3 = 0; ct6 = handle; vdi2 = pxy; vdi(); vdi2 = &po0; } /* GEM:VDI put text on the screen */ v_gtext(handle, x, y, string) char *string; { int n, *intin; ct0 = 8; ct1 = 1; intin = &ii0; for (n = 0; string[n]; n++) intin[n] = string[n]; ct3 = n; ct6 = handle; pi0 = x; pi0 = y; vdi(); } /* * GEM:VDI set clipping rectangle * flag = 0 no clipping * flag = 1 clipping on * pxy[] should contain the upper left and bottom right coords */ vs_clip(handle, flag, pxy) int *pxy; { ct0 = 129; ct1 = 2; ct3 = 1; ct6 = handle; ii0 = flag; vdi2 = pxy; vdi(); vdi2 = &pi0; } /* GEM:VDI polymarker output */ v_pmarker(handle, count, pxy) int *pxy; { ct0 = 7; ct1 = count; ct3 = 0; ct6 = handle; vdi2 = pxy; vdi(); vdi2 = &pi0; } /* GEM:VDI fill area */ v_fillarea(handle, count, pxy) int *pxy; { ct0 = 9; ct1 = count; ct3 = 0; ct6 = handle; vdi2 = pxy; vdi(); vdi2 = &pi0; } /* GEM:VDI contour fill */ v_contourfill(handle, x, y, index) { ct0 = 103; ct1 = 1; ct3 = 1; ct6 = handle; ii0 = index; pi0 = x; pi1 = y; vdi(); } /* GEM:VDI rectangle fill */ vr_recfl(handle, pxy) int *pxy; { ct0 = 114; ct1 = 2; ct3 = 0; ct6 = handle; vdi2 = pxy; vdi(); vdi2 = &pi0; } /* GEM:VDI bar graph */ v_bar(handle, pxy) int *pxy; { ct0 = 11; ct1 = 2; ct3 = 0; ct5 = 1; ct6 = handle; vdi2 = pxy; vdi(); vdi2 = &pi0; } /* GEM:VDI arc */ v_arc(handle, x, y, rad, b_angle, e_angle) { int i, *ptsin; ct0 = 11; ct1 = 4; ct3 = 2; ct5 = 2; ct6 = handle; ii0 = b_angle; ii1 = e_angle; pi0 = x; pi1 = y; pi6 = rad; pi2 = pi3 = pi4 = pi5 = pi7 = 0; vdi(); } /* GEM:VDI pie */ v_pieslice(handle, x, y, rad, b_angle, e_angle) { int i; ct0 = 11; ct1 = 4; ct3 = 2; ct5 = 3; ct6 = handle; ii0 = b_angle; ii1 = e_angle; pi0 = x; pi1 = y; pi6 = rad; pi2 = pi3 = pi4 = pi5 = pi7 = 0; vdi(); } /* GEM:VDI circle */ v_circle(handle, x, y, rad) { int i; ct0 = 11; ct1 = 3; ct3 = 0; ct5 = 4; ct6 = handle; pi0 = x; pi1 = y; pi4 = rad; pi2 = pi3 = pi5 = 0; vdi(); } /* GEM:VDI elliptical arc */ v_ellarc(handle, x, y, xrad, yrad, b_angle, e_angle) { int i; ct0 = 11; ct1 = 2; ct3 = 2; ct5 = 6; ct6 = handle; ii0 = b_angle; ii1 = e_angle; pi0 = x; pi1 = y; pi2 = xrad; pi3 = yrad; vdi(); } /* GEM:VDI elliptical pie */ v_ellpie(handle, x, y, xrad, yrad, b_angle, e_angle) { int i; ct0 = 11; ct1 = 2; ct3 = 2; ct5 = 7; ct6 = handle; ii0 = b_angle; ii1 = e_angle; pi0 = x; pi1 = y; pi2 = xrad; pi3 = yrad; vdi(); } /* GEM:VDI ellipse */ v_ellipse(handle, x, y, xrad, yrad) { ct0 = 11; ct1 = 2; ct3 = 0; ct5 = 5; ct6 = handle; pi0 = x; pi1 = y; pi2 = xrad; pi3 = yrad; vdi(); } /* GEM:VDI rounded box */ v_rbox(handle, pxy) int *pxy; { ct0 = 11; ct1 = 2; ct3 = 0; ct5 = 8; ct6 = handle; vdi2 = pxy; vdi(); vdi2 = &pi0; } /* GEM:VDI rounded filled box */ v_rfbox(handle, pxy) int *pxy; { ct0 = 11; ct1 = 2; ct3 = 0; ct5 = 9; ct6 = handle; vdi2 = pxy; vdi(); vdi2 = &pi0; } /* GEM:VDI put justified text on the screen */ v_justified(handle, x, y, string, len, wspace, cspace) char *string; { int *ip; ct0 = 11; ct1 = 2; ct6 = handle; ii0 = wspace; ii1 = cspace; ip = &ii2; for (ct3 = 2; *ip++ = *string++; ct3++) ; pi0 = x; pi1 = y; pi2 = len; vdi(); } /* GEM:VDI set drawing mode */ vswr_mode(handle, mode) { return vset(handle, 32, mode); } /* GEM:VDI set color */ vs_color(handle, index, rgb) int *rgb; { ct0 = 14; ct1 = 0; ct3 = 4; ct6 = handle; ii0 = index; ii1 = rgb[0]; ii2 = rgb[1]; ii3 = rgb[2]; vdi(); } /* GEM:VDI set line color */ vsl_color(handle, color) { return vset(handle, 17, color); } /* GEM:VDI set line type */ vsl_type(handle, type) { return vset(handle, 15, type); } /* GEM:VDI set marker type */ vsm_type(handle, type) { return vset(handle, 18, type); } /* GEM:VDI set marker height */ vsm_height(handle, height) { ct0 = 19; ct1 = 1; ct3 = 0; ct6 = handle; pi0 = 0; pi1 = height; vdi(); return po1; } /* GEM:VDI set user defined line type */ vsl_udsty(handle, pattern) { return vset(handle, 113, pattern); } /* GEM:VDI set the width of a line */ vsl_width(handle, width) { ct0 = 16; ct1 = 1; ct3 = 0; ct6 = handle; pi0 = width; pi1 = 0; vdi(); return po0; } /* GEM:VDI line end style */ vsl_ends(handle, begin, end) { ct0 = 108; ct1 = 0; ct2 = 2; ct6 = handle; ii0 = begin; ii1 = end; vdi(); } /* GEM:VDI set marker color */ vsm_color(handle, color) { return vset(handle, 20, color); } /* GEM:VDI set text height, returns char size and cell(box) size */ vst_height(handle, h, cw, ch, bw, bh) int *cw, *ch, *bw, *bh; { ct0 = 12; ct1 = 1; ct3 = 0; ct6 = handle; pi0 = 0; pi1 = h; vdi(); *cw = po0; *ch = po1; *bw = po2; *bh = po3; } /* GEM:VDI set text height, returns char size and cell(box) size */ vst_point(handle, point, cw, ch, bw, bh) int *cw, *ch, *bw, *bh; { ct0 = 107; ct1 = 0; ct3 = 1; ct6 = handle; ii0 = point; vdi(); *cw = po0; *ch = po1; *bw = po2; *bh = po3; } /* GEM:VDI set text baseline rotation */ vst_rotation(handle, angle) { return vset(handle, 13, angle); } /* GEM:VDI set color of the text */ vst_color(handle, color) { return vset(handle, 22, color); } /* * GEM:VDI set effects of the text * bit 0 bold * bit 1 light * bit 2 italic * bit 3 underline * bit 4 outline * bit 5 shadowed */ vst_effects(handle, effect) { return vset(handle, 106, effect); } /* GEM:VDI set text alignment */ vst_alignment(handle, hor, ver, nhor, nver) int *nhor, *nver; { ct0 = 39; ct1 = 0; ct3 = 2; ct6 = handle; ii0 = hor; ii0 = ver; vdi(); *nhor = io0; *nver = io1; } /* GEM:VDI set fill interior */ vsf_interior(handle, style) { return vset(handle, 23, style); } /* GEM:VDI set fill style index */ vsf_style(handle, style) { return vset(handle, 24, style); } /* GEM:VDI set fill color index */ vsf_color(handle, color) { return vset(handle, 25, color); } /* GEM:VDI set perimeter visibility */ vsf_perimeter(handle, visible) { return vset(handle, 105, visible); } /* GEM:VDI set user defined fill pattern */ vsf_updat(handle, pat, count) int *pat; { ct0 = 112; ct1 = 0; ct3 = count * 16; ct6 = handle; vdi1 = pat; vdi(); vdi1 = &ii0; } /* GEM:VDI set an attribute */ vset(handle, op, arg) { ct0 = op; ct1 = 0; ct3 = 1; ct6 = handle; ii0 = arg; vdi(); return io0; } /* AES: resource handling */ rsrc_gaddr(type, index, addr) long **addr; { ct0 = 112; ct1 = 2; ct2 = ct4 = 1; ct3 = 0; ii0 = type; ii1 = index; aes(); *addr = ao0; return io0; } rsrc_saddr(type, index, addr) long *addr; { ct0 = 113; ct1 = 2; ct2 = ct3 = 1; ct4 = 0; ii0 = type; ii1 = index; ai0 = addr; aes(); return io0; } /* graphics handling */ graf_handle(wchar, hchar, wbox, hbox) int *wchar, *hchar, *wbox, *hbox; { ct0 = 77; ct2 = 5; ct1 = ct3 = ct4 = 0; aes(); *wchar = io1; *hchar = io2; *wbox = io3; *hbox = io4; return io0; } graf_rubberbox(x, y, minw, minh, lastw, lasth) int *lastw, *lasth; { ct0 = 70; ct1 = 4; ct2 = 3; ct3 = ct4 = 0; ii0 = x; ii1 = y; ii2 = minw; ii3 = minh; aes(); *lastw = io1; *lasth = io2; return io0; } graf_dragbox(dw, dh, sx, sy, bx, by, bw, bh, endx, endy) int *endx, *endy; { ct0 = 71; ct1 = 8; ct2 = 3; ct3 = ct4 = 0; ii0 = dw; ii1 = dh; ii2 = sx; ii3 = sy; ii4 = bx; ii5 = by; ii6 = bw; ii7 = bh; aes(); *endx = io1; *endy = io2; return io0; } graf_movebox(w, h, sx, sy, dx, dy) { ct0 = 72; ct1 = 6; ct2 = 1; ct3 = ct4 = 0; ii0 = w; ii1 = h; ii2 = sx; ii3 = sy; ii4 = dx; ii5 = dy; aes(); return io0; } graf_growbox(bx, by, bw, bh, ex, ey, ew, eh) { ct0 = 73; ct1 = 8; ct2 = 1; ct3 = ct4 = 0; aes2 = &bx; aes(); aes2 = &ii0; return io0; } graf_shrinkbox(ex, ey, ew, eh, bx, by, bw, bh) { ct0 = 73; ct1 = 8; ct2 = 1; ct3 = ct4 = 0; aes2 = &ex; aes(); aes2 = &ii0; return io0; } graf_watchbox(tree, obj, instate, outstate) int *tree; { ct0 = 75; ct1 = 4; ct2 = ct3 = 1; ct4 = 0; ii1 = obj; ii2 = instate; ii3 = outstate; ai0 = tree; aes(); return io0; } graf_slidebox(tree, parent, obj, vh) int *tree; { ct0 = 76; ct1 = 3; ct2 = ct3 = 1; ct4 = 0; ii0 = parent; ii1 = obj; ii2 = vh; ai0 = tree; aes(); return io0; } graf_mouse(type, shape) int *shape; { ct0 = 78; ct1 = ct2 = ct3 = 1; ct4 = 0; ii0 = type; ai0 = shape; aes(); return io0; } graf_mkstate(x, y, mstate, kstate) int *x, *y, *mstate, *kstate; { ct0 = 79; ct1 = ct3 = ct4 = 0; ct2 = 5; aes(); *x = io1; *y = io2; *mstate = io3; *kstate = io4; return io0; } /* window handling */ wind_get(handle, gfld, gw1, gw2, gw3, gw4) int *gw1, *gw2, *gw3, *gw4; { ct0 = 104; ct1 = 2; ct2 = 5; ct3 = ct4 = 0; ii0 = handle; ii1 = gfld; aes(); *gw1 = io1; *gw2 = io2; *gw3 = io3; *gw4 = io4; return io0; } wind_create(kind, x, y, w, h) { ct0 = 100; ct1 = 5; ct2 = 1; ct3 = ct4 = 0; ii0 = kind; ii1 = x; ii2 = y; ii3 = w; ii4 = h; aes(); return io0; } wind_set(handle, field, s1, s2, s3, s4) { ct0 = 105; ct1 = 6; ct2 = 1; ct3 = ct4 = 0; ii0 = handle; ii1 = field; ii2 = s1; ii3 = s2; ii4 = s3; ii5 = s4; aes(); return io0; } wind_open(handle, x, y, w, h) { ct0 = 101; ct1 = ct2 = 5; ct3 = ct4 = 0; ii0 = handle; ii1 = x; ii2 = y; ii3 = w; ii4 = h; aes(); return io0; } wind_close(handle) { ct0 = 102; ct1 = ct2 = 1; ct3 = ct4 = 0; ii0 = handle; aes(); return io0; } wind_delete(handle) { ct0 = 103; ct1 = ct2 = 1; ct3 = ct4 = 0; ii0 = handle; aes(); return io0; } wind_find(x, y) { ct0 = 106; ct1 = 2; ct2 = 1; ct3 = ct4 = 0; ii0 = x; ii1 = y; aes(); return io0; } wind_update(n) { ct0 = 107; ct1 = ct2 = 1; ct3 = ct4 = 0; ii0 = n; aes(); return io0; } wind_calc( type, kind, xi, yi, wi, hi, xo, yo, wo, ho) int *xo, *yo, *wo, *ho; { ct0 = 108; ct1 = 6; ct2 = 5; ct3 = ct4 = 0; ii0 = type; ii1 = kind; ii2 = xi; ii3 = yi; ii4 = wi; ii5 = hi; aes(); *xo = io1; *yo = io2; *wo = io3; *ho = io4; return io0; } /* event handling */ event_multi( flags, clicks, mask, state, af, ax, ay, aw, ah, bf, bx, by, bw, bh, buff, lo, hi, ox, oy, obut, ostate, okret, obret) int *ox, *oy, *obut, *ostate, *okret, *obret; { ct0 = 25; ct1 = 16; ct2 = 7; ct3 = 1; ct4 = 0; ii0 = flags; ii1 = clicks; ii2 = mask; ii3 = state; ii4 = af; ii5 = ax; ii6 = ay; ii7 = aw; ii8 = ah; ii9 = bf; ii10 = bx; ii11 = by; ii12 = bw; ii13 = bh; ii14 = lo; ii15 = hi; ai0 = buff; aes(); *ox = io1; *oy = io2; *obut = io3; *ostate = io4; *okret = io5; *obret = io6; return io0; } /* object handling */ objc_draw(tree, start, depth, xclip, yclip, wclip, hclip) int *tree; { ct0 = 42; ct1 = 6; ct2 = ct3 = 1; ct4 = 0; ii0 = start; ii1 = depth; ii2 = xclip; ii3 = yclip; ii4 = wclip; ii5 = hclip; ai0 = tree; aes(); return io0; } objc_find(tree, start, depth, x, y) int *tree; { ct0 = 43; ct1 = 4; ct2 = ct3 = 1; ct4 = 0; ii0 = start; ii1 = depth; ii2 = x; ii3 = y; ai0 = tree; aes(); return io0; } objc_offset(tree, object, xoff, yoff) int *tree, *xoff, *yoff; { ct0 = 43; ct1 = 1; ct2 = 3; ct3 = 1; ct4 = 0; ii0 = object; ai0 = tree; aes(); *xoff = io1; *yoff = io2; return io0; } objc_edit(tree, object, ch, idx, kind, newidx) int *tree, *newidx; { ct0 = 46; ct1 = 4; ct2 = 2; ct3 = 1; ct4 = 0; ii0 = object; ii1 = ch; ii2 = idx; ii3 = kind; ai0 = tree; aes(); *newidx = io1; return io0; } objc_change(tree, object, resvd, x, y, w, h, state, redraw) int *tree; { ct0 = 47; ct1 = 8; ct2 = ct3 = 1; ct4 = 0; ii0 = object; ii1 = resvd; ii2 = x; ii3 = y; ii4 = w; ii5 = h; ii6 = state; ii7 = redraw; ai0 = tree; aes(); return io0; } /* menu handling */ menu_bar(tree, show) int *tree; { ct0 = 30; ct1 = ct2 = ct3 = 1; ct4 = 0; ii0 = show; ai0= tree; aes(); return io0; } menu_icheck(tree, item, check) int *tree; { ct0 = 31; ct1 = 2; ct2 = ct3 = 1; ct4 = 0; ii0 = item; ii1 = check; ai0 = tree; aes(); return io0; } menu_enable(tree, item, enable) int *tree; { ct0 = 32; ct1 = 2; ct2 = ct3 = 1; ct4 = 0; ii0 = item; ii1 = enable; ai0 = tree; aes(); return io0; } menu_tnormal(tree, title, normal) int *tree; { ct0 = 33; ct1 = 2; ct2 = ct3 = 1; ct4 = 0; ii0 = title; ii1 = normal; ai0 = tree; aes(); return io0; } menu_text(tree, item, text) int *tree; char *text; { ct0 = 34; ct1 = ct2 = 1; ct3 = 2; ct4 = 0; ii0 = item; ai0 = tree; ai1 = text; aes(); return io0; } menu_register(id, string) char *string; { ct0 = 35; ct1 = ct2 = ct3 = 1; ct4 = 0; ii0 = id; ai0 = string; aes(); return io0; } /* form handling */ form_pf(fmt, args) char *fmt; int args; { extern char _pfb[1]; _dopf(_pfb, fmt, &args); form_alert(0, _pfb); } form_do(tree, start) int *tree; { ct0 = 50; ct1 = ct3 = 1; ct2 = 2; ct4 = 0; ii0 = start; ai0 = tree; aes(); return io0; } form_dial(flag, sx, sy, sw, sh, bx, by, bw, bh) { ct0 = 51; ct1 = 9; ct3 = ct2 = 1; ct4 = 0; ii0 = flag; ii1 = sx; ii2 = sy; ii3 = sw; ii4 = sh; ii5 = bx; ii6 = by; ii7 = bw; ii8 = bh; aes(); return io0; } form_center(tree, x, y, w, h) int *tree, *x, *y, *w, *h; { ct0 = 54; ct1 = 0; ct3 = 5; ct2 = 1; ct4 = 0; ai0 = tree; aes(); *x = io1; *y = io2; *w = io3; *h = io4; return io0; } form_error(num) { ct0 = 53; ct1 = ct2 = 1; ct3 = ct4 = 0; ii0 = num; aes(); return io0; } form_alert(button, string) char *string; { ct0 = 52; ct1 = ct2 = ct3 = 1; ct4 = 0; ii0 = button; ai0 = string; aes(); return io0; } /* AES and VDI support routines */ aes() { /* * load address of aes parameter block into a0 * transfer a0 to d1 * load 200 into d0 * trap #2 */ asm( lag aes0 0 tad 0 1 ldw 200 0 trp 2 ); } vdi() { /* * load address of vdi parameter block into a0 * transfer a0 to d1 * load 115 into d0 * trap #2 */ asm( lag vdi0 0 tad 0 1 ldw 115 0 trp 2 ); } /* gem definitions and structures */ struct object { int next; /* index of next object in the tree */ int start; /* index of first subordinate */ int last; /* index of last subordinate */ int type; /* type of the object */ int flags; /* selectability of the objects */ int status; /* state of the object */ int *spec; /* pointer to object data structure */ int x; /* x coord relative to parent */ int y; /* y coord relative to parent */ int w; /* width of the object */ int h; /* height of the object */ }; /* object types */ #define BOX 20 #define TEXT 21 #define BOXTEXT 22 #define IMAGE 23 #define PROGDEF 24 #define IBOX 25 #define BUTTON 26 #define BOXCHAR 27 #define STRING 28 #define FTEXT 29 #define FBOXT 30 #define ICON 31 #define TITLE 32 /* object flags */ #define NONE 0x00 #define SELECT 0x01 #define DEFAULT 0x02 #define EXIT 0x04 #define EDIT 0x08 #define RBUTTON 0x10 #define LASTOBJ 0x20 #define TOUCHX 0x40 #define HIDE 0x80 #define INDIR 0x100 /* object status */ #define CROSSED 0x02 #define CHECKED 0x04 #define DISABLE 0x08 #define OUTLINE 0x10 #define SHADOW 0x20 struct tedinfo { char *text; /* string to be output */ char *tmplt; /* template for the string */ char *valid; /* permission string for input */ int font; /* character set (normal 3, small 5) */ int res1; /* reserved */ int just; /* justify (left 0, right 1, center 2) */ int color; /* text color */ int res2; /* reserved */ int thick; /* border thickness -127 to 128 */ int txtlen; /* length of the string */ int tmplen; /* length of the template */ }; : _cttp csv lll 8 0 sll 0 -26 lll -26 0 tda 0 0 ldw 3 0 adw 4 0 lxl 0 0 0 lll -26 1 tda 1 0 ldw 5 1 adw 4 1 lxl 0 1 1 obl 12 1 0 lll -26 1 tda 1 0 ldw 7 1 adw 4 1 lxl 0 1 1 obl 12 1 0 ldw 256 1 xtw 1 obl 12 1 0 sll 0 -22 lll -22 0 phl 0 lll 8 0 phl 0 ldw 0 0 phw 0 ldw 74 0 phw 0 trp 1 pop 12 tsl 0 brc 4 0 ldw -1 0 phw 0 jsr exit pop 2 * 0 ldw 1 0 sgw 0 argc l$ 0 0 tad 0 0 lag argv 0 ldw 0 1 adw 4 1 sxl 0 1 0 lll 8 0 ldw 129 1 xtw 1 obl 12 1 0 sll 0 -4 ldw 0 0 xuw 0 sll 0 -16 sll 0 -12 * 1 lll -4 0 tda 0 0 lob 0 0 0 tsb 0 brc 4 2 * 3 lll -4 0 tda 0 0 lob 0 0 0 tsb 0 brc 4 4 lll -4 0 tda 0 0 lob 0 0 0 ldw 32 1 xtb 0 cmw 0 1 brc 7 4 lll -4 0 ill 1 -4 jmp 3 * 4 lll -4 0 sll 0 -8 * 5 lll -4 0 tda 0 0 lob 0 0 0 tsb 0 brc 4 6 lll -4 0 tda 0 0 lob 0 0 0 ldw 32 1 xtb 0 cmw 0 1 brc 8 6 lll -4 0 ill 1 -4 jmp 5 * 6 lll -4 0 tda 0 0 lob 0 0 0 tsb 0 brc 4 7 ldw 0 0 lll -4 1 ill 1 -4 tda 1 0 sob 0 0 0 * 7 lll -8 0 tda 0 0 lob 0 0 0 ldw 60 1 xtb 0 cmw 0 1 brc 5 8 lll -8 0 ldw 1 1 xtw 1 obl 12 1 0 sll 0 -12 jmp 9 * 8 lll -8 0 tda 0 0 lob 0 0 0 ldw 62 1 xtb 0 cmw 0 1 brc 5 10 lll -8 0 ldw 1 1 xtw 1 obl 12 1 0 sll 0 -16 jmp 11 * 10 lgw argc 0 ldw 30 1 cmw 0 1 brc 9 12 lll -8 0 lag argv 0 lgw argc 1 igw 1 argc adw 4 1 sxl 0 1 0 * 12 * 11 * 9 jmp 1 * 2 ldl 0 0 lag argv 0 lgw argc 1 adw 4 1 sxl 0 1 0 ldw 0 0 slw 0 -18 * 13 llw -18 0 ldw 6 1 cmw 0 1 brc 9 14 jmp 15 * 16 llw -18 0 ilw 1 -18 jmp 13 * 15 ldw 0 0 lag _iobuf 0 llw -18 1 adw 262 1 lax 0 1 0 sob 0 0 0 ldw 0 0 lag _iobuf 0 llw -18 1 adw 262 1 lax 0 1 0 sow 0 4 0 lag _iobuf 0 llw -18 1 adw 262 1 lax 0 1 0 sow 0 2 0 lag _iobuf 0 llw -18 1 adw 262 1 lax 0 1 0 sob 0 1 0 jmp 16 * 14 lag _iobuf 0 ldw 0 0 adw 262 0 lax 0 0 0 tad 0 0 sgl 0 stdin lag _iobuf 0 ldw 1 0 adw 262 0 lax 0 0 0 tad 0 0 sgl 0 stdout lag _iobuf 0 ldw 2 0 adw 262 0 lax 0 0 0 tad 0 0 sgl 0 stderr ldw 3 0 lgl stderr 1 tda 1 0 sob 0 0 0 lgl stdout 1 tda 1 0 sob 0 0 0 lgl stdin 1 tda 1 0 sob 0 0 0 lll -12 0 tsl 0 brc 4 17 ldw 0 0 phw 0 lll -12 0 phl 0 ldw 61 0 phw 0 trp 1 pop 8 slw 0 -18 lgl stdin 1 tda 1 0 sob 0 1 0 ldw 1 0 lgl stdin 1 tda 1 0 sob 0 0 0 llw -18 0 ldw 0 1 cmw 0 1 brc 9 18 llw -18 0 phw 0 lll -12 0 phl 0 jsr _cant pop 6 * 18 * 17 lll -16 0 tsl 0 brc 4 19 lll -16 0 tda 0 0 lob 0 0 0 ldw 62 1 xtb 0 cmw 0 1 brc 4 20 ldw 0 0 phw 0 lll -16 0 phl 0 ldw 60 0 phw 0 trp 1 pop 8 slw 0 -18 lgl stdout 1 tda 1 0 sob 0 1 0 jmp 21 * 20 ldw 1 0 phw 0 ill 1 -16 lll -16 0 phl 0 ldw 61 0 phw 0 trp 1 pop 8 slw 0 -18 lgl stdout 1 tda 1 0 sob 0 1 0 llw -18 0 ldw 0 1 cmw 0 1 brc 6 22 ldw 2 0 phw 0 llw -18 0 phw 0 ldl 0 0 phl 0 ldw 66 0 phw 0 trp 1 pop 10 slw 0 -18 * 22 * 21 ldw 2 0 lgl stdout 1 tda 1 0 sob 0 0 0 llw -18 0 ldw 0 1 cmw 0 1 brc 9 23 llw -18 0 phw 0 lll -16 0 phl 0 jsr _cant pop 6 * 23 * 19 lag argv 0 tad 0 0 phl 0 lgw argc 0 phw 0 jsr main pop 6 slw 0 -18 lll -12 0 tsl 0 brc 4 24 lgl stdin 0 phl 0 jsr fclose pop 4 * 24 lll -16 0 tsl 0 brc 4 25 lgl stdout 0 phl 0 jsr fclose pop 4 * 25 llw -18 0 phw 0 jsr exit pop 2 ret efn 26 $ 0 = 31075 = 0 : _cant csv l$ 0 0 tad 0 0 phl 0 jsr _ps pop 4 lll 8 0 phl 0 jsr _ps pop 4 l$ 1 0 tad 0 0 phl 0 jsr _ps pop 4 llw 12 0 phw 0 jsr exit pop 2 ret efn 0 $ 0 = 25441 = 28199 = 29728 = 29285 = 25705 = 29285 = 25460 = 8192 $ 1 = 2573 = 0 : _ps csv * 0 lll 8 0 tda 0 0 lob 0 0 0 tsb 0 brc 4 1 lll 8 0 ill 1 8 tda 0 0 lob 0 0 0 xtb 0 phw 0 ldw 2 0 phw 0 trp 1 pop 4 jmp 0 * 1 ret efn 0 : exit csv llw 8 0 phw 0 ldw 76 0 phw 0 trp 1 pop 4 ret efn 0 . argc 2 . argv 120 . _iobuf 1572 . stdin 4 . stdout 4 . stderr 4 : sprintf csv lal 16 0 tad 0 0 phl 0 lll 12 0 phl 0 lll 8 0 phl 0 jsr _dopf pop 12 ret efn 0 : printf csv lal 12 0 tad 0 0 phl 0 lll 8 0 phl 0 lag _pfb 0 tad 0 0 phl 0 jsr _dopf pop 12 lgl stdout 0 phl 0 lag _pfb 0 tad 0 0 phl 0 jsr fputs pop 8 ret efn 0 : fprintf csv lal 16 0 tad 0 0 phl 0 lll 12 0 phl 0 lag _pfb 0 tad 0 0 phl 0 jsr _dopf pop 12 lll 8 0 phl 0 lag _pfb 0 tad 0 0 phl 0 jsr fputs pop 8 ret efn 0 : fclose csv lll 8 0 ldw 0 1 xuw 1 cml 0 1 brc 20 0 lll 8 0 tda 0 0 lob 0 0 0 ldw 2 1 xtb 0 cmw 0 1 brc 5 1 lll 8 0 phl 0 jsr fflush pop 4 * 1 lll 8 0 tda 0 0 lob 0 1 0 tsb 0 brc 4 2 lll 8 0 tda 0 0 lob 0 1 0 xtb 0 phw 0 ldw 62 0 phw 0 trp 1 pop 4 * 2 ldw 0 0 lll 8 1 tda 1 0 sob 0 0 0 * 0 ret efn 0 : fflush csv lll 8 0 tda 0 0 low 0 2 0 ldw 0 1 cmw 0 1 brc 8 0 lll 8 0 tda 0 0 lao 0 6 0 tad 0 0 phl 0 lll 8 0 tda 0 0 low 0 2 0 xtw 0 phl 0 lll 8 0 tda 0 0 lob 0 1 0 xtb 0 phw 0 ldw 64 0 phw 0 trp 1 pop 12 slw 0 -2 * 0 ldw 0 0 lll 8 1 tda 1 0 sow 0 2 0 llw -2 0 ldw 0 1 cmw 0 1 brc 7 1 ldw -1 0 jmp 2 * 1 llw -2 0 * 2 ret ret efn 2 : fgets csv lll 14 0 phl 0 jsr getc pop 4 slw 0 -2 llw -2 0 ldw -1 1 cmw 0 1 brc 5 0 ldw 0 0 xuw 0 ret * 0 llw 12 0 ilw -1 12 ldw 0 0 slw 0 -4 * 1 llw -4 0 llw 12 1 cmw 0 1 brc 9 2 llw -2 0 ldw -1 1 cmw 0 1 brc 4 2 jmp 3 * 4 lll 14 0 phl 0 jsr getc pop 4 slw 0 -2 jmp 1 * 3 llw -2 0 lll 8 1 tda 1 0 llw -4 1 ilw 1 -4 xtw 1 sxb 0 1 0 llw -2 0 ldw 10 1 cmw 0 1 brc 5 5 jmp 2 * 5 jmp 4 * 2 ldw 0 0 lll 8 1 tda 1 0 llw -4 1 xtw 1 sxb 0 1 0 lll 8 0 ret ret efn 4 : fopen csv ldw 0 0 slw 0 -2 * 0 llw -2 0 ldw 6 1 cmw 0 1 brc 9 1 lag _iobuf 0 llw -2 0 adw 262 0 lax 0 0 0 lob 0 0 0 ldw 0 1 xtb 0 cmw 0 1 brc 4 1 jmp 2 * 3 llw -2 0 ilw 1 -2 jmp 0 * 2 jmp 3 * 1 llw -2 0 ldw 6 1 cmw 0 1 brc 6 4 ldw 0 0 xuw 0 ret * 4 lll 12 0 tda 0 0 lob 0 0 0 ldw 119 1 xtb 0 cmw 0 1 brc 5 5 ldw 0 0 phw 0 lll 8 0 phl 0 ldw 60 0 phw 0 trp 1 pop 8 slw 0 -6 ldw 2 0 slw 0 -4 jmp 6 * 5 lll 12 0 tda 0 0 lob 0 0 0 ldw 114 1 xtb 0 cmw 0 1 brc 5 7 ldw 0 0 phw 0 lll 8 0 phl 0 ldw 61 0 phw 0 trp 1 pop 8 slw 0 -6 ldw 1 0 slw 0 -4 jmp 8 * 7 lll 12 0 tda 0 0 lob 0 0 0 ldw 97 1 xtb 0 cmw 0 1 brc 5 9 ldw 1 0 phw 0 lll 8 0 phl 0 ldw 61 0 phw 0 trp 1 pop 8 slw 0 -6 ldw 0 1 cmw 0 1 brc 9 10 ldw 0 0 phw 0 lll 8 0 phl 0 ldw 60 0 phw 0 trp 1 pop 8 slw 0 -6 jmp 11 * 10 ldw 2 0 phw 0 llw -6 0 phw 0 ldl 0 0 phl 0 ldw 66 0 phw 0 trp 1 pop 10 ldl 0 1 cml 0 1 brc 9 12 ldw -1 0 slw 0 -6 * 12 * 11 ldw 2 0 slw 0 -4 jmp 13 * 9 ldw 3 0 phw 0 lll 8 0 phl 0 ldw 61 0 phw 0 trp 1 pop 8 slw 0 -6 ldw 3 0 slw 0 -4 * 13 * 8 * 6 llw -6 0 ldw 0 1 cmw 0 1 brc 9 14 ldw 0 0 xuw 0 ret * 14 lag _iobuf 0 llw -2 0 adw 262 0 lax 0 0 0 tad 0 0 sll 0 -12 ldw 0 0 lll -12 1 tda 1 0 sow 0 2 0 lll -12 1 tda 1 0 sow 0 4 0 llw -6 0 lll -12 1 tda 1 0 sob 0 1 0 llw -4 0 lll -12 1 tda 1 0 sob 0 0 0 lll -12 0 ret ret efn 12 : fputs csv * 0 lll 8 0 tda 0 0 lob 0 0 0 tsb 0 brc 4 1 lll 12 0 phl 0 lll 8 0 ill 1 8 tda 0 0 lob 0 0 0 xtb 0 phw 0 jsr putc pop 6 jmp 0 * 1 ret efn 0 : gets csv lll 8 0 sll 0 -6 lgl stdin 0 phl 0 jsr getc pop 4 slw 0 -2 ldw -1 1 cmw 0 1 brc 5 0 ldw 0 0 xuw 0 ret * 0 * 1 llw -2 0 ldw 10 1 cmw 0 1 brc 4 2 llw -2 0 ldw -1 1 cmw 0 1 brc 4 2 llw -2 0 lll 8 1 ill 1 8 tda 1 0 sob 0 0 0 lgl stdin 0 phl 0 jsr getc pop 4 slw 0 -2 jmp 1 * 2 ldw 0 0 lll 8 1 tda 1 0 sob 0 0 0 lll -6 0 ret ret efn 6 : getchar csv lgl stdin 0 phl 0 jsr getc pop 4 ret ret efn 0 : getc csv lll 8 0 ldw 0 1 xuw 1 cml 0 1 brc 21 0 ldw -1 0 ret * 0 lll 8 0 tda 0 0 lob 0 0 0 ldw 3 1 xtb 0 cmw 0 1 brc 5 1 lll 8 0 tda 0 0 lao 0 6 0 tad 0 0 phl 0 ldw 1 0 xtw 0 phl 0 lll 8 0 tda 0 0 lob 0 1 0 xtb 0 phw 0 ldw 63 0 phw 0 trp 1 pop 12 slw 0 -4 llw -4 0 ldw 1 1 cmw 0 1 brc 4 2 ldw -1 0 ret * 2 ldw 0 0 slw 0 -2 jmp 3 * 1 lll 8 0 tda 0 0 lob 0 0 0 ldw 1 1 xtb 0 cmw 0 1 brc 5 4 lll 8 0 tda 0 0 low 0 2 0 slw 0 -2 * 5 llw -2 0 lll 8 1 tda 1 0 low 0 4 1 cmw 0 1 brc 6 6 lll 8 0 tda 0 0 lao 0 6 0 tad 0 0 phl 0 ldw 256 0 xtw 0 phl 0 lll 8 0 tda 0 0 lob 0 1 0 xtb 0 phw 0 ldw 63 0 phw 0 trp 1 pop 12 slw 0 -4 llw -4 0 ldw 0 1 cmw 0 1 brc 7 7 ldw 0 0 lll 8 1 tda 1 0 sow 0 4 0 lll 8 1 tda 1 0 sow 0 2 0 ldw -1 0 ret * 7 llw -4 0 lll 8 1 tda 1 0 sow 0 4 0 ldw 0 0 slw 0 -2 jmp 5 * 6 llw -2 0 ldw 1 1 obw 12 1 0 lll 8 1 tda 1 0 sow 0 2 0 jmp 8 * 4 ldw -1 0 ret * 8 * 3 lll 8 0 tda 0 0 lao 0 6 0 llw -2 0 xtw 0 lxb 0 0 0 ldw 255 1 xtb 0 obw 3 1 0 slw 0 -6 lll 8 0 tda 0 0 lob 0 1 0 ldw 0 1 xtb 0 cmw 0 1 brc 5 9 llw -6 0 ldw 13 1 cmw 0 1 brc 5 9 lll 8 0 phl 0 ldw 10 0 slw 0 -6 phw 0 jsr putc pop 6 * 9 llw -6 0 ret ret efn 8 : putchar csv lgl stdout 0 phl 0 llw 8 0 phw 0 jsr putc pop 6 ret efn 0 : puts csv * 0 lll 8 0 tda 0 0 lob 0 0 0 tsb 0 brc 4 1 lgl stdout 0 phl 0 lll 8 0 ill 1 8 tda 0 0 lob 0 0 0 xtb 0 phw 0 jsr putc pop 6 jmp 0 * 1 lgl stdout 0 phl 0 ldw 10 0 phw 0 jsr putc pop 6 ret efn 0 : putc csv lll 10 0 ldw 0 1 xuw 1 cml 0 1 brc 21 0 ldw -1 0 ret * 0 ldw 0 0 slw 0 -4 lll 10 0 tda 0 0 lob 0 0 0 ldw 3 1 xtb 0 cmw 0 1 brc 5 1 llw 8 0 lll 10 1 tda 1 0 lao 0 6 0 ldw 0 1 xtw 1 sxb 0 1 0 lll 10 0 tda 0 0 lao 0 6 0 tad 0 0 phl 0 ldw 1 0 xtw 0 phl 0 lll 10 0 tda 0 0 lob 0 1 0 xtb 0 phw 0 ldw 64 0 phw 0 trp 1 pop 12 slw 0 -4 jmp 2 * 1 lll 10 0 tda 0 0 lob 0 0 0 ldw 2 1 xtb 0 cmw 0 1 brc 5 3 lll 10 0 tda 0 0 low 0 2 0 ldw 256 1 cmw 0 1 brc 5 4 lll 10 0 phl 0 jsr fflush pop 4 slw 0 -4 * 4 llw 8 0 lll 10 1 tda 1 0 lao 0 6 0 lll 10 1 tda 1 1 low 1 2 1 xtw 1 sxb 0 1 0 lll 10 0 tda 0 0 low 0 2 0 ldw 1 1 obw 12 1 0 lll 10 1 tda 1 0 sow 0 2 0 jmp 5 * 3 ldw -1 0 ret * 5 * 2 lll 10 0 tda 0 0 lob 0 1 0 ldw 0 1 xtb 0 cmw 0 1 brc 5 6 llw 8 0 ldw 10 1 cmw 0 1 brc 5 6 lll 10 0 phl 0 ldw 13 0 phw 0 jsr putc pop 6 slw 0 -4 * 6 llw -4 0 ldw 0 1 cmw 0 1 brc 7 7 ldw -1 0 jmp 8 * 7 llw -4 0 * 8 ret ret efn 4 : strcat csv * 0 lll 8 0 tda 0 0 lob 0 0 0 tsb 0 brc 4 1 lll 8 0 ill 1 8 jmp 0 * 1 * 2 lll 12 0 ill 1 12 tda 0 0 lob 0 0 0 lll 8 1 ill 1 8 tda 1 0 sob 0 0 0 tsb 0 brc 4 3 jmp 2 * 3 ret efn 0 : strcmp csv * 0 lll 8 0 tda 0 0 lob 0 0 0 tsb 0 brc 4 1 lll 8 0 tda 0 0 lob 0 0 0 lll 12 1 tda 1 0 lob 0 0 1 cmb 0 1 brc 5 1 lll 8 0 ill 1 8 lll 12 0 ill 1 12 jmp 0 * 1 lll 8 0 tda 0 0 lob 0 0 0 ldw 0 1 xtb 0 cmw 0 1 brc 5 2 lll 12 0 tda 0 0 lob 0 0 0 ldw 0 1 xtb 0 cmw 0 1 brc 5 2 ldw 0 0 ret jmp 3 * 2 lll 8 0 tda 0 0 lob 0 0 0 ldw 0 1 xtb 0 cmw 0 1 brc 5 4 ldw -1 0 ret jmp 5 * 4 lll 12 0 tda 0 0 lob 0 0 0 ldw 0 1 xtb 0 cmw 0 1 brc 5 6 ldw 1 0 ret jmp 7 * 6 lll 8 0 tda 0 0 lob 0 0 0 lll 12 1 tda 1 0 lob 0 0 1 obb 13 1 0 xtb 0 ret * 7 * 5 * 3 ret efn 0 : strcpy csv lll 8 0 sll 0 -4 * 0 lll 12 0 ill 1 12 tda 0 0 lob 0 0 0 lll 8 1 ill 1 8 tda 1 0 sob 0 0 0 tsb 0 brc 4 1 jmp 0 * 1 lll -4 0 ret ret efn 4 : dup csv llw 8 0 phw 0 ldw 69 0 phw 0 trp 1 pop 4 ret ret efn 0 : exec csv lll 16 0 phl 0 lll 12 0 phl 0 lll 8 0 phl 0 llw 20 0 phw 0 ldw 75 0 phw 0 trp 1 pop 16 ret ret efn 0 : getdir csv llw 12 0 phw 0 lll 8 0 phl 0 ldw 71 0 phw 0 trp 1 pop 8 ret ret efn 0 : listdir csv lll 8 0 tsl 0 brc 4 0 lll 12 0 phl 0 ldw 26 0 phw 0 trp 1 pop 6 llw 16 0 phw 0 lll 8 0 phl 0 ldw 78 0 phw 0 trp 1 pop 8 ret jmp 1 * 0 ldw 79 0 phw 0 trp 1 pop 2 ret * 1 ret efn 0 : lseek csv llw 14 0 phw 0 llw 8 0 phw 0 lll 10 0 phl 0 ldw 66 0 phw 0 trp 1 pop 10 ret ret efn 0 : malloc csv lll 8 0 phl 0 ldw 72 0 phw 0 trp 1 pop 6 ret ret efn 0 : mfree csv lll 8 0 phl 0 ldw 73 0 phw 0 trp 1 pop 6 ret ret efn 0 : setblock csv lll 12 0 phl 0 lll 8 0 phl 0 ldw 74 0 phw 0 trp 1 pop 10 ret ret efn 0 : unlink csv lll 8 0 phl 0 ldw 65 0 phw 0 trp 1 pop 6 ret ret efn 0 : close csv llw 8 0 phw 0 ldw 62 0 phw 0 trp 1 pop 4 ret efn 0 : creat csv llw 12 0 phw 0 lll 8 0 phl 0 ldw 60 0 phw 0 trp 1 pop 8 ret ret efn 0 : open csv llw 12 0 phw 0 lll 8 0 phl 0 ldw 61 0 phw 0 trp 1 pop 8 ret ret efn 0 : read csv lll 10 0 phl 0 llw 14 0 xtw 0 phl 0 llw 8 0 phw 0 ldw 63 0 phw 0 trp 1 pop 12 ret ret efn 0 : write csv lll 10 0 phl 0 llw 14 0 xtw 0 phl 0 llw 8 0 phw 0 ldw 64 0 phw 0 trp 1 pop 12 ret ret efn 0 : chmod csv ldw 0 0 phw 0 llw 12 0 phw 0 lll 8 0 phl 0 ldw 67 0 phw 0 trp 1 pop 10 ret ret efn 0 . _pfb 100 : _dopf csv * 0 lll 12 0 ill 1 12 tda 0 0 lob 0 0 0 xtb 0 slw 0 -18 tsw 0 brc 4 1 llw -18 0 ldw 37 1 cmw 0 1 brc 5 2 lll 12 0 ill 1 12 tda 0 0 lob 0 0 0 xtb 0 slw 0 -18 llw -18 0 ldw 108 1 cmw 0 1 brc 5 4 ldw 1 0 jmp 5 * 4 ldw 0 0 * 5 slw 0 -20 tsw 0 brc 4 3 lll 12 0 ill 1 12 tda 0 0 lob 0 0 0 xtb 0 slw 0 -18 * 3 llw -18 0 xtw 0 jmp 6 * 8 lll 16 0 ill 2 16 tda 0 0 low 0 0 0 lll 8 1 ill 1 8 tda 1 0 sob 0 0 0 jmp 7 * 9 lll 16 0 sll 0 -4 lll -4 0 ill 4 -4 tda 0 0 lol 0 0 0 sll 0 -8 lll -4 0 sll 0 16 * 10 lll -8 0 tda 0 0 lob 0 0 0 tsb 0 brc 4 11 lll -8 0 ill 1 -8 tda 0 0 lob 0 0 0 lll 8 1 ill 1 8 tda 1 0 sob 0 0 0 jmp 10 * 11 jmp 7 * 12 * 13 * 14 llw -20 0 tsw 0 brc 4 15 lll 16 0 sll 0 -16 lll -16 0 ill 4 -16 tda 0 0 lol 0 0 0 sll 0 -12 lll -16 0 sll 0 16 jmp 16 * 15 lll 16 0 ill 2 16 tda 0 0 low 0 0 0 xtw 0 sll 0 -12 * 16 llw -18 0 phw 0 lll -12 0 phl 0 lll 8 0 phl 0 jsr _pn pop 10 sll 0 8 jmp 7 * 17 llw -18 0 lll 8 1 ill 1 8 tda 1 0 sob 0 0 0 jmp 7 jmp 7 * 6 cse 111 14 cse 120 13 cse 100 12 cse 115 9 cse 99 8 jmp 17 * 7 jmp 18 * 2 llw -18 0 lll 8 1 ill 1 8 tda 1 0 sob 0 0 0 * 18 jmp 0 * 1 ldw 0 0 lll 8 1 tda 1 0 sob 0 0 0 ret efn 20 : _pn csv lll 12 0 sll 0 -8 llw 16 0 xtw 0 jmp 0 * 2 ldw 8 0 slw 0 16 jmp 1 * 3 ldw 16 0 slw 0 16 jmp 1 * 4 ldw 10 0 slw 0 16 lll 12 0 ldw 0 1 xtw 1 cml 0 1 brc 9 5 ldw 45 0 lll 8 1 ill 1 8 tda 1 0 sob 0 0 0 lll 12 0 oul 18 0 sll 0 -8 * 5 jmp 1 * 0 cse 120 3 cse 111 2 jmp 4 * 1 ldw 0 0 slw 0 -2 * 6 lll -8 0 tsl 0 brc 4 7 jmp 8 * 9 lll -8 0 llw 16 1 xtw 1 phl 1 phl 0 ldw 1 0 phw 0 jsr _ulop pop 10 sll 0 -8 jmp 6 * 8 lll -8 0 llw 16 1 xtw 1 phl 1 phl 0 ldw 2 0 phw 0 jsr _ulop pop 10 slw 0 -4 l$ 0 0 llw -4 0 ldw 15 1 obw 3 1 0 xtw 0 lxb 0 0 0 lal -28 0 llw -2 1 ilw 1 -2 xtw 1 sxb 0 1 0 jmp 9 * 7 llw -2 0 ldw 0 1 cmw 0 1 brc 5 10 ldw 48 0 lal -28 0 llw -2 1 ilw 1 -2 xtw 1 sxb 0 1 0 * 10 * 11 llw -2 0 ilw -1 -2 tsw 0 brc 4 12 lal -28 0 llw -2 0 xtw 0 lxb 0 0 0 lll 8 1 ill 1 8 tda 1 0 sob 0 0 0 jmp 11 * 12 lll 8 0 ret ret efn 28 $ 0 = 12337 = 12851 = 13365 = 13879 = 14393 = 16706 = 17220 = 17734 = 0 : _lop csv ldw 0 0 slw 0 -2 lll 10 0 ldw 0 1 xtw 1 cml 0 1 brc 9 0 llw -2 0 ilw 1 -2 lll 10 0 oul 18 0 sll 0 10 * 0 lll 14 0 ldw 0 1 xtw 1 cml 0 1 brc 9 1 llw -2 0 ilw 1 -2 lll 14 0 oul 18 0 sll 0 14 * 1 lll 14 0 phl 0 lll 10 0 phl 0 llw 8 0 phw 0 jsr _ulop pop 10 sll 0 -6 llw 8 0 ldw 2 1 cmw 0 1 brc 4 2 llw -2 0 ldw 1 1 obw 3 1 0 tsw 0 brc 4 2 lll -6 0 oul 18 0 jmp 3 * 2 lll -6 0 * 3 ret ret efn 6 : _ulop csv lll 10 0 tda 0 3 lll 14 0 tda 0 2 llw 8 0 ldw 0 1 cmw 0 1 brc 5 0 ldl 0 0 tda 0 4 * 1 tad 3 0 tsl 0 brc 4 2 tad 3 0 ldl 1 1 obl 3 1 0 tsl 0 brc 4 3 tad 4 0 tad 2 1 obl 12 1 0 tda 0 4 * 3 tad 3 0 ldl 1 1 obl 11 1 0 tda 0 3 tad 2 0 ldl 1 1 obl 10 1 0 tda 0 2 jmp 1 * 2 jmp 4 * 0 ldw 0 0 tda 0 5 tad 3 0 ldl -2147483648 1 cml 0 1 brc 24 5 ldl -2147483648 0 jmp 6 * 5 tad 3 0 * 6 tda 0 4 * 7 tad 2 0 tad 4 1 cml 0 1 brc 25 8 tad 5 0 irl 1 5 tad 2 0 ldl 1 1 obl 10 1 0 tda 0 2 jmp 7 * 8 ldl 0 0 tda 0 4 * 9 tad 5 0 tsw 0 brc 4 10 tad 3 0 tad 2 1 cml 0 1 brc 22 11 tad 3 0 tad 2 1 obl 13 1 0 tda 0 3 tad 4 0 irl 1 4 * 11 tad 5 0 irl -1 5 tad 4 0 ldl 1 1 obl 10 1 0 tda 0 4 tad 2 0 ldl 1 1 obl 11 1 0 tda 0 2 jmp 9 * 10 tad 3 0 tad 2 1 cml 0 1 brc 22 12 tad 3 0 tad 2 1 obl 13 1 0 tda 0 3 tad 4 0 irl 1 4 * 12 llw 8 0 ldw 2 1 cmw 0 1 brc 5 13 tad 3 0 tda 0 4 * 13 * 4 tad 4 0 ret ret efn 0 /* C library - startup, stdio, strings, TOS */ #define MAXARG 30 /* header file for stdio implementation */ #define MAXBUF 256 #define MAXIO 6 struct file { char mode; /* free or open for read/write */ char fd; /* GEMTOS file descriptor */ int idx; /* next slot in buf read/written */ int len; /* length of the buffer */ char buf[MAXBUF]; /* i/o buffer */ }; /* these are the allowed modes */ #define FREE 0 #define RD 1 #define WR 2 #define RDWR 3 /* these should match what's found in stdio.h, except for FILE */ #define FILE struct file #define EOF (-1) #define NULL ((char *)0) /* these are the GEMDOS trap commands */ #define CREATE 0x3C #define OPEN 0x3D #define CLOSE 0x3E #define READ 0x3F #define WRITE 0x40 #define LSEEK 0x42 #define SETBLK 0x4A #define EXIT 0x4C /* * the c runtime start up routine for ttp processes * * assumes a startup sttp.s of * . _bstk 2048 * . _estk 4 * taa 7 6 * lll 4 0 * sgl _estk * lag _estk 7 * jsr _cttp */ _cttp(tpa) long tpa; { extern int argc; extern char *argv[MAXARG]; extern FILE *stdin, *stdout, *stderr; extern FILE _iobuf[1]; char *b, *w, *in, *out; int i; long x, *lp; /* compute size of program, give memory back to TOS */ lp = tpa; x = lp[3] + lp[5] + lp[7] + 0x100; if (trap(1, SETBLK, 0, tpa, x)) exit(-1); /* parse the command line */ argc = 1; argv[0] = "yc"; b = tpa + 0x81; in = out = NULL; while (*b) { while (*b && *b <= ' ') b++; w = b; while (*b && *b > ' ') b++; if (*b) *b++ = 0; if (*w == '<') in = w+1; else if (*w == '>') out = w+1; else if (argc < MAXARG) argv[argc++] = w; } argv[argc] = 0L; /* init stdio */ for (i = 0; i < MAXIO; i++) { _iobuf[i].mode = FREE; _iobuf[i].fd = _iobuf[i].idx = _iobuf[i].len = 0; } stdin = &_iobuf[0]; stdout = &_iobuf[1]; stderr = &_iobuf[2]; stdin->mode = stdout->mode = stderr->mode = RDWR; if (in) { stdin->fd = i = trap(1, OPEN, in, 0); stdin->mode = RD; if (i < 0) _cant(in, i); } if (out) { if (*out != '>') { /* create */ stdout->fd = i = trap(1, CREATE, out, 0); } else { /* append */ stdout->fd = i = trap(1, OPEN, ++out, 1); if (i >= 0) i = trap(1, LSEEK, 0L, i, 2); } stdout->mode = WR; if (i < 0) _cant(out, i); } /* run the program */ i = main(argc, argv); /* close up shop */ if (in) fclose(stdin); if (out) fclose(stdout); exit(i); } /* trouble redirecting output */ _cant(s, fd) char *s; { _ps("can't redirect "); _ps(s); _ps("\n\r"); exit(fd); } _ps(s) char *s; { while (*s) trap(1, 2, *s++); } /* exit the program */ exit(n) { trap(1, EXIT, n); } /* data for _cttp or _ctos */ int argc; char *argv[MAXARG]; FILE _iobuf[MAXIO], *stdin, *stdout, *stderr; /* * printf's */ sprintf(buf, fmt, args) char *buf, *fmt; int args; { _dopf(buf, fmt, &args); } printf(fmt, args) char *fmt; int args; { extern char _pfb[1]; _dopf(_pfb, fmt, &args); fputs(_pfb, stdout); } fprintf(s, fmt, args) FILE *s; char *fmt; int args; { extern char _pfb[1]; _dopf(_pfb, fmt, &args); fputs(_pfb, s); } /* * stdio routines */ /* close a stream */ fclose(s) FILE *s; { if (s != NULL) { if (s->mode == WR) fflush(s); if (s->fd) trap(1, CLOSE, s->fd); s->mode = FREE; } } /* flush out a buffer */ fflush(s) FILE *s; { int r; if (s->idx > 0) r = trap(1, WRITE, s->fd, (long) s->idx, s->buf); s->idx = 0; return r <= 0 ? EOF : r; } /* get a string from a stream */ char * fgets(b, n, f) char *b; int n; FILE *f; { int c, i; c = getc(f); if (c == EOF) return NULL; n--; for (i = 0; i < n && c != EOF; c = getc(f)) { b[i++] = c; if (c == '\n') break; } b[i] = 0; return b; } /* open a stream */ FILE * fopen(name, mode) char *name, *mode; { int i, m, fd, x; FILE *s; for (i = 0; i < MAXIO && _iobuf[i].mode != FREE; i++) ; if (i >= MAXIO) return NULL; if (*mode == 'w') { fd = trap(1, CREATE, name, 0); m = WR; } else if (*mode == 'r') { fd = trap(1, OPEN, name, 0); m = RD; } else if (*mode == 'a') { if ((fd = trap(1, OPEN, name, 1)) < 0) fd = trap(1, CREATE, name, 0); else if (trap(1, LSEEK, 0L, fd, 2) < 0L) fd = -1; m = WR; } else { /* anything goes here, usually '+' */ fd = trap(1, OPEN, name, 3); m = RDWR; } if (fd < 0) return NULL; s = &_iobuf[i]; s->len = s->idx = 0; s->fd = fd; s->mode = m; return s; } /* put a string onto the stream */ fputs(s, f) char *s; FILE *f; { while (*s) putc(*s++, f); } /* get a string from stdin */ char * gets(b) char *b; { int c; char *r; r = b; if ((c = getc(stdin)) == EOF) return NULL; while (c != '\n' && c != EOF) { *b++ = c; c = getc(stdin); } *b = 0; return r; } /* get a character from standard input */ getchar() { return getc(stdin); } /* get a character from a stream */ getc(s) FILE *s; { int i, l, c, r; if (s == NULL) return EOF; if (s->mode == RDWR) { l = trap(1, READ, s->fd, (long) 1, s->buf); if (l != 1) return EOF; i = 0; } else if (s->mode == RD) { i = s->idx; while (i >= s->len) { l = trap(1, READ, s->fd, (long) MAXBUF, s->buf); if (l <= 0) { s->idx = s->len = 0; return EOF; } s->len = l; i = 0; } s->idx = i + 1; } else return EOF; c = s->buf[i] & 255; if (s->fd == 0 && c == '\r') putc(c = '\n', s); return c; } /* output characters to a stream */ putchar(c) { putc(c, stdout); } puts(s) char *s; { while (*s) putc(*s++, stdout); putc('\n', stdout); } putc(c, s) int c; FILE *s; { int i, r; if (s == NULL) return EOF; r = 0; if (s->mode == RDWR) { s->buf[0] = c; r = trap(1, WRITE, s->fd, (long) 1, s->buf); } else if (s->mode == WR) { if (s->idx == MAXBUF) r = fflush(s); s->buf[s->idx] = c; s->idx = s->idx + 1; } else return EOF; if (s->fd == 0 && c == '\n') r = putc('\r', s); return r <= 0 ? EOF : r; } /* * string routines */ /* concatenate two strings */ strcat(s1, s2) char *s1, *s2; { while (*s1) s1++; while (*s1++ = *s2++); } /* compare string s1 to s2, <0 for <, 0 for ==, >0 for > */ int strcmp(s1, s2) char *s1, *s2; { while (*s1 && *s1 == *s2) { s1++; s2++; } /* * The following case analysis is necessary so that characters * which look negative collate low against normal characters but * high against the end-of-string NUL. */ if (*s1 == 0 && *s2 == 0) return 0; else if (*s1 == 0) return -1; else if (*s2 == 0) return 1; else return (*s1 - *s2); } /* copy a string from source to destination */ char * strcpy(dst, src) char *dst, *src; { char *r; r = dst; while (*dst++ = *src++) ; return r; } /* * TOS routines */ /* duplicate a file descriptor */ dup(fd) { return trap(1, 0x45, fd); } /* execute a program: mode=0 -> load and go; mode=3 -> load and return */ exec(file, args, env, mode) char *file, *args, *env; int mode; { return trap(1, 0x4B, mode, file, args, env); } /* get current directory: drive=0 -> current drive, drive=1 -> A:, etc */ getdir(buf, drive) char *buf; { return trap(1, 0x47, buf, drive); } /* * list the disk directory * pat != NULL - set the DTA buffer, do an SFIRST * pat == NULL - do a SNEXT */ listdir(pat, buf, mode) char *pat, *buf; { if (pat) { trap(1, 0x1A, buf); return trap(1, 0x4E, pat, mode); } else return trap(1, 0x4F); } /* seek to a position in a file */ lseek(fd, offset, mode) int fd; long offset; int mode; { return trap(1, 0x42, offset, fd, mode); } /* * memory allocation * size = -1L - return current free memory * negative return is an error */ char * malloc(size) long size; { return (char *) trap(1, 0x48, size); } /* free allocated memory: return of 0 is good, negative is error */ long mfree(m) char *m; { return (long) trap(1, 0x49, m); } /* reserve a specific block of memory */ setblock(start, size) char *start; long size; { return trap(1, 0x4A, start, size); } /* unlink a file */ unlink(name) char *name; { return trap(1, 0x41, name); } /* close a file */ close(fd) { trap(1, 0x3E, fd); } /* create a file */ creat(f, m) char *f; { return trap(1, 0x3C, f, m); } /* open a file */ open(f, m) char *f; { return trap(1, 0x3D, f, m); } /* read a file */ read(fd, buf, sz) int fd, sz; char *buf; { return trap(1, 0x3F, fd, (long) sz, buf); } /* unix-like write system call */ write(fd, buf, sz) int fd, sz; char *buf; { return trap(1, 0x40, fd, (long) sz, buf); } /* * chmod(name, mode) * mode = 0x00 - normal file (read/write) * 0x01 - read only file * 0x02 - hidden file * 0x04 - system file * 0x08 - file is volume label * 0x10 - file is a subdirectory * 0x20 - file is written and closed correctly */ chmod(name, mode) char *name; int mode; { return trap(1, 0x43, name, mode, 0); } /* * the guts of all the printf's */ char _pfb[100]; /* in case someone needs a buffer */ _dopf(buf, fmt, ap) char *buf, *fmt; int *ap; { char *_pn(), **pp, *ps; long n, *lp; int c, larg; while (c = *fmt++) { if (c == '%') { c = *fmt++; if (larg = (c == 'l')) c = *fmt++; switch (c) { case 'c': *buf++ = *ap++; break; case 's': pp = (char **) ap; ps = *pp++; ap = (int *) pp; while (*ps) *buf++ = *ps++; break; case 'd': case 'x': case 'o': if (larg) { lp = ap; n = *lp++; ap = lp; } else n = (long) (*ap++); buf = _pn(buf, n, c); break; default: *buf++ = c; break; } } else *buf++ = c; } *buf = 0; } /* fill a buffer with a number */ char * _pn(b, n, base) char *b; long n; { int i, nd; unsigned long x; char nb[20]; x = n; switch (base) { case 'o': base = 8; break; case 'x': base = 16; break; default: base = 10; if (n < 0) { *b++ = '-'; x = -n; } } for (i = 0; x; x = x / base) { nd = x % base; nb[i++] = "0123456789ABCDEF"[nd & 15]; /* just to be safe */ } if (i == 0) nb[i++] = '0'; while (i--) *b++ = nb[i]; return b; } /* * stuff for long binary ops (both signed and unsigned) * op == 0 for a multiplication request * op == 1 for a division * op == 2 for a mod operation * a and b are the left and right arguments to the binary operator * * div and mod are done by long division, shift b up until >= a, then * back down, subtracting when appropriate * * mul is done by shifts and adds */ #define MUL 0 #define DIV 1 #define MOD 2 long _lop(op, a, b) int op; long a, b; { int neg; long result, _ulop(); neg = 0; if (a < 0) { neg++; a = -a; } if (b < 0) { neg++; b = -b; } result = _ulop(op, a, b); return (((op != MOD) && (neg & 1)) ? -result : result); } long _ulop(op, xx, yy) int op; unsigned long xx, yy; { register int i; register unsigned long result, x, y; x = xx; y = yy; if (op == MUL) { result = 0L; while (x) { if (x & 1L) result += y; x >>= 1L; y <<= 1L; } } else { /* DIV or MOD */ i = 0; result = x > 0x80000000L ? 0x80000000L : x; while (y < result) { i++; y <<= 1L; } result = 0L; while (i) { if (x >= y) { x -= y; result++; } i--; result <<= 1L; y >>= 1L; } if (x >= y) { x -= y; result++; } if (op == MOD) result = x; } return result; } . _bstk 2048 . _estk 4 taa 7 6 lll 4 0 sgl 0 _estk lag _estk 7 jsr _cprg . ct0 2 . ct1 2 . ct2 2 . ct3 2 . ct4 2 . ct5 2 . ct6 2 . ii0 2 . ii1 2 . ii2 2 . ii3 2 . ii4 2 . ii5 2 . ii6 2 . ii7 2 . ii8 2 . ii9 2 . ii10 2 . ii11 2 . ii12 2 . ii13 2 . ii14 2 . ii15 2 . io0 2 . io1 2 . io2 2 . io3 2 . io4 2 . io5 2 . io6 2 . iox 80 . pi0 2 . pi1 2 . pi2 2 . pi3 2 . pi4 2 . pi5 2 . pi6 2 . pi7 2 . pix 20 . po0 2 . po1 2 . po2 2 . po3 2 . po4 2 . po5 2 . pox 20 . ai0 4 . ai1 4 . ai2 4 . ao0 4 . ao1 4 . ao2 4 . aes0 4 . aes1 4 . aes2 4 . aes3 4 . aes4 4 . aes5 4 . vdi0 4 . vdi1 4 . vdi2 4 . vdi3 4 . vdi4 4 . vdi5 4 . global 32 /* * stdio.h * * the stdio header most things include */ #define FILE char #define EOF (-1) #define NULL ((char *)0) extern FILE *stdin; extern FILE *stdout; extern FILE *stderr; extern FILE *fopen(); extern char *gets(); extern char *fgets(); . _bstk 2048 . _estk 4 taa 7 6 lll 4 0 sgl 0 _estk lag _estk 7 jsr _cttp . k.. kPCOMMANDPRGkPCOMMANDTXTkN`y0jel*o.|Ϯ - ЭЭм// ??<JNA /<a:X-HB5HmN(XBBgNA"/0<NBNu#ϲNA/9ϲNu o AdpNu#BNuNV.yNCx-|y-|y.NB$aTaN` aDNJyg.yN;.J@gNB>NC\ND,NPNWN^NuNVH*nNT=@H>N=hJ@fB@`>NT.N2.yN2FJL N^NuNVH *n.N>J@g .a``.N(@ g:-|z-M.NB$N1=@g0.`. N=@`./N"X(@ g>-|z.N?-@.NB$. /NX=@`2-|z-M.NB$.z'N2.N2F=@NB>JnfB@`Sn0.JL0N^NuNVH*n`.N?(@.N>*@Jf&M`8H9Lf&MB`&B.N?&@*KJgH9LfB`R`Jg>-|z9-M.NB$./ abX=@NB>Jng Sn0.`JffB@JL8N^NuNV-|zD.NB$B.^B.N2.?</^/<AN-: .^/NwXA-HN2.^a=@gNB>Sn0.`B.^`N^NuNVH *n(|zP`./ NRXJ@f ,`PJfBJL0N^NuNV.|FN2N^NuNVH*n.N?.N>*@  fB JL N^NuNVH *n(n BG` *.a(@RG.N?(@Jf0JL0N^NuNVH*n (n n>`8&]H9f(./ RNRXJ@f nSP`+UXSGfp`SGJGfB@JL8N^NuNVH *n>. (n`.N<JFg0`SGJGfB@JL0N^NuNV`H*n. /`aX>JGf nN`.`?/ a\JL N^NuNVH..N2.|^N2*|zP`<~`*./<|q/NfXP.N2SGPJGgJfN2JfB@JL N^NuNV.N2.|vN2. N2FN^NuNVH*nJf. /.aX`./. NwXB@JL N^NuNVH*nJf$J9f.`./<arX``R ;g./<NwXB@JL N^NuNV./<N/<aXPN^NuNVB@N^NuNVH*n.N?*@ =f R.N?` JL N^NuNVH*n.a*@Jfp`2. / NRXJ@fp`./ NRXJ@fB@`pJL N^NuNVJn g. `./.avXN^NuNV.az`$ n 0`& n BP` n >/.aX`` J@g|g`B@N^NuNV./</<:aPN^NuNV./</<FaPN^NuNV.a`>3`JBy`B.U/<|{/.N[2P|f 0.@R@`p``J@gȰ|g|g|gB@N^NuNVH *n.a(|{`./NRXJ@g\Jf>N2h,H>N2JL0N^NuNVH*n.a>`3 `By `> /<ajX``T.RN?(@.a(&@.a *@H>N?>`. / NRXJ@f3ND>` ByND,`>iH?NQTJ@f>L`>MN2`. / NRXJ@f>p`>qN2`>bN2H>N2h`>cN2H>N2h`nBnBn.U/<|/ N[2P.Y/<|/ N[2P>YN2>W N2h>W N2h`H ||rW hN.N?*@ @g #f .RN22` =f.R`.N2F`"`J@gJ|g6|gD|gRB@JL8N^NuNV./</<aPN^NuNV./</<FaPN^NuNVH.N2.|N2N0TJyg<g<fN0`B@JLN^NuNVH*n.a*@JfyB..U/< aX`B@JL N^NuNV.|N2N@N2XN^NuNVBNV|-@9DH=@.NV|./Q/<:aP=@BNV|-@0.HD.NV|0.N^NuNV./<|/NfXP.?</N<\J@gB.././<|/NfX .N2FN^NuNVN:|@|:B..YahN^NuNV. (/./< arPN^NuNV=y 3 .N,=@3 0.N^NuNVBW/.aXN^NuNVH*n./ aX*@/ NRXJ@f33`./ NRXJ@f33`. / NRXJ@f3By`p.$/ NRXJ@f33`H yf.`( yf.`Jyf. `.$/<naX`B@JL N^NuNV.a-@ @Jf<./9/<|/NfX ./<aX`,./<|/.N[2P|f NC\NCxB@N^NuNVH*nJfN`,B9j>/<j #f/ R`/ N0 PN2XJL N^NuNV>N2hB@N^NuNV./</<arPN^NuNVH3./NwX.NB*@` м@SDg :g \f.|/ RNwX.N;BW/. NU6X>l.}N2. N2F`BW/NUX<l>NU<.}N2F``(./.?NUh\g.},N2`./9?NUL\-@nJg.}3N2F=@`By>NU<>NU<.N;./NUXB@JL N^NuNVH*n `RJf` @SDg :g \fR./NwX.N>J@g./NwnX`0.NBRJ@g"./<}M/NwnP/NwnX. /aXJL N^NuNV>/.NJ@g A-H`.NB-@ n\R. /tNwX.NB-@` ."Ҽt@SDg n :g n \fR.H?9в/. N<\=@`.f/.NwX.f/.NwX.]g6 ..fg,.t/aX=@fJyg0.`p`P.}TN2.tN2F=@g0.`F.t/a6X=@fJyg0.`.HN<=@Jng2B@N^NuNVH *n(n .N>J@g =|`.N>J@g,./ /NwP/NwnX(@=|`F.NBRJ@g:./<}]/ /NwP/NwnP/NwnX(@=|Jng6.NBJ@g3.N2.}_N2F` ./ aX` ./ a~XJL0N^NuNVHBG`( n./.aX>0XJ@fJyf Sn Jn f0JLN^NuNV./^NX=@.}{/^/UN>PJ@gp`p3в0.`d.}}N2F`h. /N=X-@bBW/.^/.baFP`< N2nSI.^?.SW/^a\``J@g|g|g`N^NuNV#`8 nA##.a`> 9#.NV#g.a=@.NV0.N^NuNVH*n` /f-RJf.]/U/Y/<}/.N[2|f@ n n8 nm0 nm( nn nPm n3n ncl nop`2 ndo0<`pPn0.@>0.r `W0.WNTJL N^NuNV.}N2N@(N2XN^NuNVH*n.}/ N?X*@/ NRXJ@fa`XJf:a>JGg0`H>//<}N0 PN2K MJfB@`.aJ@g.}N2F`B@JL N^NuNVH*n -:fhJ-f,H>W/NTX.N2F`^`4NT=@H>N=hJ@f .TNT`p>>NT` .NT>JGfB@`.N2.}N2FJL N^NuNVN@VN2XN^NuNV.X/./<NPN^NuNVH*n.N;pJ@g.}N;.J@fB@`$.N;J@g.}N2.N2F`B@JL N^NuNV.f/./<NPN^NuNVH. /.NwX*n`RJf%H`./.NwnX` |:g|\g .JL N^NuNVH *n(n >. .fR`Jg .fR` `SGJGf` SGJGf JL0N^NuNVH *n(n .f./ NwX`.>?</ / a //  anP|.B- JL0N^NuNVJyрgj.N2 n (:f n H>W`BW/NTX/././.NZ@P/NZ@P./<~ /.NfXPN^NuNVH.?</./a`P/N<\>BF`>/NRX>/$NRXX.g.~!/<~/4NfXP`./<~'/4NfXP.H>W/$//4//aRP//<~,/DNfX.DN2F>g0`LNU>RFJGg>/<~D/DNfXP./Da@X.DN2FJLN^NuNV4H?.?</./BaP/N<\>BnBFBv`.g2RF./4ajX./<~V/NfXP`TRn/</.NZP*؅.//4aP//<~b/NfX .N22>g0`|SCf vN2` .~nN2NU>JGg4|gN2.??./<~q/NfX .B/aX.N2FJLN^NuNVZH./ZNX=@.~/Z/]N>P3р.~/Z/]N>PJ@g <` <*@=y.~/Z/]N>PJ@gByJnf .N`.Z?./ N\=@30.JL N^NuNVBW/.N6J@gR`N:|: \g" nH>W/ N=X.NB(@./ NCX.NB(@ ,.g.B, .JL0N^NuNVH*n.NB(@*B,.?</ N<\:|`R>RG.NB&@`$.0G"|~/0NRXJ@f<`RG0G~JfNU:JEgJFm0F"|~./ NwXp`B@JL8N^NuNV.?</.N<\J@gB@`pN^NuNVH . /. /.avP/NC4XJ@g .a`.aJ@g.*/.NC4XJ@g <O`d.2/.NC4XJ@f.6/.NC4XJ@g <7`0../.NC4XJ@gJy g <":` <7`B`BJL0N^NuNVH*n &|`A-H` ;fR` nRJf nB мg.N>J@g./.NwX`./.NCX./.aX(@ g `Jf~BJL8N^NuNV. N>^J@g. /.anX`. /.a.XN^NuNVND,N2NP. /.N6X=@NP@N2ND>0.N^NuNVH*n.U/<~/ N[2P.N*@ND,NP.?.NWT3NP@ND>B@JL N^NuNVH *n(M.N*@./<(NX.N?(@.N./<NwXND,NP./</<(NX`PNP@ND>.(N>6J@g&(hB9i.*/<(NwX`B9h.(NB(@`S(g \fBB@JL0N^NuNV n -@.N/ n . /<~/.N[2P|fB@`pN^NuNVH *n n(P`  gp`PR [fBGR L ]fR`**RG` Jfp`*R ]g |f ]fB`B` n 0 n B@JL0N^NuNVH>.*n BE`.Nw<0Eo:SGJGf0JL N^NuNVNH .]/PaXJ@fH./Q/Pa$PJ@f..//PaPJ@f.N? @Jg.~N2F`X.?.aHT=@.?.a2TT@=@0.no0.`0.=@=|N=|P0.n=@R=|TBnV=|X-|ZBn^Bn`0.X@=@b0.@nT@=@dBW/NNYXK:.If~|`V89|9|9|BlBl )U 9|9F.Nw9@9|BW/ NYXSEXRGRFJEfK:.RF`R89|9|9|9|Bl )U 9|9F9n9|BW/ NYXSEXRGTFJEf(N0.nNBTl Jno 0.nn N2.nhV.d/b/`/^/NNXND,>d?.b?.`?.^?< Bg/NNXJng(NPBW/NNWXn3NP@ND>B@JL0N^NuNVH>. .*n`SGJGfB .JL N^NuNV`H*n &n.I` /NwX` _fH`HRJfB .JL8N^NuNVH ./]/PaPJ@f:./Q/PaPJ@f nm nn.N? @Jg.N2F`.?.aT=@.?.aT=@0.no0.`0.=@=|8=|:0.R@=@<=|>Bn@=|B-|DBnHBnJ0.X@=@L0.V@=@NBW/8NYXK:.IP~|`V89|9|9|BlBl )U 9|9F.Nw9@9|BW/ NYXSEXRGRFJEfBT9|9|9|9|*Bl A)H 9|9F9n9|-n$>@/.$NwX? <j-@/a\0.`F./<jNwX-n nJf>>_/.$NwX?AX-H /ab\`|g԰|g|g|g=|(=|*Bn,=|.Bn0=|2.$NwR@=@4. NwR@=@6BW/ NYX.N/L/J/H/8NXND,>N?.L?.J?.H?< Bg/8NXNPBW/8NWXNP@ND> nf nJf. `./<ja|XB@JL0N^NuNVH *n(M.N>*@  f B.N?*@.!/ NRXJ@f.a`h.'/ NRXJ@f.a4`L.,/ NRXJ@f.a`0./ NRXJ@f.a"`.3N2.N2FJL0N^NuNVH*n.N`N3 B@`TBy B@`J> /<NX`4 :f .Ra`>/ N jX``J@g|g|g`JL N^NuNVH>.. ` H>N2h0SGJ@fJLN^NuNVH>.*n `.N20SGJ@fJL N^NuNVH*n. `fJL N^NuNVHN0T.*|F` f -`PJf JL N^NuNVH nN. N2. Nw><:F a| m<mH` . `<>?aTBF*n `JFgSSF>N2h`.N2<:F `GgH>N2hRF`JFgVSGfB.N2`<.R/ NwX>N2h.N2> N2h>?0WRWaVTSGSF`:.N2.?ahT*n BBGBF`Gf>.NwFo00HЮ./ NwX.N2. Nw><:F `N2 nN. N2>?0WaT`. /.NwX``.NwFo n0`H>N2hRFGoB>`^a@` n0`H>N2hRF.NwFo n0`H.f̼GoB>`H |rW hN2hB`(H>/ aFX.N2>?0WaTRRFRG`JL N^NuNV\B.`.`?./. /.aP N^NuNV.϶N2N^NuNV#϶>/. /</aPN^NuNV>NVJ@fB` >NVN^NuNVHa.Jg JLN^NuNVpN^NuNV.Pa(N^NuNVHaNaJN4Va@B.B..?</]/<0zN-: .N?*@Jf aB@`.U/<^/ N[2P|f a0.`.a/ NRXJ@f@-|c-| .NB$N=@NB>Jng Sn0.`2`(.raj.a`.aV.aLaX`JL N^NuNVHN0,`NB@`bN0,|g <g<f<g>JygJyga=@g0.` `p``J@g|gΰ|g|g`JLN^NuNV. H>a>apN^NuNV.ara\N^NuNV.a^aN^NuNV.LaN^NuNV. H>?9NVTB@N^NuNV>a. H>aN^NuNV>EaN^NuNVH*n`H>aJfB@JL N^NuNV.aaN^NuNV.LaN^NuNVH.N2*|N` .N2F>JGg0`.NwR@HJfB@JL N^NuNVH *n(n `H>H?NQTJ@gB`Jg =f =f `B@JL0N^NuNV\H./\NX<JFfaB`(|NK\`ffB(|NK\`@>G\`&Jg./ aTX-@g n =gB`SGXJGfJGff`JfJf>G\`*[ g>=/ NvXJ@gfSGJGfBB@JL8N^NuNV8H *yBG(|`N.Jyg/-`/<'/-?/</8NfX.8N2(|*URG fB@JL0N^NuNVH*n` -f:RJfBn.]/Y/U/<(/.N[2|lp`40. n nl0.`B@r `>0.@W0.@WNVJL N^NuNVH*n`RJg$H>N?n|AgH>N?n|PfH>N?n|Pf> `BW/.aXJL N^NuNV.1N2N?N2XN^NuNVH.B/.N?X-@/NRXJ@fa`b nJf>a>JGg0`N>//<GN0 PN2A-H HJfB@`.aJ@g.XN2F`B@JLN^NuNV./<f/. /.NwP/NwnP/NwnX.NBRN^NuNV\H . Nw@\. /]NwX*@`H>N?nRJf./</\ahP*@.N/</ aRP*@yB..Y/< / a2P*@(|N`fJfNC\.\/\/.BgNU 3|f.hN2F`B@=@NCx0.JL0N^NuNVJyg*Jy g".~N2.N2=@g0.`. /.aXN^NuNVH*n`NJ@g. H? n NTB@`N1>JGg0JL N^NuNVH *n (n>.<.BW/.NU6X:l.N2.N2F`BD`R0 .gBA`rAfZJFg . fRD0nf BD nN`./ .H?a6\=@g0.`@.Y/<?NUL\g>NUPJ@gB@`p=@./T/QN>P=@JngNAT-H`>>?.?./././. n/a=@XJ@g0.` SnJnfB@N^NuNVN2.N2N0T.N2B@N^NuNV>/<9/<0p/<2h/.aN^NuNV> NUB@N^NuNV>7/<:/NwnX. /NwX>'//N0 P.a*@H>.H?NQTJ@gJgB@`pJL N^NuNV>Y/<B/.aNPN^NuNV>N/<F/.a2PJ@gB@`pN^NuNVH*n`./ NwXJ@fp`RJfB@JL N^NuNV.aJ@g./NwX.`./aX.NUn=@f&.aJ@g.NUnJgB@`0.N^NuNVH *n(n .aJ@f./aX*@.aJ@f./atX(@H>H?NQTJ@f./ NUX` .IN2FJL0N^NuNV.NU> /.NUXN^NuNV.NUNUN^NuNV.?</.a\J@f Jn g.N2.nN2B@`LJn g.vN2.N2.NTJfB@`.N2.N2N2pN^NuNV. H|S@=@>NTr4.gB@`pN^NuNVH*n> / NTX=@Jf\B-0.JL N^NuNVH*na|:. / TNwX JL N^NuNVH*nJg -:fJ-gB@`pJL N^NuNVH*nJg -:gB@`pJL N^NuNV.aJ@f>\/.NvXJfB@`pN^NuNVH*n` ?g *fp`RJfB@JL N^NuNVH*n`R  gJf JL N^NuNVH*n`R  gJgH9Lg =f JL N^NuNVH*n`R  fJf JL N^NuNVH. <Am<ZoH`H| JLN^NuNVH. <am<zoH`H|JLN^NuNVH *n (n` H>NRJf .JL0N^NuNV.?n/.aXN^NuNV.?>/.aXN^NuNVNV>/NRXX.N2N^NuNVNT>/NRX.N2N^NuNVBW/a6X.N2N^NuNVa>N2hN^NuNVNV=@0.@>W?.W/</NfX .N2N^NuNV>N2hJyg>v`>wN2hN^NuNVHa*|N` $gH>N2h`RH>a`>$N2h`a`a`a`a&`a `>>N2h`>|N2h`r>=N2h`d>N2h`X>N2h`LN2`D>!N2h`8R MJgH>WN2h`S`S`H |rW h@NRJfJL N^NuNV n #N^NuNV y#N^NuNV.aJ@gB@`,.?</.a*\J@f.fB@`p`B@N^NuNVH*n.abJ@gB@`.aJ@gB@`pJL N^NuNVH*n`RJf JL N^NuNVH*n.a&@(KH` R`"f ``|.g|:g|\g`S`JL8N^NuNV. /.aX/NRXJ@gB@`pN^NuNVJg .NVN^NuNVJnB` 9#B`> 9r .NV#f, o 9` 9S#JfN^NuNVH *n (n ,\f \fS` \g\./ NwX .JL0N^NuNV>fN2N^NuNVJyg >eN2N^NuNV. /</.N[2P|gB@`pN^NuNVH *n>-IBF`LR./<?NUL\f" g  g  gJfJFf`RRF` JFfB@```|mBpJL0N^NuNVH *n.jN?(@`  gJfBJL0N^NuNV8H.. /`NwX*@(n` %g`R %f &|b` 0mH 9nBH||f .`$Hnl nH2A 0` < &@`Tf&n`H :f@RH>N?n`>/<G8 /NfXP`BWG8 /N=X`&|h`>/<G8 /NfXP`&|`G8 .a`&|j`. G8 /N=X`&|(`NV@>/<dG8 /NfXP`fG8 .a@B.9`TNV>G8 /NRXX`:NT>G8 /NRX` &| `|/|$b@0@ PN./ NwX.NB(@RJf&BJL8N^NuNVH *n(n .N?*@`H>H?NQTJ@gB`Jf JL0N^NuNVH*n(n ./NwX(@ .%f\.g/a|X(@ gB.j/ ahX-@g.>)/.NvX-@g.l/.Ra:X(@ f.oN2p` n nB.N?(@.RGV /NX<-mR`.N>J@gt.&?</N<\>`R.D.H?/ /-?/ / a.a>JGg0`h.&N<>JGg`<..H?/ /-?/ / a0.a>JGg0`SFXJFg -谮Rg2B@JL8N^NuNVH *n(n .N-@ #fT.]/ RaXJ@g./XNXnnB@` N2n.X/NwX`./NwXBW?-B+@/NU~\`b. Bg/ /-?/ / a0.N?(@ :f./ RNRXJ@fB@` .aFJ@f.N2.N2pJL0N^NuNVH*n(n >NU<;|.N&@./ NwX./ NX.*/ NC4XJ@f.*/ NwnXBW/ NU6X;@l.N2.N2p`6.A+H /NX:BW?-B+@/NU~\B@JL8N^NuNVH*n(n ./ aX&@ f&LBG` .N?&@~./ aX(@ g:.N&@.U/ aXJ@fB@`L09nlB@`p=@`./ a\X(@ g<.N&@.?</ N?X/N<\J@gB@`p=@`./ a X(@ gB.N&@.?</ N?X/N<\J@f.fB@`p=@`L(K.N&@-L` JfB@`pR =f ,=fB.T/.NRXJ@gB@`p=@JGgJngB@`p`0.J@g".N?./ NwX.a`B@JL8N^NuNVH *n(n .U/ a,XJ@gJnl=|0nlBU`0.U0.@HѭB@JL0N^NuNVH *n(|2`./ NRXJ@f ,`PJfBJL0N^NuNVH*nG`(KJgH9LfB`R`.N>-@ @ nBJf .` .RN?-@*-.a^-@f n.N,`/./ nNP<JFg0`f.N?&@JfjB@JL8N^NuNVH *n.aJ@fB@`.N?(@Jgl :gf. Bg/ /-?/ / axJy g$N2NA.N2F>JGg0`.a>JGg0``nJL0N^NuNVH*n Jyg*Jy g".N2.N2>JGg0`./zNwX./`NwX*@.A-H /NX=@BBW/zNU6X=@m4BW?./.NU~\.a>Jnm >NU<0`B@JL N^NuNV n0././<NYvPN^NuNV.UaBBgNXTBW?.NYT>NY"N^NuNV.UaBW?.NYT>NYL>NY"N^NuNV.N2N^NuNVH.N nJf.N2F`.NUnBW/.NUX>l.N2.N2F`|`.`/<?NUh\BW?BNU~\.N2B.`B.`^.`/`NwXH/?NUh\.>/<?NUh\N2.`/NwXB.`.?</`/<PpN-: @Jfv.AN2>NUH?aTJ@gp`JfJfB@`pJL0N^NuNVH>. p g|0| l|aJGf~ `|p| o| .H>0. @?W??/<P/.NfX .JLN^NuNVH>. 0r `>WW?W0@?W/<^/.NfX .JLN^NuNVH. Jg. fB@`pJLN^NuNVH . n*P n (P`jH`R`RH>H?aTJ@f`FH>H?aTJ@gR`.H>H?NQTJ@gp`TR`|*g|?g`RH>H?aFTJ@fH>H?a0TJ@gp` n n B@JL0N^NuNV>./ /PaPJ@gp`H n .fR n .fR n Jf nJfB@`p`BW/ /PaPN^NuNVN^NuNVN^NuNVN^Nu?<*NATNu?/?<+NAXNu?/?<NAXNu?<NATNu0<6NV?. /.?NAN^Nu0<9//?NA\Nu0<:`0<;`0<G`NV/././. ?.?<KNAN^Nu0<?/?NAXNu0<?NV/./. ?.?NAN^Nu0<@`0<A//?NA\Nu0<BNV/. /.?NAN^Nu0<C`0<E`0<F`NV/. /./<VNAN^Nu0<W`?</NATNu0<`0<N`F?<ONATNu?/?<NAXNuBg?<NMXNu0<H//?NA\Nu0<I`NV/. /./<JNAN^Nu?<NNTNu?<`?<`NV?./. /.?<NNN^Nu0<//?NN\Nu0<`?<`//?< NA\Nu//?< NgNA\Nu?<,NATNu?/?<-NAXNu?<0NATNu?/?<NMXNu?/?<NMXNu?/?<NMXNu//?<NM\NuNV30.|Hмn-@=|` nH2n2RRn nm.2NTB@09$N^NuNV#&#*#.#$2#86#:#&2> aF3$6pN^NuNV>a*pN^NuNV#83 >2NVN^NuNV3# 8>4NVN^NuNV#8>6NV n 0& n0( n0* n0,B@09$N^NuNV#8# <>ZNV n0&B@09$N^NuNV3# 8>NNVN^NuNV#83 333 3 3>*NVN^NuNV#83 >rNVN^NuNV3e@ByBByF3LNZ*N^NuNV3{@ByBByF3LNZ*N^NuNV#Ͼ# .мZ#3d@ByB3 F n 3LNZ* n 0L#Ͼ#>##дN^NuNV3 3z@ByB3F3LNZ*N^Nu#@Ϻ"<ϺpsNBNuNVBBJlDRBJ lD RB0. -@0.2. An=@ .gDN^NuNVH?BCB..,. f# <`hlDRCJlDRCn8fzB`0l :HGH`xe`Jge`|fD# D`# JLN^NuNVHK:;|.NwR@;@ ./NwXA+H +@./. / N[PJL N^NuNV`H*nBn`HHм @gT n R HHм @f.Na<|fp`r0Ff.?NdTJgN<%g8.Na<|fp`6H@g.?NdT0.``` n R Bn<*fRn n R :<`$|fBEH2 A:| n R <0m<9oBnBn<lfRn n R `<hfRn n R H`T=| `=|`=|HHм @gRn.Na<|fp`>0FfJng A-H` n-PXBn|+g|-f"|-fRnSE.Na<|fp`BBn`0Fg0|`0<=F n0m nFnv n9o nAmdn0 n o 0._@=@0.nlBRn/.0n/NZ@P2.HЁ-@.Na<|fp`:0SEJ@n\.?NdTJnf0.`Jng .D-@Jng n `Jng ."n2` ."n2JnfRn`.Na<|fp`<sf<-|B``.Na<|fp`BW/.`?a\J@f=|`<cf-|F`|fz=|`bBn n H|^@R Df=| n R Ad-H`` n`R` n R Jg<]f n`BAd-H`Jng A-H` n-PX`"0"nR.Na<|fp`0SEJ@o>/.`?a\J@f.?NdT<cg nBJnfRn`ZHHм @gRn.Na<|fp`D0FfJng A-H` n-PXAd-H``L0"n`R`|0m|9o|.g|eg|Eg |-g|+f.Na<|fp`0SEJ@n.?NdTS` n`BJng/./dNx*X _ `/./dNx*X _ JnfRn`H.Na<|fp`LH@g.?NdT0.`2``H |rW h8N n HR J@fN0.JL N^NuNVH. H>/. NvX>Jng JGgB@`p`0JLN^NuNVH*nSm m mH|R` `.NaJL N^NuNVH*n-fp`-g m p`Jf&-f>Nnv+@fm`m-g0Hм+@Hf9Yg .VNeL-g>`>/-?Nb\;@ Jm n m fm0`m p`Sm +m mH|RJL N^NuNVH>Nu*@ fp`b-gB@`V-g3 3p`8-gB0../. / NcbP``B0../. / NdPJL N^NuNVH *n(n ..-G`> ?/ /-/ Nx=@Bn` L2n gRnB@0.neJng L2n f =nU >/ aPX=@B0.ѭB0.B0.Jo -g` -o+m .JL0N^NuNVH *n-M B2. Ё-@(M`  gRe JL0N^NuNVH *n(n ..> ?/ /-/ Nx=@JnfU B0.ѭ -o+mB@0.JL0N^NuNVH>.*n |fp`.-g$Jg -cS0"mRm 0`pJL N^NuNVN^NuNVH*n0-| |f, -<o >/-?Ns\>Gg mp`J-gJg-g;| `;| `>0- D@H/?Ne\Bm +mB@JL N^NuNVH>Nu*@ f3 3p`$>?-/. ?<BN`P+@U -JL N^NuNV>B?.a\N^NuNVHK;| .+@+@;|:./. / NfP>.BgNlfT0JL N^NuNVH*nBnJ gh``BE-n `RRE nJg n %fJEo.?/. Nk\-n n n %@R DfBn n H|-@R Df n R Rn| <0fG n R =|<*f-M n=PT n R `8`*JnlBnH2. A|=@ n R <0m<9o|<.f BF n R <*f-M n<T n R `*`H2 A<| n R <0m<9oBn<lg<LfRn n R A-HH` RnJng <r` <r#.?<?< // Nq Jngp`pH`RnJng <r` <r#.Bg?< // Nq Jngp`pH`zRnJng <r` <r#.Bg?<// Nq Jngp`pH`&RnJng <r` <r#.Bg?<// Nq Jngp`pH`-M n-PX`-M n0|@B.T`H>?// Nkt X|`~H>?// Nk< X|`XH>?// Nk X|`4.H?NlfTRn``|C|5b@0@( PN.Nw:ElJFm:0.E=@JnfX .0f* n -f SE. nH?NlfTRRn`..H?NlfTRn0.SnJ@n.?/.Nk\n`..H?NlfTRn0.SnJ@n`0.JL N^NuNVJnlp`0.=@ n -@>/. /.NTPN^NuNVJnlp`0.=@ n -@>/. /.NT~PN^NuNV>/. /.a~P-@. Nw2.^AAo>/. /.aP-@ .N^NuNVH *n>. (n,g$Bl >/ ?Ns\Gg lp`*B@`&`.H?NlfT|fp` 0SGJ@fB@JL0N^NuNVH. *n Sm mH"m|R``.H?NlTJL N^NuNVH. *n BF:-fp`$JfV-fN>Nnv+@+@fm`2m>NmJ@gm@`;| H"mR`-gA+H +@ mR-gz>/-?Ns\<Bm `n-g>< g -мb" -:>/-?Ns\<+mBm `( -:>/-?Ns\<;| +mFg mp`H|JL N^NuNVH>Nu*@ fB@`-fB@`pJL N^NuNVH>Nu*@ fB@`0|JL N^NuNV>aJ@g <y0`BN^NuNVH>.^GORG>a*@ fB` >/ aXJL N^NuNVH (y*T`ZB@0-BA2-@F@J@g>NqB`:B@0-ne `*f>a*@ f>NqB`(M*U`JL0N^NuNVH n*PB@0. X@me n `F(MB@0. HH@B@H@B@0-n 9@B@0,F@9@( n ;n B@0-F@;@# PJL0N^NuNVH >.|?GG0@>Ns(*@fB`* R*@(M9GB@0,F@9@.Pa 9JL0N^NuNVH *nQB@0-BA2-@F@J@g>Nqp`(yeeecd(T`e2 BA2-IHABAHAЁ" BB4,JHBBBHB҂b #B@`n BA2-IHABAHAЁf T0(mB@0-F@;@ T*`* BA2,IHABAHAЁfB@0-lB@0,F@9@(`(#B@JL0N^NuNVH *n.a>. ^GORG>a-@fB`J n(PPg2d`Sn Jn f`B0. B0. `%Sn Jn f>/.aXJL0N^NuNVN^NuNVN^NuNVH /?.?./ /. nN*@ мfB(n `%H|0|9o^G мfB JL0N^NuNVH-|*n<.H n. nfz` |SEJgJEf`h nf$z ` |SEJgJEfJEf-`*n<.JngJGlB@0D@> n P-"n R`B0H@B0>JGf JL N^NuNVH >.HμgR*y(G.Np|f3 3p`>Bg/ NwD\ JL0N^NuNVH>Nu*@ fp`XJnfB@`N-g3 3p`0-g>/. / NuhP``>/. / NvxPJL N^NuNVH|BG`  f 0`RG|m33pJLN^NuNVp2.`F@H B@N^NuNVHBG`>aRG|mJLN^NuNVH 0.8*@т0.@BUB-+| BB> Bg/ NwD\> ?< / NwD\JL0N^NuNVH>.|e3 3B`0B@08*@т-f3 3B` JL N^NuNVH *n(n >.B@=@=@``Rnnc L2n  fB@0.ncf>?.B@0.W B2.Ё//-/ Nx=@B0.ѭJnf33p`^=n`8Rn>?</</-/ Nx=@B0.ѭnb4 -o+mB@0.JL0N^NuNVH*n>?./. /-/ Nx=@Jnf33p` B0.ѭ -o+mB@0.JL N^NuNVH*n. ` JfB`Rf JL N^NuNVH*n. H>/ aXJL N^NuNVH*n. <.`0SFJ@nJL N^NuNVH *n (n`RJff .JL0N^NuNVH *n(n `op`lp`JgJfHHAJL0N^NuNVH *n (nf .JL0N^NuNVH *n(M`RJf HJL0N^NuNVN^NuNV.NTN^NuNVH..,. Jf# <`Hc #B`:fzB`(xe 〼b`BJge`# JLN^NuNV n=h.0n/0n/NZ@P/?.?<?N`PN^NuNV n=h.0n/0n/NZ@P/?.?<@N`PN^NuCON:LST:AUTOEXEC.BATSolid Applications, Inc.1333 Moon Drive, Yardley, PA 19067Copyright (c) 1986All rights reservedShareware: Type SHARE for more information.*** GEM DesktopExit to GEM does not existCOMMAND : File : ERROR : Unknown command: COMMANDS: INPUT : |D:d@FLPlTZl` djn tz~PP V,6 T@@ :PHPf`` 34V *52 0:6 &: FB LF r|~K|J|o|d|lEbcflr h N & ?Batch mode command onlyBuilt-in Commands:%-9s is %dEOLEOSBOLBOSLINE%d%dPress any key to continue.TOS Version %s\*.*Volume in drive %s is %s%ld kbytes (%ld actual)%ld$$$Cannot copy Cannot open destination fileWrite Error while copying file.\\*.*Copying \ must be a drive or folder.DCOPY destination not specified%d-%d-%dCurrent date is showEnter new date: Invalid date cannot be foundErase all filesCannot delete %ld free bytes%-8s%8ld%-14s %8s %s %s %02x %d File(s)\%-12s ---- %-12s%4ldK | %d File(s) %d Folder(s) %ld Kbytes totalFWPCannot rename RENAME needs two parametersCannot remove .62*%d%dSELECT syntax errorINPUT syntax errorALERTFILESELECTInvalid GEM menu: KK4MM6aGG7;<=> ?  --/---.-....<.`.<-/tPCommand V1.00 SAI 05-03-86!$n$g;/ONOFF*.*CONAUXPRNMIDIBATPRGTOSTTPABORTBELLBREAKBYECDCHAINCHDIRCLSCOPYCPCTTYDATEDELDIRDECHOERASEERAEXITFORGEMGOTOHELPIFINPUTLOGMKDIRMDPATHPAUSEPRINTPROMPTQEDREDIRECTREMRENRENAMERESERVERMDIRRDSETSHIFTSTACKSWITCHARTIMETYPEVERVERIFYVOLWRAP Continue at: %dI*** EXIT Query Enter I for interactive mode,an integer to specify the entry tocontinue or nothing to continue fromthe current entry.System Environment <--- Current entry%2d: %s%s%s%d:%d:%dCurrent time is showEnter new time: Invalid time *** Load error ****Program: Cannot open BP--- More --- $_bcdeghlnpqtvxAABAAAAXAAxAAApA`AAPAhAB ? YesNoDifferent drive specifiers on rename exists Creating Cannot create %d.%02d%dFFFFFFFFFFFFFFFFFFEFFFF(FHFFFbFFRFlFFFFFFFTJbGI6KVM%%dIN(DOFOR Syntax errorLabel not found: Cannot CHAIN to NOTERRORLEVELEXISTSFOLDERBatch File: : QED requires a file name.Cannot edit Enter a line with no characters to end input. Saving file.%02d:%02d%cm%02d-%02d-%04d %DEFOX[cdefosxa\__\\^^\__\^\a    ihNiijj<j<j<j<j<j<j<hj<j<j<ij<hj<j<iLj<j<j<j<j<j<j<j<j<j<ihRiijj<j<j<j<j<j<j<hj<j<j<ij<hj<j<iP !!!!"*   * 4 ,& (<6 .$(.&` L (        <,$  ,     0   (      P   0  & " D 4.*     P.  f 8  ,@       H , 4D&8:&*$       " 4   ,"   $D>0   "     , x Fb $ Z Fd Z0 $  (  @,D6 T   "$ "* &(X4"   $ n :Dd,  H D*, 0$   L6  l< j $$(,> $j 0  $.F&6  .    <  >^:&L(       .:V|., 8& $   $22~ B$"(>*:  .       F ^ $          zf ,$, F"p"b 64(j $JPP& \& DN*j`^***`&$ D"V8*R$ZF \@(B4.J".86 Jp $""@2&"fv"<0*, $d Command Overview Copyright (c) 1986 Solid Applications Inc. 1333 Moon Drive Yardley, PA 19067 Command is a shareware product from Solid Applications Inc. You are allowed to give a copy of the PCOMMAND.PRG program and this documentation to anyone for no charge. The program may not be sold or included as part of a package for sale without prior written approval from Solid Applications. We encourage you to distribute this package to your friends and coworkers who are using the Atari ST. You may register your copy of PCommand with Solid Applications for $25.00. You will receive a copy of the full documentation and a disk containing the desk accessory version of PCommand along with some useful utilities including a format program which creates diskettes that can be read on an IBM PC (both single and double sided disks). WHAT IS PCOMMAND: Command is a line-oriented command line interpreter with batch file support. It provides an interactive interface to Atari TOS which runs on the Atari ST. Commands are similar to PC-DOS commands PCommand provides faster access to TOS facilities than the GEM desktop. Multiple commands can be entered on a single line for even better efficiency. Command has a number of built-in commands which are always available and can run GEM or TOS-based applications by simply typing their name. A list of local commands is displayed by typing HELP. The batch file facility can be used to present GEM-based menus and alert boxes. This allows a GEM interface to be built using a text editor to create a batch file. Most text editors available for the ST will work. SPECIAL KEYS AND EDITING Commands entered at the command prompt can be edited using the following special keys. control-S Suspend output control-Q Continue output control-C Enter query mode if BREAK is ON ESC same as control-C RETURN Use current line as command control-A Move to start of line control-B Move forward one character control-C Copy template until matching character control-E Move to end of line control-F Move backward one character control-J Skip to next template character control-N Copy next template character control-R Restart entry on the next line control-T Make current input into template control-X Delete current line control-Z Copy rest of template ESC Same as control-X Left arrow Same as control-B Right arrow Same as control-F Home Same as control-R Undo Same as control-Z Shifted left arrow Same as control-A Shifted right arrow Same as control-E Shifted Home/Clr Same as control-X F1 Same as control-N F2 Same as control-C F3 Same as control-Z F4 Same as control-J F5 Same as control-T BUILT-IN COMMANDS Command has a number of built-in commands which can be entered directly or used in batch files. There is also a small set of commands which can only be used within a batch file. The following is a list of built-in commands. ? Show built-in command list ABORT Show/Set Abort option BELL Sound bell BREAK Show/Set Break option BYE Exit from batch file/PCommand CD Change current directory * CHAIN Chain to new batch file CHDIR Change current directory CLS Clear screen COPY Copy file(s) CP Copy file(s) CTTY Show/set console device DATE Show/set date DEL Delete file(s) DIR Show directory D Show directory ECHO Set/show/display text ERASE Delete file(s) ERA Delete file(s) EXIT Exit from batch file/PCommand * FOR Iterate over file name(s) GEM Show/set/menu interface * GOTO Goto label in batch file HELP Show built-in command list) * IF Conditional command execution INPUT Interactive/text input LOG Show/set command logging status MKDIR Make new directory MD Make new directory PATH Show/set default search path PAUSE Wait for input PRINT Print file(s) PROMPT Show/set prompt QED Quick editor for creating batch files REM Remark (comment) REN Rename a file RENAME Rename a file RESERVE Reserve memory for program RMDIR Remove directory RD Remove directory SET Show/Set environment string * SHIFT Shift arguments STACK Show current execution stack SWITCHAR Show/set switch character TIME Show/set time TOS Execute program in TOS environment TYPE Type file on console VER Display TOS version number VERIFY Show/Set floppy disk verify mode VOL Show disk volume label WRAP Show/Set end of line wrap mode * indicates batch file use only. Multiple commands are placed on a line by separating them with an exclamation point, '!'. Command lines can be up to 160 characters. Labels are the GOTO command are names immediately preceeded by a colon, ':'. Any text after a label is assumed to be a comment. Batch file parameters are indicated by a leading percent sign, '%'. A single digit after '%' indicates a parameter to the batch file. The parameter relaces both the percent sign and digit. Any of the following special characters can be used if the percent sign is immediately followed by a colon, ':'. %:c first character from last INPUT result %:d disk letter from last GEM :FILE command %:e ERRORLEVEL from last program %:f file name from last GEM :FILE command %:i string from last INPUT result %:p path name from last GEM :FILE command %:v video mode (0=low, 1=medium, 2=mono) %:: current time %:/ current date BUILT-IN COMMANDS General syntax: optional items are placed within square brackets such as [XYZ]. Alternatives are separated by a vertical bar as with ON|OFF. Repeated items are followed by ellipses (...). Note, keywords do not have to be capitalized when used. ? Help command, no parameters, print built-in commands ABORT [ON|OFF] Set/show ABORT flag, OFF indicates termination when BREAK is ON and a control-C or ESC key is pressed. ON prints the STACK status and allows the system to be restarted at the specified point. BELL Sounds the bell. BREAK [ON|OFF] PCommand recognizes control-C and ESC only if the BREAK flag is ON. BYE [number|ON|OFF] Same as EXIT command. Set the EXIT flag or exit from the current batch file or input mode for 1 or more (number) levels. CD [drive:|path]... Same as CHDIR, set/show current default directory of the current or specified drive. CHAIN file [parameter ...] (Batch file only) Exit current batch file and continue execution of the new batch 'file' using new 'parameters'. CHDIR Same as CD command CLS [option] Clear part of screen which 'option' is: LINE all of the current line EOL from cursor to end of line EOS from cursor to end of screen BOL from cursor to beginning of line BOS from cursor to beginning of screen INSERT insert new line, delete the one at the bottom of the screen DELETE delete current line, add one at the bottom of the screen COPY source [...] [destination] [/D] copy files from to the 'destination' file, disk, or folder. Copy only data files if /D is included. CP Same as COPY command. CTTY [CON|AUX|PRN|MIDI] Change console to specified device. DATE [date|SHOW] Set/show date DEL file [...] Delete one or more files D [directory ...] [/P] [/W] [/F] DIR [directory ...] [/P] [/W] [/F] Display one or more directories. /P for printer output /W for wide output (4 entries/line) /F show free space on disk ECHO [ON|OFF|[@[option] ...] [#][text] Set/show echo mode or print 'text'. '#' allows leading blanks. Option format is: row column Position cursor Foreground color Set text foreground color Background color Set text background color Cursor [ON|OFF] Turn cursor on or off i.e. ECHO @10 10 @F 1 @BACK 0 @Cursor ON # Example ERA Same as DEL ERASE Same as DEL EXIT Same as BYE FOR %%v IN ( file [...] ) DO command Batch file command only. Perform command while substituting variable %%v, where 'v' is any character, while a 'file' is in the list. Names with wild card characters cause a directory to be searched. GEM [ON|OFF|command|:option] Set/show GEM mode for .PRG files. ON to run .PRG files as from desktop Optionally force any program 'command' to run from the desktop mode. 'option' has the following form: NOTE: SQUARE BRACKETS AND '|' ARE REQUIRED HERE. They do not imply an optional arguments. GEM :ALERT default [type][text][buttons] 'default' specifies the default button where no default is 0. The 'type' specifies the icon type (0 to 3, see GEM documenation). 'text' and 'button' items are separated by a '|'. Three 'button's max. The %:e, ERRORLEVEL, variable is set to the selected button (1 to 3) GEM :FILE [path] [file] presents the GEM file selector menu. 'file' may be blank. Results are in %:f for the file name and %:p for the path name, and %:d for drive letter. %:e is 0 if OK is selected and 1 if Cancel is selected. GEM :SELECT default [text][button] General button selection which can have more text and buttons than :ALERT but no icon option. 'text' can be as wide as the screen (less 2 characters). GEM :INPUT [text][valid] GEM :INPUT [text][valid|format] GEM :INPUT [text][valid|format|default] GEM :INPUT [text][valid|format|default|output] General single line text input menu. 'text' is like :ALERT and :SELECT and appears at the top of the menu. The text entered is place into %:i. The 'valid', 'format', 'default' and 'output' options control what can be entered. The 'valid' string can contain any of these: 9 digits 0 to 9 A uppercase letters and space a any letter and a space N uppercase letters, digits and a space n any letter, digits and a space F file name characters plus : ? * f file name characters plus : P path name characters plus : \ ? * p path name characters plus : \ X any character 'format' and 'output' specify where the actual text goes using '_' and all other characters are decoration. Examples: GEM :INPUT [An example:][XXXXXXXXXXXXXX] GEM :INPUT [Enter a date:][999999|__/__/__] GEM :INPUT [Enter a date:][999999|__/__/__|112288] GEM :INPUT [Enter a date:][999999|__/__/__||__-__-__] GOTO label Continue batch file execution after the line that starts with :label GOTO #number label [...] Computed GOTO based upon the value of 'number' where the first label is 0. Continue if there is no corresponding label. HELP Print list of built-in commands. IF [NOT] EXISTS file command IF [NOT] FOLDER folder command IF [NOT] ERRORLEVEL level command IF [NOT] s1==s2 command Execute 'command' if condition met. INPUT [#][prompt] Enter the interactive mode if no parameters, otherwise, print the 'prompt' and accept one line from the keyboard. A leading '#' will not be printed and allows for leading spaces. LOG [ON|OFF] Set/show LOG flag status. PCommand prints the program/batch file name when ON. MKDIR name [...] Create a new folder. MD name [...] Same as MKDIR. PATH [;|path] Set/show PATH list. Reset with ';'. The PATH is used to find program/batch files. 'PATH path' is in the environment list. PAUSE Display 'Press any key to continue' and wait. PRINT file [...] [/P] [/B] List 'file's on the printer. /P to paginate with form feed at 55 lines/page. /B print until the physical end-of-file. Default is includes control-Z too. PROMPT [prompt] Set/show PROMPT string which can include: $_ New line (CR/LF) $B Vertical bar $Cx Control character (control-x) $D Current date $G '>' character $H Backspace character $L '<' character $N Current default drive $P Current default path on default drive $T Current time $V TOS version number XX.YY $X '!' character QED file Create a new 'file' using simple line editor. End of file indicated by a RETURN only. REM comment Remark in batch file. REN old_name new_name Rename file. Works across directories. RENAME old_name new_name Same as REN command. RESERVE [size] Set/show reserve size. Normally for desk accessory version which can reserve a block of memory to run a second program in. 'size' is in kilobytes and the default is 0. RMDIR folder [...] Delete empty folder. RD folder [...] Same as RMDIR command. SET [keyword[=value] ...] Show/set/reset environment list parameter. Environment list can be accessed by applications. 'keyword' and 'value' can be any non-blank string. SHIFT [number] Batch file only. Shift parameter list by 'number' (default is 1). STACK Display execution stack. Useful from within INPUT or batch files. SWITCHAR [character] Show/set parameter character. Default is '/'. TIME [time|SHOW] Set/show current time. TOS command [parameters ...] Force 'command' to execute in TOS mode (no mouse). TYPE 'file' ... [/B] [/P] Type 'file's on screen /B and /P are same as in PRINT command. VER Display TOS version number VERIFY [ON|OFF] Set/show floppy disk verify flag VOL [drive:]... Show volume name of 'drive'. WRAP [ON|OFF] Set/show WRAP flag. Default is ON. Cursor will goto next line if ON and at end-of-line. . k .. kCAT C k GREP C k dHD C kSS C kP/* output some files */ #include "stdio.h" main(argc, argv) char *argv[]; { int i; FILE *f; if (argc == 1) { cat(stdin); } else for (i = 1; i < argc; i++) { if ((f = fopen(argv[i], "r")) != NULL) { cat(f); fclose(f); } else fprintf(stderr, "can't open %s\n", argv[i]); } } cat(f) FILE *f; { int c; while ((c = getc(f)) != EOF) putc(c, stdout); } /* look for strings in a file */ #include "stdio.h" #define MAXLINE 256 char line[MAXLINE]; char str[MAXLINE]; main(argc, argv) char *argv[]; { int i; char *nm; FILE *f; if (argc == 1) { fprintf(stderr, "usage: grep pat file ...\n"); exit(1); } strcpy(str, argv[1]); lower(str); nm = NULL; if (argc == 2) { grep(nm, str, stdin); } else for (i = 2; i < argc; i++) { if ((f = fopen(argv[i], "r")) != NULL) { if (argc > 3) nm = argv[i]; grep(nm, str, f); fclose(f); } else fprintf(stderr, "can't open %s\n", argv[i]); } } lower(s) char *s; { /* don't need this if cmd works right */ char c; while (c = *s) { if (c >= 'A' && c <= 'Z') *s = c - 'A' + 'a'; s++; } } grep(name, str, f) char *name, *str; FILE *f; { while (fgets(line, MAXLINE, f)) { lower(line); if (in(str, line)) { if (name) printf("%s: ", name); printf("%s", line); } } } in(s, l) char *s, *l; { char c, i; i = 0; while (c = *l++) { if (c == s[i]) { i++; if (s[i] == 0) return 1; } else i = 0; } return 0; } /* dump the contents of a file in hex words */ #include main(argc, argv) int argc; char *argv[]; { int i; FILE *f; if (argc == 1) { hd(stdin); } else { for (i = 1; i < argc; i++) { printf("%s\n", argv[i]); if ((f = fopen(argv[i], "r")) != NULL) { hd(f); fclose(f); } } } return 0; } hd(f) FILE *f; { int offset, cnt, hi, lo, i, word[8]; offset = 0; cnt = 8; while (cnt == 8) { puthex(offset, 4); putchar(':'); putchar(' '); for (cnt = 0; cnt < 8; ) { if ((hi = getc(f)) == EOF) break; offset++; if ((lo = getc(f)) == EOF) { word[cnt++] = (hi << 8); break; } else { word[cnt++] = (hi << 8) + lo; offset++; } } for (i = 0; i < cnt; i++) { puthex(word[i], 4); putchar(' '); } for ( ; i < 8; i++) printf(" "); printf(" | "); for (i = 0; i < cnt; i++) { putcx(word[i] >> 8); putcx(word[i]); } putchar('\n'); } if (cnt != 0) { puthex(offset, 4); putchar('\n'); } } puthex(n, size) { if (size > 1) puthex(n >> 4, size - 1); putchar("0123456789ABCDEF"[n & 15]); } putcx(c) { c = c & 255; if (c >= 32 && c <= 127) putchar(c); else putchar('.'); } /* * spread sheet program * commands are copy, read, write, print, blank, format, quit * labels begin with ' and are limited in length * numbers are stored fixed point (2 decimal places) in longs */ #include "stdio.h" /* sizes */ #define MAXROW 100 #define MAXCOL 25 #define MAXLINE 100 #define MAXNODE 5000 #define MAXSTR 16 /* screen locations */ #define FRAMEW 5 #define FRAMEH 1 #define CURCELL 22 #define MSG 23 /* default values for width, format, and justify */ #define DEFWID 10 #define DEFFMT 2 #define DEFJST 'l' /* screen and keyboard defines */ #define ESC 27 #define DEL 127 #define HELP 0x6200 #define UNDO 0x6100 #define INS 0x5200 #define CLR 0x4700 #define UP 0x4800 #define DOWN 0x5000 #define LEFT 0x4B00 #define RIGHT 0x4D00 #define BACKSP 8 #define LJUST 'l' #define RJUST 'r' /* cell types */ #define FREE 0 #define STRING 1 #define VALUE 2 #define CELL 3 #define ERR 4 #define ADD '+' #define SUB '-' #define MUL '*' #define DIV '/' #define NEG '_' #define SUM '@' /* cell structures */ typedef struct { int type; long a, b, c, d; } Node; typedef struct { int type; char s[MAXSTR]; } String; typedef union { Node n; String s; } Cell; Cell *cell[MAXROW][MAXCOL]; /* cell pointers */ Cell space[MAXNODE]; /* Cell space */ Cell *nextfree; /* free list of nodes */ Cell extra; /* an extra one when empty */ int freecnt; /* count of free nodes */ char linebuf[MAXLINE]; /* keyboard input buffer */ char showbuf[MAXLINE]; /* buffer for show routine */ char filename[MAXLINE]; /* load/save file name */ char prname[MAXLINE]; /* print file name */ char prwin[MAXLINE]; /* print window */ int crow, ccol; /* current cursor row and col */ int frow, lrow; /* first and last displayed row */ int fcol, lcol; /* first and last displayed col */ char width[MAXCOL]; /* width of the columns */ char format[MAXCOL]; /* format of the columns */ char justify[MAXCOL]; /* justification of the cols */ int loc[MAXCOL]; /* screen location of the cols */ char *parstr; /* string for expr parser */ char tokstr[MAXLINE]; /* string for next token */ int reframe; /* need to reframe */ int redisp; /* need to recalc the display */ main(argc, argv) char *argv[]; { int c; init(); if (argc > 1) loadss(argv[1]); while (1) { display(); switch (c = get()) { case 'b': blank(); break; case 'c': copy(); break; case 'd': delete(); break; case 'e': edit(); break; case 'f': setformat(); break; case 'g': go(); break; case 'i': insert(); break; case 'l': load(); break; case 'p': print(); break; case 'q': quit(); break; case 's': save(); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '\'': case '(': case '=': enter(c); break; case UP: case DOWN: case LEFT: case RIGHT: movecur(c); break; default: help(); break; } } } /* initialize the spreadsheet */ init() { int r, c; for (r = 0; r < MAXROW; r++) for (c = 0; c < MAXCOL; c++) cell[r][c] = NULL; crow = ccol = 0; frow = fcol = 0; reframe = redisp = 1; for (c = 0; c < MAXCOL; c++) { width[c] = DEFWID; format[c] = DEFFMT; justify[c] = DEFJST; } nextfree = NULL; freecnt = 0; for (r = 0; r < MAXNODE; r++) free(&space[r]); extra.n.type = ERR; erase(); } /* draw a frame on the screen displaying current window rows and cols */ frame() { int sz, i; lrow = frow + 20; if (lrow > MAXROW) lrow = MAXROW; sz = FRAMEW; for (lcol = fcol; lcol < MAXCOL && sz + width[lcol] < 80; lcol++) { loc[lcol] = sz; sz += width[lcol]; } move(0, FRAMEW); reverse(1); for (i = fcol; i < lcol; i++) { sprintf(linebuf, "%c..............................", 'a'+i); outstr(stdout, width[i], LJUST, linebuf); } for (i = frow; i < lrow; i++) { move(FRAMEH + i - frow, 0); clrline(); sprintf(linebuf, "%d.....", i); outstr(stdout, FRAMEW, LJUST, linebuf); } reverse(0); clrbelow(); redisp = 1; } /* refresh the contents of the current display window */ display() { int r, c, n; Cell *p; char *content(); if (reframe) frame(); if (redisp) { for (r = frow; r < lrow; r++) { for (c = fcol; c < lcol; c++) { if (p = cell[r][c]) { move(FRAMEH+r-frow, loc[c]); value(stdout, c, p); } } } } move(0, 0); /* how much free space left */ n = ((long)freecnt * 100L) / (long)MAXNODE; sprintf(linebuf, "%d%%", n); outstr(stdout, FRAMEW, LJUST, linebuf); move(CURCELL, 0); /* what is the content of current cell */ clrbelow(); printf("%c%d: %s", ccol+'a', crow, content(cell[crow][ccol], 0)); move(FRAMEH+crow-frow, loc[ccol]); /* place cursor */ reframe = redisp = 0; } /* output the value of the cell */ value(fp, c, p) FILE *fp; Cell *p; { int i, wid, fmt, jst; char *s, *ntoa(); long n, eval(); wid = width[c]; fmt = format[c]; jst = justify[c]; if (p == NULL) outstr(fp, wid, jst, ""); else if (p->s.type == STRING) outstr(fp, wid, jst, p->s.s); else { n = eval(p); outstr(fp, wid, jst, ntoa(n, fmt)); } } /* get a line from a file */ rdline(fp, bp) FILE *fp; char *bp; { int i, c; for (i = 0; (c = getc(fp)) != '\n' && c != EOF; i++) if (c >= ' ') *bp++ = c; *bp = 0; return i; } /* get a line from the keyboard */ char * getline(prompt, start) char *prompt, *start; { int i, j, n, c, plen, change; move(MSG, 0); clrline(); for (plen = 2; *prompt; plen++) put(*prompt++); ps("? "); i = 0; if (start) { while (linebuf[i] = start[i]) put(linebuf[i++]); } n = i; while ((c = get()) != '\r') { change = 0; switch (c) { case LEFT: if (i) i--; break; case RIGHT: if (i < n) i++; break; case BACKSP: if (i == 0) break; i--; case DEL: if (i == n) break; n--; for (j = i; j < n; j++) linebuf[j] = linebuf[j+1]; change++; break; case ESC: return NULL; break; case INS: c = ' '; default: if (c < ' ' || c > DEL) break; for (j = n; j > i; j--) linebuf[j] = linebuf[j-1]; n++; linebuf[i++] = c; change++; break; } if (change) { j = (i ? i-1 : 0); move(MSG, plen+j); while (j < n) put(linebuf[j++]); put(' '); } move(MSG, plen+i); } linebuf[n] = 0; return (n ? linebuf : NULL); } /* move the cursor, if move goes outside the window, adjust frame */ movecur(c) { switch (c) { case UP: if (crow) crow--; if (crow < frow) { frow--; reframe++; } break; case DOWN: if (crow < MAXROW-1) crow++; if (crow >= lrow) { frow++; reframe++; } break; case LEFT: if (ccol) ccol--; if (ccol < fcol) { fcol--; reframe++; } break; case RIGHT: if (ccol < MAXCOL-1) ccol++; if (ccol >= lcol) { fcol++; reframe++; } break; } } /* time to go */ quit() { char *s; if (s = getline("quit", "yes")) { if (*s == 'y') { move(24, 0); exit(0); } } } /* expression entry parsing */ char * next() { int c; char *s; while ((c = *parstr) && c <= ' ') parstr++; s = tokstr; if (alphanum(c)) { while (alphanum(*parstr)) *s++ = *parstr++; } else *s++ = *parstr++; *s = 0; return tokstr; } /* create a new node */ Cell * mkcell(t, a, b, c, d) long a, b, c, d; { Node *p; if ((p = nextfree) == NULL) { move(MSG, 0); printf("out of space"); return &extra; } else { freecnt--; nextfree = p->a; p->type = t; p->a = a; p->b = b; p->c = c; p->d = d; return p; } } /* parse the string (pointed at by parstr) into an expression tree */ Cell * parse() { char *s; Cell *x, *factor(), *tail(); x = factor(); s = next(); x = tail(x, *s); } /* more parsing, here we look for operators */ Cell * tail(x, op) Cell *x; { int p; char *s; Cell *y, *factor(); while (1) { if (!(p = prec(op))) return x; y = factor(); s = next(); if (prec(*s) > p) y = tail(y, *s); x = mkcell(op, x, y); op = *s; } } /* return the precedence of the given operator */ prec(op) { switch (op) { case '+': case '-': return 1; case '*': case '/': return 2; case '@': return 3; default: return 0; } } /* parse a factor of an expression */ Cell * factor() { char *s; int i, c, cr, cc; long aton(); Cell *x, *y; if (!(s = next())) return NULL; switch (c = *s) { case '\'': x = mkcell(STRING, 0L, 0L); s = x->s.s; for (i = 0; i < MAXSTR && (*s++ = *parstr++); i++) ; return x; case '-': x = factor(); return mkcell(NEG, x, 0L); case '(': return parse(); default: if (c >= 'a' && c <= 'z') { y = cc = c - 'a'; x = cr = atoi(s+1); return mkcell( check(cr, cc) ? CELL : ERR, x, y); } else if (c >= '0' && c <= '9') { x = aton(s); return mkcell(VALUE, x, 0); } else { move(MSG, 0); printf("bad factor: %s", s); return NULL; } } } /* set the value of a cell */ setvalue(r, c, x) long x; { Cell *p; if (p = cell[r][c]) free(p); cell[r][c] = x; } /* free up all space associated the given pointer */ free(p) Node *p; { switch (p->type) { case ADD: case SUB: case MUL: case DIV: case SUM: free(p->b); case NEG: free(p->a); } p->type = FREE; p->a = nextfree; nextfree = p; freecnt++; } /* get a filename from the user and load a spreadsheet */ load() { char *s; if (s = getline("load file", filename)) { loadss(s); } } /* load a spreadsheet file */ loadss(name) char *name; { FILE *fp; int c; char *s; strcpy(filename, name); if (fp = fopen(name, "r")) { init(); while (rdline(fp, parstr = linebuf)) { s = next(); switch (c = *s) { case '=': s = next(); ccol = *s - 'a'; crow = atoi(s+1); if (check(crow, ccol)) setvalue(crow, ccol, parse()); break; case 'f': if (s = next()) { c = atoi(s); if (s = next()) width[c] = atoi(s); if (s = next()) format[c] = atoi(s); if (s = next()) justify[c] = *s; } break; } } reframe = redisp = 1; chkframe(); fclose(fp); } else { printf(" can't open ", name); get(); } } /* save a spreadsheet on a file */ save() { int r, c; FILE *fp; char *name, *content(); if (name = getline("save file", filename)) { strcpy(filename, name); fp = fopen(name, "w"); for (r = 0; r < MAXROW; r++) for (c = 0; c < MAXCOL; c++) if (cell[r][c]) { fprintf(fp, "= %c%d %s\n", c+'a', r, content(cell[r][c], 0)); } for (c = 0; c < MAXCOL; c++) if (width[c] != DEFWID || format[c] != DEFFMT || justify[c] != DEFJST) fprintf(fp, "f %d %d %d %c\n", c, width[c], format[c], justify[c]); fclose(fp); } } /* print a report onto a file */ print() { char *s; FILE *fp; int r, c, trow, tcol, brow, bcol; if (!(s = getline("print window", prwin))) return; strcpy(prwin, s); if (!window(s, &trow, &tcol, &brow, &bcol)) return; if (s = getline("file name", NULL)) { strcpy(prname, s); fp = fopen(s, "w"); for (r = trow ; r <= brow; r++) { for (c = tcol; c <= bcol; c++) value(fp, c, cell[r][c]); putc('\n', fp); } fclose(fp); } } /* prompt for a cell name and move the cursor to that cell */ go() { char *p; if (p = getline("go to cell", NULL)) { if (*p >= 'a' && *p <= 'z') { ccol = *p - 'a'; crow = atoi(p+1); if (crow < 0) crow = 0; if (crow >= MAXROW) crow = MAXROW-1; if (ccol < 0) ccol = 0; if (ccol >= MAXCOL) ccol = MAXCOL-1; chkframe(); } } } chkframe() { if (crow < frow || crow >= lrow || ccol < fcol || ccol >= lcol) { frow = crow; fcol = ccol; reframe = 1; } } /* make a copy of a cell */ Cell * copyx(p, sr, sc, dr, dc) Node *p; { int r, c; Cell *x, *y; if (p == NULL) return NULL; switch (p->type) { case ADD: case SUB: case MUL: case DIV: case SUM: x = copyx(p->a, sr, sc, dr, dc); y = copyx(p->b, sr, sc, dr, dc); return mkcell(p->type, x, y); case CELL: r = p->a - sr + dr; c = p->b - sc + dc; return mkcell( check(r, c) ? CELL : ERR, (long)r, (long)c); default: return mkcell(p->type, p->a, p->b, p->c, p->d); } } /* prompt for where to copy to, and then copy it */ copy() { char *s; Cell *src; int r, c, trow, tcol, brow, bcol; if (!(s = getline("destination", NULL))) return; if (!window(s, &trow, &tcol, &brow, &bcol)) return; src = cell[crow][ccol]; for (r = trow; r <= brow; r++) for (c = tcol; c <= bcol; c++) setvalue(r, c, copyx(src, crow, ccol, r, c)); redisp = 1; } /* insert a row or a column */ insert() { char *s; if (s = getline("insert (row or col)", NULL)) { if (*s == 'r') insrow(); else if (*s == 'c') inscol(); else return; reframe = 1; } } insrow() { int r, c; Cell *p; for (r = MAXROW-2; r >= crow; r--) { for (c = 0; c < MAXCOL; c++) { p = copyx(cell[r][c], r, c, r+1, c); setvalue(r+1, c, p); } } for (c = 0; c < MAXCOL; c++) setvalue(crow, c, NULL); } inscol() { int r, c; Cell *p; for (c = MAXCOL-2; c >= ccol; c--) { width[c+1] = width[c]; format[c+1] = format[c]; justify[c+1] = justify[c]; for (r = 0; r < MAXROW; r++) { p = copyx(cell[r][c], r, c, r, c+1); setvalue(r, c+1, p); } } width[ccol] = DEFWID; format[ccol] = DEFFMT; justify[ccol] = DEFJST; for (r = 0; r < MAXROW; r++) setvalue(r, ccol, NULL); } /* delete a row or a column */ delete() { char *s; if (s = getline("delete (row or col)", NULL)) { if (*s == 'r') delrow(); else if (*s == 'c') delcol(); else return; reframe = 1; } } delrow() { int r, c; Cell *p; for (r = crow; r < MAXROW-2; r++) { for (c = 0; c < MAXCOL; c++) { p = copyx(cell[r+1][c], r+1, c, r, c); setvalue(r, c, p); } } } delcol() { int r, c; Cell *p; for (c = ccol; c < MAXCOL-2; c++) { width[c] = width[c+1]; format[c] = format[c+1]; justify[c] = justify[c+1]; for (r = 0; r < MAXROW; r++) { p = copyx(cell[r][c+1], r, c+1, r, c); setvalue(r, c, p); } } } /* enter a new expression into the cell */ enter(c) { char str[2]; if (c != '=') sprintf(str, "%c", c); else *str = 0; if (parstr = getline("enter", str)) { setvalue(crow, ccol, parse()); redisp = 1; } } /* fill the line buffer with the (unevaluated) contents of the cell */ char * content(p, cp) Cell *p; { *linebuf = 0; showx(p, cp); return linebuf; } /* recursive support routine for content() */ showx(p, cp) Node *p; { int op, np; char *ntoa(); if (p == NULL) return; switch (op = p->type) { case ERR: sprintf(showbuf, "ERR"); break; case FREE: sprintf(showbuf, "FREE"); break; case STRING: sprintf(showbuf, "'%s", ((String *)p)->s); break; case CELL: sprintf(showbuf, "%c%d", (short) (p->b + 'a'), (short) p->a); break; case VALUE: sprintf(showbuf, "%s", ntoa(p->a, 2)); break; case ADD: case SUB: case MUL: case DIV: case SUM: np = prec(op); if (np < cp) strcat(linebuf, "("); showx(p->a, np); sprintf(linebuf, "%s%c", linebuf, p->type); showx(p->b, np); if (np < cp) strcat(linebuf, ")"); *showbuf = 0; break; case NEG: strcat(linebuf, "-"); showx(p->a, cp); *showbuf = 0; break; default: sprintf(showbuf, "ERR%d", p->type); break; } strcat(linebuf, showbuf); } /* erase the current cell */ blank() { char *s; if (s = getline("blank this cell", "yes")) { if (*s == 'y') { setvalue(crow, ccol, NULL); move(FRAMEH+crow-frow, loc[ccol]); outstr(stdout, width[ccol], LJUST, ""); } } } /* edit the contents of the current cell */ edit() { char *s; s = content(cell[crow][ccol], 0); if (parstr = getline("edit", s)) { setvalue(crow, ccol, parse()); redisp = 1; } } /* prompt for new column formats and change them */ setformat() { char *s; int w; sprintf(linebuf, "%d", format[ccol]); if (s = getline("fixed decimal", linebuf)) { w = atoi(s); format[ccol] = (w > 2 ? 2 : w); redisp = 1; } sprintf(linebuf, "%d", width[ccol]); if (s = getline("column width", linebuf)) { w = atoi(s); width[ccol] = (w < 2 ? 2 : w); reframe = 1; } sprintf(linebuf, "%c", justify[ccol]); if (s = getline("left or right justify", linebuf)) { if (*s == 'l' || *s == 'r') { justify[ccol] = *s; reframe = 1; } } } /* display a help message */ help() { move(MSG, 0); printf("cell entry: type \"= expr\" or \"'label\" "); move(MSG+1, 0); printf( "commands: blank copy delete edit format goto insert load print quit save"); get(); } /* evaluate a cell entry */ long eval(p) Node *p; { int x, y; long a, b, sum(); if (p == NULL) return 0L; switch (p->type) { case FREE: case STRING: case ERR: return 0L; case VALUE: return p->a; case CELL: x = p->a; y = p->b; return eval(cell[x][y]); case SUM: return sum(p->a, p->b); break; case ADD: a = eval(p->a); b = eval(p->b); return a+b; case SUB: a = eval(p->a); b = eval(p->b); return a-b; case MUL: a = eval(p->a); b = eval(p->b); return (a*b)/100; case DIV: a = eval(p->a); b = eval(p->b); return (a*100)/b; case NEG: a = eval(p->a); return -a; } } long sum(lp, rp) Node *lp, *rp; { long n; int br, bc, er, ec, r, c; n = 0L; if (lp->type == CELL && rp->type == CELL) { br = lp->a; bc = lp->b; er = rp->a; ec = rp->b; for (r = br; r <= er; r++) for (c = bc; c <= ec; c++) n += eval(cell[r][c]); } return n; } /* parse a window definition, e.g. "a0.z99" */ window(s, tr, tc, br, bc) char *s; int *tr, *tc, *br, *bc; { *tc = *s - 'a'; *tr = atoi(s+1); while (*s && *s++ != '.') ; if (*s) { *bc = *s - 'a'; *br = atoi(s+1); } else { *bc = *tc; *br = *tr; } return check(*tr, *tc) && check(*br, *bc); } /* range check on a row and column */ check(r, c) { return r >= 0 && r < MAXROW && c >= 0 && c < MAXCOL; } /* convert a string to an integer */ atoi(s) char *s; { int n, c; if (s == NULL) return 0; for (n = 0; isdig(c = *s++); ) n = n * 10 + c - '0'; return n; } /* convert a string to a "fixed point" number (i.e. "123.45") */ long aton(s) char *s; { int c, i; long n; n = 0L; if (s == NULL) return 0L; for (n = 0; isdig(c = *s++); ) n = n * 10 + (c - '0'); if (c == '.') c = *s++; for (i = 0; i < 2; i++) { n = n * 10; if (isdig(c)) { n = n + (c - '0'); c = *s++; } } return n; } /* check the types of the characters */ isdig(c) { return c >= '0' && c <= '9'; } alphanum(c) { if (c >= 'a' && c <= 'z') return 1; if (c >= 'A' && c <= 'Z') return 1; if (c == '.') return 1; return isdig(c); } /* convert the fixed point number back to a string */ char * ntoa(n, fmt) long n; { int i, neg; if (neg = n < 0) n = -n; i = 16; linebuf[--i] = 0; do { linebuf[--i] = n % 10 + '0'; n = n / 10; if (i == 13) linebuf[--i] = '.'; } while (n); while (i > 11) { if (i == 13) linebuf[--i] = '.'; else linebuf[--i] = '0'; } if (fmt == 0) linebuf[12] = 0; else if (fmt == 1) linebuf[14] = 0; if (neg) linebuf[--i] = '-'; return &linebuf[i]; } /* output a string of width n to the stream fp */ outstr(fp, wid, jst, s) FILE *fp; char *s; { int i; if (jst == RJUST) { for (i = 0; s[i]; i++) ; for ( ; i < wid; i++) putc(' ', fp); } for (i = 0; i < wid && *s; i++) putc(*s++, fp); if (jst == LJUST) { for ( ; i < wid; i++) putc(' ', fp); } } /* keyboard input and screen output/control */ get() { long c; c = trap(1, 7); if (c & 0xFF) return (short)c; /* ascii character */ else return (short)(c >> 8); /* scan code */ } move(row, col) { put(ESC); put('Y'); put(row+' '); put(col+' '); } erase() { put(ESC); put('E'); } clrline() { put(ESC); put('K'); } clrbelow() { put(ESC); put('J'); } reverse(on) { put(ESC); put(on ? 'p' : 'q'); } put(c) { trap(1, 2, c); } ps(s) char *s; { while (*s) put(*s++); } . k&.. kSTARTUP DOCk'w!STARTUP INF k0OSTARTUP PRGk1~. ....................................................... / : \ : STARTUP.PRG : Batch Startup Program Version 1.1 : : : by Murray Levine : : : CIS # 74435,1015 : : : : \................:....................................../ STARTUP.PRG is a Batch Startup program that executes commands from the file startup.inf upon booting your ST. STARTUP.PRG must be placed in the \AUTO\ folder on boot drive (usually A). It first looks for the file STARTUP.INF in the same directory and if it can't find it, it tries to locate it in the main directory (ex. A:STARTUP.INF). From now on, these two files can be the only files you need in the AUTO directory because all other files to be executed can be located in their original drive and folder and can even have parameters past to them. You no longer have to make sure of the order that you copied your files to the AUTO directory because STARTUP executes programs as they are listed in STARTUP.INF. The format for pragrams to be executes is to list the complete program name followed by any parameters to be passed. any command or program name can be followed by a comment. Any text on a line that follows a ';' will be treated as a comment. For example, a:\supboot.prg ; Supra Hard Drive driver program c:\bin\touch.prg a:startup.inf ; Update timestamp for info file would first load the hard drive driver program supboot,prg from drive A: and then update the timestamp for teh file a:startup.inf. There are a few unix-like commands that are used in the STARTUP.INF file as well as some other special commands. All commands must be in lower case, however, the filenames may be in lower or upper case. The allowable commands are as follows: Copy Files: cp file1 file2 - copy file1 to file2 cp file1 ... dir - copy file1 and other files to the directory dir The cp command is useful for copying files to a ramdisk. Wildcards are also accepted. cp b:\src\*.c c:\ ; Copy source files to ramdisk c: Remove files: rm file ... The rm command removes the listed files. As with cp, wildcards are also accepted. Be carefull, though, about doing an rm *.* so you don't wipe out a disk by accident. Create directory mkdir dir ... The mkdir command creates the subdirectory dir. Remove directories rmdir dir ... The rmdir command removes the specifies subdirectories. An error will occur if the specified subdirectory is not empty or does not exist. Display files: cat file ... The cat command displays the listed files on the console. Useful for displaying any title screen information. Once again, wildcards are accepted. Pressing ctrl-C during the display of a file aborts displaying that file and goes on to the next file if there is one. Change directory: cd dir The cd command changes the default directory to either a disk drive or a subdirectory. cd b: ; changes default drive to b: cd b:\auto ; change to drive b:, subdirectory auto The cd command is usefull if when running prgrams you don't wan't to list the complete filename (drive and directory) and if the program being executed expects to find certain files (data files) in the default directory. Display text: echo string echo -n string echo -i string The echo command displays the following string (list of words) on the screen followed by a carriage return. If the -n option is used, the carriage return is not printed. If the -i option is used, the string is printed in inverse video. The echo command is useful for displaying what is happening at different points of the boot process. As an example, I use the following: echo -n The time is c:\bin\date.prg ; display the current time This will display: The time is Sat Jan 24 1987 12:24pm Setting variables set var = string - set variable var to string set var = $< - set variable var to a string entered from keyboard set - display all variables The set command allows the user to set up to 20 variables whose variable names can be up to 8 characters in length. If string is to be more than than one word then it should be in quotes, e.g. "This is a string". If The string is $<, then the variable waits for a string to be entered from the keyboard. This string can then be tested later using the if command. Using set without any arguments will display all of the variables and the string values associated with them. Conditional statements if (string1 cond string2) then commands endif if (string1 cond string2) then commands else commands endif The if command is used to compare two strings based on the specified condition cond. If the comparison is true, the commands follwing the then statement will be executed. An optional else statement can be used if the comparision is false. The if command must end with the endif statement. There can be as many as 9 nested if statements, however be sure that there are enough endif statements to match them. String1 and string2 can be either strings or variables. The possible conditions are as follows: == is equal to != is not equal to < is less than > is greater than <= is less than or equal to >= is greater than or equal to The special commands used by Startup are as follows: Use medium or low resolution: res medium res low The res command will set a color system to medium resolution or low resolution during the boot process. On monochrome systems this command has no effect. Turn the cursor on or off: cursor on cursor off The cursor command turns the cursor on or off again. Since during the boot process TOS dosn't turn on the cursor, you can now see where the cursor is for entering text. You can even turn it back off again after running a certain program if you wish. Turn the keyclick on or off: keyclick on keyclick off The keyclick command trurns off the keyclick if you get annoyed by it while entering input and let's you turn it back on if you want after running a certain program. Clear the screen: clear The clear command clears the screen and places the cursor in the upper left hand corner. This can be followed by the cat command to display a title page. Display of each line display on display off The display command turns on or of the display flag. When the display is on, the each line will be displayed in full including comments until the display is turned off. The default is display off. Ask if program should be run ask filename [arg ...] The ask command asks the user if he wishes to run the program denoted by filename. The output is as follows: Execute autotime.prg (Y/N)? Typing a Y will execute the program, any other key will skip the execution of the program. This can be useful for example if a user does not wish to load GDOS when he boots up, but wishes to load GDOS the next time he boots teh system. System variables $res - contains the screen resolution ("low","medium","high") $desktop - contains the screen resolution in the desktop.inf file ("low","medium","high"). If the desktop.inf file does not exist, the variable is set to "none". $cwd - current working directory or pathname The following sample startup.inf file is the one I currently use during my boot process. res medium ; Use meduim res when booting in color cursor on display on c:\supboot.prg ; Supra Hard Disk booting program d:\rtx\rtxboot.prg ; Micro RTX kernal d:\utility\hdaccel.prg ; Hard Disk Accellorator d:\utility\autotime.prg ; Logikhron Clock Card time retriever display off if ($res != $desktop) then ; Check desktop.inf resolution echo copying desktop.inf for $res resolution if ($res == high) then cp c:\desktop.hi c:\desktop.inf ; set desktop.inf for high res settings else cp c:\desktop.med c:\desktop.inf ; set desktop.inf for med res settings endif endif echo -n The date is c:\bin1\date.prg ask e:\degelite\auto\gdos.prg ; GDOS 1.1 for Degas Elite Any comments or suggestions for a future version are welcome. Murray Levine CIS # 74435,1015 res medium ; Use meduim res when booting in color cursor on display on c:\supboot.prg ; Supra Hard Disk booting program d:\rtx\rtxboot.prg ; Micro RTX kernal d:\utility\hdaccel.prg ; Hard Disk Accellorator d:\utility\autotime.prg ; Logikhron Clock Card time retriever display off if ($res != $desktop) then echo copying desktop.inf for $res resolution if ($res == high) then cp c:\desktop.hi c:\desktop.inf else cp c:\desktop.med c:\desktop.inf endif endif echo -n The date is c:\bin1\date.prg ; e:\degelite\auto\gdos.prg ; GDOS 1.1 for Degas Elite `&r,oO/r <Ю ЮЮ//Bg?<JNAO N*BgNA"/0<NBNuNV`p n @o n [lp`B@J@gF n @o n [lp`B@J@g nH| ` nH"nR nJfN^NuNV> N$|f">N$fp`B@`N^NuNV` n"n R R n Jf nBN^NuNV`R nJf` n"n R R n Jf nBN^NuNVBn`Rn nHRJf0.`N^NuNV. Nl?/.NlX_gp`h`V nH"n HAo p`H` nH"n HAlp`( nHR n HR nJfB@`N^NuNV 9'\#;V#(L;.;?< N$T.(k?< N$T.(?< N$T.(?< N$T.;?< N$T.(?< N$TN% Nv>N$n`N.'/9'N%:X`J.'/9'N%:X`2.'/9'N%:X``J@g|g°|g`BW/<(?<=N$\3N$T096B`N.'/9'N%:X`J.'/9'N%:X`2.'/9'N%:X``J@g|g°|g`.:?<N$T#;/zBW/9'?<NN$\J@f BW/9'?<=N$\3<`xBW/9;V?<NN$\J@f BW/9;V?<=N$\3<`@.(?< N$T.;V?< N$T.(?< N$TBWN$ y/z#A.A?<HN$T#5.5/9A?9N$T#55B<`> y5<  g y5<  f y5096Pм7p2y65"096Pм7p @BRy6 y 6m`R5 y5  g` y5 "fB7dR5`.09APй7dм7p @"y5R5R7d y5Jg y5 "f y5 "fR509APм7pй7d @B`6 y5 $fPB7dR5`.09APй7dм7p @"y5R5R7d y5Jgd y5  gV y5 =gH y5 (g: y5 )g, y5 !g y5 >g y5 >fh09APм7pй7d @B09APм7p.N%#fB7d09APй7dм7p @"y5R5R7d`.09APй7dм7p @"y5R5R7d y5 =g09APм7pй7d @B`B7d`.09APй7dм7p @"y5R5R7d y5Jgd y5  gV y5 =gH y5 (g: y5 )g, y5 !g y5 >g y5 >fh09APм7pй7d @BRyA`R5 y5  g y5Jf.7pNB0y("<( Jpg.(/<7pNXJ@fJy(oSy(`x.)/<7pNXJ@f,0y(SH( JPf0y(( BP`4.)/<7pNXJ@fRy(0y(( 0`.) /<7pNXJ@f.5?9AN(T``0Jy(g&.@?< N$T.)?< N$T.)/<7pNXJ@f>HNb>JNb`4.)/<7pNXJ@f.5?9ANXT`.) /<7pNXJ@f0y(( 0`.)%/<7pNXJ@fJy(oSy(`.)+/<7pNXJ@f.5?9ANlT`r.)./<7pNXJ@f.5?9AN pT`@.)1/<7pNXJ@f .5?9AN8TNv`.)4/<7pNXJ@f.5?9AN#T`.)8/<7pNXJ@f.5?9ANT`.)?/<7pNXJ@f.5?9ANT`r.'/<7pNXJ@f.5?9ANT`@.)H/<7pNXJ@f.5?9ANT`.)K/<7pNXJ@f.5?9ANRT`.)Q/<7pNXJ@f.5?9ANT`.)W/<7pNXJ@f.5?9ANT`x.)[/<7pNXJ@f`j.)`/<7pNXJ@f.5?9ANT`(.7pNlJ@g.7h/<7pNX 96Am.)d?< N$T.5?<IN$TN^NuNVB/. /.Bg?<KN$ Jl6.)?< N$T.?< N$T.)?< N$TN^NuNV-|5 nol=|`> n 2.H./.N0X0.S@no.)/.N0XRn0.nm.NlH5`B95.)?< N$T n .?< N$T no$> ?<N$T.5?< N$T.)?< N$T>N$H@.)?< N$T .Yg .yf.5 n /(NXN^NuNV=|BnX n -P n -fL`4 nH`Bn` =|``|ig|ng`R nJfSn`Y Jng.)?< N$T`2X n .?< N$T no> ?<N$TSnfJng.)?< N$TJng.)?< N$T`> ?<N$TN^NuNV-|)-|) nmBn-|;>Sn n 2.H/0?<NN$\=@Jnf =n`^ n 2.H.Nl|g n 2.H.Nl|f" n 2n p (:f=nBWBg n /(?<CN$P=@ nf n g JnfBnJnf0 nn&BW n /(?<=N$\=@l<.?< N$T n .?< N$T.)?< N$T`BW n /(?<?<>N$T`f`.?<>N$T>?<>N$T`Jng n 2.H./<;NX.;Nl=@0nSH; \g0n;\0n;B(-|;`BWX n /?<NN$\=@`` n ./.NX.;/<?<>N$T`p`.?<>N$T>?<>N$T>ON$=@JngSnftN^NuNV-|;`BWX n /?<NN$\=@`p n ./.NX.:?<AN$TJg8.)?< N$T.:?< N$T.)?< N$T>ON$=@JngSnffN^NuNV`TX n .?<9N$TJl8.*?< N$T n .?< N$T.*?< N$TSnfN^NuNV`X n .?<:N$T=@l| nf<.*(?< N$T n .?< N$T.*:?< N$T`8.*G?< N$T n .?< N$T.*`?< N$TSnfbN^NuNV>?<?<N$~X. H>?<?<N$~XN^NuNV-|*m ng.?< N$T`f.* n /(NXJ@f>eNb`<.* n /(NXJ@f>fNb`.?< N$TN^NuNV-|* ng.?< N$T``.* n /(NXJ@f3(`8.* n /(NXJ@f By(`.?< N$TN^NuNV-|-|* ng.?< N$T`.* n /(NXJ@f0B?< N$T-@ n.?< N$T`\.* n /(NXJ@f0B?< N$T-@ n.?< N$T`.?< N$TN^NuNV-|*>N$n|g ng.?< N$T`.' n /(NXJ@f6BW// ?<?<N$~X y7d"<<0H>?<?<N$~XNJ@fR7d 97dm 97dm&. ?<?<N$~X> ?<?<N$~X>?<>N$T>ON$=@JngSnn|N^NuNV-|*-|+ nf n h (:f> N$~=@ n h `o n h {lp`B@J@g n hH|` n hHH@.H|nf&.H>?<N$T.?< N$T.H>W?<N$T n .T?<;N$TJg.?< N$T`, n .?<;N$TJg.?< N$TN^NuNV>N$|AH@|:BW/?<GN$\.NB./<+N%:XN^NuNV nB( . /<:NX.:NlS@=@`Jng Sn` B9:`$0n: \g0n: :fJngRn0n:B./<:N0XN^NuNV nfV.+ n /(NXJ@f:.+ n /(NXJ@f.+ n /(NXJ@g.+%?< N$T`.=y(.+8 n /( NXJ@g:.+; n /( NXJ@g.+> n /( NXJ@fV0.R@3( n . n /(NXJ@f0y(( BP``0y(( 0.+A n /( NXJ@fR0.R@3( n . n /(NXJ@g0y(( BP`0y(( 0.+D n /( NXJ@g.+F n /( NXJ@fR0.R@3( n . n /(NXJ@l0y(( BP`0y(( 0.+I n /( NXJ@g.+K n /( NXJ@fR0.R@3( n . n /(NXJ@o0y(( BP`0y(( 0N^NuNV nf N%` nf.+N n /(NXJ@g.+P?< N$T`.' n /(NXJ@g|.' n /(NXJ@g`.+d n /(NXJ@gD.+h n /( NXJ@f n . N$ n . n /(N%:XN^NuNV|N.?< N$T=|` n2nRRn.HT@nn nB.+k?< N$TN^Nu#/vNN/9/vNu#/vNM/9/vNu#/vNA/9/vNuNVBn`R0.Hм6./.NXJ@f 0.`60.Hм6 @Jf0.R@D@`Rn nmp`N^NuNVBn`0.Hм6 @BRn nmN^NuNV.N$=@ nfB@`RJnl0.R@D@=@.0.Hм6/NX. 0.Pм/~/NX`N^NuNV.N$=@JnlB`0.Pм/~`N^NuNVBn`v0.Hм6 @Jgh0.Hм6.?< N$T> ?<N$T0.Pм/~.?< N$T.+n?< N$TRn nmN^Nu ((0(4(<(A(Hw\AUTO\STARTUP.INFresdesktophighmediumlow:::::::::::::::::::::::::::: :: Batch Startup (V1.1) :: :: by :: :: Murray Levine :: \desktop.infnone Startup file not found $endifelseifdisplay clearechoelseendifcpifcdsetcursorkeyclickrmmkdirrmdircatexitask Time to run the desktop... ->Program not found Execute (Y/N)? pq cp: can't open cp: can't create rm: Could not remove mkdir: Could not create directory rmdir: Directory not empty rmdir: Could not delete directory cursor: syntax error onoffdisplay: syntax error onoffkeyclick: syntax error onoffres: syntax error cat: can't open No such directory : No such drive cwd()thenif: syntax error ==<=>=!=<<=>===set: syntax error cwd$< (          &         $                                                                        0        $.>L  $         "    2  (   $        "        "(|$          "<  D": "   tcopy a:\bin\*.* d: copy a:\lib\*.a d: copy a:\lib\*.s d: copy a:\command.tos d: `8A&*O.|*m - ЭЭм// ??<JNA /<AatX MB"HB |@ 80<  fR`Jg R@R  nJgB`/ /<@?N BBBgNA"/0<NBNu#ANA/9ANuNVBBJlDRBJ lD RB0. -@0.2. An=@ .gDN^NuNVH?BCB..,. f#A <`hlDRCJlDRCn8fzB`0l :HGH`xe`Jge`|fD#A D`#A JLN^Nu o AdpNu#ABNuNVJy96lB@`pN^NuNVN5NмAN^NuNV .a m .z n . H|`. HN^NuNVH*n` H>aRJf .JL N^NuNVH *n(n `Jf JL0N^NuNV`R n  g .N^NuNV>N4N^NuNVHag(<fp` `<f` <fp` a|fB@JLN^NuNVH. H>N4aJLN^NuNVH*n` H>N4JfJL N^NuNV.aafN^NuNV.aJ@gp`aB@N^NuNV.9aN^NuNVHagHJLN^NuNVHa>aJHJLN^NuNVH *n(n JUgSUS.9a>JL0N^NuNVBn-n` . m .m.H` nBB@`.Q/UaX` nB nN.a`-nBn nN`l`.Q/UaTXJnf`TJnf4.9/.N8X.9N8=@HЮ-@.an``H |:VrW hN`&0.n l.H"n>N4RRna@| f nB./<9N8X0.N^NuNVH*n Jl- .D-@~ `/< /NP.o`H992f.RH992f 92`H>a|=@f./ aX(@`<Af(. n0H/ahX./ aX(@`<CfBW/ N6bX`RJf`<DfN5NмA`<Ef$.0y9:/aX./ a>X(@`Z<Pf.9=/ a&X(@`B<1m4<9n.Sn0."n2Al n2n./ aX(@`92R`JfB .JL0N^NuNVa:J@gN*.a`aaJ@gN J@g Sy94p``B@N^NuNVB. /&N8X-n./.aX`BW?.$/.N6@\Bn"A-H`dR./<?.$N5\gJn"f>$N5p```0`& n g$ n  g n  gRRn" n"m>$N5 .fp` nB././/aX .aJ@gp`D.&/aXJy94g Sy94p`BW/&N5X=@$lpN^NuNVnNJ@gp`j|v-y9BA#9`4N*.*?</vaV\a./vaVXJy94g#9Sy94B@N^NuNV H .м,-@ .9=/<9 n /N PB.&Bn nfF.:NJ@f(Sy96.&/<:aXJy94f\Ry96.&a`H=|$`0n$ *P`RJf Rn$0.S@n$n.& n /(alXJL N^NuNVH (n`N*n `(<am<zn H|`HHAfRRJfJf./.N8X`RJfRJfJL0N^NuNV./. /.N8P/N8:XN^NuNVBW/.N5X=@lp`` >N5B@N^NuNVH*n n (:g N:` n R n ;g n Jf -:g -\g\././ aJP .JL N^NuNV././. /.av .a/.N6X=@`Bn`A-H`R nJg n .f0. @"|:./.N8dXJ@fD0.м: @ hfJnf&0. @"|:00=@nl=n`Rn nmlN6=@JngR0.`P-|:=|`Z-|:=|`J-|:=|`:-|:=|`*-|:Bn``|g|g|g|g`././. /.a( 0.N^NuNV n (:fJnf .:/. /.aP.aJ@gx.:/. /.a|P.aJ@gT.:/. /.a^P.a|J@g6.:/. /.a@P.a^J@g.:/. /.a"PB@`p`p`Z`X-n`2>/. /./.a =@g0.`*.a-@ nJf.:/. /.aPB@N^NuNV-n `R nJf` n \g n .gS . fJnfD./<:N8dXJ@f..; /./. /.aj J@gp`B@``./<:N8dXJ@g,./<:N8dXJ@g./<:N8dXJ@f*.; /./. /.a J@gp`B@``>/./. /.a N^NuNVH*n \fJ-g -:fJ-g -\fJ-gB@`pJL N^NuNV.;6/. /.N8P/N8:XN^NuNVH*n` *g ?fp` `RJfB@JL N^NuNV.=QN:N^NuNV>N4Jy;:g>v`>wN4B@N^NuNVN<}NTa.N5Hr4.aHgB@`"` >N5H <.adp`l-|;<`T. n/N8dXJ@f:-n /.//. NX/NP/ n hNPp`P n P  fB@JLN^NuNV.N.=NJn g.;`.;N:N^NuNV nJPfp` n hH|=@`SnpH>NJnfB@N^NuNVB@N^NuNVH n Pg.=N:`L n*h.NJ@g.=N(.N:`" n. / N6XJg .=N:B@JL N^NuNVH*n./<;6N8dXJ@f.=a J@fB@`<.NJ@g.=N.N:``.aJ@g .NJ@gB@JL N^NuNV. /./<aPN^NuNV.a.N5V> /.N6XJgB@`pN^NuNV.?</.a\J@g(.N(J@f.>N(J@fB@`p`b``Jn g".>N(J@f.N(J@gp`8NT.N5Jg".>N.NNTp``B@N^NuNVBW/.aLXN^NuNV. /./<>aPN^NuNV0.|A<>RW/N6bX.>.N.E`.N:N^NuNVN5N>aN^NuNV n (:fh nJ(f nH>Wad`t`DN5N=@ nH>aJ@gp`P.TN5=@>N5HJnfB@`,`.N5JfB@`.N.>GNpN^NuNV nJPfa:``. /./<aPN^NuNV.N5Jg.N5JfB@` `.>[N.NNTpN^NuNV. /./<aDPN^NuNVH./.N8dX>. /<>jN8dXJ@fJGgB@`p`L`J. /<>lN8dXJ@fJGmB@`p`(`&. /<>nN8dXJ@fJGnB@`p``B@JLN^NuNVJng0. ` Jn gB@`pJ@g*.N. n2n /0NX``B@N^NuNV n ./<>pN8dXJ@f:./. ?< n /( NXJ@fBg`?<?.ad `N`L n PlB@`>./. ?< n /( n /( n /(a ??.a N^NuNVH n PlB@`v n./<>wN8dXJ@fHBG`0G2GRI!iRG|m n0"nSQ. /.Bga\``. /.?<a\JLN^NuNVH nJPg~ n !|.: n/(/. NP.N n Pf n Bh`8BG n*h n (h`RGݾ|m.  n /(NXB@JL0N^NuNV nJPfp` n hH|=@`8Sn n Jhg0. N.  n /(NXJnfB@N^NuNVH*y90<``.{N 90NNT*U 99W`BW/. N5XN^NuNV n<./<N ..N.>N.N.>N.N.>N.N.>N:N^NuNV nJPfN<.A#9 n*h`d(M`RJg !fJgB@`p=@B.Nl*@.N J@f2. / NXJy94gSy94`Jng ` R*@Jf#9B@JL0N^NuNVH BGaJ@f.>N:J@gp`f-|;<`D(|<` Jf(|<`Jf.N@|Yg .Nf.H>N4NT .YgB@`pN^NuNVaV.N@|0m. .9n&.H|394.H>N4`` .Am* .Zn".H|394.H>N4`h`b . g^ .fRNT-y9-|? A#9ab#9Jy94gSy94fNTax.Ry94`B.? n/(N8dXJ@g n.N7y94`a` J@g|g`B@N^NuNVN>/<; a~XN^NuNVNJ@gB@``.N n.N:N^NuNVH n*h nJPf a`` n Pg.a``~./<;N8dXJ@fSy96``./<;N8dXJ@fRy96`D./<;N8dXJ@fBy96`(./<;N8dXJ@f 396` .a`B@JL N^NuNVH n*h nJPf$Jy98lBW`>/<;2aTX`x`r./<;N8dXJ@fSy98`T./<;N8dXJ@fRy98`8./<;N8dXJ@fBy98`./<;N8dXJ@f398B@JL N^NuNVH n*h nJPgn./<;N8dXJ@g./<;N8dXJ@fBy;:a`J`6./<;N8dXJ@g./<;N8dXJ@f3;:av`>;:/<;&a8XJL N^NuNV n Pf0 n-h n ;fR./<9=N8XB@`D`B.?N(J@f0J99=fB@`pHм9<.N(J@fNTJ@fB@`pN^NuNV.?"N:Nd|f n JgaB@N^NuNVHBD>. n ;fJygB@`p3`BW/.N5X=@l.?N5Jyg JEg nN80JLN^NuNVN5N4NN^NuNVH*n`H>aJ@gp`JfB@JL N^NuNVp H>aN^NuNV.?IaJ@fF.aJ@f<.?PaJ@f0.0n /NX.aJ@f.?iavJ@fB@`pN^NuNV n :fa`$.&/<&?<7/<&/.aN^NuNVBy. /./<'NaPN^NuNVNd|gB@`pN^NuNVB@N^NuNV n :f.?mN(`$.'/<'?</</.aTN^NuNVBy. /./<'a&PN^NuNVH *n(n `H>NJ@gp`JfB@JL0N^NuNVH*n >.<.N8Ȝ@`> NJ@gp`0SFJ@f./.aXJL N^NuNVH*n >.>/ //.NP/aPJL N^NuNVH *n >. n(P .f `H>NJ@gp`ZJg0SGJ@f`$`H>NJ@gp`:Jg .g0SGJ@f`> NJ@gp`0SGJ@f .fR n B@JL0N^NuNV>/. /Pa\PJ@f*?<. n NTJ@f>/. /Pa6PJ@fB@`pN^NuNV> /./.aPJ@f./<?qaJXJ@fB@`pN^NuNV?< nNTJ@f?< nNTJ@fB@`pN^NuNVH*nBG`RG | mBJL N^NuNV. gp\`. gp/`p N^NuNV n |fRp`B n (:f nH>N|Cf n (:gN5NfB@`p=@.avJ@g(.;6/./N8P/N8:X-@. /<?sa$XJ@f. /.aXJ@f . aJ@gp`BnBB.?</.a\J@g/</.NP-@Ѯ.H?aT? n NTJ@fh. /aXJ@fR.H|g?<+`?< n NTJ@f0.g. /<?aHX`. ?</.a\J@gp`RRn0.|fBn. aJ@gp``. /<?aXJ@gp`.N5V.aN6JgJng. axJ@gp`JJng./.aX. ?</.a\J@f. /<?ahXJ@f>/. /.aPJ@f. /<?a:XJ@fJng. ?</</././.NP/NP/NP/a~\J@fn. /<?aXJ@fZ. ?</</././.NP/NP/NP/a(\J@f. /<?aXJ@fB@`p`B@J@f. a0J@fB@`pN^NuNV./.aXN^NuNV nJPf .;6a`./<-a/.N6XJf.fB@`p``B@N^NuNVH*n.NLJ@gB@``.aJ@gB@`pJL N^NuNVH*n`RJf JL N^NuNVRH =|./N8X.a*@` мػ@SDg :g \f.?/ RN8X.NBW/. N5X>l .?N. NNT`BW/N5X<l.?N:`*<`ⅺg.N6(@ g`$./.?N6\g.?N`./?N5\-@nȺg.N6Jg.?N:`Bn>N5>N5.N./N6X0.JL0N^NuNVH*n `RJf` @SDg :g \fR.NLJ@g&././N8P/N8:X-@`@.apJ@g4./<?/./N8P/N8:P/N8:X-@. /.aXJL N^NuNV>/.NXJ@gp`..@/. /N8P/N8:X./.aXN^NuNVv./N8X.NLJ@g A-H`.a -@ n\R. /N8X.a-@` ."Ҽ@SDg n :g n \fR.zN5V>/. N6XJgB@`p=@`./.N8X./.N8X.g* ..g ./aXJ@gp`x`J.@N(J@f.N(J@gp`NNT./aXJ@gp`*.zN5VN6JgB@`p=@Jnf4N^NuNVH *n(n .NJ@g=|`l.NLJ@g./NX(@=|`D.aJ@g:.;6/<@/ /N8P/N8:P/N8:X(@=|Jng8.aJ@g .N(.@N(NTp`` ./ aX` ` ./ aXJL0N^NuNVHBG`&> n2G/0/.aPJ@gp`RGn mJLN^NuNVH n>|fBW n/( n/( aP`6|o$ n2GSI.?SW/.\an\`` .@3N:B@JLN^NuB@`0<?NATNu0<?/?NAXNu0<`0<`0<`0<`0<`0<`0< `0< `0< `0<2<??NMJNu0<2<`0<`0<`0< `0<`0<`t0<`^0</`f0<*`^0<+`b0<,`N0<-`R0<0`>NV?. /.?<1NANuNV?. /.?<6NAN^Nu0<9NV/.?NAN^Nu0<:`0<;`0<`0<?NV/./. ?.?NAN^Nu0<@`0<A`NV?<?./<?<BNAN^Nu0<BNV?.?. /.?NAN^Nu0<C`NV?. /.?<GNAN^NuNV/././. ?.?<KNAN^Nu0<M`,NV?. /.?<NNAN^Nu?<ONATNuNV/. /.Bg?<VNAN^Nu0<E`0<F`0<H`0<I`NV/. /./<JNAN^Nu0<L`NV/. /.?<WNAN^NuNV/. ?.?<NMN^Nu?<NNJ_Nu?<`?<`NV?./. /.?<NNN^NuNV?. ?.?<NNN^NuNV/./. /.?<NNN^NuRising Star Industries, Copyright (c) 1985NVH*nBGBF`RHHм@R @f +fR` -fRRF` H@| 0m 9oJFg0D@>0JL N^NuNVH *n (n`RJff .JL0N^NuNVH *n(n `op`lp`JgJfHHAJL0N^NuNVH *n (nf .JL0N^NuNVH *n(M`RJf HJL0N^NuNVN^NuRising Star Industries, Copyright (c) 1985CON:LST:AUX:%;PATH=:9  0BZAUTOEXEC.BAT*** GEM DesktopBatch file: Program: Cannot find .BAT.PRG.TOS.TTP::::.*ONOFFSETRESETECHOWRAPPATHLOG*.*<< <!<<4P<F<-<-; "<<F=!=6= ;2#N=-=R;,$=%,=.6='=%L=)V=-=0F=3:=9=?=D(;&$=IL=K"=M0=ORising Star Industries, Copyright (c) 1985eq{ }A: does not exist. A: is 0: A: A: Select item to continue execution: ?BELLBYECDCOPYDELDDIRENTERERAEXITGOTOIFLSMDPAUSEPDIRPRINTREMRENRDRMSTACKSHIFTSHOWTYPE;:! RSI Command Facility V1.01 9-20-85 WGWTerminate commandValid disk letters are A through P is REN needs 2 file names.Cannot find Rename failed.Erase all filesCannot erase: exists. Creating Cannot create Current directory for \ cannot be found. Cannot remove =<>EXISTSNOT*** ENTER <--- Current Environment KB free of blocks use bytes/sec sec/block*** ! CommandBuilt-in commands: (Y/N)? *** Query EXIT?PATH = Press any key to continueCannot open File: Page: K Search path: ---- |B total in files. B free B total$$$Cannot copy Cannot open destination fileWrite Error while copying file.\\*.*Copying \ must be a drive or subdirectory.COPY destination not specified!!!!".. vf $^&Db ".(<|* $ $ *:<,Rj "L0 &.(Dj. "   0 $P*B *d d` 2  BDB 2" > :.     " 6   2 @&(  J  JR <     $ 2 $     "(   $F   6   .  @  6 >0@$L* . XT$ lpXX.4 * 8  2b.      J  0 & ^:#a000000 #b000000 #c7770007000170070055200505552220770557075055507703111103 #d #E 9B 02 #W 00 00 0C 02 1D 15 08 A:\*.*@ #W 00 00 2C 02 1E 15 00 @ #W 00 00 0E 09 2A 0B 00 @ #W 00 00 0F 0A 2A 0B 00 @ #M 00 00 00 FF A FLOPPY DISK@ @ #M 00 01 00 FF B FLOPPY DISK@ @ #T 00 03 02 FF TRASH@ @ #F FF 04 @ *.*@ #D FF 01 @ *.*@ #G 03 FF *.APP@ @ #G 03 FF *.PRG@ @ #F 03 04 *.TOS@ @ #P 03 04 *.TTP@ @  Shareware C Compiler The file README.2 is the README file that was included in the original collection of files. All the files described within that file are within the folders stated. Current Notes has taken the liberty of adding several things to this disk. The additions are as follows: ETERNAL - the ETERNAL ramdisk without the source code included on several other Current Notes disks. PCOMMAND - a more powerful command line interpreter than COMMAND.TOS WITH documentation START1_1 - STARTUP a bootup utility to really make things easier. RTUP a bootup utility to really make things easier. This disk contains a limited shareware C compiler for your use and enjoyment. You should find a number of directories on this disk which contain the following files: bin cc.ttp - translates C code to intermediate code as.ttp - translates intermediate code to machine code hd.ttp - hex dump utility cat.ttp - file concatenation utility grep.ttp - utility to search for a string in a file ss.ttp - simple spreadsheet program ue.ttp - public domain microEmacs editor mkt.bat - batch program to compile "x.c" into "x.ttp" mkp.bat - batch program to compile "x.c" into "x.prg" obj.bat - batch program to compile "x.c" into "x.s" lib prg.s - startup intermediate code for .PRG programs ttp.s - startup intermediate code for .TTP programs lib.a - library used to create .TTP programs gem.a - library used to create .PRG programs lib.c - c code for lib.a gem.c - c code for gem.a stdio.h - standard i/o header gem.h - header for GEM AES routines src ss.c - source for a simple spreadsheet program cat.c - source the file concatenation program grep.c - source for the string search program hd.c - source for the hex dump program You will also find the following files in the root directory: rmd209.acc - public domain ramdisk accessory command.tos - public domain command line interpreter boot.bat - copy tools into the ramdisk The compiler (cc.ttp) is preprocessor, parser, and code generator all rolled into a single program. Please refer to the "C Programming Language" by K&R. The compiler has the following features, limitations, and shortcomings: features - symbol names can be any length - built-in "trap" generator "trap(NUM, arg1, arg2, ...)" limitations - Only globals can be (very carefully) initialized. No type checking is done between the initializing value and the type of the global being initialized. This is crude but it works. Accepted initializer values are (long or short) constant expressions, strings, and symbols. what's missing - type specifiers: float double auto static - goto and labels - preprocessor: #undef and the #if family - structure assignments The output of the compiler is ascii text and each line maps into a single instruction. This intermediate code is as terse as I can make it (to save disk space) but is still readable (by me at least). (I have plans to improve this to make things easier for an optimizer). The output of the compiler is always placed in a file called "yc.out" in the current directory. Any error messages are displayed on the screen. The assembler (as.ttp) reads the intermediate code in a single pass and keeps everything in memory before generating the file "ya.out" in the current directory. The size limit of the program to be compiled is basically the size of the available memory. The "ya.out" file should be renamed to one of the standard extensions (.TTP, .PRG, .TOS) before executing it. The command line of the assembler should always list a startup file first (see ttp.s or prg.s) then the intermediate files of the program, then "-L" followed by any libraries. Any errors encountered by the assembler terminates assembly. A "-M" argument to the assembler will generate an address map of all global symbols in the file "ya.map". A library is simply intermediate code, but is handled differently by the assembler than regular intermediate code. Intermediate code (the files before "-L") are read and processed directly; all symbols and code are accepted without question. A library is read without processing until a symbol is found that is needed but not defined. From that point on, the library is read and processed until the next symbol is encountered. At the next symbol, the "needed but not defined" test is applied again and processing or scanning continues as necessary. The libraries include TOS, VDI, and AES routines taken from the Abacus books. I plan to document the library routines later. I have also included basic routines. I have included the source for lib.a and gem.a (see lib.c and gem.c). A lot of library routines you would expect to see are missing, and for that I apologize. Creating .TTP programs is straightforward and better tested than .PRG (GEM) program creation. In a .TTP process, the main function is called with the standard arguments: main(argc, argv) int argc; char *argv[]; Redirection of input and output using >outfile, >>appendfile, or aF3 pN^NuNV>a*pN^NuNV3 3 >NN^Nu#NN/9Nu#NM/9Nu#NA/9Nu *4. (   $ `(^ .|CT?9C?9C?9C?< N%P3C|BWBg/<8C~?9??9??9??9C|N%P>C~?9??9??9??<$?<$09C~H?09?W09?H?09?WN# N^NuNV.Q/]/Y/U?< ?9C|N&@=n =n =n=n`=n=n=n=n./N'`XJ@g*>?.?.?.?<?./<-N$v.Q/]/Y/U?< ?9C|N&@JngJnfp3B~C:3BC<09B~yAS@3C>09By?S@3C@.C:?<?9?NXN^NuNVN .>n/<A/<B/<CzN$ 3?3pA yBoB=|`,0.м3 @0.м3 @Rn nmA3A3.8L?9CVN$TT3<.8\?9CVN$TT3A.CT/<C/<C/<C?<BgN&@3C|#.VA#.?#.?3BByCaJy?faaaa aaD>?NaaN^NuNV`\.CR/<?p/<CR/<CR/<?/<?Bg?N&.CR/<CR/<CR/<B?< ?9C|N&@.gaa409C|yBff>??9A?9B?9B~?<?</<-N$v>??9A?9B?9B~?<?</<-N$v`n yC|gd>0?90?9009BW?9009B~W?<aP>0?90?9009BW?9009B~W?<aP.gn09?`L09?yC|f >??9??9??9?BgaP`209?yC|fBWBgBgBg?< ?9C|N& `09?y?N3C|`09?yC|fa>C|N& >??9A?9B?9B~?9>n?9A09?H?09BW09AH?09B~WN#\>C|N&&>?N3C|`.09?yC|fp>??9??9??9??<?9C|N& .?/<A/<B/<B~?<?9C|N&@3B~-3B-`09?y?.?.?.?<$?<$BgBgBgN"f>?.?.?.?<$?<$BgBg?<N"f>?.?.?.?<Bg/<3N$vBW/<3N"DX|fLBn`60.P@м3 @( gB@`p"|A4nRn nmaa >?.?.?.?<$?<$BgBg?<N"f>?.?.?.?<$?<$BgBg?<N"f``||b@0@6* PN.g09C|yBfJyBg>??9??<Bg/<-N$ =@`..\/9A?<?<aPa *`../9??<?<aPa `r../9??< ?<aPa`P>b/<.\/9A?<Bg yAH?WN'X?a aByB`>b/<.\/9A?<?< yAH?WN(X?a| aZByB`>b/<./9??<Bg y?H?WN'X?a4 aByB`v>b/<./9??<?< y?H?WN(X?a aByB`,>b/<./9??<Bg y?H?WN'X?a aByB`>b/<./9??<?< y?H?WN(X?aX a6ByB`>>j/<1/<1?<+?<*?<(aH?RWaT`^.2/<2J?</?<.?<,aX H2>RW?9>hajT`"=|6`R0.м- @( g6>Bg?9??9A?9B?9B~Bg?./<-N$Rn n:o>?<?9??9A?9B?9B~Bg?./<-N$0.|3>b>?.WN""TByB`\BW?<?./<-N#PJ@g>/<-N"DX>Bg?9??9A?9B?9B~Bg?</<-N$>Bg?9??9A?9B?9B~Bg?</<-N$a*a a>??9A?9B?9B~?<?</<-N$v>??9A?9B?9B~?<?</<-N$v`L y>fa~>??9A?9B?9B~?<?<1/<-N$vByB` y>da6>??9A?9B?9B~?<?<3/<-N$vByB`BW?<?./<-N#PJ@g*a By2>??9A?9B?9