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&Xb0qqwqqwqwqwwqwqwwwwwwwqwqqwqwwwqwwqwqwwqwqqwwwwwqwwqqqqqqqqqqqwqqqqqqqqqwqqqqqqqwqqwqwwqwqwqwwqwqwwwwwqqwqqwwqqwwwqwqwqqwwqqqqqqqqqwqqqqqqqqqwqqqqqqqqqqwwwwqwwqwwwqwwqqwwwwqwqwqqqwqqwwwqwqwwqqqGSINF93 j' @LES.PLUSj ARTICLES>m3 ,GSCLUB.9.640As- EXEMPLES!$PROGRAMMES3'EPSILONAI; 'BREJOUX AY5 5 ICONS[9!+DISQUE.DUR4)N`'GSINFOSIE' 8TEST.QUICKIE! +DISQUE.DUR1~%G `+DISQUE.DUR2)?@ABCDEFGHIJKLMNOPQRSTUV R ,@ K" H"{iii[",""S%)MIO""" :" " :""n:"." QR"g"x"HH%"hiXhi%)OOM " ""g i=j>"<"x % )q R HH%"hH &") .:""""")9999.9 FPS Polygonia I(C) 1989 Jason HarperTAB: next object ESC: exit  Zk& [t[i+k*өkJ"kfuhuk ;]88)[:d&d.+ik*.HH "hhhumd d &.+".+".+.+ڥJikju ) kumui.+L֦Lmd$nJ2.+$ ^#<ޖm6mmm]W^#VޖmP H24@dd:m&m/ 2݊o~qrsrsL_m  d$E)L>ԥm ) #0%%emuju) kuiL>ԥ%e!muju) kuiL>Ԥ)fufuL>Ԣ轖m0hu4ȹm0~qيo~q݊ors܊rs oيoڻZ$ej(za~qيorsrsFZ _ذBZ _Z80d hh6hrs/hhz6'ɜ h6zhrshzz6zdLz6يo~qrsrsZ _Z860dhhrshhɜ h6hrshz6L humd .+% nJ}>RnJ}޽.+.+d.+) .+.+.+.+ .+ڥLӤkjuXx.) ᫫*[ "J [ "ju[ "ju [ "J +X*I*ӭ]+k 42LLZ^# z.+,e$j(nJ0ڥ.+ݎ*nJ. Z.+^#,nJ0$*2. ؘ80d hhrsLhhLɜYhzLe$j(nJe2jH.+^#,nJ0.+ݎ*nJ. ؘ80d hzrsLhzLɜhhrsLԢ.+ݎ*nJ.^#.+8`,nJ0(* ,0`.`.e0j.*e,jE((,0*.`;8" [ۧ%%%% ۧ)L#"iiLا%Lۭfu huhurs~qaco%)iȷ%)k ۧ% eeȷ%0k eeZ8 w"hu}aa}cc݊oo~q~qzʎhu ۧ% L#ٮhuc0a֧% ee ۧ%  L#م ee hu dhud   8:+B$2Ͳ ^#^#LڼLڽ.+Ȯfufu:B۝2 ^#   .+8" 8"ۮfuJw+I 8"Ifu jw8" 8"ۮfu>RJwnJ+I 8"Ifu>R jwnJL+$(#';i&ke%%'`>ܩ  m>>܊ޢ@ܜBHHHHBH@H " "hz蘟@iH@ܭBiBk;8 [.*+;ik;8 [ eȷee ȷe ,eȷe +;ik;8 [ȷۥ"ۗȭۗȷۥ "ۗȭۗ ȷۥ " ۗȭۗiix+;ik;8 [ ȷ ۥ "HH ȷ ۥ"8hۅhۅ ȷ ۥ"HH ȷ ۥ " hmۗ hmۗ  ȥ  i i R+;ik;8 [ ȷ ۥ "HH ȷ ۥ"hmۅhmۅ ȷ ۥ "HH ȷ ۥ" 8hۗ hۗ ȥ  i i R+;ik;8 [ ȷ ۥ "HH ȷ ۥ"8hۅhۅ ȷ ۥ"HH ȷ ۥ "hmۗ hmۗ ȥ  i i R+;ik;8  [ nȥ b ȥ b ȥ+  ;ik i  ȷ  ȷ ۥ"mۅmۅ ȷ ۥ"mۅmۅ ȷ ۥ"mۅmۅ`ۜۜێۍ k MۍۛIIȌۭII莶ۭ)C ۿۭ۪᭹۪ mۍۭiۭ)m ۪ᘪ᭻۪᭹۪ mۍۭiiۭiېۭ)a ۪XY☪ab⭻۪N⭹۪ mۍۭiiۭiۭ)F ۪☪⭹۪ mۍiۭiۭ%IiۭIiۭIik۪ۜۜkۭ MۍۊI۬IIȌۭ)U ۪ۿۘۿۭ۪z{㭵۪ mۍۭiۭ)m ۪㘪㭷۪㭵۪ mۍۭiiۭiېۭ%IiۭIiۭIikۜۛkMۍۘIIۘ)/ ۪ۿۭ۪ۿ )mۍۘ)4 ۪䭸۪ mۍiۭIiۭIik;8 [  i@   +  ;ik )  )` ) 80- Hhi e`I Hhi 8`۠ jH8.hJkiiHi"DHHHHH""PHHHHH""HHHHH""!@`":5i歼i歼HHHHHH"Pd@""k朼 ""kiii2"DHHHHH""PHHHHH""HHHHH""!":5iiHHHHHH"Pd@""k"kiii2E "DHHHHH"E "PHHHHH"E "HHHHH"E "!Px@E ":5iiHHHHHHE "Pd@E "7"ku "kiii2<"DHHHHH"<"PHHHHH"<"HHHHH"<"!h<":5iiHHHHHH<"Pd@<" "kl"kiii2G"DHHHHH"G"PHHHHH"G"HHHHH"G"!`G":5iiHHHHHHG"Pd@G""kw"kiHHHHH"hhhh !"D  " ::0Uj쮷XX获:: 0j݋ iO iɠ8 80}읋 8ͽH !"D 8< !"  uHsH"hk_&)''()jjjjjP<(HHHH N"hhhh:!"kHHHH !"!HHHH !"@` !"Pd@ !"` *19,=ASLMRO  ..QRgxO O M'g+1i4=7j:>=<AxEcQUY]a eimquy} .ӊ;ӌT*ZJkӎrfuuhu{].+ӮiӢk*huӖmӎ.+.+.+.+ԮiԢkjuku#mu-.+<CmHMnJR.+W\Ԏe^#kԖmpԖmvԖm|Ԗm^#ԖmԖmԖmԊo~qrsrs_Ԗm>mujuku!>1mu7juAkuK>TfuWfuZ>gՖmohuvՖm}~qՊo~qՊorsrsՊoՊo~qՊorsrs__rsrs!֊o&~q,rs2rs:_Nrsbrsuhu֖m.+ nJ>RnJ־.+.+.+.+.+.+.+.+ju*׊J%׌,ju2׊9ju?׌FJO*U*X]jms^#~.+nJ.+׎nJא.+^#nJאrsnJ .+^#nJ".+%؎*/nJ4ؐFrsINZrs]d.+i؎nsnJz^#.+nJزب#!(ٓ+fu0hu5hu8rs;~q>aAcGيoRٮi[٢ka٨huټaaپccيoيo~q~qhu٨٨#hucaڨ#ڨ&#ChuPhunڎs:zڞB2ڲ^#^#ڎڎ.+fufu:ڞBڲ2ڎ^# ڎ.+ڎڪfu۾ ۪ 'fu*۾7M۪QTfuW>RanJs۪w~fu>RnJ>>>@BB@ '@-@0B6Bܴܾܶݴݶ#ݾ*4ݴ;ݶBIݾPݴݶݾݴݶݾݴݶݾݴݶ ޾d޴k޶rvz޾޴޶޾޴޶޾޴޶޾5ߴ<߶CGK߾Tߴ[߶bh߾nxߴ߶߾ߴ߶߾n(b?b "%.5;>JNQUX\`cgjnsz} XY a#'b*.2N59>EHKQU[^dgquy|  #-158<AEHLOSWzZ^{aejqtw} #-03EQUY\`cgknx{!9APZ`DP&*.14!JMPTY`fiorvz~  D #P+/369AEILO!ehkot{ E E D#'+E .E 1P9=AE DE GOSWE ZE ]!sE vE y}E E E E 77u u   #<&<)D159<<<?PGKO<R<U]ae<h<k!<<<<<<  ll$(.1G4G7D?CGGJGMPUY]G`GckosGvGy!GGGGGG  ww"(/38<@DG !J !MDQT W Z^lorXw|X ! !D#<N !Q !TX`udshw_&{)''():!:! ! !!  ! !2 !5 !8N !Q !T ,@ DIRECT Q*A ,@ LONGDATA P&dddddddddddd33DDffwwC:/!""""""33 DDDDDDUU  ff ffff  ww        UoQo2ooo+Q}+wQoo}Q2EEE ""  33  DD  UU ff  ww       "  3     2 22 2 2222d 22 2 2 2222d 2 2 2 22222d <DDDUUDDUUDD   UU DD  UU  " ""33""33       f ff!ww ! ff !ww!%$"#%% $%$ "$#"#%#% )( (& &' ') *+-,*)'&()*+*.+-+.-,-.,*,.*     w2222222(2(22( 22(( F<FdFdF<F2 F2dPdP P P <dd<2 2dd  <FKZF2FKZFFPd<dFPKFZ#F#2FPFPKFZ#F#ZZZZZ-Z-Z#Z#FFFFF-F-F#F#22  d dd d d d Z ZZ ZZ Z G3333 "" "" 3"3"  ffww   3333 "" ""3"3" ff!ww!!!ww1,-./01AD<7A1ww43254B8;CB4-,52-34103ff,145,ff.23/.wf-2.-wf/30/ww'&%$#"'SINVS'ww*+()*TUMJT*#(+"#)&'*)ff"+*'"ff$%)($wf$(#$wf&)%&DD67<=>?6DD@GFEDA@DD89:;8DDBC:9BUU6@UU7A7UU98B9UU=<DE=UU;:C;DDHQPONIHDDR  SVWXYRDDJMLKJDDTKLUTUU RHUUIS IUUJKTJUUOWVNOUULMULbc[Zb_^fg_\d>=\EFe]EiaOPiXW`hXcd\[cibZai]ef^]h`_ghjkcbjlmgfldk?>dFGleFjiPQjYXhmYckdcijbielfegmhgZ[\=E]^_`WOaZ~~ZpvutnkjpmloqmknolG@6?kpjQHRYmqpprntsvpqrpqnronorqoswvswtuwstwsvwuv""~yx~"zy{z3|{33}|"3~x}xyz{|}x { p`  " ZZdd` t t`jF F F !              ((((( (( ( 22222 22 2 <<<<< << < FFFFF FF F Z! !""  ""  """" 3  333 33   333333 [" !DD  DD  DDDD U  UUU UU   UUUUUU \# !ff  ff  ffff w  www ww   wwwwww ]$ !    ݙ  ݙݙݙ     ^% !    ݻ  ݻݻݻ     7;E    <G   !_&Z!c& !)'["-' !'\#' !(]$( !)^%) !XY8L xC)pJJJJ IH(ȱH:=IH[H`@H^H 2 9 @   I/H`JLNGȄBȄF aK ' faaFF  RJm# KKJ qJ )J ۈJJm  JFȱJGJKaȄM ' 5aaNNJFLGJ`a  XL LG &PRODOS`DaElH$?EGvѶK+`L XX LU ŠϠĠӥS)*+,+`F)) (*=GJFjJJA QE'+ '== `@ STSP8QSS8 m P o Rh8R8L xC)pJJJJ IH(ȱH:=IH[H`@H^H 2 9 @   I/H`JLNGȄBȄF aK ' faaFF  RJm# KKJ qJ )J CUSTOM.GS.OSvj' 'START.GS.OS.2[1g:g:Z*CUSTOMGSOSu<!tlw Z-START.GS.OS.2<16 6 ZSTART.GS.OS.4V2~:~:ZSTART.GS.OS.3p1~0~0Z/ABOUT.CUSTOM.GS0 0 ZSTART.GS.OS.5Z`~~ZSTART.GS.OS.6pZ`~~Z\]^_`abcdefghijklmnArt.Polygonia: Traduit de l'amricain par Y.Gobin. Documentation originale dans le sous-dossier POLYGONIA du dossier PROGRAMMES. POLYGONIA (NDLR: Un programme de dmonstration sur l'usage du FillMode, mode graphique de coloriage trs rapide d'un polygone, spcifique l'Apple IIGS. Le jeu Tunnels of Armageddon de California Dreams en fait largement usage.) Copyright 1989 Jason Harper Il est possible de distribuer ce programme tant que celui-ci est accompagn de sa documentation. POLYGONIA I ----------- C'est le premier programme d'une srie destine explorer l'utilisation des graphismes en FillMode, unique sur l'Apple IIgs pour l'animation d'objets en 3 dimensions en temps rel. La version actuelle des algorithmes ne supporte que des objets qui tiennent entirement sur l'cran et dont la taille ne diminue pas avec la distance: des versions futures permettront des vues en perspective, des limites tronques et fonctionneront plus vite. LE MATERIEL: ------------ Un IIgs avec 512 k de mmoire. Aucun systme particulier. Cela ne fonctionnera pas bien avec un moniteur reli un VOC ( Video Overlay Card). Cela provient de ce que je considre comme une imperfection majeure du VOC. Si vous avez install un VOC et qu'il ne vous est pas facile de connecter votre moniteur la sortie vido du IIgs plutt qu' celle du VOC, il vous est possible d'obtenir de bons rsultats en mettant un cable RCA-RCA normal entre la sortie vido composite du IIgs et l'entre vido du VOC. (tout cela pour une bonne synchronisation). USAGE: ------ Polygonia I est principalement un programme que l'on regarde. Il n'y a que trois touches qui ont un effet lorsqu'il est en cours. ESC: sort du programme retournant au slecteur employ. TAB: fait passer l'objet 3D suivant ( parmi les six). Aprs le dernier, il permet de revenir au premier. CapsLock (blocage majuscules): limine le mode de FillMode de telle sorte que vous ne voyez que ce que le programme dessine ( en fait, juste le ct gauche de chaque zone de couleur) et non l'objet en lui-mme. C'est la possibilit d'afficher (sur toute la largeur de l'cran) une range continue de pixels de la mme couleur en ne dessinant que le pixel de gauche qui permet cette sorte d'animation sur le IIgs. En enfonant une nouvelle fois la touche Capslock, on revient au mode avec FillMode . Toutes les 10 secondes, la vitesse moyenne de l'animation est calcule et affiche dans le coin en bas gauche (en image par seconde). La vitesse maximale est de 60 im/s, vitesse laquelle l'cran est rafraichi. Il ne fait aucun doute que Polygonia peut atteindre cela sauf pour des objets trop petits. Il est peut-tre possible d'enregistrer de tels objets et de les ressortir en animation cette vitesse mais il n'y aura plus de contrles. LES OBJETS: ---------- Objet nb de verticales nb de polygones Moy. de cts par polygone ------ --------------- --------------- ---------------------------- Cube 8 6 4 Ttradre 10 16 3 Dodcadre 20 15 4.67 Les algorithmes ne peuvent pas rellement tenir compte d'une zone d'paisseur de zro cre par un trou dans l'objet, aussi faut-il s'attendre une image incorrecte. axes XYZ 47 42 4.14 Vaisseau spacial 132 94 4.77 Tours de Hanoi: Base 23 17 3.29 chaque disque 16 12 4 Total 103 77 3.84 (Pour ceux qui ne connaissent pas les Tours de Hanoi, en voici les rgles: il y a une base avec trois piquets et un nombre arbitraire de disques percs de diffrentes tailles. Tous les disques sont au dpart sur le piquet de gauche en ordre dcroissant. Il s'agit de les faire tous passer sur la tour de droite et dans le mme ordre en se servant de la tour du milieu. On ne peut maneouvrer qu'un seul disque la fois et un disque ne peut pas se mettre sur un plus petit). LE FONCTIONNEMENT ----------------- Chaque objet qui doit tre dessin est reprsent par une liste de points reprs par leur coordonnes X,Y,Z plus une liste de polygones reprs par leur limite et une couleur. Chaque polygone est construit de telle sorte que les points formant les cts sont dans le sens des aiguilles d'une montre vu de l'extrieur de l'objet. Les couleurs tant indpendantes des ranges de pixels, il est possible de crer des mlanges. Voici les diffrentes tapes pour chaque image: 1. Mise en place d'une matrice de transformation pour la rotation, l'chelle et la translation pour mettre l'objet la bonne position et orientation. 2. Chaque point de la liste des points de l'objet est multipli par la matrice. Faire une matrice pour une seule transformation est beaucoup moins performant que d'appliquer cette matrice chaque point sparment ( en transformant la rotation, l'chelle, etc.. pour celui-ci. 3. Pour chaque polygone de la liste de l'objet: A. La surface du polygone est calcule partir des coordonnes de ces points. Si le rsultat est ngatif, le polygone est de dos par rapport l'observateur et le reste des calculs peut tre saut. B. Pour chaque bord du polygone, une "table de bord" (edge table ou ET) est cre donnant les informations utiles pour dessiner la ligne ( position horizontale de dpart, pente, dernire position de la verticale). L'ET est divise en 200 catalogues chacun donnant une position verticale possible de telle sorte que les informations n'ont pas tre stockes pour chaque bord. 4. Pour chacune des 200 ranges de pixels sur l'cran: A. Toutes les entres dans le catalogue ET correspondant au balayage sont passes dans la table active (AET) dans l'ordre ascendant de leur position horizontale. B. Chaque bord dans l'AET est examin pour voir si l'affichage horizontal a chang. Dans la plupart des cas, cela se fait par comparaison du bord en cours et de celui qui est en train d'tre calcul. Quelquefois, on peut chercher dans le catalogue des polygones en cours dans l'EAT le plus proche. Quand un changement de couleur est dtect, il n'est pas dessin immdiatement. Cela prend 1 soixantime de seconde pour que l'image suivante s'affiche. C. Aprs toutes les entres dans l'AET, celles-ci sont corriges pour le dernier balayage. Chaque boucle dans l'AET est ajoute la position horizontale en cours.( positive pour les lignes qui vont vers la droite et ngative pour celles qui vont vers la gauche). Chaque ct qui atteint sa dernire position verticale est effac de l'AET. L'AET est retrie pour garder l'ordre ascendant des positions horizontales. 5. Quand tous les changements de couleurs sur l'image ont t ffectus, il sont dessin sur l'cran tous en mme temps. Le programme attend que le balayage vido atteigne le bas de l'cran pour utiliser les changement prcdents de l'image pour effacer ces changement et se sert de la nouvelle liste de changements pour redessiner l'image. Pour acclrer le processus, les codes de changement sont crit en langage machine. Il tait prfrable d'avoir un code de changements qui pouvait servir la fois au changements de l'image en cours et l'effacement de l'ancienne. Les codes de changement tournent en mode natif sur 8 bits avec le registre de pointeur en $E1 o se trouve l'cran graphique. Pour le changement de chaque octet, voici le code: LDA dp STA absolute L'adresse 'dp' dans l'instruction LOAD ( LDA) est la nouvelle valeur de l'octet: pour dessiner les changements, la liste est excute avec chaque octet contenant une valeur gale son adresse et pour effacer, l'octet ne contient que des zro. POUR DE PLUS AMPLES PRECISIONS: ------------------------------ Fundamentals of Interactive Computer Graphics James D. Foley & Andries Van Dam Addison-Wesley Systems Programming Series ISBN 0-201-14468-9 Cela couvre divers aspect des graphiques en 2D et 3D, y compris l'algorithme utilis pour Polygonia. Computer Graphics: A Programming Approach Steven Harrington McGraw-Hill ISBN 0-07-026753-7 Ce livre couvre moins d'aspects que le prcdent mais donne plus d'exemples concrets pour les utiliser. UN PEU PLUS ----------- Pour autant que je sache, il n'y a eu que deux programmes qui se servent du mode FillMode du IIgs. Accessibles sur CompuServe, Library 11 du forum APPRODUCTIVITY. Cubination (auteur inconnu): affiche un icosahedron (?) (polydre 20 cts) qui se dplace en diagonale sur l'cran en rebondissant sur les bords. Plus rapide que Polygonia I, mais moins pratique. Ce fichier s'appelle CUBINA.BNY sur CompuServe. FillMaze (aussi de Jason Harper): --------------------------------- Un labyrinthe en 3D. Trs rapide (55 images par seconde). FIN Jason Harper CompuServe: 76703,4222 Internet: 76703.4222compuserve.com. pqrstCATALOGUE " Toute peine mrite salaire " Jouez le jeu du Shareware en rtribuant les auteurs. Les bons programmes sont souvent le fruit d'un nombre incalculable d'heures de travail et l on n'a pas pour excuse de ne pas vouloir engraisser les marchands aux bnfices honts. La devise du club est " Payons les logiciels que nous utilisons". Ce qui est dj le cas de beaucoup d'aprs les retours que nous pouvons avoir. GS.CLUB.97 cette disquette au catalogue de notre numro 8 contient une ---------- nouvelle version du Font DA Installer, la version 2.0 au lieu de 1.1. GS.CLUB 107 SoundSmith 0.9B: Programme de Huibert Aalbers --------------------------- Artwork T.Mchain et S.Renaudin Suite notre demande, nous avons reu de la part de T.Mchain, ce superbe logiciel compos au total de 15 disquettes. En vous procurant la 107, 108 et une de celles de musiques, vous pourrez dj vous faire une bonne ide de ce squenceur 14 Pistes MIDI qui peut charger jusqu' 15 instruments et qui utilise pleinement l'Ensonic de notre GS. Pour une version infrieure distribues aux USA, les auteurs demandent $20. Bien que freeware en France, si vous utilisez ce programme envoyez 120 F aux auteurs, ils les mritent largement. *T.Mchain -19 rue Tiffonet -33800 Bordeaux *Huibert Aalbers -Travesia Andres Mellado 3 -28015 MADRID (Espagne) Huibert Aalbers et l'auteur de JigSaw et Laser Force SoundSmith requiert GS/OS 5.0 et 1.25Mo GS.CLUB 108 Soundsmith Data GS.CLUB 109 Soundsmith Player (FUN et FTA) GS.CLUB 110 Soundsmith Musiques Volume 1 GS.CLUB 111 Soundsmith Musiques Volume 2 GS.CLUB 112 Soundsmith Musiques Volume 3 GS.CLUB 113 Soundsmith Musiques Volume 4 GS.CLUB 114 Soundsmith Musiques Volume 5 GS.CLUB 115 Soundsmith Musiques Volume 6 GS.CLUB 116 Soundsmith IFF Instruments Volume 1 GS.CLUB 117 Soundsmith IFF Instruments Volume 2 GS.CLUB 118 Soundsmith IFF Instruments Volume 3 GS.CLUB 119 Soundsmith IFF Instruments Volume 4 GS.CLUB 120 Soundsmith IFF Instruments Volume 5 GS.CLUB 121 Soundsmith IFF Instruments Volume 6 GS.CLUB 122 Technotes volume 3 ------------------------------- AIIC: Tn-008. AIIGS: Tn-054 077. FileType Notes du 4 mars 90 GS/OS: Tn 007 010. AppleTalk: Tn 003 007. Misc: Tn 014 et 015 SmartPort: Tn 008. PDos: Tn 022 026. GS.CLUB 123 Next Home 1 par J.C. Derrvwxyz{|}~2/ ,@ main / "+";6",") ;8[iH"፣h)@{i+k ;8[i"].h{i+k ;8[i{iHHH"L,{iHHH"L,H"!h"-z͢))8pI) i(ς) i(ϥ8dpId{iH"-z8H("-zeHZJ"፣HH{iH "፣hۆۢ"፣{iH"-z8(HJ"፣{iH H "፣ۢ8"፣"፣"፣ :"፣{iH"፣ :"፣{iH"፣H"፣hۢ "፣{i+  ;ikContinue ;8[i{iHHH"L,H"!h{iHF 8(HJ"፣{idddd{iH8("-z8HJ"፣ dddd{iH8HFJ"፣ϩѩ{iՆ{iنddߥH{iH"፣hH{iH"፣hcH{iH"፣hBH{iH"፣h!80 sH`8 {i+;ikOk ;8[i{iHJ"፣{iH"፣"-z"-zH"!h8::ͩ8::ˢ6"፣7"፣."፣H"},h{iH "፣"-z ſ8Ʌť8Džå8pIdł8pIͅť8pIdÂ8pI˅{iHåeHeHJ"፣{iHS"፣{iHS"፣ׅϥمѥۅӥ݅ե{iHS"፣{iHHHeHeHJ"፣HH{iH"L,6"፣{i+;ik ;8[i{iHHH"L,H"!h"-zע) i(ե8pI{iH"-z8H("-zeHNJ"፣HH{iH "፣hцѢ"፣{iH".h"-z8HJ"፣{iH H "፣Ѣ8"፣{iH"-z8 HJ"፣{iH H "፣"፣"፣ :"፣{iH"፣H"፣hϥ   d Ѣ "፣{i+;ikCancelOk ;8[i{iHHH"L,{idd{iH"፣ d  {iH"፣{i+;ik ;8[i{iHHH"L, "፣ {idd{iH"፣"፣ d X򅟥{iH"፣"፣ d {iH"፣"፣{i+ ;i k ;8[i{iHHH"L,{idd{iH"፣dd{iH"፣M{iH"፣dd{iH"፣{iH"፣{i+;ik ;8[i{iHHH"L,{i{iH"፣d{i+;ik ;8[i{iHHH"L,{i{iH"፣{iH"፣{i+;ik ;8[i{iHHH"L,{i{iH"፣d{i+;ik ;8[i{iHHH"L,HH{iH": hH{iH" hH{iH" h{i+;ik ;8[i{iH*"፣{i+k ;8[i{iHHH"L, {i{iH"፣{i􅛥ʅdd{iH"፣" d {idd{iH"፣" d {iH"፣l" d I{iH"፣W" d {iH"፣{i+;ikProDOS SetEOF error.ProDOS write error.ProDOS open file error.ProDOS create file error. ;8[i{iHHH"L,{iHHH"L,H"!h"-z)8pI i{iH"-z8H#"-zuHxJ"፣HH{iH "፣h͆͢"፣"-z{iH8H<J"፣{iH H "፣͢8"፣ {iH"-z8H "-zuHJ"፣{iH{iH "፣ i {iH"-z8H"-zuH7J"፣{iH{iH "፣H"፣h0{iH"፣HH{iH"L,͢ "፣{i+  ;i kOk ;8[i"h.h)] 8pI0% 8pI00uAu8  {eH{iH{iH",{i{iT"-z  %O   %   HH{iH"L,{i+;ik ;8[i)ݥ*{iH"*hHH{iH"L,1'{iH"hHH{iH"L,{i+;ik ;8[i@  kWC/{ɰɱɲɳɴ ɵɶ$ɸ0ɹ<ɺHT`q {i+;ik---SYSP16TOLCDANDASTREXERTLS16LIBOBJSRCFNTBINTXT ;8[i{i{iH "፣HH{iH"L,{i+;ik ;8[i{iHHH"L,{i{iH "፣{i+;ik ;8[i{iHHH"L,{iHHH"L,{iHHH "L,ԋ".hH"].h"-zH"].h׆٥ʅӆե8啅ѥ8"-zϩǥх8pI0ׅɥم˩ťυ8pI0aɅ˅ͥ)"-z)å å e ɦ"].hɆ˥łӥצ"].h׆٥ǂc{i+ ;i k ;8[i{iH>BJ"፣HH{iH "፣hن{iHiJ"፣{iH H "፣٢"፣"፣"፣n:"፣"፣ #:"፣"፣ -:"፣E"፣ 7:"፣ "፣ A:"፣"፣ K:"፣"፣_:"፣y"፣i:"፣k"፣s:"፣X"፣H"፣h٢ "፣{i+kWestford, MA 01886 67 Sleigh Rd. Paul GauthierArectangle around the screen with the mouse, and deal with ProDOS.?copy them to on-screen windows, manipulate color tables, move a;show you how to load and save files, extract pixel maps and>to the address below. Among other things, the source code will=To get the source code for this program (TML Pascal) send $15Custom GSOS Source Code Offer:Ok ;8[i{iHHH"L,ש8pI0: t٥ׂ)ϩ8pI  8pI % ץυ8pI08i)թ98pI0: 80ق5F8pI0: 8Ai ق: 8ai ٥: 8pI  : 8pI  : t ׂ? eم e eʅцӥх{i+;ik ;8[iHH{iH".߅"].h{i+;ik ;8[iۥ8pI0)H{iH"hۅۂd{i+  ;ik ;8[i dd "{iH{iH "፣#{i{iT{i{iT{iH"h{i{iT d f"{iH{iH "፣{iH"h{iH{iH".HZ"{iHK"{iH"h{iH{iH",{iH"hI {iH"h{iH{iH{iH",{i{iT{iH3"{iH"h{i{iTH'"{iH""{iH "{iH",{iH"hI9{iH{iH{iH",{i{iTHH{iH": hԜԚ"r.pIH{iH" hH{iH" hHHԜԚH "፣h""|H{iHԔԒԜԚ"\ h6H{iHԔԒԐԎԜԚ" hI !" !"ԘԖ"፣{i+kTrouble reading fileTrouble writing new fileNot enough memory? to Ok to copy Enter name of new file: to directory Ok to copy Go to destination directoryPick file to copy: ;8[i{iHHH"L,{iHJ"፣HH{iH "፣hHH"፣{iHJ"፣HH{iH k)H "፣HH8"፣{iHPJ"፣HH{iH d)H "፣{iHJ"፣O){iHH){iHH"^h{iHC){iHH"h{iHA){iH",{i{iTHH{iH{iH "፣{iHxrJ"፣HH{iH3)H "፣8pI0q8 pI :"-h".hi&:H".hi.){iH: H"^h{iH*){iH: H"h{iH(){iH",{e{iT{iHHHixHi HJ"፣HHuH{iH :H".hi{eH "፣{iHJ"፣HH{iH #)H "፣{iH &J"፣HH{iH")H "፣HH{iHH"^h{iH "፣HHH"hHHuH/"፣H"፣hթ8pI  8pI % HHբ/"፣ 8pI8pI0@HHHuH."፣h 8pI: 0HH{iH"፣H{iH"hHH "፣{i+  ;ik $) ( $ New Filetype:) ( is $Present Filetype of CancelOk ;8[iC dd *{iH{iHH "፣HCH{i^H" hFFD{iNH{iFH""FD{i^HF"f {i+kSelect a file:HHH ;[ HHHHH &"  Ȁ8: ))e:  +  ;ik;8 ;[H({iH "},h+;ik ;[) eH0"+;ik ;[HHH)H ("h +;ikHHH ;[ )f A [8Ai a {8ai 80))  J ) J) +  ;i kH;iD,{F,HH ;[ H "H"hH,HHH,H "h<,h>,H "HHHH,H "h@,hB,e: "J,k ;[ j, k, :T+  ;i k"Ꮳk ;8 [  d) e )e     ;e iHH ;[>,H<,H"B,H@,H""J,J,"J, d&-)H "h "Ԣ"""H,H"D,F,[Z8k H;[ I Iʀ f  8 F F I+k H;[IIʩ FeI+kcck##k8 # zz(k ;[0  +  ;i k ;[   :0 )   h)+H   ;i(ku"j   lW?_E ykX"f"sZ"K"& 3"P '"_ ""n "P!"!!!!S#k)#d)#O)$H)+$C)L$A)$3)y%.)%*)%()&#) '"))*+7,J,+-J,<-J,Qށrsuwym"Bb"v)SbqSāP .O| CX;n7\$z{Y Xgp"PkNiD&+:?NSbgv{*/R-/J"Ꮳ{iHS"Ꮳ{iHr &J"Ꮳ{iHS"Ꮳ{iHHH8"-zeH:HJ"Ꮳ"*{iHT"Ꮳ{i+k ;8[i{iH"፣8pI0+ɩ٩˩۩ѩө(ɩ٩˩۩ѩө{iH"፣{i+k ;8[i" HH"፣Nd{iHJ"፣dddd{iHJ"፣dddddddddddddddѩE ӆթߩddHH{iH "፣hHHH "፣h" a H"፣hJ"፣{iHIJ"፣ ӆHH{iH "፣h}  {i+k Current IconsSorry. Not enough memory. ;8[i d {iH "፣ {i+kLoad which picture: ;8[i)"k d {iH "፣ {i+kLoad which file:*/SYSTEM ;8[i{iHdJ"፣HH{iH "፣h{iHJ"፣HH{iH H "፣{iH J"፣HH{iHHH "፣HH"፣"፣"፣:"፣"፣ A:"፣R"፣ K:"፣1"፣ U:"፣"፣ _:"፣"፣ i:"፣"፣ s:"፣"፣ :"፣"፣H"፣hݭHH "፣{i+k1AppleLink - PGauthier, Apple/Boston - PGauthier$are copyrighted by TML Systems, Inc.!Certain portions of this software(c)1987 TML Systems, Inc.This program is freeware by Paul Gauthier Nov 1989 v2.2.A program to customize the IIgs startup screen- Custom.GSOS -Ok ;8[i{iHP20J"፣HH{iH "፣hHH"፣"፣"፣ :"፣ "፣ :"፣"፣ (:"፣"፣ 2:"፣d"፣ <:"፣7"፣BP:"፣ "፣H "},hH"~*hHH "፣{i+k-Press the mouse button or any key to continue,the original System Disk. Run it on a copy.9Do not use this program to modify the START.GS.OS file on3the original before attempting to run this program.8This program modifies a system file. Be sure to back up - WARNING - ;8[iH"8hjHHH"\ hHHH"፣HH"፣  0"፣0"፣{i+k ;8[iH"h T T "9 HH"r.pI|  H H"፣HHHHH "፣h "!   H H HHH"\ h H H "].h H H "].h HH ". HHh h M". H} H"፣ H} H"፣0"፣0"፣, {iH",{iH"{i+kTrouble loading Sorry. Not enough memory ;8[i )8pI3 {iH",{i{iT{i T"kd{iH "፣ "._" HH".h h HHM".H H HHHHH" hK",:{iH",{iH"{i+kTrouble storing successfully stored.Sorry, but you can't overwrite the input file.Name to save new file as:*/SYSTEM2 ;8[iHH"፣  H H"፣HH "፣ H} H "፣ z {i+k ;8[i{i+k ;8[i{i+k ;8[i{iH:&"h{i{iTHH"፣0 0 "፣"*8 8 T"፣"፣"፣:"፣{iH"፣ H} H"፣{i+kWelcome to the IIGSEnter text string for 2nd icon: ;8[i H} H"፣{i+k ;8[i{iH<PDJ"፣HH{iH "፣hHH"፣{iHxFJ"፣HH{iH "H "፣HH8"፣{iHJFJ"፣HH{iH "H "፣{iH |J"፣HH{iH"H "፣{iH|J"፣HH{iH"H "፣{iHx%/J"፣HH{iH~"H "፣{iHx4>J"፣HH{iHs"H "፣{iH#1J"፣HH{iHp"H "፣{iH2@J"፣HH{iHm"H "፣թ_ש۩٩8pI0Y{iH"*h{i{iTע:"፣{iH"፣eۅեقթbש۩٩8pI0{iHץiHi HJ"፣="*{iHS"፣{iHHH:H:HJ"፣"*{iHT"፣eۅեقhH"፣hݥVHH{iH"፣H{iH"*hѭHH{iH"፣H{iH"*hӥ8pI 0 8pI % 8pI 0% 8pI % %u ٩8pI0 iٕق iӕ@ @ H H {iH"0 0 8 8 {iH"" HH "፣{i+k 1 1 New color:Color to change:Warning: can't undo!Change one color to anotherCancelDo it ;8[i dd ${iH "፣S{iH$"h{i{iT${iH".  {iH". % {iH"h{iH{iH{iH",{i{iT{i{iH"፣H${iHH"*h{iHq${iH",{iH" {i+k renaming fileError Enter new name:Pick file to rename: ;8[i dd %{iH "፣H%{iH",{iH"hj{iH"፣H%{iHH"*h{iH%{iH",{iH"{i+k deleting fileError Ok to delete Pick file to delete: ;8[i{iHqJ"፣HH{iH "፣hHH"፣"፣"፣ :"፣,"፣:"፣r,"፣:"፣2,"፣(:"፣+"፣<:"፣+"፣LF:"፣W+"፣P:"፣+"፣LZ:"፣*"፣d:"፣y*"፣Ln:"፣0*"፣x:"፣)"፣L:"፣)"፣:"፣G)"፣L:"፣)"፣:"፣("፣:"፣("፣H "},hH"~*hHH "፣{i+k.Press the mouse button or any key to continue.KStep 6. Rename your new file START.GS.OS (in directory SYSTEM) and reboot.B option to save a copy of the START.GS.OS file with the new icons.NStep 5. Use the Show Icons option to check your work. Use the Save GSOS FileHsame way, or use the Set 2nd Icon by Text option to enter text directly.PStep 4. Use the Select 2nd Icon option to specify the 2nd (smaller) icon in theHto use as the 1st (larger) icon. Press the mouse button to see the box.SStep 3. Use the Select 1st Icon option to put a box around the part of the pictureAnew icons. This file must be a non-compressed ($C1) screen file.GStep 2. With the Open Picture File option, read in a picture with yourIfrom the /SYSTEM directory. The icons stored in this file will be shown.LStep 1. With the Open START.GS.OS file option, read in the START.GS.OS fileC'Welcome to the IIgs') with your own pictures or text. Here's how:?the two standard icons (the picture of a computer and the text EThis program lets you customize your boot startup screen by replacing- How To Use Custom.GSOS - ;8[itrろ"2>"7"G0")"""" "$">"X"Z""""$"g"n)"%"-C.B/Aɑ@ɒ?ɓ>ɔ=KJIHYNZM[L\KɽJɾI! ,"፣{i+k ;8[i33333{iH",{iT3t3S3H3+33{iH",{iT3222222{iH",{iT22k2K2@2+2{iH",{iT21{iH",{iT11111{iH",{iTz1d1O1{iH",{iT "፣HHH-"፣hH "፣HHH-"፣hH "፣HHH-"፣hH "፣HHH-"፣hH "፣HHH-"፣hH "፣HHH-"፣hH "፣HHH-"፣hH "፣,"፣H"፣h*"፣{i+k==Warning!...\N702.==What To Do...\N701>> Help \N700==Change File Type...\N604.==Copy File...\N603==Delete File...\N602==Rename File...\N601>> ProDOS \N600==Change Colors...\N801.>> Colors \N800==Show Icons\N504D. ==-\N999D==Set 2nd Icon by Text...\N503==Select 2nd Icon\N502D==Select 1st Icon\N501D>> Work \N500==Clear\N254.==Paste\N253*Vv==Copy\N252*Cc==Cut\N251*Xx ==-\N901D==Undo\N250*Zz>> Edit \N900D==Quit\N404*Qq.==Open Picture File...\N403 ==-\N999D ==Save START.GSOS File...\N402D==Open START.GSOS File...\N401>> File \N400 ==-\N303D.==Source Code Offer...\N303==Warning!...\N302==About CustomGSOS...\N301 >>@\N300X ;8[iHH"፣HH"፣P{iH8 "hׅߥمۅ݅8{iH "hׅߥمۅ݅ H:5"hrHH"፣&@ @ "፣#0 0 "፣ {iH"፣{i+kOk to use this region? ;8[i0ͻ" 4 {i+  ;ik ;8[ivx z "Hbb"፣h",/tHrHnHlH"Q5 z a{i+k ;8[i"""V "L."5" {i+k $      ^ =  " 4 F X jw |V 5  o N-0 BTfxgF% E H f)hR1(H" Bbd7   di& ,<_K :q:w&"""."~"s"*p"~m""$##$I#$!$$C$q$$%$%O%%q%%b&,&r,&2,&+&+'W+"'+B'*b'y*'0*')')'G)()"((B((Y.3_.3e.3k.3q.3..3.t3.S3.H3.+3.3..3.2.2.2.2.2/2'/+/21/27/k2=/K2C/@2I/+2m/q/2w/1//1/1/1/1/1//z1/d1/O104:5Ӄ%7I[m !3EWi{ՆKik +K%Eełgl/? tz+'{&L$FRte%Ee%E\bhnt.4:@FLtz*c%B  /6=DKRYnuxHLPTX\ (:L^p $6HZl~؄ RWc'G[xNƄGj!2u"/}pK%>/Xy4UbbYa`g[Z|#-8LQTWZjux{EHScfjm4>HR\fpz( $'*036Pbt (:L^pʄjpLgkv!5:=W_bqt [y~),0;HUeu %5EUflp{/?O_o69=TXcfju}"!%059=QVYqt  %)47;FS`rQ[^lr 4N gkv5;?Jilp Fehl Badh`#'>,2TXc ,m0*D^ #&*5BO_o/?O_o/?OptB`"1BGVgl{ -8E!%037BE 0^kp&)} !-9Wv{ /ASew +=Oas̈́gmւ|3oNio)/)j-%Jo+ ,@ ~global """"""""""""""""""""""""""""""""33333333333333333333333333333333DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUffffffffffffffffffffffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwArt.MonTV NDLR: H. Benon nous invite un plongeon dans les entrailles des moniteurs et plus spcialement du moniteur couleur de notre GS. La suite dans le prochain numro. INTRODUCTION Le but recherch, dans cet expos, et d'apporter, ceux qui en ont besoin, des explications sur le fonctionnement des tlviseurs et des moniteurs vido. Je me suis aperu que, dans beaucoup de livres ou de revues, il y avait beaucoup d'erreurs. Personnellement je lis beaucoup, et je crois tout ce qu'on me dit. Alors je plains ceux qui lisent des textes errons. C'est pourquoi je suis l aujourd'hui. Mon expos se voulait court, et peu peu, pour rpondre aux questions, qui pourraient m'tre poses, le texte s'est etoff de plus en plus. J'ai essay de donner des explications, sans faire appel des dveloppements mathmatiques, il y aura donc des notions difficiles admettre. Cependant si vous trouviez un passage confus et que vous vouliez quelques renseignements supplmentaires, vous pouvez m'crire, l'adresse est dans l'annuaire. RESTITUTION DU MOUVEMENT CONTINU La restitution du mouvement continu par des images demande au moins 16 images par seconde, c'est la vitesse de tournage du dbut du cinma. Mais cette vitesse, la projection, l'oeil peroit un papillotement de la lumire. Le papillotement lumineux disparait partir de 30 clairs par seconde. Pour cela, chaque image est projete deux fois sur l'cran, et 32 clairements par seconde le phnomne n'existe plus. Puis le cinma passe la vitesse de 24 images la seconde, grce des pellicules plus sensibles et pour pouvoir reproduire des mouvements plus rapides avec une nettet plus acceptable, ce qui conduit 48 projections sur l'cran. C'est devenu le standard du cinma. L'IMAGE ELECTRONIQUE L'image lectronique apparat, avec la tlvision et, le nombre d'images par seconde doit tre en rapport avec la frquence du courant lectrique. . Dans notre pays et dans toute l'Europe le secteur est 50 Hertz. Aux USA, au Canada, au Japon, notamment, le secteur est 60 Hertz. Par conservation du systme adopt pour le cinma, la tlvision passe 25 images/seconde avec 50 projections (la frquence du secteur tant 50 Hz). Qu'advient-il alors des films tourns 24 images/seconde et projets en tlvision 25 images/seconde, et bien seulement une augmentation de une image de plus par seconde, ce qui conduit une vitesse plus rapide qu'au tournage, mais si peu, une dure plus courte du film (2 minutes et 24 secondes par heure) et un son lgrement plus aigu. Ceci sera plus sensible lorsque ces films passeront dans un programme de tlvision, dans un pays 60 Hz. Ce qui explique aussi, pourquoi les mouvements, dans les films du dbut du sicle, sont si rapides, lorsqu'ils sont examins maintenant. Nous n'avons plus de projecteurs 16 images/seconde et ils sont projets une vitesse de 24 images/seconde dans les salles et de 25 images/seconde la tlvision. Etant difficile d'avoir aussi 25 images/seconde dans nos ordinateurs, les mouvements dans les jeux qu'ils dispensent auront des mouvements saccads. Le compromis est donc d'avoir un mouvement agrable, avec une consommation de mmoire acceptable. Nous y reviendrons. Actuellement, pour amliorer encore l'image et, grce aux nouvelles techniques. L'image peut tre restitue 100 Hz. Mais ceci est seulement une amlioration la rception. Le signal est toujours mis 50 Hz. Le rcepteur est muni de deux mmoires de trame. L'une emmagasine la trame qui arrive, pendant que l'autre restitue deux fois la trame prcdente, une frquence double. L'criture en mmoire se fait 50 HZ et la lecture 100 HZ. LE POINT D'IMAGE Etudions de plus prs la formation d'une image lectronique. Alors que le cinma projette, sur l'cran, la surface entire d'une image, l'image lectronique est le rsultat du dplacement d'un point lumineux sur l'cran, une vitesse telle que notre oeil ne voit pas son dplacement et qu'il intgre une image entire. Nous verrons plus loin que notre oeil intgre mme deux images pour en faire une seule. Ce spot se dplace de la gauche vers la droite et de haut en bas. Il dcrit donc des lignes horizontales successives les unes au dessous des autres. Et pendant ce temps la puissance lumineuse du spot varie en intensit pour rendre le point d'impact sur l'cran plus ou moins lumineux. Le signal de tlvision est analogique, c'est dire qu'il varie continuellement dans le temps. Dans notre moniteur, le faisceau ne varie pas d'une faon continue, il est maximum ou minimum, par point, et son impact rend ce point lumineux ou non. Nous sommes l en fonctionnement binaire. Remarquons aussi que pour faire l'cran blanc, le faisceau doit tre son intensit maximum alors que, pour crire un caractre, il doit tre teint. Dans le mode criture, noir sur fond blanc, le spot est toujours maximum, sauf pour les caractres. D'o une grande consommation d'nergie et surtout une trs forte usure du tube cathodique. C'est pourquoi il est conseill d'teindre le moniteur, lorsqu'on ne s'en sert pas. Le spot se dplace donc du bord gauche de l'cran vers le bord droit assez lentement et son intensit illumine plus ou moins l'cran. Lorsqu'il arrive au bord droit, il doit revenir plus rapidement pour balayer la ligne suivante mais il ne doit pas illuminer l'cran. Sur un ancien tlviseur, en noir et blanc, us ou mal rgl, on voit parfois des lignes blanches transversales, c'est justement le retour du spot. Pour viter cela il faut l'teindre pendant le temps de retour, c'est la dure de suppression ligne. On admettra de la mme faon que lorsque le spot arrive au bas de l'cran, il doit remonter en haut, et que pendant ce temps il doit tre aussi teint, ce temps dure plusieurs lignes. Il y a donc deux priodes de suppressions, ligne et trame. Utilisons dj ce nom de trame, nous verrons ultrieurement la diffrence entre une trame et une image. Ces suppressions, appeles blanking en anglais, sont les rfrences qui alignent nos images sur l'cran. LE BALAYAGE Les images de notre GS, ont 262 lignes par trame en 60 Hertz et 312 lignes par trame en 50 Hertz. Les images successives se superposent les unes sur les autres. L'image de la tlvision comporte 262,5 lignes en 60 Hertz et 312,5 lignes en 50 Hertz. La demi-ligne est ncessaire au balayage entrelac que nous allons dcouvrir maintenant. Mais pour en revenir au balayage entrela, au lieu de dire qu'il y a 50 images de 312,5 lignes, disons qu'il y a 25 images de 625 lignes. Quelques petits calculs sont alors ncessaires. La dfinition verticale de cette image est de 625 points verticalement puisqu'il y a 625 lignes. Le format de la tlvision est 4/3. Si nous voulons avoir la mme dfinition horizontalement il faudra 625 x 4/3 = 833 points par ligne. L'image comprend donc 833 x 625 = 520 625 points. La variation sinusoidale d'un palier de gris, provoque un point blanc la crte et un point noir au creux. Le point blanc ou le point noir reprsentent la moiti de la priode de la variation. Nos 520 625 points reprsentent donc une frquence de variation de 520 625 / 2 = 260 312,5 priodes. Ce qui correspond pour 50 images/seconde une frquence de 13 020 833 Hertz. Cette frquence reprsente la frquence maximale, transmettre, et dfinit la bande passante du systme. On l'value plutt en Mgahertz et, l'on dira 13,020 MHz. Cette valeur est norme, pour un metteur, et encombre l'espace de transmission qui est dj trs embouteill par tous les systmes de tlcommunications. On a donc trouv une astuce, pour diminuer cette bande, c'est le balayage entrelac. Il s'agit de ne transmettre que 25 images par seconde, mais sous la forme de 50 demi-images, qu'on appellera alors trames. Une image de 625 lignes est transforme en deux trames de 312,5 lignes, et la bande passante transmettre n'est plus alors, que de 6,5 MHz. La premire trame contient les lignes impaires de l'image et, la seconde les lignes paires. On les appelle trame impaire et trame paire. A la restitution, le spot balaye la premire ligne et aprs son retour, se trouve dplac, de faon placer la seconde ligne de la trame, qui est, en fait la troisime de l'image et ainsi de suite jusqu' la 312me ligne. Au bout de la demi-ligne suivante, le spot arrive en fin de trame, et remonte en haut de l'cran. Il se trouve aussi une distance d'une demi ligne du bord droit de l'cran, il la balaye et aprs le retour se trouve de ce fait dans l'espace situ entre les deux premires lignes balayes lors de la trame prcdente. C'taient la 1re et la 3me ligne de l'image. Mais qu'est-ce que le spot est en train de lire en ce moment, c'est la premire ligne de la trame paire, qui est en fait la deuxime ligne de l'image. Le processus se continue et toutes les lignes paires sont places entre les lignes impaires. Notre oeil est abus, encore une fois, et il voit bien une image complte constitue de deux demi-images successives, entrelaces. Mais notre ordinateur n'a pas de balayage entrela, il y a bien 60 images identiques successives et superposes, de seulement 262 lignes. De plus comme il n'y a pas de mouvement continu restituer on ne parle plus d'images, mais de rafrachissement de l'cran une frquence de 60 Hz, de mme qu'il y a le rafrachissement des mmoires. 50 OU 60 HERTZ ? On peut tre drout, par ce que je dis. Tantt je parle du 50 Hz du tlviseur et ailleurs, je parle du 60 Hz du moniteur. Oui il y a une ambiguit qui en gne plusieurs. Notre ordinateur peut tre adapt, par les options du tableau de bord, un fonctionnement 50 Hz ou 60 Hz. Il doit tre adapt au moniteur qu'il utilise. Dans le cas du moniteur Apple, celui-ci tant de conception amricaine, fait pour un secteur 60 Hz, il vaut mieux choisir la mme option. Si vous utilisiez un moniteur franais ou plutt europen, vous devriez choisir l'option 50 Hz. Mais surtout ne dites pas, qu' la sortie de la broche 12 du connecteur vido, il y a un signal NTSC ou PAL. Il y a seulement au choix, un signal monochrome, 262 lignes rafrachies 60 fois par seconde ou 312 lignes rafrachies 50 fois par seconde. LES SIGNAUX DE BASE Les intervalles de suppression ligne et trame, vont aligner les bords verticaux de l'image, mais ce ne sont pas eux qui vont dclencher le retour du spot. Il y a l'intrieur de ces intervalles de suppression des impulsions de synchronisation ligne et de synchronisation trame. Reprenons le chemin du spot qui est en train de lire une ligne quelconque. Il arrive au bout du signal utile, au bord droit de l'image, la suppression ligne l'teint, il continue avancer , arrive sur une impulsion de synchronisation qui lui commande de revenir au bord gauche, il revient, il est encore teint et commence lire la ligne suivante, jusqu' la fin de la suppression o il restitue le signal utile. Il en est de mme, pour les impulsions de synchronisation trame, dans les suppressions trame. Mais l, les impulsions sont diffrentes, pour la trame impaire et pour la trame paire, par la prsence ou non de la demi-ligne. Premire dfinition trs importante : on appelle signal image, ou signal vision le signal utile contenant le contour de l'image. On appelle signaux de base ou synchro composite, les quatre signaux de suppression ligne et trame et de synchronisation ligne et trame, mlangs en un seul signal. Et finalement on appelle signal vido ou signal vido composite, signal le signal compos de ces deux signaux lmentaires. Sur le port vido de notre ordinateur nous avons : broche 1 - masse du cable vido R 2 - primaire R 3 - synchro composite 4 - rien 5 - primaire V 6 - masse du cable vido V 7 - -5 volts 8 - +12 volts 9 - primaire B 10 - rien 11 - son amplitude 1 volt 12 - signal vido composite monochrome, 50 Hz ou 60 Hz 13 - masse du cable vido B 14 - rien 15 - rien Les broches 2,5 et 9 ont chacune une broche de masse correspondante en 1,6 et 13, afin que les primaires R,V et B soient achemines sur des cables coaxiaux spars. LES NORMES Il faut ici donner la dfinition de la norme en tlvision. Les pays qui utilisent 60 trames, donc 30 images de 525 lignes sont en norme M. Les pays qui utilisent 50 trames, soit 25 images de 625 lignes ne sont pas en norme M, mais dans une norme qui peut e^tre B,C,D,G,H,I,K,K',L ou N. Cela dpend d'autres conditions. Rappelons que l'ancienne norme A anglaise avait 25 images de 405 lignes et que la norme E pour la France et la norme F pour la Belgique avaient 25 images de 819 lignes. Le signal en broche 12 est disponible pour la norme M ou pour l'ensemble des autres normes. C'est le me^me signal composite vido qui est disponible la fiche RCA. Sur l'Apple IIe, cette sortie est en couleur PAL ou en noir et blanc, selon la position du switch (BW/COLOR) sur la carte mre. Ces explications ont t simplifies l'extrme. Il y a bien d'autres particularits qui distinguent les normes de tlvision, mais nous n'en avons pas besoin ici. Situons le niveau du noir. Le signal utile d'image variera positivement juqu'au niveau maximum que l'on qualifiera de niveau de blanc, en passant par tous les niveaux possibles de gris, en ce qui concerne le signal analogique de la tlvision. Les signaux de base, sont aussi aligns sur le mme niveau de noir mais leur amplitude est ngative, par rapport celui-ci. Dans le signal composite on a donc au niveau le plus bas le fond des signaux de synchronisation. Au voisinage de 30 % (cela dpend des normes) le niveau du noir de l'image comprenant les temps de suppression et 100 % le niveau du blanc maximum. C'est ce qui fait dire, dans les traductions franaises sur ce sujet (voir page 167 du manuel de la traduction du manuel de rfrence de l'Apple IIe) que les impulsions de synchro sont au niveau plus-noir-que-noir. On emploie en France le terme d'infra noir. Dans le langage technique on dit, plus simplement, le fond de synchro. LA DUREE DES SIGNAUX DE BASE En tlvision (pour les normes 625 lignes et 50 trames) une ligne dure 64 us (us est la microseconde, qu'on devrait crire 'mu s', avec le caractre de l'alphabet grec). Elle comprend la suppression ligne d'une dure de 12 us. Le top de synchronisation ligne a une dure de 4,7 us qui dbute 1,5 us aprs le dbut de la suppression. Une trame dure donc 20 ms (milliseconde) et comprend 312,5 lignes. La suppression trame dure 25 lignes et les top de synchronisation trame, 2,5 lignes et dbute 2,5 lignes aprs la suppression trame. Nous laissons de ct, dans ces explications, ce qu'on appelle les impulsions d'galisation. En norme M (525 lignes et 60 trames) une ligne dure 63,492 us. Elle comprend la suppression ligne d'une dure de 10,2 us. Le top de synchronisation ligne dure 4,19 us et dbute 1,27 us aprs le dbut de la suppression. Une trame dure 16,667 ms et comprend 262,5 lignes. La suppression trame dure 19 21 lignes et les tops de synchronisation trame durent 3 lignes et dbutent 3 lignes aprs le dbut de la suppression trame. Afin de voir l'importance des temps de suppression, on peut prciser que l'embrouillage de Canal + est bas, justement, sur la variation du temps de suppression ligne ou, si l'on prfre par la position du top de synchro ligne dans le temps de suppression. Les tops de synchro ligne sont toujours espacs de 64 us, les dures de suppression sont toujours de 12 us, mais le palier avant la synchro, est sur certaines lignes normal soit de 1,5 us et sur d'autres lignes plus long ou plus court. C'est ce qui fait que les lignes ne sont plus alignes verticalement, certaines sont dplaces vers la gauche et d'autres vers la droite. Ce systme peut tre dverouill par un code secret qui n'est fourni qu'aprs paiement du contrat. LE BALAYAGE DE NOTRE MONITEUR En ce qui concerne notre ordinateur seul le nombre de rafraichissements de l'cran par seconde est important, 50 ou 60. Le nombre de lignes utiles reste le mme et le temps entre deux rafraichissements est rempli plus ou moins par des lignes supplmentaires. Les bases de temps sont dclenches par des compteurs. Le compteur vertical compte jusqu' 262 pour 60 rafraichissements/seconde et jusqu' 312 pour 50. C'est la seule modification qu'on doit fixer au tableau de bord. J'ai utilis volontairement ce terme de rafraichissement de l'cran, dans la phrase prcdente, pour bien faire la diffrence. Dans l'un ou l'autre cas, seules 192 lignes sont utilises pour l'image (24 ranges de 8 lignes = 192 lignes en mode texte). De 192 262, ou de 192 312 on trouvera la mme dure de suppression, le mme top de synchronisation image et, le reste constituera les bords suprieur et infrieur de l'image. En ce qui concerne le compteur horizontal il reste le mme pour les deux options. Il compte jusqu 65, de 0 24 et sert gnrer les bords gauche et droit, la suppression horizontale et la synchro horizontale. Le comptage de 25 65, sert compter les 40 colonnes en mode texte. Ne nous embarrassons pas pour l'instant sur ces systmes de comptage qui sont trs complexes et que nous pourrions abords aprs avoir trait en entier le sujet sur l'image de tlvision et celle de l'ordinateur. Il y a encore beaucoup voir. L'IMAGE ELECTRONIQUE ANALOGIQUE Allons voir de plus prs de quoi est constitu le signal vido noir et blanc. Un tube analyseur lit et restitue ensuite, une image sous la forme de lignes horizontales. Contrairement la photographie, on ne voit pas l'image entire au mme moment, mais c'est le dplacement du spot sur l'cran, qui crit l'image point par point. Pour une image monochrome, le tube peut tre considr comme ayant une surface uniforme et continue. C'est le point d'impact, seulement qui illumine l'cran et qui donne une dimension ce point lumineux. Aussi petit soit'il, ce point lumineux a une dimension non nulle, et de ce fait va impliquer une limite la finesse de l'image, qu'on appellera dfinition. De plus, cette dfinition, dpendra encore de la bande passante des circuits lectroniques, qui vont transmettre ce signal. Mais parlons d'abord du signal. Supposons une transition blanc/noir ou noir/blanc. Le signal d'analyse est au niveau bas et pour passer au niveau haut donn par le blanc, il y a un temps, et ce temps ne peut pas tre nul. La transition ne sera pas reproduite nettement il y aura un flou. On appelle ce temps le temps d'tablissement, qui peut tre un temps de monte pour une transition noir/blanc ou un temps de descente dans le cas inverse. Le spot d'analyse est circulaire avec une dimension infime, mais c'est quand mme un cercle ayant un certain diamtre. Lorsque ce spot va analyser la transition en se dplaant, cette transition va tre restitue en un temps correspondant au passage complet du spot, et cette transition va encore tre allonge dans le temps. On appelle ce temps, le temps d'ouverture (du spot, bien entendu). Un signal carr, dcompos en srie de Fourrier, a un spectre indfini. La bande passante des appareils, limite techniquement et par ncessit, contribuera allonger le temps de transition. Prenons toutes ces notions comme des dfinitions, qui nous claireront un peu plus loin. Pour l'instant rappelons nous que la finesse de l'image, ou encore sa dfinition dpend de la finesse du spot d'analyse et de la bande passante du systme analogique en cause. Ici parlons un peu du gris moyen. En tlvision en noir et blanc, il fallait avoir un gris neutre comme fond d'image, se trouvant 50% du noir et 50% du blanc. Et pour rendre ce gris, il fallait trouver une couleur qui ne se trouve pas dans les couleurs habituelles, pour permettre un contraste permanent quel que soit ce qu'on lui placerait devant. Ce gris moyen tait donn par ce qu'on a dfini par le bleu tlvision. C'est le bleu qu'on utilisait pour peindre les vehicules de l'ORTF. L'IMAGE ELECTRONIQUE DIGITALE . Dans un systme numrique, le signal analogique est chantillonn en morceaux aussi petits que l'on veut. Le niveau de cet chantillon, est alors cod en binaire. Avec 4 bits, on aura 16 niveaux de gris par chantillon, avec 8 bits on pourra avoir 256 niveaux de gris. Deux caractristiques sont ncessaires alors, l'horloge d'chantillonage d'une part et le nombre d'octets utilisables pour le codage de ces chantillons. Essayons de calculer le nombre d'octets ncessaires, pour la numrisation d'une image de 625 lignes de 833 points comme nous l'avons vu prcedemment. Nous avons vu que dans ces conditions, il fallait une bande passante de 6,5 MHz avec le balayage entrela. Ce sera aussi la vitesse d'chantillonnage. Si nous voulons archiver une seule image de 625 lignes de 833 points, soit 625 x 833 = 520625 points, sur 256 nideaux diffrents, il faudra donc 520625 octets, plus de 520 Koctets et, pour une seule image qui dure 1/25me de seconde. LA SYNTHESE COLOREE Pour tudier la tlvision en couleur, il faut faire un peu de physique. On sait qu'un prisme dcompose la couleur blanche et, rciproquement, l'aide d'un minimum de trois couleurs diffrentes choisies dans le triangle de Maxwell, on peut reconstituer presque toutes les couleurs existantes. Ne cherchons pas le prouver et disons que la CIE, a choisi et propos trois primaires rouge, vert et bleu, que l'on appellera R,V et B, partir de maintenant. En anglais on dira R,B et G. On voit que l'ordre du V et du B en franais, est interverti par rapport celui du B et du G en anglais. Ceci est important savoir, car si vous avez un appareil o les trois sorties sont spares sur trois fiches cte cte, sur la face arrire, elles seront dans un ordre ou l'autre selon que l'appareil est franais ou amricain. Et lorsqu'on fait des connexions par habitude, sans regarder, on peut avoir des surprises trs bizarres. LA CONSTITUTION DE L'ECRAN COULEUR A la restitution de l'image sur le tlviseur ou le moniteur, la couleur apparente dpend du revtement de l'cran. Les premiers tubes monochromes de tlvision taient verts, comme la plupart des oscilloscopes. Puis il a t dfini un blanc pour tre plus prs de la photographie. Les crans monochromes des ordinateurs sont aussi vert ou ambre. Avec la tlvision en couleur, il faut restituer, sur l'cran les trois primaires R,V et B. L'cran est compos d'une mosaque infime de luminophores qui s'claireront en rouge, en vert ou en bleu. Ces luminophores sont disposs en triplets. Il y a dans ce tube cathodique alors, trois canons mettant un faisceau qui balaye uniquement les particules de la couleur qui le concerne. Le signal qui excite ce faisceau est aussi analogique et sa variation va, pour le canon rouge par exemple, depuis le rouge teint, c'est dire le noir, jusqu'au rouge maximum, qu'on qualifiera de satur. Il ne peut pas y avoir de rouge plus rouge que celui l. Il en est de mme pour le vert et pour le bleu. Mais la variation entre le minimum et le maximum est continu, cela fait une infinit de nuances. Les autres couleurs seront le rsultat du mlange de deux ou trois des primaires R,V et B. Il y a en tlvision, une possibilit infinie de couleurs diffrentes. Pour la restitution de la lumire blanche, les trois canons R,V et B sont excits par une mme valeur de faisceau et, cette variation en parallle restituera toutes les nuances de gris. Prcisons encore que le noir n'est pas une couleur, c'est l'absence de toute couleur, c'est--dire les faisceaux teints. De mme que le blanc, est la prsence d'au moins trois couleurs, permettant la synthse. L'cran couleur est constitu d'une mosaque de luminophores, runis cte cte, sous la forme de triplets. Ces triplets sont de petites surfaces verticales imbriques en quinconce, comme le montre la figure suivante, et ils sont disposs dans l'ordre bleu, vert,rouge. C'est l'ordre inverse de la distribution RGB, amricaine. *****************_ _ _*********************************** ******* _ _ _ ( )( )( ) _ _ _ **************b v r****** *******( )( )( )(_)(_)(_)( )( )( )********b v r*******b v r *******(_)(_)(_)( )( )( )(_)(_)(_)**************b v r****** *******( )( )( )(_)(_)(_)( )( )( )********b v r*******b v r *******(_)(_)(_)( )( )( )(_)(_)(_)**************b v r****** ****************(_)(_)(_)********************************** Mais le point cr par le faisceau est plus grand qu'un triplet, il englobe, sur le moniteur vido Apple du GS, en 40 colonnes, environ deux triplets horizontalement et deux triplets verticalement. Sur un moniteur ou un tlviseur qui aurait un cran plus grand, le point lumineux serait plus grand, mais comme les triplets gardent la mme dimension, ce point lumineux engloberait plus de triplets. Reprsentons la ligne claire. On voit qu'il y a successivement 2 triplets superposs, un triplet entier entour au dessus et au dessous d'un triplet a demi excit, puis deux triplets entiers. -------------------___----------- ceci reprsente le profil du point lumineux -----------------/****`--------- son temps d'tablissement n'est pas nul, il ----------------/******`-------- claire un cercle et est plus lumineux en ---------------/********`------- son centre que sur son bord. --------------/**********`----------------------------------- --------____ /*********** `____------------------------------ ---------_ _ _ --------- _ _ _--------------------------- --------( )( )( )(_)(_)(_)( )( )( )--------b v r-------b v r- --------(_)(_)(_)( )( )( )(_)(_)(_)--------------b v r------- --------( )( )( )(_)(_)(_)( )( )( )--------b v r-------b v r- --------(_)(_)(_)( )( )( )(_)(_)(_)-------------------------- Il est facile de voir cela sur l'cran du moniteur, en l'examinant la loupe et en changeant les couleurs avec les commandes du tableau de bord. Vous devez apercevoir cette structure. Le noir correspond l'emplacement des deux autres primaires teintes du triplet, mais aussi un espace neutre entre les luminophores. Les seize couleurs sont codes sur un demi octet. Je garde pour l'instant les dnominations du tableau de bord, car les traductions dans les divers ouvrages ne sont pas tout fait exactes. $0 0000 noir $8 1000 brown $1 0001 deep red $9 1001 orange $2 0010 dark blue $A 1010 light grey $3 0011 purple $B 1011 pink $4 0100 dark green $C 1100 light green $5 0101 dark grey $D 1101 yellow $6 0110 medium blue $E 1110 aquamarine $7 0111 light blue $F 1111 white Avec les trois couleurs primaires rouge, vert et bleu on fera des couleurs composes : rouge + bleu = violet (magenta) rouge + vert = jaune bleu + vert = turquoise (cyan) Une petite rcration, avec la mire de barres colores, mise entre les missions, sur les antennes de tlvision. Partagez un rectangle, reprsentant un cran en huit barres verticales. Maintenant tenez le raisonnement suivant: le faisceau vert est excit pendant la moiti de chaque ligne, et teint l'autre moiti. Le faisceau rouge agit de la mme faon mais dans chaque demi-ligne, c'est dire qu'il est excit pendant le 1er et le 3me quart de ligne et qu'il est teint pendant le 2me et le 4me. Et enfin le faisceau bleu partage encore chaque quart en 1/8me de ligne de la mme faon. Quelles sont les couleurs de chaque barre verticale ? Vous trouverez ces dessins sur le fichier GS.paint de cette disquette sous le titre MIRE.TV. Nous dirons que le jaune et le bleu sont complmentaires puisque jaune (rouge + vert) + bleu = blanc. Il en est de mme pour le rouge et le turquoise(vert + bleu) et aussi pour le vert et le violet (rouge + bleu). En faisant varier le niveau des couleurs primaires, qui jusqu' prsent valaient 1, on peut faire d'autres couleurs. Par exemple, en dimininuant le vert 1/2, on va avoir un jaune avec beaucoup plus de rouge que de vert,c'est le orange. En faisant le contraire on aura un jaune verdtre. ( suivre) wA,p  DDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDB™B»ªBBwBwD@BDDDDDDBDDDDDDDDBDDDEDEDEDEBDEBDFBDFBDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDFDFDFDFDFDFDFDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBDFBBDFBBDFBBDFBBDFBBDFBBDFBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBEBEBEBFBFBFBFBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBEXEMPLESv!$' '(MIRE.TV.))> ROUTINETML --------------------------------------- Premier exemplaire d'une revue franaise sur disquette consacre Hyperstudio. Son mode de distribution en shareware est original. C'est le paiement du numro actuel qui assure l'envoi du suivant. Chaque numro cote 60 F, la priodicit envisage est d'une parution tous les deux mois. A dcouvrir, ncessite de possder le logiciel Hyperstudio v 2.0. ART.HyperStudio Informations ------------ Une nouvelle version d'HyperStudio est imminente. Cette version 2.1 incluera un Run-Time. Cela permettra de crer des piles qui seront utilisables et visibles sans que l'utilisateur soit oblig de possder le logiciel Hyperstudio. Une licence de $100 sera demande aux dveloppeurs dsirant diffuser et mettre en vente des piles cres de cette faon. Les outils de dessin seront amliors et Hyperstudio sera capable d'importer ROUTINEv' ''DREAM.S1 0DREAM.DEMO[W$*DREAM.LOGO\,$UDREAMVWXYZԠƍÍÍǠ ̍Íōðððؠ̠ð̠̍ؠð 卪 ð Рҍűҫ卍ҍҍ占占ؠ̠űؠ Ԡ̬؍؍؍ؠŠԍ٠ Եؠ Դ̠űŰؠ ĠƠ 占ĠƠ ŠԱ̬؍Ġ̬؍ԱĠư ŠԲ Art.Astuces Transfrer des images du Mac vers le GS --------------------------------------- SHR CONVERT (2.1) de Jason Harper permet de convertir facilement des images de type MacPaint en un format utilisable par l'Apple II GS. Ce programme est disponible dans la bibliothque domaine public du GS Club. L'utilisation en est trs simple: - Formattez d'abord sur le GS, au format Prodos les disquettes dont vous aurez besoin. - Premire tape sur le Macintosh dot d'un lecteur FDHD: a) Lancez le programme appel "Apple File Exchange" b) Insrez votre disquette Prodos et utilisez l'Apple File Exchange pour transfrer les fichiers MacPaint qui vous intressent sur la disquette Prodos. - Deuxime tape sur le II GS: a) Lancez le programme SHR Convert b) En utilisant l'option adquate du menu File, changez le type du fichier convertir (FILETYPE) de $00 en $06 c) Suivez le mode d'emploi de SHR Convert. La conversion donne une palette en 16 niveaux de gris 640*200 ou une image noir et blanc en 320*200 suivant l'option choisie. La pile est-elle morte ? ------------------------ Les symptmes de la mort de la pile de la carte mre du GS, pile qui devait durer trs longtemps... sont faciles identifier. Le GS perd la mmoire. Au dmarrage, il se met en mode standard amricain d'autorit et il faut reconfigurer le control panel chaque fois. L'heure et la date deviennent compltement farfelues. On peut trs bien utiliser le GS ainsi. Cela ne gne en rien son fonctionnement. Il faut seulement mettre le tableau de bord jour chaque allumage. Mais si on veut changer la pile, il existe deux possibilits: 1) Acheter une pile spciale chez Apple et la monter soi-mme ou la faire monter. Cette pile est soude. il faut d'abord enlever celle qui est use. Pour cela sortir la carte mre du boitier, couper les pattes de la pile ras du corps de la pile.Dessoudez chaque patte en la tenant avec une pince pour dissiper la chaleur. Attention de ne pas surchauffer le circuit, les pistes se dcollent et c'est la catastrophe. C'est du 4 couches ...L'usage d'une pompe dessouder est recommand. Insrer la nouvelle pile dans le bon sens, attention la polarit,souder et remonter l'unit centrale. Si dmonter la carte vous rebute, aprs avoir seulement enlever l'alimentation, et en laissant la carte mre en place,vous pouvez couper les pattes ras du corps de la pile usage et souder la nouvelle pile sur ces pattes qui deviennent des picots souder faciles utiliser. Aprs, on coupe l'excdent de patte de la nouvelle pile ras des soudures. C'est ce que j'ai fait et le GS se porte trs bien. 2) Acheter une pile Nite Owl's qui se monte sans soudure. Elle cote un peu plus cher et pour le montage cela correspond la deuxime partie ci-dessus, sauf qu'on ne soude pas les pattes sur le reste de celles de l'ancienne pile. Les extmits de la Nite Owl's sont enroules en ressort et viennent se fixer mcaniquement sur les restes de patte de l'ancienne pile. La mise en place n'est pas aussi simple qu'il n'y parat. Sur un GS muni d'une pile Isralienne de marque Tadiran, la Nite Owl's ne pouvait entrer, le diamtre de la fixation tant trop petit. Il a fallu couper et souder. Par contre, aucun problme sur un autre GS quip d'une pile VARTA....Le fabricant est d'ailleurs explicite et dconseille le montage une personne incomptente. nopqrstuE6789:;<Art.Dernires Microcam -------- Samedi 12 Mai "La nuit de la micro" Au chteau des Loges partir de 16h. Information: MICROCAM 19 rue du Pr Perch 35040 RENNES CEDEX Prsentation CAO/DAO, images de synthses, PAO, Expomatique, Espace Apple 16h Ouverture 18h30 Concours Microcam 19h30 Apritif et toute la nuit poursuite des activits... Apple France ------------ Au moment o vous lisez ceci, les nouveaux produits doivent tre chez les concessionnaires: GS/OS 5.0, rfrence produit A0013F/A, prix 230,00 F H.T La diffrence avec GS/OS 4.0 est due au manuel deux fois plus gros. Le nouveau GS Rom 03 et 1 Mo de RAM sur la carte mre, rfrence produit BGS 8 pour la configuration couleur et A0012F/A pour l'unit centrale seule, prix inchangs. La dernire dition du guide de l'Apple II est quasiment finie. Elle devrait tre envoye, courant Mai. Tous ceux qui sont rfrencs par Apple le recevront directement. Les dernires nouvelles: *********************** Lundi 23 Avril, le Club HyperPomme Paris avait invit le Team Apple II sa runion hebdomadaire. Au programme, prsentation du II GS 1 Mo, du systme 5.0 Franais, de l'AppleShare et du nouveau "Guide de l'Apple II". La salle t transforme en amphithatre et l'on a sorti la limonade du frigo pour la circonstance. Nos Hrauts de l'Apple II, Marc Ducamp et Emile Schwarz, arrivent les bras chargs ( Il y a mme un Mac SE ! ). Installation, atmosphre bon enfant, on peut y aller. Premire annonce importante: le Nouveau GS a commenc tre livr depuis une semaine environ, en principe si vous achetez une machine partir d'aujourd'hui ce doit tre la nouvelle plaque mre 1 Mo qui l'quipe, vrifiez-le et rlez s'il n'en est pas ainsi ou essayez d'obtenir une forte remise !. Nous ne reviendrons pas sur ce nouvel engin dont nous avons publi les avantages et inconvnients depuis dj plusieurs mois, ne jettez pas votre ancienne bcane mais exigez la nouvelle si vous vous quipez. Le GS/OS 5.0 Fran !"#$%&'()*+,-./0123456789:;؈؈؈؈؈??<<?@ABCDEFGHIJKLMNOPQRSTU|0 h|0 r0|w|;)I|. } Ȁ } Ȁ 5) 5x|"|GA 99 9ҍ9( t|k0Щ2 T3ЩTK|DH2 "hH2 "hH2 "h H2 "h "~Ll"p`~LlLLi֢ ~Llf} f}"{ [p~Ll q"8{Ll [p l,Ll)ߏ [p l*\ࢭ [p|ɽ|0 m\"\|. [p|ɻ|Ɂ +m$\%\HH"hh | [p Jm F(\|H|H"|k:< +"4}}"P(ddD) "( "+\ sm|\9Ll|.0%0'~) Z rzȀ00" |\" \00" ɳ pa \ \6" ɶ6 o \\X" ɶX o&\'\"s Wn| \:Ll"fs": Mo| \;Ll""s|"s|HHHHH""") |Hڢ"ᨩZڭ } } }"1 zp=|᪭|i ᪘iii|`? zp|m|m" m`3 zp|}|} #n`9 zp||*(`4 zp |nm|mm "lm+` + q" ||||.}.}|:.}||" |T|0쭤|ɽ qf} }"<ϩ|.}3 p||"P p #n|H" |h+a8`` |+ >|$)i$ei r+` q.}|||:.}" |a||||" |]|0||ɶɷ| qa }"<m }"<ᐲ" |$.} o||`H" |ha8`` | p9|4o|3o"z&ڋ*"2ohJ| p"+`| q.}|" |P|||||" |>|0쭤|ɸ ɹ߮|ڍ| q.} o p|F`|H" |haJ8``|P p7HH|H|H"hh8`|ɸ"`"`HHHHH " ;[||||+`HHHHZڭ|H|H ||z`H}|}|}|}h p`ZHH "`hzHHHHHHZ|H "h*h|h|hNhP`H*H"`؏" | q" |x|||||" |M|Zɳ |Rڠ) }! }0 }a{8  ʈ0h0hH" |8` } } :᭤||`ڠ0ȳ.}0`|.}.} }.}"` |H|H;[ hh+`|ii r0eZڠHHH  ei0{ ( Z;[) Z rzȀ뢎 rhh+ `HHHHHZڢ$"hhhh`K0wTRwww  wp wwww᫫ 4)wA) ݢ w t [v {v v v t s(`Kx0w0"w tww00 t sw((k  `Kx0 u s t((k00`Kx0w tww t  ((kKx0w0w tw "fsw((kK0w!wMtHItH"#"(`ZK0w !v7 uMt/w0 )  w t w uΔw ,uwwwMt(k t u ))?) ` ) s`w5))wwΦw) )  t8`eD`w) s8`)H @ ) Www$D uww www-w w-w w-w w-wh)hh`OOK vww u`K u`It"`)H @ ) ,uw$ ,u ,u ,uh)` zwͶw`w4)\ t`)8`" w`C :w Mw- hw Mw :w`KFwww:Jww wmw`KOy %ww wi%`IW w %w w`# w`)#) w`U w`U w`U w`i`xxw*:system:start.gs.os ppwpwpwwwwpwwppwwwwpwwwwppwwwpwwwpwpwppwpwwwwpwwwwpwpwwwwwpwwwpwwwwpwwwwwwwpwwwpwwwwwwwwwwwwwwwwwwwwpwpwwpwwwppwwwwwpwwwpwwwwpwwpwwwppwwwwwwpwpwp??? ?0<?<::>""``2֜.֜6֜:֜B֜ל"֜$֜֜ ֜&` $H"H;[0/Hȩ:/ȷʎh0hh+` 8ߐ$:֭40 \נ8נ"֌$ A`"6L Liӭ4B00:׍"֩$ր$ڬ"ZZ"x$֮""0 "(tHHHHH.H "W&A$8)25 lj 8߀6 lߩHHHHH$H"HH "h*hhhNhP֐Lߢ\ ߰) ""z"h0H0x;*֍,֢0\́@ [2) '؍թբ " j"֬$֭.HHH""zHȢ :Z֤ȷֈ h եե" [է&A (؍թ" 3>ȷ):ե" pՅ  d#", J" O80 "3 ֮ր +"ɳ++` "hi "hi 0HH "h:`,400k)*!0 $H"H;[0*hhhh+č$%& ݰ[ ݰSLȍ$%& ݰ8э$%& ݰ$̍$%& ݰ0T0Hk)(h0`" 0"0`` ** 8 kH$֍H"֍H!"h6`" #Ս8֭ ݰT8``0)6ɳɵ \(8`(`᫫ּLսJHN "ް i Hk "ް( "ް@ "ް "`HHHHZڢ "z`05HHH HHH֢ "h h"Պi `᫫N6HHHP֭*H ";[NhJhL֘ N[mP:kH"` H"`LHJH"᪩JLkhhk HH"`hh`V@,֝X2֝X_`V6֮VʽX֍.֎V`8`V`X.8`کHHHH"\`Z")H0ᪿ 0 "̬؍Ġ̬؍ԲĠư ŠԳ̬؍Ġ̬؍ԳÍà̬ؠ ̠űŰؠ ؠ 占ؠ 捠̠űŲؠ ٍ؍؍؍ٍٍؠŠԴ ٠ŠԵ ؠ ㍠ƍԠ̠űŰ؍؍؍ؠŠԍưƠ ؠ űİ РĠƍ̠űİؠ ؍ؠø ŠЍÍà ҍРؠ̠ð̠̍ؠðРбؠ РĠƠ 占 占Р̠٠ð̠̍Р̠űİؠ ٠ ŠٍŠō؍ؠø ŠЍÍà 󍍠ؠ÷ РĠư 占 占Р̠٠ð̠̍Р̠űİ؍٠ŠٍŠō؍ŠЍРѠĠ ÍàбĠؠ РĠƍР̠٠ð̠̍Р̠űİ؍٠ŠٍŠō؍ؠøŠЍÍō٠ðٍ̠ڠð̠ؠð̠̍ððӍ̠ӠנҠӠӠ#DREAM.DEMO by CROLL G"BLOADDREAM.LOGO,T$C0,A$1000"V"-DREAM"]^_`abcdefghijklmnopqrstuvwxyz{|}~BBDB"##UffveC3"#""2B"#"#3C"B"44T"#eECEUVgxBBFBBvwvffgBfeeUUC4"D %fc#4DEjUBfUBB"3EBeU3D"#C"3""B"2T#!#22DDfVgwBFFxBwBf vefeUUCC"!D"UeS4EViUgwvfuvvBB !"#DETTCCE"3B"#2"!"2""$3""2"5TUhDFBwwBvgBfeeEC2""!WfCFWyvwB "#34CS22D"3B"#2""2""31""!""5fVgh B™BwvvgDfeTD"!!DfeFfxEBE!E!"B"332B"!"D"#2"!"#B"!"#B4VfxxEÙxw vgffeUT3"!#FvffyEB!B"""E"E"3B"B!"#D2"!2"2DD5WgxBDExwwvgfgfUU32!"4effBBB!!!"""B"22"C2"#32"4""#4"!!2""##EEVvxB™BxxwwfvgveUS2B!B$UfgBFB!""#"""#"2#C423#3"#22"5B!D"""3DUUVªDwwgvwfeUTCB !!"DVhBB"B""2##D"2#"##BDC5BDDB"4#"$B1B #5dB"3DEWgwBwvffUS!B !#DFhFB""##32C3"B##23#$EETTEEUD3"C""22!#!2DBD4EUfwBBÙBxxwvffeT"1"EExFB"""3BCDB343CCDEEUTD3#2"#!"4$CT4EVwxBDB EBwgfTB!D4DhFB#32"##"33#C3D4DUUTUDEFU#eUeeVUSB2"""#"#!$R"4EUVgBDB xgwffvUS!D"eUhDBCB3C4DCDTDEEU(fVfefVgfggffUD3""2""2B"!U"CEEfwBDBEDBwfUS!"5ExBDDSSTEUFeffwfvgBwvweTD3D"!#523SCFVfwE  DEwwgfeT1"4ExB EUTUTUVVUfVgffwfBv&wwvwwxwwUTCB"#2""!$DR"TEFVfxF BBBwvfuU2"4EyBVffVffvgvvwvwwwgxwBwvUU2B2"2"!!DE!"#FVUWgx»B BBvvfvU2B""3FBBBWfvwBgffwgvgwwvwxwxwxxBxfUU$3"3"!"D$S"36fWWwDB»BBxwwgffe2BB"3WBB wgfvgvgvgvxwxwwwxB xvUT3"#2!"B #TDUD3Ufvw˻BBBBwgfeBB"#3WBwgfwgvwvgvxxwx wfUSB23!""B5DEfFffwwB̼́DDxwgfeB!"#4WzBw vwxwxwwxxxvUT3B"!""B!#ET5UUVwxB˻DBDxwgwfS!"##$g˪BBFwxwwDxfU53B"#!!B ##f4EVWg ̻̻EDDwgfC!"$#5xEBFwxFB wUe42""!2 $"46eEUfgB̼˻EBwgfT!"3ExDBwwwwˆ$VdC3"""1!$$DxeVfxʻBDBxwxwwweT!""CUFBBwxvwˆB wuVSC#B"4"!!CCEhwBBEBwgw fT!"DVBwwFwuf3B"!"#BB!$ESGwBBwBw veS!"5fBB wwxxwwˆB gu32B"42!##5TEhBEDE wBwgwveT!"6gBBxxxwˆfd3#""#S"!"#B#5UfwDBBBEDwwvwwveT!"4yBBxxBBVcD$""$R!#"T"#EVx̬݁˻̻BDxvgwvgfvT!"5yB̼BxxDEBBvVBC ""D2!"B" $S#DVwDBB˻˼̻˺BEwvwgwggfT1"F ˻BBxxBuVCCB"#D2!!""2FSEfxEBDB˻˻BxwvwfgfvT!#V̻BxxEee54"#34!!""2"4VVxEE ̫E'wwvwgwgfU!!3iz˻Bwxwxˆed5C"33C!"C#"FvxDB™BwvggwgfU!#3zD˺BwxxwFB VSEB3$2B!#$2TUgyEBEBvwvffgfe!"JiBBBwxBDByVCD32C#2!!!!"BE4ewEBBwwvvffU2&uiDBggwwxE%eCD33B32"!"!#DDUẂ˻DBBwwvvffT2#vvhBBfxwFBfTC3B4"32!"!B !"3UegBBF B wvwvvfU2g8ɘvxDBUVfgwxBvgeT44C3"2"!!"2CUxF EwBw veC4"ghxBUUffwxB'wfueTE5B2#2!"!!"3UwDwvwwffB!(WfhwgxEB TUUVgxDvVefSEE3B"2!! !""$FzBFDBFBwwvwwfeBXfgvggxBB(DUUVfw̻vVfeCTU4"3"!!"DB"5gFEBD"xwgfeR7uhvfVVhB TETUVxBBwffv4ST4"#"!""B""EwFEBBBExwgffTz˄5uvfTUfB DTCTVwBB vtDTT""3!"!"""VźE̻ªFBDwwwvfx2GwegffdUfwBB DDCEVfxBBTEFC"3""!!"!"4gD ˻FBwgb#ggfgudtFfwB&DDCDEVh˻TDVS"22"!D"!""5xܻE$xwxww"4ffhvdGVVxB&CC4CDVh̼̻DSSB#"2""!""#FwۺwvwvwfVWgEBBwwy1"FeVev s%vfxBC43C4UgxDDTS2#""""!!"!"$ViDDۻwvveU4$5D$#DEuvBEBDxxf5Uvxwe4ivwBDB34UegwEEC""#!""#T1""#4VE̪wfeedC22##3""C#UfvxBBDwxwxB%t5UueDfxB"43324EEVgwwx˪dTUC""2B" 6xd""""#4VE̪feS23$3""2##TfWD wBẇ!V3EEvwwSEVwBBBB3"4U(VwxʺDDT2#"2""!'S"!""24hܺwe43C43#"##D EVxBBDwwu"$S"EFvwcDUvhwBDB34UVfwwvww̻44TB"2B" %t#""##Dx!̼˻˼˻wveTTDC3CDTUUhBB(fvgwfwwx̘vA42#EFvxeEVvffvxB34EUUeBfxwvx˫DEC""$D" zB2"#4UyB˻B#wgvfUeVUUeffhvfVfgwyu$A"4SVuUUgeUggwB34334UVeBfgBwxB ʪUDE2"3D" IS""34VB˻BgwvBwgwwvhxDB)wfUDC33#3EVyʙgb"5TWxeefdDUVfvB33##DUVeDfwgxB ˺TET2"3B"4Fc#33EWE̼BwvgvwwwwxBBueD#D"#6xhvB#5UgwxwBe3$4TeB#3##4UVVeUffgwfwB CES"#"3B" #DEzdCC3EgDBEBBBwwgwwxxwuE2B"!!"GuVwv1!"EUfwxfTU"##35B#23#DFUevvhEv3E3""#2"#"$UEYtC34FxBDvvfuefvfggwwxBB vUC2B"!"$z˕EDUU"#E5ggxfT42""23B""#"4EUUDCDDUffwe#U2""#B" #4UUXuT35WyB˻BvfEC$D$DEUffgwxxBBB%vUC33""!""8d##DE"$TEvwyvT"B""B23#34EUUC3CBDVfwwwvxgc4TF" #4UUWT3Eg݁BBwd3B#B" "##$UWggwBDxxwveUBE4425ɧ2""3D"$TfvwzvS2B!B#B"3EUUT33#4VfgwvfgfwVBTBF"4DBUTEFW˻BgT3""E!"4VfggwxwvBUfVeBTzT2B"2!"5TVwvvuC""!BB"23EBU D334UUfwfeUT#D2!B"""4UffeweUUxB˻uCC""FD"5UfgvxvvefeBUeUUXTTEC33!"ETVwgwfeD"#B"#"33EBUC344UUffefUTCEUC#3D""#EUBfyfUUyB v332"!E"#EVfwwBwveVUeeUvUUDDS3""UEfvgwgfTDC"!!B"#"#4U&CC344DUUTEDC5UT3#2""2#"$VffwwxeeVx ̼D322"B#4Ufg˺wuUTTEEBUgvffeUS4!"TFWvhvfUUfvT2!BB" #3EUfeTC33$4D335TD332"#"#"5ffgweVvUgxBT4""#B"#33#EVfx˺vUDD4DEyBf eUVTS!$CVhfgBUgS"B"$EBfTCC3#3DDB34DTC#32!!B"23gVfgeUFxvgwD˻eCC#"+!"!#232""$3C5Vg˺weT33"!""(vfVBfeUR46efuhuUVfuB!BB"#3UfwveT32#33DC3BDT23B""B"24eBf eUVwwBgfvfvfUDDB!##"94DEVw̺e32!""e4TVUUfeE25UUWeeUfy˹T!B2B"4EVgwUTCB3CD33C4TS332""""#"EDfUVx̻BwfuUDU3"C3"#""#EVfwB,̻T"!"!"Ze2"#EEUVUUC#UEevVwwܻu"B"$EVgveTCB3 C4C3C4DBC2""!!""#"EefVffUU˻ xvueUTDUBE4D3UgwܻB""W2!""#$DVUUB$DFUfWxxܻu"B"#EVfweTC3 D3D4DD3C2""!B"2#EVeBU VUxx̼E vffeVBU EeUfxxB˪B"BFcB""4UUT#$3UVeh̹"B"#5VfgfT33434TBEDCEB2D"#2#EVBU VVexx ̼˺vvBfUfVBfxB̻2"B#jU!!"2UET"$6UFuh˩u2"B"#4VffeDC#33EUfvueDTCB" ""2"$UVVUBV f{y˼ wwgvVefeBfB#˪"!!uC!!"#ET"!5DTgVxBܺeC#B"#4VffeTC43TgxeeT#B""$"%Vefefgfv˼̼BBBvfeUfB#˺2!!$d""!#43""4VVvgxB˪UT4B"#4UffeTDEFgyveS2D"2"%DfwvwʘB˼D vfUUTBUg˺C!##yv2""##"B""4U6ehyEUTTB"#4UffeUewUVS""B""%wfvfvwx˘B́xvgveUUETTEg̻dTThUC2"!"B"DTVfwDvffgB"#DUffVfg˺Uf32D"2!%xvvg˨̼wvfuBUTUUViBB ˻TEXtDTCD"B" #TTefwyBwfwxB" 34UUfVwyBxu32B"!"B!Ehxww̨˻ ̻˻vffVDUVw#̻TWuUUTT5B32"2!!"#DUehvyB xB"#3DUUg wd3"!""#2DXx̨ ˻vffeBUfgܻwd4EUVeDUDCC2""#EUUhfxBBD",3EUUg̺evS"""$"EF˗˻ ̻wguBexDܺdS34UUeUD3""4EEUwfxBBD",3DUUg̦xuB"!!!3"Ffx˺̼̻BwvwwB ̺S3"3BDUUVUUT3"#4eEfghBD".3DUUgwd""!"3"Gwx˻ˈE˺B?̻fC3#34CDDUVUT43"""#ETVwfxgBD"3DUUg˶eS"B"2"7xܺˉ̻˻̼B,̻eD3#4CD34TUED43"""#ETWfgwUgfBBvB")##DUEW̼xT3!"2"7ܻˉB˻B̼BFB,̺UT343DC3DDCDD32""##DETgeggUWfvvwxwwgBD"3DDTUxC2!!#"BBܼˉ˻BDD̼̺TT443DCCDD3CD3B" $3DEEVgvUUeBfggfhwvvBD"3DDTEggxdC"B "!#"BʙDDD˻̺BTC4DDEDCC3322""4#TUWvVwBUVeBfeeBB"#"344EUWgxwVv4#""!"2#S"zDʙBBEBB˻̼B̺eDUSEDEDEDD33#2"243CehUfwxU TEDED4UUTBE"4DEBU VgVeUT22"B"33$S"!zEʙBBEB ˼˻˼BD ̺eEUTUDETUEBD T#3"D3EeyVfgxU TDDECCUTTBD"3DUDTUEEUeU322"B"#2$C!!JE˚BBDF˻˼DB̻uEUTEU S#2cDEeVWgxBe UTC4DTETTDBE"3DEUDC32EDT322!"2$B!9D̻BBD̼ ˪UUVfUeFU TC$eEFXueVWxBv fTDTETEDD4BE"34UUD332T433""!""!B"#B"'FBDB˻BBܺBUVBfeeUfBUS5DUeXeefWxfeeUD3C4BE"#4EUD334U42##"""B"#B!!$EܻB˻B˻B˨eUBfvDfeUUSW4UeUefgxVeTCCDB""!B"#CETD33ED3"2D"!B"B"#2"""lDʫBE˻E ̺UUVffgfefeTV5VeUefgxB vfTC34BE"33DD3#243B"CB"#""2B":ʻF B*˺UTfUfgvgfvffgTu5fiVEfXxfT334BD"##CD32342""3B""!""E" !"$ʻDDD,̻UefefwggwfwgfEe6fyfV5fWxfT334B"" ##3C223D2"#3B""!""#"ZBB˼˻EB+̺UVgvvgvwxwwgeWdWfvTEegwwvCC#3BF" 223"#4C3""3D"!B"2""!!"#"$̻DBBBD*˪eVvvfwxwxeW5gfeTEUfwhvuC2#4B"""4EC32"3D"!B"#""!!"T!6xB˻̼̻BD*˪uffvgwxxvfhFwieSEUdeVedB##3B!!""4U3D2"2"!B"#B"!"B5vfz̼˻̻FB˼DBDB̻vefwgwwwvwwzfUT%5cSDUfVTD##33B" !"#5e5TC#D"!B"##""""B25TSCiB˻̻̼F̻˻yD+̺vUfwgwwwvwxveUR6FC"#44DDTD$"2#33B!""B"$EuVTCD"!!B"#2""#!!"33X˻̻DFBBx̻wUfgvgwxwwfeVRV6"344D3B"B3B!"""""#EuWUSB""!""2"#2"!#2!!!34GB˻E w̻eVfwwxB xvfgeVBV6!B"#B2""##23BD"$fuheS"B""2"41B" 32"#EGB˻˻ ww1̻̻wfUfwwxwvhgTfETR""#"22""3#24BB"!"D $Vhue""B""$EB"$5B"#!#EV˼DDwxB˺vUfgwwxghxfUe5T2B"2"##23CB""""D$XycB"!B"$V2""$EA!"5!"$UU˻wwBD$wUUfvgwvfUUFR""332B"3DDB""!""D#fuyB!!!!""#UC2"$VRB" !"$Ufz»Bw˻wvwUVVggxwfvFfV!""#343DD3B"DDEB""!!D "FUh3!!""#fSB"$WR"#"!"4Vf˼DEvgg˪u3X weEUfgBwvxwfeEe6""4EeVVUUT3224TEUB""!E'#EVX2!!"$vT2"5VR""#5gw̻B Fwvf˪wUVgyBxedDUVfwwxvwgVeVeVUUfBwxwgUS3CEBUB!!F*#EfguB!"!!"!44vS2#%VQ""2#!"Egx˻ wfvBBwB(vEDDUVfwyxfWfTVgfwxvTDEVVUUB!$#DfgS2!"""EES2"%VQ"2B""UgDBD wffxBBywvdDEEUffwxx wfhvfUVgxD TEUffUUB&#UVfC""!!#"UeT""%WQ"2C#!fBDFvfgyxxwfeDETTUVfgyBxxvfUWE UeefeUVB#TVU2D!""WUd""5fQ"2C2#hwvvgx"˪wvgfVDCDEUEVfxwVfwgVEhD ˺ffVfVUWB%3DUE"!"!""GeS""6fb"3D"#hBDB wwghD ˪ggfVfUUDCDDUEUghvVUwgUFyD ̺ffeBUWB&"CE3"!!2!6fwT"#5fr#ED"!#x˙EDBB wxxDvfeUEEDDEEUVgxywfVvfUWE˺vfeBUgB #C3""!B"!GwfT"3%uc""5T""#iDBwBfVTUTDUDTDEVgvgxefFffUX̼B̺vfeD4UhB"23"!D"!GwfT"2$vS""6T""#yBEB B weTCDDTDVhXhwEeGeeUXB ˺veeD3VhB*"2!"!#!FxeT"#3ve""6T""#yBD ET4B4D$4DUehvxWEeVeeUh̻˩ffeC#WB""!!B"B%!"3!&xeT223Wf"#ET2"#i˨  ̻d4334ED%C34UUgvhR6UffeUi˼̻vee3#WB32""D"B""2!"$geDB"#fw1#UT""#z˨ªB F eTCC4D3BDTC33VVffef3fUUfUU{D̺ffT"#gB D3""!!!"B"!!$""#xuD2"#FfB$5D"3#jªB ˻eBUTTBDTD33UUVWVd$eUVwfVB ˩wwfT"$gBU332"B!""B" #3"""We42#"GfS3%S"#4zBªB˻Bw fVUUDDTD3CEEBV T5eUVvgVD ʘvfS"5xB VD32""!E""42B"""WfD2#"7Ud5C""3y˻Ī BB!˺xvfUEETCDCEUVUUSFUeVuggD ̪xfS"FB fTB2!!!!""#EB"!"WuS"#"4fd!4R""#y˻DªBBvffeUTTED5eUUT3ffeVeXF ̻xT4WB fTB"!!!"!"!"D4""!!"GuS2#"4fe!#B##y˻F̼BxxhDfVUECTEeUUT$ffeWftjD̩wxUUgB gT2"""D""332""!""DFuD2""6vV1"""#iD̻DveVDUVTU4CUD6ffUhfekBB̺vvwyeVhBwTC"#D"##2""$22""!"$TFvEB"FFUB"""$iF wwggffDU EUUTUUTUEDBU SCVVeFwfV{BB̻ufwefhBwdTDD3"32"442"!"2#B""DUUvE2%E6UC"!"#iDDgffxwveUEUETTSSDBTETEEDUTUU2DffeVvfVDʩuUVhwfVhBwfUVBU DC3DT2"!##B!B"#DVTfEBT45eD"!##iFBweB2EffeecCET3EUUTBD4"##DED5UDVS3EvfTvfvZveUUhfUhBwwffwgfUS2""2#"#$FfSVUBD25EfD2"#ix7eB1##$ED3DUeUDUT3B2"##23FEEeS3VffEvfv|B˻UUDExeDhB5wwxwvffVS2"!#3"332##UgTC5UE3"5EVe2""XBvTC"!#DD3EUUTDET3C""&"#TUUeC3gVeWff˪weUDDFxvU4hBBB/vgS!""34C423"EWeTCEVS""5EVeD"""XEvUDC2"#"B4C#EUUS4UT22!"B'"$DEVe45vvfufh{̺veUTDEFwwfU5BwB.wS"#VTD24"5FfUTETUB""%UEvT""XFfeUveWxe2!!"4UEB4DC""D "#TEEUT4WgfgBf˪veUTEDEfwvfUBWB7gB"#WDS2"$CgeDDEC422"%eTvT2!"GwªvfggSB"#TD24D2"(!"4TEUUCEghvwgfv˩eC4DDEEeffeT3hB5gsB"EeS$C"#UUeeDUC2"4!"$uUfTC!"GwBB wwxxBgS"!"22!##"B!"#4EBUCWwwxuwgy̺uSC4DEUUeC%Bh C#EeC#31D5fBU"EU2"3!"gSDU"6vxFxDveT3"DD"'#DEeUTEgxwwfwhʘuS323EEfUfDUT2GBxu3Vf3$DEUeVUEES"!3!WgT%UB!!&fwiEwE ̺xweT"B#-$#"2""$DVUUTFwgffg˸UC33DDVUeVT53$hBxfVeDSUEUEUVVTUECB"3"HwU"DS"&yfwxDyE weUBE,TC33#4UeUeEXwxffefܺVDCC3DEVeeVUC35hBBfwfUUfUffeUDBT"54D32"'wd"#D2%yDvgwBBBBwBf eUC33UfUVeFvfUVh̩fTDTDCEUVfBUC35xBBxefT$VfwxvfTDDUCDWBwdB"!%u23C!%yD vvwBB;gUUD4DVeeVUivuUUV{ݼeDTUTDEUVfeUT33Eh̻B,feUTfxxwvU"$T2gvS"!#fB"3"$ xwVfxF)veD4TfUUWhyffUTg̼S4BUEEUVgfeTCDEgB e46wBT2$T3hBvd"!"xgc#2#hB wffgxBBD!vUTTVeTDgigfeUEW̻uDEUeDU VeUUETUgxBvdUgxwe3DS$ye"BXvt!#"#XveUfBBBFfUTDfUTEvzffVUUV˩dDUUVU UUTUUgxBBUVfeTEieD323YBu""!"Uv1""GxBwfeUfgDFB BwwfeeUTDTU4WhBf UCUWfTDUBUVUDEBUffB2""4VxxvU3#4gBeB!!DIxR!"%hweUefwExxwf&eeUTDUDCEgVfeU4UidDDEEUUEUETUUeVeBDTDFEBDB"FfvdEgeB3UXE uB"!"TuB2""GvfUUfwwxwxwffUVVfBUTD4fhvVeUC5UzuTBDEUUTEUUVeeUEUDTDUUB<33##FvwwgfUUEWfS""TY1!"4hvfUTeehwBwfvvfVUVUeBUDDED45feVUTCEEUUDDUEDDTBUeUUEDDEBUBfU3EgxwgxxVUTgB weS!T!bB""GB wwfeTTUggxxBDBvfVffvfFUEDED4EExUUTT#TWB UTDE4CDTDUTEDDEBUBuUfxwgxwweUWvfS!D"H!"3gwgfeTTEUggwBDBvefeUeFUDTDE3EFVUVUC3#TWBdDDTUEDCDDTBUBggB wgxBvfC"4!#QB"&xB fvfeUUDEVfxDB'vfeeUUDTUEDDEDDECCEVxUeCD33TgBuTBDEUTDCCBDEUUBBB2eT"3!6"#!"VvffeUDCDUgxxB ffUUTD4CBDTUCTEWeUc4434UyTBDTBUTEECCDUUB DfT2#1Xb#12vBwvefeUUT44Vgwx$wfeUDCB33233DCDETDEUyuEUD433DExBBTDDTU TDCCDDC4DDBB DE wU2"BV#3"%fwfvffeUUED3EVfw wgffdTT3C3#B3DEEDUXTEUD343DEwuDDDUBTCC3DBBF eC""c"4DC"FfeffeeUUTCC44fwxBweeUD4D3DECUFVDU343343ExxBuUUDD34DD4BB uS"D $b3EC"!2EUVVU TDC335fwE xfUUDC4B3 ES4UiWuTUC4B3 D4VxxB eTETUVVfeUTDDB D̼B ˻fT"!"!D 4UETC!"3UUVeU DDC33EVwx"veTUD3DFtDUXuwUUT4334CCEVxBeBUVffeUEDUBEB̻fU2"!D $fUSB!$UVFUD33DUgxDE&fUUTCUDUUXuUUT3#C4CCEgwwxBUffgeEUTBBED veUB"!B "##EUDC!"5UBD4Egx vvfUVfBUzxfgDUd33434E4UhxB UVffgffeUDBED˻veUC""!""D34TC2!DFU EETTDVgxBvffwBUiefcEUCC34E4TEVwxweVDfDUTBD˻˻eTC1!"!B "4SEUC3B""EUUTDDfwEvgeUVWvvf3UT4334EDTEVBwBVfVBfeBUETBBB˻̻eTD2!!!!"3TTUTDC$"35UTT4EgxDBvffVWffc5U3D344TDTUVfvww vVffeeUTUDUBE ˻̼FB fDD2B!"3EVUTTBD22DU fUUTUDDVgyDBB wfvfVfv4FS3C#DECTTUffvwvwwxBDfeUDTDUBD˼̼FBvTD3!!!!"$4VUTUUDDUVEUDfhB!wvhxvufdEV3C34DUDUDEfgfvwxwxveBUTBDUBD˼EBUCC!!!!"$4UUeUUTDEUUUEBUVVwBB vevUUT#344BEUEUfgfvgxweDUDDUBB˼eD32!"""4EUDDTTDUeUeEUvxBwwvfuVTB344BUFeUVBf vggwxxBeFUBB̼̼BDvDB"!!B"#DBUVeUTDUTFUVFUgxBBxxgfUVeC344EUUTVeEUDf vgxxveDUVBBD˼B̼BD UD2!!D"CEUUVUUEEUUVFUVfxBBF xewUC43DUfUUefgfwwBuVBUefBB»UC2!F23D4D3DC3CD4DDD3D34DDUfwwBBwgwwxxvwwyfB33DBUVfveUffeBfvBwB fggffgBB 816/Paint DF"3DUfw DOODOO'^^UU^^UUBD@BD@DDBD@BD@DDD?"3DUfw wA,p   ?wA,p     ?wp w @ I   ?wU __ _Z "3DUfw 6H)H6A)0 '"h )H) )hH) )hH) )h8ڻ бЩ H)h8H0)0hH) 00ᬡh8H) 00ᬡh8H) 00ᬡh8h)h6`TEDITv' 'WTEDIT.P?* hWTEDIT.R * LUTEDIT ,LLFINDER.DATA6TT p PROGRAMMESv3' 'CUSTOM.GS.OSZw9 7 POLYGONIAPjANGLAISG DD3DD333308D@DD3؈DD3#031D@DD3ۻD@3#031D@DD3DDDD3000D@DD3DDD@33݈30303033#303133#30313؈3#333313333""""""""""""#030"("("("("("("""("("("("("(""333333333333#00338383838383833383838383838333ӈ3333333333#030333313838383883833;838383838383333003;۸ۈ033۸3۸#033؈߈#03#("0303030312;(31;"2803303333313#3322"0330""0333#;2؈"03300#130"#1-0313#22؈#1#31۸0"#=3#+(݈"03("02822"0#10"#13##1903122";0310"0-031߻3#0(ݻ8#1#1߻ۻ#(222222"0#1ݻ3(0"0"0""0#1ۻ283#3#3#"0#1؈߻؈߻""""""""""""؈ۻ333333333333؈߻߻333333333333"#1"=#1ۻ߻"=#1ۻ؈؈ۻ-("#1۸؈#1ۻ8߻3۸#3ۻۻ0#3߻߻؈߻؈؈݈؈0#3ۻۈ۸۸؈؈ۻ߻ۈۈۈۈۈۈۈhۈظۈۈ۸؈۸߸ [z  PL (a`P]* %r`d PYOYOPYY]WWWeݼ7"U\DeDD Dw  Art.Custom.GS.OS Traduit de l'amricain par Y.Gobin, documentation originale dans le sous-dossier CUSTOM.GS.OS du dossier PROGRAMMES. (Pour vous aider dmarrer, nous avons inclus un fichier GSOS START dj modifi. Vous le trouverez dans le catalogue CUSTOM.GS.OS. Chargez-le pour avoir une ide de l'emploi de CUSTOM.GSOS. cet exemple est destin aux systmes 5.0 ou 5.02). CUSTOM.GSOS DOCUMENTATION Paul Gauthier 10 Novembre 1988 Revue en Septembre 1989 pour le Systme 5.0 Revue en Novembre 1989 pour le Systme 5.0.2 PRESENTATION ------------ CUSTOM.GSOS est un programme qui vous permet de personnaliser l'cran de dpart au boot de GSOS.(Les Disques Systmes 4.0, 5.0, et 5.0.2 continnent un fichier dans le catalogue SYSTEM dont le nom est START.GS.OS. Dans ce fichier, parmi d'autres, se trouvent deux petites images qui sont affiches au dmarrage. L'un d'entre-elles, est la reprsentation d'un ordinateur avec " Welcome to the IIgs". Ce programme vous permet de remplacer ces deux images avec des icones de votre choix. Peut-tre voudriez-vous avoir une image d'un bug ( bogue en franais acadmique) avec une ligne prcisant " Qui trouvera?" ou peut-tre une de vos images avec ce texte: " Et ta soeur! ". Ou tout autre chose, comme un message d'aide pour vos copains. Votre icne personnalise ------------------------- Comment faire ces icnes? Avec un programmes de dessin pour IIgs ou bien partir d'une disquette de dessins ou bien, encore, avec un scanner comme ThunderScan. En fait, toute source qui produit des images non-compresses est acceptable. Avec Paintworks Gold, ce format est appel Screen Format. Et tant que l'cran de dpart du IIgs sera en mode 640 (Ultra Hi Res- Ultra Haute Rsolution), l'image sera interprte comme dans ce mode. J'emploie le mot interprter parce que si l'image est en mode 320, l'image restera mais aura des couleurs assez spciales. COMMENT LANCER CUSTOM.GSOS -------------------------- L'objet de ce programme est de remplacer le fichier START.GS.OS dans le catalogue SYSTEM par une copie contenant votre propre image. Vous envoyez le fichier START.GS.OS, entrez votre propre image et vous dites au programme o trouver cette image et vous obtenez un nouveau fichier START.GS.OS. L'image la plus grande ( celle de l'ordinateur) est dtermine par la place d'une bote (dirige par la souris). L'icne ("Welcome ...") peut tre change en la dplaant ou en entrant un nouveau texte. Si vous ne voulez que changer le texte, ne vous proccupez-pas des images et slectionnez "Set 2nd Icon by Text" dans le menu. Entrez votre nouvelle formule ( pas plus de 19 caractres) et validez votre nouveau fichier. PAS A PAS --------- Etape 0. Soyez sr que vous avez la version du GSOS que vous voulez modifier. Pour modifier un fichier qui fonctionne sous 4.0 vous devez envoyer le 4.0. Pour modifier un fichier dans le 5.0 ou 5.02 vous pouvez employer l'un ou l'autre. Etape 1. Avec l'option Open START.GS.OS File, entrer le fichier START.GS.OS dans le catalogue SYSTEM. Etape 2. Dans l'option Open Picture File, lire une nouvelle image avec votre nouvelle icne. Ce fichier ne doit pas tre compress ($C1). Etape 3. Utiliser l'option Select 1st Icon pour mettre une bote autour du morceau de l'image qui servira de premire icne (la plus grande). Presser le bouton de la souris pour voir le rsultat. . Etape 4. Utiliser l'option Select 2nd Icon option pour spcifier la deuxime ( plus petite) de la mme faon ou l'option Set 2nd Icon by Text pour entrer un texte ( 19 caractre maxi). Etape 5. Utiliser l'option Show Icons pour vrifier votre travail et l'option Save GSOS File pour sauvegarder une copie du fichier START.GS.OS avec la nouvelle icne. Etape 6. Renommer votre nouveau fichier START.GS.OS (dans le catalogue SYSTEM) et recharger. Exemple: ------- Les fichiers START.GS.OS.4.0 et START.GS.OS.5.0 inclus dans ce logiciel donnent un exemple de ce que vous popuvez faire avec CUSTOM.GSOS. Pour les utiliser, donnez au fichier START.GS.OS dans votre catalogue SYSTEM un autre nom et renommez START.GS.OS.5.0 ou START.GS.OS.4.0 en START.GS.OS et relancez. Attention --------- Ce programme supporte un format particulier pour le fichier START.GS.OS, format qu'Apple pourrait changer dans les futurs disques systme. Si l'implantation ou la taille de l'icne changent ( comme cela apparat entre les systmes 4.0 et 5.0), l'utilisation de ce programme pourrait non seulement ne pas donner les rsultats escompts mais pourrait provoquer des problmes lors du chargement. C'est la raison pour laquelle il est primordial de conserver une copie du fichier START.GS.OS original. CUSTOM.GSOS fonctionne trs bien avec les systmes 4.0, 5.0 et 5.0.2. Notez que le format du fichier START.GS.OS file a chang entre les systmes 4.0 et 5.0. Cela signifie que vous ne pouvez pas utiliser le fichier START.GS.OS 4.0 avec le systme 5.0 et vice-versa. Custom GSOS recherche la version qui est utilise et cre le fichier dans le format appropri. Ce programme est en Freeware. Pour obtenir une copie du code source (TML Pascal) envoyez $15 : Paul Gauthier 67 Sleigh Rd. Westford, MA 01886 Commercial applications (c) Paul Gauthier Nov 1988 (c) 1987 TML Systems, Inc. Certaines parties de ce logiciel sont sous copyright de TML Systems, Inc. Merci pour vos commentaires. America Online: PGauthier Apple/Boston (BCS) PGauthier. =v CUSTOM.GSOS DOCUMENTATION Paul Gauthier 10 November 1988 Revised September 1989 for System 5.0 Revised November 1989 for System 5.0.2 Overview CUSTOM.GSOS is a program for the Apple IIgs that lets you customize the startup screen that appears when you boot GSOS. As supplied by Apple, System Disks 4.0,5.0, and 5.0.2 contain a file in the SYSTEM directory with the name START.GS.OS. In this file, among other things, are two small pictures or icons that are displayed when your IIgs is booted. One is a picture of a computer other contains the text string "Welcome to the IIgs". This program lets you replace those two pictures with icons of your own choosing. Perhaps you would prefer a picture of a bug with a line through it and the text "Who ya gonna call?". Or perhaps a picture of yourself with the text "You are HOT tonight!". Perhaps not. At the very least you can expect to impress your friends with your computer expertise with the help of CUSTOM.GSOS. Your personalized icons Where do you get these icons? From a IIgs paint program. From collections of clip art. From a scanner like ThunderScan. Any source of pictures that can produce output in standard, non-compressed, image format is acceptable. With Paintworks Gold this format is called Screen Format. And since the IIgs startup screen is in 640 pixel mode (Ultra High Res), the picture you use will be interpreted in 640 mode. I use the word interpreted because it's perfectly ok to use a picture with CUSTOM.GSOS that was painted in 320 mode. The colors will come out funny but the shape will remain the same. How To Run CUSTOM.GSOS The object of this exercize is to replace the START.GS.OS file in the SYSTEM directory with a copy containing your personalized icons. You will input the START.GS.OS file, input a picture containing your icons, tell the program where in the picture to find your icons, and then output a new START.GS.OS file. The larger icon (the picture of the computer) is set by positioning a movable box over the picture and releasing the mouse button. The smaller icon ("Welcome ...") can be set in either of two ways: by positioning a movable box over the picture, or by entering a text string directly. In fact, if you just want to change the text that greets you on the startup screen, you don't have to bother yourself with pictures or icons, just input the START.GS.OS file, select "Set 2nd Icon by Text" from the menu, enter your new text (up to 19 characters), and output the new file. Step by Step Step 0. Make sure you are running the version of GSOS whose START.GS.OS file you want to modify. To modify a file that came with System 4.0 you must be running under 4.0. To modify a file that came with System 5.0 or 5.0.2 you must be running either 5.0 or 5.0.2 (the formats for 5.0 and 5.0.2 are the same.) Step 1. With the Open START.GS.OS File option, read in the START.GS.OS file in directory SYSTEM. Step 2. With the Open Picture File option, read in a picture with your new icons. This file must be a non-compressed ($C1) screen file. Step 3. Use the Select 1st Icon option to put a box around the part of the picture to use as the 1st (larger) icon. Press the mouse button to see the box. Step 4. Use the Select 2nd Icon option to specify the 2nd (small) icon in the same way, or use the Set 2nd Icon by Text option to enter the text directly (19 characters max). Step 5. Use the Show Icons option to check your work. Use the Save GSOS File option to save a copy of the START.GS.OS file with the new icons. Step 6. Rename your new file START.GS.OS (in directory SYSTEM) and reboot. Example The files START.GS.OS.4.0 and START.GS.OS.5.0 contained in this package gives an example of what you can do with CUSTOM.GSOS. To use it, rename the file START.GS.OS in your SYSTEM directory to something else. Then rename the appropriate file for your system, either START.GS.OS.5.0 (for System Disk 5.0 or 5.0.2) or START.GS.OS.4.0 (for System Disk 4.0) to START.GS.OS and reboot. Warning This program assumes a particular format for the START.GS.OS file that Apple may change in future releases of the IIgs System Disk. If the location of the icons or their sizes change (as happened with the switch from System disk 4.0 to 5.0) then using this program will not only not have the desired effect but will probably cause difficulties with the boot process. That is why it is important to always keep a copy of the original START.GS.OS file around. CUSTOM.GSOS works fine with System Disk 4.0, 5.0 and 5.0.2. Note that the format for the START.GS.OS file has changed from System Disk 4.0 to 5.0. That means you cannot use a 4.0 START.GS.OS file with 5.0 and vice versa. The Custom GSOS program senses which version of the operating system it is running under and creates the appropriate format file. If you use both 4.0 and 5.0 you should make two separate versions of a new START.GS.OS file by running Custom GSOS under both 4.0 and 5.0. This program is freeware. To get a copy of the source code (TML Pascal) for this program, send $15 to: Paul Gauthier 67 Sleigh Rd. Westford, MA 01886 Commercial applications (c) Paul Gauthier Nov 1988 (c) 1987 TML Systems, Inc. Certain portions of this software are copyrighted by TML Systems, Inc. Comments are welcomed America Online: PGauthier Apple/Boston (BCS) PGauthier. {******************************************** ; File: TEdit.p ; ; A TML Source Code Library II Demo Program ; ; ; Program By: Vince M. Cooper ; ; Modify by JCD, 1990 ; No rights reserved ********************************************} program TEdit; uses Types, { GS Toolbox Units } GSOS, { OS } TMLUtils, { Special } Locator, { Tool 1 } Memory, { Tool 2 } MiscTool, { Tool 3 } QuickDraw, { Tool 4 } Events, { Tool 6 } Desk, { Tool 5 } IntMa>b>t  |dH@@TEdit.rth, { Tool 11 } TextTool, { Tool 12 } Controls, { Tool 16 } Windows, { Tool 14 } Menus, { Tool 15 } LineEdit, { Tool 20 } Dialogs, { Tool 21 } QDAux, { Tool 18 } Print, { Tool 19 } Scrap, { Tool 22 } StdFile, { Tool 23 } Fonts, { Tool 27 } Lists, { Tool 28 } Resources, { Tool ?? } TextEdit; { Tool 34 } const { Resource IDs } kStartStopResID = 1; kMenuBarResID = 1; kFormatResType = 1; kFormatResID = 1; { Menu / Menu item IDs } kAppleMenuID = 1; kAboutItem = 301; kFileMenuID = 2; kCloseItem = 255; kNewItem = 256; kOpenItem = 257; kSaveItem = 258; kSaveAs = 259; kSetPage = 260; kPrintItem = 261; kQuitItem = 262; kEditMenuID = 3; kUndoItem = 250; kCutItem = 251; kCopyItem = 252; kPasteItem = 253; kClearItem = 254; kFontMenuID = 4; kFontItem = 401; { Alert string ID } kAboutStrResID = 1; kNoOpenStrResID = 2; kSaveChgsStrResID = 3; { Window IDs } kWindowResID = 1001; kTextEditCtl = 5; type DocFormatResH = ^DocFormatResP; DocFormatResP = ^DocFormatResRec; DocFormatResRec = record fFont : Integer; fFontSize : Integer; fTabWidth : Integer; fSelectionStart : LongInt; { These fields are only used to store on disk } fSelectionEnd : LongInt; end; TextBlockH = ^TextBlockP; TextBlockP = ^TextBlockRec; TextBlockRec = record fNext : TextBlockH; fPrev : TextBlockH; fTextLength : LongInt; fFlags : Integer; fReserved : Integer; fTheText : packed array [0..0] of Char; end; TERecordPriv = record fTextFlags : LongInt; fTextLength : LongInt; fTextCachedHandle : TextBlockH; fTextCachedOffset : LongInt; end; TEPrivRulerH = ^TEPrivRulerP; TEPrivRulerP = ^TEPrivRuler; TEPrivRuler = record leftMargin : Integer; leftIndent : Integer; rightMargin : Integer; just : Integer; extraLS : Integer; flags : Integer; userData : Integer; tabType : Integer; tabTerminator : Integer; end; WinRefConH = ^WinRefConP; WinRefConP = ^WinRefConRec; WinRefConRec = record fIsChanged : Boolean; fIsSaved : Boolean; fHasResFork : Boolean; fDataForkFileID : Integer; fResForkFileID : Integer; fTECtl : CtlRecHndl; { Document specific fields } fFormat : DocFormatResRec; fDocNameRef : String255Hndl; fDocPathRef : ResultBuf255Hndl; end; var gMyMemoryID : Integer; gStartStopRef : Ref; gTextH : Integer; gMainEvent : EventRecord; gDone : Boolean; gErrorNum : Integer; gPrintRecH : PrRecHndl; gReplyRec : SFReplyRec2; gDocsOpenCnt : Integer; nameC1OutputStr : ResultBuf255Hndl; pathC1OutputStr : ResultBuf255Hndl; gLastWindow : WindowPtr; gDefaultFormat : DocFormatResRec; gresult : Boolean; gFontID : FontID; gFamSpecs : Integer; procedure DoAbout; forward; procedure DoNew; forward; procedure DoOpen; forward; function OpenIt(theRefConH: WinRefConH): Boolean; forward; procedure ReadIt(theWindow: WindowPtr); forward; function DoSave(theWindow: WindowPtr): Boolean; forward; function DoSaveAs(theWindow: WindowPtr): Boolean; forward; procedure WriteDocWindow(theWindow: WindowPtr); forward; procedure DoPageSetup; forward; procedure DoPrint; forward; function DoClose(theWindow: WindowPtr): Boolean; forward; procedure CloseFile(theRefConH: WinRefConH); forward; procedure CloseDocWindow(theWindow: WindowPtr); forward; procedure DoQuit; forward; procedure DoFontItem; forward; procedure DrawContentProc; forward; procedure HandleMenu; forward; function AskUser: Boolean; forward; procedure InitializeGlobals; forward; procedure MainEventLoop; forward; procedure SetUpMenus; forward; procedure DoErrorWind(gErrorNum: Integer); forward; function OkAnyway: Boolean; forward; function GetDocWindow(nameRef: String255Hndl; pathRef: ResultBuf255Hndl): WindowPtr; forward; {* ----------------------------------------------------------------------------- *} {* ----------------------------------------------------------------------------- *} procedure DoAbout; var ignore : Integer; begin ignore := AlertWindow(4, { alertFlags = refIsResource } nil, { no substitution strings } Ref(kAboutStrResID)); { alert string resID } end; { of DoAbout } {*------------------------------------------------------------------*} procedure DoErrorWind(gErrorNum: Integer); var ignore : Integer; begin ignore := ErrorWindow(1, nil, gErrorNum); end; {*------------------------------------------------------------------*} function OkAnyway: Boolean; var ignore : Integer; begin OkAnyway := false; ignore := AlertWindow(4, nil, Ref(kNoOpenStrResID)); if ignore = 0 then OkAnyway := true; end; { of OkAnyway } {*------------------------------------------------------------------*} function SaveChanges: Boolean; var ignore : Integer; begin SaveChanges := false; ignore := AlertWindow(4, nil, Ref(kSaveChgsStrResID)); if ignore = 0 then SaveChanges := true; end; { of SaveChanges? } {*------------------------------------------------------------------*} procedure DoFontItem; var newFont : FontID; {local font ID record} tmpTEStyle : TEStyle; hTECtl : CtlRecHndl; theWindow : WindowPtr; theRefConH : WinRefConH; begin newFont := ChooseFont(gFontID, gFamSpecs); if _ToolErr <> noError then begin gErrorNum := _ToolErr; DoErrorWind(gErrorNum); Exit(DoFontItem); end; if (newFont.famNum <> 0) and (newFont.fontsize <> 0) then begin gFontID := newFont; theWindow := FrontWindow; hTECtl := GetCtlHandleFromID(theWindow, kTextEditCtl); tmpTEStyle.teFont.famNum := gFontID.famNum; tmpTEStyle.teFont.fontsize := gFontID.fontsize; TEStyleChange(teReplaceFont+teReplaceSize,tmpTEStyle,TEHandle(hTECtl)); theRefConH := WinRefConH(GetWRefCon(theWindow)); with theRefConH^^ do begin with fFormat do begin fFont := gFontID.famNum; fFontSize := gFontID.fontsize; end; {with fFormat do} end; {with theRefConH^^ do} end; {if LFontID <> 0} end; {of DoFontItem} {*------------------------------------------------------------------*} function GetDocWindow(nameRef: String255Hndl; pathRef: ResultBuf255Hndl): WindowPtr; var newWindow : WindowPtr; theRefConH : WinRefConH; hTECtl : CtlRecHndl; tmpTEStyle : TEStyle; privRulerH : TEPrivRulerH; begin GetDocWindow := nil; {assume failure from the get go} theRefConH := WinRefConH(NewHandle {setup a RefCon for the window} (SizeOf(WinRefConRec), gMyMemoryID, attrNoCross + attrLocked, Ptr(0))); if _ToolErr <> noError then begin gErrorNum := _ToolErr; DoErrorWind(gErrorNum); Exit(GetDocWindow); end; with theRefConH^^ do begin fIsChanged := false; fIsSaved := true; fDocNameRef := nameRef; fDocPathRef := pathRef; fHasResFork := false; fDataForkFileID := - 1; fResForkFileID := - 1; fFormat := gDefaultFormat; end; { Create the document window for our text file } newWindow := NewWindow2(nil, { title } 0, { refCon } @DrawContentProc, { Content draw proc } nil, { Definition proc } refIsResource, { Ref descriptor } Ref(kWindowResID), { Ref } rWindParam1); { Resource Type } if newWindow = nil then begin gErrorNum := _ToolErr; DoErrorWind(gErrorNum); DisposeHandle(Handle(theRefConH)); Exit(GetDocWindow); end; GetDocWindow := newWindow; SetWTitle(theRefConH^^.fDocNameRef^^, newWindow); SetWRefCon(LongInt(theRefConH), newWindow); end; {of GetDocWindow} {*------------------------------------------------------------------*} function OpenIt(theRefConH: WinRefConH): Boolean; var parmsOpen : OpenRecGS; parmsInfo : FileInfoRecGS; begin OpenIt := false; {assume failure} HLock(Handle(theRefConH)); with theRefConH^^ do begin fHasResFork := false; {assume no resource fork} (* fResForkFileID := OpenResourceFile(0, nil, @fDocPathRef^^.bufString); *) if _ToolErr <> noError then begin fHasResFork := false; fResForkFileID := - 1; if not OkAnyway then begin HUnlock(Handle(theRefConH)); Exit(OpenIt); end; end; parmsOpen.pcount := 2; parmsOpen.pathname := @fDocPathRef^^.bufString; OpenGS(parmsOpen); if _ToolErr <> noError then begin gErrorNum := _ToolErr; DoErrorWind(gErrorNum); Exit(OpenIt); end; fDataForkFileID := parmsOpen.refnum; end; HUnlock(Handle(theRefConH)); OpenIt := true; end; {of OpenIt} {*------------------------------------------------------------------*} procedure DoOpen; var theWindow : WindowPtr; isOk : Boolean; theRefConH : WinRefConH; nameC1OutputStr : ResultBuf255Hndl; pathC1OutputStr : ResultBuf255Hndl; pFileNameHndl : String255Hndl; begin {DoOpen} if AskUser then begin gDocsOpenCnt := gDocsOpenCnt + 1; nameC1OutputStr := ResultBuf255Hndl(gReplyRec.nameRef.refIsNewHandle); pathC1OutputStr := ResultBuf255Hndl(gReplyRec.pathRef.refIsNewHandle); pFileNameHndl := String255Hndl(NewHandle( nameC1OutputStr^^.bufString.length + 1, gMyMemoryID,attrNoCross + attrLocked, Ptr(0))); GS2Pstring(nameC1OutputStr^^.bufString, pFileNameHndl^^); DisposeHandle(Handle(nameC1OutputStr)); theWindow := GetDocWindow(pFileNameHndl, pathC1OutputStr); if theWindow <> nil then begin theRefConH := WinRefConH(GetWRefCon(theWindow)); isOk := OpenIt(theRefConH); if not isOk then begin CloseDocWindow(theWindow); Exit(DoOpen); end; WaitCursor; ReadIt(theWindow); CloseFile(theRefConH); InitCursor; end; end; {if Ask User} end; {Do Open} {*------------------------------------------------------------------*} procedure ReadIt(theWindow: WindowPtr); var theRefConH : WinRefConH; parmsRead : IORecGS; parmsEOF : EOFRecGS; TextHandle : Handle; hTECtl : CtlRecHndl; tmpTEStyle : TEStyle; privRulerH : TEPrivRulerH; FormatH : DocFormatResH; begin {ReadIt} theRefConH := WinRefConH(GetWRefCon(theWindow)); HLock(Handle(theRefConH)); with theRefConH^^ do begin parmsEOF.pcount := 2; parmsEOF.refnum := fDataForkFileID; GetEOFGS(parmsEOF); if _ToolErr <> noError then begin gErrorNum := _ToolErr; DoErrorWind(gErrorNum); HUnlock(Handle(theRefConH)); Exit(ReadIt); end; TextHandle := NewHandle(parmsEOF.eof, gMyMemoryID, 0, nil); if _ToolErr <> noError then begin gErrorNum := _ToolErr; DoErrorWind(gErrorNum); HUnlock(Handle(theRefConH)); Exit(ReadIt); end; HLock(TextHandle); parmsRead.pcount := 4; parmsRead.refnum := fDataForkFileID; parmsRead.databuffer := TextHandle^; parmsRead.requestCount := parmsEOF.eof; ReadGS(parmsRead); if _ToolErr <> noError then begin gErrorNum := _ToolErr; DoErrorWind(gErrorNum); HUnlock(Handle(theRefConH)); Exit(ReadIt); end; end; {with theRefConH do} HUnlock(Handle(theRefConH)); HUnlock(TextHandle); { Get TE control handle and add text to control } hTECtl := GetCtlHandleFromID(theWindow, kTextEditCtl); TESetText(teTextIsHandle + teDataIsTextBlock, { Input text is raw handle } TETextRef(TextHandle), { The text } parmsEOF.eof, { Text length } 0, { Style descriptor } TEStyleRef(nil), { No style } TEHandle(hTECtl)); { The TE control } with theRefConH^^ do begin if fResForkFileID <> - 1 then begin FormatH := DocFormatResH(LoadResource(kFormatResType, kFormatResID)); fFormat := FormatH^^; with fFormat do begin tmpTEStyle.teFont.famNum := fFont; tmpTEStyle.teFont.fontsize := fFontSize; TEStyleChange(teReplaceFont + teReplaceSize, tmpTEStyle, TEHandle(hTECtl)); end {with fFormat} end {if} else begin tmpTEStyle.teFont.famNum := gDefaultFormat.fFont; tmpTEStyle.teFont.fontsize := gDefaultFormat.fFontSize; TEStyleChange(teReplaceFont + teReplaceSize, tmpTEStyle, TEHandle(hTECtl)); end; {else} end; {with theRefConH do} TEGetRuler(refIsNewHandle, Ref(@privRulerH), TEHandle(hTECtl)); with privRulerH^^ do begin tabType := 0; rightmargin := CharWidth('0')* 78; end; TESetRuler(refIsHandle, Ref(privRulerH), TEHandle(hTECtl)); DisposeHandle(Handle(privRulerH)); theRefConH^^.fTECtl := hTECtl; DisposeHandle(TextHandle); end; {of ReadIt} {*------------------------------------------------------------------*} function AskUser: Boolean; {Get the info for the file to open} var TypeList : SFTypeList2; prompt : Str255; begin AskUser := false; prompt := 'Open File:'; gReplyRec.nameDesc := refIsNewHandle; gReplyRec.pathDesc := refIsNewHandle; TypeList.numEntries := 2; TypeList.fileTypeEntries[1].flags := $8000; TypeList.fileTypeEntries[1].fileType := $0004; TypeList.fileTypeEntries[1].auxType := $00000000; TypeList.fileTypeEntries[2].flags := $8000; TypeList.fileTypeEntries[2].fileType := $00B0; TypeList.fileTypeEntries[2].auxType := $00000000; SFGetFile2(120, 40, refIsPointer, Ref(@prompt), nil, @TypeList, gReplyRec); if gReplyRec.good then AskUser := true; end; {of AskUser} {*------------------------------------------------------------------*} procedure DoNew; var pathC1OutputStr : ResultBuf255Hndl; nameC1OutputStr : ResultBuf255Hndl; pFileNameHndl : String255Hndl; fileType : Integer; nameRec : NameRecGS; createRec : CreateRecGS; prompt : Str255; origname : GSString255; theWindow : WindowPtr; theRefConH : WinRefConH; hTECtl : CtlRecHndl; tmpTEStyle : TEStyle; privRulerH : TEPrivRulerH; begin { Ask user to name file } prompt := 'Create file:'; gDocsOpenCnt := gDocsOpenCnt + 1; P2GSstring(concat('Untitled', Int2String(gDocsOpenCnt)),origname); pFileNameHndl := String255Hndl(NewHandle( origname.length + 1, gMyMemoryID,attrNoCross +attrLocked, Ptr(0))); GS2Pstring(origname, pFileNameHndl^^); theWindow := GetDocWindow(pFileNameHndl, nil); if theWindow <> nil then begin {Get TE control handle } hTECtl := GetCtlHandleFromID(theWindow, kTextEditCtl); theRefConH := WinRefConH(GetWRefCon(theWindow)); HLock(Handle(theRefConH)); with theRefConH^^ do begin fTECtl := hTECtl; fIsSaved := false; end; tmpTEStyle.teFont.famNum := gDefaultFormat.fFont; tmpTEStyle.teFont.fontsize := gDefaultFormat.fFontSize; TEStyleChange(teReplaceFont+teReplaceSize,tmpTEStyle, TEHandle(hTECtl)); TEGetRuler(refIsNewHandle, Ref(@privRulerH),TEHandle(hTECtl)); with privRulerH^^ do begin tabType := 0; rightmargin := CharWidth('0')* 78 end; TESetRuler(refIsHandle, Ref(privRulerH), TEHandle(hTECtl)); DisposeHandle(Handle(privRulerH)); SetWTitle(theRefConH^^.fDocNameRef^^, theWindow); SetWRefCon(LongInt(theRefConH), theWindow); HUnlock(Handle(theRefConH)); end; {if theWindow <> nil} end; { of DoNew } {*------------------------------------------------------------------*} function DoSave(theWindow: WindowPtr): Boolean; var theRefConH : WinRefConH; isOk : Boolean; begin DoSave := false; {assume failure} theRefConH := WinRefConH(GetWRefCon(theWindow)); if not theRefConH^^.fIsSaved then begin DoSave := DoSaveAs(theWindow); Exit(DoSave); end; isOk := OpenIt(theRefConH); WriteDocWindow(theWindow); theRefConH^^.fIsChanged := false; CloseFile(theRefConH); DoSave := true; InitCursor; end; {of DoSave} {*------------------------------------------------------------------*} function DoSaveAs(theWindow: WindowPtr): Boolean; var c1OutputStr : ResultBuf255Hndl; pFileNameHndl : String255Hndl; nameRec : NameRecGS; prompt : Str255; origname : GSString255; theRefConH : WinRefConH; begin DoSaveAs := false; {assume failure} prompt := 'Save file:'; theRefConH := WinRefConH(GetWRefCon(theWindow)); P2GSstring(theRefConH^^.fDocNameRef^^, origname); gReplyRec.nameDesc := refIsNewHandle; gReplyRec.pathDesc := refIsNewHandle; SFPutFile2(120, 40, refIsPointer, Ref(@prompt), refIsPointer, Ref(@origname), gReplyRec); if gReplyRec.good then begin WaitCursor; c1OutputStr := ResultBuf255Hndl(gReplyRec.pathRef.refIsNewHandle); nameRec.pcount := 1; nameRec.pathname := @c1OutputStr^^.bufString; DestroyGS(nameRec); CreateResourceFile($00000000, {aux type} $0004, {filetype = text} $00C3, {full access} @c1OutputStr^^.bufString); {file name} if _ToolErr <> noError then begin gErrorNum := _ToolErr; DoErrorWind(gErrorNum); DisposeHandle(Handle(gReplyRec.pathRef.refIsNewHandle)); Exit(DoSaveAs); end else begin {if not toolerror} nameC1OutputStr := ResultBuf255Hndl(gReplyRec.nameRef.refIsNewHandle); pFileNameHndl := String255Hndl(NewHandle( nameC1OutputStr^^.bufString.length + 1, gMyMemoryID,attrNoCross + attrLocked, Ptr(0))); GS2Pstring(nameC1OutputStr^^.bufString, pFileNameHndl^^); HLock(Handle(theRefConH)); with theRefConH^^ do begin DisposeHandle(Handle(fDocNameRef)); DisposeHandle(Handle(fDocPathRef)); fDocNameRef := pFileNameHndl; fDocPathRef := ResultBuf255Hndl(gReplyRec.pathRef.refIsNewHandle); SetWTitle(pFileNameHndl^^, theWindow); fIsSaved := true; end; HUnlock(Handle(theRefConH)); gDocsOpenCnt := gDocsOpenCnt + 1; DoSaveAs := DoSave(theWindow); end; {else if not toolerr} DisposeHandle(Handle(gReplyRec.nameRef.refIsNewHandle)); end; {if gReplyRec.good} end; {of DoSaveAs} {*------------------------------------------------------------------*} procedure WriteDocWindow(theWindow: WindowPtr); var theRefConH : WinRefConH; ioRec : IORecGS; parmsClose : RefNumRecGS; setPositionRec : setPositionRecGS; tePriv : TERecordPriv; teTextBlkH : TextBlockH; prevTextBlkH : TextBlockH; hTECtl : CtlRecHndl; FormatH : DocFormatResH; selectionStart : LongInt; selectionEnd : LongInt; begin theRefConH := WinRefConH(GetWRefCon(theWindow)); HLock(Handle(theRefConH)); with theRefConH^^ do begin if fResForkFileID <> - 1 then begin { Write the resource fork } FormatH := DocFormatResH(LoadResource(kFormatResType,kFormatResID)); if FormatH = nil then begin FormatH := DocFormatResH(NewHandle(SizeOf(DocFormatResRec), gMyMemoryID, 0, Ptr(0))); AddResource(Handle(FormatH), 0, kFormatResType,kFormatResID); end; TEGetSelection(selectionStart, selectionEnd, TEHandle(hTECtl)); with FormatH^^ do begin fFont := fFormat.fFont; fFontSize := fFormat.fFontSize; fTabWidth := fFormat.fTabWidth; fSelectionStart := selectionStart; fSelectionEnd := selectionEnd; end; MarkResourceChange(true, kFormatResType, kFormatResID); WriteResource(kFormatResType, kFormatResID); end; {if fResForkFileID <> -1} setPositionRec.pcount := 3; setPositionRec.refnum := fDataForkFileID; setPositionRec.base := startplus; setPositionRec.displacement := 0; SetEOFGS(setPositionRec); if _ToolErr <> noError then begin gErrorNum := _ToolErr; DoErrorWind(gErrorNum); Exit(WriteDocWindow); end; hTECtl := GetCtlHandleFromID(theWindow, kTextEditCtl); tePriv := TERecordPriv(TEHandle(hTECtl)^^.reserved); teTextBlkH := tePriv.fTextCachedHandle; prevTextBlkH := teTextBlkH^^.fPrev; while prevTextBlkH <> nil do begin teTextBlkH := prevTextBlkH; prevTextBlkH := teTextBlkH^^.fPrev; end; while teTextBlkH <> nil do begin ioRec.pcount := 4; ioRec.refnum := fDataForkFileID; ioRec.databuffer := @teTextBlkH^^.fTheText; ioRec.requestCount := teTextBlkH^^.fTextLength; WriteGS(ioRec); if _ToolErr <> noError then begin gErrorNum := _ToolErr; DoErrorWind(gErrorNum); Exit(WriteDocWindow); end; { Advance to next text block } teTextBlkH := teTextBlkH^^.fNext; end; {while TETextBlkH <> nil} end; {with theRefConH} HUnlock(Handle(theRefConH)); end; {WriteDocWindow} {*------------------------------------------------------------------*} procedure CloseFile(theRefConH: WinRefConH); var parmsClose : RefNumRecGS; begin HLock(Handle(theRefConH)); with theRefConH^^ do begin parmsClose.pcount := 1; parmsClose.refnum := fDataForkFileID; CloseGS(parmsClose); fDataForkFileID := - 1; if fHasResFork then begin CloseResourceFile(fResForkFileID); fResForkFileID := - 1; end; end; HUnlock(Handle(theRefConH)); end; {*------------------------------------------------------------------*} function DoClose(theWindow: WindowPtr): Boolean; var theRefConH : WinRefConH; hTECtl : CtlRecHndl; dirty : Byte; begin DoClose := false; {assume failure} theRefConH := WinRefConH(GetWRefCon(theWindow)); if theWindow = nil then Exit(DoClose); if GetWKind(theWindow) = 0 then begin hTECtl := GetCtlHandleFromID(theWindow, kTextEditCtl); dirty := TEHandle(hTECtl)^^.ctlFlag; if BAND(dirty, $0040) <> 0 then theRefConH^^.fIsSaved := false; if not theRefConH^^.fIsSaved then begin if SaveChanges then begin if not DoSave(theWindow) then begin DoClose := false; Exit(DoClose); end else begin DoClose := false; Exit(DoClose); end; CloseFile(theRefConH); end; {if SaveChanges} end; {if not fIsSaved} CloseDocWindow(theWindow); DoClose := true; end {of if GetWKind} else CloseNDAByWinPtr(theWindow); end; { of DoClose } {*------------------------------------------------------------------*} procedure CloseDocWindow(theWindow: WindowPtr); var theRefConH : WinRefConH; begin theRefConH := WinRefConH(GetWRefCon(theWindow)); DisposeHandle(Handle(theRefConH^^.fDocNameRef)); DisposeHandle(Handle(theRefConH^^.fDocPathRef)); DisposeHandle(Handle(theRefConH)); CloseWindow(theWindow); gDocsOpenCnt := gDocsOpenCnt - 1; end; {of CloseDocWindow} {*------------------------------------------------------------------*} procedure DoPageSetup; var Dummey : Boolean; begin Dummey := PrStlDialog(gPrintRecH); end; {*------------------------------------------------------------------*} procedure DoPrint; var theWindow : WindowPtr; hTECtl : TEHandle; thePrintPort : GrafPortPtr; statusRec : PrStatusRec; pageRect : Rect; startLine : LongInt; done : Integer; begin { Fetch this document's information } theWindow := FrontWindow; hTECtl := TEHandle(GetCtlHandleFromID(theWindow, kTextEditCtl)); { Create a printer port } if PrJobDialog(gPrintRecH) then begin WaitCursor; thePrintPort := PrOpenDoc(gPrintRecH, nil); pageRect := gPrintRecH^^.prInfo.rPage; startLine := 0; repeat PrOpenPage(thePrintPort, nil); startLine := TEPaintText(thePrintPort,startLine,pageRect,0,hTECtl); PrClosePage(thePrintPort); until startLine = - 1; PrCloseDoc(thePrintPort); PrPicFile(gPrintRecH, nil, nil); InitCursor; end; {if PrJobDialog} end; {Do Print} {*------------------------------------------------------------------*} procedure DoQuit; begin gDone := true; end; { of DoQuit } {*------------------------------------------------------------------*} procedure HandleMenu; var theMenu : Integer; theItem : Integer; theWindow : WindowPtr; result : Boolean; begin theMenu := HiWrd(gMainEvent.wmTaskData); theItem := LoWrd(gMainEvent.wmTaskData); case theItem of kAboutItem: DoAbout; kNewItem: DoNew; kOpenItem: DoOpen; kSaveItem: result := DoSave(FrontWindow); kSaveAs: result := DoSaveAs(FrontWindow); kCloseItem: result := DoClose(FrontWindow); kSetPage: DoPageSetup; kPrintItem: DoPrint; kQuitItem: DoQuit; kUndoItem: ; kCutItem: ; kCopyItem: ; kPasteItem: ; kClearItem: ; kFontItem: DoFontItem; end; HiliteMenu(false, theMenu); end; { of HandleMenu } {*------------------------------------------------------------------*} procedure DrawContentProc; begin DrawControls(GetPort); end; { of DrawContentProc } procedure InitializeGlobals; begin gPrintRecH := PrRecHndl(NewHandle(140, gMyMemoryID, attrBank,Ptr(0))); PrDefault(gPrintRecH); gDocsOpenCnt := 0; gLastWindow := nil; gFontID := FMGetSysFID; with gDefaultFormat do begin fFont := gFontID.famNum; fFontSize := gFontID.fontsize; fTabWidth := 3; fSelectionStart := 0; fSelectionEnd := 0; end; end; { of InitializeGlobals } {*------------------------------------------------------------------*} procedure MainEventLoop; var code : Integer; {*-------------------------------------*} {see if the front window is ours and fix the items accordingly.} procedure CheckFrontW; var theWindow : WindowPtr; {*-------------------------------------*} procedure DisableItems; begin DisableMItem(kSaveItem); DisableMItem(kSaveAs); DisableMItem(kCloseItem); DisableMItem(kSetPage); DisableMItem(kPrintItem); DisableMItem(kFontItem); end; {DisableItems} {*-------------------------------------*} procedure EnableItems; begin EnableMItem(kNewItem); EnableMItem(kSaveItem); EnableMItem(kSaveAs); EnableMItem(kCloseItem); EnableMItem(kSetPage); EnableMItem(kPrintItem); EnableMItem(kFontItem); end; {*--------------------------------------*} procedure DisableAll; begin SetMenuFlag($0080, kEditMenuID); SetMenuFlag($0080, kFontMenuID); DrawMenuBar; DisableItems; end; {*---------------------------------------*} procedure SetupForApp; {do this if the window is ours} begin if gDocsOpenCnt <> 0 then begin EnableItems; SetMenuFlag($FF7F, kEditMenuID); SetMenuFlag($FF7F, kFontMenuID); DrawMenuBar; EnableMItem(kNewItem); end {if DocsOpen} else begin DisableAll; EnableMItem(kNewItem); EnableMItem(kOpenItem); end; end; {Setup for Application window} {*-----------------------------------------*} procedure SetupForDA; {do this if the front window is a Desk Accessory} begin DisableItems; SetMenuFlag($FF7F, kEditMenuID); SetMenuFlag($0080, kFontMenuID); DrawMenuBar; EnableMItem(kCloseItem); DisableMItem(kNewItem); end; {*------------------------------------------*} begin {CheckFrontW} theWindow := FrontWindow; if theWindow = gLastWindow then Exit(CheckFrontW); if theWindow = nil then begin DisableAll; EnableMItem(kNewItem); end else begin if GetWKind(theWindow) = 0 then begin SetupForApp; DisableMItem(kUndoItem); end {if GetWKind = 0} else begin SetupForDA; DisableMItem(kUndoItem); end; {if GetWKind <> 0} end; {if the Window <> nil} gLastWindow := theWindow; end; {of CheckFrontW} {*------------------------------------------*} begin {MainEvent loop} gMainEvent.wmTaskMask := $001FFFFF; { Allow TaskMaster to do everything. } gDone := false; repeat CheckFrontW; code := TaskMaster($FFFF, gMainEvent); case code of wInGoAway: gresult := DoClose(FrontWindow); wInSpecial, wInMenuBar: HandleMenu; end; until gDone; end; { of MainEventLoop } {*------------------------------------------------------------------*} procedure SetUpMenus; var height : Integer; begin SetSysBar(NewMenubar2(refIsResource, Ref(kMenuBarResID), nil)); SetMenuBar(nil); FixAppleMenu(kAppleMenuID); { Add DAs to apple menu } height := FixMenuBar; { Set sizes of menus } DrawMenuBar; { ...and draw the menu bar! } end; { of SetUpMenus } {*------------------------------------------------------------------*} begin gMyMemoryID := MMStartUp; gStartStopRef := StartupTools(gMyMemoryID,refIsResource,Ref(kStartStopResID)); if _ToolErr = noError then begin InitializeGlobals; SetUpMenus; InitCursor; MainEventLoop; end; ShutDownTools(refIsHandle, gStartStopRef); end.   -/0 File NnNewOoOpenSsSaveSave AsClose//- Page Setup...PpPrint00-QqQuit1 Edit Undo-P 7I MiniEditP|@-.-?-About TEdit...... Select Font "x0/ Tedit Fait partir d'un exemple de TML Copyright 1989 by TML Systems, Inc. All Rights Reserved/^#0hts Reserved/^#0x/ JThis file has no Resource Fork. The Font Information Will NOT be Saved when you close the file. /^#0/#1x/ JSave Changes Before Closing? /^#2/#3MiX,-./=l0}1 8k  6 & 'D C@ U h |   L  d ? [|  -8 . // 0o< 15,P11XxCutCcCopyVvPasteClear Fonts FfltF7 X W!)@i   Qcv)Mi-./=0}1  k  6 &  ' C U h |      ? [  - . // 0o 15 PP%ry!7 #D/ & ,@ main & """")  ;8[iHY"h{i+k ;8[iHb"h{i+;ik ;8[idHY"h{i+k ;8[idHY"h{i+k ;8[iHHHHH"hH")%HH"hφHH0"hӆխ-/0 File NnNewOoOpenSsSaveSave AsClose//- Page Setup...PpPrint00-QqQuit1 Edit Undo-P  !"#$%&'()*+,-.׭ ` {iHӢ""HHϢ)"hˆ͠˪˅e) {i+k ;8[iddHH$H "hӆկH"ӪӅȥ ȥHiH"HHHa"h׆٥ H"Ӣ"UׅمӪӅ몠몧HHע "ע("{i+  ;ik ;8[ird "2H"hI""w" i{iH "H"""{i+;ik ;8[iH"h  ٭ ۭխHH٪مHH "hцӠ٪مHiHѪхHH"٢"HH"h^HH)"h݆H"hI "$ """"{i+k ;8[iHH)"h߆ߢ "ߪ߅Š{iH " H"ߢ""fHHɭH "hï H"ߢ"" "͠ϠцӥɅե˅{iH " H"ߢ""ߢ""""HH0"h ԿԽ" "ߪ߅zHH"hHiHHH"e ` {iHԿԽ""( ` {iHԿԽ""{iHԿԽ"#"H0"hN"hԯԭԿԽ"$"ԯԭ"ߪ߅ ȥ"{i+;ik ;8[id{iH{ { "ddéũddx({iH{iH"{i+k Open File: ;8[i{iH_ _ "V V {iHH"h{iH{iH"{iH{iH"HHHH "hۆ{iH۪ۅHH"HH"hHHHH0"hHHHH)"hHH " Ȋ ` {iHHH""{iHHH"#"H0"hN"hHHHH"$"HH"HHHH "HHHH("HH""{i+kUntitled Create file: ;8[idHH)"h݆ߠݪ݅IH"h<H"h"ݪ݅""{i+;ik ;8[id{iH "HH)"hHH{iH"x({iH{iH" "ݭߩӠݪ݅iՆ{iH "ݪ݅iH "'H"HH"`K HHHH "hنۭHiH٪مHH"HH "HH""H H"ٗȥۗ ȭ٪مHH "HH""H"h H H"{i+;ik Save file: ;8[iHH)"h߆ߢ "ߪ߅HH"h?HHH "hԡԟ "{iH{iHԥԣ""ȥ ȥ""ddd{iH "H"6HH0"h{iHHi(H"猪&猪͠ϠiцӠ 猪Ն{iH "H")盛lߢ""{i+;ik ;8[i "ߠ{iH "H """{i+;ik ;8[idHH)"h݆ߥH+"hHH0"hن۠٪م)ץ)@ݪ݅ݪ݅I8H"h*H"hId.d&"""{i+;ik ;8[iHH)"h߆ߪ߅HH"ߪ߅"H H"ߢ" ":{i+;ik ;8[iHHH "h{i+k ;8[iHH"hHH0"h߆HHH "h "HHHH"hۆݭ{iHHiH"dd"HHԵԳ{iHߢ""hۢ"ۢ"HH""{i+k ;8[i{i+k ;8[iゑ"""HHH"hH"h݂HHH"hH"h݂HHH"hH"h݂""""x>=<O}|{-ɑ ,"{i+k ;8[iHH"hH"{i+k ;8[iHHH "hHH "HH"h)  {i+k ;8[i1"1"1"1"1"1"{i+;ik ;8[i0"0"0"0"0"0"0"{i+;ik ;8[i""*"H"{i+;ik ;8[iDH"""*"0"$H"0"0"{i+;ik ;8[iH"""*"0"1"{i+;ik ;8[iHH"h߆ߦp "0"EHߢ+"h "1" "1"ߍ{i+;ik ;8[i "H"h#HHH"hH"h" {i+k ;8[iHHC"hH"9""H"h*"{i+k ;8[iH"hHHH"h""""HH"{i+k ?vlvvvrp"t-v6vBvF8I8MLprvvpsvvpsK_vhvtvx8{8L``v)v-8084LCvvvvvv^vavmvq8t8xLvRRHJNPvHWvd2vvvv v5v8vDvH8K8OL^vj~vvv88Lvvvvv88 Lv+v9vOvwvvv `b2vMvovvl vvv{ {   F LT >W >a vd > _  _   R R V  V  R      vC S 2 v v v ` b? v_ v v l  v v v9 vL v v     v% ( . ? v  F L > > v > v N P#vOvRv^vb8e8iLmPqN|vHTJVTVvTV vMvcvvN}PvvRRl JHvv0v^vxvvv#v6v[v^vjvn8q8uLvhvkvwv{8~8Lvv v/vEvyvvv(l IQhvvvvvvRR-<1:8\vxv<:v<:v:< v-vAv`vc<g:~vv6 vl v  v$].5F<R vv v,@vE:H<K<O:Zv]R`\c^ovtpwrzp}`sbdfhjlvvvvvv1v>vKvXvevrvvvvvR v,v6vCvO]vjvvvvvvv\^2@vRvbpvzv\^6vv]n'6^vlv|vvvvvvv9v vCDACSEGDEFPROCDSEG~globalJ LONGGLOBALSNDA STACKSIZEU TOOLERRORCHK_PASMAIN  _PASBLKMOVE STATICUNIVTOOL ,@ ~global 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\  ,@ runtime 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 v&2JQgG+0@~gzl|sv|z#~0 3 djruv&'AaGbvvv<vjvvvvZvvvv vCDACSEGDEFPROCDSEG~globalJ LONGGLOBALSNDA STACKSIZEU TOOLERRORCHK_PASMAIN  _PASBL 012345 7I MiniEditP|@-.-?-About TEdit...... Select Font "x0/ TEdit Fait partir d'un exemple de TML II par JCD, logiciel en Freeware le 12 Fvrier 1990/^#0/^#0hts Reserved/^#0x/ JThis file has no Resource Fork. The Font Information Will NOT be Saved when you close the file. /^#0/#1x/ JSave Changes Before Closing? /^#2/#3MiX,-./=l0}1 8k  6 & 'D C@ U h |   L  d ? [|  -8 . // 0o< 15,P11XxCutCcCopyVvPasteClear Fonts Ff4rtF7 X W!)@i   Qcv)Mi-./=0}1  k  6 &  ' C U h |      ? [  - . // 0o 15 PP%my!7E,TEDIT.RDE.20NOATEDIT.RDE.20NOAHTEDIT.PDE.20NOA89:;<=?@ABCDEYZ[\]^_`abcdefghijklmnopqrstuvwxyzInitiation l'algorithmique (2me partie). Amis GS.Clubistes, c'est encore moi. Soyons francs. Lorsque j'ai crit la premire partie de ce cours, je n'envisageais pas vraiment d'en faire une suite. Une des raisons pour lesquelles je reprends la plume, ou devrais-je dire le clavier, est que les vacances arrivent, que mes profs font relche et moi aussi par la mme occasion. Non, en fait, la vraie raison est que j'avais des scrupules lcher mes ventuels lecteurs sans avoir abord les notions les plus intressantes de l'algorithmique. Je vais essayer aujourd'hui de combler en partie cette lacune. Donc, nous avons vu la dernire fois des notions diverses telles que les permutations (a -> b -> c -> a) et les structures alternatives de type Si..Alors..Sinon..FinSi. On va pousser la plaisanterie un peu plus loin en abordant les notions de boucle, de chane et de boolen (prononcez boulin). Tout un programme, c'est le cas de le dire, d'autant que je vais m'efforcer de vous proposer des cas pratiques d'utilisation de toutes ces notions. Avant de passer la suite de ce cours, il me semble opportun de rappeler comment se conoit un algo. Lorsqu'on lit le sujet d'un problme de programmation, on doit commencer par se demander quels problmes sont poss et quels outils on devra utiliser pour les rsoudre. La meilleure solution, en fait, consiste poser sur le papier les diffrents cas de figure possibles, concevoir une premire bauche d'algorithme et vrifier " la main" qu'il fonctionne dans tous les cas de figure (rappelez-vous le problme de la permutation circulaire). Evidemment a c'est la thorie et en fait tout dpend de la complexit du problme pos (et rien ne vaut une petite sance de bidouille de temps autre pour se remettre en forme). Le choix du langage pourra se faire plus tard, en fonction des besoins. A propos de langage, le Pascal a comme avantage d'tre bien adapt l'apprentissage de l'algorithmique et de la programmation structure. C'est normal, il a t conu par Nicklaus Wirth, un professeur d'algorithmique. Un algo bien fait ne doit donc pas poser de problme d'adaptation. En Basic, c'est un peu moins vrai, quelques amnagements seront le plus souvent ncessaires. A titre d'information, le dictionnaire de l'informatique aux ditions Larousse donne deux dfinitions de l'algorithmique : 1 - Science des algorithmes utiliss en informatique ; 2 - Connaissance des mthodes utilises pour construire des algorithmes et des programmes. Vous remarquerez au fil des exemples que je n'emploie jamais dans mes algos d'instruction de branchement de type GOTO. En algorithmique on n'en a pas besoin. Les programmes "spaghetti" ou "jeu de piste" a vous dit quelque chose ? Si c'est le cas de vos programmes Basic ou autres, je ne saurais trop vous conseiller de lire ce cours en entier et d'tudier attentivement tous les exemples. S'il n'a pas la prtention de faire de vous des programmeurs chevronns, il vous permettra, du moins je l'espre,ARTICLESvm' '+ART.ASTUCES $ $ >,ART.FILETYPEF"!3!3>)ART.MONTV:oq!!>)CATALOGUEo " " >-ART.DERNIERES.  >/ART.CUSTOM.GSOS 2 2 >-ART.POLYGONIA[$  >/ART.HYPERSTUDIO\>)ART.ALGO270\+ + >,ART.SOLUTION{.(  >ART.ANNONCES33>,ART.TML.II.2   > d'amliorer la logique de vos propres programmes, de progresser dans votre dcouverte de la programmation et de manipuler des concepts qui peuvent paratre obscurs au premier abord. Les exercices proposs dans ce cours sont fournis avec des exemples de solution (j'ai bien dit des exemples, prenez-les pour ce qu'ils sont et n'hsitez pas les amliorer). Une dernire mise au point : je donnerai dsormais rarement l'quivalent Pascal des algos prsents ici. Moi a me fera moins de travail, et vous a vous fera un peu d'entranement, en vous laissant de plus le choix du langage utilis. Mais commenons par le commencement. Qu'est-ce qu'une boucle et quoi a sert ? Les boucles sont des structures rptitives qui permettent de rpter un ensemble d'actions un nombre de fois dtermin soit par l'utilisateur, soit par le programmeur, soit par un calcul effectu par le programme. Cela permet au programmeur de s'pargner bien du travail. Etudions la syntaxe algorithmique d'une boucle dans un exemple. N.B. : "TQ" et "FTQ" signifient respectivement "Tant Que" et "Fin de Tant Que". "FSi" signifie "Fin de Si". Lire se traduit par READLN en Pascal (ou INPUT en Basic) et Afficher se traduit par WRITELN en Pascal (ou PRINT en Basic). "Si..Alors..Sinon..FSi" se traduit par "IF..THEN..ELSE..;" en Pascal. En Basic, la syntaxe peut varier selon les versions et certains vieux Basic n'ont pas le "ELSE" ce qui oblige feinter avec un "GOTO". La flche "<--" se dit "reoit" et se traduit par := en Pascal et par = en Basic. De toute faon, reportez-vous au manuel de votre langage pour les problmes de syntaxe. N'hsitez pas, en algorithmique et en Pascal, prendre des noms de variables explicites pour amliorer la lisibilit de vos programmes. Problme 1 : programme de devinette d'un nombre (un grand classique !). Il devra indiquer si le nombre donn par l'utilisateur est trop grand ou trop petit et afficher le nombre de coups en fin de partie. Lexique gagne = 45 (constante, nombre deviner) n : variable de type nombre entier (sert compter le nombre de coups) nombre_lu : variable de type entier (demande au joueur par programme) Dbut Lire nombre_lu n <-- 1 TQ nombre_lu <> gagne Si nombre_lu > gagne Alors Afficher 'Trop grand !' Sinon Afficher 'Trop petit !' FSi n <-- n + 1 Lire nombre_lu FTQ Afficher 'Vous avez trouv en ',n,' coup(s).' Fin. Le programme de devinette est classique mais aussi trs didactique. Faites son jeu d'essai pour vous aider comprendre son droulement avec un tableau du type : nbre_lu ! gagne ! n ! Message affich ******* ! ***** ! * ! ******* ******* La boucle se rpte donc Tant Que (While en anglais) la condition n'est pas remplie, c'est dire tant que "nbre_lu" est diffrent de "gagne". Vous remarquerez que si par chance le joueur trouve le contenu de "gagne" du premier coup, alors le programme n'entre pas dans la boucle et passe directement l'avant dernire ligne pour afficher le nombre de coups. D'o l'importance d'initialiser n 1 au dpart. n est une variable qui sert de compteur. Il est judicieux de la dclarer en entier (INTEGER en Pascal). Vous remarquerez par la suite qu'on pouvait trouver une solution plus jolie, mais je prfre dmarrer doucement. Avant de poursuivre, il convient de prsenter les diffrentes faons de grer les boucles en Pascal. L'algorithme suivant : increment <-- 1 TQ increment < 13 Afficher increment increment <-- incremeGHIJKLMNOPQRSTUVWXArt.FileType Les codes des fichiers sont parfois obscurs. Cet extrait d'une note technique Apple devrait permettre chacun de s'y retrouver. File Aux. Type Type File Type Description Auxiliary Type Description Date _____________________________________________________________________________ $00* Unknown $01* Bad blocks $02+ Apple /// Pascal code $03+ Apple /// Pascal text $04* ASCII text Random-access record-length $05+ Apple /// Pascal data $06* Binary Load address in bank 0 $07+ Apple /// Font $08* Apple II or /// Graphics 05/89 $08+ $4000 Packed Hi-Res Image Image Format 11/88 $08+ $4001 Packed Double Hi-Res Image Image Format 11/88 $09+ Apple /// BASIC program $0A+ Apple /// BASIC data $0B+ Apple /// Word Processor $0C+ Apple /// SOS System $0F* Folder $10+ Apple /// RPS data $11+ Apple /// RPS index $12+ Apple /// AppleFile discard $13+ Apple /// AppleFile model $14+ Apple /// AppleFile report format $15+ Apple /// screen library $16+ PFS document $16+ $0001 PFS:File document Program Specific $16+ $0002 PFS:Write document Program Specific $16+ $0003 PFS:Graph document Program Specific $16+ $0004 PFS:Plan document Program Specific $16+ $0016 PFS internal data Program Specific $19* AppleWorks Data Base Upper-/lowercase in name 09/89 $1A* AppleWorks Word Processor Upper-/lowercase in name 09/89 $1B* AppleWorks Spreadsheet Upper-/lowercase in name 09/89 $20+ Desktop Manager document $29+ Apple /// SOS Dictionary $2A+ Apple II Source Code Application Specific $2B+ Apple II Object Code Application Specific $2C+ Apple II Interpreted Code Application Specific $2D+ Apple II Language Data Application Specific $42* File Type Names Search order 07/89 $50* Apple IIGS Word Processor $50+ $8001 DeluxeWrite document Application Specific $50+ $8010 AppleWorks GS Word Processor Application Specific $51* Apple IIGS Spreadsheet $51+ $8010 AppleWorks GS Spreadsheet Application Specific $52* Apple IIGS Data Base $52+ $8010 AppleWorks GS Data Base Application Specific $52+ $8011 AppleWorks GS DB Template Application Specific $53* Drawing $53+ $8010 AppleWorks GS Graphics Application Specific $54* Desktop Publishing $54+ $8010 AppleWorks GS Page Layout Application Specific $54+ $DD3E Medley document Application Specific 05/89 $55* Hypermedia Application Specific $55+ $8001 Tutor-Tech document Application Specific $55+ $8002 HyperStudio document Application Specific $56* Educational Data Application Specific $56+ $8001 Tutor-Tech Scores Application Specific $57* Stationery $58* Help File $59* Communications File Application Specific $59+ $8010 AppleWorks GS Communications Application Specific $5A* Configuration file Application Specific $5A+ $8001 Master Tracks Jr. preferences $5A+ $8010 AppleWorks GS configuration Application Specific $5B* Animation file Application Specific $5B+ $8001 Cartooners movie Application Specific $5B+ $8002 Cartooners actors Application Specific $6B+ PC Transporter BIOS $6D+ PC Transporter driver $6E+ PC Transporter pre-boot $6F+ PC Transporter volume $A0* WordPerfect document WordPerfect 01/89 $AB+ Apple IIGS BASIC program $AC+ Apple IIGS BASIC TDF $AD+ Apple IIGS BASIC data $B0* Apple IIGS source code APW Language type $B0+ $0001 APW Text file $B0+ $0003 APW 65816 Assembly source code $B0+ $0005 ORCA/Pascal source code $B0+ $0006 APW command file $B0+ $0008 ORCA/C source code $B0+ $0009 APW Linker command file $B0+ $000A APW C source code $B0+ $000C ORCA/Desktop command file $B0+ $0015 APW Rez source file $B0+ $001E TML Pascal source code $B1* Apple IIGS object code $B2* Apple IIGS Library file $B3* GS/OS application 09/89 $B4* GS/OS Run-Time Library $B5* GS/OS Shell application 09/89 $B6* Permanent initialization file Not loaded if bit 15 set $B7* Temporary initialization file Not loaded if bit 15 set $B8* New desk accessory Not loaded if bit 15 set $B9* Classic desk accessory Not loaded if bit 15 set $BA* Tool $BB* Apple IIGS Device Driver File Not loaded if bit 15 set 11/89 $BC* Load file (generic) $BD* GS/OS File System Translator Not loaded if bit 15 set $BF+ GS/OS document $C0* Packed Super Hi-Res picture Application Specific $C0+ $0000 Paintworks Packed picture Application Specific 11/88 $C0+ $0001 Packed Super Hi-Res Image Application Specific 11/88 $C0+ $0002 Apple Preferred Format picture Application Specific 11/88 $C0+ $0003 Packed QuickDraw II PICT file Application Specific 11/88 $C1* Super Hi-Res picture Application Specific 11/88 $C1+ $0000 Super Hi-Res Screen image Application Specific 11/88 $C1+ $0001 QuickDraw PICT file Application Specific 11/88 $C2+ Paintworks animation $C3+ Paintworks palette $C5* Object-oriented graphics Application Specific $C5+ $8000 Draw Plus document Application Specific $C5+ $C000 DYOH: Architecture document Application Specific $C5+ $C001 DYOH predrawn objects Application Specific $C5+ $C002 DYOH custom objects Application Specific $C5+ $C003 DYOH clipboard Application Specific $C5+ $C006 DYOH: Landscape Document Application Specific $C7* Control Panel document Not loaded if bit 15 set*R*01/90 $C8* Font $C8 $0000 Font (Standard QuickDraw II Font)Reserved 01/89 $C9* Finder data $CA* Icons 07/89 $D5* Music sequence Application Specific ***01/90 $D5+ $0000 Music Construction Set song Application Specific $D5+ $8002 Diversi-Tune sequence Application Specific $D5 $8003 Master Tracks Jr. sequence Application Specific $D6* Instrument Application Specific ***01/90 $D6+ $0000 Music Construction Set inst. Application Specific $D6+ $8002 Diversi-Tune instrument Application Specific $D7* MIDI data ***01/90 $D7+ $0000 MIDI standard data Application Specific $D8* Sampled sound Application Specific ***01/90 $D8+ $0000 Audio IFF document Application Specific 03/89 $D8+ $0002 ASIF instrument Application Specific 03/89 $D8 $8003 Sampled Sound resource Application Specific $D8+ $8001 HyperStudio sound Application Specific $DB* DB Master document Application Specific $DB+ $0001 DB Master document Application Specific $E0* Archival library Application Specific $E0+ $0000 ALU library Carolina System Software $E0 $0001 AppleSingle File Application Specific 03/89 $E0 $0002 AppleDouble Header File Application Specific 03/89 $E0 $0003 AppleDouble Data File Application Specific 03/89 $E0 $8000 Binary II File Application Specific 07/89 $E0+ $8001 AppleLink ACU document Application Specific $E0+ $8002 ShrinkIt (NuFX) document Application Specific 07/89 $E2* AppleTalk data $EF+ Pascal area $F0+ BASIC command $F1* User #1 $F2* User #2 $F3* User #3 $F4* User #4 $F5* User #5 $F6* User #6 $F7* User #7 $F8* User #8 $F9* GS/OS System file $FA+ Integer BASIC program $FB+ Integer BASIC variables $FC* AppleSoft BASIC program $FD* AppleSoft BASIC variables $FE+ Relocatable code $FF* ProDOS 8 application nt + 1 FTQ Pourra s'crire : ----------------- - 1re solution : increment := 1 ; WHILE increment < 13 DO BEGIN WRITELN(increment) ; increment := increment + 1 ; END ; - 2me solution : increment := 1 ; REPEAT WRITELN(increment) ; increment := increment + 1 ; UNTIL increment >= 13 (Rpte ... Jusqu' ...) - 3me solution : FOR increment := 1 TO 12 DO BEGIN WRITELN(increment) ; END ; N.B. : Cette dernire solution n'est possible ici que parce que l'incrmentation se fait de 1 en 1. Il faut remarquer qu' la sortie de la boucle, la variable "increment" aura la valeur 12, tandis que dans les 2 premiers cas elle sera 13. Vous pouvez le vrifier en ajoutant un WRITELN(increment) aprs la boucle. Il n'existe pas en Pascal d'instruction STEP comme en Basic, ce qui oblige recourir l'une des deux premires solutions lorsque le pas est diffrent de 1. Vous remarquerez aussi que si vous utilisez REPEAT UNTIL plutt que WHILE DO il sera ncessaire d'inverser la condition de sortie de la boucle. Faites des essais pour bien comprendre la subtilit de la chose. A noter qu'en GS.Basic, il existe la structure WHILE UNTIL quivalente au REPEAT UNTIL du Pascal. Notez aussi que le pas peut tout aussi bien tre ngatif. En Pascal, on pourra aussi utiliser la structure FOR..DOWNTO..DO.. si le pas est de -1. Petite astuce : increment := increment + 1 ; peut s'crire : INC(increment) ; INC est une fonction qui incrmente l'argument entre parenthses de 1. Il existe la fonction DEC qui, elle, dcrmente de 1. Nous reparlerons des fonctions dans le prochain cours et nous apprendrons mme en crer. Attention ! Faites ce que je dis mais ne faites pas ce que je fais... ou plutt ne me faites pas dire ce que je n'ai pas dit... enfin bref, ce que je voulais dire, c'est que WHILE DO n'est pas quivalent REPEAT UNTIL, car avec REPEAT UNTIL, si la condition de sortie de la boucle est vraie ds le dpart, celle-ci est quand m^eme parcourue une fois, ce qui n'est pas le cas avec WHILE DO. Prfrez donc l'utilisation de WHILE DO, ou de FOR TO DO, vous viterez les mauvaises surprises. A que mme que si vous me croyez pas que vous avez qu' essayer. Et que mme que si je dis je dis c'est que je dis que je dis. Non mais ! N.B. : l'initialisation des variables en dbut de programme ou avant une boucle n'est pas obligatoire. Tout dpend en fait du contexte et des besoins du moment. Problme 2 : programme demandant l'utilisateur s'il aime le choux-farci jusqu' ce que ce dernier rponde oui. Voil l'occasion de vous prsenter les boolens. Lexique bonne_reponse = "O" (constante, rponse que le programme attend) reponse_lue : variable de type caractre (CHAR en Pascal) encore : variable de type boolen (BOOLEAN en Pascal) Dbut encore <-- vrai (en Pascal on crirait: encore := TRUE) TQ encore Afficher 'Aimez-vous le choux-farci ?' Lire reponse_lue encore <-- reponse_lue <> bonne_reponse FTQ Afficher 'Vous y avez mis le temps mais vous avouez enfin.' Fin. Un boolen est une variable qui peut prendre 2 tats : VRAI ou FAUX (TRUE or FALSE). Ce type de variable existe en Pascal mais pas en Basic, ce qui est dommage car il rend de grands services. Au dmarrage "encore" reoit VRAI. Le programme entre donc dans la boucle. Si l'utilisateur entre une rponse diffrente de "O", alors "reponse" recevra encore la valeur VRAI. Le programme excute nouveau la boucle et repose nouveau la mme question (compltement idiote, je l'admets). Si cette fois l'utilisateur entre la bonne rponse (en l'occurrence "O"), alors la comparaison entre "reponse_lue" et "bonne_reponse" retourne la valeur FAUX dans la variable "encore". La boucle ne s'excutant que Tant Que "encore" = VRAI, le programme sort de la boucle pour excuter la fin du programme. Je sais, l'emploi des boolens peut paratre obscur et la bonne connaissance de l'algbre boolenne n'est pas superflue. Il faudrait encore beaucoup d'exemples de ce type pour vous familiariser avec les boolens. N'hsitez pas vous en crire, les faire "tourner" par jeu d'essai interpos, les crire en Pascal. Il est d'autant plus malais pour moi de vous expliquer a par tube cathodique interpos, mais je ne pouvais dcemment pas luder la question. Il est ncessaire de bien comprendre qu'un boolen est tout bonnement un test qui s'effectue sous forme d'un calcul "logique" et qu'on pourrait trs bien le remplacer par un IF..THEN.. classique. Mais le boolen a le mrite de clarifier les programmes, d'tre peu gourmand en mmoire et en temps machine. Il est parfois incontournable sur certains problmes. Essayez pour vous "faire la main" de remplacer le test du premier exemple par un boolen et de rcrire le second exemple sans boolen. Il y aurait encore beaucoup dire. Je tcherai d'y revenir dans les prochains exemples. Problme 3 : Saisir les notes d'un lve les unes la suite des autres, faire ensuite le cumul des notes et calculer la moyenne. Lexique cumul : variable de type rel note_lue : variable de type rel nbre_notes : variable de type entier (encore un "compteur") Dbut cumul <-- 0 nbre_notes <-- 0 Lire note_lue TQ note_lue <> -1 cumul <-- cumul + note_lue nbre_notes <-- nbre_notes + 1 Lire note_lue FTQ Si nbre_notes = 0 Alors Afficher 'Pas de notes, fin de traitement' Sinon Afficher 'Moyenne de l''lve : ', cumul / nbre_notes FSi Fin. J'en vois d'ici qui doivent se gratter la tte en se demandant si je n'ai pas perdu la mienne. Pas de panique, les explications arrivent. Le programme initialise "cumul" 0 (a c'est comprhensible) et "nbre_notes" 0 galement (mais pourquoi diable ? Patience, nous y reviendrons). Le programme demande ensuite l'utilisateur d'entrer la premire note. Lorsqu'il dsire arrter la saisie, il lui suffit d'entrer "-1" qui est ici la condition de sortie de la boucle de saisie. Le programme passe alors l'dition de la moyenne de l'lve. Pour bien comprendre, faisons quelques jeux d'essai (les nombres dans les tableaux ci-dessous sont en fait le contenu des variable au fur et mesure du droulement du programme) : nbre_notes ! cumul ! note_lue ! Moyenne -------------!-------------!-------------!---------- -----0-------!------0------!------15-----!---------- -----1-------!-----15------!------25-----!---------- -----2-------!-----40------!-----(-1)----!----20---- J'espre que vous comprenez mieux prsent l'intrt d'initialiser "nbre_notes" 0 au dmarrage. Voyons un second jeu d'essai : nbre_notes ! cumul ! note_lue ! Moyenne -------------!-------------!-------------!-------------- -----0-------!------0------!----(-1 )----! Pas de notes, fin.. En effet si l'utilisateur, pour une raison quelconque, veut sortir du programme sans avoir entr de note, il entrane la division de "cumul" (qui est 0) par "nbre_notes" (qui est aussi 0). Chacun sait que la division par 0 est impossible, l'ordinateur sait faire des choses idiotes mais pas celle-l. Donc, pour viter un plantage lors de l'affichage de la moyenne, j'ai ajout un test qui traite le cas o on n'entre pas dans la boucle. Il y en a certainement qui vont me rpliquer qu'on aurait pu faire plus joli. Par exemple en demandant l'utilisateur aprs chaque note s'il veut en ajouter une autre avant le calcul de la moyenne. C'est trs joli en effet, mais allez dire a au malheureux utilisateur qui doit entrer les notes de plusieurs dizaines d'lves pour le traitement d'un examen par exemple. S'il a d appuyer 1200 fois sur la touche "O" (pour Oui) pour entrer 1200 notes, mieux vaut pour vous ne pas le croiser en fin de journe. J'ai donc pris comme condition de sortie "-1" mais c'est tout fait arbitraire et j'aurais pu choisir autre chose (9999 par exemple) puisque les notes s'chelonnent d'habitude entre 0 et 20. Problme 4 : programme qui demande l'utilisateur d'entrer une srie de nombres et indique en fin de programme le nombre le plus grand de la srie. A mon avis, si vous avez bien compris ce qui prcde, cet exercice ne devrait pas vous poser de problme. Essayez quand mme de le rsoudre avant de passer la lecture de ce qui suit (faites aussi le jeu d'essai). Lexique nombre_lu : variable de type nombre rel (REAL en PASCAL) plus_grand : variable de type rel (stockage du plus grand nombre) Dbut plus_grand <-- 0 Afficher 'Entrez votre nombre ' Lire nombre_lu TQ nombre_lu <> -1 (-1 est la condition d'arr^et) Si nombre_lu > plus_grand Alors plus_grand <-- nombre_lu FSi Afficher 'Entrez votre nombre' Lire nombre_lu FTQ Afficher 'Le plus grand nombre est : ', plus_grand Fin. Le programme, aprs avoir initialis "plus_grand" 0, demande l'utilisateur d'entrer un nombre. Si "nombre_lu" est diffrent de -1, le programme entre dans la boucle. Il compare alors le contenu de la variable "nombre_lu" avec celui de la variable "plus_grand". Si "nombre_lu" est suprieur "plus_grand" alors le contenu de "plus_grand" est modifi pour recevoir celui de "nombre_lu". Mais si "nombre_lu" est infrieur ou gal "plus_grand" la mise jour de "plus_grand" est inutile. Le programme ignore alors ce qui se trouve aprs le "Alors" du test et passe directement la saisie d'un nouveau nombre. Il reteste le contenu de "nombre_lu" au niveau du TQ et si "nombre_lu" est gal -1, alors le programme sort de la boucle. Maintenant que vous savez tout a, modifiez l'algo numro 3 pour qu'il soit capable de vous donner, en plus de la moyenne de l'lve, sa note la plus haute, et pourquoi pas aussi sa note la plus basse. Je vous laisse vous dbrouiller. Avec ce que vous savez, a ne devrait pas vous poser de problme. Problme 5 : Programme qui lit une phrase termine obligatoirement par un point. Il devra indiquer le nombre de mots (sachant que les mots sont spars par au moins un espace et qu'il n'y a pas d'espace entre le dernier mot et le point), le nombre de majuscules et de caractres autres. Accrochez-vous car a se corse. Ce programme va utiliser 3 boucles dont 2 imbriques dans une troisime, ainsi que des tests, des variables servant aux cumuls et, le plus important, une variable de type CHAINE (STRING en Pascal) qui va nous permettre de nous familiariser avec les tableaux, une chane de caractres pouvant tre considre comme un tableau de caractres et fonctionnant peu prs de la m^eme faon. Je suis conscient de la difficult de l'exercice et vais essayer de bien expliquer l'algo. Mais vous verrez, ce n'est pas si terrible que a. Avertissement : je n'ai pas ma disposition les caractres de type crochet ouvert et crochet ferm qui servent en algorithmie et en Pascal la dclaration des tableaux et des chanes. Je vais donc contourner cet inconvnient en utilisant les parenthses la place des crochets. J'espre que a ne prtera pas confusion. De plus pour arer l'algo et le rendre plus lisible, je placerai les commentaires entre toiles. Lexique i : variable de type entier (va servir de compteur) mots : variable de type entier (va servir au cumul du nombre de mots) majus : variable de type entier (pour cumul du nombre de majuscules) autre : idem (cumul du nombre de caractres autres : *az10-3"'.) phrase : variable de type chaine Dbut Afficher 'Entrez votre chane (pas plus de 80 caractres SVP)' Lire phrase mots <-- 0 (initialisation des variables de cumul) majus <-- 0 autre <-- 0 i <-- 1 * compteur 1 pour lecture premier caractre de "phrase" * ********** BOUCLE 1 ********** TQ phrase(i) <> '.' ********* BOUCLE 2 ********* TQ phrase(i) <> '.' ET phrase(i) <> ' ' Si phrase(i) >= 'A' ET phrase(i) <= 'Z' Alors majus <-- majus + 1 Sinon autre <-- autre + 1 FSi i <-- i + 1 FTQ ****** Fin de boucle 2 ****** ******** BOUCLE 3 ******** TQ phrase(i) = ' ' i <-- i + 1 FTQ ****** Fin de boucle 3 ****** mots <-- mots + 1 FTQ ****** Fin de boucle 1 ****** Afficher 'Nombre de mots : ', mots Afficher 'Nombre de majuscules : ', majus Afficher 'Nombre de caractres autres : ', autre Fin. Explications : je crois que vous les avez bien mrites. Le programme commence par demander l'utilisateur d'entrer une chane termine obligatoirement par un point, ce dernier servant au programme pour "trouver" la fin de la chane. Puis il met 0 les variables servant au cumul du nombre de mots, de majuscules, et de caractres autres. Pour bien comprendre la suite du programme, prenons un exemple : Supposons que l'utilisateur entre la chane suivante : A bientot. La variable i qui sert se "dplacer" dans la chane est mise 1 pour la lecture du premier caractre de la cha^ine. Le programme teste s'il peut entrer dans la Boucle 1 en comparant le premier caractre avec l'indicateur de fin de chane qui est un point. Puisque le premier caractre est diffrent d'un point, le programme entre donc dans la Boucle 1. Il teste ensuite s'il peut entrer dans la Boucle 2, boucle qui a pour but de calculer le nombre de majuscules et de caractres autres. Pour entrer dans cette boucle, il doit tre diffrent d'un point, et aussi d'un espace, car n'oublions pas que nous devons aussi compter le nombre de mots, les mots tant spars par au moins un espace. Notre premier caractre rpond favorablement aux conditions requises, donc on entre dans la boucle 2. Dans cette boucle, on teste si le premier caractre de la chane est suprieur ou gal 'A' et infrieur ou gal 'Z'. Il est important de comprendre ici que le programme teste en fait les valeurs ASCII des caractres 'A' et 'Z' et les compare la valeur ASCII du premier caractre de la chane. Dans le cas prsent, le premier caractre de la chane est gal au caractre 'A' donc le programme ajoute 1 la variable de cumul "majus" et ignore le Sinon pour passer la suite de la Boucle 2. La variable 'i' est incrmente de 1 et on retourne au TQ de la boucle 2. Cette fois, le second caractre de la chane est un espace donc le programme quitte la Boucle 2 et passe la Boucle 3. Cette troisime boucle a pour but d'liminer tous les espaces superflus entre les mots. Dans le cas prsent il n'y a qu'un espace donc la Boucle 3 ne tourne qu'une fois avant de s'arrter. Le programme passe alors au cumul du nombre de mots puis on retourne au TQ de la premire boucle et rebelotte. Je vous laisse tudier le programme plus en dtail. Lorsque vous l'aurez bien compris, tchez de le modifier pour qu'il affiche galement le nombre de minuscules et de chiffres. Si vous manquez d'ides, voici un exemple d'application de ce que nous avons vu : programme comptant le nombre de mots d'une chane en utilisant un boolen appel "mot" pour tester si on se trouve dans un mot ou non. Ou encore : programme qui donne la longueur du mot le plus long d'une phrase termine par un point. Chaque mot est spar par un ou plusieurs espaces. Il va tre temps pour moi d'arrter. Ce n'est d'ailleurs pas un mal, a vous laissera le temps de digrer ce que nous venons de voir. Il est certain que certaines notions vues dans ce cours vont vous poser des problmes au dbut, alors je n'ai qu'un conseil vous donner : pratiquez. Le dernier problme est d'un niveau un peu plus "costaud" que les prcdents mais il faut bien en passer par l. Un autre exercice dont je vous proposerai une solution la prochaine fois : programme lisant 2 nombre entrs par l'utilisateur et lui permettant de choisir l'une des 4 oprations suivantes + - / * pour calculer ces 2 nombres. Je voudrais conclure en ajoutant, pour ceux qui ont dbut comme moi en faisant des petits dessins qu'on appelle organigrammes, que la rdaction d 'un algorithme, que ce soit sous forme de texte ou de dessin procde de la mme dmarche. L'algorithmique telle que je vous la prsente ici demande peut tre un peu plus de rigueur mais elle offre l'avantage d'tre plus facilement traduisible en un langage informatique. Elle vite galement de se retrouver avec des organigrammes compliqus, voire illisibles, surtout dans le cas de problmes complexes. Il n'est pas exclu, et je vous fais par avance mes excuses, que malgr mes relectures des coquilles se soient glisses dans mon cours, voire dans mes algos (j'espre sincrement que non). Si vous avez des critiques, constructives de prfrence, formuler, ou si vous dsirez que certains points rests obscurs soient approfondis, n'hsitez pas m'en faire part, j'en tiendrai compte. N'oubliez pas de joindre une enveloppe pr-adresse et timbre si vous dsirez une rponse personnelle. Mon adresse est dans l'annuaire du GS.CLUB. Sur ce, bientt et bon courage. Grgory Jarrige. |}~SALUT A TOUS tous les nophytes,les apprentis sorcier,les matres vaudoux, les boutonneux,les appleworkers,les grosses ttes,les chauves,les Barbus... A TOUS. Effectivement car j'ai une bonne nouvelle: j'ai le plaisir de tester pour vous 2 ou 3 nouveauts de temps autre,donc il ne sera jamais trop tard pour que vous les achetiez... Ce mois ci c'est TUNNEL OF ARMAGEDDON superbe jeu de california dreams. Tunnel est crit sous prodos 16, rapide charger.Tout d'abord vous avez droit une prsentation sans prtention mais efficace.Vous serez frapp par la musique (je l'ai branche sur ma chane) pas trop nervante mme agrable. Elle est digne de ce jeu d'action. Le jeu se droule bord de votre astronef d'o vous pouvez admirer votre tableau de bord dessin en nuance grise .Mais justement l se situe le point faible de Tunnel :les couleurs des diffrents tableaux sont tristes pleurer ,monotones et ne varient gure entre un dgrad de bleu,rouge,vert ou gris. Le but du jeu est de se faufiler travers un immense tunnel o vous devrez viter les murs, statiques ou en mouvement ,mais aussi les aliens.Vous tes muni d'un canon ,et divers options(cartouches spciales,protection, hyperthrust etc) sont dissemines tout au long des 20 tunnels.Les diffrents niveaux sont d'une difficult croissante et vous pouvez sauvegarder une partie la condition d'avoir accompli un niveau de plus. Personnellement je n'ai jamais vu un dfilement si fluide sur un micro, c'est poustouflant ! (NDLR: ce jeu utilise la fonction FillMode de l'Apple IIGS, fonction dcrite dans Polygonia, dans ce numro de GS Infos) Enfin sachez qu'il y a 20 tunnels diviss en 5 sections et il y a 4 zones par section ,tant donn qu'il faut 1 min par zone ,vous pouvez y passer l'anne ! Un petit truc pour ceux qui veulent accder n'importe quel niveau: dans le catalogue renommer STAGE.01D en n'importe quoi et le stage qui vous intresse en STAGE01.D et voil . Installable sur disque dur: oui, le jeu se recopie sans difficult, il utilise un systme de protection externe au disque. Vous devez entrer le rsultat d'une combinaison de couleurs, rsultat obtenu partir d'un disque color fourni avec le jeu. Note : 15.5 Prix : 300 fttc Distributeur : Brjoux.ae Maintenant passons aux solutions. je tiens prciser que vous pouvez toujours gagner ma reconaissance ternelle en m'envoyant vos solutions. Une autre bonne nouvelle : je peux vous renseigner si vous bloquez dans Dungeon Master.Il n'est pas interdit non plus de m'crire, si vous bloquez dans un quelconque jeu. Seulement: JOIGNEZ UNE ENVELOPPE TIMBREE POUR LE RETOUR.MERCI. Ecrivez : DREYFUS CYRIL CENTRE MURAT 143 bd MURAT 75116 PARIS LES QUESTIONS : De Henri :il bloque dans Lode Runner Championship a partir du niveau 31 . (adressez moi la rponse, si vous pouvez l'aider.) De Claire :Elle bloque dans king quest IV pour monter sur la licorne Elle bloque dans shadowgate au hall d'entre. LES REPONSES : Pour Claire dans King quest IV : SHOOT UNICORN WITH BOW BRIDLE UNICORN MOUNT UNICORN Pour Claire dans Shadowgate : VOIR LA SOLUTION COMPLETE PLUS BAS. Je tiens remercier Jean au look d'enfer pour sa solution de Shadowgate. Solution de Shadowgate : operate tte au-dessus de la porte-prendre clef-N-changer de torche (torche ancienne operate torche neuve et faire le change,explication pour les durs la comprenette)-clef operate porte du fond-N-prendre la torche avec les deux anneaux-open livre-prendre la clef-S-clef operate porte droite-E-prendre l'pe et la fronde-poser les clefs et la torche teinte-S-N-N-E-N-prendre trois pierres-cliquer sur le ct gauche de la cascade il y a un passage cache-operate pierre sur la droite-open sac-prendre les trois diams-S-S-S-O-mettre le diam blanc dans le trou prs de la porte-prendre la sphre et le diam-changer torche-N- prendre le bouclier-prendre la massue-S-S-E-sphere operate lac-prendre la clef-torche operate lac-rcuprer la sphere-S-S-operate la pierre la plus claire sur le mur du fond en bas gauche-pntrer par l'orifice- prendre la flche-operate torche de gauche-O-allumer la torche aux anneaux- prendre le pont de pierre-torche aux anneaux operate spectre-operate manteau-passer porte du fond-speak corde-dire "epor"-open porte dissimule au fond-N-poser diam bleu dans trou-prendre parchemin et diam-O-prendre une torche-monter la corde(E)-massue operate glace du milieu-clef operate porte-open porte-poser clef et massue-S-open premier cercueil droite-torche operate momie-prendre le spectre-S-O-N-prendre la lance- S-S-N-N-poser torche teinte-prendre une torche neuve-N-sphere operate flamme-changer torche-N-N-lance operate troll-N-pierre operate fronde- fronde operate gant-operate manivelle du puit-open seau-thyself operate gant-N-prendre premire porte gauche-open bureau-thyself operate lunettes-prendre clef et parchemin-mettre diam rouge dans trou-N-open parchemins du bureau-celui qui a marqu terra terrakk operate globe terrestre-prendre clef-S-prendre livre sur bureau-S-aller la deuxieme porte gauche et la franchir-operate pierre l'anneau-prendre fiole marque d'une croix-*descendre escalier(E)-prendre flute-operate flute-prendre bague -poser flute-allumer torche de secours et se dbarrasser des vielles-S-S-clef operate la porte du fond-poser clef-N-clef operate porte de droite-E-cliquer sur les marches-nigmes du lion visage humain: -"ville sans maison,fleuve sans poisson..."=carte -"que l'on chauffe,frappe,plonge dans l'eau..."=fer cheval -"au feu j'attends,ami de la cuisine..."=soufflet -...etc -ramener l'objet en faisant bien attention ne pas manquer de lumire- 'objet'operate lion-E-operate carte au mur-prendre baton et l'toile filante-monter l'chelle-flche operate femme-prendre l'pine-S-S-S-torche operate tapis-clef operate porte d'en-bas au N-changer de torche-entrer-O- mettre bton dans trou-prendre la baguette magique-O-open sac-tout prendre- S-S-S-E-poser spectre dans la main gauche du roi-operate blason droite- mettre bague dans trou-poser :pine,livre et grosse pice-S-S-clef operate porte nord en haut-y entrer-open flacon avec croix-operate cor-flacon operate chien-poser flacon-prendre cor-monter-etoile operate dragon-prendre joyau-S-S-N(bas)-prendre torche-S-S-S-S-S-S-E (bas)-S-SStout poser sauf une torche et la baguette-baguette operate serpent-prendre le baton(staff)-S-thyself operate lunette,manteau,gant-tout reprendre sans oublier cailloux sinon en rechercher un-N-changer de torche-N-E-N-N-ouvrir parchemin ulterior humana-operate parchemin ulterior humana-N-pierre operate fronde-fronde operate geant-N-N-N(bas)-prendre torche-E-poser fronde,baguette-epine operate baton(staff)-allumer torche en rserve poser la vieille-prendre piece et livre-N-N-E-open livre-livre operate statue-poser livre-N-operate la manette la plus droite, puis celle du milieu,enfin la plus droite(323)-prendre l'orb-orb operate bton-S-S-S-changer de torche-N-operate parchemin instantum illuminaris- N-operate manette du puits-grande pice grave d'un puits operate puits-E- maillet operate gong-piece d'or operate spectre-go spectre-poser joyau sur le trou le plus gauche-operate cor-O-baton operate dragon... C'EST FINI. Et maintenant the big solution : POLICE QUEST .Avec ma reconnaissance ternelle pour Denis.B . Pour commencer voici quelques 'hints': -Cafein castle est en A3 -pour se garer: arrtez la voiture prs du trottoir et tapez -stop patrol car -ne jamais brler un feu rouge -toujours rpter les actions 2 fois lorsque vous inspectez et questionnez Solution: aller au locker room-diriger vous vers votre locker(il est indiqu dans le manuel d'utilisation !!)-open locker do look at the locker-take the gun- take the ammunition-take the briefcase-close the locker door- aller au briefing room-vous diriger vers votre pigeon hole(toujours indique dans le manuel)-look in the pigeonhole-vous diriger vers le journal-take newspaper from the table-close newspaper-aller vers votre table- couter le briefing-sortir-look-take the patrol car keys-take a radio extender-sortir par le fond-aller tout a fait a gauche-look at the parking lot-inspecter la voiture la plus prs de l'cran en tournant autour et en tapant devant chaque roue et pare-choc :check-open the door-enter-get night stick-close the door-start the car-patrouiller la ville en allant plutt vers la droite :vous vous trouverez bientt en face d'un accident- vous garez-suivre la procdure en n'oubliant pas d'appeler le big boss en tapant : radio-aller Cafeine castle (A3)-rpondre au tlphone- revenir vers le commissariat arrive alors une voiture qui brle un feu- la suivre pour la forcer s'arrter-look-radio-order driving licence- rdiger la contravention lui donner avec son permis aprss qu'elle l'ait signe -repartir et patrouiller un peu-aller Cafeine castle y dloger les motards en veillant bien d'avoir pris votre night stick-reprendre la patrouille-vous verrez un conducteur qui zigzague ,l'arrter suivre la procdure du manuel (n'oubliez pas radio)-l'emmener en prison donner au gardien la raison-suivre les instructions de laura-parler aux copains- saluer le bigboss-s'habiller au vestiaire-aller au blue room avec votre voiture-revenir au bureau suivre la procdure du dbut en vrifiant bien votre bote aux lettres-une fois sur la route coincer la cadillac- suivre la procdure du manuel-bien tout inspecter-rendez vous en prison en precisant 'drug'-suivre toutes les procdures demandes- chez laura prendre tous les papiers ncessaire pour coincer hoffman- aller la cour de justice-donner les papiers au juge en argumentant le tatouage 'tahoo'-prendre le papier et aller le porter la prison- boire un verre d'eau et manger un biscuit- LA SUITE DANS DEUX MOIS AVEC LA SOLUTION COMPLETE DE :-BLACK CAULDRON -UNINVITED Trucs & astuces : Pour Xenocide dans le dossier /xenocide/cov.files : renommer cave.data 1 en level 1 et n'importe quel autre niveaux cave.data 1 , pour revenir au jeu normal faire l'opration inverse. Dans les jeux d'aventures : -faire des plans -tout fouiller , tout inspecter,Art.Annonces Vends carte d'extension mmoire complte pour Apple 1024K (dont 3 kits de 256K sur supports) pour Apple IIGS. Excellent tat. Prix 1000,00F ARNAUD Jean-Paul - 337, ave du partage des Eaux - 84800 ISLE SUR SORGUE  des fichiers Paint d'Appleworks GS. Nouveauts domaine public (Voir Catalogue) ------------------------------------------ GS CLUB 123: Next Home 1, la premire revue franaise sous forme de pile. Questions diverses ------------------ Comment programmer une XCMD, qui pourrait nous envoyer un exemple comment? ais se trouve dans l'emballage avec son manuel de 280 pages, et le package tant attendu devrait tre chez votre concessionnaire prfr en ce moment. 1000 exemplaires ont t imprims, faites l'effort de l'acheter pour bien montrer l'intrt que nous portons notre machine. - Particularit spciale de la version Franaise du 5.0, toutes les touches accentues sont reconnues directement pour peu que l'on ait choisi l'option " Traduction Franais" du CDEV Alphabet dans le tableau de bord graphique (du menu Pomme ). - Les voyelles surmontes d'un ^ ou s'obtiennent en tapant d'abord l'accent, qui n'apparait pas l'cran, puis la voyelle choisie. Pour crire un accent tout seul, il faut le taper deux fois. - La pression simultanne des touches " Option-' ", " Option-` " ou " Option-n " suivie de certaines voyelles permet l'obtention du caractre avec accent aigu, grave ou tilde. Cette particularit oblige dsactiver les fonctions de translation de carac- tres de notre bon vieux "Clavier Bien Tempr" qui entrent en conflit avec le CDEV, mais je conserve cet accessoire bien pratique par ailleur pour ses fonctions de recopie d'cran. Prsentation ensuite de l'AppleShare serveur de fichiers qui permet partir d'un Mac ddi, de relier, via le rseau AppleTalk, une trentaine de GS qui utiliseront le disque dur du Mac comme leur propre disque avec, bien sr, tout un protocole de mots de passe pour hirarchiser les accs. Utile en environnement scolaire ou cours d'infortout essayer -en dernier recours m'crire... matique, la solution n'est pas la porte de toutes les bourses. Partie la plus spectaculaire de la soire, la prsentation de la nouvelle carte SCSI ( la chose la plus sexy aux yeux de J-Y-B ). Une dmonstration poustouflante: sous nos yeux bahis se droule une trentaine de secondes du film "La Guerre Des Etoiles" la vitesse normale de 25 images/s le tout transfr directement du disque dur en accs permanent. Je reviendrai plus loin sur cette carte, puisque notre ami Brsard en a mis une ma disposTMLv' ',ART.TML.5.EX00]ART.II.2.EX.P 48]ART.II.2.EX.RQ4PROGRAM Carnet; USES QDIntf, GSIntf, MiscTools, FontMgr, ConsoleIO; TYPE Champs_Mem = Record titre : Integer; nom : Str255; adresse : Str255; code : Str255; ville : Str255; tel : Str255; divers : Str255 end; Champs_Disk = Record titre : Integer; nom : String[55]; adresse : String[55]; code : String[5]; ville : String[55]; tel : String[20]; divers : String[55] end; TableauMem = array [1..20] of Champs_Mem; TableauDisk = array [1..20] of Champs_Disk; CONST ScreenMode = $80; MaxX = 640; Pomme = 300; APropos = 301; Fichier = 400; Nouveau = 401; Ouvrir = 402; Fermer = 403; Sauver = 404; SauverSous = 405; Imprimer = 406; Quitter = 407; Edition = 500; Annuler = 501; Couper = 502; Copier = 503; Coller = 504; Effacer = 505; M_item = 2; Mme_item = 3; Melle_item = 4; Ste_item = 5; Nom_item = 6; Adr_item = 7; Code_item = 8; Ville_item = 9; Tel_item = 10; Div_item = 11; Liste_item = 12; Suiv_item = 13; Prec_item = 14; Titre_item = 15; Rens_item = 16; NomStr_item = 17; AdrStr_item = 18; CodeStr_item = 19; VilleStr_item = 20; TelStr_item = 21; DivStr_item = 22; VAR MyMemoryID : Integer; ToolsZeroPage : Handle; OnQuitte : Boolean; PommeStr : Str255; FichierStr : Str255; EditionStr : Str255; Choix : ReplyRecord; FicheActuelle : Integer; Fiche : DialogPtr; Carnet : TableauMem; NomCarnet : String[15]; CarnetOuvert : Boolean; Erreur : Integer; Procedure StartUpGSTools; { Cette procedure permet de demarrer ainsi que de charger les outils du GS } Var ToolRec : ToolTable; { Table des outils a charger } svToolErrorNum : Integer; { En cas d'erreur... } btn : Integer; { Le bouton si erreur } r : Rect; Begin TLStartUp; { Demarrage du Tool Locator } MyMemoryID := MMStartUp; { idem pour Memory Manager } MTStartUp; { idem pour Miscellaneous Tools } { Maintenant, on reserve 9 pages en memoire pour les outils } ToolsZeroPage := NewHandle (9*256, MyMemoryID, FixedBank+PageAligned+FixedBlk+Locked, ptr(0)); { Demarrage de QuickDraw II } QDStartUp (LoWord(ToolsZeroPage^),ScreenMode,160,MyMemoryID); { Demarrage de l'Event Manager } EMStartUp (LoWord(ToolsZeroPage^)+$300,20,0,MaxX,0,200,MyMemoryID); { Message pour faire patienter pendant le chargement des outils } MoveTo (10,10); SetBackColor (0); SetForeColor (15); With r do begin top := 75; left := 220; bottom := 125; right := 420 end; SetSolidPenPat (15); PaintRect (r); With r do begin top := 77; left := 224; bottom := 123; right := 416 end; SetSolidPenPat (0); FrameRect (r); SetForeColor (1); SetBackColor (15); MoveTo (300,90); DrawString ('CARNET'); SetForeColor (0); MoveTo (310,110); DrawString ('par'); MoveTo (282,120); DrawString ('Marc LERMAN'); Repeat until button(0); ShowCursor; ToolRec.NumTools := 12; { Nbre d'outils a charger } ToolRec.Tools[1].TSNum := 4; { QuickDraw II } ToolRec.Tools[1].MinVersion := 1; ToolRec.Tools[2].TSNum := 5; { Desk Manager } ToolRec.Tools[2].MinVersion := 1; ToolRec.Tools[3].TSNum := 6; { Event Manager } ToolRec.Tools[3].MinVersion := 1; ToolRec.Tools[4].TSNum := 14; { Window Manager } ToolRec.Tools[4].MinVersion := 0; ToolRec.Tools[5].TSNum := 15; { Menu Manager } ToolRec.Tools[5].MinVersion := 1; ToolRec.Tools[6].TSNum := 16; { Control Manager } ToolRec.Tools[6].MinVersion := 1; ToolRec.Tools[7].TSNum := 18; { QuickDraw Aux } ToolRec.Tools[7].MinVersion := 0; ToolRec.Tools[8].TSNum := 21; { Dialog Manager } ToolRec.Tools[8].MinVersion := 0; ToolRec.Tools[9].TSNum := 20; { Line Edit } ToolRec.Tools[9].MinVersion := 0; ToolRec.Tools[10].TSNum := 22; { Scrap Manager } ToolRec.Tools[10].MinVersion := 0; ToolRec.Tools[11].TSNum := 23; { Standard File } ToolRec.Tools[11].MinVersion := 0; ToolRec.Tools[12].TSNum := 27; { Font Manager } ToolRec.Tools[12].MinVersion := 0; Repeat LoadTools (ToolRec); { Charge les outils } svToolErrorNum := ToolErrorNum; { Erreur ? } If svToolErrorNum <> 0 then begin btn := TLMountVolume (100,100,'',Concat( 'Ins',chr(142), 'rez la disquette du boot'), 'Ok','Annuler'); If btn <> 1 then SysFailMgr (svToolErrorNum, 'Impossible de charger les outils'); end; Until svToolErrorNum = 0; WindStartup (MyMemoryID); { Demarrage Window Manager } RefreshDesktop (nil); { Demarrage Control Manager } CtlStartUp (MyMemoryID,LoWord(ToolsZeroPage^)+$400); { Demarrage Menu Manager } MenuStartUp (MyMemoryID,LoWord(ToolsZeroPage^)+$500); ScrapStartUp; { Demarrage Scrap Manager } { Demarrage Line Edit } LEStartUp (MyMemoryID,LoWord(ToolsZeroPage^)+$600); DialogStartUp (MyMemoryID); { Demarrage Dialog Manager } { Demarrage Standard File } SFStartUp (MyMemoryID,LoWord(ToolsZeroPage^)+$700); DeskStartUp; { Demarrage Desk Manager } QDAuxStartUp; { Demarrage QuickDraw Aux } FMStartUp (MyMemoryID,LoWord(ToolsZeroPage^)+$800) End; Procedure ShutDownGSTools; { Cette procedure permet de clore les outils avant de quitter l'application } Begin GrafOff; { Fermeture de l'ecran graphique } FMShutDown; { Fermeture du Font Manager } QDAuxShutDown; { idem pour QuickDraw Aux } DeskShutDown; { idem pour Desk Manager } SFShutDown; { idem pour Standard File } DialogShutDown; { idem pour Dialog Manager } LEShutDown; { idem pour Line Edit } ScrapShutDown; { idem pour Scrap Manager } MenuShutDown; { idem pour Menu Manager } WindShutDown; { idem pour Window Manager } CtlShutDown; { idem pour Control Manager } EMShutDown; { idem pour Event Manager } QDShutDown; { idem pour QuickDraw II } MTShutDown; { idem pour Miscellaneous Tools } MMShutDown (MyMemoryID); { idem pour Memory Manager } TLShutDown { idem pour Tool Locator } End; Procedure SetUpMenus; Var Height : Integer; Begin PommeStr := Concat ('>>@\N300X\0', '==A propos de Carnet...\N301\0', '==-\N302D\0..'); FichierStr := Concat ('>> Fichier \N400\0', '==Nouveau carnet\N401*Nn\0', '==-\N999D\0', '==Ouvrir carnet\N402*Oo\0', '==Fermer carnet\N403D\0', '==Sauver carnet\N404D*Ss\0', '==Sauver sous...\N405D\0', '==-\N998D\0', '==Imprimer...\N406D*Pp\0', '==-\N997D\0', '==Quitter\N407*Qq\0.'); EditionStr := Concat ('>> Edition \N500\0', '==Annuler\N501D*Zz\0', '==-\N996D\0', '==Couper\N502D*Xx\0', '==Copier\N503D*Cc\0', '==Coller\N504D*Vv\0', '==Effacer\N505D\0.'); SetMTitleStart (10); InsertMenu (NewMenu(@EditionStr[1]),0); InsertMenu (NewMenu(@FichierStr[1]),0); InsertMenu (NewMenu(@PommeStr[1]),0); FixAppleMenu (Pomme); Height := FixMenuBar; DrawMenuBar End;  PROGRAM Essai; USES Types,Locator,Memory,MiscTool,QuickDraw,Events,Desk,IntMath,TextTool, Controls,Windows,Menus,LineEdit,Dialogs,QDAux,Print,Scrap,StdFile,Fonts, Lists,GSOS,Resources,TextEdit; CONST DebutFinResID = 1; BarreMenuResID = 1; PommeID = 1; APropos = 300; FichierID = 2; Nouveau = 400; Ouvrir = 401; Fermer = 402; Sauver = 403; Imprimer = 404; Quitter = 405; EditionID = 3; Annuler = 500; Couper = >f>t  d Art.II.2.ex.r501; Copier = 502; Coller = 503; Effacer = 504; AProposDeChResID = 1; VAR IDMemoire : Integer; DebutFinRef : Ref; Evenement : EventRecord; OnQuitte : Boolean; Procedure DessineBarre; Var Hauteur : Integer; Begin SetSysBar(NewMenuBar2(RefIsResource,Ref(BarreMenuResID),nil)); SetMenuBar(nil); FixAppleMenu(PommeID); { comme d'habitude } Hauteur := FixMenuBar; DrawMenuBar End; { de DessineBarre } Procedure AProposDe; Var inutile : Integer; Begin inutile := AlertWindow (4, (* refIsResource *) nil, (* pas de chane de substitution : on garde celle dfinie dans la resource *) Ref(AProposDeChResID)) End; (* de AProposDe *) Procedure ProcessMenu; Var menuNum : Integer; itemNum : Integer; Begin menuNum := HiWrd(Evenement.wmTaskData); (* nouvelle syntaxe *) itemNum := LoWrd(Evenement.wmTaskData); (* idem *) Case itemNum of APropos : AProposDe; Quitter : OnQuitte := true; (* permet de sortir de l'application *) end; HiliteMenu(false,menuNum) (* titre en noir sur blanc *) End; (* de ProcessMenu *) Procedure BouclePrincipale; Var code : Integer; Begin Evenement.wmTaskMask := $001FFFFF; OnQuitte := false; Repeat code := TaskMaster($FFFF,Evenement); If (code = wInSpecial) or (code = wInMenuBar) then ProcessMenu Until OnQUitte End; (* de BouclePrincipale *) BEGIN IDMemoire := MMStartUp; DebutFinRef := StartUpTools(IDMemoire,RefIsResource,Ref(DebutFinResID)); If _ToolErr = noError then begin (* pas d'erreur au chargement *) DessineBarre; InitCursor; BouclePrincipale end; ShutDownTools(RefIsHandle,DebutFinRef) END.^Nouveau fichierOoOuvrir fichier...Fermer fichierSsSauver fichierPp Imprimer...QqQuitter Edition ZzAnnulerXxCouperCcCopierVvCollerEffacer Fichier  ",-@,,A propos de...---NnNnf^t2#  YY4\ H ,Dp-a0@ x`v  c&H &" ,6 -S       R h }  Txx0/ E S S A I Voir le source et les resources dans l'article de Marc LERMAN dans GSInfos numro 9. Vive le GS-Club et ses adhrents !/^#0__________________________________________________________________________ P R O G R A M M E R L A T O O L B O X E N T M L P A S C A L I I __________________________________________________________________________ ______________________________________________________ CHAPITRE 1 : E C R I R E U N E A P P L I C A T I O N ______________________________________________________ (suite) 3 - A PROPOS DE : "A PROPOS DE..." On voit, dans tous les programmes, et avec une certaine exprience, que les fentres du type "A propos de..." accessibles par le menu Fichier de toute application ne proposent qu'un message banal (le nom de l'auteur, le numro de la version...) et un seul bouton "Ok" (c'est d'ailleurs la mme chose pour les messages d'erreur). Moralit, on ne va tout de mme pas se fatiguer (la devise du TML Pascal II) appeler Dialog Manager, dclarer un bouton, afficher le texte et attendre bien sagement que l'utilisateur ait cliqu sur ce bouton. On va donc dclarer une nouvelle resource de type "Alert String", et on va s'en servir grce la fonction AlertWindow (de l'unit Windows). C'est parti ! 3.1 - LES FENETRES D'ALERTE * Choisissez Open dans le menu fichier, cliquez sur le bouton radio "Resource file". Chargez le fichier exemple de la dernire fois (il s'appelait Art.II.1.ex.r). La fentre des resources s'affiche alors; vous vous souvenez : on avait des resources de type "Pascal String", "Menu Bar", "Menu" et "Tool StartUp". * Droulez le menu pop-up "New Resource Type" et choisissez l'option "Alert String"; ce moment apparait une fentre "Alert String resource" avec entre parenthses le numro de la resource de ce type (1). Le grand rectangle correspond une zone de texte ditable. Cliquez dedans. * Une chane de type "Alert" doit obligatoirement commencer par un caractre de sparation (le slash "/"). Ensuite, il vous est possible de taper le texte qui doit s'afficher dans la fentre "A propos de...". * A la fin du texte, terminez par un slash "/". Maintenant, il faut indiquer les boutons utiliss; on n'a le droit qu' des boutons standards. Voici la liste des boutons par leur numro : - 0 : Ok - 1 : Cancel - 2 : Yes - 3 : No - 4 : Try Again - 5 : Quit - 6 : Continue On ne va utiliser qu'un bouton "Ok" (donc, le 0). Il suffit, aprs le slash indiquant la fin du texte afficher, d'inscrire un accent circonflexe ("^"), suivi d'un dise ("#"), lui-mme suivi du numro du bouton choisi. * Ensuite, on peut choisir la taille de la fentre; laissons la taille par dfaut. On n'utilisera pas d'icne dans notre exemple, ni de formatage spcial (accessible par le bouton ">Insert LETextBox2 Code>"). * Cliquez sur "Ok" pour accepter. Fermer la fentre des resources pour sauver le tout. Il ne reste qu' crire LA ligne de programme qui utilisera la resource que l'on vient d'crire. Voici le format de la fonction AlertWindow : FUNCTION AlertWindow (alertFlags : Integer; subStr : Ptr; alertStrPtr : Ptr) : Integer; Tout d'abord, dclarons une constante globale contenant le numro de la resource (1) : __________________________________________________________________________ Const AProposDeChResID = 1; __________________________________________________________________________ Appelons notre nouvelle procdure "AProposDe" : __________________________________________________________________________ Procedure AProposDe; __________________________________________________________________________ On n'a besoin que d'une seule variable qui contiendra le rsultat de la fonction AlertWindow : inutile (de type Entier) : __________________________________________________________________________ Var inutile : Integer; __________________________________________________________________________ Ecrivons maintenant la partie utile de notre procdure : __________________________________________________________________________ Begin inutile := AlertWindow (4, (* refIsResource *) nil, (* pas de chane de substitution : on garde celle dfinie dans la resource *) Ref(AProposDeChResID)) End; (* de AProposDe *) __________________________________________________________________________ Voil, tout va se faire tout seul ! 3.2 - UTILISATION DES MENUS Notre petit programme est quasiment termin; il reste l'essentiel crire : ce qui va le faire fonctionner. On va utiliser deux variables globales : - Evenement : de type EventRecord (pour Event Manager, cf GSInfos 8) - OnQuitte : de type boolen (vraie si on a choisi "Quitter" dans Fichier) Ecrivons la boucle principale de notre programme : __________________________________________________________________________ Procedure BouclePrincipale; __________________________________________________________________________ On utilise une variable locale "code" qui contient la valeur retourne par TaskMaster : __________________________________________________________________________ Var code : Integer; __________________________________________________________________________ Il va falloir autoriser TaskMaster tout considrer; le code des versions prcdentes du systme ($1FFF) est toujours compatible, mais ne couvre pas toutes les possibilits; le nouveau code ($001FFFFF) est plus appropri : __________________________________________________________________________ Begin Evenement.wmTaskMask := $001FFFFF; OnQuitte := false; Repeat code := TaskMaster($FFFF,Evenement); If (code = wInSpecial) or (code = wInMenuBar) then ProcessMenu Until OnQUitte End; (* de BouclePrincipale *) __________________________________________________________________________ Ecrivons alors la procdure ProcessMenu, qui va se charger d'aiguiller le programme sur l'action entreprendre en fonction du choix de l'utilisateur : __________________________________________________________________________ Procedure ProcessMenu; __________________________________________________________________________ Deux variables locales sont ncessaires : une pour le numro du menu choisi, une autre pour le numro de l'item choisi : __________________________________________________________________________ Var menuNum : Integer; itemNum : Integer; __________________________________________________________________________ Comme avec TML Pascal 1.50, on rcupre les parties haute et basse de Evenement. wmTaskData : __________________________________________________________________________ Begin menuNum := HiWrd(Evenement.wmTaskData); (* nouvelle syntaxe *) itemNum := LoWrd(Evenement.wmTaskData); (* idem *) Case itemNum of APropos : AProposDe; Quitter : OnQuitte := true; (* permet de sortir de l'application *) end; HiliteMenu(false,menuNum) (* titre en noir sur blanc *) End; (* de ProcessMenu *) __________________________________________________________________________ Enfin, il reste crire le programme principal : __________________________________________________________________________ BEGIN DemarreOutils; If _ToolErr = noError then begin (* pas d'erreur au chargement *) DessineBarre; BouclePrincipale end; FermeOutils END. __________________________________________________________________________ Voil votre premire application en TML Pascal II termine; n'hsitez pas la compiler. Cette application se trouve rcapitule en annexe dans le fichier "Art.II.2.ex.p" et les resources lui correspondant dans le fichier "Art.II.2.ex.r". La prochaine fois, nous essaierons d'crire une application beaucoup plus complte, ce qui nous permettra d'exploiter de nouvelles notions. A bientt ! ______________________ M. Marc LERMAN 16, rue Lucien Sampaix 75010 - Paris ______________________>)ART.TML.5 *<  >,ART.LES.PLUSC   >&BRODERv>>'ART.ASMy :>-ART.EDITORIAL88>(NEW.SCSI 3 3 >*DISQUE.DUR,`,>+RENAISSANCE>'QUICKIE U2 2 >QUICKIE S  >NOUVELLESAPF  >__________________________________________________________________________ P R O G R A M M E R L A T O O L B O X E N T M L P A S C A L __________________________________________________________________________ _______________________________________________ CHAPITRE 2 : U N E X E M P L E : C A R N E T _______________________________________________ Nous allons partir de maintenant exploiter les connaissances que nous avons acquises jusqu'ici : dmarrage des outils, leur fermeture, mise en oeuvre des menus droulants et de Dialog Manager. Les connaissances supplmentaires avoir sont celles concernant le Pascal standard; les nouveauts seront dveloppes au moment o elles seront abordes dans notre programme. 1 - LE CAHIER DES CHARGES On se propose de raliser un carnet d'adresses; je suppose que tout le monde en a au moins ralis un dans sa vie (hlas, je ne fais pratiquement que a); pourquoi cet exemple et pas un autre ? Un carnet d'adresses permet d'entrevoir beaucoup de notions de programmation : les fichiers, les Record... Bien sr, nous n'allons pas nous limiter un simple carnet d'adresses du mme style qu'en BASIC AppleSoft; non, nous allons essayer de raliser un carnet digne des meilleurs, avec fentres, menus droulants, etc... Le clavier sera uniquement ncessaire pour entrer les donnes. But : un carnet de 20 fiches maximum, avec fentre de saisie/modification. Toutes les fiches sauves dans un unique fichier toujours prsent en mmoire dans son intgralit; possibilit d'imprimer des tiquettes. Interface utilisateur standard (respect des normes Apple). Programmation en TML Pascal. 2 - DEFINITION DES VARIABLES ET CONSTANTES (Structures utilises) Le fichier extrieur l'application, contenant les donnes du carnet, est un fichier typ; il contiendra les 20 fiches, runies dans un tableau. Chaque fiche a plusieurs champs, correspondant au nom, adresse, etc... On saisira la valeur de ces champs au moyen de LineEdit dans la fentre de saisie; le problme est que LineEdit n'accepte que des chanes de 255 caractres. Or, avec 255 caractres par champ, 7 champs par fiche, 20 fiches par carnet, cela nous fait un fichier assez consquent. On va donc utiliser une dfinition de fiche "en mmoire" avec 255 caractres par champ, et une de fiche "sur disque", avec un nombre de caractres par champ appropri : __________________________________________________________________________ TYPE Champs_Mem = Record titre : Integer; nom : Str255; adresse : Str255; code : Str255; ville : Str255; tel : Str255; divers: Str255 end; Champs_Disk = Record titre : Integer; nom : String[55]; adresse : String[55]; code : String[5]; ville : String[55]; tel : String[20]; divers: String[55] end; TableauMem = array [1..20] of Champs_Mem; TableauDisk= array [1..20] of Champs_Disk; __________________________________________________________________________ Notre application n'utilisant pas de graphisme, on va choisir comme dfinition de l'cran 640*200 : __________________________________________________________________________ CONST ScreenMode = $80; MaxX = 640; __________________________________________________________________________ Quels menus allons-nous utiliser ? - un menu Pomme, avec une option "A propos de..." et des accessoires - un menu Fichier (Nouveau, Ouvrir, Fermer, Sauver, Sauver Sous, Imprimer, Quitter) - un menu Edition standard (Annuler, Couper, Copier, Coller, Effacer) Donnons donc des numros d'identification chacun de ces menus : __________________________________________________________________________ Pomme = 300; APropos = 301; Fichier = 400; Nouveau = 401; Ouvrir = 402; Fermer = 403; Sauver = 404; SauverSous = 405; Imprimer = 406; Quitter = 407; Edition = 500; Annuler = 501; Couper = 502; Copier = 503; Coller = 504; Effacer = 505; __________________________________________________________________________ On va aussi utiliser plusieurs Items dans notre fentre de saisie (fentre de dialogue) : des boutons, des boutons radio et des lignes de texte; donnons- leur un numro d'ordre "personnel" : __________________________________________________________________________ M_item = 2; (* btn radio : Monsieur *) Mme_item = 3; (* btn radio : Madame *) Melle_item = 4; (* btn radio : Mademoiselle *) Ste_item = 5; (* btn radio : Socit *) Nom_item = 6; (* texte statique : Nom *) Adr_item = 7; (* texte statique : Adresse *) Code_item = 8; (* texte statique : Code postal *) Ville_item = 9; (* texte statique : Ville *) Tel_item = 10; (* texte statique : Tlphone *) Div_item = 11; (* texte statique : Divers *) Liste_item = 12; (* btn : Liste *) Suiv_item = 13; (* btn : Suite *) Prec_item = 14; (* btn : Retour *) Titre_item = 15; (* texte statique : Titre *) Rens_item = 16; (* texte statique : Renseignements *) NomStr_item = 17; (* texte ditable *) AdrStr_item = 18; (* idem *) CodeStr_item = 19; (* idem *) VilleStr_item = 20; (* idem *) TelStr_item = 21; (* idem *) DivStr_item = 22; (* idem *) __________________________________________________________________________ Dfinissons les variables : __________________________________________________________________________ VAR (* Comme d'habitude *) MyMemoryID : Integer; ToolsZeroPage : Handle; OnQuitte : Boolean; (* vrai si on choisit "Quitter" *) (* Les chanes des menus *) PommeStr : Str255; FichierStr : Str255; EditionStr : Str255; Choix : ReplyRecord; (* Reponse de Standard File *) FicheActuelle : Integer; (* indique le n de la fiche actuelle *) Fiche : DialogPtr; (* fentre de dialogue *) Carnet : TableauMem; NomCarnet : String[15]; CarnetOuvert : Boolean; Erreur : Integer; (* pour la gestion des erreurs *) __________________________________________________________________________ 3 - CHARGEMENT DES OUTILS On fait comme d'habitude, sauf que l'on va en plus charger Font Manager : __________________________________________________________________________ Procedure StartUpGSTools; { Cette procedure permet de demarrer ainsi que de charger les outils du GS } Var ToolRec : ToolTable; { Table des outils a charger } svToolErrorNum : Integer; { En cas d'erreur... } btn : Integer; { Le bouton si erreur } r : Rect; Begin TLStartUp; { Demarrage du Tool Locator } MyMemoryID := MMStartUp; { idem pour Memory Manager } MTStartUp; { idem pour Miscellaneous Tools } { Maintenant, on reserve 9 pages en memoire pour les outils } ToolsZeroPage := NewHandle (9*256,MyMemoryID, FixedBank+PageAligned+FixedBlk+Locked, ptr(0)); { Demarrage de QuickDraw II } QDStartUp (LoWord(ToolsZeroPage^),ScreenMode,160,MyMemoryID); { Demarrage de l'Event Manager } EMStartUp (LoWord(ToolsZeroPage^)+$300,20,0,MaxX,0,200,MyMemoryID); { Message pour faire patienter pendant le chargement des outils } MoveTo (10,10); SetBackColor (0); SetForeColor (15); With r do begin top := 75; left := 220; bottom := 125; right := 420 end; SetSolidPenPat (15); PaintRect (r); With r do begin top := 77; left := 224; bottom := 123; right := 416 end; SetSolidPenPat (0); FrameRect (r); SetForeColor (1); SetBackColor (15); MoveTo (300,90); DrawString ('CARNET'); SetForeColor (0); MoveTo (310,110); DrawString ('par'); MoveTo (282,120); DrawString ('Marc LERMAN'); Repeat until button(0); (* Au clic, on peut continuer *) ShowCursor; ToolRec.NumTools := 12; { Nbre d'outils a charger } ToolRec.Tools[1].TSNum := 4; { QuickDraw II } ToolRec.Tools[1].MinVersion := 1; ToolRec.Tools[2].TSNum := 5; { Desk Manager } ToolRec.Tools[2].MinVersion := 1; ToolRec.Tools[3].TSNum := 6; { Event Manager } ToolRec.Tools[3].MinVersion := 1; ToolRec.Tools[4].TSNum := 14; { Window Manager } ToolRec.Tools[4].MinVersion := 0; ToolRec.Tools[5].TSNum := 15; { Menu Manager } ToolRec.Tools[5].MinVersion := 1; ToolRec.Tools[6].TSNum := 16; { Control Manager } ToolRec.Tools[6].MinVersion := 1; ToolRec.Tools[7].TSNum := 18; { QuickDraw Aux } ToolRec.Tools[7].MinVersion := 0; ToolRec.Tools[8].TSNum := 21; { Dialog Manager } ToolRec.Tools[8].MinVersion := 0; ToolRec.Tools[9].TSNum := 20; { Line Edit } ToolRec.Tools[9].MinVersion := 0; ToolRec.Tools[10].TSNum := 22; { Scrap Manager } ToolRec.Tools[10].MinVersion := 0; ToolRec.Tools[11].TSNum := 23; { Standard File } ToolRec.Tools[11].MinVersion := 0; ToolRec.Tools[12].TSNum := 27; { Font Manager } ToolRec.Tools[12].MinVersion := 0; Repeat LoadTools (ToolRec); { Charge les outils } svToolErrorNum := ToolErrorNum; { Erreur ? } If svToolErrorNum <> 0 then begin btn := TLMountVolume (100,100,'',Concat( 'Ins',chr(142), 'rez la disquette du boot'), 'Ok','Annuler'); If btn <> 1 then SysFailMgr (svToolErrorNum, 'Impossible de charger les outils'); end; Until svToolErrorNum = 0; WindStartup (MyMemoryID); { Demarrage Window Manager } RefreshDesktop (nil); { Demarrage Control Manager } CtlStartUp (MyMemoryID,LoWord(ToolsZeroPage^)+$400); { Demarrage Menu Manager } MenuStartUp (MyMemoryID,LoWord(ToolsZeroPage^)+$500); ScrapStartUp; { Demarrage Scrap Manager } { Demarrage Line Edit } LEStartUp (MyMemoryID,LoWord(ToolsZeroPage^)+$600); DialogStartUp (MyMemoryID); { Demarrage Dialog Manager } { Demarrage Standard File } SFStartUp (MyMemoryID,LoWord(ToolsZeroPage^)+$700); DeskStartUp; { Demarrage Desk Manager } QDAuxStartUp; { Demarrage QuickDraw Aux } FMStartUp (MyMemoryID,LoWord(ToolsZeroPage^)+$800) End; __________________________________________________________________________ 4 - FERMETURE DES OUTILS C'est toujours pareil : __________________________________________________________________________ Procedure ShutDownGSTools; { Cette procedure permet de clore les outils avant de quitter l'application } Begin GrafOff; { Fermeture de l'ecran graphique } FMShutDown; { Fermeture du Font Manager } QDAuxShutDown; { idem pour QuickDraw Aux } DeskShutDown; { idem pour Desk Manager } SFShutDown; { idem pour Standard File } DialogShutDown; { idem pour Dialog Manager } LEShutDown; { idem pour Line Edit } ScrapShutDown; { idem pour Scrap Manager } MenuShutDown; { idem pour Menu Manager } WindShutDown; { idem pour Window Manager } CtlShutDown; { idem pour Control Manager } EMShutDown; { idem pour Event Manager } QDShutDown; { idem pour QuickDraw II } MTShutDown; { idem pour Miscellaneous Tools } MMShutDown (MyMemoryID); { idem pour Memory Manager } TLShutDown { idem pour Tool Locator } End; __________________________________________________________________________ 5 - LES MENUS On va juste laisser "A Propos de...", "Nouveau carnet", "Ouvrir carnet" et "Quitter" comme options disponibles : __________________________________________________________________________ Procedure SetUpMenus; Var Height : Integer; Begin PommeStr := Concat ('>>@\N300X\0', '==A propos de Carnet...\N301\0', '==-\N302D\0..'); FichierStr := Concat ('>> Fichier \N400\0', '==Nouveau carnet\N401*Nn\0', '==-\N999D\0', '==Ouvrir carnet\N402*Oo\0', '==Fermer carnet\N403D\0', '==Sauver carnet\N404D*Ss\0', '==Sauver sous...\N405D\0', '==-\N998D\0', '==Imprimer...\N406D*Pp\0', '==-\N997D\0', '==Quitter\N407*Qq\0.'); EditionStr := Concat ('>> Edition \N500\0', '==Annuler\N501D*Zz\0', '==-\N996D\0', '==Couper\N502D*Xx\0', '==Copier\N503D*Cc\0', '==Coller\N504D*Vv\0', '==Effacer\N505D\0.'); SetMTitleStart (10); InsertMenu (NewMenu(@EditionStr[1]),0); InsertMenu (NewMenu(@FichierStr[1]),0); InsertMenu (NewMenu(@PommeStr[1]),0); FixAppleMenu (Pomme); Height := FixMenuBar; DrawMenuBar End; __________________________________________________________________________ Vous trouverez la rcapitulation du dbut de notre programme en annexe, dans le fichier "Art.TML.5.ex". La prochaine fois, nous aborderons les nouveauts en compltant notre programme : nous verrons une utilisation plus complexe de Dialog Manager ainsi qu'une introduction Font Manager, alors... A bientt ! ______________________ M. Marc LERMAN 16, rue Lucien Sampaix 75010 - Paris ______________________Art.les.plus Tedit de JCD est un freeware ne fonctionnant que sous GS/OS 5.0 ------------ Dans le dossier les plus, vous trouverez un sous-dossier Tedit. Ce dossier contient un diteur de texte qui permet d'imprimer les fichiers textes en fonte tendue (ceux de GS Infos par exemple). Cet diteur crit en TML Pascal II est accompagn de ses deux fichiers sources. List shareware de Stowe Keller ------------------------------ Dans le dossier les plus, vous trouverez un sous-dossier LIST. Ce dossier contJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm^^^^M^^^^^Q^^^^^^^^^^^Q^QQUUȈȈQUUQȈUUQUUUUȎUUUUUUUUQUUUUUUUUUUQȈ숮숮숮숊숊UUUUUQUUUUUUQȈȎUUUUUUQUUUUUUU숈UUUUUUUUUUUUUUQ숎쎈UUUUUUUUUUUUUUUȈȬȮ숈UUUUUUUQUUUUUUUQUUUUUUUUQUUUUUUUQUUUUUUUUQUUUUUUUȎȎ쌮UUUUUUUUUUUUUUU쮊UUUUUUUUUUUUUUUQ숎숮ȈȈ숮般숮UUUUUUUQUUUUUUUQwwȮqUUUUUUUUQUUUUUUUwwqȮwwqUUUUUUUUUUUUUUUQwwwwwwwUUUUUUUUUUUUUUUQwwwwwqwwwwwUUUUUUUQUUUUUUUUwwwwwqwwwwwqUUUUUUUUQUUUUUUUwwwwwwq興숊Ȉ숊Ȋ興舮숮숮wwwwwwqUUUUUUUUUUUUUUUQwwwwwww興ȮȎwwwwwwwUUUUUUUUUUUUUUUQwwwwwwwqȎwwwwwwwwUUUUUUUUUUUUUUUwwwwwwwwwwwwwwqUUUUUUUQUUUUUUUQwwwwwwwq쨮wwwwwwwwqUUUUUUUUQUUUUUUUQwwwwwwwq쨮wwwwwwwwqUUUUUUUUUUUUUUUUwwwwwww  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIDDDDDDDD@DDDDDDDDDD@DDDDDDDDDDDD@DDDDDDDDDDDDDD@DDDDDD@DDD@DD@DDDDD@DDDDDDDDDDD@DDD@@DDD@DDD@DD||@D33333333333333333333333333333333333333333333333<@@ 33333333333333333333333333333333333333333333333<|33333333333333333333333333333333333333333333333<@@ 3<@|3<@3<@|3<|3<@|3<|3<|3<@3<@3 <@@3 <@@ 3 <@|3 <@ 3 <@@ 3 <@DDDDG@ 3 <O|3 <@@DD@ 3 <@@ 3 <@@ 3 <@@ 3 <ODDD@3 <@@ 3 <@@@ 3<@@3<wLw|L@3<|3<@ 3<GGOGD@3<DG@L@@ tO@DO |DD@3<@@@L@@ @G@ 33333333333333333333333333333333333333333333333<@O@DL @@ 33333333333333333333333333333333333333333333333<@DtDDDOGLLOLDOO @ @ GO@@LL O @ @DDDGGGDD DO@G|D D@@@@ @@ @ @ @@ @@ D@ Un soft standard que l'on lance comme une application indpendante. -> Un accessoire de bureau installer dans son menu Pomme, ce qui permet d'utiliser Quickie sans quitter l'application dans laquelle on se trouve (trs pratique avec les modules Paint et Page Layout d'AppleWorks GS). L'un ou l'autre fonctionnent de la mme faon: menu droulant et utilisation tout fait instinctive du produit. Quatre dfinitions sont possibles, commutables par un bouton droite du scanner, 100, 200, 300 et 400 Dpi ( point par Inch ). Le soft lit la position de l'interrupteur et vous l'annonce dans la fentre de scan. Le changement de dfinition a pour effet, outre une meilleure qualit d'image, de modifier la taille du sujet scann par rapport la surface utile de l'cran du GS. Plusieurs options sont possibles: * Scan en Noir et Blanc * Scan en chelle de gris * Voir l'image pendant le scan ( inactif en mode 400 Dpi ) * Retour sonore de la vitesse de dplacement du scanner * Temporisation de 10 s mettant le scanner au repos en cas de non-utilisation * Ascenseur permettant de fixer la longueur de la page scanne * Set Slot fixe l'emplacement de la carte ( mais elle est reconnue toute seule ?) * Scan pour dbuter le travail. Quand vous cliquez "Scan", le Quickie s'allume ( pendant 10 s ), il suffit alors de dplacer l'appareil rgulirement sur votre document tout en pressant un bouton situ gauche, juste sous votre pouce ( si vous tes droitiers !). L'image apparat simultanment (sauf en 400 Dpi), Qickie s'arrte tout seul au bout du nombre de lignes choisi avec l'ascenseur. Une petite diode vous renseigne sur le bon fonctionnement du scanner ( vitesse correcte ) ainsi qu' un signal sonore. A gauche de l'appareil se trouvent un potentiomtre servant ajuster la lumino- sit en fonction de votre document ( plusieurs essais sont ncessaires ) et un interrupteur permet de choisir le mode 'lettre' ( scan en noir et blanc ) ou 'photo' ( scan en chelle de gris ). Il est possible de modifier le contraste et la luminosit de l'image l'aide du soft avant de la sauver sur disque. Deux mthodes de sauvegarde: - l'une, classique, passe par l'interface de dialogue standard et permet de crer un fichier aux formats "Ecran", "Apple Preferred", "Paint" et "Finder Icon" trs pratique pour crer ses icones personnalises avec "Iconed". Seule ombre au tableau, il n'est pas possible de sauver l'intgralit de la sur- face scanne mais seulement une page cran. - l'autre mthode, surtout utile avec la version NDA du programme, permet la copie via le presse-papier d'une partie slectionne du dessin que l'on peut ensuite coller immdiatement dans son travail en quittant le NDA. L'utilisation du Quickie est trs agrable, rapide et instinctive, la largeur de la partie active du scanner n'est que de 10 cm mais c'est bien souvent suffisant pour une illustration. Le rendu est excellent en mode noir et blanc mais le choix unique du 640 X 200 fait que l'option "chelle de gris" est trs nettement infrieure la qualit obtenue avec le ThunderScan mont sur ImageWriter. Dans l'tat actuel du soft fourni, le produit est rserv ceux qui font de l'illustration schmatique, de la saisie de caractres ( peut-tre bientt un programme de reconnaissance ) ou du dessin dans le genre BD. Les adeptes de la belle photo en 16 tons de gris devront encore se contenter du ThunderScan. ( voir les exemples et certains schmas de l'article sur les disques durs ). Mais le hard tant ce qu'il est, il est capable de performances trs suprieures et Vitesse ne devrait pas tarder nous fournir un programme capable d'utiliser le 320 X 200 et 16 tons de gris ( d'autant qu'aux dernires nouvelles, ThunderWare, probalement aiguillonn quelque part, sortirait un matriel similaire ). Dernire prcision, cette petite merveille cote 1686,34 F HT ( remise Club 10% dduire ) et elle est disponible chez Brjoux !. J. Rey *$2LISTe DISQUE.DUR3J DISQUE.DUR2. DISQUE.DUR1 TEST.QUICKIE$GSINFOS DISQUE.DUR4*ICONSt"BREJOUXuREPSILON6 PROGRAMMES04EXEMPLES GSCLUB.9.640I2ARTICLESb6LES.PLUSion, atmosphre bon enfant, on peut y aller. Premire annonce importante: le Nouveau GS a commenc tre livr depuis une semaine environ, en principe si vous achetez une machine partir d'aujourd'hui ce doit tre la nouvelle plaque mre 1 Mo qui l'quipe, vrifiez-le et rlez s'il n'en est pas ainsi ou essayez d'obtenir une forte remise !. Nous ne reviendrons pas sur ce nouvel engin dont nous avons publi les avantages et inconvnients depuis dj plusieurs mois, ne jettez pas votre ancienne bcane mais exigez la nouvelle si vous vous quipez. Le GS/OS 5.0 Franais se trouve dans l'emballage avec son manuel de 280 pages, et le package tant attendu devrait tre chez votre concessionnaire prfr en ce moment. 1000 exemplaires ont t imprims, faites l'effort de l'acheter pour bien montrer l'intrt que nous portons notre machine. - Particularit spciale de la version Franaise du 5.0, toutes les touches accentues sont reconnues directement pour peu que l'on ait choisi l'option " Traduction Franais" du CDEV Alphabet dans le tableau de bord graphique (du menu Pomme ). - Les voyelles surmontes d'un ^ ou s'obtiennent en tapant d'abord l'accent, qui n'apparait pas l'cran, puis la voyelle choisie. Pour crire un accent tout seul, il faut le taper deux fois. - La pression simultanne des touches " Option-' ", " Option-` " ou " Option-n " suivie de certaines voyelles permet l'obtention du caractre avec accent aigu, grave ou tilde. Cette particularit oblige dsactiver les fonctions de translation de carac- tres de notre bon vieux "Clavier Bien Tempr" qui entrent en conflit avec le CDEV, mais je conserve cet accessoire bien pratique par ailleur pour ses fonctions de recopie d'cran. Prsentation ensuite de l'AppleShare serveur de fichiers qui permet partir d'un Mac ddi, de relier, via le rseau AppleTalk, une trentaine de GS qui utiliseront le disque dur du Mac comme leur propre disque avec, bien sr, tout un protocole de mots de passe pour hirarchiser les accs. Utile en environnement scolaire ou cours d'informatique, la solution n'est pas la porte de toutes les bourses. Partie la plus spectaculaire de la soire, la prsentation de la nouvelle carte SCSI ( la chose la plus sexy aux yeux de J-Y-B ). Une dmonstration poustouflante: sous nos yeux bahis se droule une trentaine de secondes du film "La Guerre Des Etoiles" la vitesse normale de 25 images/s le tout transfr directement du disque dur en accs permanent. Je reviendrai plus loin sur cette carte, puisque notre ami Brsard en a mis une ma disposition quelques jours plus tard. Enfin, dernier volet de ces annonces, la parution prochaine ( en Juin ) de la 3me dition du Guide de l'Apple II, encore enrichi, mis jour, comportant une nouvelle rubrique permettant d'effectuer un premier diagnostic en cas de ppins dans la pomme. L'exemple de l'action du GS Club y est cite ( cocorico !!! ), c'est la premire fois que nous apparaissons dans une revue officielle Apple, cel mritait d'tre sou- lign. La diffusion est toujours gratuite, ceux qui ont dj reu les deux premiers guides l'obtiendront automatiquement, les autres doivent s'inscrire ds maintenant par les moyens suivants: - 3616 code APPLEA - Tlphone 69 86 37 00 - Courrier l'attention de " L'Apple II Service Team " Les deux premires diffusions ont permis de constituer une base de donne de 2000 noms ce qui reste encore faible par rapport au nombre rel des utilisateurs de machines de la gamme II. N'hsitez pas vous faire connatre !. Flicitons l'action de nos deux sympatiques supporters de l'Apple II, leur initia- tive de cration du Guide fait cole...... aux Etats Unis !!!!! L'ide va tre traduite en Amricain et certainement tendue toute la gamme. La soire se termine avec le traditionnel feux crois de questions qui n'ont pas toutes obtenues de rponses claires: Avenir du GS ? mystre ? Le Team Apple II fera le ncessaire au niveau soft pour ne pas laisser tomber ses utilisateurs. Un nouveau GS ?, un nouveau systme 6.0 ?, un HyperCard GS ? Tout cel est de la fiction ! Apple ne fait pas de Vapor Ware ( Apple sait-il bien ce qu'il fait en ce moment ? seul l'avenir nous le dira !). J. Rey ICONSv!'  '/GSINFOS.9.ICONSʷ [9FINDER.DATAT[96)BJX.ICONS -EPSILON.ICONS  5V */GSINFOS/GSinfosGSINFOSSX(ffffoffffffffffffffwzwwwwwwwzwwzwwzwzzwzwzwzzwzwzzzzzwz  /GS.INFOS/GSinfosGS.INFOS8HU]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 LzTB EPSILON.ICONSNS5B BJX.ICONS.ICONSBGSINFOS.9.ICONSnBrejouxjouxd QH<???? ????????< FAZ differs from other "filetype changing" programs in <:that it allows you to also change the auxiliary types and access bits of files.A Little Background=; For interested parties, here's the scoop on filetypes =;and access bits. Each ProDOS file possesses a primary and > This is pretty simple...just RUN the Basic program FAZ. ?=It loads FAZ.OBJ, some machine language routines it needs in :order to talk to ProDOS, and you'll soon be on your way.?= After a title page, you'll be presented with FAZ's main >sections describe what happens when you choose this command.!File Selection and Operations<: While selecting a file to work with, you can use the <:arrow keys and Return to select a file. The display will 97"jump scroll" to show additional files. You can enter ?=subdirectories by selecting them, and "pop out" by using the <:"." key. Hitting a slash ("/") allows you to enter a new ?=prefix to work from (handy for quickly switching directories >< Once you've chosen a file, you'll see some analysis of <:the primary and auxiliary filetypes, and a listing of the access bits.A: Change Access Bits>< Allows you to modify the kinds of ways in which ProDOS >