2IMGCdrP@@@ )4   "D}, M ) TiTWiWg2 Ԣ` H i`iK ԩ`GៀL` HK!HKH@L,0 )i/ XA)Lb +)D\]g_ ?/"p@͸  ɜUUɛ`ff  ܪ330 ˩ʙppʙppp˩pwp̺ppwwwwp&Xb0qqwqqwqwqwwqwqwwwwwwwqwqqwqwwwqwwqwqwwqwqqwwwwwqwwqqqqqqqqqqqwqqqqqqqqqwqqqqqqqwqqwqwwqwqwqwwqwqwwwwwqqwqqwwqqwwwqwqwqqwwqqqqqqqqqwqqqqqqqqqwqqqqqqqqqqwwwwqwwqwwwqwwqqwwwwqwqwqqqwqqwwwqwqwwqqqGSINF.217 . ' @%INFOSA 0 FINDER.DATA0 pTITRES69 )GSINFOS21AV3V3'GSINFOS?I-5ARTICLES 7 GS.TV9P.MANET-' J.DESTELLE3 LES.PLUS)ICONS B* FINDER.ROOTpTitres 1.5 - Vincent Bobe - 1991 Ce programme vous permet de grer un compte-titres. Vous pouvez enregistrer tous les mouvements de liquidits et de valeurs boursires, dresser des rcapitulatifs de ces mouvements par titre ou par anne, valuer votre portefeuille, connatre le rendement de vos investissements... Le fichier texte "Titres.doc" vous renseignera en dtail sur les possibilits du programme. Pour l'installation du programme sur votre disque et le shareware, lisez ce qui suit. Contenu du 0\ TITRES.DATA.GSS6GS.TVLES1TA.GSSTLES.PLUSLEA.GSST< J.DESTELLEA.GSSTz FINDER.DATA.GSS5zINFOSR21CK.GSSz GSINFOS21TA.GSSTP.MANETS1TA.GSS5<GSINFOS21TA.GSS5ARTICLES1TA.GSS<ICONSLUSLEA.GSS A propos de Kangaroo 1.2 Une communication d'Etienne Petitjean de BrainStorm Software concernant la nouvelle version 1.2 de Kangaroo De nombreuses routines ont t modifies dans Hierarchic et dans Kangaroo, une nouvelle application apparat KRemove. *Hierarchic - La vesrion 1.2 est totalement compatible avec le systme 6.0 et les nouvelles structures du Menu Manager. - Un gros bug faisant disparatre des menus dans la barre de menus principal, notamment avec Fontasm a t fix. - Les patchs au boot ont t modifis et des bugs mineurs fixs. *Kangaroo - Nouveaux patchs au boot pour une compatibilit parfaite Apple IIGS ROM 01 et ROM 03. - Bug d la fermeture du StandardFile Tool causant un plantage avec SoundSmith lors de la rouverture d'un dialogue corrig. - Ajout d'une option dans la fentre Prfrences vitant de tester la prsence de fichiers sur les disquettes 3.5 et 5.25.Pour les lecteurs 5.25, seul le nom du lecteur est affich dans le menu "Volumes", Kangaroo ne cherche plus s'il y a un disque ou non dans le drive. - Quand on slectionne l'option "Configuration des groupes", le Pop Up se positionne maintenant automatiquement sur le groupe de l'application courante. - D'autres bugs mineurs ont t fixs. *Kremove Nouvelle application ajoute Kangaroo 1.2 qui permet d'effacer les fichiers Kangaroo.data et les fichiers Finder.Data. Le menu "Updater les devices" sert reconstruire le Pop Up qui contient tous les volumes en ligne. BrainStorm SoftWare SA Technopole Nancy Brabois 6, alle Pelletier Doisy 54600 VILLERS LES NANCY Tl: 83 61 44 70 Fax: 83 57 57 65 ~f)ZDERNIERE21ADES3ZH MULTI.GS21ADES37FALLING.GRADES37REVUE.PRESSE.217H DOMAINEPUBLICFO FINDER.DATASTFOANNONCEOATASTFOHKANGAROOATASTFO A propos des Domaines Publics: ****************************** Les fanas d'Hyperstudio connaissent certainement Mr. Jean-Pierre Desseaux auteur de la pile 'Rois de France' dont nous diffusons la version dmo ( DP 197 ). La version 3.0 de sa pile est aujourd'hui disponible en ShareWare ( 130,00 F ) l'adresse suivante: Mr. Desseaux Jean-Pierre 1, place de Tende 06300 NICE Il s'agit d'un tra-.Les petites annonces A VENDRE: ********* MATERIEL: 1-MODEM UNIVERSEL APPLE/SECTRAD Modle 300/1200 Bauds Boitier Alimentation + divers cables pour II C ou MAC SE, Manuels+ VERSION COM +VERSION TEL . Le tout Prix 800 Francs 2-THUNDERSCAN II C II GS +Divers accessoires & Logiciels THUNDERSCAN II C II GS modes d'emploi Prix 600 Francs 3-CARTE CONTROLEUR DISQUE DUR MDB 20 BREJOUX Et disque pouvant servir de source de pices detaches ,modes d'emploi Le tout Prix 200 Francs 4-TABLETTE GRAPHIQUE KOALAPAD II C Prix 250 Francs 5-CARTE UNIVERSAL DISK CONTROLER CENTRAL POINT SOFTWARE (Disque 3.5 sur IIe) POM'S Mode d'emploi franais Prix 250 Francs. 6-PACKAGE SYSTEME EXPLOITATION MEMDOS 6502+CARTE MEMDOS+Manuels Correspondants Prix 150 Francs LIVRES: 1-LE II GS EPLUCHE PRIX 50 Francs ECRIRE: MR JP BUSQUET 313 RUE LECOURBE 75015 PARIS Envoi contre remboursement ventuellement. A vendre ********** Carte d'extension mmoire Apple 1 Mga pour Apple II GS : 200 FF Disque dur CMS 60Mo (Seagate ST277N), avec carteARTICLESv ' '(KANGAROO K( ( 'ANNONCE  FINDER.DATA3 p-DOMAINEPUBLIC5/REVUE.PRESSE.211##/FALLING.GRADES3` 0>0*MULTI.GS21i5  (DERNIEREy+7 7 %PLUME+S;;%TRUCS^ ) ) )EDITORIAL1. . )POINTLESS  SCSI CMS et carte SCSI Apple Rev C: 2'000 FF RamKeeper Rev C, avec transformateur 220/110V: 400 FF TransWarp GS 6.25MHz avec 32k cache: 1000 FF Ventilateur interne Apple pour IIGS: 100 FF System Saver IIGS Kensington, avec transformateur 220/110V: 150 FF RamFast 256k Rev.C (la carte SCSI la plus rapide pour IIE/IIGS): 700 FF Jean-Claude Demole 33, chemin des Petits-Bois CH-1228 Plan-les-Ouates (Genve) Suisse Tl. 194122 794 3018 A vendre ********* VEND APPLE //gs : 1,5 Mo ; lecteur 5' 1/4 et 3' 1/2 ; TITRESv/ ' 'VTITRES}nn&COMPTE*TITRES.DOC)n%n%,LISEZ.TITRES 9 9 )BOSTON.10ȱ#!t )GENEVA.10ȹ0{ FINDER.DATAɿ0 pYr#D"' ,@ main 'D"""")  ;8[iIH2" " H"{i+k ;8[iHH"HH"HH""2:"xx"" !:"FF" .:"" ;:"""dM:""dZ:""dg:""H  "hHH"{i+k92200 Neuilly-PRSTUGHFEDVWX 1-0 I1Y /(;x  _3kP&p)P8p@   7654 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ /Seine78 Bd Victor Hugo Vincent Bobe2de l'utiliser, envoyez 50 F l'adresse suivante :1Mais si vous le trouvez intressant et choisissez1Vous pouvez le copier et le distribuer librement.Ce programme est en shareware. ;8[iHH""EHH"6H'"h)*H Y"h"""""""""""""""""""zq8h,0` H`GNU92@\+cjqqx ,"{i+k ;8[iH"h"2"HHHI"HHHI"HHHI"HHHI"HHHI"HHHI"H"hHH"h%HH"hH"8pIHH"h%"" H'"h)*H Y"h"{i+k ;8[iH"hHHH"hn""HH"HH"HH"""H"HH"{i+k ;8[iHHC"hH"9""H"h*"{i+k ;8[i.,%{i+;ik ;8[i{iHHH"H{iH"h{iH{iH "{iH{iH "{iH{iH "{iH{iH "{iH{iH "{iH"H:"{iH"{i+  ;ik ;8[i"""{i+;ik ;8[iHHa"h{i+;ik ;8[iEECC{iH"{iH")8pI\AA{iH"{iH")8pIZ {i+;ik   ;8[i{iHHH")dH{iH{iH"hh{iH"h8pIH{iH{iH"hh{iH"h 8pIdH{iH{iH"hh{iH"h"hH{iH{iH"hh{iH"h8pIH{iH{iH"hh{iH"hH{iH{iH"hh{iH"h: 8pIdH{iH{iH"hh{iH"h"h:{i+;ik ;8[iHH"""HH"{i+kRetrait de liquiditsVersement de liquidits ;8[i 8pI0$  H0"8pI0H1"8pI0H1" 1"1"8pI00:H%"h!:H%"h#HH"hHH"HHHH0"hH"ᩫ 8pI0: {i+k ;8[i8pI8mH "hi)8pIHHHA"HH"h)HH" ":"{i+k ;8[i"H"h8HH:""{i+k ;8[i"H"hc8HH:""{i+k ;8[iHHHH"hHH0"h݆ߠݪ݅نHH٢""hՆH٢#"h{iHH)" HH{iH"{i+;ik ;8[i{iHHH"HHH0"hن۠٪مՆ{iH)Hբ "{i+  ;i k ;8[i{iHHH"y y {iH"k{iH"{iH{iH"{iH"hHH{iH ":{iH{iH "HH{iH "{i+;ik ;8[i{iHHH "{iH"dž{iH{iH "{iH{iH "7{iH{iH"H"hHH{iH"{iH""H  "h8pI{))0)H") )).)H"HH"{i+;ik. ;8[i{iHHH "{iH{iH"h{iH{iH")H@@{iH"h8ݢ);{iH<<{iH"{iH{iH"B8{iH::{iH"{iH{iH"HH{iH"{i+;ik0.00. ;8[iHH"hH"h&  "@HH"HH"HH"!m E{i+k ;8[iHH"hۆݭ&ۦۦ%{iH{iH"h{iH"hэӍՍ׍ٍ{iH{iH"h{iH"h{iH"{iH{iH "h{iH"h{iH "HH"ۦsJ"J"U"ۦ~:" :"))"ۦ}{iH "{iH{iH "{iH "{iH "{iH "z{iH "{iH{iH "{iH "{iH "{iH "{iH"h{iH&&{iH"{iH""ۦ""HH"ۦ% `^lJ"U"HH" j:"HHHHH0"hH"h{iH:H%"h!H"h{iH{iH"{iH"HH"ۦ% ۦ%HH:H*"h eH":H""h 8pI.HHHH0"hH"HHHH0"hH"HHHH 0"hH"HH{iH:H""heH"h{iH"HH{iH:H""h H"h{iH"HH {iH:H""h eH"h{iH"HHHH0"hH"HHHH0"hH"HH"HHHH 0"hH"HH ":H""h AHH{iH:H""heH"h{iH":H""h mHH{iH:H""h{iHeH "{iH "{iH"h{iH"PnJ":"U"HH"HH"HH" t~J"U"HH"}:""d}:":H""h @"P"@"0"  HH":H*"heH"%HHHH0"hH"{i+kRetrait de liquiditsApport de liquiditsVente de titresAchat de titresNature :Nombre de titres possds :  FMontant de la transaction ;8[iH"h0 %HH"h{i+;ik ;8[i)8pI0媽)Ɏ 媩{ 媽)ɏ 媩} 媽)ɍ 媩\ 媽)ɝ 媩| 媽)Ɉ 媩@ 媽)ɐ 媩e @{i+k ;8[iHH"HH"H  "hHH"{i+k ;8[i "8pI0P :::: ::: ::  : "HH@U "hHH"hHH"hHH"hHH"hHH"hHH"hHH"hHH"hHH "hHH "hHH "hHH"hHH"hHH"hHH"hHH"hHH"hHH"hHH"hHH"h             v !x #z %| '~ ) + n Bp Dr Ft Hf ch ej gl i_ a c e W Y [ ] L N P R T V E G I K 8 8 ". )0 +2 -4 /6 1" J$ L& N( P* R, T k m o q s u"{i+k de Dcembre de Novembre d'Octobre de Septembred'Aot de Juilletde Juinde Maid'Avrilde Mars de Fvrier de Janvier ' (.1?Wvjzh~jhxxFF69PSjm{~ DDjh&$   i."T& -IF4@;6B@IuKPTWB^)!el szC/!i0 l"FGNU92@\+cjqqx  @(F*LXrFuyxy}&&~|ggzx**fduu^\e0Y$FT<i@EYi^adipO"tx|iiii0ii  ` v ? y ? |   =  =         ;  ;      `  d  d & d5 = J {(N {(j dy  d  d  y(, d; C P {(T {(y }             & 1 < D M V c n v           l  (  l  (  !)-;vDHgvkq~zg.vvv l vvvv"<?MQ\P_PiPlP    ss t-- -- p  Z     8  --+.1 h5-8-;>A-D-G LOR-U-X o-v---- 8------ 8--   6tQ `:c:o 66  44   TW](c*fDips~:D:D*(0*V:pu~ ~  8G~MP_ cgy~PPPPPP# #  ?BH _bx{   ) , ; ?BQ chps|PPPP!%BE H T\ l b(f  D '/ l 5)58)5AEM l S jn l t)1 l 7 < KOSck l q t }t  " % (,4 l : FJZb l hktt l   l  t PP'P*P4P7PAEPT_cnPqPPP l  DHV_ l ehk 5n 5w tN Q \ b De k D   D D!-!C!K!a!i!!!!!!!!!j"h" "j"h" "&" +"D."D9"j="hf"o"|""v""v""v""v"""v"v" ### ##$# *#-#8# >#A#L# R#U#`# f#i#t# z#}## ### ### #x#z# #p#r# #t#v# #|#~$ $h $j$ $d$f($ .$`1$b<$ B$lE$nP$ V$\Y$^d$ j$Xm$Z{$h~$h$v$v$$$$$$$$$$-$/$y(${($}($($($(%(%(%(%(%( %(#%{''%{+%}'/%{3%'7%{;%'?%{C%'G%{M%'Q%{W%p'[%|_%r'c%|g%t'k%|o%v's%|w%x'{%|%z'%|%h'%6|%j'%8|%l'%:|%n'%<|%`'%W|%b'%Y|%d'%[|%f'%]|%Y'%x|%['%z|%]'%||%_'%~|%Q'%|%S'%|%U'&|&W' &|&F'&|&H'&|&J'#&|'&L'+&|/&N'3&|9&P'=&|C&?'G&|K&A'O&|S&C'W&|]&E'a&|g&|j&|m&2'p&2'v& z&('~&}&*'&}&,'&!}&.'&#}&0'&%}&'&>}&'&@}& '&B}&"'&D}&$'&F}&&'&H}&'&_}&'&a}&'&c}&'&e}&'&g}&'&i}CDACSEGDEFPROCDSEG~globalJ LONGGLOBALSNDA STACKSIZEU TOOLERRORCHK_PASMAIN  _PASBLKMOVE STATICUNIVTOOLUSERTOOLGSOSFORWARDEXTERNALINLINE.p.o.p.o.p.o%B0PpXʈ"TDbH KZh+(z@k`8x۪[{;Bieugwm}oc)%5'7-=/?# $4,<i ,@ ~global iCDACSEGDEFPROCDSEG~globalJ LONGGLOBALSNDA STACKSIZEU TOOLERRORCHK_PASMAIN  _PASBLKMOVE STATICUNIVTOOLUSERTOOLGSOSFORWARDEXTERNALINLINE.p.o.p.o.p.o%B0PpXʈ"TDbH KZh+(z@k`8x۪[{;Bieugwm}oc)%5'7-=/?# $4,<:IEUGWM]O_CL\ ,@ ~second CDACSEGDEFPROCDSEG~globalJ LONGGLOBALSNDA STACKSIZEU TOOLERRORCHK_PASMAIN  _PASBLKMOVE STATICUNIVTOOLUSERTOOLGSOSFORWARDEXTERNALINLINE.p.o.p.o.p.o%B0PpXʈ"TDbH KZh+(z@k`8x۪[{;Bieugwm}oc)%5'7-=/?# $4,<:IEUGWM]O_CL\L ,@ ~Plus LCDACSEGDEFPROCDSEG~globalJ LONGGLOBALSNDA STACKSIZEU TOOLERRORCHK_PASMAIN  _PASBLKMOVE STATICUNIVTOOLUSERTOOLGSOSFORWARDEXTERNALINLINE.p.o.p.o.p.o%B0PpXʈ"TDbH KZh+(z@k`8x۪[{;Bieugwm}oc)%5'7-=/?# $4,<:IEUGWM]O_CL\W\ ,@ deux \ ;8[i0""8pI%:0"0"0"0" """{i+k ;8[iHH"7"":"H<"" :"" :"""n :"||" :"tt""{i+kLibellDbitCrditDate ;8[i8pIc8pI0J: i:H""h8 pId{iH: i:H""h H"h{iH{iH"{iH" "{iH: i:H*"heH"hh{iH{iH")0{iH"{iH{iH"{iH"H{iH: i:H*"heH"hh{iH"h:H!"h{iHeH!"{iH{iH"hh{iH"{iH"{iH"{iH{iH: i:H*"heH"hh{iH{iH"{iH"{iH: i:H""heH"h{iH{iH": {iH{iH"eH{iH"8pIg8pI0N: i(:H""h8 pId{iH: i(:H""h H"h{iH{iH"{iH" "{iH: i(:H*"heH"hh{iH{iH")0{iH"{iH{iH"{iH"H{iH: i(:H*"heH"hh{iH"h:H!"h{iHeH!"{iH{iH"hh{iH"{iH"{iH"{iH{iH: i(:H*"heH"hh{iH{iH"{iH"{iH: i(:H""heH"h{iH{iH"m: {iH{iH"eH{iH"{i+k F,  19  1 titre, le titres, le  F,  19  1 titre, le titres, le ;8[i8pI^H{iH"hh{iH"hH{iH"hh{iH"hH{iH"hh{iH"h8 pIMH{iH:H*"heH"hh{iH"h8pIH{iH:H*"heH"hh{iH"h%H{iH:H*"heH"hh{iH"h8pI%H{iH:H*"heH"hh{iH"h%H{iH:H*"heH"hh{iH"h%H{iH:H*"heH"hh{iH"h8pI%8pI: 8pI0K8 pI0:H*"h:H*"heHeH ":H*"h:H*"h eH eH!":H""h:H""heHeH ":H""h:H""h :H""h:H""h eH eH ":H""h:H""heHeH ":H""h:H""h  H "hH "heHeH "H "hH "h{iHeH "{iH "eH{iH " H "hH "h{iHeH "{iH "eH{iH "H "hH "heHeH ":{i+k ;8[i H {iH "ߍ8"H<HJ"U"<H:"<H<"7"8pI;H:"H<"(H:"(H<"6:"H<"(:"(H<"7"8"=HHJ"U"H:"H<"8"HhHJ"U"hH:"hH<"8"iHHHJ"U"8pI"::{iH{iH " {iH{iH "{iH{iH "{iH"٭8{iH{iH " {iH{iH "{iH{iH "{iH""hۥٯ88pIr8{iH{iH " {iH{iH "{iH{iH "{iH"۩8pIDo::٥o::ۥ8pIٯ8pI۩  HH"8pI0{iH:H "h:H "heH{iHeH "{iH "{iH "{iH"h{iH":H "h:H "heH{iHeH "{iH "{iH{iH "{iH{iH "0""m:"" {iH"{iH"8pIۥمݥۅ8pI0"8m "hi H:"{iH:H*"heH"hh{iH"H:"{iH:H*"heH"hh{iH"+H:"{iH:H*"heH"hh{iH"{iH:H""h{iHeH "{iH "{iH"h{iH":H""h{iH{iH "eH{iH "0""":H*"h eH!":H""h b {iH:H""h H"h{iH {iH"{iH":H""h b {iH:H""h H"h{iH {iH"{iH"mH:""݂88pI8""H8Hi;HHJ"U"8H:"H8H<"8 H:"h8 H<"  HH"" 8H:" "::H:" ""H "hH "heH{iHeH "{iH "{iH "{iH{iH "{iH "{iH"h{iH"::{iH{iH "{iH "0""H "h:H "heH{iHeH "{iH "{iH ":H "h:H "heH{iHeH "{iH "{iH{iH "{iH{iH "0:H "heH{iH "{iH ":H "heH{iH "{iH "{iH{iH "{iH "p:{iH"h{iH"8"H "h:H "heH{iHeH "{iH "{iH ":H "h:H "heH{iHeH "{iH "{iH{iH "{iH{iH "p:H "heH{iH "{iH ":H "heH{iH "{iH "{iH{iH "{iH "p:{iH"h{iH"8"   2 {iH"{iH"v :H!"heH {iHH"h{iH {iH"{iH"J {iH"{iH"r8H:"""r::H:" {iH"{iH""HH"8"{i+k. Solde au . au du . 19du mois complet.Relev SoldeTotaux Vente de  Achat de Solde au ;8[idd8 pIH{iH:H*"heH"hh{iH"hH{iH:H*"heH"hh{iH"h%:F 8pI:8 pIH{iH:H*"heH"hh{iH"h8pIH{iH:H*"heH"hh{iH"h8pI :9 ("HY"hQ :ߥ ߯ :: ݥ"h%{iH"h{iHg.g.{iH"h{iHe.e.{iH"h{iH{iH"{iH": ݯ"h%{iH"h{iHc.c.{iHH"h{iHa.a.{iHH"h{iH{iH"{iH"}8pI0sH{iH:H*"heH"hh{iH"h8pIH{iH:H*"heH"hh{iH"h8pI0%H{iH:H*"heH"hh{iH"h%H{iH:H*"heH"hh{iH"h8pI%H{iH:H*"heH"hh{iH"h8pI0%H{iH:H*"heH"hh{iH"h%H{iH:H*"heH"hh{iH"h%H{iH:H*"heH"hh{iH"h8pI0%H{iH:H*"heH"hh{iH"h8pI0%8pI +"HY"h8pI0_H{iH:H*"heH"hh{iH"h8pI:H{iH:H*"heH"hh{iH"h%H{iH:H*"heH"hh{iH"h8pI%:H{iH:H*"heH"hh{iH"h%H{iH:H*"heH"hh{iH"h%H{iH:H*"heH"hh{iH"h8pI%:8pI ߯:ݥZ:ߥ ߥ:: ݥ"h%{iH"h{iH_._.{iH"h{iH].].{iH"h{iH{iH"{iH"{iHH"h{iH[.[.{iHH"h{iHY.Y.{iHH"h{iH{iH"{iH"{iHH"h{iHW.W.{iHH"h{iHU.U.{iHH"h{iH{iH"{iH""{iH:H*"heH"hh{iHS.S.{iH:H*"heH"hh{iHQ.Q.{iH:H*"heH"hh{iH{iH"{iH"{i+k............ ;8[i 8pI0$HHH66"HHHH0"hH("HH""pHH"8pI%(0" 0"0"0""H{iH"h{iH"hHY"h{iH{iH"h{iH"h{iH"8pIHY"h{iH"h{iH"{iH"h{iH"{iH{iH"h{iH"h{iH "{iH{iH "h{iH"h{iH "{iH "{iH{iH "{iH "{iH "{iH " "8pI[8pI0@:H%"heH"  :H%"heH!"( 1":H%"h#:H"h:H%"he:H%"h:H%"h!m!":H*"heH ":H*"h eH!":H""heH ":H""h :H""h eH ":H""h{iH "{iH "eH{iH ":H""h )H "heH "H "h:H "h{iHeH "{iH "eH{iH "H "h:H "heHeH ""HHHHH0"hH"h 8pI0$HHH66"sJ"U"PJ":"HH"HH"HH"HHHH0"hH("HHHHH0"hH"h( ""HH""0""0"0"0"0" 0"0"0"0"{i+k ;8[i 8pI0/HHH@@"HHHH0"hH("HHHHH0"hH"h8pI:H"h  HH"HHHHHH0"hH" j:"8pIHHHHH0"hH"HH" j:"@@{iH:H%"h!H"h{iH{iH"{iH"HH""pHH"  ""0"""(1" 1"1"1"HHHHH0"hH"hdHY"hH{iH"h{iH"hHY"h{iH{iH"h{iH"h{iH"8pIH Y"h:H%"h!8pIHY"h%:H%"heH!"{iH"h{iH"{iH{iH"h{iH"h{iH "{iH{iH "h{iH"h{iH "{iH "{iH{iH "{iH "{iH "{iH " ":H%"h:H%"h!8!:H%"h!-8pI8pI0::H%"h:H%"heHeH!"::H%"h:H%"h!!::H%"h:H%"h##::H"h::H%"he-:H%"h!:H%"h# 0"":H*"heH ":H*"h eH!":H""heH ":H""h :H""h eH ":H""heH ":H""h )H "heH "H "h:H "h{iHeH "{iH "eH{iH "H "h:H "heHeH ""HHHHH0"hH"h  8pI0/HHH@@"J"U" `^lJ"U"P\J":"HH"HH"HH"HHHH0"hH("HHHHH0"hH"h ""HH""0""1" 1"1"{i+kNombre de titres possds : ;8[i8pI0$HHHHFHF"HHHH0"hH("HH"""HH""H{iH"h{iH"hHY"h{iH"h{iH"{iH"h{iH"{iH{iH"h{iH"h{iH "{iH " "":H*"heH ":H*"h eH!"?:H""heH ":H""h h:H""h{iH "{iH "eH{iH ":H""h H "h:H "h{iHeH "{iH "eH{iH "H "h:H "heHeH "H "h:H "h{iHeH "{iH "eH{iH "H "h:H "heHeH ""HHHHH0"hH"h8pI0$HHHGFGF"PTJJ":"HH"HH"HH"HHHH0"hH("HHHHH0"hH"hX ""HH""0""0"0"0"0"{i+k ;8[iHH"HH"HH""HH"ႼHHHHH0"hH"h "HHHHH0"hH"h@H{iH"h{iH"hH{iH"h{iH"h8pI 8pINHY"hHH"HH"HH"W ""-HH"HH"HH"HHHHH0"hH"h{iH"h{iH"{iH"h{iH{iH"H{iH"hh{iH"hH{iH{iH"hh{iH"hH{iH"hh{iH"hH{iH{iH"hh{iH"hH{iH"hh{iH"hH{iH{iH"hh{iH"hH"hH{iH"hKHY"hHH"HH"HH"s ""-HH"HH"HH"%\HH"HH?""0""{i+k ;8[iH'"h*H Y"h"TT"۩x(HH{iH" ""㪧{iHHiH"ݪ݅{iHHiH"{iH"{iH{iH"{iH"""""""""""""""""""""""""""""""""""8pI0:H""heH"":H""heH"":H""h eH"":H""h eH"":H""h eH"":H*"heH"":H*"h eH""H "heH""H "heH""V8pI8pI0:H%"heH"":H%"h!!eH"":H%"h##eH"":H"h:H%"he/8pI8pI0: eH"":H!"heH"": 8pI0:H"h:H/"heeH"":H"h:H/"he!!eH"":H"h:H/"he++eH"":H"h:H/"he--eH"":H"h: :H/"he!!eH""(" 8pI0$  H0"0"0"0"0"8pI+0" 0"0"0"(1" 1"1"1"8pI!0"0"0"1"1"1""0"HHHHH0"hH""HH?"HHHA"HH"{i+kFichier charger : ;8[i/-\\{iPH "PI "{iVH"{iNH{ifH" "{iNH{iNH"0{iN2{i0H "6{iN8<>@D{i6H "{iNH"H""H""H""H""H""H""H""""""H""H""H""H""H""H""""""8pI0:H""heH"":H""heH"":H""h eH"":H""h H"":H""h H"":H*"heH"":H*"h eH""H "heH""H "heH"":8pI8pI0:H%"heH"":H%"h!H"":H%"h#H""o8pI8pI0: H"":H!"heH"": 8pI0:H"h:H/"heeH"":H"h:H/"he!!eH"":H"h:H/"he+H"":H"h:H/"he-H"":H"h: :H/"he!!eH"""""1"{i+kNom du fichier : B"*>B <|?|VtYta.a.s. l  s.  l   $'6 :=L SVY\b oys. l  5 5 d  8   *s.2 l 8 5; 5J dY c l r{u{  d t 8 8 s. l  5 5, d;>M QTc pzs. l   ..  c.#&c.,9Cs.K l U lvs.~ l      s. l  5 5  d( K 8OR^ap tw s. l  5 5 d  l {{  d& t> 8T 8X[gjvs. l  5 5 d  s. l # '+a.8;GJ[ _.b.u y   d( - : = F dU Z g j s d        l   5  5 d       l %  5(  57 dF K f n l t  5w  5 d       l   5  5 d  ) 1 l 7  5:  5I dX ] x  l   5  5 d              " 1 : l @ J l P  5S  5Z  5]  5i m v l |  l  )5 )5 )5 )5   l   l        l   l       l  ' l -  0  7  :  F J S l Y c l i l s v    l   l           l   l  %  % % %   l #, l 25ADP gj}    l  l % %  % %  ! l '0 l 69@CO S[aoi PP PP   -; IgPP PP PP  P P (=P@PF JNYP\Pf w{  U _ vvv vvv)v7v=vNvW_bgkyv l  l % %  $'6 A l P l VYk% n% x }  ww  /Vv\b l kq l  5 5 d l  5 5 d $ l * 5- 5< db l qt   l }* l 036)59)5E P l V b e x l ~       l     l      % ),; BMPfvoPPvvPPvvvv$(CvS V cvq t v l v l % %     069H LvRvy}v l v l     v l v' l -0B% E% O v l % %  v l , QTx{~ v}v l v l % % % %   v  l &v1 l 7:L% O% Y v l % %  v l $'6 [^ v    v      v " %v. l 4{7{@ C OvT c f u y| v  zz  yy    v   v # & x) x, / > \ `  v!!!(!0! l 6! 59! 5H! dW! \!vv!~! l ! 5! 5! d! !v!!!!!"" l " 5 " 5/" d>" D"vc"k" l q" 5t" 5" d" "v""""D" #v#v#v*#vD#y(_# # #g.#g.# #e.#e.# # #w#w# $v$y( $v"$v&$ R$ a$c.d$c.p$vu$ $a.$a.$v$ $ $x$x$ $v$$$$$% l  % 5% 5% d.% 5%vW%_% l e% 5h% 5w% d% %v%%%%% l % 5% 5% d% &v&'& l -& 50& 5?& dN& U&vy&& l & 5& 5& d& &v&&&&& l & 5' 5' d ' %'vA'I' l O' 5R' 5a' dp' u'v'' l ' 5' 5' d' 'v'' l ' 5' 5( d( (v=(@(G(W(_(g(j(vn(v(D((v(((((( l ( 5( 5( d( )v)))6)>) l D) 5G) 5V) de) j)v)) l ) 5) 5) d) )v))))* l  * 5* 5* d.* 3*vO*W* l ]* 5`* 5o* d~* *v** l * 5* 5* d* *v**+++ +#+v'+v3+6+v:+v@+vF+vu+y(+ + +_.+_.+ +].+].+ , ,w,w-, :,v?, N,[.Q,[.],vb, q,Y.t,Y.,v, , ,z,z, ,v, ,W.,W.,v, ,U.,U. -v- )- --y0-y?- C-xF-xI-yL-yR- V-ve-vi-l-vy-- l - 5- 5- d-S.-S.-- l - 5- 5- d-Q.-Q.-- l . 5. 5. d0. 4.x7.xF. v.B|......6.6.........<...//B\/p//A /D/D///~/ //00D0D-03060E0 U0[0^0m0 t0B00~000 00~000 00"1%1+1 B1E1[1^1m1 x1111111 l 1(1(111 t1111111112 l  2( 2(222 "272?2 l E2(H2P2 l V2`2 l f2(n2(y21~2322 l 22 l 2(22(2222 l 2 52 5222 22 l 2)52)5222 33 l 3333#3 '3/3 l 5383 <3D3 l J3 M3 V3Y3_3 c3k3 l z3}33 333 33 l 3 333 l 33333 34 l  44 l 44+4.4:4 Q4T4g4 k4r4 l x44 l 4% 4% 4% 4% 4 444444446565555P5P.5P15P;5P>5PT5PW5Pa5e5p5t555555556 6 666B6666666@6@6666677#7*777?7 l G75L7P7T7X7d71g71o7u7y77777777@7@88 l 8(8 48 H8L8Z8<^8i8m8x8B8 888889%9=9L9A Q9DT9Dw999~9 9999D99 l 9(9::D :DK:S: l Y:\:_:(b:(n: ~:::: ::~::: ::~;;; ;;E;H;N; e;h;~;;; ;B;; l ;; l ;(;;(;; l ;(;;;;;<<< l <(< l .<(1<(8<(;<(G< K<T< l Z<d< l j<(o<(r<{< l << l <(<(<< l << l <(<(<1<3<<<< l <(<< l =(==== = l &= 5)= 52=5=;= ?=G= l M=)5P=)5Y=\=b= f=n= l t=w==== == l == == l = = === == l ===== == l > >>> l >%  >% )>,>2> 9>@> l F>P> l V>Y>e>% h>% t> >% >% > >> l >> l >>>>> >>??+?6?:?>?B?@E?@H?L?T?Z?P]?Ps?Pv?P?P?P?P?P?P?P?P?P????????@"@N@ R@V@a@v@@B@@@@@@HF@HFAA AAA5A9A=AAAl EA<IATAXAcAwAAA ADADAADABAAAA AABB *B9B~RBUBdB oBsBvB~B l B 5B 5BBB BB l B)5B)5BBB B BB l BBBBB BB l C CC l %C(C0C GCJC]C aCiC l rC vC CC l CC l CCC% C% C C% C% C CC l CD l  D DDD#D 'D 2D9D l ?DID l ODRD^DaDmD DDD DD l DD l D% D% D% D% D DDEE$E(E,E0EGF3EGF6E:EBEHEPKEPaEPdEPnErE}EEEEEEEEE EEFVFZFeFiFtFxFFDF<FFFFFFvF FFGv)G8G =GMG\G aGdGGGGGGGGGGGDHHv HHvHDH HD(H,H7H;HFHJHXH\HHvHHHH HH HHH dI I!I d0I DIGIPI d_I dII dI III dI II dI IIIA JDJA JDaJdJhJsJwJJJJJvJJvJJvJvJvJvJ JDJJJJJJKD5K9KJKNKYKKKKTKKKTKTK KKKZKZ L FL lL yL~|L~L L L}L}L LLL}L}L #L}L}L "LLL}L}L #L}L}L "LLL}L}L #L}L}L "MvMvM} M} M #M}M}M "MvMv M}#M}&M #*M}-M}0M "4Mv7Mv:M}=M}@M #DM}GM}JM "NMvQMvTM}WM}ZM #^M}aM}dM "hMxkMxnM}qM}tM I#xM}{M}~M "MwMwM}M}M I#M}M}M "MvMvM}M}M #M}M}M "MvMvM}M}M #M}M}M "MvMvM}M}M #M}M}M "MvMvM}M}M #M}M}N "NvNv N} N}N #N}N}N "Nv!Nv$N}'N}*N #.N}1N}4N "8Nz;Nz>N}AN}DN I#HN}KN}NN "RNyUNyXN}[N}^N I#bN}eN}hN "oNrNxNNN l NNN}N}N r$N}N}N "NN l NNN}N}N r$N}N}N "NN l N N N}N}O r$O}O} O "OO l O  O )O},O}/O #3O}6O}9O "=OEO l KO NO WO}ZO}]O #aO}dO}gO "kOsO l yO 5|O 5O}O}O I#O}O}O "OO l O)5O)5O}O}O I#O}O}O "OO l OOO}O}O r$O}O}O "OO l P% P%  P}P}P r$P}P}P "!P)P3PCPFPLPYPaP l gP(jP(sP}vP}yP I#}P}P}P "PP l P(P(P}P}P #P}P}P "PP l P(P(P}P}P #P}P}P "PP l PP l Q( Q(Q1Q3Q$Q.Q?QBQIQVQ\QL_QLhQ}kQ}nQ #rQ}uQ}xQ "|QQ l QNKQNKQ}Q}Q I#Q}Q}Q "QQQLQQQ l QQ l QQQ}Q}Q I#R}R}R " RR l R!R l *R)-R)6R}9R}X}AX}DX bHXPX l VXYXhX}kX}nX ~ rX}uX}xX b|XX l X X X}X}X ~ X}X}X bXX l X X}X}X nX}X}X bXX l X X}X}X nX}X}Y bY Y l Y 5Y 5!Y}$Y}'Y +Y}.Y}1Y b5Y=Y l CY)5FY)5RY}UY}XY \Y}_Y}bY bfYmY l sYvYY}Y}Y ~ Y}Y}Y bYY l Y% Y% Y}Y}Y ~ Y}Y}Y bYYYYYYZ Z l Z(Z(!Z}$Z}'Z +Z}.Z}1Z b5Z=Z l CZ(JZ}MZ}PZ nTZ}WZ}ZZ b^ZfZ l lZ(sZ}vZ}yZ n}Z}Z}Z bZZZZZZZZLZ}Z}Z nZ}Z}Z bZZ l ZNKZNK[}[}[  [} [}[ b[[ [L'[4[<[ l C[K[ l T[W[c[}f[}i[ m[}p[}s[ bw[[ l [[ l [)[)[}[}[ ~ [}[}[ b[[ l [[ l [3[}[}[ n[}[}[ b[\ l \\ l \5!\}$\}'\ n+\}.\}1\ b5\=\C\K\ l R\X\Lb\ l k\)n\)}\}\}\ ~ \}\}\ b\\\}\}\ CDACSEGDEFPROCDSEG~globalJ LONGGLOBALSNDA STACKSIZEU TOOLERRORCHKI S ,@ trois S ;8[i"-HHHH0"hH""0"":H""h :H*"h eH!":H""h :H""heH "8pI8pI0@:H%"heH"  :H%"h!88pI%&HY"h; "-1"1"1"HH"8pI 8pI0:H*"h:H*"heHeH ":H*"h:H*"h eH eH!":H""h:H""heHeH ":H""h:H""h :H""h:H""h eH eH ":H""h:H""heHeH ""hH "hH "heHeH "H "hH "h{iHeH "{iH "eH{iH "H "hH "h{iHeH "{iH "eH{iH "H "hH "heHeH ":H""h:H""h :H%"heH!":H%"h!( 1":H%"h#:H"h:H%"he 0"0"0":H%"h:H%"h!m!%:H%"h:H%"h!8!:H%"h!T 0"1"1" 1"8pI08pI0:H"h:H"h:H%"h:H%"heHeH!":H%"h:H%"h!!:H%"h:H%"h##0:H%"h!:H%"h#0" ""HH?""" {iH"h{iH" "{iH{iH"h{iH"hٍۍݍߍ:H""h 8pI){iH{iH"h{iH"h{iH"{iH{iH "h{iH"h{iH "8pIH"H:H""h HY"ht 8pI0@:H%"heH"  :H""h %:H""h8 pI%:H%"heH!":H%"h:H""h 8!( 1":H%"h#:H"h:H%"he 0"0"0"0":H""h %:H""h 8pI%:H%"heH!":H%"h:H""h8 !( 1":H%"h#:H"h:H%"he 0"0"0"0":H""h %:H""h8 pI%-"HY"h:H""h %:H""h 8pI%-"HY"ht8pIB:H""h :H%"h!m:H""h8 8pI%-"HY"h:H""h :H%"h!8:H""h 8pI%-"HY"h/:H""h D:H%"h:H%"h!8:H""h !A:H%"h:H%"h!m:H""h8 !:H%"h!V8pI8pI0::H%"h:H%"heHeH!"::H%"h:H%"h!!::H%"h:H%"h##::H"h::H%"he-:H%"h!:H%"h# 0" 1"1"1":H*"h eH!":H""h 8pIc:H""heH ":H""h :H""h eH ":H""h t{iH "{iH "{iH "{iH "{iH ":H""h a{iH "{iH "{iH "{iH ":H""h :H""h ?{iH "{iH "{iH ":H""h "h8pI0H "hH "h{iHeH "{iH ":H""heH{iH "eH{iH "Z8pI0H "hH "h{iHeH "{iH ":H""heH{iH "eH{iH "Z:H""heH ""{i+;ik ;8[i 8pI0$HHH%%" 8pI0g %-HHHHH0"hH"HHHH0"hH"HHHH0"hH("HH""HH"GH{iH"h{iH"hHY"h{iH"h{iH"d8pI0E:H*"heH" H Y"h% 8pI0F-HHHHH0"hH"HHHH0"hH"HH:H*"h eH":H""h 8pIHH{iH:H""heH"h{iH"HH{iH:H""h H"h{iH"HHHH0"hH"HH {iH:H""h eH"h{iH"JHHHH0"hH"HHHH 0"hH":H""h AHH{iH:H""heH"h{iH":H""h mHH{iH:H""h{iHeH "{iH "{iH"h{iH"d:H*"heH"(HHHH0"hH"*HHHH0"hH"PnJ":"U"HH"HH"HH" t~J"U"HH"}:""d}:":H""h @  "P"@"0"  HH"d "%HH""0"{i+kRetrait de liquiditsApport de liquiditsVente de titresAchat de titresNature : ;8[i H 7"8"HJ"U":"H<"8"HJ"U"HH"":"<"" :"!!"" :"!!"" 8pI0: 8pIiH:"""` "u "e "U "E} } "5h h "%80 4H`  "8pI0:H%"h#i H:"":H%"heH"H{iH:H%"h!H"h{iH"h8HH:""{iH:H%"h!H"h{iH" {i+k* * * Autres * * ** * * Obligations * * *(* * * Fonds communs de placement * * ** * * Sicav * * * * * * Actions trangres * * * * * * Actions franaises * * *Nombre Dsignation ;8[i8pI0:H%"h#dHHHH0"hH"HH"h HH"HH"-J"U":$:$"/$/$"":H%"heH'"HH""8pI0ZHHHHHH0"hH"h:H%"h:# 0"uHH"hHH"8pI0: 8pI0%:H%"h#: 8pI0/: 8pI i "hm8pIHH?"HHHA" HH"{i+k des titresVeuillez indiquer la catgorie ;8[i ߆) tHH"{iH"HHHH>"heߩ 8pI0: 8pIi8pI0w:H%"h#P8pIi 8pI0%  i  8pI+ :H%"heH!"8pI0:H""h :H*"h eH"%: i:H""h :H*"h eH"%: i("mH "hiN8pI i8pI i 8pI03:H""h H:H*"h eH"h8pI%: iP++{iH:H*"heH"hh{iH{iH")0{iH"{iH++{iH"{iH"H{iH:H*"heH"hh{iH"h:H!"h{iHeH!"{iH{iH"hh++{iH"{iH"{iH":H!"h{iH{iH"eH{iH!"i 8pI{iH: iP:H*"heH"hh{iH:: iP:H*"heH"hh{iH{iH"%&8pI i8pI i 8pI i8pIHH?"HHHA"HH"HH" t"HH"{i+k  Le ;8[i"{iH//"//{iH"{iH"j/j/{iH"{iH"8pI0G: 8pI" {iH"F/F/{iH"{iH""/"/{iH"{iH" / /{iH"{iH"..{iH"{iH"q..{iH"{iH"K..{iH"{iH"%80 ^-H``,,,,,- {iH"8pI0:H%"h#:H%"heH!"""..{iH"{iH"..{iH":H%"h!H{iH"{iH"3{iH"{iH"{i+k   * * * Autres * * * * * * Obligations * * *+ * * * Fonds communs de placement * * * * * * Sicav * * *# * * * Actions {trang}res * * *# * * * Actions fran\aises * * *7-------------------------------------------------------2 D{signation NombrePRINTER: ;8[i{iH@@"??{iH"{iH"??{iH"s?s?{iH"{iH"L:H "h:H "heH{iHeH "{iH "{iH{iH "{iH{iH "0e?e?{iH":H "h{iHeH "{iH ":H "heH{iH "{iH {iH"V?V?{iH":?:?{iH":H "h:H "heH{iHeH "{iH "{iH {iH"0?0?{iH"{iH""+?+?{iH"{iH"{iH"8pI0 {iH"{iH:H*"heH"hh{iH{iH"/{iH"{iH:H*"heH"hh{iH{iH"/{iH"{iH:H*"heH"hh{iH{iH"&?&?{iH":H""h{iH{iH "eH{iH "p\??{iH":H""heH {iH"??{iH"o:H""h{iHeH "{iH "{iH {iH">>{iH":H*"h eH!"":H""h c>>{iH:H""h H"h{iH>>{iH"{iH":H""h c>>{iH:H""h H"h{iH>>{iH"{iH""{iH"{iH"a>>{iH">>{iH"{iH">>{iH"H "h:H "heH{iHeH "{iH "{iH ":H "h:H "heH{iHeH "{iH "{iH{iH "{iH{iH "0:H "heH{iH "{iH ":H "heH{iH "{iH "{iH{iH "{iH "p {iH"|>|>{iH"H "h:H "heH{iHeH "{iH "{iH ":H "h:H "heH{iHeH "{iH "{iH{iH "{iH{iH "p:H "heH{iH "{iH ":H "heH{iH "{iH "{iH{iH "{iH "p2w>w>{iH" {iH"h>h>{iH"`>b>d>f>2W>W>{iH"{iH"vN>N>:H!"heHJ>J>{iHH"h{iHH>H>{iH"{iH"JD>D>?>?>=>=>{iH"{iH""8>8>{iH"{iH"{iH"H "hH "heH{iHeH "{iH "{iH "*>*>{iH"{iH{iH "{iH "p2>>{iH" {iH"[{iH "{iH "{iH {iH" > >{iH"=={iH"{iH".{iH"{iH"{iH"{i+k Solde au   Solde  . au du . 19du mois complet.Relev   Totaux ------------------------------2-------------------------------------------------- Vente de  Achat de      Solde au   ------------------------------2--------------------------------------------------? Date D{bit Cr{dit Libell{PRINTER: ;8[i{iHSS"{iH{iH "{iH """O"{iH"{iH"RR{iH"RR{iH"{iH"RR{iH"{iH"8pI&RR{iH"{iH"#RR{iH"{iH"RR{iH"{iH"8pI0: eH""{iH: i:H""h{iHeH "{iH "{iH"h{iH{iH")J8H"RR{iH"{iH"{iH{iH"{iH"7R7R{iH"{iH"{iH{iH "{iH "8pI0m: :H""heH{iH "{iH "{iH "QQ{iH" {iH"{iH"8pI8pI0-: :H""h QQ{iH"{iH "{iH{iH "{iH "{iH{iH"{iH"QQ{iH"{iH"8pI8pI&QQ{iH"{iH"#QQ{iH"{iH"QQ{iH"{iH"8pI0m: eH""{iH: (:H""heH"h{iH{iH")J8H"QQ{iH"{iH"{iH{iH"{iH"aQaQ{iH"{iH"{iH{iH "{iH "8pI0m: (:H""heH{iH "{iH "{iH "QQ{iH" {iH"{iH"#PP{iH"{iH"8pIPP{iH"{iH"PP{iH"{iH"PP{iH"{iH"tPP{iH"{iHP:H*"heH"hh{iH{iH"PP{iH"8pI08pI{iH: P:H*"heH"hh{iH:: P:H*"heH"hh{iH{iH"%8pIC{iH{iH "{iH ":8pI0m: P:H""heH{iH "{iH "{iH "PP{iH"{iH"BPBP{iH" {iH"{iH"APAP{iH"{iH"9P9P{iH"{iH: P:H*"heH"hh{iH{iH"1P1P{iH"'8pI P P{iH":H!"heH!""{iH: P:H""heH"h{iH{iH")<8H"{iH"{iH{iH"{iH"l8pI{iH{iH "{iH "8pI0m: P:H""heH{iH "{iH "{iH "OO{iH"{iH"OO{iH" {iH"{iH"8pI5OO{iH"{iH"OO{iH"{iH{iH "{iH "8pI0m: P:H""heH{iH "{iH "{iH "FOFO{iH" {iH"{iH"##O#O{iH"{iH"{iH"{i+k" Vous n'avez touch{ aucun revenu.: Total :C O -------------  :  En 19C O ------------- :  En 19 Revenus : Vous n'avez vendu aucun titre.C O -------------  Vente : Ventes : Prix moyen d'achat : C O -------------  Achat : Achats :------------------------------2--------------------------------------------------PRINTER: </3OZBovD| l   l )5)5  l   l  #08 l >(A(JMP tY\bj l (%)8EHKQ^f l lw l } 5 5 5 5  l  l )5)5)5)5  l  l   l  + l 1 7 ;C l IT l Z ] d g s w l  l    l  l % % % %    l  l ".1= TWj qx l ~ l % %  % %   l  l   l %0 l 6 < @H[filow l }((  l ( l ( l  l ((13$, l 2< l B(FK(b| l  l (( l (  ' l -8 l >1B3O1T3W_ l ep l v(y(((  l  l (( l  l (( l (  l ($ .2=KD]cfu ~ l  D ~  5 D ~J M \ `   l          l  ( (   t      l %  8 L T l Z ^  { ~  l  ( (     l   l     (   l  (  l   l  ( (' 1, 3W _ l e  x   l       l  ( (     l   l     ( % - l 3 (6 > l D N l T (\ (g 1l 3  l      l     ( 0 l 6  I ] e l k  p    D  l     l  ( l  Ygo l u  l ( l   l     l &0 l 6(:?G l P V(\d l jt l z(~ l  ( l ( l  l (( ( ( & l ,6 l <(A(DM l S] l c(h(kt l z l ((13 l ( l (  l )5)5&)/ 3; l A S[ l admpv z l   l     l  .1@ DL l R ^awz  l   l  # :=L PX l a e rux~ l  l % %   l  %  %  #+47:@MT l Zc l ilx{  l   l   B#DOBU^kosw%z%} 6:VZ^b<fquA DD  l !$' 5* 53 t<?JR|D.29A l G)5J)5SW_ l e w{ l t l   +3 l 9 < EtT`d l   l t l  .6 l EHT tt l  5 5 t&P)P?PBPLPOPY]hlw{PPPP l      *-\`txD6iPPSP__.jPmP_.PP_.PP!!4!7!NT]jtg.        } }  h h /4468:<> PSYfn l t(w l (( l (  $ l * (. D L R Z 9!+*A+DD+~H+|L+= b+@f+Dq+t+~x+|+(+*+)!+D+/+/+ G+/+/+ + b+j/+j/, , b, ,-,7,g.D,DX, b\,b,F/e,F/t, , b,"/,"/, , b, /, /, , b,.,., , b,.,. - - b -.#-.2- ?- bY-^-^-`,`-,b-,d-,f-,h--v- b}-D----- l -(--- l ---(-(- -!-d -.-.- -.. ....%. ).1. l 7.(G. nT. bX.`.f.n.}. b. /@0@0 G0? 0?0 &0 b*0?-0?<0 @0s?C0s?R0 _0 bc0vo0vx0 l ~0v0 l 000% 0% 0  1e? 1e?1  1v)1 l 81% ;1% G1 ^1vg1 l m1p11 ~ 1V?1V?1 1:?1:?1 1v1 l 1v1 l 11 2% 2% 2 H2 ~ L20?O20?R2wU2wd2 h2k2z2 ~2!2+?2+?2 222 2 b2v22v22 22 l 3 53 53 d-3 @3 M3U3 l [3 5^3 5m3 d3 3 33 l 3 53 53 d3 3&?3&?3 34 l .414P4?S4?b4 f4n4 l t4w44 ~ 4?4?4 44 l 444 5 ~ 5>5>5 5#5 l )5,5/5)525)5>5 B5!F5N5 l T5 `5>c5>o5w5 l }5 5 5>5>555 555 55 l 5 5>5>55 l 5 5 6>6>66&6 *6-6<6 @6!D6G6V6 c6 bg6o6u6>x6>6 6>6>6 6 b6>6>6 6v6 l 6v6 l 66667 77.7 27v;7 l A7vL7 l R7U7g7% j7% t7 7v7 l 7% 7% 777 8v8 l  8#8?8B8Q8 v8y8888 ~ 8|>8|>8 8v8 l 8v8 l 8% 8% 8% 8% 9 9!909 49v=9 l C9vN9 l T9W9i9% l9% v9 9v9 l 9% 9% 999 :v: l ":%:A:D:S: x:{::w>:w>: ::: ~ :h>:h>: :`>::b>::d>::f>::v; ; ;W>;W>; ";%;4; 8;vD;G;J;N>M;N>P;vY; l _;{b;{k;J>n;J>z;v; ;H>;H>; ;;; ;v;;;D>;D>;z;z;?>;?>;y;y;=>;=>; ;; < <!<8><8>&< *<-<<< I< bM<vU< l [<ve< l k<n<<% <% < <<< <*><*>< <<=>=>#= '=*=<= ~ L=O=U= = ~ = >= >= ===== =x=x= = = b= -@S0@S3@ G[@^@m@ q@t@w@vz@v@ @!@d @@@ @ b@R@R@ @R@R@ @ b@R@RA  A bAa."AR%AR4A AA bHARKARZA gA bkARnAR}A A bAAa.AAAAA.A.A A!AAs.A l AA B *BEB ]Bd aBRdBRsB wBzBB B B bBBB7RB7RB B bC CC !C$Ca.*C7C=Cs.EC l KCNC`CcCiC CCC CCCQCQC CCC ~ C bCa.CCCa.D DDs.D l !D%D )D,D4D:DQ=DQLD PDSD{D~DD D ~ D bDQDQD D bDc.Dc. EQ EQE (E b/EQ2EQAE NE bREQUEQdE qE bxE{Ec.EEEa.EEE.E.E E!EE.E l EEEF Fd FQFQ.F 2F5FDF ]F jF bnFvF|FaQFaQF F bFFF FFc.FFF.G l G GGG$G ;G>GMG QGYG_GQbGQqG uGxGG ~ G bGPGPG G bGe.GPGPG G bGPGPH H bHHP!HP0H =H bNHPQHP`H mH.uH l {H 5~H 5H dH HPHPH HHe.HHII.I l I 5I 5'I d6I=I.EI l KI 5NI 5]I duI tIII IIIIII.J l J JJ J&J =J@JOJ SJ[JaJPdJPsJ J bJBPJBPJ JJJ ~ J bJAPJAPJ J bJJJ9PJ9PK KK.#K l )K 5,K 5;K dVK ZK1P]K1PlK wKK PK PK KK l KKKVKVK K!KK.K l KKK L !Ld %L(L7L PL ]L baLiLLLL LLLe.LLL.L l LLLMM M!M0M 4M>" 66".8pI--" %%"": 8pI00i H:"#: eH"$m: eH"{iH:H("h: e:H""h{iHeH "{iH "{iH"h{iH"8H"h8HH:"": 8pI{iH{iH "{iH "i : 8pI0:H("h: e:H""h{iHeH "{iH "{iH{iH "{iH "{iH "V(H:"""{iH"h{iH"8H"h8HH:""8dH8 H:"8H8 H<"'" "{i+;ikVous n'avez vendu aucun titre.Vous n'avez achet aucun titre.Total :Vente :Ventes :Achat :Achats : ;8[i{iH "{iH{iH "Ǎɍˍ͍ύ :H!"heH{iH"{iH""O"{iH"{iH" {iH"m m {iH"{iH"  {iH"{iH" {iH" {iH"{iH": 8pI0:H"h:H/"heeH!"#":H"h:H/"he+H{iH" {iH"{iH":H"h:H/"he!!eH {iH" {iH":H"h:H/"he:H"h:H/"he++eH{iH "{iH{iH!!eH "{iH "{iH {iH"{iH":H"h:H/"he:H"h:H/"he++eH{iH "{iH{iH!!eH "{iH "{iHǭɭ˭ͭ{iH "Ǎɍˍ͍ύMw w {iH":H"h: :H/"he!!eH {iH"{iH":H"h: :H/"he!!eHǭɭ˭ͭ{iH "Ǎɍˍ͍ύ( ( {iH"{iH" {iH" {iH"{iH"{iH"{i+kB Total : N -----------C Liquidit{s   ------------------------------2--------------------------------------------------N Nombre D{signation Cours Evaluation------------------------------2--------------------------------------------------Evaluation du portefeuille au PRINTER: ;8[i"HH"8pI0 HH"HHHH0"hH%"HH"J"U"7 :"""H:H%"heH"h{iH{iH "{iH{iH "{iH{iH "ᩥ{iH{iH "{iH{iH "{iH"H:":H%"heH""HH""HH"::H"h:H/"he:H%"heHeH!":H"h:H/"he{iH{iH"h{iH"h!!eH{iH ":H"h:H/"he:H%"h!+:H"h:H/"he:H%"h#-HH":H"h:H/"heH "hH "heH{iHeH "{iH "!!eH{iH ": {iH"᯷ ))0H  {eH{iH"{iH"))  {eH{iH"{iH"))  {eH))  {eH{iH"{iH{iH"H{iH"h:H!"h{iHeH!"{iH{iH"hh{iH"{iH"{iH":H!"h{iH))  {eH))  {eH{iH"eH{iH!"H "hi98pIHH?"XHHHA"HH"HH"HH" (HHHH 0"hH"%HHHH 0"hH"HH"HH"P:"":q:"ff"jUU{iH:H"h{iHHH{iH"{iH"q:""HH"" :HH"(0"0"0"0"HHHH 0"hH"HH"HH"P:"  "HH""HH""{i+k'Voulez-vous imprimer cette valuation ? en mmoire)(Il y en a dj (Il n'y en a aucune en mmoire)(Voulez-vous conserver cette valuation ? 19  Donnez un cours rcent du titre ;8[iHH"8"J"U"HH"""d :" >>" " ":"<"8pI0h2 "hiH:":H!"heH{iH"{iH"HH"8pI8pI0HH"  {iH"HH"8pI0eH "h8pIH "hi8pI0%  Lo: H "hi98pIHHHH>"h8pIHH?"XHHHA"HH"HH"HH"HHHH 0"hH"HH"HH"P:""HH""HH"":1"1"1"0"8pIu8pI0[:H!"h:H!"heHeH!": : : 8pI0h:H"h:H/"he:H"h:H/"heeHeH!":H"h:H/"he:H"h:H/"he!!eH!!eH ":H"h:H/"he:H"h:H/"he++:H"h:H/"he:H"h:H/"he--:H"h: :H/"he:H"h: :H/"he!!eH!!eH "{i+k'Voulez-vous imprimer cette valuation ?Evaluation au &Slectionnez l'valuation concerne...&Slectionnez l'valuation effacer...(Slectionnez l'valuation consulter... ;8[i H 8"7"XJ"U":"X<"8"dHJ"U"d:"dH<"8"eHJ"U":"H<"8"HJ"U":"H<"8"XHJ"U""HH"")):H!"heH{iH"{iH"H"h{iH{iH "{iH{iH "{iH{iH ",{iH{iH "{iH{iH "{iH"H :""":"))"":"))"":"))"":"))":"X<""{iH{iH "{iH ": 8pI0Ii "H{iH:H"h:H/"he+H"h{iH"h<8HH:"{iH:H"h:H/"he+H"h{iH""xH:":H"h:H/"heeH""H{iH:H"h:H/"he!!eH"h{iH"h8HH:"{iH:H"h:H/"he!!eH"h{iH""H{iH:H"h:H/"he:H"h:H/"he++eH{iH "{iH{iH!!eH "{iH "{iH"h{iH"hD8HH:"{iH:H"h:H/"he:H"h:H/"he++eH{iH "{iH{iH!!eH "{iH "{iH"h{iH":H"h:H/"he:H"h:H/"he++eH{iH "{iH{iH!!eH "{iH "{iH{iH "{iH "{iH "i xH:"))"H{iH:H"h: :H/"he!!eH"h{iH"hD8HH:"{iH:H"h: :H/"he!!eH"h{iH":H"h: :H/"he!!eH{iH "{iH "{iH "i "H{iH"h{iH"hD8HH:"{iH"h{iH""H:"))"8 H:"N8 H<"{i+kTotal : Liquidits EvaluationCours DsignationNombreEvaluation du portefeuille au ;8[i H 7"8"HJ"U""HH"" ":"<""#/#/"..("^4:"".."@:""@@:".."@:"..",B:"B<""D8pI0i H:": eH"H:HB"hieH"hr8HH:":HB"hieH"H:HB"hi!eH"h8HH:":HB"hi!eH""8pIiH:".."H:HB"hieH"hr8HH:":HB"hieH"H:HB"hi!eH"h8HH:":HB"hi!eH":HB"hi..eH"iH:".."H:HB"hieH"hr8HH:":HB"hieH"H:HB"hi!eH"h8HH:":HB"hi!eH""{i+kAvec les revenus : Ensemble :Par anGlobal Rendement0Ils ne tiennent pas compte d'ventuelles ventes.Ces rendements sont indicatifs. ;8[iEHH"h"HH"HH"| :"NN"HH"HH"8pIHH"h%HH"HH"| :"NN"HH" ʆ̭)d{iH"HHHH>"hΆХe΅ʩ 8pI0: 8pIi8pI0w:H%"h#P8pIi 8pI0%  i  8pI+ 8pIJ:H%"heH!"HHNN"HH"HH"J"U"NN """"HH""HH"c{i~H{i~H"h{i~H"h{iH{i~H "HH" "{iH"ᯌN 8pI0]))~  {eH{i~H"{i~H"H{i~H"hh{i~H"hH{i~H"hh{i~H"hH{i~H"hh{i~H"h{i~HԎ"h{i~H":H!"h{iHeH!"{i~H{iH"hhNN{i~H"{iH"{iH"NNNN{iHNN{i~HԒ"h{i~H{i~H"{i~H"8pI0z:H""h :H*"h eH"%: i~{i~H{i~H "{iH{i~H "~{i~H{i~H "{iH{i~H "8pI0 H{i~H: :H*"heH"hh{i~H"hH{i~H: :H*"heH"hh{i~H"hH{i~H: :H*"heH"hh{i~H"hd8pI Ő$: H"hem8pI8pI%"h%攥e8刅8pIwim8pI"h%8pI%y:HB"hi{i~H: i:H""h eH{i~H "{i~H{itH{iH "{itH ": i:H""heH{itH "{itH "r{irH{i~H "{i~H{itH "'r{irH{i~H "{i~H{itH "{itH"n{inH{i~H "dr{irH{idH "{idH{i~H "{i~H"heH{i~H!":HB"hi:HB"hieH}N}N{i~H"eH{i~H!": i:H""h eH{i~H "{i~H{i~H{iH "{i~H ": i:H""heH{i~H "{i~H "{i~H "{iH{i~H "{i~H{i~H "mr{irH{i~H "{i~H{i~H "{i~H "{i~H{i~H "r{irH{i~H "{i~H{i~H "'r{irH{i~H "{i~H{i~H "{i~H"n{inH{i~H "dr{irH{idH "{idH{i~H "{iH{i~H ":HB"hi!{i~H{iH"h{i~HzNzN{idH"eH{idH!": i:H""h{iH{i~H "mr{irH{idH "{idH{i~H "{i~H{idHeH "{idH "{idH{i~H{iH "{i~H "{iH{i~H "{i~H: i:H""h H"h{i~HsNsN{idH"{idH": i:H""h8 pI2qNqN{i~H"{i~H"mNmN{i~H: i:H""heH"h{i~HeNeN{idH"{idH"8 pI2cNcN{i~H"{i~H"{i~HԈ"h{i~HaNaN{idH"{idH"8 pI2_N_N{i~H"{i~H": {i~HԊ"h{i~H]N]N{idHԌ"h{idH{idH"eH{idH"6r{irH{i~H "{iH{i~H "8pI0: i:H""heH{i~H{iH "{i~H "{iH{i~H ": i:H""h fr{irH{i~H "{iH{i~H "8pI0:H""h H:H*"h eH"h8pI%_:H""heH{i~H{iH "{i~H "{iH{i~H "+{iH{i~H{iH "{i~H "{iH{i~H "H "hiH{i~H "{i~H{idH{iH "{idH "{iH{idH "{idH "{iH{idH "{i~H "{i~H{idH "r{irH{i~H "{i~H{idH "'r{irH{i~H "{i~H{idH "{idH"n{inH{i~H "dr{irH{idH "{idH{i~H "{iH{i~H "8pIi:HB"hi{i~H{idH "{idH{idH{iH "{idH "{iH{idH "r{irH{idH "{idH{idH "'r{irH{idH "{idH{idH "{idH"n{inH{idH "dr{irH{iZH "{iZH{idH "{idH"heH{i~H!":HB"hi:HB"hieHZNZN{i~H"eH{i~H!":HB"hi!{i~H{iH"h{i~HWNWN{idH"eH{idH!"r{irH{i~H "{iH{i~H "0:HB"hieHVNVN":HB"hi{idH{iZH "{iZH{iPH{iH "{iPH "{iH{iPH "{iH{iPH "r{irH{iZH "{iZH{iPH "'r{irH{iZH "{iZH{iPH "{iPH"n{inH{iZH "dr{irH{iFH "{iFH{iZH "{iZH"heH{idH!":HB"hi:HB"hieHSNSN{idH"eH{idH!"{idH "{idH{iZH{iH "{iZH "{iH{iZH "{iH{iZH "{iZH "{iH{iZH "{idH "{idH{iZH "r{irH{idH "{idH{iZH "'r{irH{idH "{idH{iZH "{iZH"n{inH{idH "dr{irH{iFH "{iFH{idH "{iH{idH ":HB"hi!{idH{iH"h{idHPNPN{iFH"eH{iFH!"iMNMN{idH{iH"h{idHININ{iFH"{iFH"8pIHH?"HHHA"HH""HH"d"HH"6{i+k F) ( % % % %/0/0 F, le  s titre % % 19 Le  Donnez un cours rcent du titre( Choisissez un titre... ;8[i{iHWW"""O"{iH"{iH"VV{iH"VV{iH"{iH"VV{iH"{iH"NVNV{iH"{iH"MVMV{iH"{iH"VV{iH"{iH"UU"UU{iH"{iH"))eJ8pI{iH"{iH"{iH"UU{iH"{iH"8pI0J: eH"":HB"hi)>8H":HB"hi!{iHeH!"UU{iH{iH"{iH{iH") 8pI{iH":HB"hieH{iH"{iH{iH"{iH"8pIlUU{iH"{iH"UU{iH":HB"hieH!"UU{iH"{iH")48pI:HB"hi!{iHeH!"UU{iH{iH"{iH{iH") 8pI{iH"{iH{iH"{iH":HB"hiUUeH"nUU{iH"{iH"zUzU{iH":HB"hieH!"xUxU{iH"{iH"),8pI:HB"hi!{iHeH!"vUvU{iH{iH"{iH{iH") 8pI{iH"{iH{iH"{iH"{iH"{i+k  Avec les revenus :  Ensemble : N ------------------------- Global Par anF Rendement? Ils ne tiennent pas compte d'{ventuelles ventes.7 Ces rendements sont indicatifs.------------------------------2--------------------------------------------------PRINTER:#'KOkosw{(*D:DD(*/+5P8PLPOPmqvv a.a.> >-606Hc.U-X-e%h%a...a... l #s.+ l :=I ior a. !'/a.5I l PYs.a l ps    &)8 EH[fizf i l G   l NKNK  !d   b" % 4 8m ;m J W b[ ^ m z b~       bL l  l  d % l ,4 l =3N nR U d hkz ~ l  l )) ~     l  l  l   l  3 3I )L )V  ~  b  l   l   l   l  3 3 ) ) 8 = B G L f k p u z }   w  w    l   L l  ) ) ~  b  l   L l ! )$ )- 2 7 < A [ ` e j o r ( u (   b      ~  b  )! v t &v*t147=vAt]aoPrPPP l ((  l ((<vt l   l ' l -07(:(F JS l Zb l ~))  l  l  l (3 l  l   l (!5%-3v7tBK l R[ l dm l s| l % %  )) L!$O SVe vy   ! / 9 l H{K{W s dy| t 8 8 l 0 4NK7NKJ NU l ^bwzxzxzx(*Dzx= Dzx(*r p0r4pPrTpX\`{~ffUU HH   .<2=BFrJpUrprp  <rp GnlPPPP"&U `>c>m x{  l  l NKNK +39D?(E*HnLlP= X0hDkDy(*0nl nl l   l 9<BJU0Xf qwL l zxzxzxzx(*Dzx"= &D14z8xF(L*TrXptrxp|<rpG (-=@CJW_ l ep l vNKyNKNKNK LLL l  l  l  l ( ,4 l ;C l LW l ^f l o)r)y)|)  l  l  l  l 33 l  l  l   l 5"5&.4< l CILS l \g l ntL~ l )))) wiPPPPPPPP ) P, P8 D PG Pa w Pz P  P P  P P  P P  !)!)!"! l (!NK+!NK@! D!G!V! [!^!" ""%"F")I")j")m")")")")")" ### &#)#0#L7#D#K#b#k# l r#z# l #3# ### l ## l #3# $$$ l  $($ l 1$4$X$a$ l h$p$ l y$)|$)$$$$ l $$ l $)$)$%% l  %(% l 1%<% l C%K% l T%3W%3%)%)% %%%% l %% l && l &!& l *&3-&3[&)^&)h& &&& l && l && l && l &3&3')') ' I'L'R' i'l'{' '''''')')'' l ''L' l ')')'(&(/( l 6(=(LG( l P()S()\(r({( l ((L( l ()()((( ((( (()) )+)?)B)E)h)s))v))))*i,*P/*P;*G*PJ*P^*b*z*v}*v**#/*#/**.*.**.*.*}+}+.+.3+.6+.g+m+p+a.v++++++.+.++ l +c+c+++ l ,c ,c,$, l .,c1,cK,V,^, l h,ck,c{,,,a.,,,,.,.,a., l ,c,c,-a.- l -c-c,-a.5- l ?-cB-c\-g-a.p- l z-c}-c-a.- l -.-.-c-c- t- !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq---.-.-a.- l -c-c..a.(. l 2.c5.cF.a.P. l Z.c].cw..a.. l .c.c[/`/h/)!l/p/t/x/h|/h/N/N///D/(/*///= /0/D//000*0D50;0(A0*D0hH0h`0Nc0Nm0q0|000D00 0"0[.000000 1g.11#1&1,191A1 l G1(J1R1i111[.11111[.11101[.1[.1 l 1v1v2(2(2 2v2t2N"2N%2)2v-2t125292G2PJ2P`2Pc2Pm2Np2Ny22v2v2222<22v2t22~3 3v3t>3ND3L3U3b3e3h33 333 33333 d3 334 d4 !4$4-4 d<4 C4a.Q4 W4Z4i4 t4 l 4{4{4 4 d4N4N4 t4 84 84N4N445N5N5N5N!5 <5 @5}C5}R5 Y5\5b5o5w5 l }5 55 l 5v5v5)55)55 t5a.5a.55s.55"6 _6 f6i6a.o666s.6 l 6 56 56 d6 66s.6 l 6 56 56 d7 77s. 7 l &7 5)7 587 dG7 R7X7h7q7t7~77y(77 l 7777 886898 f8888 l 88s.8 l 8 8 8 99s.&9 l ,9/99 _:e:ch:c{: :: l :: l :c:c:}N:}N: :c:c: ::s.: l : : 6; M;W;s._; l e;h;.< < [= _=g= l ==zN=zN= =c=c= ==s.= l L>O>Y> > > >>s.> l > > >sN>sN?  ? ?? ?)?s.1? l ;? I?L?O?qNR?qNa? e?h?w? {?~??mN?mN??s.? l ????eN?eN? ??? ?@@cN@cN@ @@-@ 1@4@B@ Q@aNT@aNc@ g@j@y@ @@@_N@_N@ @@@ @@@@ @]N@]N@ A A.!A.4A 8A@AA AAAa.AAAs.A l AAA B BBs.B l  B$B (B+B3BrB yB|BBBB l B BvBvBB l B)5B)5B BB l CC&C RC VC^CC C Ca.C l CCCC kD E E Ea.EEEa.E l EEF F BGHGcKGc^G bGa.kG l uGa.G l GcGcGZNGZNG GcGcG Ga.G l GGWNGWNH HcHc(H qHa.{H l HcHcHVNHVNH Ha.H l HHH I GJMJcPJccJ gJa.qJ l {Ja.J l JcJcJSNJSNJ JcJcJ JJK K 7L L La.L l LLPNLPNM  McMc"M &M.M2Mv5Mv8MMN;MMNPM_MINbMINqM uMvxMvM MMMfMdMMfMdMfMdMMDM(M*MfMdM=  NNNDNN(%N*(Nf,Nd7ND OWOWO GOOOv Ov&O *O!4Od 8O;OJO WO b[OV^OVmO qOVtOVO O bOVOVO O bONVONVO O bOMVOMVO O bOVPVP P b P#P&PU)PU/P 3PU6PU9P > {iH"{iH"8pI! ! {iH"{iH"8pI0mm: eH""=" {iH"{iH":H "heH{iH"{iH"S{iH{iH "{iH "8pI0g:H "heH{iH "{iH "{iH "{iH"{iH"{iH"{iH"{iH"#aa{iH"{iH"{iH"{i+k. Vous n'avez touch{ ni dividendes ni int{rets.? Total : P -------------- Dividendes et int{rets : Vous n'avez vendu aucun titre.? Total : P -------------- Vente : Ventes : Vous n'avez achet{ aucun titre.? Total : P -------------- Achat : Achats :------------------------------2--------------------------------------------------PRINTER: ;8[iHHtt"HH"HH"2:"ll"HH"")݂dݭHH"Y H{iH"h{iH"h߭HH"H{iH:H*"heH"hh{iH"hH Y"h "H{iH:H*"heH"hh{iH"h8pI8pIH{iH:H*"heH"hh{iH"h8pId8pI0:H""h : i:H""h : i(:H""h Haa:H*"h eH"h8pIHXX:H*"h eH"h8pI% : Pme%"H Y"h"8pI8pI0: : i:H*"h eHUU: eH{iH"eH{iH"v8pI8pI0m: : i(:H*"h eHRRm: eH{iH"eH{iH"n8pI 8pI0HGG: iP:H*"h eH"h8pIp{iH: iP:H*"h eH : iP:H*"h )8 H"hh{iH"H>>: iP:H*"h eH"h8pIp{iH: iP:H*"h eH : iP:H*"h )8 H"hh{iH"8pI8pI0mm: eH":H "h:H "h: iP:H""heH{iHeH "{iH "eH{iH ". vmm: eH":H "h: iP:H""heHeH " mmH "hiN8pI i 8pI i 8pI i 8pI55{iH"h{iH{iH"{iH"HH?"DHHHA"HH"HH"HH""HH"݉d"HH"{i+kAnne 19Intrts Dividendes, , Intrts DividendesAnne : ;8[i H DH"DH"i(H:"8pI}"""8pI0i H:"mm: eH"{iH:H "heH"h{iH"H"h&8HH:""C8pIr{iH{iH "{iH "i 8pI0g:H "heH{iH "{iH "{iH "(H:"""{iH"h{iH"H"h&8HH:""8 H:"08 H<"" dd"{i+k-Vous n'avez touch ni dividendes ni intrts.Total :Dividendes et intrts : ;8[i H H"8pIi "8pI01: i:H""h (H:""""""{iH{iH "{iH{iH "{iH "d{iH{iH "{iH{iH "{iH"{iH{iH "d{iH{iH "{iH{iH "{iH"h{iH"H"i8pI(H:"""""i H:"""{iHP:H*"heH"hh{iH""{iH"{iH""d8pI0yi 8pI{iH: iP:H*"heH"hh{iH:: iP:H*"heH"hh{iH{iH"%"8pIU{iH{iH "{iH ":8pI0q: iP:H""heH{iH "{iH "{iH "{iH"h{iH"H"h8HH:""8 H:"8 H<"iH:" " "{iH: iP:H*"heH"hh{iH""{iH"{iH""dH:":H!"heH"{iH: iP:H""heH"h{iH"H"h8HH:"""8pIM{iH{iH "{iH "i 8pI0q: iP:H""heH{iH "{iH "{iH "{iH"h{iH"H"h8HH:""8 H:"8 H<"8pIDiH:"!!"{iH{iH "{iH "8pI0q: iP:H""heH{iH "{iH "{iH "{iH"h{iH"H"h8HH:""(H:"!!"{i+k Vous n'avez touch aucun revenu.Total : :En 19 :En 19 Revenus :Prix moyen d'achat : ;8[i"h{i+  ;ik ;8[iL"HH":H"h: :H/"heeH;; ":H"h: :H/"he+{iH{iH "{iH "8pI0a:H "hi{iH{iH "{ieH{iH ": 8pI0F:H"h:H/"he:H"h:H/"he++eH{iH "{iH{iH!!eH "{iH "{iH{iH "{iH "{iH ":H"h:H/"he-:H "hi:H"h:H/"he-:H "hi:H"h:H/"he:H"h:H/"he++eH{iH "{iH{iH!!eH "{iH "{iH{iH{ieH "{iH "{ieH{iH "8pI0Ai*:H "hi:H "hi{iH{ieH "{iH "'{iH{iH "{iH{iH "{iH"{iH{iH "d{iH{iH "{iH{iH "{ieH{iH ":H"h: :H/"he{iH{iH "!!eH{iH "pu:H"h: :H/"he!!eH{iH "{iH "{iH ": 8pI0:H "hi:H"h:H/"he:H"h:H/"he++eH{iH "{iH{iH!!eH "{iH "{iH "'{iH{iH "{iH{iH "{iH"{iH{iH "d{iH{iH "{iH{iH "{ieH{iH "YK nJ"{iH{iH "{iH{iH "7"Y"7"X": 8pI0: 8pI:H"h:H/"he{iH{iH "!!eH{iH "p<:": i{eH{iH "{iH "d{iH{iH "{iH{iH "{iH"H: i{eH{iH "{iH "2{iH{iH "{iH{iH "{iH "{iH"H=": i: i:H "hi{eH{iH;; "{iH "{eH{iH "{iH{iH "{iH{iH "Qc +nJ"{iH{iH "{iH{iH "ᢧ7"Y"7"X"+08pI0n8*:H "hi{iH{iH "{eH{iH "p9<:": i{eH{iH "{iH "d{iH{iH "{iH{iH "{iH"H: i{eH{iH "{iH "2{iH{iH "{iH{iH "{iH "{iH"H=": i: i:H "hi{eH{iH;; "{iH "{eH{iH "{iH{iH "{iH{iH "ᢧHH":H"h: :H/"he{iH{iH "!!eH{iH "p tzJ"H"h! " 86pI tHH8 H "hHH x8H "hH"h'"pI<8 8{iH{iH "{iH{iH "{iH{iH "{iH "{iH{iH " 8pIj{iH{iH "::{iH "{iH{iH "{iH{iH "{iH{iH "{iH{iH "0j{iH{iH "::{iH "{iH{iuH "uɯ$: m8pI0: i{iH{iH "{ieH{iuH "{iH{iuH "p: i{iH{iH "{ieH{ikH "{iH{ikH "0%+08pI0g8*:H "hi{iH{iH "{ieH{iH "p: i{iH{iaH "{ieH{iWH "{iaH{iWH "p%: i{iH{iaH "{ieH{iMH "{iaH{iMH "0%9HH"8pIU"S":"8*pI9:H"h:H/"heeH"ႏ`::"u::"e::"U::"E::"5::"%8+0 <8H`777788 :"8*pI{iMH:H"h:H/"he:H"h:H/"he++eH{iaH "!!eH{iaH "{iaH"h{iMH::{iMH"{iMH"c{iMH8*:H "hi{ieH"h{iMH::{iMH"{iMH":"{iMH:H "hi{eH"h{iMH::{iMH"{iMH"HH"'U":"::"HH"3HH"{i+k Amenez la souris sur une part... % F FAutres ObligationsF.C.P.SicavActions trangresActions franaisesr3܀@r3܀@0q?0q? Liquidits' "' % G),/v2v8 <!Fd JM\ i bm p      ba.a.    b     ba.*7:=.@.L P!Zd m qt s. l   ~  b),; BEa.KXbs.j l ps  k k   b+ +   ~ $ b+ . = J bN Q ` m buc.c.    b    bc.a.  .. !)d < @CR V`s.h l nq ~  b c.s.  l (+1 HKZ ^fl o ~  b_ _   ~  b? ?   b> >   be.%! (! 7 D bKNe.Taea.ic.vy|.. !d    l hh ~  b25D KNe.Tai l ohrh    b  ~ # b*a-a< I bV = bA `H tK tN R bV `Z ^ b } l l   < "  b `   b `    l %  5(  57 dF Y \ s x {      l   5  5 d    $ B J l P  5S  5b dq     a. c.    l    a. a.  s.  l   c. c.s." l ( <a?aBJ l P)5S)5\ {X~X l )5)5 .a.c.a.-0a.6CP\s.d l j)5m)5vUyU|.. .. c.c.a.s. l ")5%)5.R1R4a.8E.H.] a.d.w {e.GGs. l )5)5  s. l )5)5&0s.8 l >)5J dPSb g>j>mws. l )5)5 s. l )5)5s. l )5 d De./2e.8Ea.Ic.MZ]`.c.l txD{ l  l s. l hh hh  D$e.'a.+c./e.<.?.HKQ Ue.] l cos.w l }hh a.c.e. l a.c.e.04575E ` dvgvv ^\^\^\^\^\D(*^\= D(*^#\ie.e. $(a.,c.9.<.U] l chfhoux e. !$e.*7? l EhHhZ]c z}  !3OdRdi].a.a. "s.* l 04 8;CLW""Z""mp  y].e."""".  l  5 5$ d3"6"E mpe.vs. l  5 5 ds. l  5 5 d, t s. l    $369?BQ VYmx{ " "s. l  5 5 d""( IT\ l bVeV~s. l  :=L PWZ]`e.fs}s. l      ' 2 5 B T s z   ! !     e.   s. l !!!!!! 8!;!J! N!V!e!h!k!q!t!! !!!!!!!!!!M"  y"}""""Z"X""" l ""L" l """;";" "" l ""L# l #36#9#H# O#X#e#m# l # #####L### l ## l $$ l $"$ l +$3.$3\$)_$)i$ $$$ $$$ $$ l $$ l $5$ l $% l %% l %5(% l 2%=% l D%L% l U%`% l g%o% l x%3{%3%)%)% % & &'&0&9&F&R& l \&f& l p&s&& & ` u' y'''' l ''L' l ')')'( l  ((L( l #()&()8(;(A( X([(j( q(t({(L((( l (( l (( l (( l (( l (3(3))))&) =)@)) ` %* )*1*7*P:*P*P*P*P*P***L**+L++'+ l .+6+ l e+)h+)+', ` ,,, ` ,,,, l -;-;- ---P-P$.P'.P;.P>.PK.T.a.m. l .N/ ` S// ` /000 l 60;90;?0 000Z0X00 l 00L0 l .1)11)S1Y1_1(e1*h1Dx1P{1P11111D111 1 28"2.28":2 F2 X2^2 3 43:73:3:4:]4`4g4Ll4r444h5p5x55555 l  6}666777I7PL7PV7PY7P77 l 7 l 777:7:7:7:7:7:7:7:8:8:8:8:78<8<87>87@87B87D88F88t8}8 l 8 l 88 l 8 l 83838)8)99:9:"9 P9 l g9v9:y9:9 9 l 99:9:9 : ::P:P4::7::A:E:S:Da:(g:*j:Zn:XCDACSEGDEFPROCDSEG~globalJ LONGGLOBALSNDA STACKSIZEU TOOLERRORCHK_PASMAIN  _PASBLKMOVE STATICUNIVTOOLUSERTOOLGSOSFORWARDEXTERNALINLINE.p.o.p.o.p.o%B0PpXʈ"TDbH KZh+(z@k`8x۪[{;Bieugwm}oc)%5'7-=/?# $4,<:IEUGWM]O_CL\6.  ,@ runtime 6.H;i{HH ;[ H H"hHHH "hhH "HHHH "hhe: kHH ;[HH"HH" HH"d&)H "h "ԯH"8k"HH"h"kHH"k0;8 ;[H"h#H({iH "h%)))XHH "h: ) )d   +;i08k ;[@ZZH"h""""":""+hk "k ;[   :T+  ;i k ;[ ( ) e:e::D+  ;i k ;[   :0 )   h)+H   ;i(k HH;[H"h H "    hh+;ik ;[HH""+;ik ;[0  +  ;i k ;[0  +  ;i k ;[0   +  ;ik ;[  Ȁ +  ;ik ;[  Ȁ +  ;ik ;8 [  d) e )e     ;e i ;[907301 )80'e     +  ;ikHH ;[ d0b) W  gF @ e )e)8 0  ):  +;ik HH;[ F0D @0>)8 04  8 8  e :e   hh+  ;ik H;[d 8 2 )    8 ) h+  ;ik {cH;[hh+hk {cH;[ JJJ -)0 0 0 0 0 0 0  hh+hhk {cH;[  :JJJ 1)0 0 0 0 0 0 0  hh+;ik{cH ;[ +;ik{cH ;[ I7+;ik{cH ;[ 7+;ik ;[   (+;i (k ;[I7   (+;i (k ;[ I7  (+;i (k ;[ jjjjjjjj +;ik ;[JJJ+)0 0 0 0 0 0 0 7    (+;i(k H;[IIʩ FeI+k H;[ I Iʀ f  8 F F I+kcck8k H;[IIIIʀFf ee&IIhhhh+k H;[ I I IIʀ&&ff !  8  FfFfͥ  IIzzzzzz+kIIkIIk##kkCCkIIk8 # zz(k *kJjkjjjk***k;8 ;[  {iH "{iH{i H " +;ik;8 ;[  {iH "{iH{i H " +;ikHHH ;[ HHHHH &"  Ȁ8: ))e:  +  ;ikHHH ;[H HHH HH '"  Ȁ 8: ))e:  +  ;i k;8% ;[$ &{i$H{i+H{iH  "{i$H{iH1H/H "+'+&*;i)k ;[HHH)H ("h +;ik ;[HHHH)H )"h h +;ik;8& ;[.H,H{iH{iH{iH "{iH2H0H  "+(,'+;i*k ;[ )  +  ;ik ;[   +  ;ikHHH ;[ )f A [8Ai a {8ai 80))  J ) J) +  ;i k ;[HHHH "hhhh+k ;[HHH"hhh+k ;[HHH3"hhh+k ;[HHHH"hhhh+k ;[HHHH+"hhhh+k ;[HHHH $"hhhh+  ;ik ;[H  HH"+ ;i k ;[HHHH  "hhhh+  ;ik ;[HHHH  "hhhh+  ;ik ;[HHH "hhh+k ;[HHH "hhh+k ;[HHH "hhh+k ;[HHH "hhh+kHH;iHHHHHڢ "hhk    h:h<Z"<H:HkHHHH "hk ;[  "ኇ+ ;i k   ;[Z z Z"+hhhk . &     ;[Z z Z"+hhk ;[ ڢ "+  ;ik ;[  "+  ;ik   ڢ "+  ;ik ;[ " +hhk;iHHHڢ "ኃhhk ;[d  +hhk ;[ȗȥ @ȩ+hkH "hk ;[ "  +hhkHH "hhkH "hk;iH "hk "  k H H H H "(p0   ;ik;8  ;[dd\:"hi ) a{8     + ;ik;8 ;[$&{iH"` V$&") d d dd{iH"$&{iH"(+$#;i"k;8$ ;[HH,*"hH,*."h222202 2 2 22 2.)dHHH" "h!#%#2%2# {iH" 22+&2%1;i0k;8 ;[$$F$dd{iH"$$$$$ $$ + $#;i"k;8( ;[HH0."h! " "888868 8 8 88 84)AHHH" "h!#!%!'%8'8 88H0.4"h)8)88868 8 8 88 84)_HHH" "h!#!%!'%8'8) {iH" 882)8dd{iH"+*8)7;i6k;8 ;[  & dd{iH"   + ;ik;8 ;[$$@${iH"$$HH""+ $#;i"k;8 ;[$& " {iH"+$#;i"k;8 ;[ "{iH"+ ;ikk;8 ;[  ; $& d {iH"L  +$#;i"k;8 ;[  ; $& d {iH"L  +$#;i"k;8 ;[$$m$HHHH$H" "hh {iH"#{iH"{iH"+$#;i"k;8 ;[  1 {iH" H"zz$&+ ;ik ;[) +;ik;8 ;[$$$$$) d {iH"L $+ $#;i"k;8  ;[&&& d {iH"!&&  &!L &+"&!%;i$k ;[) +;ik ;[ HH"+;ik ;[ HH"+;ikHH ;[   ȥ  "+ ;i kHH ;[  )   "+;ikHH ;[  hjȯlceȯg  "+ ;i kTRUEFALSEHHHHH ;[HHHHH &"  Ȁ 8 : ) )e:   "+  ;ikHHHHH ;[HHHH HH '"  Ȁ 8 : ) )e:   "+  ;ik;8) ;[//3 (3*(5 *{i(H9H7H{iH "{i(H{iHHH "5/1"++7*6;i5k;8) ;[//3 (3*(5*{i(H{i7H{iH  "{i(H{iHHH "5/1"++7*6;i5k;8) ;[//3 (3*(5 *{i(H9H7H{iH  "{i(H{iHHH "5/1"++7*6;i5kHZHH ;[ 80,* )e)     HH"% }ȷ~ȷ HH"[+kHH ;[   ") "+  ;ikHH ;[   "  ) "+ ;i kHHHH ;[":e   Ȁ :    +  ;ikHH ;[   "%HHeHژ8 ("h "+ ;i kHH ;[   " ,HHHeHژ8 )"hh "+ ;i k;8* ;[0002"LHH{iH{i H{i H "{i H6H4H "02"+,4+3;i*k;8* ;[0002"LHH{iH{i H{i H "{i H6H4H  "02"+,4+3;i*k;8* ;[0002"LHH{iH{i H{i H "{i H6H4H  "02"+,4+3;i*kZHH ;[ "N)   Ș "Ȁػȷ)  Ȁ阠+hhhhkZ ;[ )? HH"% MȷNȷO HH"++kZ ;[ ) )   +k;8 ;[d)  : )) H"h{i H)"{i H "H{i H{i HO"h)HH:" HH")j{i H)"H i H:" @HHg"{i HHH H H~"h"H 8 H:"HH "h)5HH "h)!HH ") rr "+;ik;8< ;[BB)) H"h{i H)"{i1H "H{i H{i1HO"h)HH:"d{i H)"  i{iHV"᩼ {iHV"᩼ H({iH "hХ ɥ) {iHU" H i H:"႑v8pI9) {i H)"H H"8hH H:" 8 i{iHU"H"  B5 HHg"{i1HHH H H~"h"H 8 H:"Ⴋd;HHH "hhh=H ""h9) 4;Ȅ;  "= "BN&; " " ";;Ȅ;  9 ";f) B +>B=A;i@k;8 ;[d)  : HH " " +;ikPRINTER: CONSOLE: KEYBOARD:  i&2JQgiiiiG+0@igilisvii#i0 3 djruiii&'AaGbiii<ijiiiiZiiii i-l --i!iiWh-o-?!Finii'i[inii!i@iii iiOr@"@"h$j,l4c:eBgP@"@"k @"!@"!@"-"@"">"""""""""u&"&#u&6#&c#u&#%#&$$%_$&$%$&%%c%&%%%& &u&G&u&&&&&&&&&&V(u(Y(u(c(iz('((T,i,),,-i .-.'2.)CDACSEGDEFPROCDSEG~globalJ LONGGLOBALSNDA STACKSIZEU TOOLERRORCHK_PASMAIN  _PASBLKMOVE STATICUNIVTOOLUSERTOOLGSOSFORWARDEXTERNALINLINE.p.o.p.o.p.o%B0PpXʈ"TDbH KZh+(z@k`8x۪[{;Bieugwm}oc)%5'7-=/?# $4,<stuvwxyz{|}~32 <;:98BA3K I*!#$%&'()76543C"+,-./0JKL?Np-<9p-<p (( Xi20 XCi0 \g X if0  Xis0 ;ZJTp)Z8Tp Z&Tp r2 r0  r50 P_k MP\p;PJp)P8p Fichier Edition OK;PJpMP\p _Pnp 32C0  A(L~ ?NTp E5V ap0 /5@0 5)0  _PnpMP\p;PJp)P8p P&p [5l P^R! Q]" BNJ# BM$ 3?h% 3?&23 "K4' 4K59 FK6K XK7] jK2309409 5BK 6BK 2 4' 4K59 FK6K XK4' 4P Mouvements ContinuerP&p #2H I #2J0P #a2R :I0 :0Iv0 #R2p h.0 .X0 up Extrait de compte MontantQuitterPriodeMoisTotalitAnnuler Zz@ erOK MontantQq Suivant Supprimerr QuitterOKSuivantOKAutres ObligationsF.C.P.SicavActions trangresActions franaises Titres OprationsTitres Transactions Portefeuille NonOuiAnnulerOK Informations... Rendement Annuler Statistiques Evaluations Oprations AnnulerCouperCopierCollerEffacerNouveauOuvrirSauverQuitterModifierAchat de titresVente de titresCrditDbit Titres... Transactions Options...Imprimer Evaluation ConsulterEffacer Rendement OprationsA Propos de...,??,   ..@ CompositionXxCcVvOoSs      TtPpEeVirgule = PointJF Achat d'un titret d'un titreF Date :F Nom :F Valeur :F Nombre :F Frais :JF Options d'affichageNo :Anne :Du :Au :JF Titres 1.5JF Vente d'un titreitreF Montant :F Libell :JF Modification - Suppression,JF Gestion de comptes-titresJF Vincent BOBEE - 19911JF Certain portions of this software59 FK22T3-T4-<T5O^T6[jT 8G0P_ YD W  "L4/JVous avez commis une erreur dans une ou plusieurs dates./^#0L4/JIl n'y a aucune transaction dans cette priode./^#0L4/JVous n'avez choisi aucun titre parmi la liste propose./^#0L2/JVous ne pouvez pas annuler l'achat d'autant de titres. L'opration est annule./^#0L4/JVous devez acheter davantage de titres./^#0L4/JVous ne pouvez pas vendre autant de titres./^#0L4/JVous feriez mieux d'acheter au moins un titre.../^#0L4/JVous feriez mieux de vendre au moins un titre.../^#0Fn4/JVous n'avez ni effectu de transactions boursires, ni touch d'intrts ou de dividendes au cours de cette anne./^#0P2/JLe fichier a t modifi. Voulez-vous le sauver ?/^ Oui / NonL4/JLa date doit tre entre sous la forme JJMMAA./^#0 d0@?>3= 1L4/JVous n'avez effectu aucune transaction ce jour-l./^#0P( | \Pdd PVYMYM PXYMYM P'%;/%;/ PK aX x a P ( g P ( c P Y( O syzǬ`^~+3Aˈ@aeiEIOUou `AEIOUaeiou ^AEIOUaeiou ANOano ~AEIOUYaeiouy   !"$%&'()*+.-./0123456789:;<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz #{}ᱰѥ\[Ȍɲ|θ۷ڴ]^`jkµ~ϹsyzǬ`^~+3Aˈ@aeiEIOUou `AEIOUaeiou ^AEIOUaeiou ANOano ~AEIOUYaeiouy h h h h h h h h h h h# h+ h. h8 h: hD hF hN hQ h Y h!\ h"c h#o h$v h%| h& h' h( h1 hG hH hI hK hL hO hP hR hT hU hV hWhX hYhZh\h^+h_9 hFhNhUh\hchkhshzhh  h h hhh h h h h h hh h h,h+h Gh Y"h {"h .h "h h h h h %h 3h Ah Oh ]h kh yh h h h h h h h h h h h !h ,/h =h W h c h nh |h  h h  h  h  h  h h h h $h ;h R#h0 h P(h x*h  h " hB hb h*h(h(h*h&(hN(hv h h h(h(h&(hN*hJF are copyrighted by TML Systems, Inc.Pdd P ( g P ( / P ( / P ( \$ P ( c P ( / P'%;/ x%;/ P (( : PK aX x_ P O( Nk P L( A PVYM xYM P W( 0 PXYM xYM P Y( O P^&E9(&E9 -2O?  C N   FUK ey (*P*PT+PD,P,D]]]l@<J(<@     ((0*Z*     /  P( x*   " B b *((*&(N(v   ((&(N*x     !("(#($:(%b & ' ( ) *(+**,T*-~*.*/*0*1r.2& 3D 4b 5 6 7 8 9 : ;4 <R =p > ? @ A BCDEF6GTHrI(J(K@ (Lh (P (R (S (T (U0 VP (Wx (X              F    = 9 D 1 !\ "c #o $v %| & ' ( H I K L O P R V WX Y \^+_9 NU\cksz             !,+ ; Y" {" . &      % 3 A O #  k y             ]  ,G 1 W c n |          $  Q# t + V(.PuP$)Pt)P)PPd*PP +P %P +P+P5P,PPP-PPoP X|BjLCKDc;?!D eD  /M (G!9 2 1 1 1 9 170 15.09.91 0 0 0 0 0 0 0.00 20000.00 0.00 0 6 010189 Versement 0.00 20000.00 350.00 -3550.71 50.71 10 1 150189 SAINT GOBAIN 3550.71 20000.00 370.00 -5550.00 0.00 15 1 011189 SICAV 5000 9100.71 20000.00 450.00 4429.69 70.31 10 2 010190 SAINT GOBAIN 9100.71 24429.69 70.00 -7080.93 80.93 100 1 010290 EUROTUNNEL 16181.64 24429.69 0.00 150.00 0.00 0 6 150390 Intrets SICAV 5000 16181.64 24579.69 28.25 -1695.00 0.00 60 1 151190 EUROTUNNEL 17876.64 24579.69 50.00 140.00 47.80 50 6 150391 Intrts SICAV 5000 17876.64 24719.69 50.00 2452.20 47.80 50 2 150991 EUROTUNNEL 17876.64 27171.89 SICAV 5000 15 3 EUROTUNNEL 110 1 2 1 Dcembre 1991 SICAV 5000 404.27 15 3 EUROTUNNEL 39.85 100 1 8398.05 Titres 1.5 - Manuel de rfrence Vincent Bobe - 1991 I Le menu Fichier 1.1 Nouveau Cette commande permet de crer un nouveau compte. Cette opration doit prcder toute transaction. La plupart des fonctions du logiciel sont d'ailleurs inaccessibles si aucun compte n'est ouvert. Si un compte est dj ouvert au moment de cette opration, et si une modification a t effectue depuis la dernire sauvegarde, l'alerte ci-dessous vous propose de sauver le compte dej ouvert, puis le nouveau compte est cr, remplaant le prcdent. 1.2 Ouvrir - Pomme-O Charge un compte en mmoire. Comme pour "Nouveau", une alerte propose ventuellement de sauver le compte courant. Aprs le chargement du fichier, la fentre des transactions est automatiquement affiche, en tenant compte de la priode considrer (voir "Options" dans le menu "Mouvements"). 1.3 Sauver - Pomme-S Enregistre les informations relatives au compte en mmoire sur disque. Si vous tentez de quitter le logiciel, de charger un compte ou d'un crer un nouveau sans avoir sauv certaines modifications, cette fonction sera appele, si vous le dsirez, par l'intermdiaire d'une alerte. En outre, elle n'est active que si vous avez effectivement modifi le fichier en mmoire. 1.4 Imprimer - Pomme-P Cette fonction permet d'imprimer deux types de documents : * La liste des transactions actuellement choisie (voir "Options" dans le menu "Mouvements"). * La liste des titres en portefeuille. Le dialogue ci-contre permet de choisir entre ces deux possibilits. 1.5 Quitter - Pomme-Q En utilisant cette commande, vous quittez le logiciel, et vous revenez au slecteur de programmes en service (par exemple le Finder). Une alerte vous propose ventuellement de sauver le compte courant s'il a t modifi depuis la dernire sauvegarde. II - Menu Mouvements 2.1 Modifier Cette commande vous permet d'agir sur une transaction existante de deux faons : * Vous pouvez la supprimer, annulant ainsi son action (mouvement de titres, de liquidits). * Vous pouvez modifier certains de ses paramtres : le nombre de titres achets ou vendus, les diffrents montants associs (frais, prix unitaire et nombre pour un mouvement de titres, montant pour un mouvement de liquidits). Vous ne pouvez pas modifier la date de la transaction, ni le nom du titre concern. Par contre, vous pouvez changer l'intitul d'un mouvement de liquidits. Les paramtres non modifiables sont affichs, mais inactifs. Lorsque la fentre de dialogue apparat, vous devez entrer la date de la transaction, puis appuyer sur "OK". La premire transaction correspondant cette date s'affiche, ainsi que sa nature. Si deux transactions ont la mme date, "Suivant" vous permet de passer la suivante. Une fois la transaction voulue affiche, vous pouvez la modifier, ou la supprimer ("Supprimer"). Lorsque vous appuyez sur "OK", si vos modifications conduisent une aberration, comme un nombre de titres ngatifs, une alerte vous prvient, et l'opration est annule. 2.2 Options Vous pouvez modifier la priode choisie pour l'affichage des transactions. Cette fonction vous propose trois choix : * Afficher la totalit des transactions. * Afficher une priode dfinie au mois prs. * Afficher une priode dfinie au jour prs. Si votre choix conduit une priode sans transactions, une alerte vous prvient et vous invite faire un nouveau choix. 2.3 Crdit Le dialogue ci-contre vous permet d'entrer la date (sous la forme JJMMAA), l'intitul et le montant d'un versement de liquidits. Si vous voulez entrer plusieurs transactions la suite, cochez la case "Continuer". Tant qu'elle sera slectionne, "OK" ne fermera pas le dialogue, et vous pourrez ainsi continuer la saisie sans tre forc de rappeler la fonction. Pour quitter, dslectionnez "Continuer" avant de valider la dernire transaction. Remarque importante : Vous devez entrer un versement de dividendes ou d'intrts sous cette forme : D'abord "Dividendes" ou "Intrts", en respectant strictement cette forme (accents, majuscules et minuscules), puis un espace, et enfin le nom du titre, comme vous l'avez entr lors de son achat (Voir le remarque du paragraphe 2.5). Si vous ne respectez pas ces conventions, le logiciel n'identifiera pas ces mouvements comme lis au titre lors de rcapitulatifs. 2.4 Dbit Tout comme "Crdit" cette fonction vous permet d'enregistrer un retrait de liquidits. Les remarques relatives au dialogue sont les mmes que pour "Crdit". 2.5 Achat de titres Cette fonction vous permet d'enregistrer un achat de titres, et d'inclure ceux-ci dans votre portefeuille. Le dialogue ci-contre vous permet d'entrer les diverses informations relatives la transaction. Notez que la rubrique "Frais" est facultative, une entre vide signifiant que vous n'avez pas eu de frais. Le bouton "Montant" vous permet de vrifier le montant total de la transaction. Une alerte vous prvient si vous entrez un nombre de titres nul (ou ngatif). Enfin, le rle de la case "Continuer" est dcrit au paragraphe 2.3. Remarque importante : Vous devez vous assurer que vous entrez toujours de la mme faon le nom d'un mme titre. Notamment, n'alternez pas majuscules et minuscules au gr des saisies, le logiciel ne regrouperait pas les diffrentes formes d'un mme titre. 2.6 Vente de titres Le dialogue ci-contre vous permet d'entrer les informations relatives la vente d'un titre. Vous devez choisir ce titre parmi la liste propose, reprsentant votre portefeuille. Le nombre de titres possds s'affiche alors. Une alerte vous prvient si vous vendez plus de titres que vous n'en possdez, ou que vous entrez un nombre nul (ou ngatif). Le rle de la case "Continuer" a dj t dcrit au paragraphe 2.3, et celui du bouton "Montant" au paragraphe 2.5. 2.7 Titres Cette fonction affiche une fentre contenant la liste des titres actuellement en portefeuille, classs par catgorie. Celle-ci vous sera demande une seule fois, aprs l'achat d'un nouveau titre, lors de l'appel d'une fonction utilisant la catgorie de ce titre (comme "Titres", ou "Evaluation"). Lorsque la fentre est affiche, vous pouvez obtenir des renseignement sur un titre en double-cliquant sur la ligne qui le concerne. Vous obtiendrez ainsi un rcapitulatif des achats, des ventes, et des dividendes ou intrts le concernant. Si vous appuyez sur la touche "Option" en double-cliquant sur le nom du titre, les informations seront imprimes au moment de l'affichage de la fentre. Si vous cliquez en dehors de la fentre d'information, celle-ci se fermera. 2.8 Transactions - Pomme-T Cette commande affiche la fentre contenant la liste des transactions de la priode actuellement choisie (voir "Options" dans le menu "Mouvements"). III - Menu Statistiques 3.1 Rendement Cette commande affiche la fentre contenant la liste des titres en portefeuille, si elle n'est pas dj affiche. "Choisissez un titre" apparat dans la barre de menus. Alors, double-cliquez sur la ligne correspondant un titre. Un dialogue s'affiche, vous en demandant un cours rcent, puis une fentre contenant le rcapitulatif des achats le concernant s'ouvre. Pour chaque achat, le logiciel vous donne la variation du titre depuis cette date, en valeur globale et en rythme annuel. Si vous cliquez en dehors de la fentre, celle-ci se fermera. Notez que si, aprs avoir entr le cours du titre, vous maintenez la touche "Option" enfonce en cliquant sur "OK", le contenu de la fentre est imprim. 3.2 Oprations Lorsque vous slectionnez cette option, un dialogue s'affiche, vous demandant d'entrer une anne pendant laquelle vous avez effectu des transactions boursires. Si vous dsirez imprimer ces informations, maintenez la touche "Option" enfonce en cliquant sur "OK". Le logiciel vous donne alors un rcapitulatif des achats, ventes et versements de dividendes ou d'intrts intervenus dans l'anne. Si vous cliquez en dehors de la fentre, celle-ci se fermera. 3.3 Composition Cette fonction s'utilise en conjonction avec "Evaluation" (voir paragraphe 3.4). Elle utilise en effet une valuation dj mise en mmoire. La liste de ces valuations s'affiche, et vous devez en choisir une en double-cliquant sur la ligne correspondante. Une fentre s'affiche alors, contenant deux disques colors. Le jaune, gauche, reprsente la part de chaque titre dans le portefeuille. Le bleu, droite, vous montre la part de chaque catgorie de titres. Lorsque vous amenez la souris sur une partie de ces disques, le nom du titre ou de la catgorie correspondant s'affiche, ainsi que sa valeur le jour de l'valuation, et le pourcentage reprsent. Pour quitter cette fonction, cliquez sur le bouton "Quitter" en bas droite de l'cran. 3.4 Evaluation - Pomme-E Le logiciel va vous demander un cours rcent de chacun des titres en portefeuille. Vous pouvez quitter cette fonction tout moment, en cliquant sur "Annuler". Une fois tous les cours entrs, la liste des titres possds s'affiche, avec leur valeur, ainsi que le montant total reprsent par le portefeuille. Si vous cliquez en dehors de la fentre, celle-ci se fermera. Un dialogue vous demande alors si vous voulez conserver l'valuation en mmoire (Elle sera sauve avec le fichier). Le nombre d'valuations dj prsentes est affich. Vous pouvez conserver dix valuations. Enfin, un dialogue vous permet d'imprimer l'valuation. 3.5 Consulter Cette fonction vous permet de consulter une valuation dj en mmoire. La prsentation du portefeuille est en tout point semblable celle dcrite au paragraphe 3.4. Lorsque vous quittez la fonction, un dialogue vous permet d'imprimer l'valuation consulte. 3.6 Effacer Vous pouvez effacer une valuation prcdemment enregistre, si vous la jugez inutile, ou si vous avez dej dix valuations en mmoire et que vous voulez en crer une nouvelle. La liste des valuations s'affiche, et vous devez double-cliquer sur la ligne correspondant celle que vous voulez effacer. IV - Menu Pomme 4.1 A propos de... - Pomme-? Informations propos du programme et du shareware. 4.2 Virgule = Point - Pomme-. Lorsque cet article est coch, tout virgule frappe au clavier est interprte comme un point. Ceci permet notamment d'utiliser le clavier numrique pour entrer les valeurs. Si vous dsirez avoir accs la virgule, dans un libell par exemple, dslectionnez cet article. Notez qu'au dmarrage du programme, il est coch.sous-catalogue "Titres" : * "Titres", programme excutable sous GS 5.02 ou plus. * "Boston.10" et "Geneva.10", deux polices de caractres utilises dans le programme. Installez-les dans le sous-catalogue System:Fonts de votre disque de dmarrage. Ces polices sont souhaitables pour profiter pleinement du programme. Si vous souhaitez malgr tout ne pas les utiliser, la prsentation de certains rapports et dialogues sera altre. * Enfin, "Compte" est un fichier texte utilisable avec Titres (AuxType $0001 pour viter de lire un fichier incompatible) qui vous permettra de dcouvrir plus rapidement les diffrentes options. Ce programme est en shareware. Vous pouvez le copier et le distribuer librement. Mais si vous le trouvez intressant et choisissez de l'utiliser, envoyez 50 F l'adresse suivante : Vincent Bobe 78 Bd Victor Hugo 92200 Neuilly/Seine N'hsitez pas me communiquer vos remarques constructives. J'en tiendrai compte pour modifier Titres (si toutefois la Maths Sp m'en laisse le temps !). Boston  T U&@&ɀD0` @ @@B HN|‘8pC?9p~9? h``! qP`0JaO$2~c:4?A 8$@~ND H C0`"H$d4A(D($(A @ @ P .I`0F D@!Hd H!  "IAG ҕI# (THT (  R %%0PAHD @=cL9{? $eJ4C EP |QbH@) R<"$_A P0!@!~!!` H1HD)H">|?I a$$$ Au4@IAb"*DHE@E! H0IBF%`r&EDDŐI)RbH3%i P$"$TR A PHA@!@!!P H DP# "B ( I a$$$ @_@|QlDbB"DE)LYD@0A $A/E$Pbb  (F$R$ " @3cB!!H E(Ă!) H$P#F4haRI addd`D.!b"D)qRfLH$H@A$"E  ?;2"?;;~98!8G睽s\8c#G 8sv۷yy㳳 ?cEt$t xs~AaF8dGag$q` @@ P@` #B "%*/167<BEJOUZ_dinoqv{  )2?GPWZ_belnu|  $**3<BIRYbipw~$+2;=AFQX_dinuz *-8=BDFKPX^fox $)/49<D                                                Geneva  i 6)&T20  IF0IH8M0N1I@.]o8<0 w@L\)[H!Lml3D8Š:$hs'n~IH1! D#DF011bH#BAScH@E nDP@T@H@I2VPQBB B0*1`H$ D۟/nn{o1@)Pcff333m329FeT(LHDBO-$(C`n\Bjh QD:5} C$1\HTED&fe&SL1@)PcL̤ffS32GZD.U$"F"T2R$b (tS~T_HTB$b}&Se*TI) F0cww<ffS32;FxUJ"D/G $ČD3)PD!}F8 0H"$&ba&S*TIE@LDD$ffS32FdHe$"RBDR% eHHDSIHaD@cDF8 0HB&fe&SL$(@F1L̤ffS32E DH"RDRR"ČDBFbHC~9||:7Gt\G~S,nxb)@F.\ww;33$Y8#Imt$s`0@ @     #&+0267;@BGLRW\afklnqvy~ "&*.26:<?CELPTX\`dgkpw| #).38>FNVX[`hoy~ !).357<CGQY                  1qp\H FINDER.DATASTFO7 GENEVA.10RESTFO7 BOSTON.10RESTFO7H LISEZ.TITRESTFO TITRES.DOCALTFOCOMPTE.WGSALTFOHTITRES.WGSALTFO.....  .. .. .. ..... ,.. ,.. ,. . ... , .. , .. ,  .  ... , .. , .. ,  .   ... . , .. . , .. . ,  ......,...,...,.fffffffffffffffffffffffffffffffffffffffffffffffffffffmaFfffmfmfffmfffmffffffmfmff^]^fffmfffffffffmfff^^fmmmmfmmff^fmmmmmfmfmm^fmmmmmmm^fffffffmmmmmfffmfmmmmmfmmfmQfmmfmmmmmmmfmmmmmfmmmmmfmmmmmmmffmmmmmfffffffmfmffmflfmfmffmfmffffffffffmUUUfffffffffffffffffffffffffffffffffffffffffffffffffffmUUUUUUUUUUUUUUUUUUUQUUUQUUUUUUUUQUUUQUUUUUUUUUUUUUUUUq wqUUUUQUUUUww莎舎莈 wwwUUUUUUUUwwwwwwqUUUUQUUUUwwwwwwwwqUUUUQUUUUwwwqwwwwqUUUUQUUUUwwwq舎wwwwUUUUUUUQwwww舎wwwwqUUUUQUUUUwwwq莈awwwwqUUUUUUUUQwwwqfa興   fawwwwqUUUUUUUQwwwwfffffawwwwqUUUUQUUUUQwwwwffff ffffawwwwqUUUUUUUQwwwwfffafffawwwqUUUUQUUUUwwwqffff舎  fffffwwwwqUUUUQUUUUwwwwfffaffffawwwwqUUUUQUUUQwwwwfffaffffwwwwUUUUQUUUUwwwqfffffffawwwwqUUUUQUUUUQwwwqffffaffffawwwwqUUUUUUUUUUQwwwwfffaffffwwwwUUUUUUUUQwwwwffffafffawwwwqUUUUUUQwwwwfffaffffawwwwqUUUUUwwwwffff  ffffwwwwUUUUQwwwwfffa ffffwwwwqUwwwwfffaffffawwwwqwwwwqfffaffffwwwwqwwwwwfffaffffwwwwwwwwwfffaffffwwwwwwwwqffffffffwwwwwqfffa....ffffwwwwqffffffffawwwfffa,.ffffffff,,,,,,,...ffffafffff,,,,,,,.ffffffffffa,,,,,,,.fffffffff.,,,.,..   fffffff fffff   fff              ....,.   ,..,..... , ,  .   ,   ,,.,  ,. ........    ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`?ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`f`?fDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD`?fDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD`fDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD`fDnDD`?fDnDD`?fDnDD`fDnDD`fDnDD`fDnDD`?fDn..DD`fDn..DD`fDn.DD`fDn ,  DD`fDn ,,  .DD`fDn  .DD`fDn "  .DD`fDn ",  .DD`fDn,  .DD`fDnDD`fDnDD`?fDnDD`?fDnDD`fDnDD`??fDnDD`fDnDD`fDnDD`fDnDD`fDnDD`fDnDD`fDnDD`fDn...., ...DD`fDn,,,,,.,,,.,,,,.DD`DDDDDDDDDfDn,,,,,. ,.,,,, DD`DDDDDDD@fDn,..,,..DD`DDDDDDDfDn,, . ..,, " .DD`DDDDDfDn,,,,,.,,,.,,,,.,.DD`DDDfDn,,,...,,...,..DD`DDDfDnDD`@fDnDD`fDnDD`fDnDD`fDnDD`fDnDD`fDnDD`fDn.DD`fDn...DD`fDn ,,, DD`?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^ieefYfVVYeefVZYZjeefYYeYeVVVYYYefVYVfYVVeefYVYeYZeeZeejZjfVVVUYeeeVVVYYYeVVfiifYeUZZiZVijUjjifZYeeVVVViiZZifVZVVVeiZVViVZeZjiZiifYeZVVYYeVVVVYYYeVVjUiijZZiieYVVYZZeYYfefYYVVVUeYeYjVZZYiiieZZijUjeeiYZVVeeYeYiVYZYUZfie%jZeYeeVVUiieUUUUUjUYYUeeeUUYZejYiYYZVViYUUUUUfVeYfZjeeefVVYjfYefZUieeeifYeYYVVYYYYeeeVViYZiYjjifjieYfYUiYYeeZiafjjiYfYYfjVYeeiYZiiifjjjiVjiUeffYeiieeVfZZYQZVVYeeeYZfVijZiZjjieYeffeffYffeeffYeYeeUYiZVZeejijiYYfVVVeeefZfZVjViZjieYeffeffYffeVYeeYfYYeeieUejVYjZjiYjjijiViiiZVjUjVZVfieYeeeeVVYeeefYYeYeeYUYfZeffQeVVVeejUjUjYiYeYeYeieYiie+*ɖYeeiefVVeVYYijiefUiijZjiZifffe,((++ffjifheeiiZfYjeejZffjiieeeiZVVViYiYfVeii&if&/ieefUeeVefeeiZVifUjUiYYZViVeeUﯯ꯯+ +"ȱ,KefYUiYiYfZffYiZfajjifeeiYei%.,"+++,ȫ "**.˦eZjieUeZifVZeZZjYfZVifYfefYY / +(((******(UZefVYfffeeejiYVYZfYYX晉o((****(** *(**fieZVUUfYfeZiYjZiiiZfeYYjVeX nho⾫*** b"""!b"!YVUUjVVfiYfVjfYiZZiUjYifZYYiib̚f"Ĭ**"(("""(""]ApPP\pP(*˾YVeiiifeffVVfYVYfZijifYf*ʚ橾o+*"""@A]PPPAAAPP]P@pp@fiUeeYUVYZfVYfYVZieeQiffYfjffjjo,**""PP\AAppA@A"*UfVZiYYUUUUefVVfeejeVieYQZfeYo,**"P\(@!HHB!H@eYjifYUUifYYiZUYfUZiei +"ı*J* `\ba@HHHa!!H@!b@+ f jfYffeeUeUeeeiVeeZifUeZUfe****!\AtHH@ "YeiiYUUYVZUZejfZiUU***b]pH@@***effjieUUYVVeZijUeZfe***bp]TA@ b%eeiYVUZVYZieeefU*"""""!p]Pp@B!@""*Ⱦ您eUYYfVefUYZfeࢪ"PP\Pp@@!P&d확eVVYeZifUUej \@!@"+/fiUeYVUVZejfZfeiUQjfe!!@+暪eUeVjVZYeVUUei*PHHBH@*˻&feYVYVVYZefifeꂪAH@!**+,feUViVVUeVZVijiUeiei*@"""*﹦jVjUiVVYfZUie說]  @ @b"(+eUefUVUZefifQ&iiʪH"qdgqP""**˪UiVVYjiieYe䪂 P!aaddaFFdgaVUeeYYVUa@!"(*%fieYVYYeYfVUUʨ@!eYeYeeeVVYeeUUADQDDQYed@Ab"*"*eVVYeifYk䪀P!QAADDADDDDQA@H@pR"ejUiZeejYiZiee&ʨ@@QQ"HeZejfejVeo(!gFvQQ?`a*)iUfYjiQY  "ٕeVUQQQQ%HfiUUieifYeQYo"qYUQEPG`eZfeeiZiiYYZZ*@*FqUUaC*(efUfZjieiQj !g٢UUDQQQ] VfUiVYjfj*eYYYUVQQQ? (VUejVjieeZefi%f\*bQE@? *VfVeejfZVijiYYe"H٢Q VfjVVfefZVfZ*PHgiUV)`"YjiZeZeee@ geU@?%D YfejUYjfZVijfUQY!TD$DE٦?iFPYVYeieZVU!@$"TFTEZemҖfe **UZiVUZZifQ QQZVij]?ݖea@ YeYeYfUe!HUbH?֦ZiZݩfe fYYZejeifYU gfQQݖZYiieViZfi?AQ*驙UZYejYiYZUQ, HUXGgښYUii]?ҦjZiffi ejVfejijijee @gdGDEfZYU?YeVfffie` *eYZYjfjee@HUXGgYifjeVeffYfjfii?%(YiUifUjfeY"PgdGDEffiVfeYe֙jYZfjjVY@ /fjVUeUjfifjffYVQ`dHUXGg?ZfVfffffee??VejY"effffiffYQuUu(gdGDEթjfVfifejZffjfi eiijfefYeq"UXGgժiWfffYjffejfYZif*feejZYY!ETE%fZgffiYfYfeiij]?)fiVYffi!"UbH?٥effYfffiiYifej}]"fVi^eeiᝑQQ?fZjfYeDDFY}?ݙ}fkf] fiieffYf UbHeiUEW%"#0JȈ?ݙҚffUQUH2"(fifYgڕQYښT6fZ"""#$̧J?ݖ֦ ֈ5s)ҝYigٖmfe@*bUX333PG"!Tx?՝ݖ ĈUhYfeU\+"!٢Qݲb&8D3"vX ݝ,N ȝ&a YhjiPٛ hW2)7yUV)ݙ-FC7P3@eEe&ݙdQPL!QY ZY`AHPjn%h@ݾ P10W#%]/TLLAU]*ɈD̉bfHt, bD0A% DIM*bEU @@IxfB  RV`"340ݒԀ)  (@\zfe"ЪT#WGvf3" *Uݙ@ ȄM (*a@ DfeҨ"WTEzT22" ݪ^ M*mHY PUG݈`dDGeC# ?"@aPD@  "PU]٘D̈@vhTruUuTXDeCBQ" ?]U]DUPДD *\ QPHȈ@UUDqG$D4a D! @ ! DHDGBREcДX U@Qa DH!$WR@@ Ԅ @ ф%WR"1 UԈ@?Q I5W`MU]HH?Vc"" ?՘ȀH]H?dEC3A ?P@]UUV UU@ Y7wxr .!\@? i%hs#  Z""?QUUZDfe?Ht ??R""?DexfB *m?"*ǎfzfe" ٙH "*b-eViZfife??*b@ ⪦ٙjZiffiUG  "-UQ -@YeViffievhTr ݝ-U܀ )ffZfeii?UUDvp ݕUbݜH *bUieVY]EDP]٢QVfjYUV)jZeViZfii??@jjfefiif?iYYeeiejQYfiYVfefiQefjfeViZfiVYQjieVjfefijY?YefQjVYeeieVfe?jfefifjUYeQiVeViZfiVYQfYefZQfe&jVjZiffijYQiiffUQe-jVYeVfefieQjfefffjfffZQfjffeifZfeffYfZjQeViZfiVfVYAZyffeffZYjZiffi&jVeViZfijYAViyfifiZYeVfffiejZjZiffiiAVZfjeffffjQffYijfiijYeVfffieffejefYDDjّjZfeVYYffYijfiijQfRTUrR"3̈VejYiVjYYfVYAeCfl5"""2M\tjZifiVefjfjYAa335q""@i'jefeiif%jZjiei+&"a tC2'e`YiiiijQjefYif)YaT3u1$fTVQiYfYfeeQYVYeijA+U@Ur2UeeiifQiYijUifYYeiAi CpDQifVY%iYZefZfAfe p Ef 33CAVefeieYijijijfUQi uB0Utwfa2!jViiii閕fYjfjZAf ep 5DWC!#"!fYfeeYZifUjfZjAeeZfVfi(@DDvXT1"1&VeiiiYQ*ZeUjZeffYYjfZiifYUWQUEFT4%"".iffeVYQ ViffiZVijYYYeiYZe$rDHCFVeeieYVijfZiZeZjijiiiDt%$V0jVfiAfejYZYiiYjiYEu! djZea*efeViZfieYfVYUiVVjifUUu"#ZVijQVjiefiiYA*eVfZZeiViiYeZefYQUv ZiZ"ifYefeieYAhYfZVijfVeefeZVijV5f2  ZYii%VfeeiY"&fZiZfeYeYZieZfije6DT34eYUiiQ%feifVYQZZYiieeiUjVZZZViaEUUh!ffZYUfVefeijYٕjYUiiUUfZYYf3wwW!YYifjeVejViiiAUfZYUeVYeZefV20VZffiVfeYe.ejYfeef(ZfYifjeVeiVYejijZea@jVZfVfffffeeVeiiiYA ZffiVfeYeffjVffeZVijQfd"eYjfVfifejVfeVYQ*fiZfVfeffeefYiiZYYZii'fR!eeUiWfffYjffe)VeeieYAejfUefe%fYUeZfeiZYiYf fPeUUefZgffijVifiUiife/iYUZYUiefiQHUTpjUYieffYfffi-feieieYfeYfiYieeVifZjififYgfUG eZifZjfYeDDFY}jVifeiiYAejefjfiUjjYiYeiYiUXGgeVefeiUEW%"#0JȈifYeeYQfZfYjifYe*ifeejZfjfYDTE*ZfZT6fZ"""#$̧J%VeifiYdVYeifYYiQiiYZZejeYjiiQVVYYZVX333PG"!TxfefeiVYQ&ZiYZeVY %VfiZVejfUifiZieVUVfYjeb&8D3"vX&fVieiY֪VjjjijYeY(&eVUiiYeeiiZZfii&fZfUVVUZjnFC7P3@eEejVYifeAjUYjYjZiYfefjeffYjfZVYijjfZVefeZfd P10W#%Q&efefeiiY%ijifZZejfUQ/fiefZifYieYjejZejifijiZeeeijYffo슘bD0A%ViiiVYQieZVijZYVAefZjeZVjZfeiZjiZVjjZfi&Yefejffen.ʪRV`"340&jVYfeeYQ.iZeViZA*aafeiVijVffYeeeefYjZefZfjVYejiT#WGvf3"jVeeii ZiZieUe*Jf[VUjVViVefYfZjZfZVYefUijViYZ("WTEzT22"fifVYejZYfeVU!"/XfeYjejViYYjYeefYeeejefjj("`dDGeC#.jVefeieYQVYfiVb ffifjVjZfefjeYZZfYfVVfk悂uUuTXDeCBQ" ijVieiiAfVYeieeeę!eiYVjVZiYVYefYjYfVYYjVZjiY̨ @qG$D4afYfeYfZfeieiYe* !`iYjVVZfVefYffYefeVefiiZf GBREc%VeViZfiiYA&fZYfe@ Jb!eYjZZifefYfZVjViYjj !$WR@ifjfefiVYQ-YVeeifYe@b* Y%XYifeiZjVViZVifjVVjVViYZ A@b%WR"1%VYeiieY+ejYiZiiY!pX[)ٕiZVUijZjZViZiijZjifeei@5W`jVfefeiAVejiejUY"VheYeYfiVefeiZVjjVjeiZiffYZj`* U@Vc""&efeeiVY+YVYjieY!`d (XYfefieYZViYjVVYZYiYe`!dEC3AVifjYQefiefeeY@uUJ2&aeYYfVfZjifiYiYfjiVefc*"tUUVijVefeieA"ffVeeeYYq**beefYeifeffeYei **Pr7wxrjieiif jUjefQ**hhbYfYeifZYfVYZ晰%hs#%VYifeYQ*eieViZfi! /*V%efYeYeX o**]P!HtjVeieiiYAejVjZiffi"!**"ffZfZYfZZef&bo !H@xfB fifeiVYAiVYeVfffieY]*o☢!&ɵX bX39& zfe"-VYieYjZVffYfjfiiYA*ľ&&fedɲf&o*!]A@fejVeieiA%VjYZfjjVY^! /&hfao⬋**UGefefeiVYfVejY@"*"ı,K(+"Ɗ"FvhTr)VeYAYjZffjfi]**,J*P]@fUUDvp ijVefeAZejfYZif@Ab"******* !]eDPDDP-feViZfiiYViYfYfeiijQp\`***b'QEDEVjZiffiYAViYifej}Q@ub"!b " "p]A@ yQ@EjVYeVfffieYA)}fkfQQ@!qP\p}b!c!P\Pp@0HU@%fffYfjfiiYUffUQUH2"Bp<@]wgfDCDDPVjYZfjjVY ֈ5s)ґ !A!@??UXGg&jVejYA( ĈUFv@O! ?B<vhEtEejZffjfilN ȝ&aQUP??!*UUDvp )jfYZif"dQPL!QYQQ?<<??"DbEDPiYfYfeiijA"TLLAUQ@<?<?!Q&iYifej}Q" DIA$<<?*UbH}fkfAԀ) A?<?"١QQffUQUH2"*Uݙ@ ȄAX?0<??!UV)% ֈ5s)ґ^ A???*ٕU@ ĈU@aPD@?????H"UQQ"lN ȝ&aA]U]DUPДDQ gaE@dQPL!QYQ D! @YD@!UUbH/"TLLAUQДXQ`p"ٕTFQQ" DIA@ ԄeFt@HqUQQԀ)  UԈ@FUQgq!gfUU@*Uݙ@ ȄAMUQeYVUQvhٕeUDaQQQ^ A՘ȀHEDQYVUUUQETE"@aPD@P@QEA@]U]DUPДDUU@D! @.!\@ДX Z""@ ԄR"" UԈ@*mMUٙH՘ȀH*b@P@ avoir du poids: 20$ pour un particulier, 50$ pour un club. C'est une bonne ide. Ils sont sur place, peuvent faire un lobby ( c'est d'ailleurs leur but avou). Leur adresse: The Alliance International Inc. P.O. Box 20756 Louisville, KY 40250 abcdefghFailing Grades III, sa plus dure mission ! Failing Grades est le titre du dernier article d'humeur (de mauvaise humeur) de John C. Dvorak en dernire page de Mac User et Failing GradesII est le titre de la raction de Tom Weishaar, rdacteur en chef d'A2-Central. Pour situer un peu le personnage, Dvorak est un populaire journaliste amricain, qui croque des rateliers aussi complmentaires que MacUser, PC Magazine ou PC Expert. Sa dcisive contribution l'informatique fut le clavier Dvorak, formidable entreprise de libration de la secrtaire dont l'Apple // est le dernier ordinateur proposer en standard un exemplaire. Bref, John Dvorak est un surhomme et sa parole vaut de l'or (au sens propre). Son intressante thorie est que le systme ducatif amricain est en crise, qu'il y a beaucoup d'Apple ][ dans les coles amricaines et qu'en consquence, l'Apple ][ est responsable de la crise de l'enseignement aux Etats-Unis. A ce stade, ce n'est plus un syllogisme, c'est un sophisme. Eructant de rage au souvenir d'un professeur lui soumettant son projet d'acqurir encore plus d'Apple //e pour sa classe, il embraye sur la technologie dpasse que reprsenterait l'Apple // que mme Apple dcourage aujourd'hui, ajoutant qu'il s'agit d'un mauvais investissement, improductif et inefficace alors que le monde conomique a beaucoup gagn avec l'informatisation des socits (l'article ne dit pas si, fusill par le laser psychique de Dvorak, l'instituteur a pu reprendre son travail). Il faudrait rassurer John Dvorak en lui disant qu'il existe des pays o il n'y a presque plus d'Apple // dans les coles et ces pays connaissent eux-aussi une crise de l'enseignement et que pour ce qui est de dcourager les ventes de l'Apple //, Apple n'a pas attendu 1992. Tom Weishaar explique trs bien que des 3 personnes qui auraient achet en 1984 un IBM PC, un macintosh et un Apple //, c'est bien cette dernire qui a fait le meilleur investissement dans le domaine de l'ducation, je vous renvoie son article pour de plus amples informations. John Dvorak est cependant trop bien inform pour ignorer l'existence de l'Apple //GS (il n'en parle jamais), du systme 6.0, d'HyperCard GS, d'HyperStudio ou de la Video Overlay Card. Cet ensemble, programmable de nombreux niveaux, donne accs l'Hypermdia (DVI, magntoscope), dispose de trs nombreux logiciels ducatifs et de l'exprience de milliers de personnes depuis plus de 10 ans. Qu'est-ce qu'un mac apportera de plus ? L'incompatibilit entre machines ? L'obscolescence tous les 6 mois ? Sa quasi-impossibilit de programmation ? De plus, tant donn les volumes demands, il s'agit de remplacer les GS par des mac classic ou, au mieux, des mac LC. Au passage, c'est l'occasion pour Dvorak de dnoncer la clique de l'Apple// Cupertino (en plus, il tire sur l'ambulance) et l'hrosme des commerciaux qui prsentent le mac comme un ordinateur ducatif. Je crois que l'explication de toute cette bile, c'est que, tlguid par de hauts responsables d'Apple Computer USA, Dvorak a annonc la mort officielle de l'Apple // il y a 3 mois. Cette torpille, destination du monde de l'ducation, n'a pas atteint son but et en retour, a beaucoup contribu asseoir la crdibilit de son auteur (et il est bien assis). Dans la presse macintosh, le ridicule ne tue plus depuis bien longtemps (cf. l'clatante sant d'Andras Pfeiffer), auquel cas l'article se serait termin sur l'pitaphe suivante: A John C. Dvorak (1942-1992), John Sculley reconnaissant. V. Hemeury jklmnopqrstuvwxA propos de MultiSwitch... Deux mois ont pass et GS Infos est l'occasion idale pour faire le point sur MultiSwitch et les problmes que certains utilisateurs rencontrent. Une release de MultiSwitch est disponible gratuitement pour les possesseurs d'une version antrieure la 1.0.4. La procdure suivre est simple mais stricte car je ne veux pas perdre trop de temps lors des mises jour, il faut donc m'envoyer l'original avec une enveloppe auto-adresse et 4 francs et 20 centimes en timbres. Cela ne signifie pas que toutes les mises jour seront gratuites, la release 1.1 sera probablement payante mais cela n'aura rien voir avec le prix des updates sur macintosh. Par rapport la version 1.0, MultiSwitch 1.0.4 corrige: Le bug (non-bloquant) de la configuration d'une application ncessitant de cocher ET d'ajouter une resource de rexcution a t corrig. Un bug bloquant qui pertubait MultiSwitch lorsqu'on supprimait la quatorzime application de la liste est radiqu. Toutes mes excuses pour ce problme. Un nouveau menu, Fentres, permet de slectionner et/ou d'afficher En Mmoire, ProDOS 8 et Applications qui possdent maintenant une case de fermeture. Les fentres peuvent restes masques lors d'un retour d'une application, le temps de rponse de l'interface est alors amlior. Des cases de zoom dans presque toutes les fentres qui ne laissent visibles que les barres de titres, ce qui acclre encore les oprations et amliore le look du bureau. Certains dialogues sont plus compacts et il y a moins d'options pour viter de pertuber l'utilisateur. Un utilisateur s'est demand pourquoi il y avait un dialogue demandant la confirmation du lancement d'une application via un bouton de la fentre Applications qui venait d'tre dit (modifi). Comme l'indique la documentation, lorsqu'on a excut un programme via un bouton, celui-ci ne peut plus tre dit. L'avertissement qu'un systme comportant plus de huit partitions risque de planter le Basic.System n'apparat plus qu'une seule fois. L'option permettant de copier en mmoire l'image d'un programme est supprime. Elle n'offre aucun avantage par rapport aux resource de RExcution, elle semble source de confusion pour certains utilisateurs inexpriments. Le menu Programmes comporte un nouvel article Configurer qui fait la mme chose que le bouton Applications de la fentre de Configuration mais il est plus explicite et plus simple d'accs. Il existe de nouvelles resource de rexcution pour Installer, Beagle Draw, Graphic Studio et HyperCard. Certaines sont carrment nouvelles, d'autres sont des volutions trs intressantes de ce qui tait propos. En effet, MultiSwitch 1.0.4 rsout radicalement le cas de ces applications qui rclament lors du chargement trop d'espace pour leur pile (MultiSwitch rsolvait dj le problme d'un manque d'espace pendant l'excution). Ainsi, HyperCard, Graphic Studio et Installer peuvent parfaitement cohabiter alors que leur chargement rclame plus de 59Ko de pile alors qu'il n'y a le plus souvent que 48Ko de disponibles. L'opration se droule en deux temps: Il faut d'abord patcher votre application (HyperCard, Graphic Studio) avec AutoPatch pour liminer l'erreur lors du chargement. AutoPatch permet de "dpatcher" un programme si vous dsirez (c'est le cas d'HyperCard) en distribuez une license qui fonctionnera sur un systme ne comportant pas MultiSwitch. Il faut ensuite ajouter la nouvelle resource de RExcution. Si vous n'effectuez pas ces deux oprations, vous risquez des problmes ! L'appui sur la touche Option pendant l'initialisation de MultiSwitch empche l'excution du programme de boot. (Jusqu' prsent, elle n'vitait que le chargement du menu rapide Boot.Menu). Pict2 Converter et Pict2 Controler ont subi quelques modifications, il est maintenant possible de modifier les couleurs d'une image ou d'une animation partir d'un programme tel que Platinum Paint et de visualiser le rsultat toujours partir de l'application grce Pict2 Controler. Ces amliorations se font au prix d'une augmentation de moins de 512 octets de la taille du logiciel, ce qui est vraiment minime. Remarques gnrales Certains utilisateurs sont ennuys parce qu'ils ne matrisent pas immdiatement toutes les fonctions de multiswitch. D'autres trouve la documentation un peu trop technique. MultiSwitch permet de faire beaucoup de choses, il est fourni avec de nombreux utilitaires et occupe les 800Ko d'une disquette, il n'est donc pas possible de tout comprendre en deux semaines. Je ne crois pas que la doc soit trop technique, de plus certaines fonctions (programmation de la bote outils, C3 Dispatcher) n'intresseront que les programmeurs. Cela dit, en matire de documentation et d'interface, l'utilisateur a toujours raison mais ils ne disent pas tous la mme chose. Les bugs reports Je crois que la documentation n'insiste pas assez sur le fait que pour fonctionner sans plantages avec MultiSwitch il faut un systme stable et des applications correctement configures. Si la configuration des applications ne rclame que lire la documentation (Prise en main, Annexe I, Annexe J), configurer un systme rclame peut-tre un peu plus de patience. Certains Inits/NDAs forment des mlanges dtonnants, si vous rencontrez des plantages, bootez sans Inits ni NDAs (avec le systme 6.0, il suffit d'appuyer sur Shift lors du boot) et faites fonctionner vos applications. S'il n'y a aucun plantages, installez alors dynamiquement vos NDAs/Inits favoris jusqu' ce que vous cerniez le ou les coupables. Certains CDevs sont aussi de vritables mines de bugs, c'est le cas de Twilight. S'il y a toujours des problmes, c'est qu'une ou plusieurs applications n'est pas bien configure. La bal MultiSwitch sur serveur Rtel (3615) ou RTel2 (36 14) peut me permettre de vous rpondre relativement rapidement sur le cas de tel ou tel logiciel. Autre regret, je crois qu'il tait une erreur de proposer une installation par dfaut de MultiSwitch Texte, d'une part parce qu'il s'agit d'un programme assez ancien dont je me suis un peu dsintress parce qu'il me rendait les services que j'attendais de lui mais je comprends qu'il n'en rende aucun la plupart d'entre vous. Le script d'installation de MultiSwitch n'installe plus cette version (qui devient la tche du script MultiSwitch 1.0 (Pro)). Je croyais aussi qu'AutoPatch serait le moyen privilgi pour installer MultiSwitch car il installe simplement et rapidement une version compacte mais fonctionnelle (Aide en ligne, les fichiers P8.Launcher et Bas.Launcher ncessaires au ProDOS 8 sont extraits de la resource de MultiSwitch lors de la premire excution d'un programme ProDOS 8 ou AppleSoft) de MultiSwitch avec en plus les polices de caractres utilises par MultiSwitch et Pict2.Converter. Cet article peut donner l'impression que le passage sous MultiSwitch a t difficile, je crois que cela n'a pas t le cas. J'ai prfr parler des problmes mme si ce n'est pas trs positif plutt que de retranscrire les messages d'utilisateurs heureux ce qui fait vraiment trop dmonstration auto-satisfaite. Beauvais sera l'occasion pour moi de diffuser la release 1.1 de MultiSwitch et de faire la dmonstration d'une utilisation sans problmes sous systme 5.0 ou 6.0 de trs nombreuses applications GS. z{*+, !"#$%&'()*+,0 SYSTEME 6.0 Cette fois, il est sorti. Le 24 mars, Apple annonait officiellement la sortie du systme d'exploitation 6.0 pour le IIGS ainsi qu'une nouvelle version d'Hypercard GS la version 1.1. Le 6.0 tait disponible en tlchargement sur Compuserve dbut Avril. BEAUVAIS Tous les espoirs mis dans Beauvais se confirment. De nombreux Apple User Group seront prsents et les dmonstrations seront exceptionnelles. Ne manquez pas cet vnement unique dans la vie de l'Apple II qui fte, je le rappelle son 15 me anniversaire. On ne pourra peut tre pas en dire autant du Mac. Les dveloppeurs inquiets du futur RISC APPLE-IBM ont t convis aux Etats-Unis 2 jours de Forum. John Sculley a assur que le Mac serait la principale source de revenus pour Apple dans les 5 prochaines annes, Michael Spindler a affirm que le Mac n'tait pas mort et Chris Espinosa a cru bon de renchrir en claironnant qu'ils ne feraient pas au Mac ce qu'ils ont fait l'Apple II...Dans le premier dito de la nouvelle formule d'A}~NDLR: Pensant qu'il avait un intrt pour certains d'entre nous, B.Tomeno ayant vu ce montage sur RTEL a demand l'auteur de nous permettre de le diffuser. Il va de soi que toute personne se lanant dans cette ralisation le fait ses risques et prils. The VISION presents : **************************************************************** ** Comment transformer son cran GS en tlvision ** **************************************************************** (ATTENTION : ce montage ne marche pas sur les crans Macintosch) Ecrit et dessin par Julien Benezet. Note : comme vous allez le dcouvrir, il vous faudra un minimum de comptence en lectronique pour raliser ce projet. J'ai essay d'expliquer le plus simplement comment y parvenir. Si aprs la consultation de ce dossier, vous ne vous sentez pas capable d'y arriver, je propose de le faire pour vous pour 900 frs : tout mont, prt tre install. Vous n'aurez qu' acheter l'interface CGV (YCR). Je m'occupe des cbles, du commuteur, et bien sr de l'ampli et du transfo qui l'alimente. Si vous tes intress, tlphonez au : 90-96-39-10 Demandez Julien. Nous en discuterons... Merci. 1/ Introduction D'abord quelques avertissements... Transformer son cran en tlvision ne comporte aucun risque majeur ; mais l'opration est cela dit relativement coteuse (moins que l'acht d'une tl) et demande la ralisation de cbles, circuits lectroniques, etc... Si vous avez des problmes, vous pouvez me contacter sur 36.15 + RTEL Bal : COLOMBO 2/ Les problmes rsoudre : Oui, voici les problmes que nous devons affronter pour transformer notre cran en TV : - Notre cran n'est pas muni d'un tuner permettant de capter les chanes de TV. Pour venir bout de ce premier obstacle, il vous suffit d'acheter un magntoscope. Votre magntoscope doit obligatoirement tre muni d'au moins une prise PERITEL (une autre compatible CANAL+ sera trs utile si vous tes abonn !), et de prises pour vacuer le son. - Ensuite, Magntoscopes, camscopes, tuners ou autres n'envoient (sauf quelques exceptions trs trs rares) que des messages en vido COMPOSITE (toute l'information vido est sur une mme broche) , alors que l'cran de notre GS ne lit que les messages RVB (Rouge Vert Bleu). Ce n'est pas important que vous compreniez ce qui se passe rellement, tout ce qu'il faut faire c'est convertir le message du magntoscope en message RVB. Pour cela il vous faut acheter une interface CGV de type YCR. Vous pourrez en commander une la socit SODIOVEL Paris : tel : 43.27.54.34 fax : 43.35.53.57 Adresse : Socite SODIOVEL 33 rue BEZOUT 75 014 PARIS Je vous prviens tout de suite, cette interface cote 940 frs (sans les frais d'envoi). Tlphonez SODIOVEL pour qu'ils vous expliquent ce qu'il faut faire si vous voulez en commander une. - Enfin dernier obstacle (et pas des moindres) : le message de la synchro est 1 Volt sur tous les magntoscopes, tuners, etc... alors que la synchro de l'cran doit tre 4 Volts ! Il faut donc raliser un petit ampli dont le plan est sur le fichier 'AMPLI.1'. 3/ Derniers avertissements : Nous allons d'abord faire un listing des dpenses qui vous attendent (j'arrondis) : -Interface CGV type YCR 1000 frs - Ampli (composants + transfo) 200 frs - Cbles, prises, divers 150 frs - Commutateur 250 frs Soit un total d'environ 1600 frs. Avec un peu plus d'argent, vous pouvez vous acheter une petite TV. Rflchissez ! Le rsultat n'est pas dcevant, je vous l'assure . Si vous tes tudiant (comme moi) ou si vous tes chez vos parents, vous pourrez ainsi avoir une tl discrte et vous mter ce que vous dsirez (j'en vois qui saisissent tout de suite l'intrt de la chose !!!). NDLR: D'aprs un sondage tl, les vrais accrocs de la chose suivent Canal + crypt avec une passoire. Il parat que a fatigue moins la vue... N'oubliez pas qu'il vous faudra, peut-tre, aussi compter la dpense d'un magnetoscope, mais je ne compte pas cette dpense car elle n'intervient pas directement : un magntoscope, c'est toujours utile, utile longtemps et vous pouvez l'utiliser ailleurs que sur votre cran ! Au fait j'espre que vous avez une mini-chane, ou des enceintes, car votre cran ne vous donnera que l'image, il faut donc envoyer le son sur quelque chose qui pourra le recevoir. 4/ Ralisation : Regardez le dessin 'PLAN GENERAL', Vous avez compris comment a se prsente ? Bon, aprs, achetez : - l'interface CGV-YCR. - Un commutateur video : il permet de brancher deux appareils (ici le magntoscope et le GS) sur une mme tl (nous, ce sera l'cran). On pourra ainsi passer du GS au magntoscope en appuyant sur un bouton. Attention au commutateur que vous achterez, certains ne sont pas du tout efficaces. Le mien marche merveille. Sa rfrence est : YRPO5S. Si vous ne le trouvez pas, demandez-en un compatible CANAL+ (il sont, gnralement de meilleure qualit). A ma connaissance, le commutateur de TANDY n'est pas du tout efficace ! Alors, attention ! Une fois que vous l'aurez acheter, testez-le avant toute autre chose ! - 4 prises PERITEL mles - 1 prise PERITEL femelle - 2 prises DB15 mles (avec capots vissables) - Du cble (avec au minimum) 4 conducteurs blinds sparement. Pour la ralisation des diffrents cbles, reportez aux dessins 'PRISES' et 'CABLES'. Si votre commutateur marche convenablement, n'hsitez pas, coupez la prise pritel, et remplacez-la par une prise DB15 mle (voir le dessin 'COMMUTEUR'). Et maintenant, la ralisation la plus dlicate de l'opration : L'ampli synchro ! Pour cela, reportez-vous aux dessins 'AMPLI.1' et 'AMPLI.2'. Noubliez pas de faire des cbles le plus court possible ! c'est trs important : des cbles trop longs sont sujets aux interfrences, aux parasites (malgr le blindage) bien plus que les petits. De mme, pour l'ampli, reliez-le la prise pritel (voir schema sur 'AMPLI.2') avec du cble blind le plus court possible. Pour alimenter cet ampli, achetez (chez TANDY par exemple) un transformateur d'au moins 200 mA et qui puisse dlivrer une tension d'au moins 14V. Voil, c'est fini ! dernire tape : le son ! Il y a derrire votre magntoscope une (ou deux) prises CINCH pour la sortie du son. Vous pouvez donc utiliser un ampli, votre chane HI-FI, etc pour recevoir le son. Une fois que tout est mont, vous devez rgler les potentiomtres P1 et P2 de l'ampli pour trouver l'image. Cherchez en tatonnant. Bonne chance ! Julien Benezet PS : En cas de panne : Aucune image GS.TVv' '$GSTV|/+COMMUTATEURg*T'AMPLI.2'z)  'AMPLI.1)r: w &CABLESz.J ,PLAN.GENERALW%=T&PRISES)= JFINDER.DATA&pJ.DESTELLE 3 PETITS OUTILS POUR ETUDIER LES SONS ============================================= Dans la diskette "GSInf.21", dans le dosssier "Son" du dossier "J.Destelle" vous trouverez, dans le catalogue "OutilsSons", 3 petits programmes en basic Applesoft (mais oui... il n'y a pas de honte), sans prtention, que je trouve trs utiles pour tudier des chantillons sonores, et en crer. Ils pourront vous servir d'exemples de ce qu'on peut faire en vitesse, sur un coin de table, et qui rend ensuite dsur l'cran : vrifiez que : - l'ampli et l'interface YCR sont bien aliments - les transfos ne sont pas endommags - les connections de vos cbles sont bien soudes. N'hsitez pas me contacter sur 36-15 RTEL bal : COLOMBO. NDLR: Tout ce qui concerne ce montage se trouve dans le dossier GS.TV. '()*+,-./0123456789:;<=> PLUME 1.0. UN NOUVEAU TRAITEMENT DE TEXTE __________________________________________________________ Un traitement de texte remarquable , dont il a t question dans le prcdant GS INFO ( sa dmo est maintenant parmi nos disquettes du domaine public ) , mais trop brivement mon gout...donc j'insiste lourdement dans ce numro sur ce programme Shareware et Made in France. Il est d au talent de notre ami P. Desnoues . C'est pas cher (130 fr qui dit mieux ? ) a ne prend pas beaucoup de place sur un disque ( 81 k , qui fait mieux ? ) . Plutot que de l'analyser voici , ci-aprs , un extrait peine simplifi et un peu modifi de la " doc ". Lisez , lisez... vous serez allchs et vous verrez qu'il vous offre des fonctions que l'on est loin de retrouver ailleurs , et qui sont pourtant " hachement " utiles et " hachement " chouettes. B.Tomeno N.B. Une version 2.0 verra le jour d'ici quelques mois . ___________________________________________________________ P.S. P.DESNOUES . LA RIGODIERE NORD . 38790 CHARANTONNAY tel 74 59 10 03 ____________________________________________________________ Nous allons passer en revue chacune des fonctions les plus intressantes, dans l'ordre de leur apparition dans les menus. ---------- MENU POMME ---------- Aide Pomme ? ----- Aide intgre en ligne . -------- FICHIER -------- Nouveau Pomme N ------- Permet de crer un document vierge qui sera nomm SANS.TITRE.x (x tant la valeur 1 pour le premier document cre puis 2 pour le deuxime et ainsi de suite). Chaque document cre est accessible en cliquant dans sa fentre correspondante ou en utilisant le menu FENETRE.Donc c'est un programme multifichiers ! Ouvrir Pomme O ------- Permet d'ouvrir les fichiers de type Txt, Src et $50 (fichiers TextEdit). On peut charger plusieurs fichiers situs dans le mme dossier: pour cela slectionner les documents dans la liste tout en appuyant sur SHIFT (slection continue) ou sur COMMANDE (slection discontinue). On peut ouvrir autant de documents que l'on veut: la seule limite est celle de la mmoire RAM. Chaque document peut tre de la taille de son choix, dans la limite de la mmoire disponible. Ouvrir tous types ----------------- Permet d'ouvrir n'importe quel type de fichier et d'afficher le contenu de ce document en mode ASCII ou hexadcimal. Lors de la slection du mode d'affichage, si on appuie sur OPTION, tous les fichiers slectionns seront affichs dans le mme mode. Certains types de fichiers sont analyss pour filtrer les caractres: c'est le cas notamment des fichiers de type $1A (texte Appleworks). Cette analyse peut tre dconnecte temporairement si on appuie sur la touche CONTROLE lors de la slection du fichier: on vous demandera alors si l'affichage se fait en ASCII ou en hexadcimal. En affichage hexadcimal, chaque ligne est constitue de 16 'caractres'. L'option d'affichage en hexadcimal permet par exemple de convertir un fichier en donnes hexadcimales pour une compilation de resources. Ceci s'avre trs pratique pour dfinir des ressources sonores, images, fontes.... On peut mme extraire une partie de document et la sauver pour une future compilation de resource. Il y a bien d'autres usages pour l'affichage hexadcimal, c'est l'utilisateur de Plume d'employer cette option pour ses besoins personnels. Fermer Pomme F ------ Permet de fermer un document: c'est dire de l'oter de la mmoire du GS. Si ce document a t modifi depuis sa cration ou son ouverture, un dialogue apparait alors permettant de: - sauver le document modifi (SAUVER). - passer outre (IGNORER) et donc de fermer le document modifi SANS le conserver sur disque (les modifications apportes au document sont alors dfinitivement perdues). - conserver le document ouvert (ANNULER). La sauvegarde s'effectue partir d'un dialogue classique permettant de renommer le document sauver, de dfinir son format de sauvegarde voire d'annuler la sauvegarde (dans ce cas, le document est ferm SANS avoir t archiv sur disque et donc les modifications apportes au document sont alors dfinitivement perdues). Tout Fermer ----------- Permet de clore TOUS les documents prsents Dtruire --------- Permet de dtruire des fichiers prsents sur disque. On peut dtruire plusieurs fichiers prsents dans le mme dossier: pour cela slectionner les noms dans la liste tout en appuyant sur SHIFT (slection continue) ou sur COMMANDE (slection discontinue). Pour chaque document dtruire, un dialogue apparait demandant confirmation de la destruction (les donnes sont alors irrmdiablement perdues) ou annulation (le document est laiss intact sur le disque). Si on appuie sur OPTION lors du clic de la case ANNULER, tous les autres documents slectionns pour tre dtruits seront eux aussi conservs (autrement dit OPTION-ANNULER permet de quitter la fonction dtruire en conservant les documents slectionns non encore dtruits; les documents pralablement dtruits ne sont bien entendu pas restaurs). Si on appuie sur OPTION lors du choix de destruction (touche VALIDER du dialogue), on ne fait pas apparaitre le dialogue de confirmation: le fichier est alors dtruit sans autre forme de procs et son contenu est dfinitivement perdu. Enregistrer Pomme S ----------- Permet de conserver le document sur disque. Enregistrer sous ---------------- Permet de conserver le document sur disque. Un dialogue de sauvegarde permet de renommer le document et de choisir son dossier de destination ainsi que son mode de sauvegarde (avec ou sans les rgles de mise en page). Imprimer Pomme P --------- Permet d'imprimer un ou plusieurs documents. L'impression se fait avec les rglages spcifis avec Options d'Impression. Un dialogue apparait permettant de spcifier le nombre de copies, la plage imprimer, la qualit d'impression et le type d'alimentation papier. Lorsque vous cliquez sur OK dans le dialogue d'impression, vous lancez l'impression. Lors du clic, si vous avez maintenu la touche OPTION enfonce, tous les documents prsents l'cran seront imprims successivement. Si vous avez galement appuy sur CONTROLE, les numros de page seront successifs d'un document l'autre. Attention, l'impression des n de page ne se fera que si un en-tte et/ou un bas de page l'affichant a t dfini. L'ordre d'impression des documents est celui de leur empilement l'affichage: on imprime le document actif, puis le document immdiatement derrire et ainsi de suite. En cas d'impressions de plusieurs documents avec numrotations successives, bien penser ordonner les documents AVANT de lancer l'impression..... Remarque: si vous slectionnez un document Plume et qu'ensuite vous cliquez sur l'option Imprimer du Finder, ce document sera charg dans Plume et immdiatement imprim (sous rserve que le document soit li l'application Plume). Pour lier les documents Plume l'application Plume il faut procder comme suit: avec IconEditor diter l'icone Plume et indiquer le chemin d'accs de l'application Plume dans l'icone reprsentant les documents (en dessous de Icon's Application Pathname). Pour ceux ne disposant pas d'IconEditor, il faut placer l'application Plume et son glossaire dans un dossier nomm Plume que vous aurez cre dans le directory principal de votre disque de lancement. Autre application ----------------- Permet de lancer une autre application sans revenir au Finder. Quitter Pomme Q ------- ------- EDITER ------- Ce sont les fonctions standard d'dition permettant le transfert d'informations d'un document l'autre ou diffrents endroits d'un mme document. Les zones copies ou coupes sont stockes dans le presse-papiers. ------------ MISE EN PAGE ------------ Afficher la rgle ------------------ Affiche la rgle de mise en page du document actif: un document ne peut avoir qu'une seule rgle de mise en page (limitation due la version actuelle de l'outil TextEdit). Dans cette rgle, on peut: - dfinir l'interligne (simple, double ou triple) - choisir la justification ( gauche, centre, totale ou droite) - oter toutes les tabulations - placer des tabulations intervalles rguliers (64 pixels) La rgle de mise en page s'applique tout le document et peut tre sauve avec le document (choisir l'option Avec Format dans le dialogue de sauvegarde). - noter: les taquets de marge et d'indentation. A droite, le taquet de position de la marge droite; gauche, le taquet de marge gauche est situ dans la partie infrieure et le taquet d'indentation dans la partie suprieure. Crer un en-tte ---------------- Le dialogue Haut de Page permet de dfinir: - un titre afficher en haut de chaque page avec choix de la justification. Attention ne pas faire chevaucher le titre et la numrotation de page ventuelle. - la numrotation de page en indiquant le numro de la premire page du document (en impression avec OPTION-CONTROL enfonc, les pages sont numrotes successivement quelle que soit le n indiqu ici). - si le titre sera affich galement sur la premDw  3f D0 DBC3333B3033033333 E D  C3003B303330F3330333 D E D  C3000330330B3!0333303330333033B30B 333033330B3030E3 D B F B́ C3000333003330300330003303033333B300003030033003303333B33 BC30030333030303003300003303033B33B30000303033033033BE3 EBBBC300 303330B3D3 0300330003303033B30000303030B30333 F B D B B D C333033B330333330333033333033003333330B30330E3 F BBD B D C3303 B BB B B   B C3B3 px BBFB C3B3033033B30D3 B "","F""",".",", "",C333033333333 B 33<333E3D3<3<3<C303330303B3330333#30330033033300030B3030B303D3 DLDDLED DDDL DLC300 033333033333300333000333333D3B303B3 BxB ED C3000033B33D333B3033000B3330000330B333B30B3030D3 BC300033B30D333D3330030033000333333D3D330D3 BC3033303303B33303333003330330330B3030B303D3 BC3034DDDCC3332C3B3033300330D3033030D33B3003330003033000333D3032C3B3000E3033330030E3333300F3300D333B32 C330330033000333033330030E3333300B3303330 00003300333330B332C3003B3030000E3 0330330E33B330033003B3333003300300D3 333033332C30030B303000F3 03330330E33333 003303E303030033000300333333303032C33003B3000F3 033330030E333330033 3033003030033333330B332C3030003 00330033030B3033003033B33B333330333030333003333 330330B332C333B33B303330332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C33383B32C38B3B3332C333=B 8888B33333338333303B32C333BBB#3338333333323B32C33=D3B38B338B3'83  ## 333 #33# ## 32 3B32C33=̲#3338B33B3833F 3233333B 3033330032C33=̲"3338B33338B3833#3 B3333#3#033330032C33=̲"33338333B3333D33B333333033330032C33=̲"3333338333  # #3 33 B333 B 3  232C33=B"3B383338333383332C33=BB"33833E3833833B32C3B38wB"38B38E3B33B32C3B3BB"333383832C3B3BB"3B3833332C3B3BwB"33383B32C3B3B"38333B32C3B3BB"33832C3B39wB"33832C32-B»̲"333332C32-B̲ܰ"333332C33-EBܻ"""("32C33=EܰBB"#3332C33=E""332C33=E"#3B32C33=E""3332C33=EB"#32C33=EE""2""32C33=EE""#3332C33=B̰B B""332C33=Bܰ3DDDHFD@ B#32C3335BUUB̲"38333E3DD B#32C333UPB"33338F34D@E ""3B32C333UPB"3B3833DDD "#332C333UUB"3B338334D@B B""32C333eBU`B"33383333 33DD "#3332C333f`B"33333383B34; E""332C3336BfUB"3;"#3B32C3B32"-BB"33DB ""3332C3B32"-BB"333DKBB"#32C3"-̲"3B3"""3B32C33=̲"3332 "#332C33=̲"3332""#33"""32C33=̲"333232 "#3332C33=»˲"3332F3"""332C332B˶fBflB""3332E3 D"32C333,B e%RU%RU%RU%RVB""3332E3 EC3B32C3B3"""3 3323   FC3B32C3B3"""3 332p3 B C3B32C3B32" #"2#"2#"2#"2"#3 332p3 C3B32C3B3 2p3 C3B32C3B3 2p3  B  C3B32C3B3 2p3 BC3B32C333E" pD"3B3 BC3B32C333 EpEC333 BC3B32C333 DpDC3334?DC3B32C333  C3B3/C32C33323/C32C3B3 pxpB #3/C32C3B32B33.C32C3 B pxp #334DDC32C32332C33 xpp #332C3323332C333  #3332C3332B3B32C3B3 Bp #3B32C3B3 2 32C3 p #32C32332C33 B #332C3323332C333 #3332C33323B32C3B3 #3B32C3B3232C3 C32C34332C3332C3332C3332C3332CF3B ؃8888B#3332CE3=ˆB3332CE3B3332CE3"332CE3"#330333B33332CE3"#330033B3332CE3"#33000303303303B3330B3332CE3BB"#3303033333033333D3332CE3̰ B"#330003333B333B33333330B3B32C3̰p B"#330003333B30333D3D332CB38̰p B"#33<3B3030330333033303B3330D332CB38̰p B"#332CB38̰p B"#332CB39̰p B"#33 33030303303B33332CB39̰p B"#3333E330E3D303332C3̰p B"#333033333033330303333B3030F32CD3"̰ »"#35US3 333303333D333003D3 03003303333B32CD3"B "#3SB333333033330B33303D303003303330F32CD32D ˻"""#3353 00320D3330333333330B30B303003303333D32CE3D B 33S380300E33330B3 033330333333030F32CE3D B 353833B033033303B32CE3D BUS8B3033303B32CE3D B3 0002030332CE3D B B3333032CE3D B :B3D3D333B3B30B3 3330B33003332CE3D B 393:33D3 333003333333B33333303300F32CE3BB B 333:3 F33033333333BB3333330F32CE3̰  34DC3393333003333333333D33333300332CB3BU]̰P B"#3B333330B30B3 03330B3 333033F32C335BU]̰` B"#3933B30332C335BU]̰` B"#33 #3332C335BU]̰P B"#333033030303332C336BU]̰P B"#333000303333332C336Bfm̰P B"#333003030B3B 3033330332CB3Bfm̰P B"#33 3000330B303303333333332C3""̰ B"#33<3B30030B30330333333B332C3""BB"#33<3B300303003303333333B32C32""#3303B30303033B32CE3"#32CE3"#32CE3"#32CE3BB"#32CE3,BfB˲"#32CE32˻RU%RU%RU%RU%kB""#32CF32""#32CF32""#32C3D" 2#"2#"2#"2#D"332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C330333303333033333B32C33B33333333333003333333B32CD33033333333330303330003330333030030 330330330B30303B32C3003B33333303333000D333333333303333333333333332C30B33333033333333000D333333 33333033B30333B3BB333B303B32C300333333333333330033000D33333333333033333D333D33B32CD333333333033B30330303033303330330 33033303330B30303B32C3B30333B32C3332C303333B3F3033333B30F3E330330303B32C303333B333B3F303E30F30F30003032C303030330B30303330B33030030330330333033330030303B32C300033333333333333333333330030B3003300B3030033000330B303332C3 0003333B333B30B333B3333B333B333 33030B3033000B30300330030B303332C300033333333333E3333B3333300B30B30B3 033000D303003300303003332C30303303330B3030B3030B33033303033333033333333033032C3333B322"B"Dw 3f D0 DBC3B3 E D  C3B3 D E D  C3"B"3 D B F B́ C3 C3B3 BC3 C3B3 EBBBC3 C3B3 F B D B B D C3 #3B3 F BBD B D C3 #3B3 B BB B B   B C3 B# #3B3 BBFB C3 BB F B#3B3 B "","F""",".",", "",C3 BB B#3B3 B 33<333E3D3<3<3<C3 D B#3B3 DLDDLED DDDL DLC3 BBD#3B3 BB ED C3 #3B3 BC3 #3B3 BC3 B%#3B3 BC3 DEBD#3B34DDDCC3 BB#3332C3 BEBDBD#3332C3 DB #3332C3 #3332C3 #3332C3 E#3332C3  DBE#3332C3 BE#3332C3  #3332C3 BDB#3332C3 #3332C3 #3332C3 #3332C3 #3332C34D""#3332C3332C3332C3332C3332"""#32C333232C333232C333232C333232C333232C3332B32C330 B32C330 E32B32C3303;E3232C3303;E3232C3303;E3232C3303;E3232C3303;E3232C3303;E3232C3303;E3232C3303;E3232C3303;E32B33B32C3B3̳303;E32B33B32C3B3û33D32BEB33332C3B3û"33:0333:;:D32uuuwE 33332C3B3˻ 0ª;:BFpEEB332CF3B3˻"B303;E3 2BwBupF3;B332CD33˻B"B303;E32DpE 3;3333B30332CF33˻F"B303;E32DwwB3;3333B30332CF3˻F"B303;E32BB3;33330332CF3û"B303;E32BB3;33330332CF33DD"B303;E32B3;3B30332CD33DD"B303;E32B3;3B30332CF33DD"B33D323;3B30332C3B3DD"33;0333B;D323;3B30332C3B3DE 0»;;323;3B30332C3B3û"B303;3;323;3B30332C3B3û"B303;3;323;3B30332C3B3"B303;3 ;32 3;3B30332C32""B303;3;D3B30332C32""B303;330332C3303B32 330332C3303B32330332C3303B32330332C3303B32330332C3303B32330332C3303B32330332C3303DB""330332C33030332C33030332C33030332C33030332C33030332C3303B3  ##3 33#3## 30332C3303B33D3B3B303D330332C3303B33#3B3#30330332C3303B33D3B3B303D330332C3303B3 B #  33# B# 30332C33030332C3303B330332C3303B330332C3303B330332C3303B330332C3303B330332C3303303330332C3303333B30332C330303030332C33033330332C330F30332C330F30332C3B3333F30332C3B30333F30332C3333F30332C30333F30332C3B3F30332C3B3F30332C33F"#333F30332C33"#33F30332C33=3""#F323B3F30332C33 ™BF3F30332C3B3= "#D32B3:EF30332C333 EB""#33;EF30332C3=D """#B32B33B30332C3B3D »B30332C33=E3"B"#323B30332C3=333"#330332C3=̳33""#30332C3=33"""#3B30332C3=B3"B"#3330332C3=B333"""#330332C3=B333"B"#30332C3;B332"#3B30332C3332""#3330332C3330200020323B3"B"#330332C333B03003300303333"#30332C33300033000323332""#3B30332C3330303003300303303B32"BB332C333032B0 30223333""+B332C3303B3""+"""#3B32C32""+"""#3B32C32""+"""#3B32C3"""+"""#3B32C3"""+"""#3B32C3" B#3B32C3" #3B32C330    32C330B B32C330 BDE3 ## #E32C330 BDE33D3E32C330 B  D 339 # 3#E32C330BF333E32C330BE3# # B #E32C30E333330B3332C300D303333303B3 # # 32C3003330303330B3003303303330300B3B303333D33332C30300303330033B3000333B3 0003303300033303B3 ; # #332C303030333030B300333B303030333B 0003B33303B333332C3000B303330B33003303B30B3030333330003B3330333## 32C30033 0330333330B3330333000030333332C3# ###33# 332C332303333BB32CD3330333303#03333B32CD303303333333323303333BB32CD30333333#30330033033300030B3033B3 033003E30333B33 #B 333# 332CD30300030033300033333B3300333332CD3 0303333000B33300003303333B33300033333 # ## 332CD303033330000300330003333333330030E333333BB32CB3333333300333033 0330333033333030333333033 ##B32C333D303B32C333# # ## # 332C3330E30B3330333B32C3333E30E30B30333B30E33B32C3033030033030033033033300D3 0330330333B303B30303B32C3033333003300 330030300D3 3303300 3330003330B3333B32CD303B33333033003300303000D333033300B3 33003B3330333B3B32CD303333033303300330030303300D3330333003003303B3330B333332CB33303B303330B33330333B30333333303330303333B30303B32C33303332C3332CD33B30330D33303330333332CD303330F33033333B33B3F3032CD3!0333303330333033333B3033330B303330B3303003033032CD303003300033030333333030003333333B33333333333333333003032CD303003300003303033B333 03003B3333BB333333B333B333 3303032CD3 03003300033030333 0303303333333D333333B3333300B3032CB3333303330333330B3 0333030B30B3030B3303330303332C33303332C3332C3303303303330333032C333303303032C3B 3033330B333033033033030330B3303330B3033333303033 0333033033F32C3 0333333333 0333303B3 0003303B33333333030033000333000330032C30333333333 0333033000330303B3033333D3030033000333303300033032C3033333333333 033303300033333333333D3030033000333303003332C303030B30330333 0303330B3303B3333333033333 30333003003332C303303B33303332C3332CE3033303333B33B32CE30333033333332CD3333303030330330332C30003000333330332C3 0003B3 0003333B333B30330332C300033330003333D3330332CD33333030330333033303B32C3333B32C3332C33322"B"Dw  3f D0 DBC3B3 E D  C3B3 D E D  C3B3 D B F B́ C3B3 BC3B3 EBBBC3B3 F B D B B D C3B3 F BBD B D C3B3 B BB B B   B C3B3 BBFB C3B3 B "","F""",".",", "",C3B3 B 33<333E3D3<3<3<C3"""33 DLDDLED DDDL DLC3 C3 BB ED C3 C3 BC3 BC3 BC3 B#3 BC3 B#34DDDCC3  B B#3B32C3 B #3B32C3 B #3B32C3 B B#3303B32C3  B  B#3303 #333 #3B303B32C3 B#330303B30303B32C3 B#330303B30303B32C3 B#330303B30303B32C3 B#330303B30303B32C3 #3?3B30333?3B303B32C34D"#3?3B30333?3B303B32C3B3?3B30333?3B303B32C3B3?3B30333?3B303B32C3B3?003B30333?00F303B32C3B3?00303B30333?B0303B32C3B3?033B30333?00F303B32C3B3?00303B30333?0030F303B32C3B3?B03B30333?B0F303B32C3B3?3B30333?3B303B32C3B3?3B30333?3B303B32C3B3?3B30333?3B303B32C3B3>ܻ3B30333>ܻ3B303B32C30303B30303B32C30303B30303B32C30303B30303B32C30303B30303B32C30303B30303B32C30303 303B32C30303B30ݰ303B32C30303B3 3B303B32C32 3B30303332 ݲ3B303B32C303303B30303 33000F303B32C303303B30#3B3 #3 30 3030F303B32C303303B30 303F303B32C32 3B30#3B3 #3 30 3030F303B32C30303 330300F303B32C3B3 ###  B330303332 ݲ3B303B32C3B3333B3130303B3 3 3B32C3B3 33#3B303330303B30303B32C3B3333B313333330E3  330303 3 3332C3B3 B3B  B33333330E33330303B30F32 ݲ3332C3333330E330330303B30F3 0003B32C3B3 ## B# #333330E330330303B30#E3 0 3003B32C3B33D3E337wvD3  #33 30 #3B303B03332C3B3 # 3#3ܳ37fe33030 ݰ3B30#E3 0 3023332C333E3ܳ37feD3303 3B3 3330F3 030303332C3B3# # D #3ܳ37feD3303B32 ݲ3332ݲ3330F32ݲ3332C33# 3ܳ3027fe3 B3303B3 002E3 02033303 3332C333ܳ3B07fe2B3303B3 0 300F3 03003330303B32C33#03ܳ3037fe D30B303F3020F3033 3B32C3303ܳ30337fe2B3303 #D3 0 303F3 0030D330303B32C33 #ܳ30327fe3 B33030E3 0302F3 020D330303B32C33ܳ37feD33030E32ݲ3332ݲD330303B32C33ܳ37feD33030F3 3B3 D330303B32C33ܳ37fe330F3030 ݰE330303B32C33˳36UU3?F3 30 #E3B3?333?3332C333333033?333030333B3?333?3332C333333033?333030333B3?333?3332C333333033?333030333B3?333?3332C333333033?02E3030333B3?02E3?023332C333333033?0030E3030333B3?B0F3?03332C333333033?02E3030333B3?00E3?023332C333333033?B0F3030333B3?0E3?03332C333333033?002E3030333B3?002E3?0023332C333333033?3330333B3?333?3332C333333033?3332333B3?333?3332C3322F3333033?3B3333B3?333?32 #332C330000F3333033>ܻ3B3333B3>ܻ333>ܻ30330332C33 333032332B333303330333330303303 #0332C33B3323033033330333033333030330330332C33D3332B33330333033333030332#332C333033 #3303330333330303B32C3300E333 0323303330333330303B33322000232CF3 030022313B30303303330#3B33333 30#331330303030332CF3B030330E30D303330E3333E30332B0303032CF3 0320303313D330D303330#3E33B3 30#331B3D03030332C3 3322333D330D30333033E33B30303B3330200300232C33330D30333033D33330303B32C3 #F330D30333033D3ܳ3330303B32B02B02E32C3BF330D3033B03D3ܳ3330303B303D03E0E32C3BF330D303323333D3ܳ3330303B322B030000E32C3BF330D30333 #3303D3ܳ#333?333?3B30303E0E32C3BF330323323B33D3ܳB333?333?3 330200202E32C333303 00#33Fwc33D3ܳ#33?333?3332C3333030333vEfSE30DB3ܳ 33?333?3332C3333003vEfPB330DB3ܳ333?00E3?023332C33333303B3vEfSB33B3ܳ33?0030E3?03332C33333303B3eEUSB33B3ܳ33?03 E3?023332C33333303333B3ܳ33?003E3?00303332C333333033# #D3330DB3˳33?003E3?0023332C3333330333D3330D3333?333?3332C333333033# #D3D3E3333?333?3332C3333330333E3D3  #33333?333?3332C3333330333 D3D33333333>ܻ333>ܻ3332C3333330333D33 #333B30303B32C3333330333D3333330303B32C3333330333D3  333B30303B32C3333330333D3E33B30303B32C3333330333D3E33B30303B32CD32223333333330333D3E33B30303B3B3 # # 332CD3D030303313232333 #3232D323B3 #3B3 #331B3D333332CD3B022030BB3 # #3332CD30 30300331333 #3331B3333332CD3D0023333303B3## 332C33032C33 3B32C3 2 2 2 23B32C3 2 2 2 32C3B3 2 2 2 232C3332C3332C3332(C030202330223322202220023332 C03303300B3B030B3030030300332"" C033230033B023303D000200030232 C03330300B3B03303303D03003D0303033DCC200302330203322B032003003332C3332C B#332C3332C3332C3332C3332C3332C3332C3332C33?3?3#2B3 3300B333B37ws37323033 #3B32 C33?3?333 B333030B333 0B333B37373w33 3030 333B32C33??3?D32#03033033B3B37ws37D330333B32C33?3?3?D30B32B3 030#23 33337D330 3 0#3B32C33?3?33 3303#03320B3323B37B3 ws3 3 #0203B32C3332C3332C3332C33?4B3B30332B3 3300B333B37ws3wsB3B303323B32 C33?3?33?3 3D303030B333 0B333B3 7373373 3D3030303B32C33??4B3 03033 3303033033B3B37ws3wsB3 03033 330303B32C33?3??D3 03332B3 030#23 3B37337D3 033323B32C33?3?43 3303333 03320B3323B37B3ww3 3303333 03B32C3332C3332C3332C33?4B3COCB3 3332B3 3300B333B323 3 #32B323B32C33?3?33?B33332333030B333 0B333B30B333 B333303333:B3  #23 #3332C33??3?303CCB3033303033033B333303 #023003::3:3 B3303333B32C33?3?33?30333B30332B3 030#23 3333033300B300333::3 2 #33 #3332"C33?3?4333OC223 03320B3323B3223 3 230333:33:303332C3333B3333:3 3303 # # 3332C33333:332C33033333:332C33??D3CCB3 3223 #3323333030322B323 #B3 B3033:332C33?3??D3!33323303003033330323303030303 3033333 0## 03 3332C33???3303CCB3 0303003033B330303B0303323330333303F0033332C33?3?4303333B3 030300303 0#B3 33 030330E33303B3303F0033B32-C33?3?33333C22223033 #33030# 3223 3 # #0#B3 03E 2 3332C303303B32C303303B32C3332C33??B3 33 #2B3 3300B333;3+B3 #+#3;;D3#+#33#3B32 C33?3?33?3 333030B333 0B33333;3D333B3;;B3 +333333333B32C33??33OB3 0332303033033B333;3;3333+#;33;;3B3#33#;332#3B32C33?3?33B3 30#32B3 030#23 333;3;333333;33;2B333 +3;333B32C33?3?333 3303303 #03320B3323)33;2;#33+33;333+3#+#3;33;3#3B32C3332C3332C3332C33?4B3COCB3 3023 #33233330303;2B3#+###3332C33?3??3?B3!33233033030333303233030333;33;3+333333333332C33??4303COB3 03003033B330303B0333;3;B3#33##32#3332C33?3??3?30333333300303 0#B3 33 0333;33;B333 333;333332-C33?3?4333OC22023033 #33030# 333;23+3#+##3;3#3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C33322"B"Dw3f D0 DBC3B3 E D  C3 33  ##3 33 33## ## # # #3 3B3 D E D  C3333D3B3D333 D B F B́ C3 333#33033#D 3# #33 BC3333D3B3 #B3F #3333 EBBBC333 B #  0303 # B3F03 B#  3B3 F B D B B D C3B3 F BBD B D C3B3"#3B3 B BB B B   B C333"!B"#3 33 px BBFB C33"B#33 B "","F""",".",", "",C3"E#3 B 33<333E3D3<3<3<C33??3???44433??34??32!"3??3???444334B?4B?43 DLDDLED DDDL DLC33B?33F?3?B3B?3?3??3"UUPBB#F3B?33F?3?B3?3D?3E?3 BxB ED C33??33D?B? 33??3???0B332!U B"B3??33D?B?3344B?3????3 BC33B?33??B3B?3?3??3 EUPِE#B3B?33??3?3?3E?3 BC33?4?B???4433?444F3!UY̕U ݜ#E3?4?B???4433?3??4?43 $DDCC333!UɜU ̙̝#333 #332C3B30EU ɐE3 #332C3B3??34??332UɜU ̙̝32B34B?4B?4333 #332C3B3B?3?3??B30#3"UY̕U ݜ#3 B3?3D?3E?333 #332C3B3 ??3???033!UUPٙ#32B44B?3????333 #332C3B3B?3?3??E3!U B#E3?3?3E?333 #332C3B3?444E3!UUPBB#D3?3??4?4333 #332C33!#33 #332C3 3?4??44E3!BB#D3??4??3 #332C33F?3?F3! B#D3B?3??3?3 #332C33?F?033!#32BB??3?3 #332C33??30#3"̘ ɪ#3 B34?3??3?3 #332C3 3??4444332ɜɈ ̙̚3234??3?3 #332C3B30EɈ ɐE3 #332C333!ɜɈ ̙̚#333 #332CF3??3???44433?4??44F3!̘ ɪ#E3??3???44433??4??333 #332CF3B?33F?3?B3F?3?D3 EE#B3B?33F?3?B3B?3??3?333 #332CF3??33D?B?33?F?0B332! B"B3??33D?B?33B??3?333 #332CF3B?33??B3??33"BB#F3B?33??B34?3??3?333 #332CF3?4?B???4433??444432!"3?4?B???44B34??3?333 #332C3"E#3 #332C33"B#33 #332C333"!B"#333 #332C3B3"#3B3 #332C3B3 #3322"B" #332#332D"#332C3332C3332C3332C3332C3332C3332C3332 C  ##3 32C3D3332 C3#3332C3D3332C B#  32C33 3B303332 C# ## #32330#332C3303B3332CE#3# 3B3!3B3332C333B30332 C ## B 3B33B3# # # 3 3#33 3COCO3O3B3 2#302002230332C33B3F 333333033F330303F030330332C33B3#E 333 #303BCE3 33#030F030332C33B3333330333330300330332C33B3 # #  3 3 33 3OCOCOO3B3 2#300222230332C33B30332C333 ##3 3#33 33OCC3 2 33002003330332C333B33330333B333030300303330332C3333#333#3033C3B330303B00303330332C333 #33333303 33OC3333030320300303330332C33303 B33 3#3333?3OB33 2#33200303330332C33B30332C333#3 B3 3 #3333C3OB3 3330032003330332C333B 333330333B33333303B0303003330332C333#3333 303C33B3323030030003330332C333B 3333330333B333303303B0303003330332C333#   #3 3 #33 33COOOC3 3033302223330332C33B30332C33B3 ## B # #3 3#33B3OCCOBCOC33 0 #320002233B0 0223303322""#333B33D3E333303B33D3E3 3300303003030B3003B0300330332B30B33B3 # 3#330#303OCO3C32030003000033003B000330333032w32332333E33330333E3 3030303003030B323B0300331#33232D3##33 3#2 3303# # D #3 3#33B3C?CODOC3 3 2 #32003B022B30022B333# ## 32 32D3333300B3!3333B30333300332wD3#3303#00332331#3#3#0333300332D33303300B3!3333330333300332D3 ## # ##2B303 # # 33# # # 3 3 333??3???44433?4??44333 2#322 233020022D3333 B 3  2332w32B3D33B3F 33333303B?33F?3?B3F?3?3B30303D03030B3F030D31#32B33B3 # #B3#E 33303303F??33D?B?33?F?0330#03B0 220330F030332D33B333B333303303B?33??B3??3B33303030300B300D30332C3B3## 33 # #  3 3 #33?4?B???4433??4444333 2#3D0023300222230332C33B30332C3D3 # # 33 ##3 3 #333??3???44433??4??3B3 3 #3322 23300200E30332C3D3D33B3B3333033B?33F?3?B3B?3??3?3B33303D03030B3B030030E30332C3D3 # #B33#333#303??33D?B?33B??3?033 303B022033B0030E30332C3D333B3 #33333033B?33??B34?3??3?3B333303030300B32030030E30332C3D3 ## 3303 B33 3 #333?4?B???44B34??3?3B3 3 #33D002B320030E30332C33B30332C3D3 # # 33#3 B3 2#33??3???44433??34??3B3 3#3322 233003200E30332C3D3D33B3B333033B?33F?3?B3B?3?3??3B333303D03030B3B030300E30332C3D3 # #B3#33330#03??33D?B? 33??3???033#303B022033003000E30332C3D333B3B333330332D3B?33??B3B?3?3??3B333303030300B3B030300E30332C3D3## 33#   #3 2#B3 D3?4?B???4433?4443B3 3#33D002330222E30332C33B323330332C33 33C3CCOCOCO33OCCOBCOCF3 2322233B002230332C3323B3?3F3B33D3EF30303D03030B3003B030030332C33 3 C3?3B3OCO3CE33203B0 22033003B00030332C33B3B3?3333EF330303030300B323B030030332C33B3COBCOO33C?CODOCF3 2033D002B3002230332C33B30332C3!3B31332C303B30332C32333332C33 3#332C3332C3332C3332C33 3B303332C32330#332C303B3332C3!3B3332C33B30332C33B3# # # 3 2#3 3COCO3O3B3 2#302002230332C33B3F 33303033F330303F030330332C33B3#E 333#03BCE3 33#030F030332C33B333330333330300330332C33B3 # #  3 2#3 3OCOCOO3B3 2#300222230332C33B30332C333 ##3 2 33 33OCC3 2 33002003330332C333B 333030333B333030300303330332C3333#33303033C3B330303B00303330332C333 #33330303 33OC3333030320300303330332C33303 B33 2#333?3OB33 2#33200303330332C33B30332C333#3 B3 33333C3OB3 3330032003330332C333B 3333330333B33333303B0303003330332C333#33332303C33B3323030030003330332C333B 33330330333B333303303B0303003330332C333#   #3 30333 33COOOC3 3033302223330332C33B30332C3 3 # ### 33#  #3 2 #3B3OCCOBCOC33 0 #320002233B0 0223303322""#3333303B303B330B03B33D3E3 3300303003030B3003B0300330332B30B3 3 ##303B303333 03OCO3C32030003000033003B0003303330323233233D303B3 #03B 33330333E3 3030303003030B323B0300331#3323293# ## 32 33033# #3 3303#  #3 2 #3B3C?CODOC3 3 2 #32003B022B30022B333# ## 32 323B 30333300B3!3333B303333003323#3#0333300332331#3#3#0333300332p3330333300B3!3333330333300332p33 B 3  2B303 # # 33# # # 3 2#3??3???44433?4??44333 2#322 233020022D3333 B 3  233232B3D33B3F 3330303B?33F?3?B3F?3?3B30303D03030B3F030D31#32BB3 OCOCCCOB3333 # #B3#E 3330#03F??33D?B?33?F?0330#03B0 220330F030D3 OCCCOO32DB333?33333B33B3333303B?33??B3??3B33303030300B300D30D3333D32CE3 OCC3?33333B## 33 # #  3 2#3?4?B???4433??4444333 2#3D0023300222230D3 33C3D32CF3D3?3F33B30D3333D32CE3 COC3OE3D3 # # 33 ##3 3 #333??3???44433??4??3B3 3 #3322 23300200E30D3OB3BOO32C3D3D33B3B 33333033B?33F?3?B3B?3??3?3B33303D03030B3B030030E30332C3D3 # #B33#333 303??33D?B?33B??3?033 303B022033B0030E30332C3D333B3 #333333033B?33??B34?3??3?3B333303030300B32030030E30332C3D3 ## 3303 B33 3 #333?4?B???44B34??3?3B3 3 #33D002B320030E30332C33B30332C3D3 # # 33#3 B3 3#333??3???44433??34??3B3 3#3322 233003200E30332C3D3D33B3B 333333033B?33F?3?B3B?3?3??3B333303D03030B3B030300E30332C3D3 # #B3#3333#303??33D?B? 33??3???033#303B022033003000E30332C3D333B3B 333333033B?33??B3B?3?3??3B333303030300B3B030300E30332C3D3## 33#   #3 3#333?4?B???4433?4443B3 3#33D002330222E30332C33B30332C3B3 # # 33#  #3 2F3C3CCOCOCO33OCCOBCOCF3 2322233B002230332C3B3D33B303B330F3B3?3F3B33D3EF30303D03030B3003B030030332C3B3 # #B303333203DC3?3B3OCO3CE33203B0 22033003B00030332C3B333B3 #03B 333030F3B3?3333EF330303030300B323B030030332C3B3## 3303#  #3 203F3COBCOO33C?CODOCF3 2033D002B3002230332C33B30332C3!3B3332C303B3332C32330#332C33 3B303332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C33322"B""" Dw3f D0 DBC3B3 E D  C3B3 D E D  C3B3 D B F B́ C3B3 BC3B3 EBBBC32""#3 F B D B B D C323 F BBD B D C32B3 B BB B B   B C32B 3 px BBFB C32B 3 B "","F""",".",", "",C32B 3 B 33<333E3D3<3<3<C32pxppBxpxpxpxpB 3 DLDDLED DDDL DLC3 2B 3 BxB ED C32pBpB 3 BC32BB 3 BC32xBxxxx 3 BC32B 34DDDCC32B 3B32C32B 3B32C323B32C323B32C33DB"3B32C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332CB33B32C33=3332C33=̰ D333=3332C33=̼ܰpx ̳E3"#3B3F̳332 C33=̼ܰw ̲B"B3 B333=F332C33=̼ܰp ̲B"B3 333̻"32C33=ܰ ̲E" ""-F˻"#32C33=̰FF̻32C33=˻̰ ˰32C33=˪3DD0pDݻ34DDC32C33=#D3 p3̻""333232C332ƻ"E3 3̻"#333232C332"+"""+"#E3 B3̻""3B3232C3334D3̲"#3B3232C3B32"B"3232C3B3232C3"""33232C3 C3232C3    C3332"B"#33232C3 DC3332B33232C3 BDB BC333233232C3 BC3 332B33232C3     C333233232C3 C3 332B33232C34DDC3332B33232C332B33232C333D33232C3B3"C3B32C3B3 C3B32C3B3 2""#32C3B3 D32C3B3 B32C3B3 B 3B32C3B3 B0BC3332C3B3 B@BC3332C3B3 B@BC3332C3B3 B0BC3332C3B BC333432C30BC333?32C33EC333?32C33BD0C333?32C3 C333?32C333B3?32C323B3?32C323B3?32C323B3?32C323B3?32C323B3?xpB32C323?3"#33?BxB32C323?"B3 B33?BB32C323? "B3 33?BB32C32"/F" D"#3B3?xBpB32C32BFDE#333?32C32BB E#33?Dxp32C33BDOD3BD0DBB3?DD32C3?D"B3 B3=Ȍ3B3"#B3?EpDB"#2C3?"B3 B3Ȍ̻3B3 BB3?B"#2C3>B"B3 B33=D˻""33 wB3?B"#2CE3?32"B"B34D33UB"B" B"/B"32CE3?33=UB"32CE3?33DBD""#32CE3?3B3"#3=Dۻ34DDD0BDO""#32CE3?"#333 B3=B ˻""3B3 B3? ڪ""332CE3?B"#333 w3=B ˲"#3B3 wB3?"#332CE3 ?ffF"B" ",""3 B3"B32CE3?^EB"#34DE3""#B32CE3?w"3B"#32CE3334DBD0DBD32#D32CD3?B""3 3B3"E32CD3?B"#3 w3B3"3332CD3?B"33 B3B3 BC332CD3.#334D3B3 B BC332CD3""#33 C33"32C3 BC33 BCF32C3 C3 3 CF32C3   C33 ECF32CD3""333 BC3 3 CF32CD3 C334DBDC33 ECF32CD3   C3B3 ECF32CD3 FC3B3 BCF32CD3 B C3B34DBDCF32CD3 BC3B32CD3 B  C3B32CD3 C3B32CD34DC3B32C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C3332C33322"B"DD0DDCC3 C32C3 CB33B32C3 CB3 3B32C3"#333?3303B3 C3 B3 # #33 32C3 B3330333?#323B3 C3332333333332C3 w3332333?B3020002032 3B3 C333 333332C3 32200332B3003 30332 3?E#3303003303030B300330303 3 C333 33333332C3 30330300300330B3 #030030B3230303 33?E330030030B3003030303 C3 #32333  32C3 w30330020330303B03 0303303033?E #303303303030B30033030303 C32C3 30330300300330D3030030333303303033?E"303320300330223323 C3 #32-C3 320300223 #003 #2033233>E"#3B3 C3332C3 w332"."3 C333   # 3333 3B32C3 B333?"#3 C3 #32333333333333332C34D333>"33 C33D33333333332C332#33 C3 #333333333333332C3"#333?3 33 C33332333 3    3B32C3 B303?#303B3 C32C3 323?323B3 C32C3 32200332B3020002032 33?E#33020002032 3B3 2""C3 30330300300330B3 #03003303030B300330303 B3?E3303003303030B300330303 3 C3 303300203303 0030030B300303030B3?E #30030030B3003030303 DDCC3 p30330300300330D3 03303303030B3003303030B3?E"303303303030B30033030303 C323C3 p320300223 #0332030033022332B3>E"#303320300330223323 CB3%# ##333 #33#  #3 # ## ##B32C3 332"."3 CB333333 3033303B32C3 B333?"#3 CB3##33333#3303 #303B32C34D333>"33 CB33E333333033B303B32C332#33 CB3 3 # #33 B33  #3 #B32C3"#333 C32C3 B3332F3B33B3033 CE3#  #33  ##3  #3 ##E32C3 333030F3##333233 CE3B3B33D33D303E32C3 32200332B302000203030B3?B33020002032 33 CE33 #333#33 #303#E32C3 30330300300330B3 #03003303030B30033032B3?F #3 03003303030B300330303 B3 CE3B33333D3330#33 #03E32C3 303300203303 0030030B30030D303?B3 0030030B300303030B3 CE3# #33 B#  #B303 #BE32C3 30330300300330D3 03303303030B30033032B3?D "#F3 03303303030B3003303030B3 C32.C3 320300223 #0332030033022B303>BD "30332030033022332B3 C3## #  #3  ##3  #32C3 332""""#33 C3E033B3333332C3 B3#"333 C3 ####03 #3 B#0B3 ##3#33 B#32C34D33"B"#"#333 CE3303333330D33D333E32C3"3B3 CE33# #33D3 B#  #E32C3"#333 C32C3 B3B3030B3 C3 002222B0202B0003332C3 w3B3232B3 C3B0303B03003E03332?C3 3022003222033032330200020332 33000332222B02B0 3302033B023300B3032 B3 C322030300300B0223332C3 30000030 30033030033B0 3003300303300B30330303003033E033D0B30330033003 C3330303B03003032 C3 300B0#03003003303033000330003300B3033030300B0 3300033D033B0B303003 C33322023B030220032C3 3000303B030300330300330303003300303300B3033030300303303033D0B30B3303003 C32 C3 3002B0320022003320033032B0 302232B3 0233220 2302200330303320023300200323 C30022003033232032003332C3 w333 C300333303033033B03332C3 B333 C3220B0033303032223332C34D333 C333D030333033030332C3 C333D03202232303232C3 C32C3 C322" 2"" !"#$%Dw3f DDD0 DB DBDCC33 E D   C3332C33 D E D  C3332C33 D B F B́ C3332C33 C3332CE300022B30200020333 EBBBCF300022B3003 303332CE3030030330D3 03003303030B300330333 F B D B B D CF3030030330D303003033032CE300030320#B3 00#0230B300#0333 F BBD B D CF300030320#B303002230303332CE303303030B300D3 03303303030B300330333 B BB B B  CF303303030B300D3030030333303332CE3033030002B303320300330223 px BBFBCF3033030002B300B3203332C33 B "","F""",".",", "",C3332C33 B 33<333E3D3 <3<3<C3332C33 DLDDLED DD DL DLC3332C33 BxB ED C33322"" 2"B"D"""$DBDCD"B"C33323332C33323332C33323332C3B3 333# 3333 #32 33#22 #323332C3B33333333030303030B323332C3B30B3 #33#33233 330 #3#323 3332"""""#32C3B303333330#B333033330#333332333 #3033 #303333033#3232C3B333#330B3 #311#1031 #33323 3333033330B3B30B33032C32 333 #33 33#30333233 #3332C3333"32 333333333033 3303333B32C3333 C3B32 3 33 #3333 #30B3 3033 3032C3333 C3B32DB  32C3333 C3B32D  333"332#33"332#33"332#33"332#32C333" 2"""32BB  333 C3233 C3233 C3233 C3232C33232 333 C3233 C3233 C3233 C3232C33 F32 333 C3233 C3233 C3233 C3232C33 ɻF32 32" 2"""" 2"""" 2"""" 2"""3B32C33 F32 3B32!3332C33 F32BB 3B3!B B B B ̰332C33 F32 3332B̰332C33 F32BB 333! B B B B 32C33 F32 333  32C33 F32 3$33 C3B32C33 ۻF32 3$33 C3B32C33 ɻF32B3$33 C3B32C33 ɻF32333  C3B32C33 F3DB""""3331  C3B32C33 3232 32C33 B3B323!3 $32C33 B3B323!3 C32C33 33323!32 C32C33 3332333 332C33 D3323 330 B $332C33 ʻ3323B3 C332C33 E323B30 B ̰$3332C333B323C3332C333DDD0D323 4CDD0DDCDD0DDCDD0BD3B32C33 C333323 3233 C3233 C3233 C332C33 C333323 3233 C3233 C3233 C332CF3 33 C333323 3233 C3233 C3233 C332CF3334C333323 33D334C33D334C33D334C332CF30323B323332CF3033 #33333 #32 #232 #2 3B3233 023 22 #2 3 23 #332CE323 #3333333330B03030B303332330303300303003332C33 #3333#33 #33B3 #3B 3#3 #2333233003B 023 #303B03 332C33B3 33333 3033332330303 03033303B033332CE323 B333 # 31 #1 131 #2 #333233131 13 #332C303323332CE32B323B323332CE303B323332CE323 #33323332C33323332C33323332CE323323332C303323332CF3 B323B323332C303323332CE323 #33323332C33323332C33323332CE303B323332CE303B323332CE303B323B323B323 # # # # B3# #3 # 32CE323323B303 333333D3 333333332C33 #333233 3 # #3  #333332C333233 333333D3 33333332C322222B3 #33 3323B3 #2333## B33 # #  32CE30B3 0300300330330D3 333333323332CE30D3 03002203  #3333323332CE30B3 0300303303300D3 333333323B3 #B3 # ## #D3# #3 # 332C303 #030030002B3 #   #323333 333333D3 333333B32CE303323B3 #B3 #3333D3  #3333332C33323B3E33333D3 33333B32C33323B3 23# 33 B33 # #  332CE323323332CE303B323332CE30B323B323B3 #B3 #3# 3# #32CE30303323333333333332CE323 #33323B32#B3 # 333 #332C333233D33333333332C33323B3 #23# #3 33 #32CE32B3202020D3 003320303323332C30333 030330300300D3 0300330330303323332C3 B3230303003000D3 02033030303323B33332C3330300300300D3 0300330330303323B33332C33 #0020300302B3 02223323B303 #3332C33323B3 32C333230323332CE323323332CE30303323332CE32B323B323B3#B3 # ## #D3 3 ##32CE30303323B333333 33333D3 33333332CE323 #33323B3#B3 #3333D3 33 #3332C33323333333D3 0#3333332C33323B3#23# 33 B3 23 33332CE32B322222B3 030200323332CE3030B3 0300300330330D3 030033030330323332CE32B3 03002203 0300302330323B3 #B3 # # # # B3 3 ##3B32C30B3 0300303303300D3 2033030330323B3D3 333333D3 3333333B32CE323 #0300300023 #2030330323B3#B3 3 # #3 33 #333B32C33323B33B3 333333D3 0#333333B32C33323B3 #2333## B3 23 3333B32C3 323323332C330303323332C303030B323B323B3 32C3030303323332CB3223 #333232B3 #3332C333230#32C333230323332C3 33 3202020D3 0302003323332C33333330 30330300300D3 0300330303303323332C303303230303003000D3 03003023303323B3 #32C30330D330300300300D3 20330303303323B3332CB3223 #00203003023 #20303303323B3 #B3 #3332C33323B3332C33323B3 #23332C3 323323332C3B303323332C3032B323B323B3 #B3 # ## #D3 #33 332C30303B323B3333 333333D3 33333332CB3223 #33323B3 B3 #3333D3  #333332C33323333333D3 33333332C33323B3 #23# 33 B3 #   #32C3 32B322222B302030223323332C33330 300300330330D3 03003003003303B323332C3033 B3 03002203 0203003003003332323 #32C33330 300303303300D3 03003003003003B32303332CB3223 #030030002B303022223323333B3 #3332C3332333332C33323 # #23332C3 303B323332C330D323B323332C303033323232332C30323 #33323030332CB323333233333 #3332C33323333332C33323 # #23332C3 30B3202020D3020302233323332C330333330 30330300300D3 0300300300330323332C3030B3230303003000D3 0203003003003B32323 #32C33330330300300300D3 03003003003003230333332CB3203 #0020300302B303022223332333 #B3 #3332C33323333332C33323 # 23332C3 323323332C3303B323332C3030B323B32323 #B3 # # # # 330033203032C30303033230333 3333333 03003303303032CB3223 #33323332#B3 3 # #B3 020330303032C33323333 33333333 03003303303032C33323% # #2333## 33022232C3 323323332C3B303323332C30B3 B323B323233332C30B33323033332CB32333 #333233303 #3332C3332333 23332C33323 #30332C3 323323332C330303323332C3032B323B32323#32C3030303323033332CB3223 #3332333#B3 #3332C333233333332C33323 ##23332C3 32B3220002B3030002233323332C3303033 0300303303030330303003303033323332C3032B32030023303030B33030300303033323332C33330D3 00300303303030D3230303003303033323332CB3223 #02030330023 #002233323332C33323332C33323332CB322B3200022B3&030002233 20300203002E323332CD3003033 0303300300330330303003303032033030030033030030030E323332CB32030B30303033002030B3303030030303 #22030033002030E323332CB303303033 0303300300330D323030300330302B30330030033030030030E323332CB3223 #2030330030223% #00220#30203020300302E323332C33323332C33323332C33323332C33323332C333233322"B""B"zb\ FINDER.DATALTFO\HPRISESENERALTFO9 PLAN.GENERALTFO9CABLES1TEURLTFO9HAMPLI.1TEURLTFOAMPLI.2TEURLTFO COMMUTATEURLTFOire page (page de garde). Cette option concerne galement la numrotation. - la position du bas de la ligne d'en-tte par rapport au bord suprieur du papier (Position du Titre) - la position du dbut du texte proprement dit par rapport au bord suprieur du papier (Position du Texte) Les options d'en-tte seront sauves avec le document UNIQUEMENT si vous cochez les cases. Crer un bas de page -------------------- Le dialogue Bas de Page permet de dfinir: - un titre afficher en bas de chaque page avec choix de la justification. Attention ne pas faire chevaucher le titre et la numrotation de page ventuelle. - la numrotation de page en indiquant le numro de la premire page du document (en impression avec OPTION-CONTROL enfonc, les pages sont numrotes successivement quelle que soit le n indiqu ici). - si le titre sera affich galement sur la premire page (page de garde). Cette option concerne galement la numrotation. - la position du bas de la ligne de pied de page par rapport au bord infrieur du papier (Position du Titre) - la position de la fin du texte proprement dit par rapport au bord infrieur du papier (Position du Texte) - encadrement: si la case est coche, une bordure est imprime tout autour du texte. Les options de bas de page seront sauves avec le document UNIQUEMENT si vous cochez les cases. Slectionner le mot Pomme M ------------------- Slectionner le paragraphe Pomme J --------------------------- Tout slectionner Pomme A ----------------- ------ OUTILS ------ Rechercher/Remplacer Pomme R -------------------- La fonction de recherche permet de trouver l'emplacement de chanes ASCII ou de caractres hexadcimaux dans votre document. Il est possible d'employer des jokers pour remplacer une ou plusieurs lettres inconnues dans un mot. Les caractres hexadcimaux seront entrs sous la forme c$XX (exemple: c$0D pour rechercher les retours chariot). Les lettres inconnues seront remplaces par le joker ("point d'interrogation invers" obtenu par OPTION-?): exemple 'Bon...r' va permettre de trouver 'bonjour' et 'bonsoir'. La recherche se fait partir de la position du curseur. Dans la fentre de recherche/remplacement on distingue: - la ligne de texte rechercher (49 caractres maxi) avec indication de concordance des Majuscules/Minuscules: si la case est coche, Plume recherchera les mots contenant la squence indique sans distinguer les majuscules et les minuscules. Dans le cas o la case est non coche, Plume ne trouvera que le texte ayant exactement les lettres capitales et minuscules en concordance. - la ligne de texte de remplacement (49 caractres maxi) avec indication de confirmation: si la case est coche, un dialogue demandera de confirmer chaque remplacement. Pour un remplacement automatique, ne pas cocher cette case (on peut interrompre un remplacement automatique en tapant COMMANDE-.). - les boutons de Recherche/Remplacement: l'un pour les recherche uniquement, l'autre pour les recherches avec remplacement. - le bouton permettant de se positionner au dbut du document pour que la recherche/remplacement se fasse sur tout le document. - le popup des fonctions automatiques. Ces fonctions s'appliquent tout le texte, quelque soit la position du curseur. - Conversion desMinuscules franaises/ Minuscules anglaises et vice versa. - Merlin -> texte: les caractres de code suprieur $80 sont transforms en leurs quivalents ASCII de code infrieur $80. Les sources Merlin sont de ce type (note: la conversion avec ce mode permet de rendre compatible APW/ORCA un source contenant des caractres suprieurs $80). - texte -> Merlin: opration symtrique de conversion. - Majuscules Paragraphe: les dbuts de phrases sont mis en majuscule. Un dbut de phrase suit un retour chariot et/ou un point. - Dcimal-> Hexadcimal: Permet la conversion du texte avec affichage des caractres sous forme de leur numro de code ascii. - Hexadcimal -> Dcimal: Opration inverse de la prcdente. Si le texte contient d'autres caractres que des codes hexadcimaux, l'opration sera annule. - Supprimer les espaces : Supprime tous les espaces du texte. - Laisser un espace : Remplace une suite d'espaces par un seul espace. - Espaces -> Tabulation : Remplace une suite d'espaces par une tabulation. - Tabulation -> Espaces : Remplace une tabulation par 5 espaces (par exemple pour convertir des sources TML en fichiers compatibles APW/ORCA). - le compteur d'occurences: il indique le nombre d'items trouvs. Si on copie une zone de texte dans le presse-papiers (Pomme C), on peut appeler ce texte dans les lignes ditables Recherche et/ou Remplacement par le collage (Pomme V). Rechercher Encore Pomme E ------------------ Si une squence est indique dans le dialogue de recherche, cette option devient valide: elle permet d'effectuer la mme recherche que prcdemment, sans passer par le dialogue. Dbut/Fin de texte Pomme 1 ou Pomme 9 ------------------- Permet de se positionner trs rapidement en dbut ou fin de texte. Point d'insertion Pomme ! ----------------- Positionne le texte dans la fentre d'affichage, de manire ce que le curseur d'insertion soit visible. Insrer la date Pomme D ---------------- Insrer l'heure Pomme H --------------- Calcul Pomme K ------- Permet de calculer le rsultat d'une opration : Les oprations autorises sont : 1A + 1B 1A / 1B 1A * 1B 1A - 1B 1A + B% : donne le montant TTC. Le nombre de chiffre aprs la virgule sera identique celui des 2 nombres ayant la plus grande prcision (ex : 123,0000+1,2 donnera 124,2000). L'item de calcul n'est valid que lorsque la formule est slectionne. Statistiques Pomme $ ------------ Affiche une fentre contenant de prcieuses informations: - le nombre de caractres, mots, lignes et paragraphes du document - le nombre de voyelles, consonnes et chiffres du document - le nombre de majuscules et de minuscules du document - le nombre de styles d'affichage employs - le nombre de rgles employes (avec la version actuelle de l'outil TextEdit, une seule rgle est employe) - l'occupation mmoire du document et des styles employs - la mmoire totale et la zone libre ainsi que la zone rellement disponible - un bouton permettant de compacter/purger la mmoire Glossaire Pomme G --------- Tout d'abord: qu'est ce qu'un glossaire ? Un glossaire est un rpertoire contenant des informations (des mots, des phrases, des paragraphes) pouvant tre appeles tout moment par une combinaison de touches. Ces informations sont alors insres dans le document, la place du curseur. Dans Plume, on peut avoir 15 glossaires numrots de 0 9 puis avec les signes =/*+- Chaque glossaire peut contenir 256 dfinitions associes des touches du clavier. Lorsque le glossaire est invoqu, le curseur se transforme en montre et on peut alors: - taper une touche du pav numrique 0-9 ou =/*+-: le glossaire correspondant devient le glossaire actif - taper ENTER sur le pav numrique: une fentre d'dition du glossaire s'affiche. On clique sur le caractre ASCII et on stipule le texte associ dans la zone de saisie - taper une touche autre que le pav numrique: la dfinition associe la touche est alors insre la place du curseur. Si on fait afficher la fentre des caractres (Pomme L) et qu'on appuie sur OPTION tout en cliquant sur un des caractres de cette fentre, on va insrer, dans le document actif la place du curseur, le contenu du glossaire courant li au caractre cliqu. En rsum, pour insrer un texte du glossaire dans le document actif, il suffit de faire Pomme G puis de taper la touche voulue. Ou alors, on fait afficher la fentre des caractres (Pomme L) et on appuie sur OPTION tout en cliquant sur un des caractres de cette fentre. Exemples: avec Plume, le Glossaire 0 contient trois textes. Pour les insrer dans votre texte, suivre les indications suivantes: - slectionner le Glossaire 0: Pomme G puis <0> - slectionner la fentre de caractres: Pomme L - tout en maintenant appuye la touche OPTION, cliquez successivement sur les trois premiers caractres en haut gauche de la table ASCII - revenez dans votre document actif: du texte a t rajout l'endroit o se trouvait le curseur. ------- POLICES ------- Afficher les caractres Pomme L ----------------------- Affiche une fentre contenant l'ensemble des caractres ASCII de la fonte courante. (Si vous appuyez sur OPTION en slectionnant le menu, une fentre rduite contenant uniquement les caractres accentus (suprieurs au code Ascii 128) sera affiche). En cliquant sur un des caractres, celui-ci sera insr la place du curseur dans le document actif. Il est conseill de ne pas cliquer sur les caractres reprsents par un ?. Si on appuie sur OPTION tout en cliquant sur un des caractres de cette fentre, on va insrer la place du curseur, le contenu du glossaire courant li au caractre cliqu. Choisir une police Pomme 6 ------------------ Permet de slectionner une fonte nouvellement charge (par exemple grce Fonte DA-Installateur de F. Uhrich). D'autre part, on peut changer le style et la taille des fontes disponibles: le changement de taille se fait en indiquant manuellement la taille dsire. Liste des fontes ---------------- La liste des fontes charges lors du boot est affiche dans ce menu: la fonte active est coche. ------- TAILLE ------- Liste des tailles ----------------- La liste des tailles disponibles est affiche; les tailles conseilles pour la fonte active sont indiques en gras. La taille courante est coche. Il est possible de changer la taille par le menu CHOISIR UNE POLICE. La taille de la fonte est affiche galement en bas du menu. Plus grand Pomme > ----------- Permet d'augmenter la taille de l'affichage de la zone choisie ou des futures saisies. Cette augmentation se fait de 1 la fois. Plus petit Pomme < ---------- Permet de diminuer la taille de l'affichage de la zone choisie ou des futures saisies. Cette diminution se fait de 1 la fois. ------ STYLE ------ Standard Pomme T Gras Pomme B Italique Pomme I Soulign Pomme U Relief Pomme % Ombr Pomme / Majuscules Pomme + Option valide uniquement si une zone est slectionne. Met en majuscules tous les caractres de la zone slectionne, l'exception bien entendu des chiffres, signes et caractres spciaux. Minuscules Pomme - Idem en sens inverse Titre Pomme ^ Option valide uniquement si une zone est slectionne. Le premier caractre de la zone slectionne est mis en majuscules et tous les autres caractres sont mis en minuscules, l'exception bien entendu des chiffres, signes et caractres spciaux. -------- FENETRE -------- Presse-papiers Pomme 0 --------------- Le presse-papiers contient les zones de texte copies ou coupes. Lorsqu'on quitte Plume, le contenu du Presse-papiers est sauv sur disque: ceci permet des transferts de texte d'une application vers une autre. Liste des documents --------------------- La liste des documents permet de slectionner le document qui sera actif (en premier plan). Le document actif est coch. ------- DIVERS ------- Une option automatique: l'conomiseur ------------------------------------- L'cran de votre GS devient noir si durant 5 minutes il n'y a eu aucun vnement clavier ou souris.Lorsque l'cran est noir, le simple fait de taper une touche ou de bouger la souris fait rapparaitre l'affichage. Cet conomiseur permet ainsi de ne pas user votre cran pendant vos priodes d'absence alors que le GS est allum. Dans la version actuelle de Plume, on ne peut modifier la dure d'attente. Cependant, avec un dditeur de ressources, vous pouvez diter la ressource de type $1000 et d'identifiant 1: son contenu est la valeur hexadcimale de la dure d'attente en minutes. En mettant la valeur $FFFF, vous aurez un tel dlai d'attente que l'conomiseur ne se dclenchera pas. La slection: ------------- - un clic: le curseur d'insertion est mis cet endroit - un 2eme clic: le mot o se trouve le curseur est slectionn - un 3eme clic: la ligne ou se trouve le curseur est slectionne @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Gf ,@ main f """") ;8[il"H"hHHH "hHH"iHH"#F:"""``"#Z:"" moqsuwy{d}dddd  "S," :""""{imH"H"HiH"HiH""iHH"H"HiH""{i+k*/SYSTEM/TOOLSJVous avez un seul lecteur,remettez le disque SYSTEME et appuyez sur retour*/SYSTEM/TOOLSESi vous n'tes pas membre du club,soyez positif,prenez une adhsion ! A Certains... ;8[igg"S," :""""{i+k/gsinf.21/gsinfosX Remettez le disque GsInfo et appuyez sur la touche retour /gsinf.21/gsinfos ;8[iH"h{i+k ;8[i d H{iH "h  ̉  {i+;ik ;8[iHH}H "h""""ϭцө{iHJ"{iHJ"{iH{iH"HH"H "h  9"{i+k/gsinf.21/INFOS ;8[iHH}H "h""""ϭцө{iHJ"{iHJ"{iH{iH"HH"H "h  9"{i+k/gsinf.21/gsinfos21 ;8[i 3" {iH"{iH"z z g g U U < < " "   {iH "{iH" | | m m Z Z H H . .   {iH"{iH" {iH"{iH""HHH-"hH "HHH-"hH "HHH-"hH "HHH-"hH "HHH-"hH ""H"h*"{i+k==Les Plus\N448.==Calendrier\N449==Outils son\N447==GS et TV\N446==Titres\N443==Domaine Public\N441>> Le coin hard et soft \N3==Programmation\N421.==Le C 5me (suite)\N420==Le C 5me\N419==La Mmoire\N417==Le Son\N416==Resource\N415>> Initiation \N2== Annonces \N512.== Pointless\N513== Kangaroo\N510== Multiswitch\N509== Plume\N508== DeskWriter\N507== Humeur\N506== Trucs et Astuces\N505== Revue de presse\N504== Dernire\N503== Editorial\N502>> Sommaire \N5== Quitter\N411*Qq. == Rserv aux non-membres\N402== Imprimer un article\N401>> Fichier \N12>>@\N0X==A propos de GS Infos...\N400==-\N401D. ;8[i """"""""""""H""{i+k ;8[i{iH(XJ"HH{iH "h"{iHhn}J"{iH H """ :""":""""F:"YY"""i:"PP""(:""2:""P:""Fi:""}:"":"GG"H"h "{i+kFCertains portions of this software are copyrighted by TML Systems,Inc.(c)-1987 TML Systems,Inc.GSclubCMaintenez le bouton de la souris enfonc et appuyez sur une touche.%P.Manet, D.Melchior, J.Rey, B.Tomeno,6J.Benezet,V. Bobe, J. Destelle, Y.Gobin, V.Hemeury, Editeur:&Pour quitter un article avant la fin :Ont particip ce numro :GGS Infos n21,le magazine du GS pour les membres du club exclusivement.Vu ;8[idݭ : i ݢ:"""ɢd,:"" """"H"hH "h={iHJ"{iHU" {i+k-Pressez une touche pour continuer la lecture. ;8[iHHH "hۆݩۍݍ" ,"j "N%  "$&(*,.02468:<>@BDFHJLHH "hHH""",:""""""HH "{i+k2Cliquez la souris pour quitter l'article. ;8[i{iH((XdJ"HH{iH "hۆۢ" :"" "zz"":"::"-:""7:""{iH(7J"{iH H "H"hۢ "{i+kVuAchoisissez une fonte approprie ou supprimez les retours chariots@Les fichiers sont des fichiers de type texte avec fonte tendue.?Rcuprez le fichier avec un traitement de texte et imprimez-le Vous voulez imprimer un article: ;8[i#"#""{i+k"Le Basic System 1.4 et ses patches"/gsinf.21/ARTICLES/BasicS.et.Pat.2 ;8[iuu"]]""{i+kInitiation par P.Manet/gsinf.21/P.Manet/prog.1.intro ;8[i!"(""{i+k'Initiation aux resources par J.Destelle /gsinf.21/J.DESTELLE/RESSOURCES1 ;8[ihh"YY""{i+kPar J.Destelle/gsinf.21/J.Destelle/Memoire ;8[i!"'""{i+k&La liste des disques du domaine public /gsinf.21/articles/domainepublic ;8[idd"II""{i+kLe C cinquime par P.Manet/gsinf.21/Articles/C5 ;8[i",""{i+k+La suite de la 5me partie initiation au C /gsinf.21/articles/c5.suite ;8[ihh#">>*""{i+k)A pamphlet pamphlet et demi par V.Hemeury"/gsinf.21/articles/falling.grades3 ;8[i"""{i+kUn montage original/gsinf.21/GS.TV/GSTV ;8[i))"( "{i+k/gsinf.21/ARTICLES/ ;8[i"{{"""{i+k!Les freeware et shareware du mois/gsinf.21/Articles/LES.PLUS ;8[i0"""{i+kProgrammes de J.Destelle.//gsinf.21/J.Destelle/son/outilsson/outilsson.mw ;8[i"  "{i+kLes.Plus/gsinf.21/articles/les.plus ;8[i++,"5""{i+k4Suite de l'initiation la programmation par P.Manet+/gsinf.21/p.manet/prog.queues/prog.2.queues ;8[i+"""{i+kUn article de P.Manet*/gsinf.21/P.MANET/HIST.CAL/HIST.Calendrier ;8[i(("""{i+kUn article de J.Rey/gsinf.21/articles/deskwriter ;8[i"""{i+kInformation Kangaroo 1.2/gsinf.21/articles/Kangaroo ;8[i  "    "{i+kl'dito/gsinf.21/articles/editorial ;8[i "c c ,""{i+k+Un gestionnaire de portefeuille par V.Bobe/gsinf.21/titres/lisez.Titres ;8[i!!" ""{i+kLes trucs et astuces du GS/gsinf.21/articles/trucs ;8[i!!%"]!]!.""{i+k-Le son et la musique sur IIGS par J.Destelle $/gsinf.21/J.Destelle/son/sonmusique0 ;8[i " "#"!!""{i+kLa revue de presse de Y.Gobin"/gsinf.21/articles/REVUE.PRESSE.21 ;8[i"""m"m"""{i+kMultiswitch version 1.04/gsinf.21/articles/multi.gs21 ;8[i"""""""{i+kUn article de J.Rey/gsinf.21/articles/pointless ;8[if#f#"Q#Q#""{i+kLes petites annonces/gsinf.21/articles/ANNONCE ;8[i##"##""{i+kUne traduction de Babar/gsinf.21/articles/shoebox.txt ;8[iL$L$"4$4$""{i+kLes dernires nouvelles/gsinf.21/articles/derniere ;8[i$$"$$""{i+kUn article de B.Tomeno/gsinf.21/articles/plume ;8[i{iH"J"{iH44"{iH44"{iH\4\4"{iH44"{i'H33"{iGH33"{igHX3X3"{iH33"{iH22"{iH22"{iHT2T2"{iH22"{i'H11"{iGH11"{igHP1P1"{iH11"{iH00"{iH00"{iHL0L0"{iH 0 0"{i'H//"{iGH//"{igHH/H/"{iH//"{iH.."{iH.."{iHD.D."{iH.."{i'H--"{iGH--"{igH@-@-"{iH,,"{iH,,"{iH},},"{iHP0J"HH{iH "hHH"{iHixJ"HH{iH z,z,H "{iHJ"{i{iHH{iHHH """:"K,K,":".,.,"#:",,"-:"++"7:"++"A:""++" K:"{+{+" U:"B+B+" _:"++" i:"**":""**"H"hHH "{i+k;GS CLUB 6 Impasse la Croix Pommier 94120 FONTENAY-SOUS-BOIS(Le GS Club est une association loi 1901.3Si vous ne dsirez pas devenir membre, effacez-la .8Cette disquette est l'organe de liaison interne du club.7GS Infos et ses articles ne sont pas du domaine public, ATTENTION)Vous recevrez GS Infos tous les deux moisDes domaines publics gratuits.'Vous bnficierez des services du club.Cotisation annuelle : 360 F..Pour recevoir GSInfos, devenez membre du club!Vu@0000000000000000000000000000000000000000000000000000000000000000@0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0@0F000000000000000000000000000000000000000000000000000000000000F0@0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFF111111F111111FFFFFFF111111FF11FF1111111FF1111111FFF0F0@0F0FFFFFF11111111F111111FFFFFF11FFFFFF11FF11FFF11FF11FFFF11FF0F0@0F0FFFF1111111111F1111111FFFFF11FFFFFF11FF11FFF11FF11FFFF11FF0F0@0F0FFFF1111FF11111F1111111FFFF11FFFFFF11FF11FFF11FF11FFFF11FF0F0@0F0FF11111FFF11111FF111111FFFF111111FF11FF11FFF11FF1111111FFF0F0@0F0FF1111FFFF1111FFFF11111FFFFFFFFFFFF11FFFFFFFFFFF11FFFFFFFF0F0@0F0FF1111FF111111FFFF11111FFFFFFFFFFFF11FFFFFFFFFFF11FFFFFFFF0F0@0F0F11111FF11111FFFFF11111FFFFFFFFFFFF11FFFFFFFFFFF11FFFFFFFF0F0@0F0F11111FFFFFFFFFFF11111FFFFFFFFFFFFF11FFFFFFFFFFFFFFFFFFFFF0F0@0F0F11111FFFFFFFFFF11111FFFFFFFFFFFFFF11FFFFFFFFFFFFFFFFFFFFF0F0@0F0F11111FFFFFFFFF11111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0F11111FFFFFFFFF11111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0F11111FFFF1111F11111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FF1111FFFF1111F11111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FF1111FFFF1111F111111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FF11111FF11111F1111111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFF11111111111FF11111111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFF11111111FFFF1111111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFF1111FFF11FF1111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFF1111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFF11111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFF111111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFFF11111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFFFF11111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFFFFF1111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFFFFFFF11FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F000000000000000000000000000000000000000000000000000000000000F0@0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0@0000000000000000000000000000000000000000000000000000000000000000 ;8[iߥ߂""" """"""""""{"t"m"f"_"X"Q"J"C"<"5"."'" """ ""8r0 ?6H`A5H5O5"7"7"7"7"7"7"7"7V5"7a5h5o5v5}5"7555"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"75"75555555"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"7"755555556 6666 ,"{i+;ik ;8[i H{iH"hͥ͂ "   {i+k ;8[i""""""""""{i+kH;i{HH ;[ H "H"hHHH "hhH "HHHH "hhe: "kHH ;[HH"HH""" d&y)H "h "Ԣ"""H"8kHH"h"kHH"k0;8 ;[H"h#H({iH "h%)))XHH "h: ) )d   +;i08k"k ;[ 0 1 :T+  ;i k ;[ k l e:e::D+  ;i k ;[   :0 )   h)+H   ;i(k HH;[H"h H "    hh+;ik ;[HH""+;ik ;[0  +  ;i k ;[0  +  ;i k ;[0   +  ;ik ;[  Ȁ +  ;ik ;[  Ȁ +  ;ik ;8 [  d) e )e     ;e i ;[907301 )80'e     +  ;ikHH ;[ d0b) W  gF @ e )e)8 0  ):  +;ik HH;[ F0D @0>)8 04  8 8  e :e   hh+  ;ik H;[d 8 2 )    8 ) h+  ;ik {cH;[hh+hk {cH;[ JJJ -)0 0 0 0 0 0 0  hh+hhk {cH;[  :JJJ 1)0 0 0 0 0 0 0  hh+;ik{cH ;[ +;ik{cH ;[ I7+;ik{cH ;[ 7+;ik ;[   (+;i (k ;[I7   (+;i (k ;[ I7  (+;i (k ;[ jjjjjjjj +;ik ;[JJJ+)0 0 0 0 0 0 0 7    (+;i(k H;[IIʩ FeI+k H;[ I Iʀ f  8 F F I+kcck8k H;[IIIIʀFf ee&IIhhhh+k H;[ I I IIʀ&&ff !  8  FfFfͥ  IIzzzzzz+kIIkIIk##kkCCkIIk8 # zz(k *kJjkjjjk***k;8 ;[  {iH "{iH{i H " +;ik;8 ;[  {iH "{iH{i H " +;ik;8 ;[H({iH "h+;ik;8 ;[H({iH "h)+;ik ;[:"hH "h::H:"+;ik;8 ;[{iH "{iHU""+;ik;8  ;[{i H)" 8   {iHU"+;i k;8 ;[{i H)" 8d  "zH"HHg"h{iH ~"h"+;ik;8 ;[{i H)" 8d  "zH"HHg"h{iH~"h"+;ik ;[) eH0"+;ikHHH ;[ HHHHH &"  Ȁ8: ))e:  +  ;ikHHH ;[H HHH HH '"  Ȁ 8: ))e:  +  ;i k;8% ;[$ &{i$H-H+H{iH "{i$H{iH1H/H "+'+&*;i)k ;[HHH)H ("h +;ik ;[HHHH)H )"h h +;ik;8& ;[.H,H{iH{iH{iH "{iH2H0H "+(,'+;i*kHHH ;[ )f A [8Ai a {8ai 80))  J ) J) +  ;i k""""""""""""""""""""""""""""""""33333333333333333333333333333333DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUffffffffffffffffffffffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww ;[;8 ")) )))));i+;ik ;[ HH H HHH "+  ;i k ;[;8")) ;i+;ik ;[;8" ;i+;ik ;[;8+" ;i+;ik ;[HHHHHH H$"h hhh+;ik ;[;8 " ;i+  ;ik ;[;8 " ;i+  ;ik ;[;8 " ;i+  ;ikHH;iHHHHHڢ "hhk    hhZ"HHkHHHH "hk ;[  "ኇ+ ;i k   ;[Z z Z"+hhhk . &     ;[Z z Z"+hhk ;[ ڢ "+  ;ik ;[  "+  ;ik   ڢ "+  ;ik ;[ " +hhk;iHHHڢ "ኃhhk ;[d  +hhk ;[ȗȥ @ȩ+hkH "hk ;[ "  +hhkHH "hhkH "hk;iH "hk "  k H H H H "(p0   ;ik;8  ;[dd\:"hi ) A[i     + ;ik;8 ;[$&{iH"` V$&") d d dd{iH"$&{iH"(+$#;i"k;8$ ;[HH,*"hH,*."h222202 2 2 22 2.)dHHH" "h!#%#2%2# {iH" 22+&2%1;i0k;8 ;[$$G$dd{iH"$$$$$ $$ + $#;i"k;8( ;[HH0."h! " "666646 6 6 66 62)AHHH" "h!#!%!'%6'6 66H0.2"h)6)66646 6 6 66 62)_HHH" "h!#!%!'%6'6) {iH" 666dd{iH"+*6)5;i4k;8 ;[  ' dd{iH"   + ;ik;8 ;[$$A${iH"$$HH""+ $#;i"k;8 ;[$& " {iH"+$#;i"k;8 ;[ "{iH"+ ;ikk;8 ;[  < $& d {iH"L  +$#;i"k;8 ;[  < $& d {iH"L  +$#;i"k;8 ;[$$n$HHHH$H " "hh {iH"${iH"{iH"+$#;i"k;8 ;[  2 {iH" H"zz$&+ ;ik ;[) +;ik;8 ;[$$$$$) d {iH"L $+ $#;i"k;8  ;[&&& d {iH"!&&  &!L &+"&!%;i$k ;[) +;ik ;[ HH"+;ik ;[ HH"+;ikHH ;[   ȥ  "+ ;i kHH ;[  )   "+;ikHH ;[    ȯ   ȯ   "+ ;i ktruefalseHHHHH ;[HHHHH &"  Ȁ 8 : ) )e:   "+  ;ikHHHHH ;[HHHH HH '"  Ȁ 8 : ) )e:   "+  ;ik;8) ;[//3 (3*(5 *{i(H9H7H{iH "{i(H{iHHH "5/1"++7*6;i5kHZHH ;[ 80,* )e)     HH"%  ȷ ȷ HH" +kHH ;[   ") "+  ;ikHH ;[   "  ) "+ ;i kHHHH ;[":e   Ȁ :    +  ;ikHH ;[   "%HHeHژ8 ("h "+ ;i kHH ;[   " ,HHHeHژ8 )"hh "+ ;i k;8* ;[0002"LHH{iH{i H{i H "{i H6H4H "02"+,4+3;i*kZHH ;[ "N)   Ș "Ȁػȷ)  Ȁ阠+hhhhkZ ;[ )? HH"% ȷȷ HH"+kZ ;[ ) )   +k;8 ;[d)  : )) H"h{i H)"{i H "H{i H{i HO"h)HH:" HH")j{i H)"H i H:" @HHg"{i HHH H H~"h"H 8 H:"HH "h)5HH "h)!HH ")  "+;ik;8< ;[BB)) H"h{i H)"{i1H "H{i H{i1HO"h)HH:"d{i H)"  i{iHV"᩼ {iHV"᩼ H({iH "hХ ɥ) {iHU" H i H:"႑v8pI9) {i H)"H H"8hH H:" 8 i{iHU"H"  B5 HHg"{i1HHH H H~"h"H 8 H:"Ⴋd;HHH "hhh=H ""h9) 4;Ȅ;  "= "BN&; " " ";;Ȅ;  9 ";f) B +>B=A;i@k;8 ;[d)  : HH " " +;ikprinter: console: keyboard: 77 85 @ DOc h^k`n^q` ^`    ``    q t wz}     CeCe\     ^`( +/^2`G Q T^W`ep s~ ^`  {g~g     CeCe\  r:/ 47:=LORyUyX[a:eyhyknqtwz     ? BFQ [r:}  yy:yy  !'-03= @CM UX    r: 9<? B H:L O R U X [ ^ a pq<tw:z z g g U U < < " "               q<:  |  |  m  m  Z  Z  H  H  .  .     . q<2 5 D :H K N Q T W Z ] ` c f i l o ~ q<   :                      %  6  ; > J  [  h  s    8  B  L  V  `  j  t  ~                  # B X[s           Y Y ! . > APDPN [ k nq{           GG , =     % (+5 Q ^ k nq{  yIDr:   =Q Zy]y`chmps}    "$&(*,.02468:<>@B DFHJLN P&R,T2V8X;Z>\CFP U X[_ j m p sv|        _ }     zz   ::    ( +.8 W mp   yy::(,y/y2u5u;:?BE]H]N:R(yy::((y+y.h1h7:;>AYDYJ:N(yy::(yyd!d':+.1I4I::>(yy::( yyhh: #&>)>/:3(yy::(yy)):((JyMyPSY:]`c{f{l:p(yy::(NyQyTW]:aehlosvz(yy++::(dygyjms:wz}:(yy((:: (SyVyY\b:filou:y(yy  :    (2 y5 y8 ; A :E H K c N c T :X ( y y ! ! :     : (,!y/!y2!!5!!;!:?!B!E!]!H!]!N!:R!(!y!y! "! "!:!!!!!!!:!(<"y?"yB""E""K":O"R"U"m"X"m"^":b"("y"y""""":""""""":"( #y##y&#f#)#f#/#:3#6#9#Q#<#Q#B#:F#(#y#y#####:#######:#($y$y $L$ $L$$:$$$4$$4$%$:)$(u$yx$y{$$~$$$:$$$$$$$:$($  %4%4%H %4#%4&%H4%\47%\4:%HH%4K%4N%H\%3_%3b%Hp%3s%3v%H%X3%X3%H%3%3%H%2%2%H%2%2%H%T2%T2%H%2%2%H%1%1&H&1&1&H$&P1'&P1*&H8&1;&1>&HL&0O&0R&H`&0c&0f&Ht&L0w&L0z&H& 0& 0&H&/&/&H&/&/&H&H/&H/&H&/&/&H&.&.&H'.'.'H'D.'D.'H('.+'..'H<'-?'-B'HP'-S'-V'Hd'@-g'@-j'Hx',{',~'H',','H'},'},'H' ' ( '( B(z,E(z,]( |( ( ( (  ) )K,)K,) +) .).,1).,;) K) N),Q),[) k) n)+q)+{) ) )+)+) ) ) )+)+) ) ){+){+) ) )B+)B+* * *+*+(* 8* ;**>**H* X* e* h**k**u* * * C5 J56Q5$]5bc5j5q5x5!55 5z555% 5=5555A5W55#5!5 555h$6/" 6F6#6# 6":6?6?6A5A6H5C6O5E6"7G6"7I6"7K6"7M6"7O6"7Q6"7S6"7U6V5W6"7Y6a5[6h5]6o5_6v5a6}5c6"7e65g65i65k6"7m6"7o6"7q6"7s6"7u6"7w6"7y6"7{6"7}6"76"76"76"76"76"76"76"76"76"7656"7656565656565656"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"76"77"77"77"77"7 7"7 75 757575757575767 6767J.DESTELLEv'  ''MEMOIRE4d  +RESSOURCES1*&P3 3 SON TOOLBOX RESSOURCES1)`O ET MEMOIRE3c ET 'immenses services. Ce sont: PickWave, SyntheseDS et SyntheseCR. PickWave vous permet de visualiser, sur votre cran, un chantillon sonore, inclus dans un fichier quelconque. En fait, ce programme ne sait pas qu'il s'agit de sons, mais fait un graphique en considrant que chaque octet est une valeur d'ordonne. Il trace aussi un axe au centre, et travaille par longueurs de mmoire de 256 octets (une page). Si vous ne reconnaissez pas la forme caractristique d'une courbe de son, c'est que vous n'tes pas tombs tout de suite sur l'chantillon sonore, mais sur du code ou autre chose, qui se traduit par un trac du genre Manhattan vu du large... actionnez return pour continuer jusqu' arriver l'chantillon cherch. PickWave demande la longueur charger. N'essayez pas de charger un bloc 64 K. C'est du basic... Ne chargez la fois que quelques koctets. Il faudra aussi que vous connaissiez le type de la file explorer. Donnez-le en hexa, ou en code "trois lettres", si toutefois Applesoft connait ce code, ce qui n'est pas toujours le cas. Avec PickWave vous pourrez dtecter des distorsions, des impulsions parasites, ou des dfauts de raccordements d'chantillons. SyntheseDS et SyntheseCR sont deux programmes fabriquant des ondes par synthse additive de Fourier, suivant les deux types les plus utiles: dent de scie pour DS (tous les harmoniques), et crneau pour CR: uniquement des harmoniques impairs. Les sons produits avec une synthse sur quelques harmoniques seulement sont extrmement beaux et utiles. Ils ne produisent qu'un chantillon lmentaire sur 256 octets, ce qui est suffisant dans beaucoup de cas. Ces programmes font le calcul de l'onde, et la tracent ensuite sur l'cran. Vous pouvez ensuite sauver l'onde cre, si elle prsente un intrt. En examinant le listing de ces programmes vous verrez comment, trs peu de frais, on emploie une formulation mathmatique simple pour crer des ondes. Vous pourrez modifier ces programmes pour crer des ondes amorties (avec un coefficient exponentiel ngatif) ou des ondes entaches de bruit, grce aux instructions donnant des chiffres alatoires. Avec une vingtaine de formes lmentaires d'ondes, plus ou moins charges en harmoniques, vous disposerez de quoi constituer une banque de sons de base peu encombrante ( 20 pages de mmoire de son seulement sur 256 disponibles), mais capable de produire d'excellents rsultats musicaux.. Si vous voulez vous lancer dans la programmation du son sur le GS, que ce soit avec Note Synthesizer, ou avec Midisynth, il vous faudra toujours, pour dmarrer, un certain nombre de sons de base. Ces petits programmes vous permettent de les construire. Amusez-vous bien.  Dans cet article, comme dans ceux de cette srie, la programmation du GS est explique l'aide d'exemples crits en langage Pascal. Toutefois, comme le vocabulaire de la ToolBox est universel, et utilis de la mme faon par les autres langages comme l'Assembleur et le C, il intressera tout lecteur dsireux de mieux comprendre la programmation du GS. ------------------------------------------------------------------------- J.DESTELLE INTRODUCTION A LA PROGRAMMATION DU GS... ========================================================================== PARLONS UN PEU DE LA MEMOIRE... Contrairement l'Apple II, qui dispose d'une mmoire fige, le GS gre tout l'espace mmoire de faon dynamique, avec l'aide d'un gestionnaire trs performant: MemoryManager. Nous n'avons pas besoin de savoir de quelle faon la mmoire est utilise. C'est MemoryMgr qui s'en charge. Et il le fait trs bien. Toutes les donnes traites par l'application (ou le systme) sont ranges dans des "Blocs", espaces de mmoire. Ces blocs peuvent avoir n'importe quelle dimension, pourvu que la mmoire puisse les contenir. Si nous avons dsirons crire quelquechose en mmoire, nous devons appeler MemoryMgr (par "NewHandle" ou par une autre fonction de la ToolBox) qui nous allouera un bloc dtermin en fonction de nos besoins. Pendant le droulement de l'application, MemoryMgr est souvent oblig de dplacer les blocs de donnes dans la mmoire en les rpartissant au mieux, notamment si la mmoire commence tre encombre. Il le fait soit lorsque l'application a besoin d'un autre espace, soit tout simplement quand l'un des outils de la ToolBox en demande. HANDLES ET POINTEURS. Chaque bloc ( mme de quelques octets) est repr par un "Handle". Disons, pour simplifier, qu'un Handle est un "pointeur" vers un autre "pointeur" qui indique lui-mme o se trouve le bloc en mmoire. Un "pointeur" est une adresse dans la mmoire, crite de faon particulire, sur 4 octets, comme un entier long,( bien que l'adressage normal du GS ne puisse se faire que sur 3 octets, ce qui n'est dj pas si mal). Tous les handles sont regroups dans un endroit fixe bien prcis de la mmoire. Un "handle" est d'abord un pointeur, c'est--dire, une adresse crite en mmoire un endroit connu. Cette adresse est celle d'une structure de donnes appele "Memory Block Record" dont certains auteurs nous disent que nous n'avons pas besoin de la connaitre. Raison de plus pour y fourrer notre nez ! Le "Memory Block Record". C'est en fait un record de 20 octets de long, qui comporte 6 paramtres, et rsume ce qui concerne le bloc dans la mmoire. Le premier paramtre, le plus important est tout simplement l'adresse du dbut du bloc. ( le pointeur). Le second est un "flag" applel "attributs" qui rsume les conditions de dplacement et de conservation du bloc en mmoire: suivant la valeur de ce flag, le bloc sera fixe ou mobile, on pourra le "purger" (effacer le contenu) ou non, il rsidera (ou non) dans un banc donn de mmoire, etc... Le troisime est un "ID", un numro d'identification, qui indique qui appartient ce bloc ,c'est--dire le programme qui a cr le handle. Le quatrime est la longueur, en octets, du bloc. Les deux suivants sont respectivement les adresses du handle suivant et du handle prcdent. Du handle au pointeur. Quand un programmeur parle d'un handle, il dsigne en fait l'adresse o le Memory Block Record se trouve en mmoire. Le premier paramtre de cette structure n'est autre que l'adresse actuelle du bloc concern par ce handle. Voil pourquoi on peut considrer, en simplifiant, qu'un handle est un pointeur vers le pointeur du bloc de mmoire. CREATION DES POINTEURS Le Pascal permet de crer des pointeurs avec la plus grande facilit. On utilise l'oprateur "@" qui se place juste devant le nom de la variable pointe. Par exemple , dfinissons deux variables: var LaChaine: str255; LePointeur: ptr; Pour obtenir que la variable "LePointeur" dsigne effectivement l'adresse de "LaChaine", il suffit d'crire: LePointeur:= @LaChaine; Nous pourrions utiliser tout simplement l'intrieur d'une instruction "@lachaine" pour dsigner le pointeur lui-mme. Cel revient au mme. C'est ce que nous ferons lorsqu'on nous demandera un pointeur comme paramtre dans l'une des fonctions de la ToolBox. ----- Remarque: L'adresse fournie par LePointeur ne sera pas celle du premier caractre de la chane, mais celui du premier octet de la variable "chane Pascal", c'est--dire l'octet donnant le nombre de caractres. Si on veut pointer directement sur le premier caractre, on devra utiliser: 'LePointeur:= @LaChaine [ 1 ] Le chiffre 1, entre crochets, dsigne le caractre numro 1 de la chane. ------- CREATION DES HANDLES Les handles sont crs, dans les programmes, soit directement par l'un des outils de la ToolBox, soit par le programmeur. 1er exemple: var LaResHndl : Handle; ... LaResHndl := loadResource( $8006, 2); La fonction LoadResource de Resource Manager, cre directement un handle, et place la ressource demande dans le bloc cr. La ressource (de type $8006), et de numro ID 2, sera charge du disque dans ce bloc, moins qu'elle n'y soit dj, auquel cas ResMgr retourne le handle existant. Le programmeur n'a donc pas crer auparavant un handle. 2e exemple: Nous voulons crer nous-mmes un Handle. Il faut d'abord le dclarer parmi les variables: var lehandle: handle; Il faut ensuite crer le handle au moyen de la fonction "NewHandle". lehandle:= Newhandle(la longueur, MemoryID , Atttributs , Nil ); ------ Apple a vraiment la plus haute considration pour les facults intellectuelles des programmeurs de GS. Soyons flatts. En effet, dans le Mac, la fonction NewHandle ne demande qu'un seul paramtre: la longueur du bloc, et MemoryMgr se dbrouille tout seul. A nous, on nous en demande quatre, et pas des plus simples ! De quoi dcourager les meilleures volonts. Plus on nous demande de choisir, plus nous risquons de vouloir effectivement faire des choix... et donc de commettre des erreurs. ------ Nous devons donc dterminer les 4 paramtres de la fonction NewHandle: - 1/ La longueur du bloc demand (nombre d'octets); - 2/ Un numro d'identification pour ce bloc, indiquant qui il appartient, qui sera form partir du numro ID de notre application, tel que MemoryMgr nous l'a donn au moment de l'ouverture des outils. Ce pourra tre aussi tout simplement cet ID. (Comme si MemoryMgr n'tait pas dj au courant !) - 3/ Un "Bit-Flag", "Attributs", dfinissant les conditions de rsidence du bloc en mmoire. ( Voir l'article" Gestion des Evnements" pour l'explication de ce qu'est un Bit-Flag.) Nous ne rentrons pas dans le dtail de ces attributs maintenant. Cel mriterait un article entier. Retenons seulement qu'il suffit le plus souvent d'indiquer : attrLocked si on veut que le bloc soit verrouill. Ou bien tout simplement "$00" (zro) si on veut laisser MemoryMgr se dbrouiller tout seul, ce qu'il sait parfaitement faire. - 4/ L o vous lisez "Nil", on peut mettre l'adresse du bloc, si nous l'imposons MemoryMgr, ce qui ne sera que trs rarement le cas. Nous crivons donc "Nil". "Nil" , dans le langage du Pascal TML II dsigne un pointeur zro, de type universel. C'est--dire qu'il peut tre employ la place de toute variable ou paramtre d'un type pointeur quelconque. A la suite de l'instruction "NewHandle", si nous n'avons pas demand la Lune MemoryMgr, il aura fait le ncessaire, et cr le bloc de mmoire en fonction de nos besoins. Ce bloc sera pour l'instant vide. Nous pourrons y faire rentrer des donnes au moyen de l'une ou l'autre des fonctions permettant de recopier des blocs de donnes en mmoire. Leur emploi est d'une grande simplicit. Nous disposons de : HandToHand pour recopier tout le bloc d'un handle dans un autre handle. PtrToHand pour recopier un bloc de mmoire repr par son pointeur et sa longueur. Il sera aussi possible d'entrer des donnes au moyen d'instructions particulires du Pascal, permettant d'assigner des valeurs aux divers lments d'une structure de donne si le bloc est prvu pour les recevoir. Ensuite, pour utiliser le contenu du Handle, nous pourrons employer: HandToPtr pour recopier le contenu d'un bloc dsign par son handle vers une adresse prcise (pointeur) de la mmoire. Et, sans nous servir du Handle, nous pourrions recopier d'un endroit l'autre de la mmoire, des donnes au moyen de BlockMove qui demande comme paramtres, le pointeur de dpart, celui de destination, et la longueur du bloc dplacer. Mais, compte tenu que les blocs se dplacent souvent dans la mmoire du GS, l'emploi de cette instruction ne sera pas frquent et devra se faire avec prcaution. Il existe une autre moyen pour accder aux donnes contenues dans un bloc de mmoire: le drfrencement du handle. DEREFERENCER UN HANDLE. Quand on a besoin de lire une donne dans un bloc en mmoire, il faut de prfrence se servir du handle du bloc. Il est facile pour le programmeur de prendre l'adresse du bloc recherch en lisant ce qui est crit l'adresse du handle. Cel s'appelle "drfrencer" le handle. En Pascal on crira: lePointeur := leHandle^ Ce qui se lit: "lePointeur gale le contenu de leHandle". et, de mme: maDonnee := lePointeur^ ; ce qui se lit:" maDonne = ce qui est l'adresse lePointeur". Remarquez qu'on peut aussi crire, directement: maDonnee := leHandle^ ^ ; Nous avons ainsi crit une instruction qui permettra d'assigner la variable "maDonnee", la valeur de ce qui est crit l'adresse du bloc. C'est--dire, en langage plus simple, de "lire la donne". Attention ! Comme nous travaillons en Pascal, il faudra bien veiller ce que le bloc de mmoire concern par le handle contienne une donne d'un "type"(au sens du Pascal) compatible avec celui de la variable "maDonnee". Bravo ! C'est tout simple... allez-vous penser. Ne vous rjouissez pas trop vite ! MemoryManager, comme certaines mnagres ordonnes est obsd par le rangement. Il passe son temps dplacer les blocs de mmoire pour les mettre un endroit meilleur, et cel n'est pas sans inconvnient pour nous, les programmeurs. Ds que nous voulons lire ou crire dans un bloc de mmoire, il faut tre sr qu'il ne va pas bouger pendant l'opration ! Nous ne pouvons travailler en toute scurit, aprs avoir drfrenc un handle, que si le bloc est fixe ou si nous sommes srs que MemoryMgr ne le touchera pas. VERROUILLER,DEVERROUILLER. Chaque bloc de mmoire peut tre rendu (temporairement ou dfinitvement) fixe en mmoire, si on le "verrouille". On peut le faire lors de la cration du handle en choisissant pour l'attribut l'option "attrlocked". On peut aussi verrouiller et dverrouiller un handle quand on le dsire pendant le droulement du programme. (en utilisant les fonctions Hlock et Hunlock). Avant de drfrencer un handle, il faut donc bien rflchir pour tre sr qu'il ne bougera pas inopinment. Alors, trois mthodes: - 1/ on ferme les yeux et on attend que passe. ( bof... ) - 2/ on n'utilise que des blocs de memoire fixes... Pauvre GS ! - 3/ on verrouille le bloc (par Hlock..) avant de drfrencer, et on le dverrouille ( par HUnLock..) quand on a fini. (C'est le plus sr, mais attention ne rien oublier !). Il y en bien une quatrime, mais elle n'est pas faite pour les paresseux: vrifier qu'aucun appel un outil quelconque de la ToolBox n'interviendra pendant que nous oprons sur notre bloc. Auquel cas le verrouillage n'est peut-tre pas ncessaire. En effet notre rangeur professionnel n'intervient en fait que si l'un ou l'autre de ses clients: l'application, ou la ToolBox, lui demande un coin de sa mmoire. Si ce n'est pas le cas, il fait le mort. AGRANDIR UN BLOC DE MEMOIRE. Bien que notre expos reste limit aux questions qui se posent surout ceux qui commencent, nous sommes obligs de signaler quelquechose, qui bien qu' vident est souvent la cause de "plantages" graves. Au moment de son allocation, par MemoryMgr, tout bloc de mmoire, repr par son handle, a une dimension donne. Si notre programme crit l'intrieur, sans dborder: pas de problme. Mais si, par inadvertance, on crit quelquechose qui dborde la dimension du bloc: c'est la catastrophe ! On en voit alors apparaitre de toutes les couleurs sur l'cran. C'est un sans-gne que Memory-Mgr n'apprcie pas du tout. Une fonction de MemoryMgr vous permet d'ajuster la taille de votre bloc vos besoins: c'est "SetHandleSize". SetHandleSize ( la nouvelle longueur, le handle ); N'oubliez pas de l'utiliser chaque fois que ce sera ncessaire. (Si vous devez agrandir le bloc, il est ncessaire de le dverrouiller auparavant.) Le plantage pourra se produire par exemple si vous crivez plus d'lments que prvus dans un tableau de variables. Ou si, croyant avoir fait le ncessaire pour agrandir votre bloc par un "SetHandleSize", vous n'avez pas pens vous assurer avant cel que le bloc avait t dverrouill... Croyez-moi ! Il y a eu des heures et des journes perdues causes de ces distractions, car le clash ne se produira pas forcment tout de suite, mais au moment le plus inattendu. ATTENTION A BIEN GERER LA MEMOIRE ! Soyez trs vigilants, car il peut y avoir des rveils en fanfare. Un peu plus tard, ou longtemps plus tard, votre application ou un outil du systme peut avoir besoin de mmoire. Aussitt, MemoryMgr se met en branle et remue tout son stock de blocs. Si, dans l'intervalle, une erreur de programmation s'est glisse, il est possible que se termine par la petite balade de la pomme, de droite gauche, et Lyce de Versailles ! On voit ainsi des plantages qui se manifestent longtemps aprs l'erreur. Plusieurs minutes, parfois plus. On s'imagine alors que l'erreur provient de l'une dernires instructions avant le plantage. Rien de moins sr ! Alors soyons prudents, verrouillons et dverrouillons chaque fois que cel parait utile, mais pas sans rflchir. Et traitons avec respect la place dont nous disposons en mmoire. N'en abusons pas! Du temps des restrictions... avec les 48 k de l'AppleII+, nous y faisions attention. Avec plusieurs mgas, les problmes restent entiers, car les donnes manipules, les outils du systmes, et nos propres programmes ont pris du ventre. La plupart de dfauts graves de fonctionnement des applications proviennent d'une mauvaise utilisation de la mmoire. A titre anecdotique, pensez que l'on conseille aux dveloppeurs sur Mac d'employer un utilitaire qui se charge d'intercaler, automatiquement, entre deux instructions, tout au long du source d'un programme, un appel-bidon MemMgr. Cel le force ranger-dranger sans arrt. De cette faon, s'il y a un dfaut, le programme plante immdiatement, et on sait quel endroit chercher l'erreur. Ce systme s'appelle un "Heap Scrambler", parce qu'il "secoue" la tranche libre de mmoire dans tous les sens. Il parait mme qu'on ne prend pas au srieux les dveloppeurs qui ne soumettent pas leurs programmes cette preuve. Bigre ! LIBERER LA MEMOIRE Quand on n'a plus besoin d'un emplacement de mmoire, il est poli de prvenir le responsable en l'informant qu'il peut rcuprer l'emplacement. Nous n'entrerons pas ici dans le dtail de l'emploi des "purges" qui sont plutt une subtilit pour les programmeurs confirms. Sachez seulement pour l'instant que nous pouvons librer l'espace occup par un bloc au moyen de la fonction DisposeHandle de MemoryMgr, en lui donnant comme paramtre le handle supprimer. Lorsqu'en terminant l'application, nous n'aurons plus besoin de MemoryMgr, nous le renverrons ses autres occupations (c'est fait par la fermeture des outils), et cel librera automatiquement tous les emplacements qui auront t crs par notre application. LIRE ET INTERPRETER LA MEMOIRE DE VOTRE GS. Pour "visiOUTILSSONv' '*SYNTHESEDS" / *SYNTHESECR" : (PICKWAVEF/FINDER.DATAɸ, p ,OUTILSSON.MW  о 3 CREATION D'UNE WAVE PAR SYNTHESE DE FOURIERK TYPE DENT DE SCIEWD$(4):"Nombre d'harmoniques ? (J) ? ";J::"Nb de p{riodes pour 256 OCTETS ? ";KX500: CREER WAVE 60: AFFICHER!< d AFFICHAGE iX0:Y0 n x3$ L256/ K1.70[ A16384: DEBUT DE LA FILE EN MEMOIREr 0,128K279,128K} X0L Y1(ADBX1X)K:X2X1 X279X278 Y1192Y1192 X,YX2,Y1 YY1 X ,22:"CONTINUER ? ";O$ 1O$"O"X1X1256:100? 622:" SAUVER ? ";O$:O$"O"İ1000G @:M J 10:10:" Je calcule en basic, ce sera long..."  WAVE SINUS ADRESSE16384: $4000 PI3.14159 P(2PIKX)256 !K1J:CC(1K):K &X0512 'Y0 +K1J 0Y1(1K)(PXK)+ 2YYY12 5KB 7Y(Y125)CQ :Y(Y128)b XADRESSEX,Yi bXo |  SAUVER 22:" J = "J" KX= "KX;:" NOM ? ";N$ D$"BSAVE "N$",A$4000,L$200" / CREATION D'ONDE PAR SYNTHESE DE FOURIERE J.DESTELLE 1989r ONDE TYPE CRENEAU SANS HARMONIQUE PAIR~D$(4):"Dernier harmonique (J)? ";J::" KX (Nb de p{riodes pour 256 OCTETS)? ";KX500: CREER WAVE 60: AFFICHER ! <* d AFFICHAGE6 iX0:Y0< nC x3M L256X K1.70 A16384: DEBUT DE LA FILE EN MEMOIRE 0,128K279,128K X0L Y1(ADBX1X)K:X2X1 X279X278 Y1192Y1192 X,YX2,Y1 YY1 X! ,22:"CONTINUER ? ";O$< 1O$"O"X1X1256:100h 622:" SAUVER ? ";O$:O$"O"İ1000p @:v J 10:10:"Je calcule en basic, ce sera long..."  WAVE SINUS ADRESSE16384: $4000 PI3.14159 P(2PIKX)256 !K1J2:CC(1K):K! &X0512) 'Y06 +K1J2L 0Y1(1K)(PXK)W 2YYY1^ 5Kn 7Y(Y125)C} :Y(Y128) XADRESSEX,Y bX   SAUVER 22:" J = "J" KX= "KX;:" NOM ? ";N$ D$"BSAVE "N$",A$4000,L$200"  AFFICHAGE D'UNE WAVE2 J.DESTELLE 1988>D$(4)DJj 5:"PathName complet :";N$!::"Type du fichier (3 car.): ";TY$#::"Longueur @ charger: ";L$(::"1er octet @ lire (en hexa): ";DD$ 2D$"BLOAD"N$",A$4000,B"DD$",L"L$",T"TY$% <:" DEBUT ? ";DB5 d AFFICHAGE; nB x3L L256W K1.70 A16384: DEBUT DE LA FILE EN MEMOIRE 0,128K279,128K X0L Y1(ADBX1X)K:X2X1 X279X278 Y1192Y1192 X,YX2,Y1 YY1 X ,22:"CONTINUER ? ";O$< 1O$"N"X1X1256:100D @:N9H FINDER.DATA.MWS\H OUTILSSON.MWMWSPICKWAVECR0.MWS SYNTHESECR0.MWSH SYNTHESEDS0.MWSter" tout moment, pendant le droulement d'un programme, la mmoire du GS, il existe un outil trs pratique : le CDA "Nifty-List" qui est distribu en ShareWare. "Nifty-list" vous fournit une liste dtaille de tous les handles existant actuellement en mmoire. Vous pouvez ensuite allez voir leurs contenus en utilisant le moniteur. Vous recherchez le handle du bloc qui vous intresse, puis l'aide du Moniteur auquel Nifty-List vous donne accs, vous pouvez aller voir sur place dans votre bloc. Le Moniteur du GS ressemble tout--fait, en mieux, celui de l'Apple II. Aussi ne rentrerons-nous pas pour le moment dans les dtails de son emploi. Pour reprer "votre" handle, il faut utiliser le numro d'identification qui l'accompagne. C'est le numro que vous lui aurez donn au moment de sa cration par "NewHandle": soit l'identifiant gnral de votre application, ce que nous appelons "gmemoryID" dans nos sources, soit un numro qui en est driv pour prcisment le retrouver plus facilement. Ce numro pourra tre: gmemoryID + $100, ou gmemoryID + $200,... et ainsi de suite. Aprs avoir appel le CDA Nifty-list par Pomme-Control-Escape, vous tapez "0i" puis return et vous obtenez un tableau des handles et des paramtres du Memory Block Record. Nifty-list a mme la bont de vous indiquer, ct de l'identifiant de l' application laquelle appartient chaque handle, le nom de celle-ci. Vous trouvez vite, donc le numro de votre application. Ce sera probablement quelquechose comme $1002, ou $1003,... Si vous avez donn au handle qui vous intresse le numro gmemory + $300, cherchez le handle dont l'identifiant porte ce numro: 1302 ( ou 1303,...). Ensuite, vous lisez le pointeur, c'est dire l'adresse en mmoire de votre bloc. Et vous passez dans le moniteur par "*" puis return. Et vous allez lire dans la memoire ce qui s'y trouve. Attention bien sr, puisque vous tes dans le Moniteur, ne rien modifier dans la mmoire ! Je suppose que vous savez cel. Vous pouvez aussi imprimer au passage les donnes qui vous intressent, sans perturber l'application. Quand vous avez termin, vous quittez successivement: le Moniteur, NiftyList, et le tableau de bord, et vous vous retrouvez dans votre application au point o vous l'avez laisse. COMMENT SONT ECRITES LES DONNEES EN MEMOIRE. Si vous voulez profiter valablement de ce renseignement, il faut que vous sachiez comment les donnes des divers types sont stockes dans la mmoire. Voici un rsum de l'essentiel: 1/ COMMENT SONT ECRITES LES VARIABLES NUMERIQUES. Il y a trois cas principaux: a/ - UN OCTET ( byte ) . C'est l'lment de base . Exemple: $ 1F Il reprsente en gnral un nombre de 0 255. Il peut reprsenter, par convention, autre chose: par exemple un entier sign compris entre -128 et +127. Dans ce cas, le bit 7 ( de poids le plus lev est 1 si le nombre est ngatif. Autre exemple: l'octet peut tre le code d'un caractre (code ASCII). Plusieurs variantes selon l'emploi fait du bit 7. Le moniteur et autres outils d'analyse vous donneront sa valeur sous forme "hexadcimale" c'est dire deux chiffres hexa (de 0 F) successifs. Le signe $ est ajout pour prciser qu'il s'agit d'une notation hexadcimale. Le moniteur du GS donne aussi dans la marge droite la traduction en code ASCII de chaque octet, ce qui vous permet de reprer les chaines de caractres en mmoire. ---------- Apprenez traduire la valeur d'un octet en dcimal: on multiplie par 16 le premier chiffre et on ajoute le second. Pour $1F par exemple, le chiffre hexa F vaut 15. $1F quivaut donc 16 + 15 = 31. ---------- b/ - UN ENTIER ( word, integer ). Il est stock sur deux octets (16 bits). C'est l'lment de stockage en mmoire le plus utilis par le GS. Il reprsente en gnral un nombre entier sign, compris entre -32768 et +32767. On crira, dans un programme, en hexadcimal, par exemple: $0215 dcomposable en deux octets: un octet de poids lev: $02 qui vaut 2 x 256 = 512 + un octet de poids faible1qp SONMUSIQUE0.MWSH OUTILSSONW1.MWS: $15 qui vaut 16 + 5 = 21 La valeur de ce nombre est donc 512 +21 = 533. Comme pour l'octet, c'est le bit de poids le plus lev qui sert dterminer le signe. Par exemple $8215 est un nombre ngatif, car son 1er chiffre hexadcimal (8) est gal ou suprieur 8. Le bit de poids le plus lev (bit15) est 1. Sa valeur est de -32235. Pour transformer des nombres hexa en dcimaux et vice-versa, il existe des tables. Il existe aussi des NDA trs pratiques. "Deci-Hex" ( que vous trouverez dans le disque s'il y a encore un peu de place ) est l'un d'entre eux. Je vous en recommande l'emploi. ------------------------*** Attention ! ***----------------------------- En mmoire, les deux octets d'un entier sont stocks dans l'odre inverse de l'ordre naturel: on trouve l'octet de poids faible d'abord, puis l'octet de poids fort. ------------------------------------------------------------ ------------ Par exemple, le nombre $0215 sera stock en mmoire sous la forme 1502 . Cel est vrai aussi bien si le mot constitu par les deux octets (le "word") reprsente un nombre ou un "bitFlag". c/ -UN ENTIER LONG (Long, ou LongInteger) stock sur 4 octets. Il reprsente un nombre entier sign compris entre - 2147483648 et + 2147483647. Le processeur du GS est trs bien quip pour manipuler ces nombres de 4 octets. C'est une ncessit, car l'adressage d'une mmoire importante ncessite des pointeurs (les adresses) crites sur plus de deux octets. En fait chaque pointeur utilise 3 octets. Mais, par cSONv' 'OUTILSSON%  +SONMUSIQUE0$D  SONMUSIQUE0$ D ET FINDER.DATA> p onvention, on rajoute un quatrime octet de valeur nulle pour manipuler cette donne de la mme faon qu'un entier long. Dans ce cas, encore, vous retrouverez, dans la mmoire, les octets dans l'ordre inverse de leur ordre naturel. ------------------------*** Attention ! ***----------------------------- Les quatre octets d'un entier long (long, longinteger, pointeur,...) sont stocks en mmoire dans l'ordre inverse de leur ordre naturel. ------------------------------------------------------------ ------------ Par exemple, si vous manipulez le nombre entier long $4F80001C, vous le lirez en mmoire sous la forme: 1C00804F . Un pointeur reprsentant l'adresse E1/32F4 ( adresse de l'octet numero $32F4 dans le banc de mmoire E1) sera crit en mmoire sous la forme: F432E100 . 2/ COMMENT SONT ECRITES LES DONNEES STRUCTUREES. Une fois qu'a t dfinie leur structure (soit par la ToolBox, soit par la dfinition d'un type en Pascal, soit par la rservation des emplacements en mmoire par l'Assembleur) les donnes structures sont stockes en mmoire comme une suite d'lements dans l'ordre dtermin par leur dfinition. L'ordre des lments n'est pas invers. L'inversion d'ordre cite plus haut pour les entiers et les entiers longs ne concerne que les donnes numriques lmentaires. Quelques exemples: a/ une "Chane Pascal"G: chane de caractres. Elle dbute par un octet: le nombre des caractres qui suivent. Ensuite figure chacun des octets reprsentant un caractre. ( longueur de ce fait limite 255 caractres). b/ une "Chane C": chane de caractres. Pas de nombre de caractres au dbut, mais un octet de valeur 0 la fin. Pas de longueur limite. c/ une "Chane GSstring": utilise par GS/OS pour manipuler des chemins d'accs trs longs. Au dbut: un entier sur deux octets indiquant le nombre de caractres, puis les caractres eux-mmes. Dans ce cas, les deux premiers octets sont stocks en mmoire dans l'ordre inverse, puisqu'ils font partie d'un mme nombre entier. d/ un tableau de nombres entiers: Les nombres entiers, chacun sur deux octets, sont stocks la suite l'un de l'autre, dans l'ordre de leurs index, la position relative correspondant l'index. Chaque nombre occupe deux octets, stocks en mmoire dans l'ordre invers. etc... Il en est de mme pour toute structure ( "record" ou "template", ou fichier plus important obissant une organisation interne prcise). Il en est ainsi des ressources, qui ne sont que des donnes structures particulires. Et cel ne rend pas toujours facile leur interprtation directe en mmoire. L'interprtation de donnes dans la mmoire n'est pas toujours facile par simple lecture sur l'cran. Si rien de structur n'apparait, vous tes peut-tre dans un morceau de "code" c'est--dire des instructions en langage machine. Vous pouvez alors " dsassembler" pour les examiner, soit avec le Moniteur, soit avec Nifty-list. De toutes faons, n'hsitez pas imprimer le bloc qui vous intresse. C'est infiniment plus facile de contrler un bloc de mmoire sur le papier, un crayon la main, que sur l'cran. Nous en resterons l pour cette fois. Ce qu'il faut surtout retenir, pour ne pas se perdre ensuite dans l'interprtation des sources, c'est qu'un nombre crit dans un fichier-source ne peut pas tre retrouv sous la mme forme quand il aura t crit dans la mmoire. On le retrouvera avec l'ordre de ses octets inverss. Et ensuite, concernant le problme gnral de la mmoire du GS, c'est qu'il faut trater son emploi avec beaucoup d'gards et de respect si on veut s'attacher la considration de MemoryMgr sinon, gare au coups de pieds de la Mule du Pape! Ce gestionnaire ne fait pas de cadeau. J.DESTELLE SONS ET MUSIQUE SUR LE GS. Introduction: DECOUVRIR LA MUSIQUE GRACE AU GS. Quelques articles ont dj parl de la programmation des sons avec le GS. Il semble toutefois que les questions de la nature mme des sons et de leur reproduction artificielle n'ait pas toujours t bien comprise. Il parait donc utile de revenir sur ces questions. Ce sera l'objet des 3 parties suivantes de cette srie. Nous pourrons ensuite aborder, mieux arms, l'utilisation pratique des nouveaux outils de sons du GS. Le 'S' du GS. Quand le GS est sorti, cel a t un merveillement: un ordinateur quip d'un puissant "chip" de synthtiseur, et dot d'outils pour l'utiliser... j'allais pouvoir m'en donner coeur-joie et rveiller une vieille passion qui avait dj motiv des annes de recherches et de dcouvertes. Mais il y a un grand pas franchir entre la production des sons, et celle de la musique. Un ordinateur n'est pas un instrument de musique facile mettre en oeuvre. Nos premiers programmes utilisant Note Synthesizer et Note Sequencer ont vite fait le tour des limites trs strictes de notre ordinateur prfr. Puis un jour, un outil Midi est apparu. La relation avec un clavier extrieur tait la porte des programmeurs amateurs. Malheureusement la documentation n'a pas suivi tout de suite... De toutes faons, il fallait un clavier sortie Midi pour utiliser le GS. Renseignements pris, un clavier satisfaisant avec de bonnes possibilits d'emploi comme l'expression (clrit) et l'after-touch, sans gnrateur de sons, cel s'appelle un matre-clavier, et cel cote largement aussi cher qu'un trs bon synth. Ce qu'est un bon synth... D'anne en anne, les synthtiseurs commercialiss par les grandes marques comme Yamaha, Korg, Roland, Ensoniq, font des progrs gigantesques. Aprs en avoir cout et surtout essay un certain nombre, j'ai fini par craquer pour le tout nouveau ( l'poque !) Yamaha V50. C'est un instrument trs complet, bien que non professionnel comme destination, mais qui comporte tous les lments d'un studio de sons : le synthtiseur (clavier + gnrateur de sons), une boite de rythmes trs sophistique, un extraordinaire ensemble digital d'effets ( reverb, chos, ...), un squenceur (modeste mais complet), et enfin, un drive pour loger toutes les donnes sur un disque de 3 1/2", afin de pouvoir les passer des amis. De plus, il est quip pour utiliser toutes les fonctionnalits possibles du systme Midi. Sur le plan de la qualit musicale, c'est affaire de got, mais je le trouve excellent, et trs suprieur de nombreux synth de classe suprieure. Cel tient l'extrme puret et la finesse des sons obtenus par synhse modulation de frquence (une invention de Yamaha). Il n'emploie pas de sons chantillonns, sauf pour la batterie. Rsultat: toute sa mmoire vive ( de 500 K environ), est disponible pour la manipulation des sons et non occupe par les chantillons sonores. Synth et ordinateur. Un synth, c'est en fait un ordinateur ddi totalement la production des sons, et dont le clavier d'entre est un clavier de piano, ou plutt d'orgue, car il ne fait que 5 octaves. Il dispose en gnral d'un petit cran cristaux liquides et d'un certain nombre de touches et de molettes pour changer des donnes sommaires, avec l'utilisateur. Le gnrateur de sons comporte des sons prtablis en nombre variable, et il vous est possible de crer d'autres sons, ou bien d'editer, votre gr, les sons existants. Le mot "son" a la mme signification que le mot "instrument" employ par Apple: il dsigne ce que l'on obtient sur l'une des voix de l'instrument: par exemple un son de flte, un violoncelle, une guitare, un piano, un Boeing 747 au dcollage, l'aboiement d'un chien, etc... Ne croyez pas qu'on ne puisse obtenir toutes ces choses sans chantillonnage. Bien au contraire. La synthse permet des variations nettement plus tendues. Pour enrichir la sonorit, on peut crer des "performances" (en franais: groupes orchestraux) qui combinent ensemble plusieurs sons et vous mettent sous les doigts des possibilits d'expression infinies. L'dition des sons est en gnral assez difficile. Elle ncessite de digrer d'abord une notice toujours trop succinte dcrivant la raison d'tre des quelques 100 150 paramtres rgissant chacun des sons. Ensuite, il faut modifier ces paramtres un par un au moyen des boutons du synth... pas simple. Au fur et mesure qu'on modifie, on peut couter le nouveau son grce au clavier, et revenir la version antrieure si on le dsire. Voil pourquoi on a cr des logiciels d'dition de sons, pour simplifier la vie du musicien. L'ordinateur est alors au service du musicien, pour modifier, enregistrer et stocker des banques de sons (en ralit des paramtres). Il existe autant de logiciels de ce genre que de principes de synthtiseurs. Malheureusement, pour le GS, il n'en existe pratiquement pas. Les musiciens ont tous choisi de travailler sur Atari, ou sur Mac. Les squenceurs. Un squenceur, c'est schmatiquement un systme d'enregistrement capable d'crire des donnes permettant de jouer un morceau musical. Dans un squenceur lmentaire, on peut crire les notes la queue-leu-leu, avec la dure, le volume, de chaque note. Cel ressemble un programme informatique. On peut l'diter, comme un programme. Pour ceux qui ont quelque notions de musique, il est vident que ce n'est pas facile de rendre les nuances, les liaisons, les phrass, les syncopes d'un morceau. Il y a des choses que l'criture musicale habituelle ne permet mme pas de noter. Il y a aussi beaucoup de musiciens "d'instinct", qui n'ont pas de connaissance srieuse de la thorie musicale, mais qui se dbrouillent trs bien sur le clavier d'un piano, d'un orgue, ou sur une guitare. Le systme Midi a t conu en grande partie pour rsoudre ces problmes. Un squenceur "Midi" peut enregistrer un morceau tel qu'il est jou sur le clavier, et le restituer exactement avec le mme rythme, les mmes nuances, et les mmes fautes. Vous pouvez aussi "diter" l'enregistrement et en corriger les fautes, en modifier le tempo, etc... Dire que cette dition est facile sur le synth lui-mme, avec un cran de deux lignes, serait exagr. Sur l'cran de votre ordinateur, c'est autre chose. Il existe donc des logiciels de squenceurs de tous genre (trs trs peu pour le GS !). Certains travaillent avec des tableaux de mots cods, un peu comme un tableur. D'autres, de mme que Music Studio, emploient la notation musicale classique. Tous permettent de travailler simultanment avec des sons diffrents (comme des pistes diffrentes) pour restituer une musique orchestrale: une piste pour la batterie, une piste pour la guitare, et une piste pour une basse d'accompagnement par exemple. Le travail de cration musicale consiste, pour le compositeur, associer ces moyens. Il doit pouvoir superposer une nouvelle piste un morceau dj enregistr en rejouant sur son clavier tout en coutant le morceau. Puis peaufiner tout cela dans le dtail en ditant l'enregistrement ou en modifiant les sons. Le squenceur permet, trs facilement, de faire varier les sons (ou instruments) employs pour un morceau. Si on dispose de squences midi dj prtablies (il en existe, comme des disques ordianires) on peut se consacrer uniquement travailler les sons, sans se proccuper de la difficile criture des morceaux. Les logicels d'aide la composition. Nous entrons l dans un domaine plus professionnel. Il existe des logiciels ultra-perfectionns, destins faciliter le travail du musicien: comme par exemple de transcrire parfaitement un morceau, partir d'un squenceur, en notation musicale classique ditable. Vous avez tous vu cette publicit reprsentant Mozart au clavier d'un ordinateur. Tout musicien dsireux que sa musique soit joue par d'autres, est oblig de passer par un mode de transcription. Et vous vous doutez qu'une partition d'orchestre, ce n'est pas quelque chose de simple ! Ce sont des logiciels trs performants, mais trs onreux. Avec notre GS ... Aprs ce tour d'horizon gnral, revenons notre GS. De quoi disposons-nous ce jour? - d'un gnrateur de son trs puissant, mais l'tat brut. - des outils Sound manager, Note Synthesizer, Note sequencer, Midi. - de deux outils publis par ToolBox-Mag: Music Juke Box de S.Hadinger ( voir ToolBox mag 1 ) Sound Track Tool d'Olivier Goguel ( voir ToolBox mag 2) - du nouvel outil N35 MIDISynth. Je ne citerai pas de faon exhaustive tous les logiciels commerciaux ou non. En voici quelques-uns, parmi les plus connus: Instant Synthesizer, Music Studio, Sound Smith,... sans oublier le trs valable PolySons de Babar. Citons aussi les Master-Track, de Passport les seuls qui pour l'instant soient destins aux musiciens. Ce dont nous disposons actuellement nous permet de crer des sons, et d'ajouter une musique de fond nos programmes. Par exemple, Music Juke Box associ un programme srieux comme ResDoctor, m'a permis d'tonner vivement quelques amis. ================== Le logiciel SynthLab========================== SynthLab nous ouvre beaucoup d'horizons. Pour la premire fois, nous disposons dans notre GS d'un synthtiseur qui n'est plus un gadget. On peut donc jouer une musique trs valable partir d'un clavier extrieur. On peut aussi l'enregistrer dans un squenceur Midi. Le package diffus par Apple comporte: 1/ un logiciel complet de musique: synthLab, trs bien prsent et document, quip d'un synthtiseur, d'un squenceur, et d'un gestionnaire des entres et sorties Midi pour le GS. 2/ un nouvel outil pour la ToolBox, l'outil 35, MIDISynth, conu pour ce synthetiseur, et la document technique de toutes les fonctions de cet outil. Tout cel accompagn de fichiers d'instruments, d'ondes, et de squences pemettant de trs spectaculaires dmonstrations. Pour apprcier SynthLab valablement, il vous faut une interface Midi, et un clavier Midi pour jouer le synth de votre GS. L'interface Midi Apple fait trs bien l'affaire. Le synthtiseur de SynthLab. Le concepteur de SynthLab a fait a priori un certain nombres de choix, sans doute judicieux, mais discutables, qui limitent srieusement ses possibilits musicales. 1/ Pour chaque son, on mobilise 4 des oscillateurs du chip Ensonic, qui en comporte 32. Comme il faut en conserver pour le fonctionnement de l'application, on ne dispose en fin de compte pour notre musique que de 7 sons simultans possible. Cette limite de polyphonie 7 notes n'est pratiquement pas audible dans les chantillons superbes de la diskette. Mais elle ne supporte pas la comparaison avec la polyphonie normale de 16 notes d'un bon synth: quand on joue un "trait" ou un "arpge" avec des sons qui s'vanouissent lentement comme ceux d'une harpe, un piano ou une guitare, certaines notes disparaissent trop vite, bien que l'algorithme de "stealing" soit particulirement bien tudi. Le stealing, c'est l'extinction force du gnrateur le moins ncessaire quand on a besoin d'un nouveau gnrateur. Cette limitation n'existe pas avec Note Synthesizer qui n'emploie que deux oscillateurs pour chaque gnrateur. 2/ Pas de trace d'une quelconque possibilit de vibrato (ni de tremolo). La vie transitoire du son n'est due qu'au droulement de la lecture d'chantillons, ou par les battements occasionns par les "detune" (dcalage de frquence entre deux oscillateurs). Peut-tre existe-t-il une solution ce problme. A priori, je n'en vois pas, puisque les ondes diffrentes sont limites pour un mme sons 8 le long du clavier. 3/ Il manque une possibilit trs importante, celle de crer facilement une courbe de rponse en volume sur l'ensemble du clavier. C'est ce qu'on appelle en facture d'orgues l'harmonisation. Elle permet la mise au point finale de la facult d'association des diverses notes disponibles en tout point du clavier pour qu'elles se superposent agrablement, tout en se dtachant les unes des autres. Le niveau des notes, surtout dans l'aigu, doit tre adapt chaque son. Si cette finition n'est pas effectue, le son gnral devient vite dsagrable pour le musicien, qui finit par ne plus prendre plaisir jouer son instrument. Avec SynthLab, nous devrons effectuer ce travail en ajustant le volume des chantillons et en se servant du multi-chantillonnage. A titre de comparaison, un synth comme le V50 utilise pour chaque son 4 gnrateurs appels oprateurs, pouvant tre associs de huit faons diffrentes les uns pouvant moduler les autres en frquence. Chacun des gnrateurs dispose d'un gnrateur d'enveloppe, d'un gnrateur de variation de frquence (un peu comme une enveloppe, mais faisant varier la frquence). La polyphonie est de 16 notes simultanes. Les possibilits d'harmonisation sont varies. Vibrato et trmolo sont rglables avec plusieurs paramtres dont un, ncessaire, de retard, qui provoque l'apparition du vibrato progressivement aprs l'attaque, comme cel se produit pratiquement dans un instrument rel ou pour la voix humaine. Cel dit, les rsultats du synth de synthLab sont tout fait remarquables, pour certains des "instruments", du fait de la qualit des chantillons sonores choisis. De plus l'interface Midi semble fonctionner de manire satisfaisante, et parait complte (c'est--dire accepte la plupart des nombreux ordres en provenance d'un clavier midi). Bien videmment l'emploi de l'application SynthLab se fait au dtriment de tout ce qui dans votre GS pourrait avoir recours aux outils sons et aux interruptions. Certains accessoires doivent disparatre du menu pomme, ( comme par exemple" Alarm-Clock" qui m'a fait chercher longtemps) et il faut renoncer utiliser les interruptions de faon quelconque. Le squenceur de SynthLab. Le squenceur de SynthLab, qui fonctionne sur 16 pistes, est trs sympathique dans sa fonction enregistrement Midi et reproduction. Quelques essais faits avec le V50 m'ont ravi. Il ne lui manque pas grand chose, et nous fait vite oublier les affres de l'emploi de l'outil Note sequencer. En ce qui concerne l'dition, la version actuelle de ce logiciel ne fait qu'afficher les ordres Midi enregistrs, sous la forme d'instructions aux outils du synthtiseur interne, mais rien n'est prvu pour modifier et diter les donnes. Donc l, tout est faire. J.P. Charpentier a commenc de dbroussailler la question. Que choisir ? Pour conclure cette rapide prise de contact avec synthLab, je dois avouer une certaine perplexit. Les fonctions Midi de l'outil SynthLab me paraissent sensationnelles. Par contre les fonctions de synthtiseur ne sont pas au niveau de mes esprances. Et aucune chance de les utiliser avec les outils Sound et NoteSynthesizer, puisque l'emploi de synthLab les exclut formellement. Les solutions utilises dans synthLab conduisent finalement l'emploi intensif d'chantillons sonores plus ou moins longs, plutt qu' une synthse de sons simples. C'est sans doute partir de ce choix que le logiciel a t bti. Dommage mon avis, car les systmes de synthse pure sont beaucoup moins gourmands en mmoire, ce qui permet de consacrer le processeur de multiples fonctions auxiliaires, et produire des sons tous comptes faits meilleurs. Si on nous proposait par exemple une possibilit de moduler en frquence l 'un des oscillateurs par un autre, un monde nouveau s'offrirait. Je ne crois pas toutefois qu'une ralisation commerciale puisse utiliser ce principe, car il est couvert par un trs solide brevet Yamaha qui ne doit pas tre encore dans le domaine public. De plus, l'diteur de sons, bien que d'un graphisme trs lgant, n'est pas facile d'emploi. Un musicien crateur de sons doit avoir tous les paramtres de tous les gnrateurs, et leurs courbes d'enveloppes la fois sous les yeux. Cel me renforce dans un point de vue qui s'tait dj un peu dgag des expriences prcdentes: l'emploi du GS comme synthtiseur ne peut pas satisfaire un musicien quelque peu exigeant. Pour une musique ou un bruitage d'accompagnement d'un programme, c'est trs bien, mais ne demandons pas plus. ( Ce n'est dj pas si mal !) Le GS en assistant du musicien. Par contre, notre GS est remarquablement apte l'emploi d'assistant un synth (ou groupe de synths et autres appareils Midi) extrieurs, comme diteur de sons, squenceur ou aide la composition. Les outils MidiSynth, beaucoup plus faciles mettre en oeuvre que l'ancien outil Midi du GS, vont nous permettre des dveloppements intressants. On pourra aussi employer partiellement le ct "sampler" des outils synthLab pour fournir un appoint particulier, comme un ensemble d'instruments de percussion, ou une boite de rythmes. La premire des choses faire sera d'tudier les fonctions du nouveau Tool 35, puis d'crire une interface pour les utiliser dans notre langage de programmation. Toutefois, auparavant, il ne semble pas inutile de faire un petit retour en arrire afin de prciser les notions essentielles pour tous ceux qui veulent aborder les problmes de la synthse musicale. Nous parlerons: de quelques notions peu ou mal connues concernant les sons musicaux, de la synthse musicale, du systme Midi. Nous serons ensuite mieux arms pour bien comprendre ce que nous faisons dans l'emploi de nos nouveaux outils. Installation du 6.0 avec un Vulcan d'Applied Engineering ________________________________________________________ Avec l'arrive du systme 6.0, il y a de la mise jour systme dans l'air. Possesseurs de Vulcan , attention de ne pas lancer directement l'installer de la disquette /Install sous peine de surprises dsagrables. Aprs quelques manipulations, le programme va vous demander d'introduire votre disque dur....qu'il ne trouvera plus jamais. En effet, celui-ci utilise un driver particulier qui doit Ca y est ! Il est l, il est sorti, nous l'avons vu.Il ne s'agit pas du parc EuroDysneyLand Marne la Valle, mais bien sr du systme 6.0 dfinitif pour l'Apple IIGS. Dans ce numro 21 de GS Infos, nous saluons l'arrive de J.Destelle dans le domaine trs vaste de la programmation du GS. Lionel Saugrain propose tous les dveloppeurs de se regrouper, voir dans l'article "Dernire". Tous Beauvais le 20 juin, inscrivez-vous vite, ce sera vraiment une journe ex ------------------------------------------------------------------------- J.DESTELLE UTILISER LES RESSOURCES DU GS ========================================================================== Cet article comme ceux de la mme srie, est destin dmystifier la "ToolBox" du GS. Il s'adresse tous ceux qui s'intressent un tant soit peu la programmation. -------------------------------------------------------------------------- LES RESSOURCES DU GS ... A QUOI CA SERT ? -------------------------------------------------------------------------- 1. INTRODUCTION Si nous aimons le GS, c'est que nous avons pour la plupart appris l'informatique en programmant notre APPLE II en basic Applesoft et en assembleur , et qu'ayant pris got la chose, nous attendons des satisfactions encore plus importantes de notre ordinateur. Avec les 48 K de mmoire de l'Apple II +, on arrivait faire des merveilles, qui tournent encore mieux maintenant sur nos GS! Quelques nostalgiques de ces difficults initiales ont saut sur le ct "non domestiqu" du GS, en ne prenant en compte que le contenu du boitier, sans aucun recours aux outils, programmant "au niveau du mtal" et se passionnent en sortir de spectaculaires dmonstrations. D'autres qui avaient utilis leur Apple II pour des travaux plus srieux, cherchent maintenant employer toutes les facilits complmentaires apportes par l'norme boite outils de notre ordinateur prfr. Mais ils s'inquitent de ne pouvoir avancer que lentement. Les documentations officielles, difficiles obtenir en France, ne paraissent que de longs mois aprs la mise sur le march des nouvelles versions du systme. Les livres en franais sur la question sont incomplets, et toujours en retard d'une version. De plus, ils ont t crits avec en tte les habitudes du Mac, dont la boite outil n'obit en fin de compte absolument pas au mmes finalits que celle du GS. Quant aux revues d'informatique, hormis ToolBoxMag, c'est vraiment le dsert ! Il faut beaucoup de foi pour se lancer dans l'aventure d'une programmation d'application en desktop ! Et poutant, ce n'est pas bien difficile. CE QUI DISTINGUE LE GS. Il y a bien sr le ct graphique et les possibilits sonores. Mais cel, on le trouve sur tous les ordinateurs bon march; Apple aurait pu les rajouter sans problme dans nos Apple II. Le plus important, c'est l'ensemble des outils crs pour manipuler de donnes structures. Les "ressources" sont en fait tout simplement des donnes structures et "Ressource Manager" un outil trs performant pour la manipulation de ces donnes. Alors que ds le dpart, le Mac avait t conu avec un "ressource manager" comme premier outil la base de tout le systme, ce qui simplifiait normment toute la programmation, le GS n'en a pas bnfici avant le systme 5.0. Avec les ressources, la plus grosse partie de ce que nous crivions jusqu' maintenant sous forme de source dans les programmes peut tre constitue partir de donnes standard, ou dj prcdemment utilises. Cel trs rapidement, au moyen de logiciels spciaux: les diteurs de ressources. Il devient possible, ds maintenant de diviser par 2, 3 ou mme 4 le travail de programmation. Comme les ressources peuvent s'tablir beaucoup plus rapidement que les programmes eux-mmes, le temps gagner est considrable. Ce constat est crasant. De plus, le systme 5.0 a non seulement dfini de nouveaux outils, plus performants, mais a aussi tendu considrablement les fonctions remlies par Task-Master, ce extraordinaire gestionnaire automatique qui reste toujours cach au fond du GS et fait pratiquement le plus gros du travail pour nous. A chaque nouvelle version du systme, nous dcouvrons que TaskMaster en fait encore un peu plus ! Maintenant il gre entirement les contrles, aussi bien les barres de dfilement que les listes, l'diteur de textes etc... rendant de moins en moins ncessaire l'emploi de nombreux outils l'accs un peu compliqu. Il nous faut donc maintenant rattraper le temps perdu, apprendre bien utiliser les ressources et les nouveaux outils. Dans une certaine mesure, nous devrons renouveller notre faon de penser les programmes. LES DONNEES STRUCTUREES. Qu'est-ce qu'une donne structure ? Tout simplement un ensemble de donnes lmentaires varies regroupes sous un mme nom. Les donnes lmentaires peuvent tre n'importe quoi, condition de pouvoir les traduire en une succession d'octets, le seul langage la porte du microprocesseur de notre ordinateur. Elles peuvent tre des chiffres, des codes d'instruction de programme, des textes, des dessins, des chantillons sonores, les caratres d'une fonte,... ou bien d'autres donnes structures. Ainsi, votre numro de scurit sociale est une donne structure, de mme que le code postal de votre ville: on peut les manipuler c'est dire les lire, les crire, les dplacer, sans avoir connatre le dtail de leur structure interne. Mais aussi on peut en extraire les donnes internes sparment. Un autre exemple : l'une des fiches du fichier d'adresses d'une association. Elle comporte les divers renseignements concernant l'adhrent: Fiche adhrent; : nom de la structure - Nom; : texte - Prnom; : texte - Terme d'adressage (Mr ou Mme ou Mlle);: chiffre (1,2,3) - Date de naissance; : 8 caractres - Adresse: 1e ligne; : texte 2e ligne; : texte Code Postal; : 5 caractres Ville; : texte - Numro dans l'association; : nombre - Numro de la licence sportive; : nombre - Etat du Compte cotisation; : nombre - Donne supplmentaire 1; : place disponible - Donne supplmentaire 2; : place disponible La date de naissance et le code postal sont galement deux donnes structures. Notez que cet exemple est volontairement pris en dehors des donnes habituellement dfinies comme paramtres pour la boite outils du GS. Nous savions manipuler des donnes de ce genre, sous forme de fichiers textes l'aide de l'Applesoft et du Dos 3.3 ou du Prodos. Quand nous crivions dans le disque, nous donnions cet ensemble le nom d'enregistrement( record), et chaque lment le nom de champ (field). Pour les sortir du disque et les ranger en mmoire, nous devions nous dbrouiller pour les ranger dans des tableaux du genre Fichier$(i,j). Quand nous nous sentions limits par la lenteur de manipulation du basic, nous construisions notre propre structure en assembleur dans une zne de mmoire que nous avions choisie. Puis nous rcrivions, dans chaque cas, les divers lments de programme pour travailler sur ces donnes. L'tat d'esprit du GS c'est de considrer cet ensemble de donnes comme une structure quelconque qu'on appelera par exemple "FicheAdherents", et qui n'est autre qu'un "Record" au sens du langage Pascal. De ce fait, nous pourrons utiliser des outils trs gnraux pour manipuler ce "record" comme les autres. (N'oublions pas que le GS comme le Mac ont t conus en utilisant les grands principe du Pascal, langage initiateur de la programmation structure.) Pour le ranger en mmoire, on lui allouera un "bloc" ( espace de mmoire pouvant tre dplac) repr par un "handle". Le "handle" est lui mme un ensemble de donnes contenues dans une structure qui comporte, entre autres: l'adresse du bloc en mmoire, le nombre d'octets du bloc, les "attributs" du bloc ( conditions de gestion du bloc en mmoire), et un identificateur pour savoir qui ce bloc appartient ( votre programme, un outil du GS, ...). La manipulation du handle, comme sa cration, est confie l'outil "Memory Manager" qui fait pour vous l'norme travail de grer l'espace mmoire: ranger,dplacer, supprimer ce dont on n'a plus besoin, allouer de nouveaux blocs, etc... Tout le GS (comme le Mac) est construit sur ce principe. Pour chaque besoin, Apple a dfini des structures particulires, gnralement appeles "record" , et a cr des outils aussi performants que possible, destins les manipuler. Voici maintenant quelques exemples choisis parmi les trs nombreuses structures de donnes standard manipules par les outils du GS: QuickDraw utilise: Cursor : toutes les caractristiques et le dessin du curseur; Font: la police de caractres, avec ses donnes accessoires; FontGlobalsRecord, FontID, FontInfoRecord, RomFontRec; GrafPort: la structure de base de tout le systme graphique; LocInfo, PaintParam, Penstate, ColorTable; QDProcs: les procedures diverses de dessin; ... Window Manager: Paramlist: toutes les donnes utiles la cration d'une fentre; WindRec: les donnes tenir jour pour chaque fentre ouverte; WindColor: les donnes "GS" des couleurs et tracs de fentres; WindChain: donne de relation entre les diverses fentres; DeskMessageRecord. Control Manager: CtlRec: tout ce qui concerne l'tat d'un contrle; BarColors: lments pour colorer les barres de dfilement; BoxColors: donnes pour les cases cocher; BttnColors: couleurs de pour les boutons; LimitBlk: donnes limitant le glissement avec la souris; RadioColors: couleurs pour les boutons "radio". etc... Plus d'autres structures que le systme s'est cr, sans nous le dire, et utilise pour ses besoins propres. Lors de l'appel l'une fonctions des outils du GS, on procde en gnral la manipulation de l'un des lments de ces donnes structures, ou du bloc entier. Les "ressources" , en tant que structures de donnes, seront gres de la mme manire, avec l'aide complmentaire d'un outil spcialement conu pour cel: "Resource Manager". 2 . POURQUOI DES RESSOURCES ? Vous savez que les fichiers du nouveau type "tendu" introduits par le GS OS ressemblent ceux du Mac, et comportent deux parties diffrentes (appelles dans les documents d'origine "data-fork" et "res-fork") : - un segment de donnes tout fait similaire aux ficihiers des anciens types (appel "data-fork"), et - un segment de ressources, (appel "res-fork") destin contenir les ressources. L'un ou l'autre de ces deux segments peut du reste exister ou non. Deux exemples de ces nouveaux fichiers: 1/ Un programme rcemment crit sous GSOS sera forcment livr sur un fichier tendu. Le code, c'est--dire le programme lui-mme, est enregistr dans le segment donnes.Le segment ressources reoit tout ce qui est susceptible d'tre souvent modifi, comme les ttres ( afin de pouvoir les traduire), les textes des alertes, ainsi que tous les blocs de paramtres qui dfinissent les caractristiques : emplacements, formes, formes et couleurs des menus et des fentres, et des lments de contrle et de dialogue. 2/ Un fichier de tratement de texte utilisant cette nouvelle norme, utilisera son segment de donnes pour y loger le texte lui-mme, en code ASCII, sans aucune partie reserve pour autre chose. Le segment "ressources" comprendra les donnes de mise en page, d'dition et tous les lments ncessaires l'impression , le choix des caractres. Avantages vidents de ce procd: - On peut traduire facilement un programme dans une autre langue. - On peut en modifier sa prsentation sans intervenir dans la partie "code" toujours dlicate modifier. - Dans les deux cas ci-dessous, on peut constituer une librairie d'lements standards transfrables simplement d'un programme l'autre, ou d'un fichier l'autre sans modification, ou avec des modifications trs faibles. Avantage complmentaire moins apparent: une norme simplification dans l'criture des programmes. L'introduction des ressources a accompagn la cration d'un certain nombre d'outils nouveaux dans la boite outils du GS partir du systme 5.0. Ces nouveaux outils ont t rcrits pour utiliser des blocs de paramtres complets pralablement dfinis, (dj un peu utiliss sous le nom anglais de "templates") qui ne sont autres que les formes standard des ressources. Il n'est pas exagr de dire que l'emploi des ressources divise par deux au moins le temps de programmation. Et cel n'est pas fini, car le dveloppement d'diteurs de ressources rapides et fiables nous conduit tout droit la prise en charge quasiment automatique de nombreuses pages de sources ! Autre avantage, et pas des moindres, les ressources, qui peuvent reprsenter un nombre d'octets respectable ( souvent suprieur celui des octets du code) n'encombrent pas la mmoire, car elles n'y sont transfres qu'au moment o on a besoin. 3. QUE SONT CES RESSOURCES ? Une ressource est une collection de donnes ranges dans un format dfini. (C'est la dfinition officielle). Les ressources sont donc des "donnes structures", le format tant laiss l'initiative de l'utilisateur. Une ressource est dsigne par deux numros: - le type ( dterminant le format ), - l'ID ( numro de la ressource dans le type ). 3.1 LES TYPES STANDARD. Apple a dfini des types de ressources "standard" utilisables par les outils du GS. Il n'y en a actuellement qu'un petit nombre, mais ils permettent dj de faire beaucoup de choses. Voici quelques types standard: - une chane de caractres type Pascal, ou bien de type C; - un bloc de texte de longueur quelconque; - les blocs des paramtres d'un menu, d'un item de menu, d'une fentre, - le texte d'une fentre d'alerte, - tous les blocs de paramtres des contrles, - une icne, - une "picture", - un chantillon de son digitalis,... ... etc... L'emploi de ces ressources standard avec les nouveaux outils permet des simplifications spectaculaires de l'criture des sources des programmes. Deux exemples: 1. Avant d'utiliser les outils du GS dans un programme crit en "desktop" c'est--dire avec emploi des menus, fentres, dialogues, etc... dans le plus pur style Apple (ce que J.Y.Bourdin appelle "le mol oreiller..."), il faut charger et initialiser tous les outils ncessaires: cel reprsentait avant le 5.0, au bas mot au moins deux pages en assembleur et une grande page en Pascal. En utilisant le nouvel outil StartUpGSTool, il n'y a pas plus de deux lignes crire. La ressource elle-mme se recopie en quelques secondes, mais ne figure pas dans la source, donc n'alourdit pas le texte sur lequel le programmeur travaille. C'est la mme chose pour la fin du programme. Il fallait soigneusement inverser l'ordre dans lequel tous les outils avaient t ouverts, et crire pour chacun d'entre eux les instructions de fermeture. Pas loin d'une page de source. Une seule instruction s'en charge maintenant, sans aucune ressource supplmentaire crire. 2. Ecrire les paramtres et les chanes ncessaires la cration d'un menu prenait pas mal de temps. Le nouvel outil qui affiche les menus a besoin d'un ensemble de ressources qu'un bon diteur vous tablit en quelques minutes, grce des dialogues trs bien conus. L encore, il suffit d'crire une ou deux lignes de programme, et de crer les ressources voulues (ou tout simplement de les recopier en les modifiant lgrement.) 3.2.RESSOURCES NON STANDARD. Les Ressources non standard peuvent contenir tout ce que vous voulez... Le gestionnaire de ressources (Resource Manager) n'a pas connaitre ce qu'il y a dans les ressources qu'il manipule. Standard ou pas, il s'en moque. Il identifie chaque ressource au moyen de ses deux numeros: le type et l'ID; et c'est tout. De ce fait, vous pouvez crer n'importe quel type de ressource dont vous pouvez avoir besoin: des petites, des grandes, des simples, des farfelues... ne dpassez pas trop 64 K de longueur tout de mme. A vous de dfinir le format de sa structure ( sous forme de template, ou de "record" comme en Pascal ); ensuite vous lui donnez un numro de type de votre choix ( pas un numro dj pris par une ressource standard ). Vous mettez ce que vous voulez dedans, et vous pouvez ensuite confier le colis Resource manager qui, en bon "chef de consigne de la gare" vous rangera votre bien dans une case, le couvera de ses soins attentifs jusqu' ce que vous lui redemandiez. Nous vous conseillons toutefois de ne crer vos propres ressources que quand vous aurez bien compris l'utilit et le mode d'emploi des ressources standards. 4. COMMENT LES RESSOURCES SONT-ELLES GEREES ? Nous ne rentrerons pas ici dans le dtail du fonctionnement de "Resource Manager". Nous donnerons seulement les premires notions ncessaires la comprhension de ce qui suivra. Vous trouverez plus de dtail dans la partie "Rfrences" de cet ouvrage. 4.1 LE GESTIONNAIRE DE RESSOURCES. L'outil "Resource Manager" se charge de tout. Vous n'avez pas du tout besoin de savoir de quelle faon les ressources sont ranges dans le fichier. Il est extrmement difficile d'intervenir directement dans un bloc du disque pour modifier une ressource. On risque de dtruire un difice entier ! Retenons pour l'instant que ResMgr construit et tient jour , dans le fichier-ressource, un "carnet d'adresses" ( "res-map" ) dans lequel il note, dans l'ordre des types et dans l'ordre des ID pour chaque type, pour chaque ressource: - le type, l'ID, son adresse dans le disque, et ses attributs de stockage en mmoire, sa longueur et ventuellement un handle sur son adresse dans la mmoire. A l'ouverture d'un fichier-ressources, ResMgr charge en mmoire ce carnet d'adresses. Il en assurera la remise jour permanente. A la fermeture du fichier, aprs avoir recopi les modifications de ressources dans le disque, il rcrira ce carnet , trs souvent un endroit diffrent du fichier. Les ressources elles-mmes sont crites un peu partout dans le fichier, l o il y avait de la place. Dans le disque, ResMgr conserve aussi tout ce qui lui est utile pour disposer de l'espace libre, ici, et l, dans le fichier-ressource. Il essaie d'utiliser au mieux les "trous" dans les blocs, trouve un endroit pour rcrire une ressource qu'on a agrandie, raye une ressource supprime bref fait le mnage et range son coin, puis remet au net son carnet d'adresses. Nous n'avons pas le choix. Laissons ResMgr faire ce travail, et faisons-lui confiance. (Bien que parfois, quand il y a eu de nombreux changements successifs dans le fichier, il semble un tout petit peu perdre les pdales... mais ceci est une autre histoire qui n'intresse que les programmeurs dsirant s'attaquer la modification, ou l'dition des ressources.) 4.2.DANS LE CAS DE PLUSIEURS FICHIERS. Resource manager peut ouvrir plusieurs fichiers successivement, les laisser ouverts et rechercher une ressource donne dans l'un ou l'autre de ces fichiers. Il y a un "ordre de recherche" fonctionnant comme une pile: la recherche commence par le dernier fichier ouvert, qu'on appelle le fichier "courant", puis l'avant dernier et ainsi de suite jusqu'au dernier qui par principe est le fichier du systme. Resource mgr s'arrte quand il a trouv une ressource dont le type et l'ID correspondent ce qui lui est demand. Il est donc possible d'ouvrir simultanment plusieurs fichiers diffrents de ressources pour augmenter le nombre des donnes utiles. A l'ouverture d'un ficher, ResMgr donne un numro chaque fichier. C'est l'ID du fichier. Le fichier de ressources du systme a toujours le numro 1. Il est possible de modifier slectionner un fichier parmi d'autres, et de modifier l'ordre de recherche. Retenons pour l'instant ce qui est important: la possibilit de demander nos programmes d'ouvrir, en cas de besoin, un ou plusieurs autres fichiers de ressources pour y puiser d'autres donnes. Nous avons fait connaissance avec les ressources. Dans un prochain article, nous aborderons de faon plus prcise la faon dont Ressource Manager les gre, et comment nous pouvons utiliser les outils qu'il met notre disposition.  !/ tre prsent sur le disque lors du boot. La solution est simple: 1- Formater une disquette 800K, appelez l 6.0.Light 2- Booter la disquette INSTALL du systme 6.0 et mettre la disquette 6.0.Light. 3- Choisir l'Option Customize 4- Choisir 6.0.Light comme disque " Disk to Update" 5- Choisir l'option "*System 6 : On 800k Disk" Lorsque l'opration est termine, vous disposez d'un systme minimum sur disquette. Il reste peu prs 27 k de disponibles. 6- Rebootez l'aide de ce systme "6.0.Light" 7- Sur la disquette d'utilitaires du Vulcan prenez le Driver (6k) et copiez-le dans le dossier "Driver" du dossier "System" de "6.0.Light". 8- Rebootez avec ce systme "6.0.Light vulcanis..." 9- Mettez la disquette /install du 6.0 et double-cliquez sur "Installer" 10- Cliquez sur "Easy Update" et cette fois tout se passera bien. Une fois l'installation termine, il reste une dernire preuve. 11- N'oubliez pas de mettre le driver du Vulcan dans le dossier "Driver" du dossier "System" du systme 6.0 que vous venez d'installer sur votre Vulcan. Les utilisateurs de RamFast se trouvent dans la mme situation et doivent suivre la mme procdure. BUG HYPERSTUDIO 3.0 ___________________ Un bug a t repr dans HyperStudio 3.0 lorsqu'on tente de sauver les piles dont le nom comprend plus de 13 caractres. La LED du drive s'claire, mais rien n'est sauv et aucun message d'erreur n'apparat. Une seule solution: ne pas donner de nom de plus de 13 caractres. SYSTEME 6.0 ___________ Quelques remarques tlphoniques d'Yva#$%&'( ? ,@ ? ,qB**Clavier VF Actif \H**K,j8 "  K"jHHHHH "hhHHHHHH "hhHHHHV^ "hhHHHHx  "hhkK kK,jHH "jkZK: zk` ;[  +`HH"`HH" "7"6"S"7"sa:"a<"᭮HH"᭮HH"`"hhhHHHH"hHHHH"h`HH#"h%Kq`IHHH"`"hY"h`"hjY"h`IHHH"ᭀHHH"ᭀ:)H$""hh"`)H$"HH"`K%))%)@  %),.mK, ~K^AD0% ) ) ) HH"h0k\Nn&( Clavier VF - v3.2 Clavier VF Actif Clavier VF b <JNDA du domaine public JXCaractres franais accentus Xdirectement au clavier, ainsi que la police tendue par JX-{SCTRLS}-{SSHIFTS}-<StoucheS>]v Install R(Convertir "," en "." {}|@\[]#aeioueiu31 "/Ecrit par L'Anome et Maytu. (c) M.G.B 1988-89. Amitis : JRVM - DAG - KAM - A.A./^ OK < Ls A Propos de83/Ce NDA permet la francisation du clavier lors de l'utilisation de logiciels US. Le trema et le circonflexe sont disponibles en les tapant avant le caractre accentuer. L'option "Convertir" permet d'utiliser la virgule du pav numrique comme un point./^ Compris ! <}LAide0?  M DDݭ M Mѭ M 0?33333330??33333333333?????????3?3333333333?00??0?, q>msV^=xC8Hsj n00AMT`eipv|& 59@F{~;imx| Kv /:?ET`fip|LES.PLUSv'  '*CLAVIER.VF" N5+)pple le Magazine qui vient de sortir, entirement rserv au Mac et disponible chez votre concessionnaire, Franois Benveniste parle du mensonge en informatique et l'absout, alors,les paris sont ouverts! APPLE MAGAZINE N1 nouvelle srie Pas un mot sur le GS, il a disparu du catalogue, il n'y a plus d'hypocrisie. Un ouvrage rserv au possesseur de Mac trs bien fait au demeurant, gratuit chez votre concessionnaire (enfin j'espre, on me l'a donn, autrement il est marqu 30.00F sur la couverture) Bien plus utile mon avis que certaines revues spcialises dans le Macintosh dont le seul contenu intressant est souvent la publicit qu'elles contiennent, pour connatre les prix et les nouveauts, le reste n'tant que ple copie expurge des revues amricaines MacWorld et MacUser. Quelques articles peuvent bien qu'ils parlent du Mac intresser le possesseur d'un Apple IIGS avec systme 6.0 et Hypercard: - La PAO couleur entirement numrique. - La prsentation de la Personal LaserWriterII NTR. - Comment crer une application d'EAO avec Hypercard. - L'interview d'Henri Aebischer. LE POINT SUR LES PRIX Avec l'arrive du 6.0, un Gs de base, c'est un GS avec 2 mo de mmoire vive et un disque dur. Si vous voulez pleinement profiter de votre machine, il va falloir la faire voluer. Pour la mmoire, le montage publi par le GS club marche parfaitement et permet pour le prix de 2 barettes SIMM 1mo pour Mac de mettre l'extension mmoire Apple livre avec le GS 2 Mo. (250 F TTC la barrette chez Oryx P.MANETv' '  'HIST.CAL.-INIT.C.53-PROG.QUEUES3-HIST.CALv( ' -'/HIST.CALENDRIER/<(u.DATESjv4( .0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi Histoire du calendrier ==================== Dans la vie, il ny a pas que linformatique ! Il y a aussi, par exemple, le temps qui passe. Dans cet article, je vous propose donc de vous raconter lhistoire du calendrier (ou devrais-je dire des calendriers) au cours des diffrentes poques. Comme jai eu loccasion de rassembler pas mal dinformations sur ce sujet, jen profiterai pour vous prsenter dautres thmes non sans rapport avec la mesure du temps. Dans la vie, il ny a pas que linformatique ! mais elle y contribue de plus en plus Comme vous ne vous ne devez pas tre trs loin de votre GS, ne serait-ce que pour savoir si cela vaut le coup de continuer la lecture de cet article, je vous indiquerai quelques formules, et mme une librairie de routines prtes lemploi, mettant en uvre ces formules, que vous pourrez utiliser dans des calculs sur les dates. Cette librairie a t crite avec ORCA/C et peut donc tre utilise directement avec tout programme crit dans ce langage; pour les autres, il vous faudra adapter les fonctions qui vous intressent dans votre dialecte favori (rassurez-vous, ces fonctions sont relativement simples, et peuvent tre crites par exemple en Pascal trs facilement). Cet article a t motiv par une question (dont jai oubli le nom de lauteur, quil me pardonne), priori anodine, me demandant comment obtenir le jour de la semaine correspondant une date donne. En fait, si on ne connat pas la bonne formule, on peut sy casser la tte pendant un bon moment. Je remercie aussi Mr Terry Morris qui mavait suggr dajouter des fonctions de manipulation de dates ma calculatrice, bien que je ne lai pas fait pour diverses raisons. Jespre que cet article comblera son attente. Lantiquit ========== Aussi loin que lon remonte dans lHistoire, on saperoit que les hommes ont dat les vnements qui leur arrivaient. Les premiers calendriers taient rudimentaires, puisque bass sur les saisons ou sur le mouvement de la lune. Lun des calendriers antiques les plus connus est le calendrier des Assyriens; celui-ci tait bas sur les phases de la lune. Ils savaient quune lunaison (la dure entre 2 pleines lunes) durait 29 jours et demi, et quil y avait 12 lunaisons avant le retour dune saison; ainsi leur anne lunaire avait une dure de 354 jours, elle tait donc en retard sur lanne solaire denviron 11 jours. Au bout de 3 ans, le dcalage atteignait plus dun mois, cest pourquoi ils ajoutaient de temps autre un mois supplmentaire de faon garder le calendrier synchronis avec les saisons. La meilleure approximation que lon pouvait obtenir dans lantiquit tait une priode de 19 ans, au terme de laquelle les phases de la lune retombent le mme jour de lanne (solaire). Cette priode tait donc constitue de 12 annes de 12 mois (chaque mois comprenant alternativement 29 et 30 jours) et de 7 annes de 13 mois, le treizime mois tant dit intercalaire. Cest ce cycle qui a t adopt dans le calendrier religieux juif au quatrime sicle aprs Jsus-Christ, et qui est toujours en vigueur. Les arabes utilisaient le mme calendrier, jusquՈ ce que Mahomet interdise le treizime mois, dans le calendrier adopt en 632 et dfinissant lan 1 de lՏre musulmane, que lon nomme hgire, et commenant le 16 juillet 622, date laquelle Mahomet quitta La Mecque pour Mdine. A la place, le calendrier musulman compte un jour intercalaire pour 11 des annes dun cycle de 30; cest lutilisation dun calendrier lunaire qui fait que la date du ramadan change chaque anne. Mais trs vite, le dcoupage du temps sest fait daprs les mouvements du soleil (plus prcisement la rotation de la terre autour du soleil) en plus de ceux de la lune (cest dire la rotation de la lune autour de la terre), le premier permettant de dfinir lanne tandis que la seconde dterminait le mois (en ces temps reculs, on navait pas encore donn de nom ces dcoupages); ces calendriers sont dits luni-solaires. Les semaines et les jours (ces derniers bass sur la rotation de la terre sur son axe) furent ajouts beaucoup plus tard. Le calendrier gyptien, par exemple, comptait 12 mois de 30 jours complts de 5 jours dits pagomnes; lanne tait dcoupe en 3 saisons seulement : inondation, vgtation et rcoltes. Les gyptiens avait estim assez prcisement la dure de lanne 365 jours 1/4, mais il semble quils naient rien fait pour compenser la diffrence avec leur calendrier. Malheureusement la nature (ou Dieu :-) a oubli lordinateur dans sa conception du monde qui est tout sauf digital; les diffrents mouvements la base des calendriers ne sont donc pas des nombres entiers (sauf le jour), et encore moins des multiples les uns des autres. Tout lart des calendriers consiste donc corriger ces phnomnes, et nous allons voir que cela na pas t une mince affaire Le calendrier julien ================== Lorsque la Rome rpublicaine devint la puissance du monde de cette poque, on connaissait bien tous les problmes poss par la dfinition dun calendrier. Mais les romains se sont compliqus la vie, car ils avaient la hantise des nombres pairs. Ce calendrier connt plusieurs volutions au cours du temps, pour essayer de rester en phase avec les saisons. Ainsi, leurs mois comptaient 29 ou 31 jours, sauf fvrier qui nen avait que 28, et lanne comptait 355 jours. Un an sur 2, le calendrier romain ajoutait un mois intercalaire appel Mercedonius, et qui comptait 22 ou 23 jours, de faon rester en phase avec lanne solaire. De plus, le calendrier qui tait contrl par les prtres subissait des variations en fonction de leur bon vouloir; des jours intercalaires taient ajouts de temps autre, notamment pour prolonger leur mandat. Imaginez un instant que nos dputs allongent le calendrier aux veilles des lections pour prolonger leur mandat, et vous aurez une ide de ce que cela pouvait donner. Il est peu prs certain que ce calendrier dbutait au mois de mars, probablement pour correspondre avec le printemps dans lhmisphre nord. Les annes taient dates daprs la lgende de la fondation de la ville de Rome (753 avant JC), mais ils avaient aussi lhabitude de rfrencer leurs annes par rapport aux consuls au pouvoir, comme si nous dsignions 1992 comme lan 11 de Mitterand. Initialement, ces consuls dbutaient leurs mandats en mars, mais au second sicle avant JC, la loi fut modifie et les mandats vinrent commencer le premier janvier. Si vous vous tes jamais demand pourquoi septembre, octobre, novembre et dcembre sont les neuvime, dixime, onzime et douzime mois et non les septime, huitime, neuvime et dixime comme leurs noms semblent lindiquer, vous pouvez vous en prendre la loi dicte par le snat en 153 avant JC. Et encore, on a chapp quintembre et sexembre, car avant quAuguste ne change leur nom, cՎtait ainsi que lon appelait juillet et aot (en latin les noms taient Quintilis et Sextilis). Ce calendrier avait bien besoin dՐtre rform. Cest ce qui fit Jules Csar sur le conseil de lastronome grec Sosignes, en 46 avant JC. Par dcret imprial, cette anne-l dura 445 jours pour remettre le calendrier en phase avec le soleil. Le nouveau calendrier, que lon baptisa julien daprs le nom de Csar tait essentiellement solaire et comptait 365 jours ainsi quune anne bissextile de 366 jours tous les 4 ans; Sosignes avait en effet calcul que la dure de la rotation de la terre autour du soleil tait de 365 jours 1/4. Les mois comptaient alternativement 30 et 31 jours, sans plus tenir compte du mouvement de la lune. Il entrina aussi le fait que lanne commenait au premier janvier et non plus la fin mars avec lՎquinoxe de verne (de printemps). Il fallut nanmoins pas mal de temps avant que ce nouveau calendrier ne soit adopt, ce qui arriva finalement sous le rgne dAuguste, qui rebaptisa les septime et huitime mois daprs son nom et celui de Csar, et qui donna le nombre de jours chacun des mois tels quon les connat aujourdhui. Les semaines et les jours ne furent dfinis que plus tard, puisque ce ne fut quau quatrime sicle aprs JC, sous le rgne de lempereur Constantin le Grand, lorsquil proclama la chrtient comme religion officielle de lempire romain, et quil instaura le repos hebdomadaire, hrit de la tradition juive. Le calendrier julien se vit donc ajouter la semaine de 7 jours. Ce calendrier a t adopt par les chrtiens en 532 daprs une proposition du moine scythe Denys le Petit. On commena compter les annes partir du premier janvier ayant suivi la naissance du christ, en considrant que lan romain 754 deviendrait lan 1 de lՏre chrtienne. On a dailleurs calcul depuis que Jsus avait d natre 5 7 ans plus tt. Le calendrier chrtien fut adopt par la France au huitime sicle, tandis que la dcision de dmarrer lanne au premier janvier ne fut prise que par Charles IX en 1564. Auparavant, le premier jour de lanne variait selon les rgions; par exemple, Paris, cՎtait le jour de Pques, tandis que dans certaines provinces, cՎtait le 25 mars, jour de lannonciation. Le calendrier grgorien ===================== Tout cela tait bien joli, mais le problme est que la rotation de la terre nest pas de 365 jours 1/4. Le calendrier julien tait en fait trop long de 11 minutes et 14 secondes, cest dire 1 jour tous les les 128 ans ou 3,12 jours tous les 400 ans. A priori, cela ne fait pas beaucoup, mais a finit par saccumuler, si bien quau bout dun certain temps, la date de lՎquinoxe de verne, trs importante religieusement parlant pour le calcul de Pques, arrivait de plus en plus tt dans lanne. Le calendrier, lui, tait de moins en moins en phase avec le soleil et les saisons. En ces temps moyengeux, les prtres imaginaient quils allaient fter Pques en dcembre et Nol en automne. La dure exacte de la rotation de la terre autour du soleil, qui est environ de 365 jours, 5 heures, 48 minutes et 14 secondes ou 365.2422 jours, a t calcule par Venerable Bede, un moine historien anglo-saxon, en 730 aprs JC. Pourtant rien ne fut fait pendant prs de 1000 ans, malgr la note envoye par Roger Bacon au pape Clment IV au treizime sicle, linformant du dcalage de lՎquinoxe de verne. Il fallut attendre encore 2 sicles, et le pape Sixte IV qui prit conscience quune autre rforme tait ncessaire. Malheureusement, il appela Rome lastronome allemand Regiomontanus qui mourt de la peste peu aprs son arrive, et les plans de rforme avec lui. En 1545, le concile de Trente dcida de rformer le calendrier, ce qui fut fait un peu plus tard sous le pape Grgoire XIII, lequel donna son nom ce calendrier, et qui est toujours celui en vigueur. Tous les calculs ont t effectus par le Pre Christophe Clavius, S.J., un astronome jsuite, qui crivit la bulle papale tablissant ce nouveau calendrier. La premire correction qui fut dcide tait que le jeudi 4 octobre 1582 serait le dernier jour du calendrier julien et que le jour suivant (le premier du calendrier grgorien) serait le vendredi 15 octobre 1582, pour compenser le dcalage accumul au cours des sicles. Pour que le calendrier grgorien ne subisse pas les mmes inconvnients que le calendrier julien, une formule long terme a t dfinie par le bibliothcaire du Vatican, Aloysius Giglio. Celle-ci indique quune anne sur quatre sera bissextile, sauf si elle correspond un sicle qui nest pas divisible par 400. Ainsi 1600 fut bissextile tandis que 1700, 1800 et 1900 ne le furent pas; si lon se rfre cette rgle, lan 2000 devrait tre bissextile car il est divisible par 400. Cette rgle prsente lavantage dՎliminer 3 ans tous les 4 sicles et donc de garder peu prs le calendrier en phase avec le mouvement du soleil, puisquon ne prend plus que 0,12 jour davance tous les 400 ans, ce qui nest pas bien gnant dans la plupart des cas. En dehors de ces ajustements, le calendrier grgorien est identique au calendrier julien, quant au nombre et la dure de chaque mois. Nallez pourtant pas croire quil a suffi au pape de proclamer un nouveau calendrier pour que celui-ci entre en vigueur immdiatemment. En fait, son adoption a t une vritable pope. A cette poque, lEurope tait en effet en pleine rforme, et il nՎtait donc absolument pas question pour la religion protestante naissante dadopter quoi que soit qui vint du pape (ils disaient mme quils aimaient mieux tre en dsaccord avec le soleil quen accord avec le pape). Les orthodoxes, qui sՎtaient dj spars de Rome depuis le Grand Schisme de 1054, nallaient pas non plus accepter quoi que soit de papal, fut-ce aussi simple et ncessaire. Donc, pendant plusieurs sicles, lEurope et plusieurs calendriers selon les diffrents pays, et mme parfois lintrieur dun mme pays, comme ce fut le cas, par exemple, de la Suisse qui tait sous influence franaise (catholique) et germanique (protestante). Cette transition fut si longue quon ajouta aux dates importantes les suffixes VS (vieux style signifiant que le calendrier julien tait employ) et NS (nouveau style pour le calendrier grgorien); on retrouve dailleurs ces abrviations dans la plupart des documents historiques correspondant cette poque. La plupart des pays catholiques adoptrent donc le nouveau calendrier ds sa dclaration, comme la France, lEspagne ou lItalie. Quelques autres ladoptrent dans les annes qui suivirent, comme les fiefs catholiques de lAllemagne, la Belgique, la Suisse et les Pays Bas ou la Hongrie. Au fur et mesure que la rforme sattnua, les pays protestants rejoignirent les autres, comme ce fut le cas des pays germanisants ou le Danemark en 1700. LAngleterre et ses colonies, notamment les Etats Unis, ne ladoptrent quen 1752. A ce moment l, le calendrier julien avait pris un jour de plus par rapport au soleil quen 1582 (lan 1700 tait bissextile dans le calendrier julien, mais pas dans le calendrier grgorien). Le parlement dcida donc que le 2 septembre 1752 serait suivi du 14 septembre. De plus, lAngleterre navait toujours pas adopt le premier janvier comme premier jour de lanne; la place, lanne anglaise dbutait le 25 mars, cest dire le jour de lannonciation. Par exemple, le 24 mars 1700 tait suivi du 25 mars 1701, ce qui tait loin dՐtre pratique. Le parlement anglais dcida donc que le premier janvier serait aussi le premier jour de lanne. La Sude suivit lanne suivante. A ce propos, jai une petite anecdote : George Washington est n le 11 fvrier 1731 selon le calendrier julien (avant la rforme britannique). Partant du raisonnement que cՎtait le mouvement du soleil, et non le calendrier, qui rgissait les annes, il commena clbrer son anniversaire le 22 fvrier selon le calendrier grgorien et changea lanne de sa naissance en 1732 (ce qui aurait t effectivement le cas si lanne britannique avait commenc le 1er janvier). Cette tradition est reste puisque les Etats-Unis ftent le jour du prsident (jour fri la mmoire de leur premier prsident) le 22 fvrier (en fait, la loi a dcid que ce serait toujours un lundi). Les dictionnaires indiquent aussi que sa naissance fut en 1732. Les pays orthodoxes nont adopt le calendrier grgorien que beaucoup plus tard, et pour la plupart dentre eux ce fut mme au dbut de ce sicle. Par exemple, la Russie ne ladopta quen 1918 aprs la rvolution. Le 31 janvier 1918 fut donc suivi par le 14 fvrier. Cest ainsi que la rvolution doctobre tait clbre en novembre (jai utilis limparfait, car je ne pense pas quelle le sera encore dsormais ;-). La Grce attendit mme jusquen 1926 pour faire ce changement. Dans les pays hors dEurope, cette adoption sest faite au gr des changements politiques : par exemple, le Japon changea en 1873, lEgypte en 1875, la Chine en 1912 et la Turquie en 1917. Les institutions religieuses rechignrent beaucoup plus changer de calendrier. Par exemple, les protestants allemands attendirent 1776, soit 3/4 de sicle aprs ladoption civile. La Sude continua appliquer les anciennes rgles de calcul du jour de Pques pendant prs dun sicle. La plupart des chrtiens orientaux continuent dutiliser le calendrier julien. Cest aussi le cas des orthodoxes russes; cest pourquoi le nol orthodoxe a lieu le 7 janvier et non le 25 dcembre. Le calendrier grgorien est encore trop long de 0,0003 jour par an soit 26 secondes (puisquil considre une anne moyenne de 365.2425 jours au lieu de 365.2422), ce qui fera un jour en 4915. Mais dici l, une autre rforme aura sans doute eu lieu ! Sinon, rien ne vous empche de brancher une horloge atomique sur votre GS, peut-tre en tant quoption de la TomenoBox ;-) Le calendrier rpublicain ----------------------- La rvolution franaise se devait dinstituer son propre calendrier, ce qui fut fait le 6 octobre 1793, qui dsigna le 22 septembre 1792 (date de proclamation de la rpublique et jour de lՎquinoxe dautomne) comme tant le premier jour de lan I de lՏre des Franais. Le 24 novembre 1793, un dcret prcisa le nom des mois et des jours, qui ont t dfinis par Fabre dEglantine. Lanne de 365 jours tait divise en 12 mois de 30 jours et se terminait par 5 jours complmentaires en septembre, 6 les annes bissextiles appeles Franciade, le jour intercalaire tant le jour de la Rvolution. Le calendrier grgorien fut rtabli par Napolon le 1 janvier 1806. Les projets de rforme -------------------- Depuis ladoption du calendrier grgorien, 2 tentatives de rforme ont vu le jour. La premire, tablie par Auguste Comte en 1849, dfinissait un calendrier de 13 mois de 28 jours, complt par un jour blanc qui tait le 29 dcembre, jour de lan fri, et qui nappartenait aucune semaine. Le jour bissextile tait le 29 juin et il ne faisait pas non plus partie de la semaine. Ce projet fut repris ensuite sous le nom de calendrier fixe, le mois supplmentaire tait dnomm sol et il sintercalait entre juin et juillet. Chaque mois comprenait donc 4 semaines, et chaque date revenait toujours le mme jour, rendant le calendrier perptuel. Lautre rforme consistait dfinir une anne de 364 jours compts, dcompose en 12 mois de 52 semaines, ainsi quun jour blanc non dat et fri la fin de dcembre. Le jour bissextile tait aussi la fin de juin. Ce calendrier universel avait t conu pour que chaque date corresponde toujours au mme jour de la semaine : il tait donc perptuel; en revanche, le mois nest pas multiple de la semaine, certains mois de 31 jours tant conservs, le but tant davoir toujours 26 jours ouvrables dans le mois ainsi que des trimestres de 91 jours (30+30+31). Le jour julien (ou priode julienne) ================================ Le problme avec tous ces calendriers, cest que lon compte en relatif (le xime jour du yime mois de la zime anne). Pour les calculs astronomiques, ce nest gure pratique, dautant plus que bien souvent les intervalles de temps mesurer sont trs importants. Joseph Scaliger a dfini en 1582 une mthode pour compter les jours dans labsolu, sans tenir compte des mois ni des annes. Il nomma cette mthode daprs son pre, Julius, crant ainsi la confusion entre le calendrier julien (daprs Jules Csar) et le jour julien (donc daprs Julius Scaliger), que lon appelle aussi parfois priode julienne. Le jour julien 0 commena donc midi le 1 janvier 4713 avant JC (on dsigne parfois ce jour comme le numro 1 et non comme le 0). A cette poque, cette date tait cense correspondre au dbut de lunivers. En tout cas, elle se situait bien avant tous les vnements connus par les astronomes du seizime sicle, et ils navaient donc pas besoin dutiliser de jours ngatifs. Scaliger calcula cette date en se basant sur la date correspondant la concidence la plus rcente de 3 cycles chronologiques: Le cycle solaire qui dure 28 ans. Au terme de ce cycle, les dates dans le calendrier julien retombent le mme jour de la semaine. Le cycle lunaire de 19 ans, aprs lequel les phases de la lune retombent le mme jour de lanne. Le cycle dindiction qui dure 15 ans, et qui tait utilis dans la Rome antique dans le calcul des impts. Il faut 7980 ans pour quune nouvelle concidence de ces 3 cycles se produise. Par exemple, le 1 mai 1992, date approximative laquelle vous lirez cet article, sera le jour julien 2448744. Le dernier jour julien remarquable tait le 23 mai 1968 puisque cela correspondait au jour julien 2440000. Le calcul du jour julien partir dune date donne est assez simple; il suffit dutiliser la formule : 365.25 * an + 30.6001 * mois + jour + 1720995, du moins sil sagit dune date correspondant au calendrier julien; pour le calendrier grgorien il faut apporter une lgre correction. Vous trouverez une implmentation de cette formule, y compris la correction, dans le fichier Dates.cc; la fonction correspondante sappelant, comme par hasard, Jour Julien(). Le calcul inverse, cest dire lobtention de la date du calendrier correspondant un jour julien donn est un peu plus complique, et je vous renvoie la fonction DateCalendaire() qui effectue ce travail. Ces 2 fonctions sont dmontres dans le petit programme JJ (source JJ.cc). Les annes prcdant la naissance de Jsus-Christ sont donnes en ngatif; il ny a pas dan 0, ainsi lan -1 est lanne prcdant lan 1 de lՏre chrtienne. Le jour julien, je vous lai dit, est trs important pour les astronomes. Il sert aussi dans le pistage des satellites. Dans ce cas-l, on utilise le jour julien modifi qui a t dfini par le Smithsonian Astrophysical Observatory (ou SAO) comme tant le jour julien 2400000, et qui correspond au 16 novembre 1858. La raison de lutilisation de ce jour julien modifi est que lorsque SAO commena pister les satellites, les ordinateurs taient loin de ce que lon connat aujourdhui. A cette poque, SAO disposait dun IBM 704 qui navait que 8K mots de mmoire, chaque mot comprenant 36 bits. Le premier satellite pist tait le Spoutnik en 1957. Le jour julien correspondant au premier janvier 1957 est 2435840 soit 11225400 en octal, ce qui tait trop grand pour tre contenu dans un demi-mot de 18 bits. Avec seulement 8K mots de mmoire, les 14 bits restants auraient t gaspills, sil avait fallu utiliser un mot complet pour stocker ce jour julien. Ils avaient aussi besoin de conserver la fraction du jour julien en question, 18 bits se rvlant amplement suffisants pour obtenir la prcision voulue. Il fut donc dcid que les 18 bits premiers bits dun mot contiendraient le jour julien et les 18 derniers la fraction du jour. 18 bits permettent au jour julien modifi daller jusquՈ 262143, ce qui, en partant du 16 novembre 1858, autorisait 7 sicles. Il tait aussi possible de naller que jusquau jour julien 131071, en nutilisant que 17 bits, ce qui laissait tout de mme une marge de 3 sicles, tout en permettant la reprsentation de temps ngatifs. Lanne 1858 prcdait tous les recensements dՎtoiles utiliss SAO, ce qui permettait dՎviter lutilisation de dates ngatives dans les calculs pour le pistage des satellites. Le jour de la semaine =================== Nous y voici enfin ! Je vous rappelle que tout cet article a t motiv par cette question ! Pour vous rcompenser de mavoir accompagn jusquici, je vous propose 3 mthodes pour le calculer. La premire utilise le jour julien que nous venons de voir, puisquelle consiste en prendre le modulo 7 (cest dire le reste de la division). La seconde mthode ne fait pas appel au jour julien. Elle est base sur une formule qui a t dfinie par le rvrend Zeller; on la dsigne dailleurs sous le nom de congruence de Zeller. Elle se prsente comme suit : jour_semaine = (int(2.6 * mois - 0.2) + jour + an + int(an / 4) + int(sicle / 4) - 2 * sicle) % 7 avec : int = partie entire % = modulo (reste de la division) mois = mois de 1 12, avec mars = 1, , dcembre = 10, janvier = 11 et fvrier = 12 an = anne dans le sicle (0 99), avec an = an-1 si mois est janvier ou fvrier Cette formule ne marche quavec le calendrier grgorien; en revanche, le fait de mettre fvrier en dernier permet de ne pas avoir faire des tests compliqus pour les annes bissextiles. La troisime mthode ma t soumise par Mr Morris pour inclusion dans ma calculatrice. Je ne lai pas implmente, car je nai pas trouv de solution satisfaisante pour le faire de faon compatible avec le reste du programme. Je vous livre cette formule telle quelle, ne layant pas teste moi-mme : nb_jours = 365 * an + 31 * (mois - 1) + jour si mois est janvier ou fvrier alors an = an - 1 sinon nb_jours = nb_jours - int (0.4 * mois + 2.3) nb_jours = nb_jours + int(an/4) - int(0.75 + int(an/100) * 0.75) jour_semaine = nb_jours % 7 Les symboles utiliss ont la mme signification que pour la formule prcdente; an doit cependant inclure le sicle dans lanne. Je ne connais pas la provenance de cette formule. Vous trouverez dans Dates.cc la fonction JourSemaine() qui effectue le calcul correspondant la congruence de Zeller, et le programme JS (source JS.cc) qui en fait une dmonstration. Le jour de Pques =============== Le jour de Pques est calcul sur la base dun calendrier lunaire, cest un reste de lhritage de la tradition juive. Cest dailleurs un jour fixe dans ce calendrier, puisquil sagit du premier dimanche suivant la pleine lune vernale, donc aprs lՎquinoxe de printemps. Une lunaison comprenant 29 jours 1/2, Pques tombe donc toujours entre le 21 mars et le 25 avril. La formule permettant de le calculer tant un peu complique, je ne vous la dcrit pas ici; en revanche, vous la trouverez implmente dans la fonction JourPaques() de Dates.cc, ainsi quune dmonstration dans le programme JP (source JP.cc), ce dernier affichant aussi les jours de lAscension et de la Pentecte qui sont tablis partir de celui de Pques. La phase de la lune ================= Pour terminer sur les calculs autour des dates, je vous propose une fonction PhaseLune() (toujours dans Dates.cc) qui permet dobtenir les diffrentes phases de la lune depuis 1900. Le calcul est trs compliqu, je ne vous le prsente donc pas ici. Le programme de dmonstration PL (source PL.cc) affiche lensemble des phases de la lune pour une anne donne. Rfrences ========== Les informations ayant servi la rdaction de cet article proviennent de diffrentes sources; lessentiel a t inspir par un essai dIsaac Asimov, (NDLR: l'inventeur des lois de la robotique nous a quitts il y a peu de temps) dont jai oubli le titre. A une certaine poque, javais eu travailler sur des calculs de dates, et en cherchant des informations, javais rassembl pas mal de notes sur ce sujet, en partie puises dans cet essai, le reste provenant dune vieille dition du Quid (1975 !) qui dailleurs contenait pas mal derreurs. Ces informations ont t correles par des discussions avec diverses personnes sՎtant aussi intresses cette histoire, que personnellement, je trouve fascinante. Les algorithmes de calcul du jour julien et de la date calendaire, ainsi que la phase de la lune ont t puiss dans Numerical Recipes, un excellent bouquin sur le calcul numrique (ces algorithmes sont donns dans lintroduction plus pour samuser que pour montrer le niveau du livre), contenant environ 200 algorithmes permettant de faire du calcul sur les matrices (notamment rsoudre des systmes dՎquations linaires), chercher les zros dun polynme ou intgrer des quations diffrentielles, parmi plein dautres choses. Il en existe une dition pour les langages C et Pascal, et mme Fortran (en fait, il sagit de lՎdition originale). Le seul inconvnient : cest en Anglais ! Et le prix est denviron 350F. Il existe aussi un livre dexemples, montrant comment mettre en uvre chacune des routines prsentes. En revanche, je ne me souviens plus o jai puis la routine de calcul du jour de Pques. La congruence de Zeller est un classique que lon trouve peu prs partout. Conclusion ========== Voil, vous savez tout sur les calendriers et les calculs de dates. Il ny a plus quՈ faire un beau programme de tout a, ce que je ne manquerai pas de vous laisser faire ! Disons que cest un exercice de longue haleine. Lidal serait un programme permettant de tenir son agenda, et tenant compte des jours fris; le mieux tant sans doute sous forme dun NDA. Si cet article vous a intress, et si vous souhaitez en voir dautres du mme type, nhsitez pas me le faire savoir. Dites moi aussi les sujets que vous voulez voir traiter dans GS Infos, si jarrive trouver suffisamment dinformations sur ces sujets, jessaierai den faire des articles. Si vous avez trouv cet article sans aucun intrt, et que vous avez considr que ce nest que du gaspillage de la prcieuse place disque de GS Infos, faites-le moi aussi savoir. Cela mՎvitera de passer du temps pour rien (NDLR: Philippe, on ne tend pDATESv( ' .'DATES.Hkv,v,j(DATES.CCl vvj)DATES.LIBy vvj%JS.CCvvj"JSvvj%JP.CC}vvj"JP-v v j%JJ.CCv v j"JJ*v v j%PL.CCiv v j"PLT5v v j/** ** Dates.h - Definition des prototypes des fonctions de la librairie Dates. ** ** Philippe Manet 22 Mars 1992 **/ short JourSemaine ( short jour, short mois, short an ); void JourPaques ( short an, short *mois, short *jour ); long JourJulien ( short jour, short mois, short an ); void DateCalendaire ( long julien, short *jour, short *mois, short *an ); void PhaseLune ( short numPhase, short codePhase, long *julien, float *fraction ); mnopqrstuvwx/** ** Dates.cc - Une librarie de calculs divers sur les dates. ** Cette librairie illustre les differentes formules donnees dans ** l'article sur l'histoire du calendrier. ** ** Sources : les fonctions de calcul du jour julien et de son ** inverse (la date du calendrier), ainsi que le calcul ** des phases de la lune sont tirees de ** "Numerical Recipes". Je ne me souviens plus ou j'ai ** trouve la formule du calcul du jour de Paques. ** La congruence de Zeller est un classique. ** ** Philippe Manet 22 Mars 1992 **/ #pragma optimize -1 #pragma noroot #pragma lint -1 #include #include "Dates.h" /* * JourSemaine() - Calcul du jour de la semaine correspondant a une date * donnee (jour/mois/an y compris le siecle). * Le nombre retourne va de 0 pour dimanche a 6 pour samedi. * Utilise la congruence de Zeller pour effectuer ce calcul. * La formule est : * JourSemaine = ( (26 * mois - 2) / 10 + jour + an + an / 4 * + siecle / 4 - 2 * siecle ) % 7 * avec mois = mois - 2 et janvier = 11eme mois an precedent. * Cette formule est legerement differente de celle donnee * dans l'article, afin d'eviter les calculs flottants. * Ne fonctionne qu'avec le calendrier gregorien; si vous * souhaitez obtenir le jour de la semaine pour un jour du * calendrier julien, utilisez la fonction JourJulien() * et prenez le modulo 7 du nombre retourne. */ short JourSemaine ( short jour, short mois, short an ) { short siecle; if ( mois < 3 ) { mois += 12; an -= 1; } mois -= 2; siecle = an / 100; an %= 100; return ( ( ( 26 * mois - 2 ) / 10 + jour + an + an / 4 + siecle / 4 - 2 * siecle ) % 7 ); } /* JourSemaine () */ /* * JourPaques () - Calcul du jour de paques pour une annee donnee. * Fonctionne pour les calendriers julien et gregorien. */ void JourPaques ( short an, short *mois, short *jour ) { short siecle; short t, x, y; siecle = an / 100; t = siecle - 7; if ( siecle > 7 ) t = t - siecle / 4 + 1; if ( siecle > 15 ) t += 2; if ( an > 1582 || siecle == 3 ) t++; x = ( 19 * ( an % 19 ) + 24 ) % 30; y = ( 2 * ( an % 4 ) + 4 * ( an % 7 ) + 6 * x + t ) % 7; if ( 22 + x + y > 31 ) { *mois = 4; *jour = x + y - 9; } else { *mois = 3; *jour = 22 + x + y; } } /* JourPaques () */ /* * JourJulien () - Calcul du jour julien correspondant a une date calendaire. * Fonctionne pour les calendriers julien et gregorien. */ long JourJulien ( short jour, short mois, short an ) { long julien; short siecle; if ( an < 0 ) ++an; if ( mois > 2 ) mois++; else { an--; mois += 13; } julien = (long) ( floor ( 365.25 * an ) + floor ( 30.6001 * mois ) + jour + 1720995L ); if ( jour + 31L * ( mois + 12L * an ) >= 15 + 31L * ( 10 + 12L * 1582 ) ) { siecle = an / 100; /* correction pour calendrier gregorien */ julien = julien + 2 - siecle + siecle / 4; } return ( julien ); } /* JourJulien () */ /* * DateCalendaire() - Date du calendrier correspondant a un jour julien. * Fonctionne avec les calendriers julien et gregorien. */ void DateCalendaire ( long julien, short *jour, short *mois, short *an ) { long correction, j1, j2, j3, j4; if ( julien >= 2299161L ) { /* correction pour calendrier gregorien */ correction = ( (float) ( julien - 1867216L ) - 0.25 ) / 36524.25; julien = julien + 1 + correction - correction / 4; } j1 = julien + 1524; j2 = 6680 + ( (float) ( j1 - 2439870L ) - 122.1 ) / 365.25; j3 = 365 * j2 + j2 / 4; j4 = (j1 - j3) / 30.6001; *jour = j1 - j3 - (short) ( 30.6001 * j4 ); *mois = j4 - 1; if ( *mois > 12 ) *mois -= 12; *an = j2 - 4715; if ( *mois > 2 ) --(*an); if ( *an <= 0 ) --(*an); } /* DateCalendaire () */ /* * PhaseLune () - Calcule la enieme phase de la lune depuis janvier 1900, et * retourne le jour julien correspondant, ainsi qu'une fraction * de ce jour julien, indiquant l'heure GMT de la phase. * Le code indique quelle phase est demandee : 0 = nouvelle lune, * 1 = premier quartier, 2 = pleine lune, 3 = dernier quartier. * Note : si vous voulez partir d'une date autre que janvier * 1900, il vous suffit de remplacer la constante * 2415020 par le jour julien de la veille de la date * desiree. */ #define RAD ( 3.14159265 / 180.0 ) /* conversion en radians */ void PhaseLune ( short numPhase, short codePhase, long *julien, float *fraction ) { short i; float am, as, c, t, t2, extra; c = numPhase + codePhase / 4.0; t = c / 1236.85; t2 = t * t; as = 359.2242 + 29.105356 * c; am = 306.0253 + 385.816918 * c + 0.010730 * t2; *julien = 2415020L + 28L * numPhase + 7L * codePhase; extra = 0.75933 + 1.53058868 * c + ( 1.178e-4 - 1.55e-7 * t ) * t2; if ( codePhase == 0 || codePhase == 2 ) extra += ( 0.1734 - 3.93e-4 * t ) * sin ( RAD * as ) - 0.4068 * sin ( RAD * am ); else extra += ( 0.1721 - 4.0e-4 * t ) * sin ( RAD * as ) - 0.6280 * sin ( RAD * am ); i = extra >= 0.0 ? (short) floor ( extra ) : (short) ceil ( extra - 1.0 ); *julien += (long) i; *fraction = extra - i; } /* PhaseLune () */ #undef RAD z{|}~,>LIBRARY DATES.AH%14 ;}DDateCalendaire JourJulien JourPaques JourSemaine PhaseLune~GLOBALS2,B JourSemaine ;8 [0::: i  ::d"~DIV2d"~MOD2"~MUL2H"~MUL2:: "~DIV2 e eH"~DIV2 c"~DIV2 c8"~MOD2  +;ikE,A JourPaques;8  [d"~DIV2 80$$&9"~DIV2 H80DDFL 8.^p\I0_j~ u~"~MOD2"~MUL2i"~MOD2 "~MOD2"~MUL2H"~MOD2"~MUL2 c "~MUL2 ce"~MOD2 ie 0! e 8 5  ie  +;ikZ,A JourJulien ;8 [00:::) i @" ~CNVINTREAL"~MULE"floor" ~DOUBLEFN@:" ~CNVINTREAL"~MULE"floor" ~DOUBLEFN"~ADDE" ~CNVINTREAL"~ADDEB" ~CNVLONGREAL"~ADDE" ~CNVREALLONG  H"~MUL4Hhchc"~MUL4Hhchc"~GEQL=d"~DIV2 "~DIV2 H  3H hchc8hhhchch h  +;ikEq,E DateCalendaire;8 [" #"~GEQL}" 8hhh" ~CNVLONGREAL?"~SUBE@@"~DIVE" ~CNVREALLONG"~PDIV4)" iHhchc8hhh h" i "i " ~CNVINTREAL%: 8hhh" ~CNVLONGREAL@333330"~SUBE@"~DIVE"~ADDE" ~CNVREALLONG  "~PDIV4mH "~MUL4'hchchh 8hhh" ~CNVLONGREAL@:"~DIVE" ~CNVREALLONG"څh&$@:" ~CNVLONGREAL"~MULE" ~CNVREALINT5H 8hh8hhh*(8 *(0 "*(8 ,.,k 8hhh*(07:::9F .,: .,Ta .,:.-+;i,kI&,@ PhaseLune ;8" [&" ~CNVINTREAL(" ~CNVINTREAL@"~DIVE"~ADDE {iH" ~SAVEREAL {iH" ~LOADREAL @33330"~DIVE {iH" ~SAVEREAL {iH" ~LOADREAL&{iH;iH "{iH" ~SAVEREAL;@@{iH;iH ""~ADDE {i H" ~SAVEREAL;@=K`@Đ{iH;iH ""~ADDE,?̯U{iH;iH ""~ADDE {iH" ~SAVEREAL (oH"~MUL4$&H"~MUL4chchchchc,*hhh?cls&h?rT({iH;iH ""~ADDE;? d}(?nX>{iH;iH ""~SUBE{iH;iH ""~ADDE {iH" ~SAVEREAL (lw (q {iH" ~LOADREAL;?o? -Mp{iH;iH ""~SUBE,?58{i H;iH ""sin" ~DOUBLEFN"~MULE;?H?58{iH;iH ""sin" ~DOUBLEFN"~MULE"~SUBE"~ADDE {iH" ~SAVEREALN {iH" ~LOADREAL;?:~?Xh{iH;iH ""~SUBE,?58{i H;iH ""sin" ~DOUBLEFN"~MULE;?ĠS?58{iH;iH ""sin" ~DOUBLEFN"~MULE"~SUBE"~ADDE {iH" ~SAVEREAL {iH" ~LOADREAL"~GEQE {iH" ~LOADREAL?"~SUBE"ceil" ~DOUBLEFN" ~CNVREALINT {iH" ~LOADREAL"floor" ~DOUBLEFN" ~CNVREALINT,*!7H!HHhchc!hhh{iH" ~LOADREAL" ~CNVINTREAL"~SUBE0." ~SAVEREAL$0#/+;i.kB@,? ~GLOBALS/** ** JS.cc - Programme de demonstration du calcul du jour de la semaine. ** ** Philippe Manet 22 Mars 1992 **/ #pragma optimize -1 #pragma lint -1 #include #include #include "Dates.h" void main ( void ) { char buf[6]; short jour, mois, an; char *jours[] = { "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" }; printf ( "Jour ? " ); gets ( buf ); jour = atoi ( buf ); printf ( "Mois ? " ); gets ( buf ); mois = atoi ( buf ); printf ( "An ? " ); gets ( buf ); an = atoi ( buf ); printf ( "\nLe %d/%d/%d est un %s\n", jour, mois, an, jours[ JourSemaine ( jour, mois, an ) ] ); } /* main () */ U,C ~ExpressLoadU O,E ;0E  """";8, [hhhh%hh+hh4h!h#:h%h'Ch)h+J"g{iH".h{iH" R"g{iH".h{iH" Z"g{iH".h{iH"H "{ ZH b"g+;i,kdimanchelundimardimercredijeudivendredisamediJour ? Mois ? An ? Le %d/%d/%d est un %s ;8 [0::: i ::d"d"">H">:: "e eH"c"c8"  +;ik H H" hhk;8 [d"D dd +;ikx3*!zhZ(HH " "hkHHH"zhZګk ; [   )D )   )-+  H HHHH H H"  hh8+;ik; [   )D )   )+  #  )0 )_X )_0X i  k )0]:)_AP[K6)?HHHHHHHH "hhhze      +;ikH sh\lKzZڭ HH; ["Wi # " Ȁ " Ȁ  qZ8czHHHH "$ Out of memoryw "\lh h  momq  Ȁ  o m )s  "   i  ")0"!)    o m +hhkKHH ;[$hHHhk֯   H H"+hh`  ꩴ kK ;[)%H"  +hhk    ).  )l Lh  ) <j S|j)-,0"+ + # 8``h)* h h`)0:)Hhh mhch % ns"p1cX x ou]d3i3f; e( E- g G \(((((‚Ą T K B ) )  " "  k H H"k          I- 8   {i H" " "  " 0e00 0eE0) PT 6100 :. 蘼0γ)8I0 H"00 0"γ)Z)H"z 0.# e0 8. 0` `     {i H" "᭱I& )m$ : ͽν 8 γ %"  QT  0RNnnnjJJJJ 0:i    ˭ X 00vγ  H" I !8  I - H H HS '" &"᭿ 0/  ' S S 8γγγR  8I0 H" H"H"00 H"γ H"νȹ) SZ)H"zȀ묷    ` QT  0R   !NnnnjJJJJJ 0R00o ȷ )  ͽ8 Z )H"z `0 "γ`   h{[`;8 [K H H"  ) ) ) m 4" "C H H 2    {i ȷ  ȷ  " L  ) m ȭm  ȷ   ȭ    i ȷ i )8  ȷ :  )    I   )   +;i kK ; [   8+hhzhhZګk; [  +hzzH`" :k ")y}H. "."H"h`IH7IHZ; [*8e쪥I+zzzkh@k K;8 [0dd 4 "0dd  !  #͛   ɍ !   ɾɮ  !ɼɬd !͛Hd ! h !Ud !1  :Iȹ:Hd ! h: !H d.͛ Hd ! h !h  4`L0H ""h0) a `0ZH"H "hz0`08 00"͛  (  (`͛!șΛ`0;i +kKZ "0 0)zkK00kKuw&ykK:<"p <8:Ik@k ;8[:IȅIFejf0I{ih[k{ih[@kK  ;i: HH "];[c:zZګH "hHi ".  @B<>6802kInsufficient bank zero memory6 "  { 9kry-lz_+CENW`iqyh~'(2:Qci"uy z! $0CFMTW_blt).;AGJQU_fknz} !.4[^at}% ",6>FMUZ_gp=BGJNQTWZow} 4hpv| cgm $'0369AH\cjoy 5 #include #include "Dates.h" void main ( void ) { char buf[6]; short jour, mois, an; printf ( "An ? " ); gets ( buf ); an = atoi ( buf ); JourPaques ( an, &mois, &jour ); printf ( "Le jour de paques est le %d %s %d\n", jour, mois == 3 ? "mars" : "avril", an ); DateCalendaire ( JourJulien ( jour, mois, an ) + 39, &jour, &mois, &an ); printf ( "Le jour de l'ascension est le %d %s %d\n", jour, mois == 5 ? "mai" : "juin", an ); DateCalendaire ( JourJulien ( jour, mois, an ) + 10, &jour, &mois, &an ); printf ( "Le jour de la pentecote est le %d %s %d\n", jour, mois == 5 ? "mai" : "juin", an ); } /* main () */ U,C ~ExpressLoadU }(e)8,E -}(0E }( "{!"f ""] ;8 [^"{iH"h{iH"{i H{i H" fl q"{iH{i H{i H' "iHhchc"  "{iH{i H{i H  "iHhchc"  "+;ikAn ? avrilmarsLe jour de paques est le %d %s %d juinmaiLe jour de l'ascension est le %d %s %d juinmaiLe jour de la pentecote est le %d %s %d ;8 [" #"}" 8hhh", ?"R!@@""h" " iHhchc8hhh h" i "i "%: 8hhh", @333330"R!@"""h  " mH "hchchh 8hhh", @:""hڅh&$@:", "d "6H 8hh8hhh*(8ʇ*(0 "*(8 .,k 8hhh*(0::: .,:., .,:.-+;i,k;8 [00::: i @""d "&"@:""d "&""""B", ""h  H"Hhchc"Hhchc"Wd"; ";H H hchc8hhhchch h +;ik;8  [d";80";H808.pI0ʊ"3"bi"3 "3"bH"3"bc "bce"3 ie 0" e 8   ie  +;ik H H"[hhkzKhhhhh Zګ "ڊ)? H " " "k;8 [d"#dd +;ik12#3 *?!zhZ(HH " "hk!HHH"zhZګk#; [   )#)   )-+  H HHHH H H"   hh8+;ik; [   )#)   )+  #  )0 )_X )_0X i  k )0]:)_AP[K6)?HHHHHHHH "hhhze      +;ikKY [ zHHHHHZګY ;i H "kH h\KzZڭHH; [M O "Q Wi # " Ȁ " Ȁ  Z8czHHH H "$ Out of memory "\h h  m   Ȁ   )s  "   i  ")0"!)    +hhkKO HM H ;[$ hHHhk֯HH"+hh`A'꩓#!kK ;[L)%H"-  +hhLk D6@B: ><F4 U 6). B @)l: Lh  ) < S | )-<,0>"+ F+F #4 8`` )*  z `)0:)H m c  %enxspcX}xuou<difeE gGL\5h!@5h!????@(((((‚ĄTKB)) ""  kHH"k#  @  I-FB 8@{i H "N "᭡0NLeNNO0N0D 0NNeEN0O) NPPOT6410NN0 :NN.NN 蘼NN0F6N)86I6>0 aFH"->060 0"-6N)NZ)H"-z z0O.N#N OeN0 8. 0`N ONN`aaB @B@{i H "4ID4)m:c@@@a8@c6 a%"- F NQNOTJ: J H80RNKnJnInHjJJJJ 0:i NK J I H˭4 X 9080v6 a H"- zI: !8  I -F8: H H HNS: '" &"B@@ 0/ ' NSN S@ 86@6F6866R N 86I6>0 aFH"-8 H"-9H"->060 >H"-6@ >H"-@ȹN) SZN)H"-zȀ: zL :  z`F NQNOTJ: J H0RK J I H!NKnJnInHjJJJJJ 0NR40N08o ȷ )  B@@H86H6 aHZ )H"-zH z<`<60 "-6`   h{[`;8 [K H H"  ) ) ) m 4""C H H 2    {i} }ȷ  ȷ  {" yL  ) }m ȭm  ȷ   ȭ    i ȷ i )8  ȷ :  )    I   )   +;i kK; [   8+hhzhhZګk; [  +hzzH`;iHi H "  ;i kzHHHHHZګH;HiH "hk;iHHH " "h h hk;iHHH " "h h hzk k ")H "" H"h`IH7IHZ; [*8e쪥I+zzzkh@k;iHi H "  ;i kK z;8 Zګ;ikH; [E  ȥ  +;ik K;8 [0dd  "0dd  E  #Ϳ   ɍ E   ɾɮ  Eɼɬd EͿHd E h EUd E1  :Iȹ:Hd E h: EH .Ϳ Hd E h Eh  `L0H ""h0) a `0ZHC"CH "hz0`08 00"Ϳ  (  (`Ϳ!șο`0;i +kKZ "0 0)zkK00kKS"U"&W"kK^`";p `8^Ik@k ;8[:IȅIFejf0I{ih[k{ih[@k;8  ["!' OJ  e e f f ff`   d Fejf)  @8 +;ik;iHi H "  ;i k;8  [ ""["!" && & 8   *8e 8 +;ikd8d d 8k;iHi H "  ;i kK  ;i H H "];[c:zZګH "hHi " kInsufficient bank zero memory" "H"#\"KError occurred at line " "H"$ in procedure " ""%"L%  " " Line Name"# " ---- ----># " <H"$ s# ""%"L%_ #;[ 8)e "+hkSubrange exceededFile is not openRead while at end of file I/O error Out of memoryEOLN while at end of file Set overflow&Jump to undefined case statement labelInteger math errorReal math error UnderflowOverflowDivide by zeroInexactStack overflow Stack error; [' "u%'HHH"% +hhhhk; [  )8 I"' H HI i " +;i kKHH; [$HH"%+hhkHE'( &"L'; [8"&"%+hhkHHH8H; [  "m' % Q8  0 "( "( "m'e i @< "( "(   "m'Z "("&+;i kHH8H; [S"ȷU"ȷ HH"+hhhhk(H; ["l(W"ȿY"W"Y"+hhk ;[ E' 8(I E'ȗ(  @+hhkHi H ;[ "+hhkHHHHH; ["l(W"Y"  ȷݠW"ȷY" ȷ+;i k:JJJJk  '4C])S +>QUg?RV{ *JU^LS^ipz #.c/39>ƃ$-6?HPX_imqρG]{o0BgHq &*.A/Bn!m )Cjtt{MU!^$t|@HP-159=c}ς03C_w{ +.2TYUX[^adkntwz @NScm|  #'+.(%!03AKSafr(  &)04>EJMY\fiy~ :=@S\qy|$ %,49>FO`osy~!&)-0369NV\bguGOU[elt{(/27HKTWZ]`m).8IMZbel"'Y`glz  "%+#w#s####$'$'w%E'/** ** JJ.cc - Programme de demonstration des fonctions JourJulien() et ** DateCalendaire(). ** ** Philippe Manet 22 Mars 1992 **/ #pragma optimize -1 #pragma lint -1 #include #include #include "Dates.h" void main ( void ) { char buf[6]; short jour, mois, an; long julien; printf ( "Jour ? " ); gets ( buf ); jour = atoi ( buf ); printf ( "Mois ? " ); gets ( buf ); mois = atoi ( buf ); printf ( "An ? " ); gets ( buf ); an = atoi ( buf ); printf ( "Jour julien = %ld\n", julien = JourJulien ( jour, mois, an ) ); DateCalendaire ( julien, &jour, &mois, &an ); printf ( "Date reconvertie = %d/%d/%d\n", jour, mois, an ); } /* main () */ U,C ~ExpressLoadU %&,E 5*%0E % ""d""[;8 ["{iH"~h{iH" "{iH"~h{iH" "{iH"~h{iH"H "H "{iH{i H{i HH"; "+;ikJour ? Mois ? An ? Jour julien = %ld Date reconvertie = %d/%d/%d ;8 [" #"}" 8hhh"*?"@@""f"" iHhchc8hhh h" i "i "%: 8hhh"*@333330"@"""f  "mH "1hchchh 8hhh"*@:""fڅh&$@:"*""4H 8hh8hhh*(8ʇ*(0 "*(8 .,k 8hhh*(0::: .,:., .,:.-+;i,k;8 [00::: i @"""$"@:"""$""""B"*""f  H"1Hhchc"1Hhchc"Wd"9 "9H H hchc8hhhchch h +;ik H H"YhhkzKh h h h h Zګ "ڊ)? H "  " " k;8 [d"!dd +;ik/ 0 !3*=!zhZ(HH " "hkHHH"zhZګk!; [   )! )   )-+  H HHHH H H"  hh8+;ik; [   )! )   )+  #  )0 )_X )_0X i  k )0]:)_AP[K6)?HHHHHHHH "hhhze      +;ikKWYzHHHHHZګW;i H "kH h\KzZڭHH; [K M "O Wi # " Ȁ " Ȁ  Z8czHHH H "$ Out of memory "\h h  m   Ȁ   )s  "   i  ")0"!)    +hhkKM HK H ;[$ hHHhk֯HH"+hh`?%꩑!kK ;[J )%H"+   +hhJ k B 4 > @ 8 < : D 2 S 4 ). @ > )l8 Lh  ) < S | )-: ,0< "+ D +D #2  8`` )*  x `)0:)H m c  %cnvspcX{xsou:difeE gGJ \5h!@5h!????@(((((‚ĄTKB)) ""  kHH"k!   >   I-D @ 8 > {i H " L  "᭟ 0L J eL L M 0L 0B  0L L eEL 0M ) L PN M T 62 10L L 0 :L L .L L 蘼L L 0D 4 L )84 I4 < 0 _D H"+ < 04 0 0"+ 4 L )L Z)H"+ z x0M .L #L M eL 0 8. 0`L M L L `__@ > @ > {i H "2 IB 2 )m :a> > > _8> a4 _%"+  D L QL M TH 8  H F 6 0RNI nH nG nF jJJJJ 0:i L I H G F ˭2 X 7 06 0v4 _ H"+  xI8  !8  I -D 6 8  H H HL S8 '" &"@ > >  0/ ' L SL S> 84 > 4 D 4 6 4 4 R L  84 I4 < 0 _D H"+ 6 H"+ 7 H"+ < 04 0 < H"+ 4 > < H"+ > ȹL ) SZL )H"+ zȀ8 xJ 8   x`D L QL M TH 8  H F 0RI H G F !NI nH nG nF jJJJJJ 0L R2 0L 06 o ȷ )  @ > > F 84 F 4 _F Z )H"+ zF  x: `: 4 0 "+ 4 `   h{[`;8 [K H H"  ) ) ) m 4""C H H 2    }{i{ {ȷ } ȷ  y" wL  ) {m ȭ}m  ȷ   ȭ    i ȷ i )8  ȷ :  )    I   )   +;i kK; [   8+hhzhhZګk; [  +hzzH`;iHi H "  ;i kzHHHHHZګH;HiH "hk;iHHH " "h h hk;iHHH " "h h hzk k ") H "" H"h`IH7IHZ; [*8e쪥I+zzzkh@k;iHi H "  ;i kK z;8 Zګ;ikH; [E  ȥ  +;ik K;8 [0dd  "0dd  C  #ͽ   ɍ C   ɾɮ  Cɼɬd CͽHd C h CUd C1  :Iȹ:Hd C h: CH .ͽ Hd C h Ch  `L0H ""h0) a `0ZHA"AH "hz0`08 00"ͽ  (  (`ͽ!șν`0;i +kKZ "0 0)zkK00kK&k;8  ["' JOJ  e e f f ff` J  d Fejf)  @8 +;ik;iHi H "  ;i k;8  [ "["" && & 8   *8e 8 +;ikd8d d 8k;iHi H "  ;i kK  ;i H H "];[c:zZګH "hHi " kInsufficient bank zero memory "JH"!\KError occurred at line  "H"G" in procedure > ""w"""  " " Line Name " ---- ---- " <H"G" ""w""" LQakz  !%),&%.1:?BHWgms%  #*14QZowz# #*27W     o {  !/E T d j pL M N   M L NL M L   N > [     ! #include #include "Dates.h" void main ( void ) { char buf[6]; short jour, mois, an, np, code, i, heure, minutes, secondes; long j, julien; float frac, num_secs; char *phases[] = { "nouvelle lune", "premier quartier", "pleine lune", "dernier quartier" }; printf ( "An ? " ); gets ( buf ); an = atoi ( buf ); np = 12.37 * ( an - 1900 + 0.5 / 12.0 ); /* estimation nb pleines lunes */ code = 0; j = JourJulien ( 31, 1, an ); PhaseLune ( np, code, &julien, &frac ); np += (float) ( j - julien ) / 28.0; printf ( "\n%10s %15s %18s\n\n", "date", "heure", "phase" ); for ( i = 1; i <= 50; i++ ) { PhaseLune ( np, code, &julien, &frac ); frac = 24.0 * frac + 1.0; /* 1 heure de plus que GMT */ if ( frac < 0.0 ) { /* minuit precedent */ --julien; frac += 24.0; } if ( frac > 12.0 ) { /* minuit suivant */ ++julien; frac -= 12.0; } else frac += 12.0; /* car heure 0 = midi */ heure = (short) frac; num_secs = 3600.0 * ( frac - heure ); minutes = (short) ( num_secs / 60.0 ); secondes = (short) ( num_secs - 60 * minutes + 0.5 ); DateCalendaire ( julien, &jour, &mois, &an ); printf ( "%5d-%02d-%4d %7d:%02d:%02d %s\n", jour, mois, an, heure, minutes, secondes, phases[code] ); if ( code == 3 ) { code = 0; ++np; } else ++code; } /* boucle sur les phases */ } /* main () */ U,C ~ExpressLoadU /0,E 4/0E / "(""";8< [h-h/h1h3h5h7h9h;"{iH" h{iH" @Q8l"?""`'""{i%H{i!H""#!8hhh"@"!"""0 2D{i%H{i!H"@{i%H;iH "?"{i%H"({i%H"&"!5!#!{i%H"&@"{i%H"({i%H"&@"!5!#{i%H"&@"({i%H"(-{i%H"&@"{i%H"({i%H"&" @{i%H"&""("`'{i)H"({i)H"&@"!"{i)H"&<"^&""(?""{iH{i H{i H#!H"" /-ZH " +;i<knouvelle lunepremier quartierpleine lunedernier quartierAn ? phaseheuredate %10s %15s %18s %5d-%02d-%4d %7d:%02d:%02d %s ;8 [" #"!}" 8hhh"?"(@@"!" "'" iHhchc8hhh h" i "i "%: 8hhh"@333330"(@"!""   "'mH "&hchchh 8hhh"@:"!" څh&$@:""`'"H 8hh8hhh*(8ʇ*(0 "*(8 .,k 8hhh*(0::: .,:., .,:.-+;i,k;8 [00::: i @""`'" "H!@:""`'" "H!"""B"""  H"&Hhchc"&Hhchc"!Wd" " H H hchc8hhhchch h +;ik;8" [&"("@"!"{iH"({iH"& @33330"!{iH"({iH"&{iH;iH "{iH"(@@{iH;iH ""{i H"(@=K`@Đ{iH;iH ""?̯U{iH;iH ""{iH"((H"&$&H"&hchchchc,*hhh?cls&h?rT({iH;iH ""? d}(?nX>{iH;iH ""({iH;iH ""{iH"((({iH"&?o? -Mp{iH;iH ""(?58{i H;iH """H!"`'?H?58{iH;iH """H!"`'"("{iH"({iH"&?:~?Xh{iH;iH ""(?58{i H;iH """H!"`'?ĠS?58{iH;iH """H!"`'"("{iH"({iH"&"}!.{iH"&?"("1 "H!"{iH"&" "H!",*!H!HHhchc!hhh{iH"&""(0."($0#/+;i.k H H"hhkzKhhhhhZ "ڊ)? @H " " "kzKhhhhhZګ "ڊ)? H " " "k;8 [d"dd +;ik/ɻ3*!zhZ(HH " "hkHHH"zhZګkzKhhhhhZ "k+; [   ))   )-+  H HHHH H H"' hh8+;ik; [   ))   )+  #  )0 )_X )_0X i  k )0]:)_AP[K6)?HHHHHHHH "hhhze   '  +;ikKzHHHHHZګ;i H "kH h\ KzZڭ7 H5 H; ["Wi # " Ȁ " Ȁ  Z8czHHH)H "$ Out of memory "\ h h  m  Ȁ    )s  "   i  ")0"!)      +hhkKHH ;[$hHHhk֯-+-H+H"+hh`I/k+')gcekK ;[)%H"  +hhk    5).  5)l Lh  ) <݅ S7|)-,0"+ + # 8``)*  `)0:)H mc %nspcXx o)udifeEgsGx\5h!@5h!????@(((((‚ĄcgTeKB)) "%"%  keHcH"5k+g  qq9 9q I- 89;9{i H= "9= "90e00 %q0eE0) PT;6100 :. 蘼0)8I0 H"00 0")Z)H"z 0.# e0 _8. _0` ` ;9{i H= "IA)m?:8 %"  QT  0RNnnnjJJJJ 0:i    ˭ X 00v  H" I !8  I - H H HS '" &"7 0/ 7' S S 8R  8I0 H" H"H"00 H" H"ȹ) SZ)H"zȀ    ` QT  0R   !NnnnjJJJJJ 0R00o ȷ )  8 Z )H"z `0 "`   h{[`;8 [K H H"#  ) ) ) m 4"%"%C H H e2    {i ȷ  ȷ  " L  ) m ȭm  ȷ   ȭ    i ȷ i )8  ȷ :  )    I   )   +;i kKg; [  '8+hhzhhZګk; [ '+hzzH`;iHi H "  ;i kzHHHHHZګH;HiH "hk;iHHH " "h h hk;iHHH " "h h hzkA G O g k ") H[  "[ "I&)H"h`IH7IHZ; [*8e쪥I+zzzkh@k;iHi H "  ;i kKr!q! r!r!z;8 Zګ;iu!k;iH8 H ";i)BkH; [E  ȥ  +;ik;iH8 H ";i)@k K;8 [0%dd% %a "%%%0dd%$ # C$ # $#ͽ$$ $ $ ɍ$ C$$ $ $ $ɾɮ $ C$ɼɬd C$ͽ$$Hd C$ #h C$Ud C$1 $ $:$Iȹ$$:$Hd C$ #h: C$%%H% $.ͽ$$$% $Hd C$ #h C$h$ $ $a `L$0H ""h0)% a `0ZH%%A$"A$H "hz0`08 00"ͽ$$ $ $(  $(`ͽ$!$$ș$$$ν$`0;i +kKZ& ""&&0&$ &&&0)zkK0&&$&0k;8 ;i  "kK))&)k ;8[:IȅIFejf0I{ih[k{ih[@k;8  ["I(' &OJ  e e f f ff` &  d Fejf)  @8 +;ik;iHi H "  ;i k;8  [ ")["I(" && & 8   *8e 8 +;ik{;8[:{iHHH "{i +kd8d d 8k;iHi H "  ;i kK )7 5 ;ig H)H "];[I c:zZګH "hI HiI "[ G ; 9 m o i k c e ] _ kInsufficient bank zero memoryD) "$H"*\)Km Error occurred at line ) "m H", in procedure ) "n "7,"|,i k  " " Line NameR* " ---- ----n* "i k K ;?CGKXh#'+8EXgz~#")09BlqVd zF^ #'cg G#Sv=CKj?-*.ǁ&Q OYs?CI}!!$0HOY`ehnt|"%(.18=@KNQTgjnqtw| $0=KQTWZ_bgjw& &*069?BINUX[^gjmp~  WZad*LOTW&-05FIRUX[^k',6GKX`cj~ %W^ejx MPV!$'*-0369 0 ? (x) : -(x) ) #define min(a,b) ( (a) > (b) ? (b) : (a) ) Pourquoi tant de parenthses ? Ce quil faut bien voir, cest quune macro procde par substitution de ses arguments. Par consquent, comme toute expression peut tre passe en paramtre, il est prfrable de lencadrer par des parenthses, pour viter toute erreur dՎvaluation. En revanche, lutilisation dune macro nest en gnral pas compltement transparente, et prsente, comme cest le cas ci-dessus, des possibilits deffets de bord. Par exemple, les macros prcdentes interdisent dutiliser les oprateurs dincrmentation et de dcrementation, car les paramtres sont valus 2 fois. Ainsi, si on effectue un abs(x++), on obtiendra la valeur absolue de x+1, ce qui nest certainement pas ce qui est dsir; au cas o vous ne voyez pas pourquoi, faites la substitution la main. Malgr les restrictions prcdentes, le concept de macro est trs puissant. Comme tous les concepts sophistiqus, il faut lutiliser bon escient. Le fait quune macro procde par substitution de ses arguments, on peut notamment passer en paramtre des mots clefs du langage. Par exemple, la macro : #define new(type) (type *) malloc ( sizeof(type) ); ralise un quivalent de linstruction new() de Pascal. Si on lappelle par new(long), un entier long sera allou, et un pointeur sur la mmoire quil occupe sera retourn. Rcursivit ========== Un peu plus haut, jai voqu le fait quune fonction en C pouvait sappeler elle-mme; on dsigne ce mcanisme sous le nom de rcursivit. Cest un concept qui fait un peu peur lorsquon est dbutant. Je vais tenter dans la suite de cet article de vous expliquer en quoi elle consiste, et dans quels contextes elle peut tre utilise. La rcursivit est un concept trs important dans la dfinition et la mise en uvre des algorithmes. Cela est trs utile pour la rsolution de certains problmes, pour lesquels une solution itrative (donc base sur des instructions du type for ou while) est beaucoup plus difficile raliser. Il sagit notamment des problmes dans lesquels la solution complte est construite partir de solutions partielles des problmes plus simples, ainsi que de la thorie des jeux lorsque le programme analyse la situation sur plusieurs niveaux de profondeur, ou plus gnralement des programmes bass sur des structures arborescentes, comme par exemple les compilateurs. Cependant, comme tout concept puissant, la rcursivit doit tre utilise avec prcaution, car elle peut produire des programmes difficiles mettre au point et moins performants quune implmentation itrative (lappel une fonction cote souvent plus cher quune simple boucle, bien que pas trop encore sur le GS); il existe dailleurs des techniques permettant de supprimer la rcursivit, utilisant principalement le type pile dcrit dans dans le prcdent GS Infos. Lorsquune fonction sappelle elle-mme (on dit quelle sauto-rfrence), la rcursivit mise en uvre est dite directe. Il existe aussi des cas ou une fonction X fait rfrence une fonction Y qui son tour rfrence la fonction X : on parle alors de rcursivit indirecte. Notez que le nombre dindirections, cest dire de fonctions intermdiaires, peut tre quelconque. Une des difficults des techniques rcursives est de dfinir la condition darrt de la rcursivit, cest dire quune fonction rcursive devra toujours dterminer un cas lmentaire pour lequel elle a une rponse immdiate, sans devoir se rappeler elle-mme pour traiter ce cas; ceci permet alors de retourner de lensemble des appels intermdiaires provoqus par la rcursivit. Une rcursivit infinie (donc sans condition darrt) se soldera toujours par un dbordement de pile et un plantage assur; cest pourquoi il sagit vraiment dun concept difficile matriser quil faut de plus utiliser quand cest ncessaire, pour viter de consommer inutilement la ressource limite quest la pile de lordinateur. La structure de donnes pile dcrite dans le prcdent numro de GS Infos accompagne souvent les algorithmes dont on a supprim la rcursivit de manire imiter assez fidlement le comportement de lordinateur lors dun appel rcursif : un nouvel appel dune fonction rcursive provoque en effet un nouveau passage de paramtres et la cration dun nouvel espace pour les variables locales qui sont en gnral alloues sur la pile. La notion de rcursivit implique donc de pouvoir grer des variables locales indpendantes dun appel lautre de la fonction. Tous les langages ne sont donc pas rcursifs, notamment les anciens comme Fortran ou Cobol; heureusement C et Pascal le sont, ainsi que lassembleur si comme pour le reste on fait tout soi-mme. Prenons un exemple concret; la fonction mathmatique factorielle se dfinit de la faon suivante: n! = 1 si n = 0 n! = n * (n - 1)! si n > 0 On a bien ici une fonction rcursive puisque n! est dfini en fonction de (n-1)! Par exemple, en appliquant cette formule, 3! se calcule ainsi: 3! = 3*(2!) = 3*(2*(1!)) = 3*(2*(1*(0!))) = 3*(2*(1*(1))) = 6 On voit bien que cette dfinition nest pas circulaire, nentranant donc pas une rcursivit infinie : lorsque la fonction sauto-rfrence, la valeur de son argument diminue de 1 chaque fois; on a de plus une condition darrt sans auto-rfrence (0! = 1) permettant de stopper la srie dappels. Cette fonction peut se programmer directement telle quelle, par exemple : short factorielle ( short n ) { if ( n == 0 ) return ( 1 ); else return ( n * factorielle ( n - 1 ) ); } La fonction factorielle ci-dessus emploie ce que lon appelle une rcursivit finale (en anglais tail recursion). Cest dire que la dernire instruction de la fonction contient la seule auto-rfrence la fonction. Ce type de rcursivit peut toujours tre supprim et doit lՐtre dans la plupart des cas, car elle possde une quivalence itrative directe. Pour le cas de la factorielle, la fonction itrative est: short factorielle ( short n ) { short i, fact; fact = 1; if ( n == 0 ) return ( 1 ); else for ( i = 2; i <= n; i++ ) fact = fact * i; return (fact ); } Les algorithmes rcursifs sont souvent utiliss lorsque la solution dun problme est tablie en dcomposant le problme en des problmes plus simples par raffinements successifs, jusquՈ obtenir un cas suffisamment simple pour avoir une solution immdiate. La rcursivit finale correspond ainsi la rsolution du cas n partir du cas n-1. Plus gnralement, une fonction rcursive est amene recombiner les solutions de plusieurs sous-problmes (effectuant ainsi plusieurs appels rcursifs) avant de gnrer la solution finale. Cette technique est dsigne sous lexpression diviser pour rgner (en anglais divide and conquer) ou parfois sous la forme moins militaire mais plus adapte linformatique de diviser pour rsoudre. Prenons pour exemple le problme classique des tours de Hano : il sagit dun jeu consistant en 3 aiguilles et un ensemble de disques de tailles dcroissantes (en partant du haut) que lon a empil sur la premire aiguille; le but du jeu est de dplacer ces disques sur la troisime aiguille avec la double contrainte de ne dplacer quun seul disque la fois et de ne placer un disque que sur un disque de plus grande taille; un disque peut cependant tre dplac de nimporte quelle aiguille vers nimporte quelle autre. Si lon na quun seul disque, la solution est immdiate : on dplace ce disque de laiguille A vers laiguille C. Si lon a 2 disques, cest peine plus compliqu : on dplace le premier disque de A vers B, puis le deuxime de A vers C, et enfin le premier disque nouveau de B vers C. A partir de 3 disques, cela commence se compliquer srieusement. Pour trouver une solution gnrale au problme, il faut essayer de trouver un motif dans les solutions 1 et 2 disques. On saperoit alors du principe suivant : pour pouvoir dplacer le plus grand disque de A vers C, il faut dabord dplacer les disques plus petits qui sont au dessus sur laiguille B. Une fois que cela a t effectu, il faut dplacer la pile qui est maintenant sur B vers C. En rexprimant ce mcanisme de faon rcursive, cela donne: si nombre de disques > 0 alors dplacer le nombre - 1 de disques plus petits de A vers B dplacer le plus grand disque de A vers C dplacer le nombre - 1 de disques plus petits de B vers C Par exemple, pour 3 disques, lalgorithme permet de dplacer les 2 petits disques de A vers B, puis le grand disque de A vers >GS et jet d'encre: ***************** Notre bonne vieille ImageWriter II fait toujours du bon travail, surtout si on la pilote avec Pointless, mais elle ne possde tout de mme que neuf aiguilles ce qui limite la qualit de l'impression. Il faut donc se tourner vers des priphriques d'impression plus sophistiqus lorsque l'on souhaite tablir des courriers de qualit. Apple ne diffuse plus l'ImageWriter LQ qui donne d'excellents rsultats mais que je ne vous conseille pas trop d'acheter en occasion car el@A/** ** Hanoi1 - programme de demonstration de la recursivite pour l'initiation ** au C 5 de GS Infos 21 : le celebre probleme des tours de hanoi. ** ** Version recursive. ** ** Philippe Manet 12 Avril 1992 ** **/ #include #pragma optimize -1 void hanoi ( short n, char a, char b, char c ) { /* * Deplacement de N disques de A a C avec B comme intermediaire. */ if ( n > 0 ) { hanoi ( n - 1, a, c, b ); printf ( "Deplacement d'un disque de \"%c\" vers \"%c\"\n", a, c ); hanoi ( n - 1, b, a, c ); } } /* hanoi () */ void main ( void ) { char buf[4]; short n; /* * Scanf est bugge : on lit donc une chaine de caracteres que l'on decode * ensuite. */ printf ( "Nombre de disques ? "); gets ( buf ); n = atoi ( buf ); hanoi ( n, 'A', 'B', 'C' ); } /* main () */ CDEFGHIJKLMNOPU,C ~ExpressLoadU ,E 0E  """";8 [0:J )H)H )H:H")H )H"n)H )H )H:H" +;i kDeplacement d'un disque de "%c" vers "%c" ;8  ["n{iH"5h{iH" C)HB)HA)H "+;i kNombre de disques ? H H"hhk;8 [d"K dd +;ik3*!zhZ(HH " "hkHHH"zhZګk ; [   )K)   )-+  H HHHH H H" hh8+;ik; [   )K)   )+  #  )0 )_X )_0X i  k )0]:)_AP[K6)?HHHHHHHH "hhhze     +;ikH zh\sKzZڭHH; ["Wi # " Ȁ " Ȁ  xZ8czHHHH "$ Out of memory~ "\sh h  tvmx  Ȁ  v t )s  "   i  ")0"!)    v t +hhkKHH ;[$hHHhk֯   H H"+hh`  ꩻ kK ;[)%H"  +hhk    !).  !)l Lh  ) <q S#|q)-,0"+ + # 8``o)* o o`)0:)Hoo moco % ns)p8c$ X x oud d: i: fB e/ E4 g G \(((((‚Ą T K B ) )  "c  "c  k H H"k      % %  I- 8%'%{i H) "%) "%0e00  0eE0) PT'6100 :. 蘼0κ)8I0 H"00 0"κ)Z)H"z 0.# e0 8. 0` `   '%{i H) "᭸I-)m+:  8 κ %" " "  QT  0RNnnnjJJJJ 0:i "    ˭ X " 00vκ  H" I !8  I - H H HS '" &"# 0/ #' S S 8κκκR  8I0 H" H"H"00 H"κ H"ȹ) SZ)H"zȀ묾    ` QT  0R   !NnnnjJJJJJ 0R00o ȷ )  8 Z )H"z `0 "κ`   h{[`;8 [K H H"  ) ) ) m 4"c  "cC H H 2    {i ȷ  ȷ  " L  ) m ȭm  ȷ   ȭ    i ȷ i )8  ȷ :  )    I   )   +;i kK ; [  8+hhzhhZګk; [ +hzzH`!) Ak ")H5 "5"H"h` K;8 [0]ddW Y; "_]a0dd[V j   #VV V  ɍV V V  ɾɮ V ɼɬd VVHd  jh Ud 1 V W:VIȹVV:VHd  jh: [[H[ .VVV[ Hd  jh hV V ;`L0H ""h0)a a `0ZH]a"H "hz0`08 00"VV V (  (`V!VVșVVVV`0;i +kKZ "0W γα0)zkK0αW0kK&kK ;iA HH "];[#c:zZګH "h#Hi# "5 !GICE=?79kInsufficient bank zero memoryc "p  @Vp '@ry4s f2JLU^gpxo./9AXjp!%) %|؁ƁnPSo Xfk~ "UX[^agjmpsx{"7=@WZ_esw{P08;>FIX[dilr$ ',14;>EJMT[^fis{(  &5BHNQX\fmru %(5;beh{$&)3=EMT\afnw$DINQUX[^av~ ;ow} jnt '*8=@GJO]br%*4;ADIUX_kux#,26>AHirx} %-:@CFILORUX[^v~   Y o %~ ) % )   # %2 )  x  cRSTU/** ** Hanoi2 - programme de demonstration de la recursivite pour l'initiation ** au C 5 de GS Infos 21 : le celebre probleme des tours de hanoi. ** ** Version non recursive. ** ** Philippe Manet 12 Avril 1992 ** **/ #include #pragma optimize -1 /* * Pile utilisee pendant les deplacements des disques. */ struct { short count; struct { short n; char a; char b; char c; } entry[100]; } stack; void push ( short n, char a, char b, char c ) { short i; i = stack.count++; stack.entry[i].n = n; stack.entry[i].a = a; stack.entry[i].b = b; stack.entry[i].c = c; } /* push () */ void pop ( short *n, char *a, char *b, char *c ) { short i; i = --stack.count; *n = stack.entry[i].n; *a = stack.entry[i].a; *b = stack.entry[i].b; *c = stack.entry[i].c; } /* pop () */ void swap ( char *x, char *y ) { char t; t = *x; *x = *y; *y = t; } /* swap () */ void hanoi ( short n, char a, char b, char c ) { /* * Deplacement de N disques de A a C avec B comme intermediaire. */ stack.count = 0; do { if ( stack.count != 0 ) { pop ( &n, &a, &b, &c ); printf ( "Deplacement d'un disque de \"%c\" vers \"%c\"\n", a, c ); n--; swap ( &a, &b ); } while ( n > 0 ) { push ( n, a, b, c ); n--; swap ( &c, &b ); } } while ( stack.count > 0 ); } /* hanoi () */ void main ( void ) { char buf[4]; short n; /* * Scanf est bugge : on lit donc une chaine de caracteres que l'on decode * ensuite. */ printf ( "Nombre de disques ? "); gets ( buf ); n = atoi ( buf ); hanoi ( n, 'A', 'B', 'C' ); } /* main () */ WXYZ[\]^_`abcdefU,C ~ExpressLoadU ,E 0E  """w";8 [" "H )  "H)  "H)  +;ik;8 [ "")  ")  ")  +;ik;8 [ )   )   )  +;i k;8 [V{iH{i H{i H{iH")H )HL"+{i H{i H"#0:2)H )H )H"{i H{iH"#ŭ8pI0ʊP +;i kDeplacement d'un disque de "%c" vers "%c" ;8  ["+{iH"{iH" C)HB)HA)H "~+;i kNombre de disques ? H H"hhk;8 [d" dd +;ik<r s ɕ3*!zhZ(HH " "hkHHH"zhZګkx ; [   ) )   )-+  H HHHH H H"|  hh8+;ik; [   ) )   )+  #  )0 )_X )_0X i  k )0]:)_AP[K6)?HHHHHHHH "hhhze      +;ikH 7 h\0KzZڭHH; [ " Wi # " Ȁ " Ȁ  5 Z8czHHH H "$ Out of memory; "\0h h  1 3 m5   Ȁ  3 1 )s  "   i  ")0"!)    3 1 +hhkK H H ;[$ `hHHhk֯z x z Hx H"+hh` | x t v kK ;[ )%H"n   +hh k w {  } u w ). )l{ Lh  ) <. S |. )-} ,0 "+ + #u  8``, )* ,  _, `)0:)H, , m, c,  %Jn]spcXbxZovu!dif e E gG \(((((‚Ą ɴ T K B ) ) "  "   k H H"kx       I- 8  {i H "  " 0 e 0 0  r0 eE 0 ) Ώ P T 6u 10  0 : / . 蘼 0 w )8w Iw  0 F H"n  0w 0 0"n w ) Z)H"n z _0 . # e 0 8. 0` Ώ `FF  {i H "u I u )m :H́ ΁  F8 Hw F%"n   Q T {  y 0RN n n n jJJJJ 0:i  ˭u X z 0y 0vw F H"n  _I{  !8  I - y {  H H H S{ '" &"ᭃ   0/ ' ُ Sُ S 8w w w y w w R ُ  8w Iw  0 F H"n y H"n z H"n  0w 0  H"n w  H"n ΁ ȹ ) SZ )H"n zȀ{ _ {   _` Q T {  0R !N n n n jJJJJJ 0 Ru 0 0y o ȷ )  ́  8w w F Z )H"n zΉ  _} `} w 0 "n w `   h{[`;8 [K H H"p  ) ) ) m 4"  " C H H 2    d{ibfh bȷ d fȷ h `" ^L  ) bmj ȭdml  ȷ  j ȭl    i ȷ i )8  ȷ :  )    I   )   +;i kK ; [   8+hhzhhZګk; [  +hzzH` Ck C")=AH ""r H"h` K;8 [0dd  "0dd '  F k#  k ɍ   k kɾɮ  ɼɬd Hd  'h Ud 1  :Iȹ:Hd  'h: H . kHd  'h h  k`Lk0H ""h0) a `0ZH"H "hz0`08 00"  k(  k(`!ș`0;i +kKZp "jnp0n pnn0)zkK0nnp0kKz|&~kH ;[Fe+kK  ;i H H "];[c:zZګH "hHi " kInsufficient bank zero memory; "~  ,;Ri /6=FOy~0>s#Zptz $-5=DNRVfkpt,B`T'L-Vp9=EUY]+ !$3H_v#,AMlos#(;?$'*-058KNQ^"048<@DHLPTX\`dhlo &!&)/>NTZgnqx{~" #&08FKWmw) #*/2>AKN^cflru{~"%8AV^afq}! #+4ETX^csw} 3;AGLZ,4:@JQY`hw'+1| /CHPSYm}(25 #include #include #include #pragma optimize -1 #define MAX_DISKS 14 #define BASE 180 /* base des tours */ #define ITOWER 100 #define TOWER1 60 /* position X des tours */ #define TOWER2 ( TOWER1 + ITOWER ) #define TOWER3 ( TOWER2 + ITOWER ) #define HDISK 10 /* hauteur d'un disque */ #define LDISK 10 /* moitie longueur du plus petit disque */ #define IDISK 2 /* moitie diff longueur entre 2 disques */ Rect pos_disk[3][MAX_DISKS]; short num_disk[3][MAX_DISKS]; short height[3]; short num_disks; void draw_disk ( short tower, short disk, short flag ) { short x; if ( flag ) { SetSolidPenPat ( disk ); PaintRect ( &pos_disk[tower][disk] ); } else { EraseRect ( &pos_disk[tower][disk] ); /* * Redessine la portion de tour effacee. */ if ( pos_disk[tower][disk].v1 >= BASE - ( num_disks + 1 ) * HDISK ) { SetSolidPenPat ( 15 ); SetPenSize ( 4, 1 ); x = tower == 0 ? TOWER1 - 2 : tower == 1 ? TOWER2 - 2 : TOWER3 - 2; MoveTo ( x, pos_disk[tower][disk].v1 ); LineTo ( x, pos_disk[tower][disk].v2 - 1 ); SetPenSize ( 1, 1 ); } } } /* draw_disk () */ void pause ( void ) { short w; for ( w = 0; w < 22222; w++ ); } /* pause () */ void move_disk ( char from, char to ) { short tower, disk, dest_x, dest_y, move_i; /* * Deplacement graphique d'un disque. */ tower = from - 'A'; disk = num_disk[tower][height[tower]--]; /* * Deplacement vers le haut sur la tour de depart. */ do { draw_disk ( tower, disk, false ); pos_disk[tower][disk].v1 -= HDISK; pos_disk[tower][disk].v2 -= HDISK; draw_disk ( tower, disk, true ); pause (); } while ( pos_disk[tower][disk].v1 >= BASE - ( num_disks + 3 ) * HDISK ); /* * Deplacement horizontal. */ dest_x = ( to - from ) * ITOWER + pos_disk[tower][disk].h1; move_i = LDISK * ( to > from ? 1 : -1 ); do { draw_disk ( tower, disk, false ); pos_disk[tower][disk].h1 += move_i; pos_disk[tower][disk].h2 += move_i; draw_disk ( tower, disk, true ); pause (); } while ( pos_disk[tower][disk].h1 != dest_x ); /* * Deplacement vers le bas sur la tour d'arrivee. */ tower = to - 'A'; num_disk[tower][++height[tower]] = disk; pos_disk[tower][disk] = pos_disk[from - 'A'][disk]; dest_y = BASE - ( height[tower] + 1 ) * HDISK; do { draw_disk ( tower, disk, false ); pos_disk[tower][disk].v1 += HDISK; pos_disk[tower][disk].v2 += HDISK; draw_disk ( tower, disk, true ); pause (); } while ( pos_disk[tower][disk].v1 < dest_y ); } /* move_disk () */ void hanoi ( short n, char a, char b, char c ) { /* * Deplacement de N disques de A a C avec B comme intermediaire. */ if ( n > 0 ) { hanoi ( n - 1, a, c, b ); move_disk ( a, c ); hanoi ( n - 1, b, a, c ); } } /* hanoi () */ void main ( void ) { char buf[4]; short d; /* * Scanf est bugge : on lit donc une chaine de caracteres que l'on decode * ensuite. */ printf ( "Nombre de disques ? "); gets ( buf ); num_disks = atoi ( buf ); if ( num_disks > MAX_DISKS ) exit (); /* * Initialisation du mode graphique et dessin des tours et de la base. */ startgraph ( 320 ); SetPenMode ( modeCopy ); SetForeColor ( 15 ); SetPenSize ( 1, 10 ); MoveTo ( 0, BASE ); LineTo ( 320, BASE ); SetPenSize ( 4, 1 ); MoveTo ( TOWER1 - 2, BASE ); LineTo ( TOWER1 - 2, BASE - ( num_disks + 1 ) * HDISK ); MoveTo ( TOWER2 - 2, BASE ); LineTo ( TOWER2 - 2, BASE - ( num_disks + 1 ) * HDISK ); MoveTo ( TOWER3 - 2, BASE ); LineTo ( TOWER3 - 2, BASE - ( num_disks + 1 ) * HDISK ); /* * Calcul des rectangles des disques et dessin initial. */ for ( d = 0; d < num_disks; d++ ) { pos_disk[0][d].h1 = TOWER1 - ( LDISK + IDISK * ( num_disks - 1 - d ) ); pos_disk[0][d].h2 = TOWER1 + LDISK + IDISK * ( num_disks - 1 - d ); pos_disk[0][d].v1 = BASE - HDISK * ( d + 1 ); pos_disk[0][d].v2 = BASE - HDISK * d; num_disk[0][d] = d; num_disk[1][d] = num_disk[2][d] = -1; } height[0] = num_disks - 1; height[1] = height[2] = -1; SetPenSize ( 1, 1 ); SetSolidBackPat ( 0 ); for ( d = 0; d < num_disks; d++ ) draw_disk ( 0, d, true ); hanoi ( num_disks, 'A', 'B', 'C' ); pause (); endgraph (); } /* main () */ stuvwxyz{|}~U,C ~ExpressLoadU s*[+,E /s*0E s* "L"" "|" ;8 [4 7"0 p"1"iH cT"0 p"1"iH cU"0t "l H8 p"1"H cz8pI07"0,"0  :H p"1"H cH:"0 p"1"H c:H<"0,"0 +;i k;8 [0V+;ik;8 [)8A"1"H   cv"p"1"iH chh8 p"1"H cii8 ""kti "l H8p"1"H cz8pI0ʊ')H)8d"1"Hp"1"H cc )H)zʊ "l "p"1"H ciie p"1"H ciie ""kp"1"H cH 8B)8A"1"H   cvp"1"H ciH)8Ap"1"H ciH""    "l H8 "p"1"iH chhi p"1"H ciii ""kp"1"H c 8pI0ʊ;+;ik;8 [0:D )H)H )H:H")H )H")H )H )H:H" +;i k;8  [^" {iH"I h{iH" tt0"A @" ."0"0 ,"0:"0@<"0,"0::"0:t "l H8<"0:"0t "l H8<"0:"0t "l H8<"0 t8 pI0 H t:8"l i H<8 H t:8"l iF H  "l H8 H "l H8 vvhchc c8vhchc ch t:  hchc hchch,"08"0 t8 pI0 " ߩC)HB)HA)HtH""k"> +;i kNombre de disques ? H H"' hhkL L;8 [d"bdd +;ik   3 * !zhZ(HH " "hk H HH"zhZګkL ; [   )b)   )-+  H HHHH H H" * hh8+;ik; [   )b)   )+  #  )0 )_X )_0X i  k )0]:)_AP[K6)?HHHHHHHH "hhhze   *  +;ikH h\KzZڭ(H&H; ["Wi # " Ȁ " Ȁ  Z8czHHH,H "$ Out of memory "\h h  m  Ȁ    )s  "   i  ")0"!)      +hhkKHH ;[$hHHhk֯HH"+hh`,    kK ;[)%H"  +hhk    8).  8)l Lh  ) <݈ S:|)-,0"+ + # 8``)*  `)0:)H mc %ns@pOc;Xxou{dQiQfYeFEKgG\(((((‚Ą T K*B&)&)& &"(("  k H H"k  < < I- 8<><{i H@ "<@ "<0e00 0eE0) PT>6100 :. 蘼0)8I0 H"00 0")Z)H"z 0.# e0 8. 0` ` ><{i H@ "ID)mB:8 %" 99 QT  0RNnnnjJJJJ 0:i 9   ˭ X 900v  H" I !8  I - H H HS '" &": 0/ :' S S 8R  8I0 H" H"H"00 H" H"ȹ) SZ)H"zȀ    ` QT  0R   !NnnnjJJJJJ 0R00o ȷ )  8 Z )H"z `0 "`   h{[`;8 [K H H"  ) ) ) m 4"(("C H H 2    {i ȷ  ȷ  " L  ) m ȭm  ȷ   ȭ    i ȷ i )8  ȷ :  )    I   )   +;i kK; [  *8+hhzhhZګk; [ *+hzzH`28@ Xk ")HL "L" ,H"h`K ""R)#H#H#H "#H #H#H "Rk K;8 [0dd R "0dd  4  #ͮ   ɍ 4   ɾɮ  4ɼɬd 4ͮHd 4 h 4Ud 41  :Iȹ:Hd 4 h: 4H w.ͮ Hd 4 h 4h  R`L0H ""h0) a `0ZH2"2H "hz0`08 00"ͮ  (  (`ͮ!șή`0;i +kKZ "  0   0)zkK0  0kK$#&#&(#k{;8[:ڥJ       {i +k ;8[:IȅIFejf0I{ih[k{ih[@k{;8[:ڋK@ɀ "P#:Hi:;:"P#"&JJ)H,H"" "7"HHH.","""|RfHHH "kh#h#h#HHH "Sh#h #h#% "5% "# "R{i+kH""Could not start tools: H ;[Fe+kK ,(&;iX H,H "];[:c:zZګH "h:Hi: "L 8,*^`Z\TVNPkInsufficient bank zero memory" "tH"s$\[#K^Error occurred at line g# "^H"& in procedure # "_"&"B'Z \ " " Line Name# " ---- ----$ "Z \<^H"& D$ "_"&"B' $;[ 8)e "+hkSubrange exceededFile is not openRead while at end of file I/O error Out of memoryEOLN while at end of file Set overflow&Jump to undefined case statement labelInteger math errorReal math error UnderflowOverflowDivide by zeroInexactStack overflow Stack errorKHZ)H&)"᭜&͘&&͚& &&&&h   :H"{AH&"8&&m&&&H&H:"K&5"H"8"& "&U"&4"᜔&&&)"zhk; [) "k')HHH"& +hhhhk; [  )8 I") H HI i " +;i kK\HZH; [$ZHH"'+hhkH;)( &"L); [8"("'+hhkHHH8H; [  "c) % Q8  0 ") ") "c)e i @< ") ")   "c)Z ")"(+;i kHH8H; [$#ȷ&#ȷ HH"+hhhhk(H; ["b*(#ȿ*#(#*#+hhk ;[ ;) 8(I ;)ȗ(  @+hhkHi H ;[ "+hhkHHHHH; ["b*(#*#  ȷݠ(#ȷ*# ȷ+;i k:JJJJk 6^- JN\n F &5JS?Oi;l8*KOS 0TK#}Iaclu~ EFPXo.8<@ .4<0 RpTX?dhc 9`j}jqy CKsO.;Sc{~#=IYR~X.X.4O_e *ENZy G?BG  o } !'9lorux~,9NTWnqv|ɁgGORU]`or{"!&-2>CHKRU\adkru}* #&.147=LY_ehos}#*-2f! ][^Wvvv      $ p<@<@:<I@!%!% ""#"#g####_$#$$H$D$U$_u$$%& &&8&&T&&a&&n&&&&&)&)m';)PROG.QUEUESv( ' -'-PROG.2.QUEUES"(@3|3'QUEUE.H88(QUEUE.CCu 88)QUEUE.LIB::(SCHED.CC.%SCHED' Programmation n2 : Structure de donnes queue ============================================ Dans le prcdent numro de GS Infos, nous avons abord dans la dernire partie de larticle sur la programmation de la calculatrice, la structure de donnes pile. Dans cet article, nous allons traiter dune autre structure de donnes, qui est en bien des points similaire. En fait, elle est mme le pendant de la pile : il sagit de la queue. Dans la littrature, vous trouverez plus souvent employ le terme de file qui est une abrviation de file dattente, sans doute pour encore mieux montrer lanalogie entre les 2 structures de donnes. Personnellement, je prfre le terme de queue que je vais donc employer tout au long de cet article. Concepts de Queue ================ La structure de donnes queue est la ralisation informatique du concept de queue tel quon le connat dans la vie courante, par exemple lorsque vous faites la queue devant une salle de cinma. Dun point de vue informatique, on considre la queue comme tant une liste, telle que ce concept a t introduit dans le prcdent article, et qui sera dtaill dans le prochain numro de GS Infos. La proprit fondamentale des queues est que tous les lments sont insrs une extrmit et retirs de lautre. Le ct o lon insre les lments est appel la queue (cest ce qui a donn son nom la structure de donnes), tandis que celui duquel on retire les lments est appel la tte. Les termes anglais correspondants sont head ou front pour la tte et tail ou rear pour la queue. Lexpression employe pour dsigner le mouvement des lments dans la queue est premier arriv, premier sorti, ce qui correspond bien la notion de file dattente. Le terme anglais correspondant est first in, first out que lon abrge par FIFO. Si vous relisez larticle sur les piles du prcdent numro, vous constaterez que ces 2 structures sont quasiment identiques; en fait, la seule diffrence est que dans le cas dune pile, les insertions et les suppressions se font du mme ct, tandis que, pour une queue, les suppressions se font du ct oppos aux insertions. Par consquent les oprations sont identiques entre les 2 structures, seuls leurs effets changent. Donc, comme pour les piles, il ny a que 5 oprations possibles pour les queues: Initialisation dune queue; Test si la queue est vide; Ajout dun lment la fin de la queue; la littrature, voulant conserver la similitude avec les piles, utilise le terme denfiler, que je trouve personnellement assez malheureux; nayant pas de meilleur terme vous proposer, je me contenterai du mot anglais enqueue; Suppression dun lment en tte de la queue; le terme employ est dfiler, ce qui est tout aussi mauvais que enfiler; le mot anglais dequeue est beaucoup plus prcis. Accs au premier lement de la queue sans le retirer. Comme pour les piles, on peut aussi envisager une sixime opration pour dterminer si une queue est pleine. Je vous rappelle que cette primitive est en fait lie une contrainte dimplmentation et ne fait pas partie de la dfinition du type abstrait queue. En loccurence, le remplissage dune queue (et aussi dune pile) est en gneral assez problmatique, puisquil peut rendre impossible un traitement. La queue, comme la pile dailleurs, est une structure de donnes temporaire, cest dire que tous les lments qui y sont insrs sont destins tre supprims. En fait, lՎtat stable dune queue se produit lorsquelle est vide; dans le cas contraire, cela signifie quil y a encore des lments traiter. En gnral, les oprations dinsertion et de suppression sont asynchrones (cest dire indpendantes); le programme doit donc faire en sorte dՐtre capable dabsorber les lments (cest dire les supprimer) suffisamment vite par rapport au rythme de leur insertion, afin de ne pas se laisser dborder. Dans certains cas (par exemple dans des programmes rcursifs, voir larticle dinitiation au C de ce numro), le programme doit effectuer un traitement des lments rsiduels, une fois que tous les lments traiter ont t mis dans la queue et quune partie dentre eux a t traite lors du processus qui les a insrs. Utilisations dune queue ====================== Comme la pile, la queue est une des structures de base que lon utilise trs souvent. Lemploi le plus typique de la queue est lorsquun programme ne peut traiter les requtes qui lui sont soumises aussi vite quelles arrivent : on a alors un mcanisme qui reoit ces requtes, les met dans la queue, tandis que le processus principal les prend dans lordre dans lequel elles sont arrives afin de les traiter tour tour, ce qui montre bien lasynchronisme des oprations indiqu plus haut. Vous en avez un exemple dans votre GS, avec la queue des vnements gre par la bote outils. Ces vnements, correspondant par exemple au mouvement de la souris, lappui sur le bouton ou encore lutilisation du clavier, arrivent en gnral plus rapidement que lapplication ne peut les traiter. La bote outils les met donc en attente et les dlivre dans lordre de leur survenance lorsque lapplication les demande. On est bien ici dans le cas dcrit ci-dessus, car on considre que lՎtat stable de la queue des vnements est celui o elle est vide, indiquant que le programme est en attente dune action de lutilisateur. Une autre utilisation des queues est effectue dans les systmes dexploitation multitches. Les tches en attente du CPU sont mises dans une queue; lorsque la tche prcdente a termin son travail, ou effectue une action nayant pas besoin du CPU (comme par exemple une entre/sortie avec un contrleur intelligent comme la RAMfast sur le GS), ou encore lorsque le systme a dcid quelle devait laisser la place au suivant (auquel cas elle est remise la fin de la queue), la premire tche est alors retire de la queue et mise en excution. Dans la pratique, on assigne une priorit chacune des tches; on peut alors envisager davoir une queue pour chacune des priorits possibles, le systme ne mettant en excution une tche dune priorit donne que lorsque les queues correspondant aux priorits suprieures sont vides; on peut aussi envisager de navoir quune seule queue et dinsrer les tches au milieu en fonction de leur priorit. Cette fonction du systme est dsign en anglais par le terme de scheduling. Dans ce cas particulier, la queue du CPU nest jamais vide, ce qui est assez logique, car un ordinateur fait toujours quelque chose; les systmes dexploitation prvoient en gnral une tche spciale qui a la priorit la plus faible et qui est assez souvent une boucle infinie (en basic, cela serait 10 GOTO 10), cette tche nՎtant excute que lorsque le CPU na rien a faire dautre. Cest cette utilisation des queues que jai choisi de vous montrer en exemple; vous trouverez sur ce GS Infos un programme appel Sched (dont le source Sched.cc a t crit comme dhabitude avec ORCA/C), effectuant une simulation dun systme dexploitation multitches, multi-utilisateurs (jusquՈ 4 dans la version compile, mais cest paramtrable), dans lequel chaque tche a la mme priorit. Linterface utilisateur est loin dՐtre sophistique, mais, mon avis, le source est bien plus intressant que le programme final, pour comprendre le fonctionnement dune queue et dun systme dexploitation multitches (cest dans ce but l que je lai crit). Ce programme fait appel une librairie Queue.lib (dont le source est Queue.cc) qui a t conue de faon gnrique, et que vous pourrez donc utiliser dans vos propres programmes. Notez que la suite de larticle prsentant limplmentation de cette structure de donnes contient des extraits du source de cette librairie. Les queues, comme les piles, sont aussi employes dans les traitements diffrs, et notamment lorsquon souhaite prserver lordre des lments traits (avec une pile, les lments sont traits dans lordre inverse de leur rencontre); cest par exemple le cas pour le parcours dun graphe (nous aurons sans doute loccasion den reparler). L encore, tous les lments de la queue sont traits, et donc supprims un moment donn; le traitement se termine lorsque la queue devient vide. Je pense que lorsque nous aborderons des thmes plus complexes dans les prochains numros, nous reverrons souvent soit les piles, soit les queues, employes comme structures annexes dans limplmentation des algorithmes. Ces futures utilisations des queues correspondront nanmoins le plus frquemment aux cas cits ci-dessus, qui sont vraiment trs typiques. Reprsentation dune queue ======================== Comme je vous lai expliqu dans le prcdent GS Infos, une structure de donnes peut tre implmente de diffrentes manires. Il est cependant clair que lon va avoir besoin de maintenir un pointeur (dans le sens le plus gnral du terme) sur la tte de la queue et un autre sur sa fin, le premier permettant daccder lՎlment supprimer, tandis que le second indiquera la position du nouvel lment ajouter. On pourrait utiliser un tableau, comme nous lavons fait pour reprsenter les piles, et les 2 pointeurs dcrits prcdemment correspondraient 2 indices de ce tableau, indiquant les positions dajout et de suppression. Le seul problme est que la queue va avoir tendance se dplacer dans le tableau au fur et mesure des ajouts et des suppressions, rendant le dbut du tableau inutilis, tandis quon finira par atteindre sa fin, interdisant lajout de nouveaux lments, et provoquant donc artificiellement une condition de queue pleine. On peut sophistiquer ce principe, en rendant le tableau circulaire, cest dire que lorsque lindice de lՎlment ajouter atteint la limite suprieure du tableau, on lui fait prendre la valeur 1, puis on le fait progresser normalement jusquՈ ce quil rejoigne lindice de lՎlment supprimer, rendant ainsi la queue pleine; la taille de la queue est alors limite par celle du tableau. Dans une telle implmentation, le tableau forme donc bien un anneau virtuel, et il na donc plus ni de dbut, ni de fin. Le seul vritable inconvnient de cette solution est quelle limite arbitrairement la taille de la queue, ce qui peut poser un problme lorsque le rythme de mise en queue des lments est nettement plus rapide que leur traitement (par principe, tous les lments insrs dans une queue seront retirs un moment ou un autre), ce qui peut conduire au remplissage de la queue, et la perte dinformations vitales. Contrairement aux piles, on ne peut pas envisager la solution dextension du tableau, telle que nous lavons implmente dans le prcdent GS Infos, car si lindice dinsertion a dj fait le tour (cest dire quil a rejoint lindice de suppression et que celui-ci nest pas 1), ce qui est le cas le plus probable, il faudrait rorganiser compltement la queue dans le tableau, pour pouvoir bnficier de lespace supplmentaire. Si vous nՐtes pas srs davoir bien compris cette phrase, faites un dessin, cela deviendra tout de suite plus clair. Pour nous affranchir de ces contraintes, nous allons tudier dans la suite de cet article une implmentation utilisant une liste linaire chane simple. Nous verrons en dtail dans le prochain article ce quest une telle structure de donnes. Pour linstant, contentons-nous de savoir quil sagit dune structure chane, cest dire que chaque occurence de la liste est represente par un nud, et quun nud pointe sur lՎlment insr dans la queue ainsi que sur le nud suivant. Une implmentation de la structure de donnes queue =============================================== Une structure C permettant de mettre en uvre la structure chane dcrite plus haut est alors : typedef struct node *node; typedef void *data_ptr; struct node { data_ptr data; node next; }; typedef struct { node head; /* tete de la queue */ node tail; /* queue de la queue */ } queue; Le type node dfinit un nud tel quil a t dcrit ci-dessus, cest dire un pointeur sur lՎlment mettre dans la queue (ce pointeur tant gnrique comme dans limplmentation de la pile du prcdent numro), ainsi quun pointeur vers le nud suivant. La structure de donnes queue est alors reprsente par un pointeur sur le nud de tte et un autre sur le nud de queue, le pointeur sur le nud suivant de la structure node assurant le chanage des lments de la queue. Linitialisation de la structure queue se fait alors de la faon suivante : boolean init_queue ( queue *Q ) { Q->head = Q->tail = NULL; return ( TRUE ); } Cette fonction est on ne peut plus simple; la queue tant encore vide, il suffit dinitialiser les pointeurs sur la tte et la queue 0 pour indiquer cet tat. Vous noterez que cette fonction (ainsi que toutes les autres dailleurs) accepte en paramtre un pointeur sur une queue. Le principe de la librairie est que le programme lutilisant na pas connatre le dtail de cette structure; il doit la considrer comme opaque ( la limite elle pourrait avoir un type quelconque pour lui). Le passage du paramtre est ncessaire car le programme dapplication peut vouloir grer plusieurs queues avec la librairie; celle-ci ne doit donc pas fournir ses services en grant une variable interne, et par consquent en imposant une restriction sur le nombre de queues utilisables. La fonction indiquant si une queue est vide ou non est aussi trs simple. Elle se contente de tester si la tte pointe sur quelque chose ou non et de retourner le rsultat obtenu. boolean empty_queue ( queue *Q ) { return ( Q->head == NULL ? TRUE : FALSE ); } Linsertion dun lment la fin de la queue est assez simple; elle fait appel des techniques assez classiques de manipulation de pointeurs, les commentaires dcrivant les oprations effectues sur ces pointeurs, je ne les dtaillerai pas plus : boolean enqueue ( queue *Q, data_ptr data ) { node n; n = ( node ) malloc ( sizeof ( struct node ) ); if ( n == NULL ) return ( FALSE ); n->data = data; n->next = NULL; if ( Q->head == NULL ) Q->head = Q->tail = n; /* Queue vide : noeud est le premier et le dernier */ else { Q->tail->next = n; /* Chainage du nouveau noeud a la suite du dernier actuel */ Q->tail = n; /* Le nouveau noeud devient le dernier */ } return ( TRUE ); } La suppression du premier lment dune queue est encore plus simple que linsertion; je vous laisse tudier les dtails dans la fonction suivante : boolean dequeue ( queue *Q, data_ptr *data ) { node n; if ( ( n = Q->head ) == NULL ) return ( FALSE ); *data = n->data; if ( Q->tail == Q->head ) Q->head = Q->tail = NULL; /* Queue ne contient qu'un element -> devient vide */ else Q->head = n->next; /* La tete de la queue devient le suivant du noeud retire */ free ( n ); return ( TRUE ); } La dernire opration dfinie par le type abstrait queue permet dobtenir lՎlment en tte sans le retirer. Lutilisation de cette opration est assez rare, cest pourquoi je ne lai pas implmente dans la librairie cite plus haut. Voici tout de mme une fonction effectuant ce travail : node front ( queue *Q ) { return ( Q->head == NULL ? NULL : Q->head->data ); } Sur la disquette GS Infos ======================= Ces fonctions (sauf la dernire) ont t intgres dans une librairie Queue.lib (dont le source est Queue.cc). Une dmonstration de leur utilisation est ralise dans le programme Sched (source Sched.cc). Une description succinte de ce programme a t donne plus haut. Les commentaires au dbut du source dcrivent en dtail les principes mis en uvre et le fonctionnement gnral du programme. Je ne peux que vous y renvoyer. Dans le prochain numro de GS Infos, nous traiterons la structure de donnes liste, dont les structures p/** ** Queue.h - Definitions de la librairie de manipulation de la structure ** de donnees queue a inclure dans toute application utilisant ** cette librairie. ** ** v1.0 5 Avril 1992 ** **/ /* * Definition des types noeud et queue. */ typedef struct node *node; typedef void *data_ptr; struct node { data_ptr data; node next; }; typedef struct { node head; /* tete de la queue */ node tail; /* queue de la queue */ } queue; /* * Prototypes des fonctions de la librairie. */ boolean init_queue ( queue * ); boolean empty_queue ( queue * ); boolean enqueue ( queue *, data_ptr ); boolean dequeue ( queue *, data_ptr * ); /** ** Queue.cc - Routines de manipulation d'une queue. ** Cette librairie est decrite dans l'article "Programmation 2" ** de GS Infos numero 21 qu'elle accompagne. ** ** v1.0 5 Avril 1992 ** **/ #pragma noroot #pragma optimize -1 #include #pragma lint -1 #include #include "Queue.h" /* * init_queue () - Initialisation de la queue passee en parametre. * Ceci consiste a initialiser les pointeurs de tete et * de queue a NULL, puisque la queue est encore vide. * On retourne TRUE si l'operation s'est bien deroulee et * FALSE dans le cas contraire. En fait, dans cette * implementation, ce sera toujours TRUE. */ boolean init_queue ( queue *Q ) { Q->head = Q->tail = NULL; return ( TRUE ); } /* init_queue () */ /* * empty_queue () - Renvoie TRUE si la queue est vide et FALSE autrement. */ boolean empty_queue ( queue *Q ) { return ( Q->head == NULL ? TRUE : FALSE ); } /* empty_queue () */ /* * enqueue () - Ajoute un element a la queue, donc necessairement a la fin. * Retourne TRUE si cela a ete possible et faux dans le cas * contraire, c'est a dire si on n'a pas pu allouer de memoire. */ boolean enqueue ( queue *Q, data_ptr data ) { node n; n = ( node ) malloc ( sizeof ( struct node ) ); if ( n == NULL ) return ( FALSE ); n->data = data; n->next = NULL; if ( Q->head == NULL ) /* * La queue ne contient aucun element. Le nouveau est donc a la fois * le premier et le dernier. */ Q->head = Q->tail = n; else { /* * Chainage du nouveau noeud a la suite du dernier actuel. * Le nouveau noeud devient le dernier. */ Q->tail->next = n; Q->tail = n; } return ( TRUE ); } /* enqueue () */ /* * dequeue () - Suppression de l'element de tete qui est retourne a l'appelant. * Retourne TRUE si cela a ete possible et faux dans le cas * contraire, c'est a dire que la queue est vide. */ boolean dequeue ( queue *Q, data_ptr *data ) { node n; if ( ( n = Q->head ) == NULL ) return ( FALSE ); *data = n->data; if ( Q->tail == Q->head ) /* * La queue ne contient que le seul element qui est retire. * Elle devient donc vide. */ Q->head = Q->tail = NULL; else /* * La tete de la queue devient le suivant du noeud retire. */ Q->head = n->next; free ( n ); return ( TRUE ); } /* dequeue () */ ,>LIBRARY QUEUE.A<Q'0dequeue empty_queueenqueue init_queue~GLOBALSJ,A init_queueJ;8 [ ihHH hhh  +;i kS,B empty_queue';8 [ HHh)1hh;>  +;i k ,> enqueue;8  ["mallocڅh h& 0F hhh ihHHhxhh, ihhhh@ Hihhh ihhh  +;ik,> dequeue/;8  [HH h19hhFH HHhhhHHhh+ihHHhhh& HHhhh H"free  +;ikB@,? ~GLOBALS/** ** Sched.cc - Simulation de l'ordonnancement et de la soumission de travaux ** dans un systeme d'exploitation multitaches. ** ** Le principe de la simulation est le suivant : ** ** - une seule tache (job) peut etre executee a la fois par le CPU. ** - toutes les taches ont la meme priorite. ** - une nouvelle tache est demarree a un instant aleatoire et a ** une duree d'execution aleatoire. Ces taches sont lancees ** par des utilisateurs fictifs connectes a des terminaux ** (nombre aleatoire jusqu'a 4). ** - le simulateur gere sa propre horloge. ** - une tache est limitee a 20 unites de temps, au dela desquelles ** elle doit ceder sa place a la tache suivante (on dit qu'elle ** est preemptee) si elle n'a pas termine. Lorsque son tour ** revient, elle reprend la ou elle en etait reste. ** - un evenement est alors soit la soumission d'une nouvelle ** tache, soit la fin d'une tache, soit sa preemption. ** - l'objectif de la simulation est de mesurer le temps moyen ** qu'une tache attend dans la queue d'execution. ** ** Ce programme constitue une demonstration de la structure de ** donnees "queue" decrite dans l'article "Programmation" ** du numero 21 de GS Infos. ** ** v1.0 5 Avril 1992 ** **/ #pragma optimize -1 #include #pragma lint -1 #include #include #include #include #include "Queue.h" #define END_JOB 0 /* numero evenement fin tache */ #define TIME_OUT 1 /* numero evenement expiration temps CPU */ #define MAX_TERMS 4 /* nb maximum de terminaux */ #define MAX_EVENTS 2 + MAX_TERMS /* nb maximum evenements */ #define CPU_LIMIT 20 /* temps CPU maximal avant preemption */ #define MEAN_RUN 15 /* temps d'execution moyen d'une tache */ #define MEAN_SUBMIT 10 /* temps moyen de soumission */ #define BIG_TIME 30000 /* heure tres loin dans le futur */ #define MAX_JOBS 100 /* nombre total de taches simulees */ short system_clock; /* horloge du simulateur */ short event_table[MAX_EVENTS]; /* table des evenements */ typedef struct { short num_term; /* numero du terminal */ short start_time; /* heure de soumission de la tache */ short queue_time; /* temps d'attente dans la queue */ short run_time; /* duree d'execution de la tache */ } job; job current_job; /* la tache en cours d'execution */ short num_terms; /* nombre de terminaux simules */ long total_queue_time; /* duree totale de toutes les taches dans la queue */ short num_jobs; /* nombre de taches executees */ boolean stop_simul; /* TRUE si interruption simulation */ queue cpu_queue; /* queue des taches en attente du CPU */ unsigned char *keyboard = (unsigned char *) 0xE0C000; unsigned char *kbd_strobe = (unsigned char *) 0xE0C010; /* * enqueue_job () - ajout d'une tache dans la queue du CPU. */ boolean enqueue_job ( short num_term, short start_time, short queue_time, short run_time ) { job *j; j = (job *) malloc ( sizeof ( job ) ); if ( j == NULL ) return ( FALSE ); j->num_term = num_term; j->start_time = start_time; j->queue_time = queue_time; j->run_time = run_time; if ( ! enqueue ( &cpu_queue, (data_ptr) j ) ) { free ( j ); return ( FALSE ); } return ( TRUE ); } /* enqueue_job () */ /* * dequeue_job () - retrait d'une tache de la queue du CPU. */ boolean dequeue_job ( short *num_term, short *start_time, short *queue_time, short *run_time ) { job *j; if ( ! dequeue ( &cpu_queue, (data_ptr *) &j ) ) return ( FALSE ); *num_term = j->num_term; *start_time = j->start_time; *queue_time = j->queue_time; *run_time = j->run_time; free ( j ); return ( TRUE ); } /* dequeue_job () */ /* * distribute () - calcul d'une distribution logarithmique autour d'une valeur * moyenne de facon a donner au generateur de nombres aleatoires * un ensemble de valeurs equi-propable. * La formule utilisee est : moyenne * ln(aleatoire), ce qui * fait qu'environ les 2/3 des nombres sont inferieurs a la * moyenne. * Notez qu'on calcule le log d'un nombre entre 0 et 1, et qu'il * est donc < 0, c'est pourquoi on le multiplie par -moyenne. */ short distribute ( short mean_time ) { return ( (short) ( -mean_time * log ( (double) rand () / (double) RAND_MAX ) ) ); } /* distribute () */ /* * check_key () - controle qu'une touche n'a pas ete enfoncee, de facon a * suspendre l'affichage, auquel cas on attend la frappe d'une * autre touche pour continuer. Si de plus cette touche est ESC, * on interrompt le programme. */ void check_key ( void ) { if ( *keyboard & 0x80 ) { /* une touche a ete enfoncee */ if ( ( *keyboard & 0x7F ) == 0x1B ) { /* Escape */ stop_simul = TRUE; return; } *kbd_strobe = 0; while ( ! ( *keyboard & 0x80 ) ); /* attente touche reprise */ if ( ( *keyboard & 0x7F ) == 0x1B ) { /* Escape */ stop_simul = TRUE; return; } *kbd_strobe = 0; } } /* check_key () */ /* * next_event () - recherche de l'evenement ayant l'heure la plus petite, et * qui est donc celui a traiter. * On ajuste ensuite l'horloge du systeme et des autres * evenements pour simuler le temps qui passe. */ short next_event ( void ) { short event = 0, i, event_time; /* * Recherche du prochain evenement. */ for ( i = 1; i < MAX_EVENTS; i++ ) if ( event_table[i] < event_table[event] ) event = i; /* * Ajustement de l'horloge des autres evenements. */ event_time = event_table[event]; for ( i = 0; i < MAX_EVENTS; i++ ) event_table[i] -= event_time; system_clock += event_time; return ( event ); } /* next_event () */ /* * start_job () - demarrage de la premiere tache de la queue si il n'y en a pas * deja une d'active; dans le cas contraire, on ne fait rien. */ boolean start_job ( void ) { short num_term, start_time, queue_time, run_time; /* * Detection d'une tache courante. */ if ( current_job.run_time != 0 ) return ( TRUE ); /* * Si la queue est vide, on n'a aucune tache a soumettre. */ if ( empty_queue ( &cpu_queue ) ) return ( TRUE ); /* * Recuperation de la prochaine tache a executer et de ses parametres * temporels qui servent a ajuster le temps deja passe dans la queue, et * le temps d'execution de la tache courante. */ if ( ! dequeue_job ( &num_term, &start_time, &queue_time, &run_time ) ) return ( FALSE ); current_job.num_term = num_term; current_job.run_time = run_time; current_job.queue_time = queue_time + system_clock - start_time; event_table[TIME_OUT] = CPU_LIMIT; event_table[END_JOB] = run_time; printf ( "%5d : demarrage tache du terminal %d, duree %d, a attendu %d\n", system_clock, num_term, run_time, current_job.queue_time ); check_key (); return ( TRUE ); } /* start_job () */ /* * submit_job () - soumission d'une tache en l'ajoutant a la fin de la queue * des taches en attente du CPU. * On essaye ensuite de demarrer la premiere tache de la queue * au cas ou ce serait celle que l'on vient d'ajouter. */ boolean submit_job ( short num_term ) { short run_time; if ( ! enqueue_job ( num_term - 1, system_clock, 0, run_time = distribute ( MEAN_RUN ) ) ) return ( FALSE ); printf ( "%5d : soumission tache du terminal %d, duree %d\n", system_clock, num_term - 1, run_time ); check_key (); /* * On relance un nouveau job de ce terminal. */ event_table[num_term] = distribute ( MEAN_SUBMIT ); return ( start_job () ); } /* submit_job () */ /* * finish_job () - fin d'execution d'une tache. On met a jour le temps total * passe dans la queue puis on lance la tache suivante. */ boolean finish_job ( void ) { event_table[END_JOB] = BIG_TIME; event_table[TIME_OUT] = BIG_TIME; num_jobs++; total_queue_time += current_job.queue_time; printf ( "%5d : fin tache du terminal %d, a attendu %d\n", system_clock, current_job.num_term, current_job.queue_time ); check_key (); current_job.run_time = 0; return ( start_job () ); } /* finish_job () */ /* * requeue_job () - preemption d'une tache qui a consomme tout le temps qui * lui etait imparti. Cette tache est remise a la fin de * la queue en tenant compte du temps passe dans le CPU * (pour qu'elle reprenne la ou elle en etait reste). */ boolean requeue_job ( void ) { short more_time; event_table[END_JOB] = BIG_TIME; event_table[TIME_OUT] = BIG_TIME; if ( ! enqueue_job ( current_job.num_term, system_clock, current_job.queue_time, more_time = current_job.run_time - CPU_LIMIT ) ) return ( FALSE ); printf ( "%5d : preemption tache du terminal %d, reste %d\n", system_clock, current_job.num_term, more_time ); check_key (); current_job.run_time = 0; return ( start_job () ); } /* requeue_job () */ /* * main () - programme principal. */ void main ( void ) { short num_event; /* * Initialisations de la queue du CPU, du generateur de nombres aleatoires, * de l'horloge, des statistiques, et du nombre de terminaux. */ init_queue ( &cpu_queue ); srand ( time ( NULL ) ); total_queue_time = num_jobs = 0; system_clock = 0; current_job.run_time = 0; /* indique aucune tache en cours */ num_terms = ( rand () % ( MAX_TERMS - 1 ) ) + 2; printf ( "Simulation pour %d terminaux\n\n", num_terms ); /* * Initialisation de la table d'evenements : fin du job et timeout cpu * tres loin dans le futur, et heure de soumission d'un premier job pour * chacun des terminaux simules. */ event_table[END_JOB] = BIG_TIME; event_table[TIME_OUT] = BIG_TIME; for ( num_event = 2; num_event < num_terms + 2; num_event++ ) event_table[num_event] = distribute ( MEAN_SUBMIT ); for ( num_event = num_terms + 2; num_event < MAX_EVENTS; num_event++ ) event_table[num_event] = BIG_TIME; /* evenements inutilises */ /* * Boucle tant que le nombre de jobs a simuler n'est pas atteint et * dispatching en fonction du premier evenement dans le temps. */ stop_simul = FALSE; while ( ! stop_simul && num_jobs < MAX_JOBS ) switch ( num_event = next_event () ) { case END_JOB : finish_job (); break; case TIME_OUT : requeue_job (); break; default : submit_job ( num_event ); break; } printf ( "\n\nNombre de jobs executes = %d\n" "Temps total dans la queue = %ld\n" "Temps moyen d'un job dans la queue = %f\n", num_jobs, total_queue_time, (double) total_queue_time / (double) num_jobs ); printf ( "\nAppuyez sur une touche pour terminer : " ); *kbd_strobe = 0; while ( ! ( *keyboard & 0x80 ) ); *kbd_strobe = 0; } /* main () */ Y,C ~ExpressLoadY "#(4I "'"0E " "\!"[ "5"R ;8  [" h d iiiH"7 I H"  +;ik;8  [{iH"Ip     H"  +;ik;8 [ I"""; "" @"" "$"k"H  +;ik;8 [))~))_  ))I䮫))  +;ik;8 [ 0( H z8pI0  ϥ  04 ch h  8 íe +;ik;8 [" {i H{i H{i H{iH"I_  m8hchch H H" "+;ik%5d : demarrage tache du terminal %d, duree %d, a attendu %d ;8 ["kHH :H"I8 :HH" " iH "k" +;i k%5d : soumission tache du terminal %d, duree %d ;8 [0uhchch0uHHhchchhHHHL" ""+;ik%5d : fin tache du terminal %d, a attendu %d ;8 [0uhchch0u8HHHH"I$HH" ""+;ik%5d : preemption tache du terminal %d, reste %d ;8 ["A " H"V ʎ"; "H" 0uhchch0u8pI0 iH "kϭ0 0uId8pI0ʊ8"b"&"z " mH`FLR"! """HH" y"   ))I䮧  +;ikSimulation pour %d terminaux Nombre de jobs executes = %d Temps total dans la queue = %ld Temps moyen d'un job dans la queue = %f Appuyez sur une touche pour terminer : ;8  [HH hhh HHhhhHHhh,ihHHhhh& HHhhh H"  +;ik;8 [ HHhhh  +;i k;8  ["څh h  hhh ihHHhhh- ihhhh@ Hihhh ihhh  +;ik;8 [ ihHH hhh  +;i kzKhhhhhZ " ")Bk  dg k 3h * !zhZ(HH " "hki Hg HH"zhZګkT "V "m )kT zhZګAk ; [KHHHH ")))))h)hhh  +;ikKN P zHHHHHZګN ;i H "kH h\KzZڭ|HzH; [>@Wi # " Ȁ " Ȁ  Z8czHHHDH "$ Out of memory "\h h  m  Ȁ    )s  "   i  ")0"!)      +hhkK@H>H ;[$hHHhk֯HH"+hh`K ;[)%H"  +hhk    P).  P)l Lh  ) <ݠ SR|)-,0"+ + # 8``)*  `)0:)H mc %ns-p<c(Xxouhd>i>fFe3E8gG \5h!@5h!????@HHm"hhmmHH"hhmm8XHH"hhiHH "yhhhh8JJmi,HHd"yhhhhHH"hhHH"yhhhh88cHHQ"hhHH"hhmmHH<"hhmmmm`T T I- 8TVT{i HX "TX "T0e00 0eE0) PTV6100 :. 蘼0)8I0 H"00 0")Z)H"z 0.# e0 8. 0` ` VT{i HX "I\)mZ:8 %" && QT  0RNnnnjJJJJ 0:i &   ˭ X &00v  H" I !8  I - H H HS '" &"R 0/ R' S S 8R  8I0 H" H"H"00 H" H"ȹ) SZ)H"zȀ    ` QT  0R   !NnnnjJJJJJ 0R00o ȷ )  8 Z )H"z `0 "`   h{[`; [8""+hhk ""hhkzHHHHHZګH;HiH "hk;iHHH " "h h hk k ")H ""DH"h`HHH8H; [  "Y % Q8  0 " "  "Ye i @< " "    "YZ " "+;i kHH8H; [&"ȷ("ȷ HH"+hhhhk;8  [@g"#!" && & 8   *8e 8+;i k;iHi H "  ;i kKNM NNz;8 Zګ;iQkH; [""*"ȿ,"*","+hhkK&"("&*"kK"R"p 8Ik@k;8  ["#!' OJ  e e f f ff`   d Fejf)  @8 +;ik;iHi H "  ;i kHiH;8  [  "" *","O$>"N"P"ȩȗ na i  U GE,"*" " F e i  "Y "Y8  0 E *"," " ) i+;ikk iHHHDH@@k H "hhk k ǩkHH; [&"ȗ("ȗȥȥȩ&"(" &"("i+zzzzk0    (k0 (kHHHHH; [""*","  ȷݠ*"ȷ," ȷ+;i kd8d d 8kK D|z;i HDH "];[c:zZګH "hHi " ~kInsufficient bank zero memory! "IH7IHZ; [*8e쪥I+zzzkh@k:JJJJk 'Pz~$W1VZlx.2<DNSqx >HNVh|F#(BEHKNQU[`cfilow|2 +/26EIORUX[^bhmpt4y    k 5 N  sTXTX  'T6X|"!La fin des escaliers: ********************* Les performances de notre GS tonnent bien souvent les fans du Mac, mais ils avaient tout de mme un point davantage par rapport nous: les textes affichs et imprims par le Mac taient lisses et parfaitements exempts de ces disgracieuses marches descalier. Cette particularit existe chez eux depuis lapparition dATM dAdobe et plus rcemment grce Trutype et le Systme 7. Et bien tout cela est termin, nous disposons aujourdhui dune init gniale crite par Alan Bird de WestCode Software qui nous permet dutiliser les fontes Trutype sur nos GS en lieu et place de nos polices habituelles. La socit Brjoux diffuse bien sr cet excellent produit que nous allons mettre en uvre ensembles. La disquette comporte lInstaller, un fichier tableau de bord appel Pointless, un dossier dicnes, les scripts dinstallation et un dossier contenant les six fontes classiques: Geneva, Monaco, Chicago, Courier, New.York et Symbol. Cliquer sur Install et suivre les instructions de cet utilitaire qui doit maintenant tre connu de tous ceux qui pratiquent GS OS. Deux options vous sont proposes, installer Pointless ou Pointless avec les Fontes. Utiliser bien sr la seconde, la premire servant rgnrer laccessoire de bureau au cas ou vous lauriez ngligemment vir de votre disque dur. A la fin de lopration, lInstaller vous rebootera votre machine pour permettre lactivation de cette nouvelle option, voyons ce qui se passe. Chargez votre AppleWorks GS prfrez et ouvrez un texte crit en Shaston tout fait classique, slectez le texte et changez de fonte. Deux constatations possibles: Le texte reste en Shaston bien quun autre nom soit coch dans la liste. Le texte change aprs un temps de calcul gren par un secteur color tournant qui remplace notre bonne vieille montre mais vos accents et caractres franois ont disparu ! Pas dinquitude, ouvrez votre NDA Tableau de bord et cherchez loption Pointless. Aprs lenregistrement dusage, une fentre de dialogue souvre montrant le contenu du dossier Fonts de votre systme et quatre boutons: Le plus important est Configure, choisissez une fonte et cliquez-le, une fentre vous montre maintenant la totalit des caractres de la fonte et vous constatez immdiatement quune seule partie de ceux-ci sont slectionns dlaissant en particulier tous les caractres accentus. Avec votre curseur, slectionnez la totalit de la fonte et cliquez le bouton radio portant le nom de celle-ci, rpondez ensuite OK. Recommencez lopration pour toutes les fontes, quittez le Control Panel et rebootez la machine car curieusement certaines fontes nacceptent les modifications quaprs cela. Vous pouvez constater maintenant les effets de Pointless, toutes les tailles sont possibles point par point: essayez en prenant loption Choose Fonts et entrez directement des tailles de diverses sortes, leffet est spectaculaire. Deux boutons Add et Remove servent activer ou supprimer une fonte de la liste ( trop de fontes vont rapidement grignoter votre place mmoire ). Un bouton Save Bitmap sert crer une fonte Bitmap de taille 12 partir du fichier Trutype ( je nai pas bien saisi lintrt ). Passe la surprise de leffet sur lՎcran, voyons ce que cela donne sur une imprimante. La qualit est trs bonne sur ImageWriter II et superbe sur ImageWriter LQ au prix dun temps de calcul tout de mme un peu plus long. Sur une LaserWriter II leffet nest pas respect, linverse du Mac, les fontes qui ne se trouvent pas dans la ROM de limprimante ne sont pas tlcharges et sont donc imprimes avec les invitables escaliers. Pour bnficier de tout lapport de Pointless avec une qualit laser, la solution se trouve dans le jet dencre soit avec la StyleWriter mais condition de fonctionner sous systme 6.0 et ne pas tre trop press ou alors en utilisant une DeskWriter de Helvet Packard et les drivers Harmonie2 .0 ( disponibles chez Brjoux ) les textes sont alors dune rare qualit. Brjoux ne peut livrer que les fontes standard se trouvant sur la disquette Pointless mais, si vous possdez un Mac, il est possible de rcuprer les fontes Trutype de deux faons: Tout dabord, il faut sortir la fonte de sa valise ( sur le Mac, chaque famille de fonte se prsente sous la forme dune valise ) pour cela, sous systme Mac OS 7.0, double cliquer sur la valise et draguer la fonte dont le nom ne comporte pas dindication de taille vers un sous rpertoire; procdez de la mme manire pour chacune des fontes choisies. Ensuite soit vous travaillez sur votre GS en systme 5.0 et la seule solution simple est de raccorder votre GS au Mac grce AppleShare, recopiez ensuite les fontes directement depuis le Mac dans votre sous directory /System/Fonts laide du Finder; soit vous tes sous systme 6.0 et l vous naurez aucune peine lire directement une disquette Mac 800 k sur laquelle vous aurez au pralable copi les fontes Trutype. Bien sr ne pas oublier de dappeler le tableau de bord Pointless, de faire apparatre la nouvelle fonte avec Add et de la configurer pour quelle soit active. En aucun cas, pour une raison que je nai pas analyse, il ne faut utiliser Apple File Exchange pour faire ce transfert fonte Mac vers GS, ce programme ne transfre quun fichier dix fois plus petit que loriginal. En conclusion, si vous souhaitez crer des documents bien lchs au niveau texte il vous faut Pointless, mais en utilisation courante il ralentit srieusement votre GS et quelques fois les fontes Truetype se dconnectent toutes seules vous obligeant rebooter pour en bnficier nouveau. Pointless est un produit trs intressant utiliser intelligemment. J. Rey "C5 =34*DESKWRITER= (C5.SUITE2|a&&C5.SUITE.YLES.PLUS*6!7627 c7b|7 757b7!7n7y777 7y7,7J77$ 7 7 88 888 +88788O88V88l8888888888888888888888 9m9B98Q98V98f9 9 9 99999 9 D: Q: T: w: ::::::::cDr:D@D@EDE+AEDF+AFD]FI`FIrMMwMMMMMMPfP@PfPfQ1YQPQ QQ1YR1YCSPTSYf[SYf+T Q2T1YTU1YU1YV1YDV1YXV1YV1Y W1Y-W1YW1YW1YW"BX1YY1YCYyYfYyYY\Y\Z\ZZ^Z Z`Z(ZWZ.ZYZ6Z[ZDZ\Z\_[\[\]\.Xj\\q\\x\\\b\\8_\_\8_\_*]8_]^]_]^&^_U^^^_^8_ _8_^_Xk__r__y___c_a9aa9a&a1Y>a_JaPae1YGePbSeYef1YfYff_fPb ;[ ):  +;ik;8 ;[     : p%r% ie H  HH H"2+ H) H1 H"& :    A+;ik;8" ;[(@**d(*)ȷȷ)ȷ)Ȅe2 4  )  )HHHeH"h:F ,@ ~global ;[ ):  +;ik;8 ;[     : p%r% ie H  HH H"2+ H) H1 H"& :    A+;ik;8" ;[(@**d(*)ȷȷ)ȷ)Ȅe2 4  )C, puis les 2 petits disques de B vers C. En dcomposant encore la premire et la dernire tapes de faon rcursive, on saperoit que pour dplacer les 2 petits disques de A vers B, il faut dabord dplacer le plus petit des disques sur C, puis lautre sur B, et enfin le petit disque que lon a mis provisoirement sur C, sur B. Limplmentation de cet algorithme est extrmement courte, par exemple en C: void hanoi ( short n, char a, char b, char c ) { if ( n > 0 ) { hanoi ( n-1, a, c, b ); printf ( "Dplacement du disque %c vers %c\n", a, c ); hanoi ( n-1, b, a, c ); } } Cette fonction peut alors sappeler ainsi: hanoi ( 3, 'a', 'b', 'c' ); Vous trouverez une implmentation complte de cette fonction sur la disquette GS Infos dans le programme Hanoi1.cc. La suppression de la rcursivit de cette fonction, bien que possible (en utilisant la structure de donnes pile dcrite dans le prcdent GS Infos), rend la fonction beaucoup plus incomprhensible (sans parler du fait que le code est nettement plus consquent), alors que la forme ci-dessus est particulirement lgante, comme vous pourrez le constater dans le programme Hanoi2.cc. Cest typiquement le cas o la rcursivit montre toute sa puissance et sa simplicit dՎcriture, dfaut de pouvoir suivre facilement le droulement des oprations. Pour le fun, jai aussi crit une version graphique que vous trouverez dans Hanoi3.cc. Cette version montre visuellement le dplacement des disques. Lle est relativement fragile et vous ne seriez pas l'abri de surprises. Le GS peut utiliser des imprimantes Epson mais c'est toujours du matriciel et les LaserWriter sont encore trop chres pour la plupart d'entre nous. Il reste le jet d'encre qui est particulirement abordable avec la StyleWriter d'Apple mais il vous faudra attendre l'arrive dfinitive du systme 6.0 pour l'utiliser et ensuite la sortie de vos textes tant la machine est lente !. Dans le monde Mac on trouve depuis pas mal de temps une machine de Hewlett Packard appele Deskwriter dont le prix oscille autour des 5000 F et mme aujourd'hui la Deskwriter C en couleur un peu plus chre mais particulirement tonnante au niveau des rsultats. Il n'y en a que pour le Mac me direz-vous ? Et bien non car les drivers Harmonie 2.0 existent ( disponibles chez Brjoux ) et ils pilotent trs bien ces machines ( en noir seulement et malheureusement pour la 'C' ) L'installer de la disquette Harmonie ne vous permet pas de placer directement les fichiers utiles au bon endroit dans le cas de ces machines, il faudra donc ouvrir le rpertoire 'Drivers' de la disquette et draguer les fichiers 'DeskJet.HAR', 'DeskJet.FL' et 'Printer57.6' dans le dossier 'Driver' de votre systme, puis vous rebootez le GS. Utilisez la Deskwriter en connexion directe au port srie, ces drivers ne supportent pas le fonctionnement travers AppleTalk ce qui est bien dommage lorsque l'on veut partager son imprimante. Tout d'abord ouvrir le tableau de bord du menu Pomme et choisir 'DC Printer', ensuite slectionnez 'Port Printer57.6' et 'DeskJet.HAR'. Dans votre AppleWorks GS prfr vous fixerez d'abord le format d'impression o deux options donnent les meilleurs rsultats ( au dtriment du temps d'impression tout de mme ) il s'agit de 'DeskJet Best' et 'Deskjet Condensed' qui donne des caractres un peu plus petits. Evidemment l'utilisation de ces machines prend tout son intrt dans l'utilisation de Pointless et des fontes Trutype. Pour faire du texte de qualit identique au Mac choisir dans la fentre d'impression les options 'Quality: 300 X 300 DPI' et 'Unidirectional', ne pas utiliser 'Save Ink' qui conomise tant l'encre que le texte en devient squelettique. Je n'ai pas trouv d'utilit aux fonctions de compression de ce menu, elles ont toutes donnes le mme rsultat sur le papier. Pour faire un brouillon bien propre mais en imprimant plus rapidement, le choix de la qualit 150 DPI est trs acceptable, les autres options font trs brouillon !. La fentre 'Other menu' laisserait penser que l'on peut imprimer en couleur mais rien ne fonctionne mon grand dsespoir. Le rendu du texte avec Pointless et la fonte 'Zapf Chancery' est d'une finesse tonnante et il est difficile de croire que la lettre n'a pas t tire sur une laser. Dommage par contre que la qualit de ces drivers en impression de fichiers 'Paint' soit particulirement dcevante. J. Rey Suite la demande de plusieurs membres n'obtenant pas les caractres accentus avec le Systme 6.0, nous avons mis dans le dossier "Les.plus", Clavier VF version 3.2 qui le fait sans problme. rtains produits rclament un logiciel spcifique pour fonctionner et vous devez le possder ( attention certaines piles ralises avec HyperStudio 2.0 fonctionnent mal sous HS 3.0 ), ou bien ils ne marchent pas du tout avec le GS Rom 03 et cela est en principe prcis. - Il n'est pas de notre ressort de faire fonctionner ces exceptions sur votre machine ceci est l'affaire de l'auteur s'il veut bien s'en charger, en gnral il est identifiable et pour peu que l'on soit courtois et qu'on lui fournisse tous les renseignements dont il a besoin, il rglera probablement votre problme. - En conclusion, nous ne pouvons assurer de garantie sur les DP si ce n'est, dans le cas des Adhrents qui optent pour la fourniture payante du support, le remplacement si la disquette a visiblement un dfaut de copie ou l'change en cas d'incompatibilit du type Rom 03. ******************** Le domaine public : nouveauts. ******************************* Voir GS Info 20 pour le catalogue complet. GS.CLUB 225: Slide Show par F.Schilling De superbes images: G, Starwar, Muscles, H, Bouche, D, Boris, Angel, Porsche, Sbrune, Marylin, Tacot, Cadeaux, Papillon, Bri, Mdusa, Acho1, Fantasia, Fish, Frog, Ima3, NewTut, Sac, Coul. GS.CLUB 226: Jukebox par FGS Pile HyperStudio qui transforme votre GS en Jukebox: Yesterday, Michelle, Help, Submarine, Private, Money, Where, Sultans. GS.CLUB 227: Hyperlanceur par Le Roux Pile HyperStudio jouant le rle de lanceur pour vos applICONSv* '  '/GSINFOS21.ICONS  5 5 FINDER.DATACVpV  V */GSINFOS/GSinfosGSINFOSSX(ffffoffffffffffffffwzwzwwzww{wwzw33:3::3:3:3::3:3:;:3:  /GS.INFOS/GSinfosGSINF*OS8HU]U_U]Q_U]U_U]U_U]U_U]U_UUUUUUU_UUUUUUU_UUUUUUU_U\U_U\UU_U\UU_U\UU_\U_"//""fofo//oo"//""""""oo//""oo/"/oo"/""oo""""""fofo 1qp$|*HGSINFOS18.ICONS{ications. Ncessite HyperStudio 3.0 GS.CLUB 228: Qualsons.piles par SLG Piles Hyperstudio permettant de jouer des sons digitaliss avec SoundShop. Cette disquette contient la pile mre et le runtime. GS.CLUB 229: Qualsons.1Mo2Mo Disquettes de sons compresss 5 pour GS 1 Mo et 2 pour GS 2Mo GS.CLUB 230: Qualsons.2Mo Disquettes de sons compresss 4 pour GS 2Mo GS.CLUB 231: Quest for the hoard Jeu shareware, disk autobootant. Ce jeu se joue sur une grille de 17 par 26 cases. Vous devez dcouvrir des trsors, mais le faire sans protection provoque immdiatement votre mort. De trs bons sons et jeu plusieurs possible. GS.CLUB 232: DYA Exhibit A Un slide show en 3200 couleurs booter dans le drive 5.1. 28 images: Amdekcar, WhiteRose, Astronaut, GruppeB, Tatoo, Koala, Tulips, WhiteDragon, Chrome, Deer, Pour, Demogirl, Parrot, Amerpic, Ball, Farm, Amdek5, Barton, Wet, Orangutan, Axxis, Reddemon, BikeGirl, Terminator, Porsche944, Cheetah, Meditate, Travel GS.CLUB 233: The Fly Demo par the Lizard Vous tes une mouche dans la maison et vous devez viter les barres qui vous dtruisent sans piti.Disk autobootant, drive 5.1 GS.CLUB 234: HyperStudio Developer Pack Des explications sur les mthodes utiliser pour inclure de nouveaux New Button Actions, Transitions et Extras avec des exemples en ORCA/M et Merlin 16+. Indispensable pour ceux qui veulent matriser HyperStudio 3.0. Ce freeware provient de Roger Wagner lui-mme, ncessite HyperStudio 3.0 et quelques connaissances en programmation. GS.CLUB 235:Bouncing Ferno par le FTA Un superbe jeu du type Marble Madness mais beaucoup plus fluide et d'un son excellent. Il se joue au Joystick ou la souris. GS ROM 01 ou 03. Disque autoboot4 dans le drive 5. Il est aussi installable sur le disque dur dans ce cas aprs copie des fichiers cliquer sur P8.Loader pour le lancer. Mise jour : GS Club 193 NoiseTracker est maintenant en version 1.0. Rappel: GS Club 31 et 39, Speedy Smith et Star Wizard ne fonctionnent pas sur un GS ROM 03. animation est simplifie lextrme, mais pour un cas aussi simple que celui-ci, elle suffit largement. Ces 3 programmes (ainsi que mes autres productions parues dans les diffrents numros de GS Infos) constituent un bon ensemble dexemples de fonctions. Dans le prochain numro, nous aborderons les types de donnes composs, cest dire les tableaux et les structures. ile et queue sont des cas particuliers. as le bton pour se faire battre. Donc, tout contradicteur devra accompagner sa rcrimination d'un article de la mme longueur, sous forme de fichier texte et qui selon lui aurait d remplacer le tien.) Je vous rappelle mes coordonnes : Philippe Manet 40 rue Victor Hugo 94700 Maisons Alfort Micro).Mais tout le monde n'est pas bricoleur et ne peut assurer son propre SAV. Il devient difficile de trouver des informations pour des produits Apple IIGS, surtout dans les magazines franais. Il reste deux points de vente officiel o on peut tout trouver, c'est bien sr Brjoux, mais on peut aussi encore acheter quelques produits chez un concessionnaire Apple, des produits allant la fois sur Mac et GS chez les VPCistes, et pourquoi pas aux Etats-Unis. Cela dpend de ce que l'on dsire comme service et tranquilit, le prix recouvre un ensemble qui va bien au-del du produit et est souvent proportionnel aux services que l'on souhaite. ( A moins on en veut, moins on paye et plus on doit se prendre en charge... comme dirait mon petit frre) APPLE ***** Produits toujours au tarif que tout concessionnaire doit pouvoir vous fournir aprs commande...et produits communs au Mac et GS. Prix catalogue TTC sans rduction. Systme 5.0: 237.20 F Carte SCSI High Speed DMA: 948.80 F Lecteur 5.25 : 1541.20 F ImageWriter II :3795.20 F StyleWriter jet d'encre (Sys 6.0 obligatoire):3439.40 F LaserWriter NT Laser: 15180.80 F CD SC Plus ou CD 150 lecteur de CD Rom: 4625.50 F ( au catalogue d'Euro CD, un seul CD pour Apple II...) Disque dur SCSI 80 Mo: 9369.40 F BREJOUX AE ********** Prix TTC GS Club, remise dduite, port 30 F sauf disque dur et config IIGS 120 F. Configurations Apple IIGS ROM 03, 2mo de Ram avec Vulcan 20Mo: 15300.00 F - avec Vulcan 40 Mo Gold: 16500.00 F - avec PC Transporter: 15300.00 F Lecteur 5.25 Apple: 1779.00 F Lecteur 3.5 Apple 800k :2360.14 F Carte acclratrice TransWarp GS 7mhz cache 8k: 2465,69F - cache 32k: 2668,50F Carte mmoire GSRam Plus 1 6 Mo version 2Mo: 2455,02 F Carte mmoire GSRam III de 1 4 Mo version 2Mo:2454,30 F - version 4 Mo: 3308,94 F Un mga de Ram pour carte mmoire: 533,70 F Carte mmoire RamFactor version 256k:2134,80 F - version 512 k: 2508,39 F Carte son Sonic Blaster: 960.66 F Carte son Audio Animator: 1761.21 F Carte SCSI RamFast 256 k: 1779.00 F - 1 Mo: 2075.50 F Disque dur Vulcan Gold avec carte contrleur 40 Mo:5603.85 F - 100 Mo: 10674.00 F Disque dur SCSI portable MiniTop 40 Mo: 4000.00 F - 80 Mo: 5930.00 F Scanner main Quickie 2000.00 F Les VPCistes Mac (prix les plus intressants relevs SVM de Mai) ***************** Attention l'achat d'une carte contrleur SCSI est obligatoire. Les produits relevs ont t tests avec la carte Apple High Speed. Chez MisterMac prix TTC port en sus de 100.81 F Lecteur de cartouche Syquest 44 Mo avec une cartouche: 3982.58 F Disque dur SCSI Fuji 45 Mo: 2725.42 F - 105 Mo: 3852.12 F - 180 Mo : 5453.22F Chez MacWay prix TTC port en sus de 94.88F Lecteur de cartouche Syquest 44 Mo avec une cartouche: 3973.10 F Disque dur SCSI Quantum 52 Mo: 2953.14 F - 105 Mo: 4139.14 F - 210 Mo : 7104.14F Chez Oryx Micro prix TTC port en sus 55 F Lecteur de cartouche Syquest 44 Mo avec une cartouche: 3995 F Disque dur SCSI Quantum 52 Mo:2795 F - 105 Mo: 3995 F - 240 Mo : 7395F Aux USA ******* Carte de crdit Visa ou MasterCard obligatoire, port assez onreux et 23.5% de taxes prvoir si la douane intercepte le paquet (trs frquent au dessus de $ 100) prix en dollars. Resource Central: Carte extension mmoire Chinook Ram 4000 0 mo:$65 - 2Mo:$159 - 4Mo:$279 Carte extension mmoire CV Tech GS memory 0 mo:$65 - 2Mo:$159 - 4Mo:$279 Carte extension mmoire Cirtech Primo 0 mo:$65 - 2Mo:$159 - 4Mo:$279 Carte SCSI Apple High Speed :$119 Carte SCSI RamFast: $189 Carte acclratrice ZIP GSX:$199 TMS Carte extension mmoire CV Tech GS memory 0 mo:$49 - 2Mo:$133 - 4Mo:$221 Carte SCSI RamFast: $179.95 version 1Mo:$239.95 Carte acclratrice ZIP GSX 7Mhz/8k de cache:$148.95 - 9Mhz/32 k de cache:$248.95 Adresses ******** Brjoux AE 29A rue Montribloud 69009 LYON Tl:(16) 78 36 52 69 Brjoux Boutique 16.rue d'Aguesseau 92100 BOULOGNE Tl:(1) 47 12 09 50 MacWay Lingolsheim BP132 67833 TANNERIES CEDEX Tl:(16) 88 77 83 20 MisterMac 12.rue Jules Ferry ZAC de Nanteuil 93561 ROSNY/BOIS Tl:(1) 49 35 24 00 Oryx Micro 44, rue de Cronstadt 75015 PARIS Tl:(1) 45 32 43 73 Resource Central PO BOX 11250 Overland Park,KS 66207 USA Tl:913 469 6502 TMS 1120 Holland Drive,Suite 16 Boca Raton FL 33487-2729 USA Tl:407 998 9958 SPY.ZONE La spy.zone de nos disquettes ne sera plus...Un des derniers de tous les groupes franais clbres par leur freeware et qui ont fait la gloire de l'Apple IIGS face aux amricains a quitt notre chre machine pour d'autres horizons. Le SpyNetwork qui ne comprenait plus qu'Hackercroll a quitt le GS pour le monde du freeware PC. Nous le remercions de sa collaboration et lui souhaitons de russir dans ce trs vaste monde. REGROUPEMENT DE DEVELOPPEURS Lionel Saugrain nous a crit, aprs avoir souhait un annuaire plus riche, contenant des informations sur les centres d'intrts de chacun, il fait tous une proposition des plus passionnantes. Contactez-le pour de plus amples informations. Je suis en train de voir ce qu'on peut faire pour regrouper les dveloppeurs sur IIgs, afin d'augmenter la qualit et la quantit des dveloppements sur notre machine prfre. Il est maintenant clair qu'il ne faut plus compter sur les grosses socits pour dvelopper quoi que ce soit sur IIgs, mais ce n'est pas une raison pour que ceux qui savent programmer ne fassent rien, bien au contraire... Je connais beaucoup de gens qui programment, mais ils sont dans la majorit persuads d'tre les seuls dans ce cas, ou presque, et ils ne sont par consquent pas du tout motivs. Un regroupement de tous ceux qui sont intresss par le dveloppement serait trs utile, et je pense que l'arrive du Systme 6.0 est une occasion idale pour lancer ce projet, qui ne se reproduira plus avant pas mal de temps mon avis ! J'ai pass pas mal de temps ces deux derniers mois discuter avec les dveloppeurs que je connais, afin de rassembler les ides, et je pense laisser prochainement un message sur RTEL. Ce ne sont pas les bonnes volonts qui manquent, mais il faut concrtiser, et un peu de coordination ne fait pas de mal dans ce domaine, comme le prouve d'ailleurs le succs du GS/Club... Saugrain Lionel 13 Rue du Levant 74690 Cran-Gevrier Tl: 50-67-93-39 DIVERS ****** -Pas de nouvelles de Complete Pascal nouvelle version du TML Pascal II... Apparemment, il vaut mieux s'orienter vers Orca/Pascal de ByteWorks. - Pnurie de disquettes 3.5 800k en ce moment, il est difficile de se procurer de la disquette dmarque d'une qualit acceptable (4% de perte environ). Il se vend peu prs n'importe quoi (10% de perte sur des disquettes identifies Budget).Notre fournisseur habituel n'a plus que de la marque et parle de blocage en douane. Le problme semble aussi se poser aux Etats-Unis. D'aprs les Amricains cela viendrait de la fabrication massive de disquettes Haute Densit au dtriment des autres pour faire face au march de ce qui est devenu le nouveau standart. -La guerre entre 68000 et 65816 va avoir lieu, elle a dj commenc et le champ de bataille est plantaire. Non, il ne s'agit pas de la lutte fratricide que nous connaissons bien, mais celle qui oppose les consoles de jeu SEGA MgaDrive base de processeur 68000 comme le MAC et la Super Famicom de NITENDO base de processeur 65816 comme notre cher GS. D'aprs tous les bancs d'essai, la Nitendo se place au niveau Hard au-dessus de la Mgadrive: Mgadrive: 320 par 224, 32 couleurs parmi512, 80 sprites et quelques scrolling diffrentiels pour les dveloppeurs. Nitendo: 512 par 448, 256 couleurs parmi 32768, 128 sprites jusqu' 64 points de ct et tout une srie d'effets , dformations , zoom, rotations pour les dveloppeurs. il ne lui reste plus qu' confirmer au niveau Soft car pour l'instant les plus beaux jeux sont sur Mgadrive. - Avec la sortie du MAC LCII 68030, la vente des MAC LC de base 68020 est arrte aux USA mais continue en France pour l'instant. Peut-tre pour faire mieux avaler la pilule ceux qui ont fourgu leur vieil Apple contre un beau MAC LC dj obsolte lors de la promo de Printemps. La dure de vie des machines est de plus encran couleur ; joystick ; imprimante APPLEWRITER // ; trs nombreux logiciels. CONTACTER MICHEL AU 76 42 31 41. Recherche ********* Alexandre Zawadsky recherche: Langage Lisp, contacts sur Marseille-Luminy Tel Week-End: 42 75 02 39 En semaine: Ch 426 Bat C FAC de Luminy Recherche ********* Yann Fievet recherche carte UDC universelle pour mettre un lecteur Apple 3.5 sur un Apple IIe Tel (1) 39 87 31 64 ou Minitel (1) 39 87 37 76 code VF Recherche ********* Carte PC Transporter avec DOC M. J.M. Bouilly 6. rue de Ventadour 31600 Muret Tl: 61 55 12 91 semaine aprs 18h Tl: 61 51 11 89 le week-end Recherche ********** Antiquit: DOS Master, programme en DOS 3.3 pour grer un disque dur crit par Glen Bredon. Transmettre information au GS Club. n Koenig - La gestion de la BRam a t modifie, ceux qui utilisent les programmes de restauration de BRAM doivent sauver leurs nouvelles configurations et ne pas restaurer les anciennes. -Attention aux anciennes icnes. Pour ceux qui utilisent encore le 5.0.4 dsactivez-les. Le 6.0 ne sera pas gn et le 5.0.4 continuera de les reconnatre. plus courte, on parle de cycle d'un an alors qu'il tait de 5 ans en 1985. A votre avis, qu'elle est la machine d'Apple qui a la plus longue dure de vie... - John Sculley a annonc une nouvelle gamme de produits les PDA, Personal Digital Assistant, la version lectronique grand public d'Apple. Le partenaire serait Sharp le gant japonais dont une activit est spcialise dans les agendas lectroniques. Ces PDA ne seraient pas des Macintosh... 2ceptionnelle. questionnaire sont les suivantes: - Nom, adresse et tlphone : ces informations sont rduites au minimum indispensable. Si vous dsirez ajouter quelque chose (votre profession, etc...), vous pouvez le faire si vous pensez que c'est utile, mais ce n'est pas le but de ce fichier. Les adresses permettant les contacts directs, il est facile ensuite de dire ce qu'on veut qui on veut. Je signale galement que les pseudos RTEL ne figureront jamais dans ce fichier, chacun de se dbrouiller pour tenir ceux qu'il connait jour... - La configuration matrielle : ces informations, en plus de l'tude statistique passionnante qu'elles autorisent (si, si...), permettent tout dveloppeur de connatre les gens qui travaillent avec des configurations similaires. Cela devrait faciliter la rsolution des problmes lis des configurations exotiques. - L'exprience : quelques informations simples pour savoir depuis combien de temps vous avez contract le virus de l'Apple II et si on peut encore vous soigner... Si vous avez dj diffus certaines de vos ralisations, vous pouvez galement les mentionner ici. - Les comptences : l encore, le but est de savoir qui s'adresser lorsqu'un problme prcis se pose. L'indication du niveau pour chaque comptence est bien sr trs imprcise, mais est largement suffisante pour se faire une ide. En gros, si vous pratiquez une activit depuis plus d'un an vous n'tes plus dbutant(e), et si vous renseignez souvent vos connaissances vous tes dj expriment(e). Quand aux gourous, ils renseignent les gens expriments sans chercher dans la doc... Les comptences sont rparties entre des comptences gnrales (programmation, graphisme...), des comptences sur des langages (non lies l'Apple IIgs), des comptences sur des logiciels de dveloppement (spcifiques l'Apple IIgs cette fois), des comptences sur le systme et la bote outils (dcoupes en plusieurs parties tant donne la taille du systme) et enfin des comptences sur des types de logiciels que vous connaissez plus particulirement (le type de programme qu'un dveloppeur peut raliser n'ayant pas forcment de rapport avec un langage qu'il connait, bien qu'il soit vident que l'assembleur est prfrable pour crire des routines graphiques d'animation, par exemple). Cette liste de comptences ne prtend pas tre complte, et vos commentaires permettront trs certainement de l'affiner ou de la simplifier, suivant le cas. Mme si la plus grande partie est destine aux programmeurs, ceci est normal tant donnes la varit des langages et outils de dveloppement disponibles. - Les projets : C'est tout simplement ce que vous avez envie de faire. Il est inutile de se forcer une activit pour laquelle on n'prouve aucun intrt, surtout si l'on vise une action moyen ou long terme. Car il ne faut pas se le cacher, le dveloppement n'est pas une activit court terme, ceux qui ont dj un pass de dveloppeur le savent parfaitement. Pour les autres, mieux vaut qu'ils soient prvenus tout de suite, afin d'viter quelques dconvenues et de rfrner tout excs d'optimisme. Certains d'entre vous ont dj des projets parfaitement dfinis en cours. D'autres veulent programmer mais ne savent pas quoi faire, ou savent dessiner mais ne savent pas programmer, ou encore ont cr des musiques mais ne savent pas quoi en faire. C'est certainement ce niveau que le regroupement des dveloppeurs doit jouer un rle trs important, en permettant de mettre en contact entre eux des dveloppeurs ayant des projets similaires, ou ayant besoin de comptences qu'ils n'ont pas dans un domaine prcis. C'est ainsi que des projets nouveaux pourront voir le jour et aboutir, comme nous le souhaitons tous. Et maintenant, passons au deuxime questionnaire, qui concerne lui les projets. Actuellement un projet peut tre un logiciel dj trs avanc, comme une simple ide de dpart. Le plus important est qu'il soit faisable. Il vaut mieux tre modeste au dpart, quitte ce que le programme final soit mieux que ce qui avait t prvu. Les projets trop ambitieux sont malheureusement souvent ceux qui n'aboutissent rien. Le fait qu'un projet soit intressant peut difficilement tre jug, il en faut pour tous les gots, mais dans tous les cas l'originalit n'est pas un dfaut, bien sr... Les diffrentes informations regroupes dans le questionnaire sont les suivantes: - Nom, type et descriptif: Le nom peut tre provisoire. Le type reste trs gnral, par exemple jeu d'arcade, wargame, tableur, etc... La description est plus prcise et permet en quelques lignes de se faire une ide du programme du point de vue de l'utilisateur. - Auteurs: il est souvent difficile de tout faire tout seul, alors n'hsitez pas, dveloppez plusieurs, le gain de temps est apprciable. Une possibilit trs intressante consiste utiliser des dveloppements communs pour plusieurs logiciels similaires. Pourquoi refaire des routines graphiques, des routines sonores, si d'autres en ont dj fait. C'est galement le rle d'un regroupement de dveloppeurs tel que celui-ci que d'viter la multiplication et la dispersion des efforts, nous avons tous y gagner. - Informations gnrales : Ces informations sont utiles pour tous. Elles permettront de savoir si un dveloppement utilise GS/OS ou ProDOS 8, si une TransWarp GS est ncessaire, ou si il est crit avec Merlin 16 Plus ou Orca/C. - Dveloppement : Il s'agit ici simplement de savoir si un projet est dj commenc, et quelle sera la dure approximative de son dveloppement. Mme si les dates donnes ne sont forcment que des estimations, le simple fait de donner une date transforme un vague projet en un projet ayant des chances d'aboutir. Dans le cas o un projet est pour l'instant simplement une ide, il est inutile de mettre une date fantaisiste. Une dernire chose propos du questionnaire projet. Il est parfaitement possible que des utilisateurs non dveloppeurs remplissent des fiches projets, afin de constituer une rserve de projets dans laquelle les dveloppeurs court d'ides, ou dsirant raliser des programmes utiles, pourront choisir. Cela permettrait galement plusieurs personnes d'apporter des ides sur un projet prcis avant mme qu'il ne soit commenc. Mais ceci ne se fera que si suffisamment de dveloppeurs dsirent utiliser une telle bote ides. Les informations obtenues l'aide de ces deux questionnaires seront regroupes dans deux fichiers AppleWorks GS, et seront disponibles pour tous les participants. Prcisons tout de suite que ces