NNNNNN'0qp NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNN?O` /O`! #@%`')+-/1 3@5`79;=?A C@E`GIKOQ S@UWY[]_a c@e`gikmoq s@u`wy{} @` ` @ ` O` /O`! #@%`')+-/1 3@5`79;=?A C@E`GIKOQ S@UWY[]_a c@e`gikmoq s@u`wy{} @` ` @ ` EXPERT M_H"MIDI (WTERM 4MDCTRANDMACCNREADME OA66 LEES DITtQt H. ".. "EXPERT PRG$+BEISPIELEXP&(TIER_1 EXP'm`*Q` Efv*oM m HPHUBg?<JNA(m)m -:gS)@ -OK1PC#HNHx?<HNA@)@l/?<HNA)@h&@)@XЬl)@d)@`ARCpr Ѝ"QHNFALN|Hz2?< NA\pdAxr0XQ)K\NN6JJJPPPJrBjNuHz?<&NN\CAp$L Qp NNBlJpNNNpMNN9@pdAr 0Q0tr N9lNupealp`NuaNJHz?<&NNBWNANC2A@p222NrҌ0<NB0,rNurA9Ar`v C9Cr`rt9@9A9BNrrҌpsNB0,Nu9@N`rDҌpsNBNuC2 @ e @}bA@p222Nr,Ҍ0<NBNu Hn\ 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NpNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@N8?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</NJJFkSFk&aQNJ`Ha"FFaQL8N6.JgtBnNupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?N<JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dNAXJ@jNNuA C Hp` A C Hp?H, NA @e0<J@g @f ):f 0 *.*`QB FJhf N9|(`rONHl?<NA|Hh?<NA\NA\Jj @g @g ?N&0NTN&AE|CJWg *g|*fSJWg:p QA *aFJk|0 0*NR I 0*N~ I  CN?<ONAT`V'/ra H@HaHda H aNqJfJg0P H@HNuvN)@p `H@)@prtNAHplrtNB 2pNpNpapaprapalpalpalpaTpaTpaTBp'a?<NNT@B){L9|0<rtNpapap9@p`pvNv`v`vj`v `v`v`v`?Aa*` Al 2l 4)lVH)lRprtNAl 2l 4HVNu9Cp rtN"AHZNu"A)lVH)|vN`A)lV)lZHvN`@((?<NN.?<NNX@LvA HA HNupmrtA)HA)HNpNHHPN4 _:8><DbFEbGCHP@dʾAdBD2ƞE29|C???FF22N23BRG0@\@N"2)IN(* 9AJA)H@@[000][ˈN Evz`* [g" ]g |g QSz` zQSpQ][ɈN Dvx`* [g" ]g |g QSx` xQSpQ]Bp4NNHNur|<N @xepw2A$JBjDFHB t`0QBl9F)lVTAtp 9| N2(g"P@g2RADAH""l`r2oZAe 1@#)I`Nuk1@Nup NN"l`dpNAtrdJhk\QpaNH ld$l`"Hg: k&@0+R`g k#&@0+S@H3 Q&f)I`LNuApNpN4$N$BS@kH2QNupC ұd"X0Pg"RA$D#Nu"X0NuNJ@gpNu _0HpNp _0HpNpp"_0HqNp"_0HqNE ұeHHQ0)N$_$ZR@H`2QNu$Y0gHR@@"D%$X0P2g# R@%NupE $ $X0dP.gRG,D%pr Y2dP.gRG,D!p4Ae4v`VfANuNHWHNuNHVHNu Ihd"*N$E8*$R`"QˈN ENu2)A IJAfr4(Ae*RBBc0*SA?N$E$R`QˈN ENup`(* 0(iN$E 4R`Q$D 4R`QˈN DN ENua NuN IHPg"B  g &gNJBjt BNut`Rptr ae OgT Xgj HgSRB ae Fb$0k  c_  c b退`tSJBkNRB0 b b瀀`RB0 fрd`0H 0 0H@Nu"H2X@N>:0H@?N>:AAN<"H2@N>.0H@N>.YdNRGFc8>`4A g6 g0 g` gTlfelhgFf2pRGRFa`a,` `?~ap ap a 0NuCpE`bf`FgRGJGgRSGSFFgCpE`Yf`Nua@Jf gH@ fa(@ fza0 b @ Ee0Nu?<?<NMXNur9A(HNLNu0,^2,`N|zEfpaRppaNAEg0PaľEfa4RE`p a2a*Efp a(NbldeS@f lbfSl`9Ab9FdNupapqr`p`"p`tdbDA0Hg<<R@f|0HN*JFk*HQ/??<?NAXfX ENuJkpNp`p`\F( &I.` ??<NMXJ[j E&DNu<(`|HP?N<pg2JFg W"X2@e2<A`QNCpR@ 1 fA 0! "_Np`pNu)H9@Jp4NNP'J&f H LNu P&NuQ'` J,'fJ,&gHA#ȇeC! B,&LNu-W)K20, 8k8@ gJl&f"Nu , 8g"P 8 @/, 8N|  8fQ 8J,'gNupB <``L@ H)l26)z @W , Jf`CfSHj-D@Hd0H@H 0H@0`fSC\fS , @a"C]fApNNN8HP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Fehler # ][Abbruch]\f.B &lX)K\)ld` lp ,BQjNup(NX _b@gGHpp 0f NuGNp| @"l`Yd&-KNN"l`YepN&#k"C-KN"Cփk փk2##`փk"`2`$Y8gHRDD*D%H8#$c2g# HRDD%H`?<NNT$VHfN N HxN/Luft nur in hoher|oder mittlerer|Auflsung !!!HPNAbbruchr"_ NANN8 <CJNB>A!(N|A#>N|N8N8Npr2NNprN|pr2NNprNp < "<Npr2NNp rNpp"<NpNpNpNp NRprxNNN2DELMONICO Expertensystem V1.1 von N.NebelNFp"<NNNprN|p"<NNNprNp < "<Np"<NNNp rNpp"<NpNpNpNpNRpr\NNNLPublic Domain - vom Atari ST Userclub 'DELMONICO' - Info gegen Rckporto vonNFp&reNNNINiklas Nebel, Schlostrae 100, 2000 Hamburg 70 oder Tel. 040/652 55 61.4NFp+r NNp+"<uN(BgBg?<?<+A" NNprNzNN8NNNN01) Laden 2) Speichern 3) Dialog 0) Ende :ArNANlN\+@6Hmp0N`"_NfN$8NNNN Wirklich (j/n) ? hA$rNHm$pjN`"_NpJBgp/Hm$pJN`"_NpJBgp$VHfN$*N$8pxN`CN -6NzNpJBgp/ -6N&<x*<NpJBgp/Hmp0N`"_NpJBgp$VHgNN+|B -6~NZ&$'6 -6JWHgrNN8NNFilename ('$'-Directory) NzC*NHm*p$N`"_NfN%>NNN*.expNNNHm*p$N`"_NgHm*A "_NfN&NN Saving ...NpON`HPHm*N.exp"_N&r"_N@pN ->NzNpNp!N+|B ->ABN2pN -BCJNNNN``NqNqpNNN8NNFilename ('$'-Directory) 4NzC*NHm*p$N`"_NfN&pNNN*.expNNNHm*p$N`"_NgHm*A "_NfN'.NN Loading ...NpIN`HPHm*N.exp"_N&r"_N@pNNF+@>prNpC0N+|B ->ABN2pN/-BNzCJNN``NqNqpNNN8 ->$VHfN* -BCJNN \WHfN(VNpN -BCJNHPp"_NNN? -BCJNHPpr"_NNlN\+@FArNHmpjN`"_NpJBgp/HmpJN`"_NpJBgp$VHfN(@ -FNH <r$<L8NN\+@BA'6N|N(P+mFBA'6N|N*NNNNIst es 4 -BCJNNN? ArNHmpnN`"_NpJBgp/HmpNN`"_NpJBgp$VHfN*| <>Ѝ/p _ѐ/-> -BCJNCJNNNNNWas ist es dann ->NH <r$<L8NN\/NvCJNNNNN#Bitte eine Frage eingeben, die fr ->NH <r$<L8NN\CJNNN mit JA4NNNund fr ->CJNNN! mit NEIN beantwortet werden mu:NNNvCN/-Bp\N`HPN HP ->NNl"_N&HPp"_N"_N&HPA"_N&CJNN*NNOKNN*NNBitte Objekt eingeben: HxNvCJN+|>NN8 x r^HH"0 ~ 3 !\ 3Ist es gross Elefant Maus 7 !\ 3Ist es gross Elefant \ 5Ist es ein Haustier ? \ 7Macht das Tier Miau Miau ? Maus Katze Hund . ).. )MIDI DOC*+MIDI PRG-{MIDI RSC2:HK Send $20 to Geoff Waddington 58 Barrymore Rd. Scarborough, Ontario Canada M1J 1W3 Okay, first of all this looks horrendous in monochrome, if someone wants to fix it fine. I don't have a mono monitor so I couldn't make 2 resources. Most everything works "like you think it should" I hope. There's lots of error trapping(can't go into record if a track is not in record, can't play if there's nothing to play etc.) but here are some things to be careful of. Quantize is a one shot deal--once you've quantized you can't go back. If in record you can hit 0 then play and you'll hear back what you recorded(if of course you started at 0). If in record and you hit safe, play or solo for that track, your recording is saved. If you go out of record or go into record on another track the previous recording is NOT saved. While tape is "rolling" hitting the mouse over any of the markers enters the time there. If tape isn't "rolling" one click highlights, then the next marker hit receives that value. Double clicking on a marker allows numeric entry. It is quite forgiving, ddd30y3/56 gives 030:03:056 etc. Selected region in the dialog boxes means between the left and right locators. MIDI thru echoes on the channel being recorded on. Yes folks it does accept song position pointer(I think--don't have an SBX-80 to check it out). Space bar stops, Enter plays, 0 zeroes, and * records. Clicking on TEM decreases tempo, PO increases. Click on the number to enter a value. Same for CL and IK but you can't enter a value on 1/4 etc. Anything in the EDIT menu works between the left and right locators and the "tape counter", e.g. Copy-All traks FROM left marker TO right marker AT tape counter. Enjoy--Geoff Waddington ` ~*O.|*m - ЭЭм// ??<JNA N*/<NA"/0<NBNuNs |D00000 |"|Lp2Q#h"<F0<NB3l3n3p 3rz3t3v&3xH yr"P"(XJgP) b* e J)gv`v$|NtJ) v9gQXg"P!q !A y8296#@ (g ( @b #@#rQL>NsJgSNs/Jyxg*Jyvf3tv9gSyvJyf"3Jyg Jyf,RJ9>f 9@bSy NsRNs e fJ9gEp9g9HyDB`Jypg g g g fJyfJyf"3Jyg J9>f 9@by`J#33#63 y8296pg*!@!P #@ ( @b #@#rQ`33`33`Jyg,Jy,g$Jyg33pJy&ft yv"96g g g gf@ 2<?SA9A9gQP6Jy2g`@ 2<?SA9A9gQP6Jy2g`vJyf @`b g`~J9@gN ?A 9?g9gP6Jy2gNuHJ9Bg>49Dr#096 y8Jg r"Pc Pe` !A!q `!| Q096 y8#@"(g"( @b #@#rQ>B 9 6d2 yvXr9gQX6e# LNsNVBnBn`2 n2n `o n2n {l n2n Rn nmBn`Rn0n"nJ0g( nl n2n Am n2n Gn0n"n0H|=@ nl^nUn noSn0n"nJ0g nlRn n2n #fRn`Rn0n"nJ0g( nl n2n 0m n2n 9n0n"n0H| =@0.n"n2`Rn0n"nJ0g( nl n2n Am n2n Gn0n"n0H|=@ nl^nUn noSn0n"nJ0g nlRn n2n #fRn`Rn0n"nJ0g( nl n2n 0m n2n 9n0n"n0H| =@0.n"n 2N^NuNV yJyg 3`ByN^NuNVBn`Z0.м~ @!|0. @"|NC>NZRn n mNByB.?</.N'h\>/.N2XN^NuNVB6B 3By 3"By.By,N.?<(?<Bg?<N|fPN^NuNVB6B 33 By"By.By,N.?<x?<Bg?<N|fPN^NuNVBnBn`0. @"|N\0. @"|N0. @"|?<?<N|vX`Jyxg>?<?<N|vX.?9R?9PBg?<N|fPN^NuNVByBy By"By.By,>/.NX.BgBgBg?<N|fPJyxg>?<?<N|vXBn`80. @"|NCRn n m.?</.N'h\/<//.N)XN^NuNVBnBnBn`x0. @"|N=|0. @"|?<?<N|vX`Jyxg>?<?<N|vX.?9R?9PBg?<N|fPN^NuNVB6B 33 By"3.By,ByN.?<x?<Bg?<N|fPN^NuNVB6B 3By 3"By.By,N.x?<(?<Bg?<N|fPN^NuNV0.F@2. ҮҼ "AQN^NuNV0.2. ҮҼ "AQN^NuNV>?. /.a\N^NuNV>?. /.a\N^NuNV | 2. Ү00nfB@`pN^NuNV>?. /.a\N^NuNV>?. /.a6\pN^NuNV>?. /.a>\pN^NuNV.Bg/.a$\0. Юм @=P0.r@=@>?.?.?.?.?.Bg?. /.N&N^NuNV0. Юм @f> /.ajXN^NuNV0. Юм @g> /.a:XN^NuNV>/.aX>/.aX>/.azXN^NuNV>/.aX>/.aX>/.a|X>/.anXN^NuNV.T/.?. /.N n2. ҮҼ"A1Q n2. ҮҼ"A1QN^NuNV n fp`T0. Ю @=P ng6`=n 0. Ю @=P |2.Ү00n f0.N^NuNV.QBg/.a*\> /.azX=@0.ЮT @=P`*0.n g>/.aPX0.Ю @=P0.nf> /.aXN^NuNVBn n0( "n2) ΐAH=@.Q/]?<|/.N ./?<}/.N n| f.//Y/N 0.@nno nBh By4`0.@"n3@ 34 n> n?( n?( n?(?<?<|/.N=|` n{ f^0.noTSy40."ni n> n?( n?( n?(?<?<|/.N=|`H n~ fd0.@nnoTRy40."ni n> n?( n?( n?(?<?<|/.N=|` n} f.Y/U n?( n?( ?.?.?.?. n?( n?( N0.ng0.nH340.nH"n3@ n0( 2.nAg> n> n?( n?( n?(?<?<|/.N=|Jng0B?<NnT.NF.NGB?<NnTN^NuNVBnBnBnBn>N.////.N>?.?.?.?.?.?.?.BgNx>?.?.?.?<Bg/.N> /.NVX|=@>?.?.?.?.?.?.?.?<Nx>/.aX>N0.N^NuNV 9ށH@H=@Jng09n3`By3pN^NuNV n f y(JoSyJ` n f yJlRyJ0yJT3P0yJRHT3RJyg8Jy f0Jy"f(Jypf .?9R?9PBg?<N|fP>J/.N*XN^NuNV n fJy oSy ` n f y lRy 09 м @309  @"|.?</.N)\aN^NuNV 9ldf <\` <d#lB@=@>/9l?. /.N) yp.NHByBy By">/.NDXJ@g>/.N2X`N (N^NuNV=|>/. NX>/. N(X.N$3 ym y@n>/. NDXJ@g 3`:>/. NDXJ@g 3`>/. NDXJ@g3x093.?</.N'h\..?</.N'h\.(?</.N'h\=|`F0.|C=@0n"|Jg"0n"|.?./.N'h\Rn no=|`F0.|4=@0n"|2Jg"0n"|2.?./.N'h\Rn noa?<NT`0.м~ @!y60.м~ @!y60. @"|~./9v/96NP0.м~ @!|0.м< @Bh 0.м< @1|`0.м~ @Jg-yv n-P 9vй6Q-@ n-P././/?.N0. @"|~ 0й6".蒮쐁-@.Nz-@Jf.>?<NT`4-n0.м~ @-P-n././.NP-y6-yv .Ю-@././.NP0. @"|~ 0-@0. @"|~ 0Ю-@ .Юй6-@././.NP0. @"|~.Nz0.м~ @ 0.м~ @!n0.м~ @!|0.м< @Bh N^NuNV=| 9м 6n$Jyg.NH.?<NTJygJyg.NHByJyg"Jy g.?</.N'h\` 9ށH@Hl(Jyg Jy"f.?</.N'h\`> 9ށH@Hxl&JygJy"g.?</.N'h\Jy$gJy,g 9ް.m 9ް(o( y2Zf>/.NXByZ`RyZ 9ް.m&Jy(f>/.NXBy&3( 9ް(mJy*f3&3*`Jy0gJy.g 9ް(o#.Bn`b0. @"|NC0.м~ @2nv!Q>aRn n mN`D>/.NDXJ@f>/.NDXJ@gJf.N P.NHN^NuNVBn`Rn nHRJf0.N^NuNV n H"nR RJ@fN^NuNV`R nJf n H"nR RJ@fN^NuNVBnBn`$0. "n4nHA|=@Rn n2n 0m n2n 9o0.N^NuNVBnBnBnBnBBnBnBn`Rn0n"nJ0g( n l n2n 0m n2n 9n`"0. 2nHA|=@Rn0n"nJ0g0 n2n 0m n2n 9n n@RnDmJng$0y/0n/N~P29H-@`Rn0n"nJ0g( n l n2n 0m n2n 9n`"0. 2nHA|=@Rn0n"nJ0g0 n2n 0m n2n 9n n@RnDmJng$0y/0n/N~P29HѮ`Rn0n"nJ0g( n l n2n 0m n2n 9n`"0. 2nHA|=@Rn0n"nJ0g0 n2n 0m n2n 9n n@RnDm0.HѮ.?. /.a \ .N^NuNV09H//.N~PR=@=|`00.H H@|0"|,4n0.H =@SnJnl09H/ .H@H/N~PR=@=|`JJy"g |,2n0`0.H H@|0"|,4n0.H =@Sn nl .H@H=@=| `RJygJy f |,2n0`0.H H@|0"|,4n0.H =@Sn nlJyg n f.,?. /.a\`.,?. /.a(\N^NuNV0. Ю @-h n N^NuNV0. Ю @-h . n/a X.Q?. /.N\>?.?.?.?<?. /.NN^NuNV.Q?. /.N\.?.?.?9jN|\N^NuNV=|`00. H H@|0"|84n0. H =@ SnJnl.8?</.a\N^NuNV=|`00. H H@|0"|L4n0. H =@ SnJnl.L?</.a\N^NuNV=|`00.H H@|0"|4n0.H =@SnJnl.?. /.a\\.0. @"|D?9,?9n?9lBgNP3>D?9,?9n?9l?9NP.N=@Jnf8.^?<NT>NB>N\a$B@=@`p.:BgBgNX>/9:NX.R?<BgNX.p?<BgNX.?<BgNX.?<BgNX.J?<BgNX.?<BgNX.>?<BgNX.L?<BgNX.?< BgNX.?< BgNX.Y/U?<Bg?9jN~ ad.Nz#vJvf".>?<NTaaB@=@`$.2?< N|fTBBgNnTp=@N^NuNVBn`F ng ng ng nf>?<N|fT`>?<N|fTRn no-|B?< N|T-@ nV nB.?< N|T>"N|f-@ n#F n .J?<?<N|vX.?<B?<N|vX#".?<A?<N|vX#zN^NuNV-yRBnBn=|`fNL9g .N!t9g.N3=@9g> ?9?<Bg/.N` =@ nfBn`V0.Юм @g,>/.N7X9gJngxJngp09&|| g&>/<>?9&?./.N `8>/<>Bg?./.N >/.N_XBnBn`>&/.N:XJnfN^NuNVBW/9:NX.RNH>NB>N\aN^NuNVBn`F ng ng no n l>?<N|fT`>?<N|fTRn no-|B?< N|T-@ nV.?< N|T>"N|f-@ n F."?<B?<N|vX.z?<A?<N|vXN^NuNV>jN|NDN^NuNVB?<NnT>N.U/Y/]/Q?< ?. Nv`.Q/.aXJ@gZ0. yfN.D/<,/<n/<l/.N>?.?.?.?<Bg/.N.U/Y/]/Q?< ?. NvJngJnfd.NHBWNB?<NnTN^NuNV n 0"n 2)A"n2$n4*BAl n 0"n 2)A` n0"n2)A=@ n 0("n 2)A"n2)$n4*BAl n 0("n 2)A` n0("n2)A=@ n 0"n2Ao n 0` n0=@ n 0("n2)Ao n 0(` n0(=@ n 0 n 1n0.n"n 3@0.n"n 3@0.no 0.nnB@`pN^NuNV=|09`fJyf>?9/.a`\=@`>?9/9:N\`6Jyf.?9/.aV\`By`` | g|g0.N^NuNV=|0. `<0.`BW/9pNX``| g0.`0.Nk`6Ns8`.BW/9NX=@Sn``|gʰ|gа|g0.`P.?</.N)\.N3zBy$By0`0.?</.N)\.N3zBy$By0`.?</.N)\.N3zBy$By0`.?</.N)\.N3zBy$By0`. ?</.N)\.N3zBy$By0`P.?</.N)\.N3zBy$By0``||b@0@$ PN0.`.NHV`.NJ`.NN`.?</.N)\.N3zBy0`.?</.N)\.N3zBy$`fp=@>/9>/9/.N]^ `@B@=@>/9>/9/.N]^ ``|!|b@0@@ PN0.`DNA`T.J/.N0X`@BW/9NX`..L/.N@rX``|+g|,g̰|-g|.g`W@|b@0@d PN>?9/9:N\0.N^NuNV0. ЮP @=P0.|=@0.|@=@0. Юм @=PJnfJng^JngJ.g> /.NX`00.r@=@0.r@>?.?. /.NPJ@g n m ni n> /.N;FX`d n{ m n~ n> /.NX`B n g n f> /.NX` n g n f> /.NVX0. `hJyf"> /9>/9/.NRR `> /.N2X`B> /.NX`..N P` y`JypfJyg> /.NX``N (`Jypg .NH`N `Jypg .NH`N P`.N J@gN `.NH`.ND=@Jng >N``Jypg .NH`.N J@gN`6Jypg .NH`NL``||b@0@x PNN^NuNVBnn 0. `t.N P`.N J@g>/.NXN `X.NH`L.ND=@Jng>/.NX>N``| g| g|*g|0gvN^NuNV n m n n~0. y4[@=@> /.NDXJ@g,> W"/.NX0.м< @1|`(> W"/.N2X0.м< @Bh` n m n% n0. y4|=@0. @"|N\> /.NDXJ@g.0. @"| /.NDXJ@f6B6B 0.м< @Bh Jy,g .NH`Jyg> /.N2X`0. @"|N\> /.NDXJ@g00. @"|a,B?<NnT.a@B?<NnT` nZ m~ ni nt0. y4|=@0. @"|N\> /.NDXJ@g0. @"|a0.м< @BhRn n mr`TBn`F0. @"|/. NDXJ@g 3`By>/. NDXJ@g 3x`>/. NDXJ@gByx> /. NDXJ@gTBn`D>W?<?<N|vX>z?<?<N|vX>?<?<N|vXRn nm`d> /. NDXJ@gPBn`B>W?<?<N|vX>z?<?<N|vXBW?<?<N|vXRn nm>/. NDXJ@g 32`>/. NDXJ@gBy2N^NuNV=|=|=|=|=|@=|{=|@BnBn`Bn`>0.W?.?<N|vX>?.?<N|vX>?.?<N|vX>0.W?.?<N|vX>?.?<N|vX>?.?<N|vXRn nmpRn nmZ=|`>?.?<N|vX>?.?<N|vX>?.?<N|vX>?.?<N|vX>?.?<N|vX>?.?<N|vX>?.?<N|vX>?.?<N|vX>?.?<N|vXRn no@=|`@>?.?<N|vX>?.?<N|vX>?.?<N|vXRn noN^NuNV=|=|=|=|=|=|=|@=|{=|@Bn-|N=n0.@=@Bn`0n"n4nJ0g n2n2nB>0.W?.?<N|vX>?.?<N|vX>?.?<N|vX>0.W?.?<N|vX>?.?<N|vX>?.?<N|vXRn nmH>0.W?.?<N|vX>?.?<N|vX>?.?<N|vX>0.W?.?<N|vX>?.?<N|vX>?.?<N|vX>0.W?.?<N|vX>?.?<N|vX>?.?<N|vX>0.W?.?<N|vX>?.?<N|vX>?.?<N|vXN^NuNVBn`0.y4=@0. @"|<.?.ZW/.N)\0. @"|<.?.W'/.N)\0. @"|ZW/.NX>W'/.NX`&>ZW/.N2X>W'/.N2X0. @"|<.?.Wk/.N)\Rn nm N^NuNVBn`*0.y4=@0. @"|W/.NX`>W/.N2X0. @"|W8/.NX`>W8/.N2X0. @"|WI/.NX`>WI/.N2X0. @"|WZ/.NX`>WZ/.N2XRn nmN^NuNVBW/.NX|f>/.NX>/.NX> /.NX>/.NX>/.NX> /.NX=| `>/.NXRn no>/.NX`>/.NDXJ@g=|`Bn>/.NDXJ@g=|`Bn> /.NDXJ@g=|`BnBn`:>W /.NDXJ@g0n"=P0.H=@Rn noBn`0. @"|~Jg>/.NDXJ@f0. @"| /.NDXJ@g\ 9.(lN.(/9./Q/Y?.N .-@0. @"|~ 0Ю-@`*0.м~ @-h0.м~ @-P 9.(l(./.?.?.?.?.?.NRn n mN^NuNV>/.NX|g>/.N(X-@.//NPJnm nnJnm nn0.n@Bn`0. @"|~Jg>/.NDXJ@f0. @"|/.NDXJ@g 9.(l.(/9./Q/Y?.N .Z=@`~0. @"|~ 02.HЁ-@ nP. .g .f: n(H.HA@J.m .o.|?<NT`Pn0.H".mv`B0.м~ @-h .Z=@`~0. @"|~ 02.HЁ-@ nP. .g .f: n(H.HA@J.m .o.|?<NT`Pn0.H".mvRn n mBn`0. @"|~Jg>/.NDXJ@f0. @"|/.NDXJ@g 9.(l.(/9./Q/Y?.N .Z=@`\0. @"|~ 02.HЁ-@ nP. .g .f n(H.HA"n@Pn0.H".m`B0.м~ @-h .Z=@`\0. @"|~ 02.HЁ-@ nP. .g .f n(H.HA"n@Pn0.H".mRn n m\N^NuNV>/.NX| g:>/.N(X-@.N$=@>/.NDXJ@gJnm nn>/.NDXJ@fJnm nn0.@Bn`0. @"|~Jg>/.NDXJ@f0. @"| /.NDXJ@g> 9.(l..(/9./Q/Y?.N .Z=@`0. @"|~ 02.HЁ-@ nP. .f> /.NDXJ@g nHT@no nn>/.NDXJ@g nHT@nl nn>/.NDXJ@g: n(H|2Hd@ .o n|` nnPn0.H".m ` B0.м~ @-h .Z=@`0. @"|~ 02.HЁ-@ nP. .f> /.NDXJ@g nHT@no nn>/.NDXJ@g nHT@nl nn>/.NDXJ@g: n(H|2Hd@ .o n|` nnPn0.H".m Rn n m@N^NuNV yzf>/.aX` yzf>/.a X`~ yzg yzfl>/. NDXJ@f(>/. NDXJ@g0BW/.NX|f>/./. /.aJ `>/.N2X` yzg yzfl> /. NDXJ@f(> /. NDXJ@g0BW/.NX|f>/./. /.a `>/.N2X`~ yzg yzfh> /. NDXJ@f(>/. NDXJ@g0BW/.NX|f>/./. /.a `>/.N2XN^NuNV> /.NDXJ@f.NBy$`0Bn`"0. @"| /.N2XN^NuNV> /.NDXJ@f.NBy0`XBn`J0. @"|~Jg030../]?.NR\0nv Rn n mJy0g .Nb`> /.N2XN^NuNV.NbBn`0. @"|~Jg0. @"| .-@0. @"|~ 0Ю-@ .Ю-@././.NP 9.-@././.NP .-@0. @"|~ 0Ю-@ .ЮЮ-@././.NP 9(.-@././.NP0. @"|~ 0-@0. @"|~ 0Ю-@ .Ю-@././.NP`< .ꐮ-@0. @"|~ 0Ю-@ .Ю-@././.NP 9(.-@././.NP .-@0. @"|~ 0Ю-@ .Ю".-@././.NP 9ސ(-@././.NP0. @"|~ 0-@0. @"|~ 0Ю-@ .Ю-@././.NP0. @"|~.Nz0.м~ @ 0.м~ @!nRn n m.NN^NuNV.NbBn`F0. @"|~Jg*0. @"|/. NDXJ@f,>/. NDXJ@g>BW/.NX|f(Bn`0. @"|~Jg0. @"|/<>Bg?./.N >/<>Bg?. /.N =n `*Jyg> /.NfX`> /.NcX`LJng >/<>Bg?./.N >/<>Bg?. /.N =n 0.N^NuNV n' mL n6 nD0. y4|=@> /.N(X.0. @"| /.N(X.N$S@=@JnlBn` no=|>?.RW?. /.N*lP0.H2.Ҽ<"A@>N` n f> /.N(X.N$3J y(Jl3(J yJo3J0yJT3P0yJRHT3RJyg8Jy f0Jy"f(Jypf .?9R?9PBg?<N|fP>J/.N*X`@ n f,> /.N(X.?. /.N$\#` n f,> /.N(X.?. /.N$\#.` n f,> /.N(X.?. /.N$\#(` n mJ n nB0. |C=@> /.N(X.?. /.N$\/0n `P n mH n n@0. |4=@> /.N(X.?. /.N$\/0n2 N^NuNV n g n f>/.NDXJ@f> /.NX> /.NDXJ@g n f.?. /.a\J@g` n f..?. /.a\J@g` n f.(?. /.ax\J@g`j n m. n n&0. |C@Hм.?. /.a>\J@g`2 n m* n n"0. |4@Hм2.?. /.a\J@N^NuNVBn=|>/.NDXJ@gR n gJ n n.?. /.N'h\> /.N2X>/.N2X=|`>/.NDXJ@gb n gZJy$fRJy0fJ n . n.?. /.N'h\> /.N2X>/.N2X=|`>/.NDXJ@gb n gZJy$fRJy0fJ n ( n.?. /.N'h\> /.N2X>/.N2X=|`Bn`0.|=@0.|=@>/.NDXJ@g\0. ngR n2n n.?. /.N'h\> /.N2X>/.N2X=|`n>/.NDXJ@gZ0. ngP n2n2 n.?. /.N'h\> /.N2X>/.N2X=|Rn nm0.N^NuNV=| n fJJy g #.` 9ށH@H/ 9ސ#...?. /.N'h\ n fJJy g #(` 9ށH@H/ 9ސ#(.(?. /.N'h\ n m n nx0. |C=@Jy g0n `, 9ށH@H/ 9ސ/0n 0n"|.?. /.N'h\ n m n nx0. |4=@Jy g0n2 `, 9ށH@H/ 9ސ/0n2 0n"|2.?. /.N'h\N^NuNVBW/.?<=N|\-@Jm .` .>aNJ@fp``pN^NuNVBW/.?<aJ@fp``pN^NuNVBBgNnT non0.D@=@>N=@0.N^NuNVB.B. n Jg".///. a J.f./aX.U//NXPJngt./. N$HXBn`Rn0n"n J0g n 2n *f0n B(./. N$jX./. N$jXp``B@N^NuNV.N$"=@` n2n \g n2n :g 0.SnJ@f nf./.N$HX` .2.HЁ.R/.N$HX-n-n Bn` n"nRR0.2.RAA@RnDm. . 2.HЁ/RN$HX./. N$jXN^NuNV>N|=@0.|A"n n|:BW/.T?<GN|\.N$"|o./.N$jX` nB(./.N$jX. /.N$jXN^NuNV./. N$HX. N$"=@S@=@`SnJng n 2n .fJnf0n=H ..Rn0.HЮ /N$HXN^NuNV./<aXJ@g&3B?<NnT>N.D/<,/<n/<l/.N>?9?9?9?<Bg/.N.a=@JnlBWNB?<NnT`Bn`40. @"|J/9RN*X-|-| ./.?.?<?N|P09 м @309  @"|.?</.N)\N-|-|../.?.?<?N|P..?</.N'h\-|-|(./.?.?<?N|P.(?</.N'h\-|-|./.?.?<?N|P.?</.N'h\Bn`.-| >W/.N(X-@./.?.?<?N|P.?.W/.N)\-|0.@Hм-@./.?.?<?N|P0n"|Jg&0n"|.?.W/.N'h\-|0.@Hм2-@./.?.?<?N|P0n"|2Jg&0n"|2.?.W/.N'h\Rn nmBn`*-|0.м<\-@./.?.?<?N|P-|0.м< @-h./.?.?<?N|P0.м< @Bh -|0.м<м-@./.?.?<?N|P-|0.м< @-h./.?.?<?N|P-|0.м<м-@./.?.?<?N|PRn n mBn`0. @"|?<NTBn`D0.м< @Bh0.м< @Bh0.м~ @!|Rn n m`P0.м~ @-h0.м~ @-P./.?.?<?N|PRn n m>?<>N|T.NF.NGBWNB?<NnTN^NuNV-yR./<aXJ@g.a<=@-|-|J./.?.?<@N|P-|-| ./.?.?<@N|P-|-|../.?.?<@N|P-|-|(./.?.?<@N|P-|-|./.?.?<@N|PBn`-| >W/.N(X-@./.?.?<@N|P-|0.@Hм-@./.?.?<@N|P-|0.@Hм2-@./.?.?<@N|PRn nmXBn`-|0.м<\-@./.?.?<@N|P-|0.м< @-h./.?.?<@N|P-|0.м<м-@./.?.?<@N|P-|0.м< @-h./.?.?<@N|P-|0.м<м-@./.?.?<@N|PRn n mBn`80. @"|?<>N|TN^NuNV-|` n-P nJf .м#-@.?<HN|T/ n fB` n-P n .м -@ .м"n#@ n!| n .X"n#@ n!| .Ю"n#@ n!n .N^NuNVJg n-hg n hUgp` .Ю -@ n ( "n#@ n!n n"n!i n1|U n!n -n n ( Ю-@"n")d n!n.aB@N^NuNV n -h` n ( ".Ҽl n-PJfJgJ.aL n!n  n1|U n ( o./.aX .N^NuNV n h"n g n P"n!iN^NuNVBn-|`T n-hgB nJf8 n ( Ю"n")f n"n .?<IN|TRn`-n n-Pf0.N^NuNVH..Rμ*y`./aX-@g .`>*U faNo.`.a*@ g./avX-@g .`BJL N^NuNVJg n-hg n hUgp``4 n hJf0 n"n"i ( ѩ n-h.a nJf`, n!n nJf4 n"n ( ѩ .aJ n ( Ю-@"n")e .X-@` n-P nJf n  n n!n n!|B@N^NuNVJg n hUgB` . м-@ n ( o./.aPX .`d. a-@gT n ( м-@-n-n` n"nRR .SJf.a@ .`BN^Nu#NN/9Nu#NM/9Nu#NA/9NuNV3ePByRByV3\N~pN^NuNV3 r3 tBn nH|2n2RRnJ@f3P3RSn3V3\N~pN^NuNV## .мZ#3dPByR3 V n 3\N~p n 0\###v#rN^NuNV##r# . мZ#3 3fPByR3V3\N~p##vN^NuNV3 3 3'PByR3V3\N~p n0 n0N^Nu#P"<psNBNuNVBBJlDRBJ lD RB0. -@0.2. An=@ .gDN^NuNVH?BCB..,. f# <`hlDRCJlDRCn8fzB`0l :HGH`xe`Jge`|fD# D`# JLN^NuNV3D0.|Hм-@=|` nH2nD2RRn nm.N>B@09lN^NuNV#D##L #l#h#N#> aF3lJpN^NuNV>a*pN^NuNV#h3 L>2NxN^NuNV3L3 N3 P3R3T3V3X3Z3\>3NxN^NuNV3L# h>4NxN^NuNV3L>5NxN^NuNV#h>6Nx n 0n n0p n0r n0tB@09lN^NuNV#h# l>ZNx n0nB@09lN^NuNV3L3 N3 P3R3T3V3X3Z>GNx n0n n0pB@09lN^NuNV#h3 N3P3R>KNxN^NuNV>MNx n0n n 0p n0r n0tB@09lN^NuNV3L# h>NNxN^NuNV>ONx n0n n 0p n0r n0tN^NuNV#h3 L>NxN^NuNV#h3 L3N>!NxN^NuNV#h3 L3N3P3R3T3V>*NxN^NuNV#h3 L3N3P3R>+NxN^NuNV#h3 L>,Nx n0n n0pB@09lN^NuNV#h3 L3N n3P3R>.Nx n0nB@09lN^NuNV#h3 L3N3P3R3T3V3X3Z>/NxN^NuNV#h>nNxN^NuNV3L3 N>pNx n NB@09lN^NuNV3L3 N3 P3R3T>dNxN^NuNV3L3 N3 P3R3T>eNxN^NuNV3L>fNxN^NuNV3L>gNxN^NuNV3L3 N>hNx n 0n n0p n0r n0tB@09lN^NuNV3L>kNxN^Nu DLlhN[1][ | |Can't Find MIDI.RSC][Not Good]3SNGPUNCH LOOP MOVE-All Traks MOVE-Sel Traks DEL-All Traks DEL-Sel Traks COPY-All Traks COPY-Sel Traks 000:00:0000000[1][ | |Out of Memory][0K]EXTCLOKINTCLOKdx[1][ | |Out of MIDI Range][Try Different Amount]01[1][ | |Record Buffer Full][Keep Now]<CJ@QhX_fmxtP@xP<(; x000xumkCfdb`^vtYpnjhPecLKJ].-YXWUTS@JEB1;5) &vu%q$omji!fecba`_^][Z~{~  #&58;JMP_betwz "147FIL[^apsv 1/4. 1/4 1/4 T 1/8. 1/8 1/8 T 1/16. 1/16 1/16 T01VERY long NAME0102 0103 0104 0105 0106 0107 0108 0109 0110 0111 0112 0113 0114 0115 0116 0117 0118 0119 0120 0121 0122 0123 0124 0125 0126 0127 0128 0129 0130 0131 0132 01MIDI.RSC45"566P5Z56X6h6x7P667P674z446P7P9:::::9~9\9p:9:999:::<:f\*.\*.. BL@  2F , *       .     > $v  &*     ** 2    \h$2$2(>.>X&` $*.&4         $0 (08  0                && ","(l$ (&4&4&<                 D"    8"  >"  & &$ T 8 .                    2|,&"""        (  D($    $$(, "" ^:*VZ(*$ *6 " $* B $X 0&X @ "p$~"4 $6..j&6..r 2 2 2     ***2*"*4*     *2     " d2 $ 8     ..($$860  :""6  & & >8$t< H B.   V       $.  (    &  $.  (  6J:8    zf  $                           n~$                                $~=lo g= Desk File Edit Tracks Global About This Program --------------------123456 Load... ----------- Save... ----------- Quit... Move-All Tracks Move-Sel Tracks Copy-All Tracks Copy-Sel Tracks --------------------- Delete-All Tracks Delete-Sel Tracks Quantize... Transpose... Velocity... -------------------- Punch-In/Out Loop-Begin/End -------------------- Erase-All Tracks Erase-Sel Tracks All Notes Off Safety... Time Signature... MIDI... SEL SAFE NAME REC PLAY SOLO MIDI 01020304050607080910111213141516VERY LONG NAME______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX ______________XXXXXXXXXXXXXX01__XX01__XX01__XX01__XX01__XX01__XX01__XX01__XX01__XX01__XX01__XX01__XX01__XX01__XX01__XX01__XX1/4 KCLIKTEMPO 120___XXXMEM0000PUNCH 001:01:000__________XXXXXXXXXX001:01:000__________XXXXXXXXXXINTCLOK0001:01:000__________XXXXXXXXXXWAIT<<<PLAYSTOPRECORD>>>ABCDEFGHIJKLMNINTRO PRT1__________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX000:00:000__________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX000:00:000__________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXX __________XXXXXXXXXXQUITCANCELIs Your Work Saved ?ALL TRACKSSELECTED TRACKSQuantizeATTACKSCANCELRELEASESKEEP DURATIONSELECTED REGIONOK1/41/4 T1/81/8 T1/161/16 T1/321/32 TTime Signature 04__XX/4/8/16SafetyConfirm InsertYESNOConfirm DeleteYESNOConfirm CopyYESNOConfirm EraseYESNOOKAre You Sure ?NOYESSend $20 to:Geoff Waddington58 Barrymore Rd.Scarborough, Ont.CanadaM1J 1W3OKAfter-Touch FilterOFFONMIDI Clock SendOFFONLocal ControlOFFONMIDI ThruOFFON OK TransposeC#6>D#6_______XXXXXXXALL TRACKSSEL TRACKSSEL REGIONCANCELOKVelocity100___XXXALL TRACKSSEL TRACKSPERCENTMINIMUMMAXIMUMSEL REGIONCANCELOKx 0x0ax 0x0a~ d4 '6ETcr&5DSbq%4CRap  !$'*-0369<?BEHKNQTWZ]`cfilorux{~   !,7 ~      #.9 DOZ ep{       + 6 A L W b m x        ( 3 > I T _ j u        % 0 ; F Q \ g r }       " - 8 C N Y d o z    /37ZZ" $ + 2  9 B *P  K ` uwy{}        +A*!) "W#l$%&'() +.,-(.<* PO~&!&& 0 L h     ,Hd&%    !"#$%7'6()*+, -(.D/` 0| 1 23456$&@H8G9:;<=>?@ A B CDEFG7YIXJKLMNOPQ R S TUVWXHjZi[\]^_`ab c d efghiY{kz l\mxnopqrs  t< uX vtwxyzj|@$~}}@$|@ @$&((8'@@@@Tp"  @ B (GJLQV] _$&( bdfhjlnpr t v x z | 4 P l       0 L h        , H d         ( D ` |      $ @ \ x (     5    $ -% 5   %  < E  S  c  3 f j p  t z  & 1 ,   1 !                          ' #%&  * 7HYkr'z" }            '        %#   &   ; F    Q  Y a  i  t %{ l34<646889;\<4 !#&(+-025 7 :<? A!D"FI$"  E%DK&.'0(2)4*6+8 ,: -<.>/@0C1F2I3L4O5R!6U#7X&8[(9^+:a-;d0<g2=j5>m7?p:@s<Av?ByAC|DDF$IIFHGHEMJLKLIQNP,OPMRDSD  7  $  7 B M X %_   b @  w             % \ 5L57849:\:<DdE<     % !d5648,8::;\= DE % !66r689r;:;<=bEBF%S !6`678909;;<`=EFh  /06 06 L6 h6 6 6 6 6 6 6 ,6 H6 d6 6  D7=? @ A  A B (A DB `@ |A A ? @ A A BD%$H@h&&'P'(+9 ;. 5M.. 5WTERM ACC6NWTERMF ACC9VVWTERM C =lh>WTERMF C B|]WTERM DOCEWTERMF H GtWTERMF RSCJpWTERMF RSDK`<N NXK mNf]` m"m -So Q m -SBQ(m)MO*mNN*?<NH?<A?<NAX <B@SfLNuNVN9@9|2V9|2T9|R9|dPN HnNtX n(fN `N^NuNuNVBnBnN @f`2HlPHlRHlTHlVN?,P?,R?,T?,V?<?<8Bg?<N?,P?,R?,T?,V?,N HlBHlDHlFHlH?<?,N09lHL9lFJNx?<?<NpXHnHnHnHnHnHnBgBgHnBgBgBgBgBgBgBgBgBgBgBgBgBg?<0N|<=@HnHnHnHn?< ?,N0.lg. nf$ ng?<?<NX=|`40.lf( nf ng?<?<NXBn0.| g0.lf?<?<N>XJg?<?<N*X-@ f6 nf?<?<N:X=|`?<?<N"XBn !fNN9lHL9lFJ .??<NX?<NTJg@ nf6?<NT=@Hn?<N\?.N2THn?<N\0.|g0.`|g`N9lHL9lFJ``|g`|g`(BgBgBg?,?< ?,N N,`P`|(g`Hl?<N *\`.`|)g``"``|g`H?,NJT?,P?,R?,T?,V?<?<8Bg?<N 0?,N2T```|g`N``|g`HnHnHnHn?<BgN 0.nS@2.nSAAo0.nS@n=@0.nS@2.nSAAo0.nS@n=@HnHnHnHnN0.lVlL0.lTlJ9nV9nT9nR9nP?,P?,R?,T?,V?<?,N HlBHlDHlFHlH?<?,N ``|g`9nV9nT9nR9nPHlPHlRHlTHlVN?,P?,R?,T?,V?<?,N HlBHlDHlFHlH?<?,N 9lHL9lFJN````jN^NuNVBg?,NXHlN?<N \?<N THnHnHnHn?< ?,N .`X=n=n0.nS@=@0.nS@=@Hn?,NR\HnHnHnHn?< ?,N 0.g 0.fBgN 2THlN?<N \N^NuNVHnHnHnHn?< ?,N 0.lflHnHnHnHn?<?,N Z0.S@n0.S@nBg?,NXHn?<N |\Hn?,N|\Hn?<N `\N^NuNVHnHnHnHn n? n? n ? n??</?<N ``Rn0.HH@ @f`Rn0.HH@ @f/././. /.?.?.?.?.?</BgN N^NuNVHnHnHnHn?<?,N B0,Vnf0,Tnf0,Rnf0,PnfHnHnHnHn?<?,N ?,P?,R?,T?,V?.?.?.?.N9nV9nT9nR9nP?,P?,R?,T?,V?<?,N HlBHlDHlFHlH?<?,N r9lHL9lFJ`HnHnHnHn?<?,N B?.?.?.?.?,P?,R?,T?,VN9nV9nT9nR9nP?,P?,R?,T?,V?<?,N $ HlBHlDHlFHlH?<?,N9lHL9lFJN N^NuNVHnHnHnHn?<BgNHnHnHnHnNnQn?.?.?.?.?</N 9@ llHl@?<N\0<`"BgBgHlr?<?,NZ 0<`N^NuNV?<?<N XXBg?<N 0X-@A:  n n1|  n1| n1| nBh nBh?<?<N XN^NuNV l8f,Hl>Hl@HnHn?<?,N X9|8`BHl>Hl@HnHn?<N T @f 0< `0< ??,N Bl8N^NuNV n f00,Jl>2,FlBl>Ao N^`V0,>lJ`J n f 9lHL`6 nf?<?<?<N \` n f8?< NT?< NvT?< NlT?< NbT?< NXT` n fN9lHL9lFJ` ng nf20,LlHo"0,@lLHl?,J?,L?,N  `t0.@B.Hn?,J?,L?,N 0,@lL0,L2,HlDl@Ao29lHL0,Jl>2,FlBl>Ao N` 0,>lJN^NuNV0,FlB2,>RAA?0,HlDS@??,F?,H0,Fl>lB2,>RAA?0,HlDS@?0,Fl>??,HNJ=lH=lJ0,HlDS@=@0,Jl>=@Bg?,N vXHn?,N V\N^NuNV=n=n =n =n=n=n=n=nHnHnHn?<?,N 4N^Nu)It)Jp"/0<NB"lt$lpNu NV9n.0.| A" AA-H=|` nR2.A.H0Rn nm/,ʬN.X0,N^NuNVA.)HʰA)HʴA)HʸA)HʼA)HA)HAʰ)Hʬ?< NXT9lʪ0,ʪN^NuNV)n?<N6TN^NuNV9n9n 9n 9n9n9n9n9n9n9n9n9n9n 9n")n$9n(9n* ?<NT n,0 n00 n40 n80 n<0 n@00,N^NuNV9n)n ?<#NlTN^NuNV9n)n ?<4NNTN^NuNV9n9n 9n 9n9n9n9n9n?<IN TN^NuNV9n9n 9n 9n9n9n9n9n?<JNTN^NuNV?<MNT n0 n 0 n0 n00,N^NuNV9n)n ?<NNvTN^NuNV9n9n 9n 9n9n?<dNFTN^NuNV9n9n 9n 9n9n?<eNTN^NuNV9n?<fNTN^NuNV9n?<gNTN^NuNV9n9n ?<hNT n 0 n0 n0 n00,N^NuNV9n9n 9n 9n9n9n?<iNnTN^NuNV9n?<kNVTN^NuNV9n9n 9n 9n9n9n?<lN T n0 n0 n0 n 00,N^NuNV?.NT nn0<`?.?<>NPX9@Ĩg0<`0<N^NuNV?.?<LN*XN^NuNV/ A&H`0+ |g/ N*X A"Ҽm?.NT&_N^NuNV/ &n/ NDXJ@g0<`00+ |g /+NXBk ?+ N,TJ@g0<`0<&_N^NuNVH&n0+ |f0<`.0+ |gV0+ |f0<`v0+ |g?<B?+ NhP?/+?+ NHP @f0<`@k 0Hѫ`$ k o?<0+D@H/?+ NP'@&Bk0<LN^NuNV nl <`?.?./. ?<BN -@ m .`?<?.B?<BN| -@?<?.B?<BNb -@ nf .Ю -@ `$ nf .Ю -@ `0.g <`b . oHn . /?.?<@N Bg?./. ?<BN ]|9@Ĩg <` `BlĨ . N^NuNV/.?<IN\N^NuNVBn`&0.Ax0nf0.AxBPRn nLmN^NuNV?>.=|0Ax"HPgXHf0(>N^Nu)It)Jp)_lNM"lt$lp/,lNu)It)Jp)_lNN"lt$lp/,lNu)It)Jp)_lNA"lt$lp/,lNuNV .9@ .9@N^NuNV .9@ .9@N^Nu)It)JpHl)_XHlX" <sNB"lt$lpNuNV9n 9|kBl9|9nN n 0 n0 n0 n00,N^NuNV9n 9n 9|'Bl9|9nNd n0 n0N^NuNV9n 9|Bl9|9nN,0,N^NuNV)n\)nd .мZ)@h9|dBl9| n 9PN n 0A)H\A)HdA)HhA)H`N^NuNV9n 9n Bn nR2.RnA|0f9|9|Sn0.9@9nNfN^NuNV)n `9|r9|Bl9nN>A)H`N^NuNV9n /.NX/.NX)n `9|m9|9|9nNA)H`N^NuNV`4 nH| f?< ?<NfX nRH??<NNX0. Sn J@fN^NuNV` nRH??<N X0. Sn J@fN^NuNV` nRH??<NX0. Sn J@fN^NuNVH0&n $KA-H nf?./ N4\=n`L nf?./ N`\=n`. nf?./ Np\=n`-KBn?.NTJ@f`H| f |o@ H-@/./.?.?<@N 9@ĨHg0<`0,Ĩn/./<?.?<@N 9@Ĩ @g0<`tRnR -@`R ned` 6.ƼЃ$@ H-@/./.?.?<@N 9@ĨHg0<`0,ĨnBlĨ0.L N^Nu9|8C"2"2 2"2"2"22"2"2"22"2x9|Nu Window Term[1][Window Terminal| |by Matt Kimmel|1987][Okay][3][There are no more|windows available!][Sorry!] Window Term 1.0-S CON:AUX:PRT: `TN6N.N-"N/N.:N.N-N-|NSK mNf]` m"m -So Q m -SBQ(m)MO*mN0N*?<N(H?<A?<NAX <B@SfLNuNVN!9@/.NI /.N&vXHnHnHnHn?<BgN#0,Vnm0,V2.nAo9nV0,Tnm0,T2.nAo9nT0,VlR2.nAo0.nlVQ@9@R0,TlP2.nAo0.nlV9@PHlPHlRHlTHlVN XN l f?<N6T @g9| ?Hl@HnHn?, ?,NJX?<?,NJX?<?,NJX?<?,NIX?<?,N3nX)@ fHnNLX`N HnN:X n(fN `N^NuNuNVBnBnN 2 @f`HlPHlRHlTHlVN?,P?,R?,T?,V?<?<8Bg?<N ?,P?,R?,T?,V?,N HlBHlDHlFHlH?<?,N!:NF?<?<N4XHnHnHnHnHnHnBgBgHnBgBgBgBgBgBgBgBgBgBgBgBgBg?<0Nl<=@HnHnHnHn?< ?,N 0.lg. nf$ ng?<?<N4X=|`40.lf( nf ng?<?<N3XBn0.| g0.lf?<?<N3XJgd?<?<N3lX-@ f6 nf?<?<N3|X=|`?<?<N3dXBn .??<N3PX?<N3FTJg nf?<N3,T=@Hn?<N\0,"gb0,L2,@HA=@0,JS@=@=n0,Jl>R@=@?<?,NFXHn?<?,NHP?<?,NFX?.NT0,"gb0,L2,@HA=@0,JS@=@=n0,Jl>R@=@?<?,NFXHn?<?,NHP?<?,NFhXHn?<N\0.|g0.`|g`N9lHL9lFJ`x`|g`|g`(BgBgBg?.?< ?,N NJ`:`|(g`N `"`|)g``` `|g`H?,NT?,P?,R?,T?,V?<?<8Bg?<N?,NT```|g`NZ``|g`HnHnHnHn?<BgNn0.nS@2.nSAAo0.nS@n=@0.nS@2.nSAAo0.nS@n=@HnHnHnHnN0.lVlL0.lTlJ9nV9nT9nR9nP?,P?,R?,T?,V?<?,N HlBHlDHlFHlH?<?,N``|g`~9nV9nT9nR9nPHlPHlRHlTHlVNb?,P?,R?,T?,V?<?,Nl HlBHlDHlFHlH?<?,N N````N^NuNVHnHnHnHn?< ?,N0.lf N`Bg?,NDnXHn?<N\?<N THnHnHnHn?< ?,Nv`X=n=n0.nS@=@0.nS@=@Hn?,NE\HnHnHnHn?< ?,N0.g 0.fBgNzTHn?<NF\N^NuNVHnHnHnHn?< ?,N0.lfHnHnHnHn?<?,N0.S@n0.S@nBg?,NCBXHn?<N\Hn?,NDD\9lHL9lFJ0,"gT0,L2,@HA=@0,JS@=@=n0,Jl>R@=@?<?,NAXHn?<?,NCRPHn?<NB\N^NuNVHnHnHnHn n? n? n ? n??</?<NB`Rn0.HH@ @f`Rn0.HH@ @f/././. /.?.?.?.?.?</BgNN^NuNVHnHnHnHn?<?,N$0,Vnf0,Tnf0,Rnf0,PnfHnHnHnHn?<?,N?,P?,R?,T?,V?.?.?.?.N9nV9nT9nR9nP?,P?,R?,T?,V?<?,N HlBHlDHlFHlH?<?,NT9lHL9lFJ`HnHnHnHn?<?,N$?.?.?.?.?,P?,R?,T?,VN9nV9nT9nR9nP?,P?,R?,T?,V?<?,N HlBHlDHlFHlH?<?,N9lHL9lFJNN^NuNVHnHnHnHn?<BgNnHnHnHnHnNnQn?.?.?.?.?</N 9@ llHlT?<NV\0<`"BgBgHl?<?,N< 0<`N^NuNV?<?<N*fXBg?<N*>X-@ n  n1l0,H n1@ 0,H n1@ nBh nBh?<?<N)XN^NuNVBn`^0. l2 hg0. l2 hf*0. l2h 0. l2h Rn n oBn`F0. l. hf*0. l.h 0. l.h Rn no l(f"Bg?<BgBgBgBgBg?</,2N l(f"Bg?<BgBgBgBgBg?</,2N l(f"Bg?<BgBgBgBgBg?</,2N l(f"Bg?<BgBgBgBgBg?</,2N l(f"Bg?<BgBgBgBgBg?</,2Nf l (f"Bg?<BgBgBgBgBg?< /,2N< l$f"Bg?<BgBgBgBgBg?</,2N l$f"Bg?<BgBgBgBgBg?</,2N l$f"Bg?<BgBgBgBgBg?</,2N l$f"Bg?<BgBgBgBgBg?</,2N0,&|g.0,&|g"Bg?<BgBgBgBgBg?< /,2N\0,&|g.0,&|f"Bg?<BgBgBgBgBg?< /,2N$0,&|f"Bg?<BgBgBgBgBg?</,2N0,&|f.0,&|g"Bg?<BgBgBgBgBg?</,2N0,&|g.0,&|g"Bg?<BgBgBgBgBg?</,2N0,&|@f.0,&| f"Bg?<BgBgBgBgBg?</,2NP0,&|@f.0,&| g"Bg?<BgBgBgBgBg?</,2N0,&|@g.0,&| f"Bg?<BgBgBgBgBg?</,2N0,&|@g.0,&| g"Bg?<BgBgBgBgBg?</,2N l f8?<N%rT @g&Bg?<BgBgBgBgBg?</,.Nl`, l f"Bg?<BgBgBgBgBg?</,.N> l f"Bg?<BgBgBgBgBg?</,.N l f"Bg?<BgBgBgBgBg?</,.N?<N$T @g"Bg?<BgBgBgBgBg?</,.N?,HlHlN+ N^NuNVBgBgN lX?<NnTHnHnHnHn/,6N8?.?.?.?.?.?.?.?.BgN?.?.?.?.?< Bg/,6N Bg/,6NZ\=@BgBgBgBgBgBgBg?./,6N BgNT?.?.?.?.?.?.?.?.?<N$0.`|g`N``|g`Nn``|g`N`r`|g`( l"f 0<`0<9@"N`@`|g`N`(`| g`Hl?<N \``N^NuNVBgBgN X?<NTHnHnHnHn/,2N ?.?.?.?.?.?.?.?.BgN ?.?.?.?.?< Bg/,2N BBg/,2N \=@BgBgBgBgBgBgBg?./,2N PBgN.T?.?.?.?.?.?.?.?.?<N  n f N`?</,2N\J@gBl(?</,2N\J@g9|(?</,2Np\J@g9|(?</,2NV\J@g9|(?</,2N<\J@g9|(?< /,2N"\J@g9| (?</,2N\J@gBl$?</,2N\J@g9|$?</,2N\J@g9|$?</,2N\J@g9|$Bl&?< /,2N\J@gl&?< /,2N\J@gl&?</,2Nj\J@gl&?</,2NP\J@gl&?</,2N6\J@gl &?</,2N\J@gl@&?</,2N\J@gl`&l&? nf N`t?</,.N^\J@g9| ?</,.ND\J@g9| ?</,.N*\J@g9| Hl>Hl@HnHn?, ?,N1NN^NuNVHlHlNP-@ fHl?<N\`Hn?<N\?,(Hl/.N#b ?,&Hl/.N#N ?,$Hl /.N#: ?,"Hl$/.N#& ?, Hl(/.N# ?,Hl,/.N" ?,P?,R?,T?,VHl0/.N"/.N HXHnBgN"\N^NuNV0.  n0( |g0<`` 0<`N^NuNV n f00,Jl>2,FlBl>Ao N`0,>lJ`| n f 9lHL`h nf?<?<?<N~\`H nf"0,"g0,LlHo 0,@lL` n f8?< NVT?< NLT?< NBT?< N8T?< N.T` n fN9lHL9lFJ` ng nf:0,"f20,LlHo"0,@lLHl>?,J?,L?,N0 `t0.@B.Hn?,J?,L?,N0 0,@lL0,L2,HlDl@Ao29lHL0,Jl>2,FlBl>Ao N` 0,>lJN^NuNV0,FlB2,>RAA?0,HlDS@??,F?,H0,Fl>lB2,>RAA?0,HlDS@?0,Fl>??,HNJ=lH=lJ0,HlDS@=@0,Jl>=@Bg?,N/ XHn?,N0\N^NuNV=n=n =n =n=n=n=n=nHnHnHn?<?,N/N^Nu)I)J"/0<NB"l$lNu NV9n0.| A" AA-H=|` nR2.AH0Rn nm/,HN.X0,xN^NuNVA)HLA)HPA)HTAx)HXAl)H\Ad)H`AL)HH?< NXT9lxF0,FN^NuNV)nl?<N6TN^NuNV9n9n ?<NTN^NuNV9n9n 9n 9n9n9n9n9n9n9n9n9n9n 9n")n$l9n(9n*?<NT n,0z n00| n40~ n80 n<0 n@00,xN^NuNV9n)n l?<#NNTN^NuNV)nl9n 9n9n9n9n9n?<*NTN^NuNV)nl9n 9n9n9n9n9n9n9n?</NTN^NuNV)nl9n ?<2NTN^NuNV9n9n 9n 9n9n9n9n9n9n?<3NdTN^NuNV9n)n l?<4NFTN^NuNV)nl?<6N.T n 0z n0| n0~ n00,xN^NuNV9n9n 9n 9n9n9n9n9n?<INTN^NuNV9n9n 9n 9n9n9n9n9n?<JNTN^NuNV?<MNtT n0z n 0| n0~ n00,xN^NuNV9n)n l?<NN2TN^NuNV9n9n 9n 9n9n?<dNTN^NuNV9n9n 9n 9n9n?<eNTN^NuNV9n?<fNTN^NuNV9n?<gNTN^NuNV9n9n ?<hNT n 0z n0| n0~ n00,xN^NuNV9n9n 9n 9n9n9n?<iN*TN^NuNV9n?<kNTN^NuNV9n9n 9n 9n9n9n?<lNT n0z n0| n0~ n 00,xN^NuNV)nl?<nNTN^NuNV9n9n 9|?<pN|TBl n d0,xN^NuNV?.NT nn0<`?.?<>N0X9@g0<`0<N^NuNVHl@/.N#PJ@g`HlF/.N#xPJ@gNHlL/.N#fPJ@g n(g nf. n-P n(f HnNX` HnNXA-H/./. 0.A PNPLN^/W D.NuN^Nu)@$Hl$NXONuHl$N XO ,$NuNVH n "(fJg"¼м@ LN^NuNVH nB fB`м8 LN^NuNVH n$fBCB`nD6< f႖|NN^NuNVH0&n$n Bn-J @)P$)h(-l$-l(BEG>O|g|JGn|m` REHl>/ NPO`SEHl>/ NbPO`&0+H@JGgDG0<0dR@0.BAQ,>QQֆG|0QB`Rn0.g$nB`0R 2.HmB`b .6.HЃR$@ nH|0fRZ"` R"H|9n nH|0f$n R&@fSE .6.HЃ @B n0L N^NuNVH0&n BnH|bf=| RH|rgH|wgH|ag <`F ,$@ f*A$H`0* |f` A"Ҽm A"Ҽm <`BBj Bn+H|+f =|j H|wf?./.N\\>j `hH|afB0<n?/.N<\> @f?./.N\>?<B?NPPj `0.n?/.N\>j Gf Bj <`05G Bj <$%@?<B?* NP%@5l L N^NuNVH$.f BB`J". BnJlVnDJlRnDvd`Bbd nmDdD-@-A LN^NuNV/BnJlRnDJ lRnD 0. -@0.n0. nngD -n N^.JNuN^NuNV nl <`?.?./. ?<BN -@ m .`?<?.B?<BN -@?<?.B?<BNj -@ nf .Ю -@ `$ nf .Ю -@ `0.g <`b . oHn . /?.?<@N Bg?./. ?<BN ]|9@g <` `Bl . N^NuNVH0><2.|SA¼0?N T&@f <` $@5G \/NX ,L N^NuNVH0><2.\ASA¼A ,$@ fA $@)@)@Bl&R0+Ge*0+Gf$`0k0+7G)J \`, f?NT&@ f <` $@ &@`L N^NuNVH0 .]&@$l` m n l`$R o l 2+Ёf R0(k R&`& 2*Ёf 0+j$`$)JL N^NuNVH0. <?NT&@ gBG` 0 KBRG0Fe LN^NuNV/.?<HN\N^NuNV/.?<IN\N^NuNVBn`60.A0f"0.A00.A0 ` Rn nLmN^NuNVBn`&0.A0nf0.ABPRn nLmN^NuNV?>.=|0A"HPgXHf0(>N^NuNVHlf/.NPJ@f =|`Hll/.NfPJ@f =|`Hlr/.NJPJ@f=|`f0. |g0/.N>XJ@g0<``Bg/.?<NX0. |?/.?<=NlP=@9@ @l0<`0. | ??.N~X0.N^Nu)I)J)_NM"l$l/,Nu)I)J)_NN"l$l/,Nu)I)J)_NA"l$l/,NuNVH&n Bn0.|dg`>< `.`|ug`>< ``|og`><``|xg`>< l* ndf SR- .D-@`0. f Gf .`& Gf .` ./0H/NzX 2.RnA0 Gf .`( Gf .` ./0H/N, X-@ .fp`FSn0.A P m0.A0| |A`0.A0|0 SR0.fLN^NuNVH&n n f=| )n$)n(HlxHl$?<N ]|@0. R@?HnHnHnN~.g SR-.H|0f.f SR`J nff>.n RG0l0o0,0`0> Gl0<`0?HnHnHnNBF`0RFA SRSGSn0g nl` SR0Sn nl0. g SR.` SR0RnSn 0. g nm`" Go0RFAH`0<0 SRSG0. Sn J@f`` SR0. g SR.><`0RGA SR0. Sn J@f SRE?.Hl/N: /NrXHѓLN^NuNVBn`"0. n PHC|0=@ nR n PH|0m n PH|9o0.N^NuNVH0&n -n @$PX`R` nRg H|%fH|%f,RBn=|Bn| H|-f=|RH|0f|0R-JHnN$X=@$nH|.fR-JHnNX=@$nH|lf=|RgH-n Gdg Gog Gxg GufB0.g @ ` @0H/Hn?.?NV 0.g0<`0<H` Gcf R @ nRT` Gsf4 @-PX<.` nR nRSF0g nf`J Geg Gfg Ggf, @)P$)h(/,(/,$Hn?.?NP` 0 nR .nl0.g$<.".A` nRSF0f`b .2.SAHЁ-@-@,.` .2SAHЁ @ nSSF0f` nR .o .R-@f nB .L N^NuNV/. HnNhP=@/.HnN8P0.N^NuNVHn /.NPN^NuNVHn /.N&PN^NuNV`/. nRH?N\ nfN^NuNV nf:0,jlhf0<9@h9@j`?<NT=@ nf*0,jg Slj?<?<NX?<D?<NX` n f00,jRljAl ?< ?<NX?< ?<NX`v nf ?<N*T nf20.2,jRljAl?< ?<NfX?< ?<NXX`*0.2,jRljAl?.?<N4X0<fAlhH|f0<`0,hRlhAlH`` nf?<NT``0.=| 0.HN-l$-l(BnBnBnBn=|Bn=|)l$)l(-l$-l( G-f|N>`B.Bn` G-f0.g =|` G0m G9n0.g0. G|0=@`t G0gBn0.fRn`^0.gSn0.fN)n$)n(HnHl$?<NSn 0. f0.f9|\0.g 0.n`0.n`b nl.)n$)n(HnHl$?<Nv-l$-l(Rn`,)n$)n(HnHl$?<NH-l$-l(Sn0.f.g()n$)n(HlHl$?<N-l$-l(0,^g/,d?Nt\`S`)n$)n(LN^NuNVH0BnBl\ nX&P`.H=@ n g n g n f.N=@ ng0,^g/,d?.N\`S`` n%gHNN=@ nf0<`0.ng"0,^g/,d?.N\`S`0.``0<=@=@=|H|*f=|RH|0m H|9n-KHnN\X=@&nH|lf=|RH=@ ncf4Np=@ @f0<`0.f0. nX PRn` ndg nog nxg nhfN@=@ @f0<`?.?.?.N\-@0,\g0.`0.fF0.g nX  @ `. nhf . nX" A` . nX" A0Rn`< neg nffN=@ @f0<`?.?.NXX-l$-l(0,\g0.`0.fH0.g$)n$)n( nX" A $!l(`)n$)n(N nX" A Rn` nsfN=@ @f0<`0.f nX$P`$0.f0.N=@ @f0<`LSn0.g n g n g n fB0,^g/,d?.N\`S`Rnf0.L N^NuNV)nd9|^Hn NXN^NuNVH0&n$n `RRgHHAgHHC`L N^NuNVH0&n$K`Rf `L N^NuNV n R @H=@` n R @H=@ n g n g n g0.N^NuNV=| nxg nXf n f0<`f n0m n9n0.|0=@`2 nam0.|a| =@` nAm0.|A| =@0.n o0<``0.N^NuNVBnBHnNX=@ n-f0<=@ nRH=@`0 ./0.H/N 6.HЃ-@ nRH=@?.?.NX=@ @f g n 0.g .D` .N^NuNV?< /</.N@ HN^NuNV/.?<AN^\9@g0<``0<N^NuNV .9@ .9@N^NuNV .9@ .9@N^Nu)I)JHl)_HHlH" <sNB"l$lNuNV9n 9| Bl9|9nN0,N^NuNV9n 9|Bl9|9nN0,N^NuNV9n 9|kBl9|9nN^ n 0 n0 n0 n00,N^NuNV9n 9|Bl9|9nN0,N^NuNV9n 9n 9|'Bl9|9nN n0 n0N^NuNV9n 9|Bl9|9nN0,N^NuNV)nL)nT .мZ)@X9|dBl9| n 9PNf n 0A)HLA)HTA)HXA)HPN^NuNV)n P9|9n Bl9nNA)HPN^NuNV9n 9n Bn nR2.RnA|0f9|9|Sn0.9@9nNN^NuNV)n P9|r9|Bl9nNA)HPN^NuNV9n /.N(X/.N@X)n P9|m9|9|9nN>A)HPN^NuNV`4 nH| f?< ?<NX nRH??<NX0. Sn J@fN^NuNV` nRH??<NX0. Sn J@fN^NuNV` nRH??<NX0. Sn J@fN^NuNVH0&n $KA-H nf?./ N4\=n`L nf?./ N`\=n`. nf?./ Np\=n`-KBn?.NTJ@f`H| f |o@ H-@/./.?.?<@N 9@Hg0<`0,n/./<?.?<@N 9@ @g0<`tRnR -@`R ned` 6.ƼЃ$@ H-@/./.?.?<@N0 9@Hg0<`0,nBl0.L N^NuC[1][Window Term 1.0|Full Version|by Matt Kimmel, 1987][OK]C"2"2 2"2"2"22"2"2"22"2x9|)lR>)lVB)lZ:)l^2)lb69|0CA"A"A"A$"A*"A"A ")|)|9|j9|hNuWTERMF.RSCWTERMF.INFr%d%d%d%d%d%d%d%d%d%d Window Terminal[3][There are no more|windows available!][Sorry!] Window Term 1.0-F %d[3][Not enough memory|for a buffer of|that size.][Cancel]WTERMF.INFw[3][Couldn't open|WTERMF.INF or writing.][Cancel]%d %d %d %d %d %d %d %d %d %d CON:AUX:PRT:@$??CON:AUX:PRT:%d@H /* * WTERM - A terminal program within a window * "Stripped" Version * by Matt Kimmel, 1987 * * This is this stripped version of Window Term, a terminal program * inside a window. The stripped version is considerably smaller * and slightly faster than the Full version. However, it doesn't have * any of the extra functions that the Full version has. In the Stripped * version, you must use a seperate program to set the RS232 parameters. * * This code should be fairly portable. I have used calloc() instead * of Malloc() because it initializes the reserved space to zeroes. * This is a standard K&R function, so it should be implemented in * all the ST compilers. * * The font size may be toggled between the normal font and "Icon" * size with ALT-F. If you press ALT-S, a CTRL-S is sent, and the * program won't accept any characters until you press ALT-S again, * at which time a CTRL-Q is sent and output is resumed. */ #include #include #include /* defines for window gadgets */ #define NAME 0x0001 #define CLOSE 0x0002 #define FULL 0x0004 #define MOVE 0x0008 #define SIZE 0x0020 /* Macros to turn the mouse on and off */ #define MOUSE_ON graf_mouse(257,&j) #define MOUSE_OFF graf_mouse(256,&j); /* The size to set the RS232 buffer to */ #define BUFFER_SIZE 8192 /* Structure returned by Iorec() */ typedef struct { char *ibuf; int ibufsiz; int ibufhd; int ibuftl; int ibuflow; int ibufhi; } IORECORD; /* Standard VDI variables */ int contrl[12], intin[128],ptsin[128],intout[128],ptsout[128]; int w_handle, handle, workin[11], workout[57]; int x,y,w,h; /* Position of window */ int j; /* General-purpose junk variable */ int nx, ny; /* X,Y coordinates of next character to be output */ int tx, ty, tw, th; /* Size of the work area of the window */ int hsize, vsize; /* Horizontal and vertical size of characters */ int apid, menuid; /* Application and Menu IDs */ char rs232buf[BUFFER_SIZE]; /* RS232 Buffer */ main() { int j; /* Junk variable */ int msg[8]; /* Message buffer for evnt_mesag */ apid = appl_init(); /* Initialize our application */ menuid = menu_register(apid," Window Term"); /* Register in Desk menu */ handle = graf_handle(&j,&j,&j,&j); /* Get handle of the screen */ for(j=0;j++<=9;workin[j]=1); /* Set up workin array */ workin[10] = 2; v_opnvwk(workin,&handle,workout); /* Open virtual workstation */ vst_alignment(handle,0,5,&j,&j); /* Set text alignment so that so that the y coordinate is the top line of a character with v_gtext */ hsize = 8; /* Set horizontal and vertical sizes of characters */ vsize = ((Getrez() == 2)?(16):(8)); x=50; /* The window starts with these coordinates */ y=50; w=200; h=100; set_rsbuf(); /* Set up new RS232 buffer */ for (;;) { /* For loop to infinity.... */ evnt_mesag(msg); /* Wait for a message */ if (msg[0] == AC_OPEN) /* Did someone open our accessory? */ acc(); /* Yes, go to the main part of the accessory */ } } /* * This is the main loop in the program. It handles the window and * input and output of characters. */ acc() { int msg[8], d, which; /* message buffer, junk variable, 'which' for evnt_multi */ int i; /* Character accepted */ int a, j; int desel = 0; /* Pseudo-Boolean variable determines whether our window is the active window */ int dx,dy,dw,dh; /* Temporary variables */ int stopped = 0; /* Pseudo-Boolean; determines whether output has been stopped with ALT-S */ long l; if (init_window() == 0) return; /* If we can't create a window, forget it! */ align8(&x,&y,&w,&h); /* Make sure the text is on 8-bit boundaries */ graf_growbox(24,0,56,16,x,y,w,h); /* Growing box */ wind_open(w_handle,x,y,w,h); /* Open window */ wind_get(w_handle,WF_WORKXYWH,&tx,&ty,&tw,&th); /* Get work area */ nx=tx; /* Set next character's coordinates */ ny=ty; clr(); /* Clear window */ Cauxout(17); /* Send a CTRL-Q, in case the user deselected the window (sending a CTRL-S) and then ran a program or some such which closed the window */ for(;;) { which = evnt_multi(MU_MESAG|MU_TIMER,0,0,0,0,0,0,0,0,0,0,0,0,0, msg,0,0,&d,&d,&d,&d,&d,&d); wind_get(w_handle,WF_TOP,&a,&j,&j,&j); /* Make sure our window is still on top */ if ((a != w_handle) && (desel == 0)) { /* Window has just been deselected */ if (stopped != 1) Cauxout(19); /* Send a CTRL-S */ desel = 1; } else if ((a == w_handle) && (desel == 1)) { /* Window has just been selected */ if (stopped != 1) Cauxout(17); /* Send a CTRL-Q */ desel = 0; } if ((which & MU_TIMER) && (a == w_handle)) { /* If there are no messages and our window is on top */ if (Bconstat(2)) { /* Is there a character waiting at the keyboard? */ l = Bconin(2); /* Yes, get it */ if (l == 2031616L) /* Is it an ALT-S? */ if (stopped == 0) { /* Yes, is output stopped? */ Cauxout(19); /* No, stop output and send a CTRL-S */ stopped = 1; } else { /* Yes, start output and send a CTRL-Q */ Cauxout(17); stopped = 0; } if (l == 2162688L) { /* Is the character an ALT-F? */ toggle_font(); /* Yes, toggle the font size and clear the window */ clr(); nx=tx; ny=ty; } Cauxout((int)l); /* Output the character. If it's ALT-F, a 0 will be output. */ } if (Cauxis() && (stopped == 0)) { /* Is there a character waiting at the modem port, and is output enabled? */ i = Cauxin(); /* Yes. Get it and output it on the window. */ MOUSE_OFF; outchar(i); MOUSE_ON; } } if (which & MU_MESAG) { /* Is there a message for us? */ switch(msg[0]) { /* Yes, evaluate it */ case WM_REDRAW : redraw(); /* Redraw the window */ nx=tx; ny=ty; break; case WM_NEWTOP : /* Top the window that should be on top */ case WM_TOPPED : wind_set(w_handle,WF_TOP,w_handle,0,0,0); clr(); break; case AC_OPEN : form_alert(1,"[1][Window Terminal| |by Matt Kimmel|1987][Okay]"); break; /* Give some credits if someone clicks on our menu item */ case AC_CLOSE : return; /* GEM has closed and deleted our window. */ break; case WM_CLOSED : wind_close(w_handle); graf_shrinkbox(24,0,56,16,x,y,w,h); wind_delete(w_handle); return; /* The user closed the window. Close it */ break; /* and delete it */ case WM_FULLED : full_window(); /* Full the window */ break; case WM_MOVED : /* Move the window but make sure the next character output appears after the last, and that the window doesn't go off the screen */ wind_get(0,WF_WORKXYWH,&dx,&dy,&dw,&dh); if (((msg[4] + msg[6]) - 1) > ((dx + dw) - 1)) msg[4] = ((dx + dw) - 1) - msg[6]; if (((msg[5] + msg[7]) - 1) > ((dy + dh) - 1)) msg[5] = ((dy + dh) - 1) - msg[7]; align8(&msg[4],&msg[5],&msg[6],&msg[7]); nx += (msg[4] - x); ny += (msg[5] - y); x=msg[4]; y=msg[5]; w=msg[6]; h=msg[7]; wind_set(w_handle,WF_CURRXYWH,x,y,w,h); wind_get(w_handle,WF_WORKXYWH,&tx,&ty,&tw,&th); break; case WM_SIZED : x=msg[4]; /* Size the window */ y=msg[5]; w=msg[6]; h=msg[7]; align8(&x,&y,&w,&h); wind_set(w_handle,WF_CURRXYWH,x,y,w,h); wind_get(w_handle,WF_WORKXYWH,&tx,&ty,&tw,&th); nx=tx; ny=ty; clr(); break; } continue; } } } /* * Redraw the window. We are actually just going to wipe all exposed portions * of thw window clean. */ redraw() { int lx,ly,lw,lh; int pxy[4]; vsf_interior(handle,0); /* Set the fill type to the background color */ MOUSE_OFF; wind_update(BEG_UPDATE); /* Don't let the rectangle lists be changed */ wind_get(w_handle,WF_FIRSTXYWH,&lx,&ly,&lw,&lh); /* Get first rectangle */ while (lw && lh) { pxy[0] = lx; pxy[1] = ly; pxy[2] = (lx + lw) - 1; pxy[3] = (ly + lh) - 1; vr_recfl(handle,pxy); /* Wipe this rectangle */ wind_get(w_handle,WF_NEXTXYWH,&lx,&ly,&lw,&lh); /* Get next rectangle */ } wind_update(END_UPDATE); /* End update */ MOUSE_ON; } /* * Wipe the entire window clean. Only works if the window is on top. */ clr() { int active; int j; int p[4]; wind_get(w_handle,WF_TOP,&active,&j,&j,&j); /* Is our window on top? */ if (active == w_handle) { /* Yes, go ahead */ wind_get(w_handle,WF_WORKXYWH,&p[0],&p[1],&p[2],&p[3]); /* Get size */ p[2] += (p[0] - 1); p[3] += (p[1] - 1); vsf_interior(handle,0); /* Set fill type to background color */ MOUSE_OFF; vr_recfl(handle,p); /* Wipe the window */ MOUSE_ON; } } /* * This function takes the _outside_ coordinates and size of a window, * and changes them so that the inside x and width are divisible by 8. * This means that the inside is on an 8-bit boundary, and will speed up * scrolling when we use vro_cpyfm(). */ align8(fx,fy,fw,fh) int *fx,*fy,*fw,*fh; { int ix,iy,iw,ih; /* Get inside size of window */ wind_calc(1,NAME|CLOSE|FULL|MOVE|SIZE,*fx,*fy,*fw,*fh,&ix,&iy,&iw,&ih); /* Align it */ while ((ix % 8) != 0) ix++; while ((iw % 8) != 0) iw++; /* Change the aligned inside to an outside size */ wind_calc(0,NAME|CLOSE|FULL|MOVE|SIZE,ix,iy,iw,ih,fx,fy,fw,fh); } /* * Make the window cover the whole desktop. Once it's aligned, it will * actually leave a little bit of the desktop showing. */ full_window() { int jx,jy,jw,jh,fx,fy,fw,fh; wind_get(w_handle,WF_FULLXYWH,&fx,&fy,&fw,&fh); /* Get the full size */ if ((x == fx) && (y == fy) && (w == fw) && (h == fh)) { /* If it's already fulled, make it smaller. The smaller one will always be aligned already with align8(). */ wind_get(w_handle,WF_PREVXYWH,&jx,&jy,&jw,&jh); /* Get Previous XYWH */ graf_shrinkbox(jx,jy,jw,jh,x,y,w,h); /* Shrinking Box */ x=jx; y=jy; w=jw; h=jh; wind_set(w_handle,WF_CURRXYWH,x,y,w,h); /* Set new size and get WORKXYWH */ wind_get(w_handle,WF_WORKXYWH,&tx,&ty,&tw,&th); nx=tx; ny=ty; } else { /* Otherwise, full it similarly */ wind_get(w_handle,WF_FULLXYWH,&jx,&jy,&jw,&jh); graf_growbox(x,y,w,h,jx,jy,jw,jh); x=jx; y=jy; w=jw; h=jh; wind_set(w_handle,WF_CURRXYWH,x,y,w,h); wind_get(w_handle,WF_WORKXYWH,&tx,&ty,&tw,&th); nx=tx; ny=ty; } clr(); /* Clear window */ } /* * Create the window. */ init_window() { int bx,by,bw,bh; wind_get(0,WF_WORKXYWH,&bx,&by,&bw,&bh); /* Get size of desktop for 'FULL' size. */ align8(&bx,&by,&bw,&bh); /* Align it */ bw -= 8; /* Make it fit on the desktop a little better */ w_handle = wind_create(NAME|CLOSE|FULL|MOVE|SIZE,bx,by,bw,bh); /* Create it */ if (w_handle < 0) { /* Tell the user if there's an error */ form_alert(1,"[3][There are no more|windows available!][Sorry!]"); return (0); } wind_set(w_handle,WF_NAME," Window Term 1.0-S ",0,0); /* Set window name */ return(1); } /* * Set the RS232 buffer's information to descrobe our buffer */ set_rsbuf() { IORECORD *b; Cauxout(19); b = (IORECORD *)Iorec(0); /* Get pointer to the RS232 buffer descriptor */ /* Change the descriptor */ b->ibuf = rs232buf; b->ibufsiz = BUFFER_SIZE; b->ibuflow = BUFFER_SIZE/4; b->ibufhi = BUFFER_SIZE/4*3; b->ibufhd = 0; b->ibuftl = 0; Cauxout(17); } /* * Toggle between the normal and small font */ toggle_font() { static int font = 0; int j; if (font == 0) { /* Change to Icon font */ vst_point(handle,8,&j,&j,&hsize,&vsize); font = 1; } else { /* Change to normal font */ vst_point(handle,((Getrez() == 2)?(10):(9)),&j,&j,&hsize,&vsize); font = 0; } } /* * Output a character at the next character position in the window * using v_gtext */ outchar(ch) int ch; { char str[2]; int j; if (ch == 10) { /* Linefeed */ /* Put the 'cursor' down one line and scroll if necessary */ if ((ny + vsize) > ((ty + th) - vsize)) { scroll(); return; } ny += vsize; return; } if (ch == 13) { /* Carriage Return */ /* Put the 'cursor' at the beginning of the line */ nx = tx; return; } if (ch == 7) { /* Bell */ Bconout(2,7); return; } if (ch == 9) { /* Tab */ outchar(32); /* faster than a for loop */ outchar(32); outchar(32); outchar(32); outchar(32); return; } if (ch == 12) { /* Form Feed (clear screen) */ clr(); nx=tx; ny=ty; return; } if ((ch == 127) || (ch == 8)) { /* DEL and Backspace */ /* Put 'cursor' back one space and print a space there */ if (nx > tx) { nx -= hsize; v_gtext(handle,nx,ny," "); } return; } str[0] = (char)ch; /* Construct a string */ str[1] = '\0'; v_gtext(handle,nx,ny,str); /* Output the character */ nx += hsize; /* Move the cursor to the next space */ /* If necessary, move the cursor to the next line, and scroll if needed */ if (nx > ((tx + tw) - hsize)) { nx = tx; if ((ny + vsize) > ((ty + th) - vsize)) scroll(); else ny += vsize; } } /* * Scroll the contents of the screen up one line using the blit() function */ scroll() { int pxy[4]; blit(tx,(ty + vsize),((tx + tw) - 1),(((ty + vsize) + th) - (vsize + 1)), tx,ty,((tx + tw) - 1),((ty + th) - (vsize + 1))); /* Call blit() */ /* clear the bottom line */ pxy[0] = tx; pxy[1] = ny; pxy[2] = (tx + tw) - 1; pxy[3] = ny + vsize; vsf_interior(handle,0); vr_recfl(handle,pxy); } /* * Copy the rectangle described by x1,y1,x2,y2 to the rectangle described * by x3,y3,x4,y4 using vro_cpyfm() */ blit(x1,y1,x2,y2,x3,y3,x4,y4) int x1,y1,x2,y2,x3,y3,x4,y4; { FDB b; int bp[8]; bp[0] = x1; bp[1] = y1; bp[2] = x2; bp[3] = y2; bp[4] = x3; bp[5] = y3; bp[6] = x4; bp[7] = y4; vro_cpyfm(handle,3,bp,&b,&b); } /* * WTERMF - Window Terminal, 'full' version * * Matt Kimmel, 1987 * * This program implements a terminal program inside a window as a desk * accessory. See the header in the 'stripped' version for programming * notes. * * This version is larger and slower but contains many features - three * font sizes, RS232 buffer sizing, a cursor, setting of RS232 parameters, * and saving of configuration. This version requires a resource file, * WTERMF.C. * */ #include #include #include #include #include #include "wtermf.h" /* Resource defs */ /* Defines for window gadgets */ #define NAME 0x0001 #define CLOSE 0x0002 #define FULL 0x0004 #define MOVE 0x0008 #define SIZE 0x0020 /* Macros to turn mouse pointer on and off */ #define MOUSE_ON graf_mouse(257,&j) #define MOUSE_OFF graf_mouse(256,&j) /* Structure for iorec() */ typedef struct { char *ibuf; int ibufsiz; int ibufhd; int ibuftl; int ibuflow; int ibufhi; } IORECORD; /* VDI variables - why aren't these in a header file? */ int contrl[12], intin[128],ptsin[128],intout[128],ptsout[128]; int w_handle, handle, workin[11], workout[57]; int x,y,w,h; /* Current coordinates of window */ int j; int nx, ny; /* coordinates of next character to be output */ int tx, ty, tw, th; /* Work area of window */ int hsize, vsize; /* Horizontal and vertical size of characters */ int apid, menuid; OBJECT *mainmenu, *setrs, *setfont, *rsize; int baud, ucr, flow, cursor, point, buffer_size; /* Various parameters */ char *rb; /* Pointer to our RS232 buffer */ char strsiz[10]; char aboutstr[] = "[1][Window Term 1.0|Full Version|by Matt Kimmel, 1987][OK]"; main() { int j; int msg[8]; FILE *conf; int dx,dy,dw,dh; /* Desktop work area */ apid = appl_init(); if (!rsrc_load("WTERMF.RSC")) for(;;) evnt_mesag(msg); /* If we can't open the resource file, we'll just sit here and release the system to the time slicer */ rsrc_gaddr(0,MENU,&mainmenu); rsrc_gaddr(0,RS232,&setrs); rsrc_gaddr(0,FONT,&setfont); rsrc_gaddr(0,BUFSET,&rsize); ((TEDINFO *)rsize[BSIZ].ob_spec)->te_ptext = strsiz; if ((conf = fopen("\WTERMF.INF","r")) == NULL) { /* If we can't open the config file, set up the defaults */ baud = 7; /* 1200 baud */ ucr = 136; /* 8,N,1 */ flow = 0; /* no flow control */ cursor = 1; /* cursor on */ point = ((Getrez() == 2)?(10):(9)); /* normal font for this resolution */ buffer_size = 8192; /* 8K RS232 buffer */ /* default window coordinates */ x=50; y=50; w=200; h=100; } else { /* Get parameters from the config file */ fscanf(conf,"%d",&baud); fscanf(conf,"%d",&ucr); fscanf(conf,"%d",&flow); fscanf(conf,"%d",&cursor); fscanf(conf,"%d",&point); fscanf(conf,"%d",&buffer_size); fscanf(conf,"%d",&x); fscanf(conf,"%d",&y); fscanf(conf,"%d",&w); fscanf(conf,"%d",&h); fclose(conf); } wind_get(0,WF_WORKXYWH,&dx,&dy,&dw,&dh); /* Get work area of desktop */ /* Fix window coordinates if necessary to fit inside desktop */ if ((x < dx) || (x > (dx + dw))) x=dx; if ((y < dy) || (y > (dy+dh))) y=dy; if ((x + w) > (dx + dw)) w=((dx + dw) - x) - 8; if ((y + h) > (dy + dh)) h=((dy + dh) - x); /* Align window to be byte-aligned in screen RAM */ align8(&x,&y,&w,&h); init_buttons(); /* Set up buttons in dialog boxes */ if ((point == 10) && (Getrez() != 2)) point = 9; /* Fix font for color */ Rsconf(baud,flow,ucr,-1,-1,-1); menuid = menu_register(apid," Window Terminal"); handle = graf_handle(&j,&j,&j,&j); for(j=0;j++<=9;workin[j]=1); workin[10] = 2; v_opnvwk(workin,&handle,workout); vst_alignment(handle,0,5,&j,&j); vst_point(handle,point,&j,&j,&hsize,&vsize); vst_color(handle,1); vsl_color(handle,1); vswr_mode(handle,1); /* Allocate new RS232 buffer. calloc() is used because it zeroes the memory it allocates */ rb = calloc(buffer_size,sizeof(char)); /* If we can't allocate the memory, hang */ if (rb == NULL) for (;;) evnt_mesag(msg); set_rsbuf(); for (;;) { evnt_mesag(msg); /* Wait around to be selected */ if (msg[0] == AC_OPEN) acc(); } } /* * This is the main accessory - it handles messages and i/o. */ acc() { int msg[8], d, which; int i; int a, j; int desel = 0; /* Is the window deselected? */ int dx,dy,dw,dh; int stopped = 0; /* Has the window been stopped with ALT-S? */ long l; int p[4]; if (init_window() == 0) return; /*If we can't allocate a window, forget it*/ align8(&x,&y,&w,&h); graf_growbox(24,0,56,16,x,y,w,h); wind_open(w_handle,x,y,w,h); /* Open our window */ wind_get(w_handle,WF_WORKXYWH,&tx,&ty,&tw,&th); /* Get its work area */ clr(); /* clear it */ Cauxout(17); /* Send a CTRL-Q, just in case */ for(;;) { /* Release time to the time slicer, but come back every (theoretically) 0 milliseconds. Also wait for messages. */ which = evnt_multi(MU_MESAG|MU_TIMER,0,0,0,0,0,0,0,0,0,0,0,0,0, msg,0,0,&d,&d,&d,&d,&d,&d); /* See if our window is still on top */ wind_get(w_handle,WF_TOP,&a,&j,&j,&j); if ((a != w_handle) && (desel == 0)) { /* Window has been deselected */ if (stopped != 1) Cauxout(19); /* Send a CTRL-S if the window isn't stopped */ desel = 1; } else if ((a == w_handle) && (desel == 1)) { /* Window has been selected */ if (stopped != 1) Cauxout(17); /* Send a CTRL-Q, if window isn't stopped */ desel = 0; } /* If there are no messages and our window is on top, do some i/o */ if ((which & MU_TIMER) && (a == w_handle)) { /* If there's a character waiting at the keyboard, get it */ if (Bconstat(2)) { l = Bconin(2); if (l == 2031616L) /* Is it ALT-S? */ if (stopped == 0) { /* Yes, toggle stopped window */ Cauxout(19); stopped = 1; } else { Cauxout(17); stopped = 0; } Cauxout((int)l); /* Output the character to RS232. If it was ALT-S, a 0 will be output */ } /* If there's a character waiting at the RS232 port, and the window is not stopped, output it. */ if (Cauxis() && (stopped == 0)) { i = Cauxin(); MOUSE_OFF; /* turn off mouse */ if (cursor) { /* erase cursor */ p[0] = (nx + (hsize / 2)); p[1] = (ny - 1); p[2] = p[0]; p[3] = ((ny + vsize) + 1); vswr_mode(handle,3); v_pline(handle,2,p); vswr_mode(handle,1); } outchar(i); /* output the character */ if (cursor) { /* draw the cursor */ p[0] = (nx + (hsize / 2)); p[1] = (ny - 1); p[2] = p[0]; p[3] = ((ny + vsize) + 1); vswr_mode(handle,3); v_pline(handle,2,p); vswr_mode(handle,1); } MOUSE_ON; /* turn on the mouse */ } } if (which & MU_MESAG) { switch(msg[0]) { case WM_REDRAW : redraw(); /* redraw window and reset character */ nx=tx; /* coordinates */ ny=ty; break; case WM_NEWTOP : /* put appropriate window on top */ case WM_TOPPED : wind_set(w_handle,WF_TOP,msg[3],0,0,0); clr(); break; case AC_OPEN : do_menu(); /* Let the user select a command */ break; case AC_CLOSE : return; /* Our window has been closed and deleted */ break; /* for us. */ case WM_CLOSED : wind_close(w_handle); /* close and delete window */ graf_shrinkbox(24,0,56,16,x,y,w,h); wind_delete(w_handle); return; /* exit */ break; case WM_FULLED : full_window(); break; case WM_MOVED : wind_get(0,WF_WORKXYWH,&dx,&dy,&dw,&dh); /* Fix window to be inside the desktop */ if (((msg[4] + msg[6]) - 1) > ((dx + dw) - 1)) msg[4] = ((dx + dw) - 1) - msg[6]; if (((msg[5] + msg[7]) - 1) > ((dy + dh) - 1)) msg[5] = ((dy + dh) - 1) - msg[7]; align8(&msg[4],&msg[5],&msg[6],&msg[7]); nx += (msg[4] - x); /* Cursor will be at the same */ ny += (msg[5] - y); /* position relative to the */ x=msg[4]; /* window */ y=msg[5]; w=msg[6]; h=msg[7]; wind_set(w_handle,WF_CURRXYWH,x,y,w,h); wind_get(w_handle,WF_WORKXYWH,&tx,&ty,&tw,&th); break; case WM_SIZED : x=msg[4]; /* Size window and align it */ y=msg[5]; w=msg[6]; h=msg[7]; align8(&x,&y,&w,&h); wind_set(w_handle,WF_CURRXYWH,x,y,w,h); wind_get(w_handle,WF_WORKXYWH,&tx,&ty,&tw,&th); clr(); break; } continue; } } } /* * this functions fulfills a redraw request. It redraws ALL exposed * portions of the window rather than just the 'dirty' rectangles. */ redraw() { int lx,ly,lw,lh; int pxy[4]; int active; int j; /* if our window is on top, just use the clr() function. It's faster. */ wind_get(w_handle,WF_TOP,&active,&j,&j,&j); if (active == w_handle) { clr(); return; } vsf_interior(handle,0); MOUSE_OFF; /* turn off mouse */ wind_update(BEG_UPDATE); /* Begin update - don't let GEM change anything */ /* Get rectangles one by one and fill them in. Fill ALL exposed portions of the window. */ wind_get(w_handle,WF_FIRSTXYWH,&lx,&ly,&lw,&lh); while (lw && lh) { pxy[0] = lx; pxy[1] = ly; pxy[2] = (lx + lw) - 1; pxy[3] = (ly + lh) - 1; vr_recfl(handle,pxy); wind_get(w_handle,WF_NEXTXYWH,&lx,&ly,&lw,&lh); } wind_update(END_UPDATE); /* End our update; let GEM change things again */ MOUSE_ON; /* turn on mouse */ } /* * clear the window if it's on top. */ clr() { int active; int j; int p[4]; /* Don't do anything if our window is not on top. */ wind_get(w_handle,WF_TOP,&active,&j,&j,&j); if (active == w_handle) { wind_get(w_handle,WF_WORKXYWH,&p[0],&p[1],&p[2],&p[3]); /* get work area */ p[2] += (p[0] - 1); /* Fix w and h to be x2 and y2 */ p[3] += (p[1] - 1); vsf_interior(handle,0); MOUSE_OFF; vr_recfl(handle,p); /* Wipe window */ nx=tx; /* Reset character coordinates */ ny=ty; /* Draw the cursor if necessary */ if (cursor) { p[0] = (nx + (hsize / 2)); p[1] = (ny - 1); p[2] = p[0]; p[3] = ((ny + vsize) + 1); vswr_mode(handle,1); v_pline(handle,2,p); } MOUSE_ON; } } /* * Make sure that the window's work area is byte-aligned. this speeds * up scrolling with vro_cpyfm(). */ align8(fx,fy,fw,fh) int *fx,*fy,*fw,*fh; { int ix,iy,iw,ih; /* This returns coordinates for the entire window, not just the work area, so we need to convert coordinates back and forth with wind_calc(). */ wind_calc(1,NAME|CLOSE|FULL|MOVE|SIZE,*fx,*fy,*fw,*fh,&ix,&iy,&iw,&ih); while ((ix % 8) != 0) ix++; while ((iw % 8) != 0) iw++; wind_calc(0,NAME|CLOSE|FULL|MOVE|SIZE,ix,iy,iw,ih,fx,fy,fw,fh); } /* * fulfill a full_window() request. */ full_window() { int jx,jy,jw,jh,fx,fy,fw,fh; /* get 'full size'. This is already byte-aligned. */ wind_get(w_handle,WF_FULLXYWH,&fx,&fy,&fw,&fh); /* if the window is already full, unfull it. */ if ((x == fx) && (y == fy) && (w == fw) && (h == fh)) { wind_get(w_handle,WF_PREVXYWH,&jx,&jy,&jw,&jh); graf_shrinkbox(jx,jy,jw,jh,x,y,w,h); x=jx; y=jy; w=jw; h=jh; wind_set(w_handle,WF_CURRXYWH,x,y,w,h); wind_get(w_handle,WF_WORKXYWH,&tx,&ty,&tw,&th); nx=tx; ny=ty; } else { /* full the window */ wind_get(w_handle,WF_FULLXYWH,&jx,&jy,&jw,&jh); graf_growbox(x,y,w,h,jx,jy,jw,jh); x=jx; y=jy; w=jw; h=jh; wind_set(w_handle,WF_CURRXYWH,x,y,w,h); wind_get(w_handle,WF_WORKXYWH,&tx,&ty,&tw,&th); nx=tx; ny=ty; } clr(); } /* * initialize and allocate the window */ init_window() { int bx,by,bw,bh; wind_get(0,WF_WORKXYWH,&bx,&by,&bw,&bh); /* set up FULLXYWH value */ align8(&bx,&by,&bw,&bh); bw -= 8; w_handle = wind_create(NAME|CLOSE|FULL|MOVE|SIZE,bx,by,bw,bh); if (w_handle < 0) { /* If we can't allocate a window, apologize */ form_alert(1,"[3][There are no more|windows available!][Sorry!]"); return (0); } wind_set(w_handle,WF_NAME," Window Term 1.0-F ",0,0); return(1); } /* * Install our new RS232 buffer */ set_rsbuf() { IORECORD *b; Cauxout(19); /* We don't want incoming characters during this */ b = (IORECORD *)Iorec(0); /* make our structure point to the RS232 struct */ b->ibuf = rb; /* fill it in! */ b->ibufsiz = buffer_size; b->ibuflow = buffer_size/4; b->ibufhi = buffer_size/4*3; b->ibufhd = 0; b->ibuftl = 0; Cauxout(17); /* Send a CTRL-Q */ } /* * Set up the buttons on the dialog boxes */ init_buttons() { int j; char foo[10]; /* Clear all the buttons */ for (j=0;j<=32;j++) if (((setrs[j].ob_type) == G_BUTTON)||((setrs[j].ob_type) == G_BOXCHAR)) { setrs[j].ob_state &= (~SELECTED); setrs[j].ob_state |= NORMAL; } for (j=0;j<=7;j++) if ((setfont[j].ob_type) == G_BUTTON) { setfont[j].ob_state &= (~SELECTED); setfont[j].ob_state |= NORMAL; } /* Set appropriate buttons */ if (baud == 0) objc_change(setrs,B19200,0,0,0,0,0,SELECTED,0); if (baud == 1) objc_change(setrs,B9600,0,0,0,0,0,SELECTED,0); if (baud == 2) objc_change(setrs,B4800,0,0,0,0,0,SELECTED,0); if (baud == 4) objc_change(setrs,B2400,0,0,0,0,0,SELECTED,0); if (baud == 7) objc_change(setrs,B1200,0,0,0,0,0,SELECTED,0); if (baud == 9) objc_change(setrs,B300,0,0,0,0,0,SELECTED,0); if (flow == 0) objc_change(setrs,FLOWNONE,0,0,0,0,0,SELECTED,0); if (flow == 1) objc_change(setrs,FLOWXON,0,0,0,0,0,SELECTED,0); if (flow == 2) objc_change(setrs,FLOWRTS,0,0,0,0,0,SELECTED,0); if (flow == 3) objc_change(setrs,FLOWBOTH,0,0,0,0,0,SELECTED,0); if ((ucr & 4) && (ucr & 2)) objc_change(setrs,EVEN,0,0,0,0,0,SELECTED,0); if ((ucr & 4) && (!(ucr & 2))) objc_change(setrs,ODD,0,0,0,0,0,SELECTED,0); if (!(ucr & 4)) objc_change(setrs,NONE,0,0,0,0,0,SELECTED,0); if ((!(ucr & 16)) && (ucr & 8)) objc_change(setrs,STOP1,0,0,0,0,0,SELECTED,0); if ((ucr & 16) && (ucr & 8)) objc_change(setrs,STOP2,0,0,0,0,0,SELECTED,0); if ((!(ucr & 64)) && (!(ucr & 32))) objc_change(setrs,BIT8,0,0,0,0,0,SELECTED,0); if ((!(ucr & 64)) && (ucr & 32)) objc_change(setrs,BIT7,0,0,0,0,0,SELECTED,0); if ((ucr & 64) && (!(ucr & 32))) objc_change(setrs,BIT6,0,0,0,0,0,SELECTED,0); if ((ucr & 64) && (ucr & 32)) objc_change(setrs,BIT5,0,0,0,0,0,SELECTED,0); if ((point == 10) && (Getrez() != 2)) objc_change(setfont,COLOR,0,0,0,0,0,SELECTED,0); else if (point == 10) objc_change(setfont,MONO,0,0,0,0,0,SELECTED,0); if (point == 9) objc_change(setfont,COLOR,0,0,0,0,0,SELECTED,0); if (point == 8) objc_change(setfont,ICON,0,0,0,0,0,SELECTED,0); if (Getrez() != 2) objc_change(setfont,MONO,0,0,0,0,0,DISABLED,0); sprintf(strsiz,"%d",buffer_size); } /* * Do main dialog; allow user to select a command */ do_menu() { int which; int dx,dy,dw,dh; evnt_timer(0,0); /* Lots of stuff to make sure dialogs aren't */ wind_update(BEG_UPDATE); /* redrawn over by other applications */ form_center(mainmenu,&dx,&dy,&dw,&dh); form_dial(FMD_START,dx,dy,dw,dh,dx,dy,dw,dh); objc_draw(mainmenu,0,10,dx,dy,dw,dh); which = form_do(mainmenu,0); objc_change(mainmenu,which,0,0,0,0,0,NORMAL,0); wind_update(END_UPDATE); form_dial(FMD_FINISH,dx,dy,dw,dh,dx,dy,dw,dh); switch(which) { case SETRS232 : set_rs232(); break; case BUFSIZE : size_buffer(); break; case SETSIZE : set_charsize(); break; case CURSON : cursor = ((cursor == 1)?(0):(1)); clr(); break; case SAVESET : save_settings(); break; case ABOUT : form_alert(1,aboutstr); break; } } /* * Let user set RS232 parameters */ set_rs232() { int which; int dx,dy,dw,dh; /* Do the dialog ... */ evnt_timer(0,0); wind_update(BEG_UPDATE); form_center(setrs,&dx,&dy,&dw,&dh); form_dial(FMD_START,dx,dy,dw,dh,dx,dy,dw,dh); objc_draw(setrs,0,10,dx,dy,dw,dh); which = form_do(setrs,0); objc_change(setrs,which,0,0,0,0,0,NORMAL,0); wind_update(END_UPDATE); form_dial(FMD_FINISH,dx,dy,dw,dh,dx,dy,dw,dh); if (which == RCANCEL) { init_buttons(); return; } /* ... and set the parameters accordingly */ if (sel(setrs,B19200)) baud = 0; if (sel(setrs,B9600)) baud = 1; if (sel(setrs,B4800)) baud = 2; if (sel(setrs,B2400)) baud = 4; if (sel(setrs,B1200)) baud = 7; if (sel(setrs,B300)) baud = 9; if (sel(setrs,FLOWNONE)) flow = 0; if (sel(setrs,FLOWXON)) flow = 1; if (sel(setrs,FLOWRTS)) flow = 2; if (sel(setrs,FLOWBOTH)) flow = 3; ucr = 0; if (sel(setrs,EVEN)) ucr |= 6; if (sel(setrs,ODD)) ucr |= 4; if (sel(setrs,STOP1)) ucr |= 8; if (sel(setrs,STOP2)) ucr |= 24; if (sel(setrs,BIT7)) ucr |= 32; if (sel(setrs,BIT6)) ucr |= 64; if (sel(setrs,BIT5)) ucr |= 96; ucr |= 128; Rsconf(baud,flow,ucr,-1,-1,-1); } /* * Let the user size the RS232 buffer */ size_buffer() { int dx,dy,dw,dh,which; int oldbuf; /* Do the dialog */ evnt_timer(0,0); wind_update(BEG_UPDATE); form_center(rsize,&dx,&dy,&dw,&dh); form_dial(FMD_START,dx,dy,dw,dh,dx,dy,dw,dh); objc_draw(rsize,0,10,dx,dy,dw,dh); which = form_do(rsize,BSIZ); objc_change(rsize,which,0,0,0,0,0,NORMAL,0); wind_update(END_UPDATE); form_dial(FMD_FINISH,dx,dy,dw,dh,dx,dy,dw,dh); if (which == BCANCEL) { init_buttons(); return; } /* set size */ oldbuf = buffer_size; /* save old buffer size */ buffer_size = atoi(strsiz); /* get new one */ free(rb); /* free the old memory */ rb = calloc(buffer_size,sizeof(char)); /* allocate the new */ if (rb == NULL) { /* if bad, generally bomb out. */ form_alert(1,"[3][Not enough memory|for a buffer of|that size.][Cancel]"); buffer_size = oldbuf; rb = calloc(buffer_size,sizeof(char)); /* reallocate the old buffer. We don't have any error-checking here because if this fails, we're in big trouble anyway */ init_buttons(); return; } set_rsbuf(); } /* * Let user set the font (Mono, color, icon) */ set_charsize() { int dx,dy,dw,dh,which,j; evnt_timer(0,0); wind_update(BEG_UPDATE); form_center(setfont,&dx,&dy,&dw,&dh); form_dial(FMD_START,dx,dy,dw,dh,dx,dy,dw,dh); objc_draw(setfont,0,10,dx,dy,dw,dh); which = form_do(setfont,0); objc_change(setfont,which,0,0,0,0,0,NORMAL,0); wind_update(END_UPDATE); form_dial(FMD_FINISH,dx,dy,dw,dh,dx,dy,dw,dh); if (which == FCANCEL) { init_buttons(); return; } if (sel(setfont,MONO)) point = 10; if (sel(setfont,COLOR)) point = 9; if (sel(setfont,ICON)) point = 8; vst_point(handle,point,&j,&j,&hsize,&vsize); clr(); } /* * save the configuration */ save_settings() { int j; FILE *fd; if ((fd = fopen("\WTERMF.INF","w")) == NULL) { form_alert(1,"[3][Couldn't open|\WTERMF.INF\for writing.][Cancel]"); return; } graf_mouse(2,&j); /* "busy as a bee " */ fprintf(fd,"%d\n",baud); fprintf(fd,"%d\n",ucr); fprintf(fd,"%d\n",flow); fprintf(fd,"%d\n",cursor); fprintf(fd,"%d\n",point); fprintf(fd,"%d\n",buffer_size); fprintf(fd,"%d\n%d\n%d\n%d\n",x,y,w,h); fclose(fd); graf_mouse(0,&j); } /* * Return non-zero if obj in tree is selected */ sel(tree,obj) OBJECT *tree; int obj; { if ((tree[obj].ob_state) & SELECTED) return (1); else return (0); } /* * output a character to the window, and scroll if necessary. * Why doesn't the ST have built-in scrolling and such for its * windows? */ outchar(ch) int ch; { char str[2]; int j; if (ch == 10) { /* Linefeed */ if ((ny + vsize) > ((ty + th) - vsize)) { /* scroll if necessary */ scroll(); return; } ny += vsize; return; } if (ch == 13) { /* Carriage Return */ nx = tx; return; } if (ch == 7) { /* Bell */ Bconout(2,7); /* ding! */ return; } if ((ch == 8) && (cursor)) { /* cursor is non-destructive if the cursor */ if (nx > tx) /* is on. */ nx -= hsize; return; } if (ch == 9) { /* Tab */ outchar(32); /* faster than a for loop */ outchar(32); outchar(32); outchar(32); outchar(32); /* Tabs are 5 characters right now. Perhaps in a later version I'll let the user set the tab size. */ return; } if (ch == 12) { /* Form Feed (clear screen) */ clr(); nx=tx; ny=ty; return; } if ((ch == 127) || ((ch == 8) && (!cursor))) { /* DEL and Backspace */ if (nx > tx) { nx -= hsize; v_gtext(handle,nx,ny," "); } return; } str[0] = (char)ch; str[1] = '\0'; v_gtext(handle,nx,ny,str); /* output the character */ nx += hsize; if (nx > ((tx + tw) - hsize)) { /* wrap if necessary */ nx = tx; if ((ny + vsize) > ((ty + th) - vsize)) scroll(); /* scroll if necessary */ else ny += vsize; } } /* * This routine scrolls the window up one line. This should be built into * the ST - it took me quite a while to get this thing working. * Basically what it does is copy all the lines but the top one up one * line (as one block). Then it wipes the bottom line clean. */ scroll() { int pxy[4]; blit(tx,(ty + vsize),((tx + tw) - 1),(((ty + vsize) + th) - (vsize + 1)), tx,ty,((tx + tw) - 1),((ty + th) - (vsize + 1))); pxy[0] = tx; pxy[1] = ny; pxy[2] = (tx + tw) - 1; pxy[3] = ny + vsize; vsf_interior(handle,0); vr_recfl(handle,pxy); } /* * copy the block defined by x1, y1, x2, y2 to x3, y3, x4, y4 */ blit(x1,y1,x2,y2,x3,y3,x4,y4) int x1,y1,x2,y2,x3,y3,x4,y4; { FDB b; int bp[8]; bp[0] = x1; bp[1] = y1; bp[2] = x2; bp[3] = y2; bp[4] = x3; bp[5] = y3; bp[6] = x4; bp[7] = y4; vro_cpyfm(handle,3,bp,&b,&b); /* zap! */ } 0660103030566 9[....................................................] Window Term Version 1.0 The Desk Accessory Terminal in a Window by Matt Kimmel 1987 Window Term is a terminal program in a desk accessory. It differs from the VT52 emulator in one major way - it's in a window. This means that you can keep it on the screen while doing other things - For example, you could open Window Term while using a word processor, and switch between your document and Window Term - both will be on the screen. If you've used the Control Panel, Window Term is similar to that. It is a GEM window like any other. Window Term represents a lot of work. However, in the interest of getting this program to as many people as possible, I have made it completely public domain. It may be distributed in any way. My only request is that if you modify the source code, please get a copy of the modified source code to me. If you have any questions or comments, I can be reached at any of the following network addresses: KIMMEL@UMAECS (BITNet) KIMMEL@ECS.UMASS.EDU (Internet) Matt Kimmel on FidoNet node 321/109 INTRODUCTION ------------ Window Term comes in two versions (both are included in the distribution archive). The Stripped version is smaller and faster, but has almost no features. You must use an external program to set the RS232 port when using the Stripped version. The Full version is bigger and slower, but has many features discussed in detail below. It's helpful to read the documentation for both before you decide which is best for you. To install the Stripped version, just copy the file WTERM.ACC to the root directory of a floppy or hard disk. When you boot with that disk, it will be listed in the 'Desk' menu as Window Term. To install the Full version, copy the files WTERMF.ACC and WTERMF.RSC to the root directory of a floppy or hard disk. The Full version is listed in the Desk menu as Window Terminal. Stripped Version ---------------- The stripped version, as mentioned above, is much smaller and slightly faster than the full version. There are two versions of window term in order to maintain as much flexibility as possible. Note that with the Stripped version, you must use an external program (such as the Install RS232 desk accessory or a terminal program) to set the RS232 parameters. When you click on Window Term, a window will open on the screen with the title 'Window Term' (there may be some version information in the title also). This is a full GEM window - you can move it, size it, full it, close it, and select it, just like any other window. When the window is active, anything you type will be sent to the RS232 port, and anything coming from the RS232 port will be displayed in the window. Text will wrap at the end of a line and scroll just as in a text screen. There are two special keys you should be aware of when using the stripped version - ALT-F toggles between the normal text font and the small 'icon' font (the same font that's used for the names of icons). ALT-S stops the text immediately. This is necessary because the terminal is sometimes slower than the incoming characters, and will keep printing backed-up characters after you send a CTRL-S to the remote computer. ALT-S sends a CTRL-S and will not accept any incoming characters until you press ALT-S again. Click on the Window Term entry in the desk menu while the window is open for more information. When the window is deselected (another window is made active), Window Term will send a CTRL-S to the RS232 port. When it is reselected, it will send a CTRL-Q. Full Version ------------ The Full version is larger and slower than the stripped version, but has many extra features. It takes up about 40K of memory, while the stripped version take up about 15K. The Full version has all the features of the stripped version except the ALT-F command (which is replaced by a more flexible function of the same sort). In addition, it has the following features: -Ability to set RS232 parameters, similar to the 'Install RS232' desk accessory -Ability to change the font to any of three sizes (two sizes in color) -An optional cursor -Allows the user to set the size of the RS232 buffer -Ability to save all of the above parameters and the coordinates and size of the window to disk Each of these features are discussed in detail below. To access them, click on the 'Window Terminal' entry in the Desk menu while the window is open. You will be presented with a menu. Click on the option you wish to use. Each of the options are discussed below. About Window Term gives some information about the program and credit to the author. Set RS232 Parameters allows you to set the Baud Rate, Parity, Word Length, and other RS232 parameters. It's very straightforward - just select the parameters you want active, and click on the OK button. If you do not want to set the parameters after all, click on the CANCEL button. Set RS232 Buffer Size allows you to set the size of the RS232 buffer. The higher your baud rate, the bigger the RS232 buffer should be. I find that 16K is usually more than enough for 1200 baud. This program has not been tested with 2400 baud or higher; please let me know if there are any problems with that. If in doubt, though, make the RS232 buffer bigger. Set Character Size allows you to select any of the ST's three character sets - the 'monochrome font', which is the character set used with the monochrome monitor normally, the 'color font', which is the character set normally used with the color monitor, and the 'icon font', which is the tiny font used at the bottom of most icons. Using the icon font, you can get a full 80 columns by 24 lines in a relatively small window. Cursor on/off lets you select or deselect the cursor. The cursor is useful when editing lines and such, but it slows down the terminal quite a bit. Note that backspaces are destructive when you are not using the cursor, and non-destructive when the cursor is active. I don't recommend using the cursor unless absolutely necessary. Save settings saves all the above parameters and the position and size of the window to a file called WTERMF.INF in your root directory. The full version of Window Terminal will attempt to read this file whenever it is booted. If it can't it sets up the default parameters. Cancel cancels the menu. Notes and Program Revisions --------------------------- Thanks to Rick Flashman, who beta tested this and offered many valuable suggestions. This program was developed using the Megamax C Language Development System, K-Resource, and the Gulam shell. Version 1.0 - released 8/2/87 - first version. No known bugs. Of course, that doesn't mean there aren't any! /* resource set indicies for WTERMF */ #define MENU 0 /* form/dialog */ #define SETRS232 4 /* BUTTON in tree MENU */ #define SETSIZE 5 /* BUTTON in tree MENU */ #define BUFSIZE 6 /* BUTTON in tree MENU */ #define CURSON 7 /* BUTTON in tree MENU */ #define SAVESET 8 /* BUTTON in tree MENU */ #define MCANCEL 9 /* BUTTON in tree MENU */ #define ABOUT 10 /* BUTTON in tree MENU */ #define RS232 1 /* form/dialog */ #define B19200 4 /* BUTTON in tree RS232 */ #define B9600 5 /* BUTTON in tree RS232 */ #define B4800 6 /* BUTTON in tree RS232 */ #define B2400 7 /* BUTTON in tree RS232 */ #define B1200 8 /* BUTTON in tree RS232 */ #define B300 9 /* BUTTON in tree RS232 */ #define EVEN 12 /* BUTTON in tree RS232 */ #define ODD 13 /* BUTTON in tree RS232 */ #define NONE 14 /* BUTTON in tree RS232 */ #define BIT8 17 /* BOXCHAR in tree RS232 */ #define BIT7 18 /* BOXCHAR in tree RS232 */ #define BIT6 19 /* BOXCHAR in tree RS232 */ #define BIT5 20 /* BOXCHAR in tree RS232 */ #define STOP1 23 /* BUTTON in tree RS232 */ #define STOP2 24 /* BUTTON in tree RS232 */ #define FLOWNONE 27 /* BUTTON in tree RS232 */ #define FLOWXON 28 /* BUTTON in tree RS232 */ #define FLOWRTS 29 /* BUTTON in tree RS232 */ #define FLOWBOTH 30 /* BUTTON in tree RS232 */ #define ROK 31 /* BUTTON in tree RS232 */ #define RCANCEL 32 /* BUTTON in tree RS232 */ #define FONT 2 /* form/dialog */ #define MONO 3 /* BUTTON in tree FONT */ #define COLOR 4 /* BUTTON in tree FONT */ #define ICON 5 /* BUTTON in tree FONT */ #define FOK 6 /* BUTTON in tree FONT */ #define FCANCEL 7 /* BUTTON in tree FONT */ #define BUFSET 3 /* form/dialog */ #define BSIZ 2 /* FBOXTEXT in tree BUFSET */ #define BCANCEL 3 /* BUTTON in tree BUFSET */ #define BOK 4 /* BUTTON in tree BUFSET */ $`9pWindow Term OptionsSet RS232 ParametersSet Character SizeSet RS232 Buffer SizeCursor On/OffSave SettingsCancelAbout Window TermSet RS232 ParametersBaud Rate192009600480024001200300ParityEvenOddNoneWord LengthStop Bits12Flow ControlNoneXON/XOFFRTS/CTSBothOKCancelSelect Font Size8x16 ("Monochrome")8x8 ("Color")6x6 ("Icon")OKCancelPlease enter the new buffer size:16384_____99999CancelOK??@?~D$89 &  ! : O b x    %  2                8765    & + 4 <  A%D("  K\p~ % # !   '((MENUSETRS232SETSIZEBUFSIZECURSONSAVESET MCANCEL ABOUTLRS232LB19200B9600B4800B2400B1200 B300 EVEN ODDNONEBIT8BIT7BIT6BIT5STOP1STOP2FLOWNONEFLOWXONFLOWRTSFLOWBOTHROKBOTH RCANCELFONTELMONOELCOLORLICONLFOKLFCANCELBUFSETBSIZTBCANCELBOKCEL`XvN N.K mNf]` m"m -So Q m -SBQ(m)MO*mNN ?<NrH?<A?<NAX <B@SfLNuNV1R lf* |0C"C |(C"C `& |0Cp"Cz |(Cb"C |CT"C |,CF"C |$C8"C CA!Q1| 1|1|1|X.1|!|C!I2 xVEn"Xgf! AC !@4C!IC!I*"| C!I02C!I<9|1|$ lg1|$1|( lf1|( lf| 1|`01|,.1|:1|0< lg0<C/1@8 |C"C 1R`>H`:/C"Q"ta`/t`/t`LNsHA\"h Qf/taLNsH9+gB9/A1|t hf<gj<Cg h$g|<g `p1|$"h<2Rh1|8 h(f81| C"Q$|e/`,|e/`1| 1|8/` hf"h Qgΰ<f$Rh2(| g1|9/`<g<f1|1|B2( ӨӨ"(C"Q$df1|8"h0RQR( h(f41| |e/`L|e/`81| 1|8/` C"Q$("t/`HAn1|"h Qf hg hfRh( /` hf,Rh1|1|1|""<( /` hf`2("h1( h$f(BIh"r4(""g h!"Q/Rh2( hfbRh`Z hf,Rh h$gRh/`2"/`& hf#/Rh` NsNsNs@|A$ hgfRh0(.hdV1| hf" hfFNu1|/FNu h:f9/FNu1|/FNuA"h2|g@|Hz?< NN\FA1| : |0 : |( : | : |, : |$ : | Nu0 fNh0|f0 ztN0/|f?|`4  * Paul&Corinne *N^NuNV1R xVE"Xgf!<`~! B9`|",Ʞ|f Ҽ.`|f Ҽ$`ҼA A0HA"0 0A A AC"`@|B z4 z(BB20HA4a0B2d0HA4aB2 0HA4a 0aFNu$H2:|gPC,@|g"2<QQY`Qa>Nu2<YHQa&NuC>@2< &QaNuRC|f D(BCNuNu<~fffnvfff~<88~~<~ff 00~~~~  ff~< < <8 8P1RN^NuNV/N^NuNVNBgHl?<=N BP9@ lmHHl/< ?,?<?N  HlNhXH)@ ,/ </N )@` )|?,?<>N X/N @X``|g`^Hlx?,N\HlV?<Np\=@ nf,9|Hz?<&N \0,gHzz?<&N \``|g`*Hz?<&N \HlH?<N\Bl``|g`*Hzp?<&N f\Hl?<N\Bl``|g`*Hz.&n :<'` 0H :0Gn` <Hƍ0Ş@0H :0|0 EnLN^NuNVH ,&@,,/,</N>,XSB` &&&&&R mLN^Nu)I)J"/0<NB"l$lNu NV9nL0.| A" AA-H=|` nR2.ALH0Rn nm/,N.X0,N^NuNVAL)HA,)HA )HA)HA)HA)HA)H?< NXT9l0<N^NuNV9n 9n 9n 9n9n9n9n9n9n9n9n9n 9n "9n"$)n$9n(&9n*(?<NT n,0 n00 n40 n80 n<0 n@00,N^NuNV9n )n ?<#NTN^NuNV9n )n ?<4NfTN^NuNV?<MNTT n0 n 0 n0 n00,N^NuNV)n)n ?<ZNT n00,N^NuNV?.NT nn0<`?.?<>NX9@g0<`0<N^NuNV?.?<LNXN^NuNV/ A&H`0+ |g/ N*X A"Ҽm?.NT&_N^NuNV/ &n/ NDXJ@g0<`00+ |g /+NXBk ?+ N,TJ@g0<`0<&_N^NuNVH&n0+ |f0<`.0+ |gL0+ |f0<`l0+ |g?<B?+ N0P?/+?+ NP @f0<`6k -K k o?<B?+ NP n!@&Bk0<LN^NuNVH$.". BnJlVnDJlRnDvd`Bbd nmDdD-@-A LN^NuNV/BnJlRnDJ lRnD 0. -@0.n0. nngD -n N^.JNuN^NuNV nl <`?.?./. ?<BN -@ m .`?<?.B?<BN` -@?<?.B?<BNF -@ nf .Ю -@ `$ nf .Ю -@ `0.g <`b . oHn . /?.?<@N Bg?./. ?<BN ]|9@g <` `Bl . N^NuNV/.?<IN\N^NuNVBn`&0.A0nf0.ABPRn nLmN^NuNV?>.=|0A"HPgXHf0(>N^Nu)I)J)_NN"l$l/,Nu)I)J)_NA"l$l/,NuNV n "n fN^NuNVH0&n$K`Rf L N^NuNV0. Sn J@g6 nH| f?< ?<NX nRH??<NlX`N^NuNV0. Sn J@g nRH??<N>X`N^NuNV0. Sn J@g nRH??<NX`N^NuNVH0&n $KAT-H nf?./ N4\=n`H nf?./ N`\=n`* nf?./ Np\=n` -KBn?.N>TJ@f ndH| f |o@ H-@/./.?.?<@N< 9@Hg0<`0,n/./<?.?<@N 9@ @g0<`hRnR -@`R``` 6.ƼЃ$@ H-@/./.?.?<@N =@9@Hg0<`Bl0.L N^NuCV[3][DC Transfer| |Current block =      ][ Abort | OK ]C"2"2 2"2"2"22"2"2"22"2x9|NuDCTRAN.SET[3][ DC Transfer| | Not enough memory!!!][ What the... ] DC Transfer-1.0DA:\*.**.*[1][ DC Transfer| Demo Version 1.0| written by Paul Lee| (C) Double Click Software 1987 ][ Send | Exit ][2][ DC Transfer| | Please select transfer type][CRC|CRC 1K|Checksum][1][ DC Transfer| | Buffer too small!][ OK ][2][ DC Transfer| | Other end aborted transfer!][ OK ][1][ DC Transfer| | Send complete!][ OK ][2][ DC Transfer| | Buffer overflow!][ OK ][2][ DC Transfer| | Begin transfer! ][OK|Abort|Exit][2][ DC Transfer| | Please stand by! ][ OK ]CON:AUX:PRT: PROGRAM: Allows background XMODEM transfers. Only SEND for the demo version. :-) BUFFER: To allocate a bigger buffer for DC Transfer, create a text file 'DCTRAN.SET' with the buffer size you desire. Example. 200[CR] = The program will multiply this value by 1K. This example will create a buffer size of 200K. Note: Default is 32K. TRANSFER: Step 1 - Select the file you wish to send. " 2 - " " " protocal. " 3 - Return to your terminal program to tell the BBS or the other end you are ready to send. " 4 - When the other end is ready to receive, return to the desk accessory, and select [OK] to start sending! PROBLEMS: 1) Does not survive reset. 2) Resolution changes will cause the buffer to be reallocated. 3) " " during the transfer is not recommended! - Paul 10/30/87 ******************************************************************** Deze diskette is samengesteld door de Stichting ST, Postbus 11129, 2301 RH Leiden. Onze bibliotheek van public domain programma's omvat op dit moment (zomer 1988) al zo'n drie honderd disks. Daarop vindt u programma's op elk gebied, van tekstverwerker en database tot de leukste spelletjes, de fraaiste tekenprogramma's en de handigste utilities. Ook bevat onze bibliotheek een speciale afdeling voor public domain disks met Macintosh software, die te gebruiken zijn onder de ALADIN emulator. Deze MAC-PD serie bevat tot nu toe ongeveer vijfendertig disks. ******************************************************************** U vindt in het twee maandelijks tijdschrift "ST" (Onafhankelijk tijd- schrift van en voor gebruikers van Atari ST computers) een overzicht en een bespreking van de inhoud van de nieuwe public-domain diskettes. Dit tijdschrift bevat tevens een bestelkaart zodat U vlot over de software kunt beschikken. De Stichting ST geeft ook een speciale PD catalogus disk uit. ************** Deze public domain disk is geproduceerd en gedistribueerd door: Stichting ST afd. Software Bakkersteeg 9A 2311 RH LEIDEN ************** Ondanks onze controle komt het af en toe voor dat een diskje niet goed is gecopieerd.Mocht U dit overkomen, aarzel dan niet en stuur de defecte disk aan ons terug. U krijgt dan direct een vervangende disk toegestuurd. ************************************************************************ Teneinde het voor ons mogelijk te maken om productie fouten op te sporen en vervolgens in de toekomst te vermijden, zijn alle disks, geproduceerd door de Stichting ST, voorzien van een groen productie nummer. ************************************************************************ ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ========== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ========== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ======== SORRY, THIS SECTOR CANNOT BE READ FROM FLOPPY DISK BY ST RECOVER. ======== ==