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&Xb0qqwqqwqwqwwqwqwwwwwwwqwqqwqwwwqwwqwqwwqwqqwwwwwqwwqqqqqqqqqqqwqqqqqqqqqwqqqqqqqwqqwqwwqwqwqwwqwqwwwwwqqwqqwwqqwwwqwqwqqwwqqqqqqqqqwqqqqqqqqqwqqqqqqqqqqwwwwqwwqwwwqwwqqwwwwqwqwqqqwqqwwwqwqwwqqqGSINF10ִ :' @ARTICLES;ִ ICONSԴմPROGRAMMES մLES.PLUS´!)GSCLUB.107A Ŵ4'GSINFOS-C' մ!FINDER.ROOTcմpմEXEMPLESpմ"մ"FINDER.DATAdմpմLARTICLESv;' ')ART.INV16 u'ART.TV21d_ART.EDITORIALQ-ART.TRANSPROGkִ3 ִ3 +ART.ASTUCES ´´+ART.EX.LOAD´´%ALGO3X=jwԴ Դ +DISK.ACCESS&Դ Դ -ART.DERNIERESr3cִ5ִ5/ART.HYPERSTUDIOv,ִִ%ASS10.XԴ Դ 'ART.JEU+%ִ ִ Initiation l'algorithmique (3me partie). Salut tous , Dans les exercices ci-dessous, je tcherai de vous faire rviser les notions vues prcdemment ainsi que quelques notions... de maths. Rien d'horripilant, rassurez-vous. De toute faon, si a peut vous rassurer, je suis la preuve vivante qu'on peut se dbrouiller en programmation tout en tant nul en maths. Mais ne perdons pas de temps et chose promise, chose de... Problme 1 : programme lisant 2 nombres entrs par l'utilisateuPROGRAMMESv' '&NEWCAT   - BLUE.MONKz´#Ѵ TRANSPROGw´$ IMAGES.JPAaմ H =================================================================! SHORT CATALOG EN 2 COLONNES SUR ECRAN/IMPRIMANTE B.TOMENO !=================================================================: (: ********** EN TETE DE L'ECRAN *********** ):7 2620: LECTURE DATEW <(4)"PR#3":610:520:470 F(4)"PREFIX,S"SL",D"DR:A$(50):D$(4):D$"PREFIX":PR$:D$"CLOSE":A$(0)PR$::" S"SL" D"DR;:40:"TomSoftWare's NewCat";CR$:W PPR1ĺ(21)::D$"PR#1":(27);(33);(14);(27);(66);(27);"L008";(27);(90);(0);(4): MARGE , LINES/INCH ETC...] Z: ]: ********** ATTENTE D'INSTRUCTION ********* ^: d(30(PR1))10PR:"VOLUME: ";PR$;:PR1ĺ(15);CR$::120 nA$:A$(9)ė:D$"FRE"::520:410:620:70/ xA$(16)PR1:A$"":80K A$(3)ĉ::(4)"BYE"Q : : ********** IMPRIME DIRECTORY ************* : Y0:D$"OPEN"PR$",TDIR,S"SL",D"DR:D$"READ"PR$:PF$:ET$:LV$:DI0ĺ::6:(ET$,28);" ";(ET$,28):5 :DI;" "PR$;:::PR1ĺ(27);(34):190; A :~ : ************ NOYAU PRINCIPAL ************** : FI$:TY$(FI$,18,3) TY$"DIR"230 NDND1:I216:LE$(FI$,I,1):LE$" "LI:: ND$(FI$,2,L1)"/":A$(ND)PR$ND$ @ LO$(FI$,26,3):LO(LO$):LTLTLO:YY1^ (Y2)Y2DB$(FI$,30)| (Y2)Y2EN$(FI$,30) CH$DB$" "EN$:(Y2)Y2Ė5:CH$ FI$""Ą"";BL$:YY1:310 "190 ,:-: ************ RECAPITULE LE DIR *************.:%6@20:"Soit "Y" Fichier(s) occupant "LT" Block(s)":LT0::D$"CLOSE":DIDI1:DIND360JPR$A$(DI):PR1ĺ(27);(33)T150^:_: ********* FINAL ET RESET IMPRIMANTE ********`: hPR1ĺ(27);(33)or:" SUR CE DISQUE : ";(BL$,63)::PR1ĺ::I180:"-";::(27);(34);(27);(99):::390|(37):958:39:A$35,24:: *** INCREMENTATION DES SLOTS ET DES DRIVES ***:SL2SL7:DR1:440#DR3DR:DR1SLSL1:SL3SL2:DR1<1:2:"S"SL" D"DR:B: ********* TRAITEMENTS DES ERREURS **********:ER(222):(4)"CLOSE"::ER255Ĺ35,24::ER8ER2ė:"ERREUR LIGNE ";(218)(219):(4)"CLOSE":#2ER8İ420:(4)"PREFIX,S"SL",D"DR:70):i ****** LECTURE SLOT ET DRIVE EN COURS *******o:(67)96SL6:DR1(67)224SL6:DR2(67)80SL5:DR1&(67)208SL5:DR20(67)32SL2:DR1 :(67)112(67)240SL7:DR1DN:WX ****** INSTRUCTIONS + ROUTINE DATE ******]Y:b:23:I180:"_";::"TAB = Slot/Drive , CTRL-S = Pause , CTRL-C = Fin , CTRL-P = Print , RTN = Ecran";:1:35,22:::il 24,251,8,104,41,239,72,40,244,0,0,244,24,3,162,3,15,34,0,0,225,56,251,96:K76876823:A:K,A::768:CR$"":K792811:CR$CR$((K)):vCR$" ("(CR$,8)" @ "(CR$,10,2)" h."(CR$,13,2)")":w: +++++++++++++ VERSION ADAPTE A HARD DISK ++++++++++++++ Son pseudo tait PAPY 73, il nous a quitts au dbut de l'anne. Nous ne le connaissions pas sous ce nom, il tait un des membres de notre association. Ce numro de GS Infos est ddi sa mmoire. XCMD.SOR.CODEv' 'APW.ASMC) 'HS.XCMDc py* MERLIN.ASMlC( ORCA.CC+ ORCA.PASCALC* TML.PASCALC+ (XCMD.TXTH.X/9/9FINDER.DATAv;p;APW.ASMv' '+HS.XCMD.ASM+Rx8 y+ ,HS.XCMD.MACS@x8 y0 &MACROSD Ixy0 BUILD.APWMy0 ,HS.XCMD.ROOTN y1 y1 'HS.XCMDZ y1 y1  !"#$%&'()*+,-./0123456789:;<=>? LIST OFF * ---------------------------------------------------------------- * * * * - - - H Y P E R S T U D I O - X C M D - E X E R C I S E R - - - * * * * Written by Eric C. Mueller. Copyright 1989, Port One Enterprises.* * * * Revision 1.0, 4/28/89 - Just in the nick of time! :) * * Revision 2.0, 9/02/89 by Ken Kashmarek for HS 2.0 * * Revision 3.0, 12/1/89 by Ken Kashmarek for HS 2.0 Find Text * * ---------------------------------------------------------------- * * This is the assembly language source code (APW) for a * * sample HyperStudio XCMD. This Exerciser is designed to use * * every possible function available to an XCMD, and to do so from * * a dialog box presented from within a working stack. In actual * * practice, it is extremely unlikely you would want the user to * * see such a dialog box. This source code will show you how to do * * many type of things from an XCMD. * * ---------------------------------------------------------------- * * V3 has been substantially rewritten to support the Find Text * * option, and to parallel the code sequences of the Pascal and C * * versions. For aspiring HyperStudio XCMD developers, this will * * make the code easier to follow. The code is not optimizeLES.PLUSv' 'CALCULATOR.NDAXv ´!XCMD.SOR.CODE d, but * * is intended for purposes of illustration. * * ---------------------------------------------------------------- * MCOPY MACROS HSXCMD START * ---------------------------------------------------------------- * * Equates for the HyperStudio parameter list BUTTONID EQU 0 CARDID EQU 2 SCRIPTHAND EQU 4 SCRIPTLENGTH EQU 8 TEXTPASSEDPTR EQU 12 HSADDRESS EQU 16 * ---------------------------------------------------------------- * * Front end code to set up the environment PHK ;get the program bank register PLB ;set the data bank register STA USERID ;save in case we need it MOVELONG 00,HOLD0 ;save DP locations STY 0 ;store the paramlist pointer STX 2 GETLONG 0,HSADDRESS,JSLADDR subroutine interface JSR MAIN call the routine MOVELONG HOLD0,0 ;restore DP locations RTL * ---------------------------------------------------------------- * * Assembly code memory USERID DC I2'0' saved userid for memory manager HOLD0 DC I4'0' saved value from DP JSLADDR DC I4'0' will hold the subroutine address * ---------------------------------------------------------------- * * Pascal code memory PARAMLIST DC I4'0' saved control block pointer XCMDIALOG DC I4'0' grafportptr to XCMD dialog RADRESULT DC I2'0' radio button result code HS DC I2'0' call return code HIT DC I2'0' CARDNUM DC I2'0' FINDPREF DC I2'0' bit mask for find text FNDVALUE DC I2'0' dialog item value for find text FNDRESULT DC I2'0' dialog hit for find text FTDIALOG DC I4'0' grafportptr for find text dialog CANCELED DC I2'0' ACTION DC I2'0' InfoString ANOP DC C'33/HyperStudio XCMD Exerciser ' DC C'Written by Eric C. Mueller ' DC C'Updated by Ken Kashmarek/' DC C' ^Version 3.0, 01-DEC-89 ' DC H'00' CARDERR DC C'32/Card ID number invalid (error $' CARDERR22 DC C' )./ Cancel ' DC H'00' * ---------------------------------------------------------------- * * all other elements are assembled INITDATA ANOP LDY #CARDID ;get current (original) card ID LDA [0],Y PHA PUSHLONG #ITEM28TXT+1 PUSHWORD #4 PUSHWORD #0 _INT2DEC MOVEWORD #11,RADRESULT first radio item RTS * ---------------------------------------------------------------- * * GETTHEDATA ANOP ;handle setting up constants LDY #BUTTONID ;get current button ID LDA [0],Y PHA PUSHLONG #ITEM22TXT+1 PUSHWORD #4 PUSHWORD #0 _INT2DEC LDY #CARDID ;get current card ID LDA [0],Y PHA PUSHLONG #ITEM23TXT+1 PUSHWORD #4 PUSHWORD #0 _INT2DEC GETLONG 0,SCRIPTLENGTH,TEMP1 ;get length of script PUSHLONG TEMP1 PUSHLONG #ITEM26TXT+2 PUSHWORD #8 _LONG2HEX GETLONG 0,SCRIPTHAND,TEMP1 ;get handle to script PUSHLONG TEMP1 PUSHLONG #ITEM24TXT+2 PUSHWORD #6 _LONG2HEX PUSHLONG 0 ;hold 0 and 2 MOVELONG TEMP1,0 GETLONG 0,0,TEMP1 ;deref handle to ptr to script PULLLONG 0 ;restore 0 and 2 PUSHLONG TEMP1 PUSHLONG #ITEM25TXT+2 PUSHWORD #6 _LONG2HEX PUSHLONG JSLADDR PUSHLONG #ITEM27TXT+2 PUSHWORD #6 _LONG2HEX GETLONG 0,TEXTPASSEDPTR,ITEM30+12 ;command line text PUSHLONG ITEM30+12 PUSHLONG #ITEM29TXT+2 PUSHWORD #6 _LONG2HEX RTS TEMP1 DC I4'0' * ---------------------------------------------------------------- * * execute the Find Text dialog FINDTXTD ANOP PHA PHA PUSHLONG #FT _GETNEWMODALDIALOG PULLLONG FTDIALOG PUSHLONG FTDIALOG _SHOWWINDOW STZ DONE REPEAT PHA PUSHLONG #0 _MODALDIALOG PLA STA HIT1 CMP #1 ;OK button BNE NEXT LDA #1 ;set the done flag STA DONE BRL LAST NEXT CMP #4 in radio button range (4-5-6)? BLT LAST ->not here CMP #7 top button +1 BGE LAST STA FNDRESULT PHA PUSHLONG FTDIALOG PUSHWORD FNDRESULT _GETDITEMVALUE PLA EOR #$0001 STA FNDVALUE PHA PUSHLONG FTDIALOG PUSHWORD FNDRESULT _SETDITEMVALUE LDA FINDPREF LDY FNDVALUE LDX FNDRESULT CASE FndResult OF CPX #4 BNE NEXT1 STY FNDCASE EOR #$0001 flip case sensitive BRA NEXT3 NEXT1 CPX #5 BNE NEXT2 STY FNDREAD EOR #$0002 flip read only BRA NEXT3 NEXT2 CPX #6 BNE LAST STY FNDEDIT EOR #$0004 flip editable NEXT3 STA FINDPREF LAST LDA DONE BNE EXIT BRL REPEAT EXIT PUSHLONG FTDIALOG PUSHWORD #3 PUSHLONG #FT3TXT _GETITEXT PUSHLONG FTDIALOG _CLOSEDIALOG PUSHLONG XCMDIALOG PUSHWORD #33 PUSHLONG #ITEM33TXT _SETITEXT RTS DONE DC I2'0' HIT1 DC I2'0' * ---------------------------------------------------------------- * * this is the program... MAIN ANOP _InitCursor ;make cursor into an arrow MOVELONG 00,PARAMLIST ;save the pointer LDA RADRESULT is it zero? BNE MAIN1 JSR INITDATA initialize on first entry. MAIN1 ANOP STZ CANCELED * ---------------------------------------------------------------- * * top of dialog interaction REPEAT1 ANOP JSR GETTHEDATA ;get dialog data for display PHA PHA PUSHLONG #XCMD _GETNEWMODALDIALOG PULLLONG XCMDIALOG PUSHWORD #1 PUSHLONG XCMDIALOG PUSHWORD RADRESULT _SETDITEMVALUE PUSHLONG XCMDIALOG PUSHWORD #17 _DisableDItem PUSHWORD #255 ;inactivate control (dim it) PHA PHA PUSHLONG XCMDIALOG PUSHWORD #17 _GetControlDItem _HiliteControl PUSHLONG XCMDIALOG _SHOWWINDOW STZ ACTION * ---------------------------------------------------------------- * * REPEAT2 ANOP PHA PUSHLONG #0 _MODALDIALOG PLA ;get ID of item hit STA HIT CMP #11 in radio button range (11 to 18)? BLT ANEXT ->not here CMP #19 top button +1 BGE ANEXT * ---------------------------------------------------------------- * * STA RADRESULT it's a radio button PUSHWORD #1 PUSHLONG XCMDIALOG PUSHWORD RADRESULT _SETDITEMVALUE LDA RADRESULT pick up the button # CMP #18 is it Find Text? BNE ALAST JSR FINDTXTD call FindText dialog BRA ALAST * ---------------------------------------------------------------- * * ANEXT ANOP CMP #21 is it info BNE ANEXT1 * ---------------------------------------------------------------- * * Info alert PHA PUSHWORD #0 PUSHLONG #0 PUSHLONG #INFOSTRING _AlertWindow PLA BRA ALAST ;and get another hit * ---------------------------------------------------------------- * * ANEXT1 ANOP CMP #20 is it cancel BEQ AGOTONE CMP #34 ;is it 'do it' BNE ALAST AGOTONE LDA #1 STA ACTION action := true * ---------------------------------------------------------------- * * ALAST LDA ACTION time to exit BNE AEXIT BRL REPEAT2 AEXIT ANOP * ---------------------------------------------------------------- * * CASEOF ANOP LDA HIT get the hit button CMP #20 ;cancel button BNE BNEXT LDA #1 STA CANCELED BRL BLAST * ---------------------------------------------------------------- * * BNEXT ANOP CMP #34 ;'do it' BEQ BDOIT BRL BLAST * ---------------------------------------------------------------- * * BDOIT ANOP PUSHLONG XCMDIALOG PUSHWORD #31 PUSHLONG #ITEM31TXT _GETITEXT PUSHLONG XCMDIALOG PUSHWORD #33 PUSHLONG #ITEM33TXT _GETITEXT PUSHLONG XCMDIALOG _CLOSEDIALOG LDA RADRESULT SEC SBC #10 ;make it into a number from 1-8 CMP #5 ;is it one of the standard (simple) calls? BLT BdoStdCall ;1-4 CMP #6 BNE BNEXT1 ;or 6 * ---------------------------------------------------------------- * * BdoStdCall ANOP ;do a standard (no parameters) call TAX JSR callHandler BRL BLAST * ---------------------------------------------------------------- * * BNEXT1 ANOP CMP #5 is it movetocard BEQ BMOVE BRL BNEXT2 * ---------------------------------------------------------------- * * BMOVE ANOP LDA ITEM31TXT get length AND #$FF TAX LDA #0 SEP #$20 STA ITEM31TXT+1,X put $00 at end REP #$20 PHA ;result space on stack PUSHLONG #ITEM31TXT+1 pointer to string PHX ;length PHA ;0 for no sign _DEC2INT PLX STX CARDNUM BEQ BBAD =0 is error card value error BCS BBAD ;carry set is toolset error PER BLAST-1 return PHX ;store ID of card to jump to LDX #5 ;5 = MoveToCardID BRL callHandler ;call handler - CAN'T JSR!! BBAD ANOP ;goes here if invalid card ID entered PHA ;toolerror PUSHLONG #CARDERR22 PUSHWORD #4 _Int2Hex PHA PUSHWORD #0 PUSHLONG #0 PUSHLONG #CARDERR _AlertWindow pla LDA #4 STA ITEM31TXT reset length LDA #'00' STA ITEM31TXT+1 STA ITEM31TXT+3 BRL BLAST * ---------------------------------------------------------------- * * BNEXT2 ANOP CMP #8 is is find text BNE BLAST * ---------------------------------------------------------------- * * PER BLAST-1 return PUSHLONG #ITEM33TXT PUSHWORD FINDPREF LDX #8 ;8 = MoveToCardID BRL callHandler ;call handler - CAN'T JSR!! * ---------------------------------------------------------------- * * BLAST ANOP LDA CANCELED BNE BEXIT BRL REPEAT1 BEXIT ANOP * ---------------------------------------------------------------- * * PUSHLONG XCMDIALOG _CLOSEDIALOG RTS * ---------------------------------------------------------------- * * callHandler ANOP ;call HyperStudio XCMD handler MOVELONG HOLD0,0 PHK ;push return address PER CALLRET-1 LDA JSLADDR+2 ;push call address SEP #$20 PHA REP #$20 LDA JSLADDR DEC A PHA RTL ;go to the routine CALLRET STA HS return code MOVELONG PARAMLIST,0 RTS * ---------------------------------------------------------------- * * ButtonItem EQU $0A RadItem EQU $0C ;RadioItem DisabledText EQU $0F+$8000 EditlineItem EQU $11 CHECKITEM EQU $0B RadFam EQU 3 ;RadioFamily number for buttons RL EQU 282 ;left edge for radio button RR EQU RL+123 ;right edge for radio button hits CL EQU 186 ;center line for parameter list CX EQU CL+5 ;just a tad over for data output Offset EQU 32 ;vertical offset for XCMD dialog box * dialog template list is in reverse * order so it draws from top down. XCMD DC I2'18+Offset,24,141+Offset,592+24' ;bounds of rect DC I2'0' ;start out invisible DC I4'0' DC I4'Item21' ;21 = info button DC I4'Item20' ;20 = cancel button DC I4'ITEM01' ;01 = DoIt button DC I4'Item18,ITEM33' DC I4'Item17' DC I4'Item16' DC I4'Item15,ITEM31' edit line item # DC I4'Item14' DC I4'Item13' DC I4'Item12' DC I4'Item11' DC I4'Item30,ITEM10' DC I4'Item29,ITEM9' DC I4'Item28,ITEM8' DC I4'Item27,ITEM7' DC I4'Item26,ITEM6' DC I4'Item25,ITEM5' DC I4'Item24,ITEM4' DC I4'Item23,ITEM3' DC I4'Item22,ITEM2' DC I4'ITEM32' DC I4'ITEM19' ;19 = program title DC I4'0' * ---------------------------------------------------------------- * * ITEM19 DITEM 19,2,200,11,411,DISABLEDTEXT,ITEM19TXT,0,0,0 ITEM19TXT STR 'HyperStudio XCMD Exerciser' ITEM32 DITEM 32,13,052,22,590,DISABLEDTEXT,ITEM32TXT,0,0,0 ITEM32TXT DC I1'71' DC C'-------Parameter List------- ' DC C'---Function Calls--- ' DC C'--Action--' CR 13 set desired top line and bottom line ITEM2 DITEM 2,&T,052,&B,CL,DISABLEDTEXT,ITEM2TXT,0,0,0 ITEM2TXT STR 'Original Button ID:' ITEM22 DITEM 22,&T,CX,&B,RL-5,DISABLEDTEXT,ITEM22Txt,0,0,0 ITEM22Txt STR ' ' CR ITEM3 DITEM 3,&T,73,&B,CL,DISABLEDTEXT,ITEM3TXT,0,0,0 ITEM3TXT STR 'Current card ID:' ITEM23 DITEM 23,&T,CX,&B,RL-5,DISABLEDTEXT,ITEM23TXT,0,0,0 Item23Txt STR ' ' CR ITEM4 DITEM 4,&T,65,&B,CL,DISABLEDTEXT,ITEM4TXT,0,0,0 ITEM4TXT STR 'Handle to script:' ITEM24 DITEM 24,&T,CX,&B,RL-5,DISABLEDTEXT,ITEM24TXT,0,0,0 Item24Txt STR '$ ' CR ITEM5 DITEM 5,&T,60,&B,CL,DISABLEDTEXT,ITEM5TXT,0,0,0 ITEM5TXT STR 'Pointer to script:' ITEM25 DITEM 25,&T,CX,&B,RL-5,DISABLEDTEXT,ITEM25TXT,0,0,0 Item25Txt STR '$ ' CR ITEM6 DITEM 6,&T,67,&B,CL,DISABLEDTEXT,ITEM6TXT,0,0,0 ITEM6TXT STR 'Length of script:' ITEM26 DITEM 26,&T,CX,&B,RL-5,DISABLEDTEXT,ITEM26TXT,0,0,0 Item26Txt STR '$ ' CR ITEM7 DITEM 7,&T,27,&B,CL,DISABLEDTEXT,ITEM7TXT,0,0,0 ITEM7TXT STR 'Function call address:' ITEM27 DITEM 27,&T,CX,&B,RL-5,DISABLEDTEXT,ITEM27TXT,0,0,0 Item27Txt STR '$ ' CR ITEM8 DITEM 8,&T,69,&B,CL,DISABLEDTEXT,ITEM8TXT,0,0,0 ITEM8TXT STR 'Original card ID:' ITEM28 DITEM 28,&T,CX,&B,RL-5,DISABLEDTEXT,ITEM28TXT,0,0,0 Item28Txt STR ' ' CR ITEM9 DITEM 9,&T,11,&B,CL,DISABLEDTEXT,ITEM9TXT,0,0,0 ITEM9TXT STR 'Pointer to cmd line text:' ITEM29 DITEM 29,&T,CX,&B,RL-5,DISABLEDTEXT,ITEM29TXT,0,0,0 Item29Txt STR '$ ' CR ITEM10 DITEM 10,&T,55,&B,CL,DISABLEDTEXT,ITEM10TXT,0,0,0 ITEM10TXT STR 'Command line text:' ITEM30 DITEM 30,&T,CX,&B,460,DISABLEDTEXT,0,0,0,0 CR 13 ITEM11 DITEM 11,&T,RL,&B,RR,RadItem,ITEM11TXT,0,RadFam,0 ITEM11TXT STR 'First card' CR ITEM12 DITEM 12,&T,RL,&B,RR,RadItem,ITEM12TXT,0,RadFam,0 ITEM12TXT STR 'Last card' CR ITEM13 DITEM 13,&T,RL,&B,RR,RadItem,ITEM13TXT,0,RadFam,0 ITEM13TXT STR 'Previous card' CR ITEM14 DITEM 14,&T,RL,&B,RR,RadItem,ITEM14TXT,0,RadFam,0 ITEM14TXT STR 'Next card' CR ITEM15 DITEM 15,&T,RL,&B,RR,RadItem,ITEM15TXT,0,RadFam,0 ITEM15TXT STR 'Move to card:' ITEM31 DITEM 31,&T-2,RR+1,&B+2,RR+49,EDITLINEITEM,ITEM31TXT,4,0,0 Item31Txt STR '0000' DC H'00' CR ITEM16 DITEM 16,&T,RL,&B,RR,RadItem,ITEM16TXT,0,RadFam,0 ITEM16TXT STR 'Redraw card' CR ITEM17 DITEM 17,&T,RL,&B,RR,RadItem,ITEM17TXT,0,RadFam,0 ITEM17TXT STR 'Launch stack' CR ITEM18 DITEM 18,&T,RL,&B,RR,RadItem,ITEM18TXT,0,RadFam,0 ITEM18TXT STR 'Find text:' ITEM33 DITEM 33,&T-2,RR+1,&B+2,RR+145,EDITLINEITEM,ITEM33TXT,16,0,0 Item33Txt DC I1'0' DC C' ' ITEM01 DITEM 34,28,479,42,545,BUTTONITEM,ITEM01TXT,0,0,0 ITEM01TXT STR 'Do It' ITEM20 DITEM 20,53,479,67,545,BUTTONITEM,ITEM20TXT,0,0,0 ITEM20TXT STR 'Cancel' ITEM21 DITEM 21,78,479,92,545,BUTTONITEM,ITEM21TXT,0,0,0 ITEM21TXT STR 'Info...' * ---------------------------------------------------------------- * * FT DC I2'36+Offset,200,096+Offset,440' bounds of rect DC I2'0' start out invisible DC I4'0' DC I4'FT1' 1 = OK button DC I4'FT2,FT3' DC I4'FT4' DC I4'FT5' DC I4'FT6' DC I4'FT9' 9 = program title DC I4'0' FT1 DITEM 01,20,180,00,000,BUTTONITEM,FT1TXT,0,1,0 FT1TXT STR 'OK' FT2 DITEM 2,47,08,56,087,DISABLEDTEXT,FT2TXT,0,0,0 FT2TXT STR 'Find text:' FT3 DITEM 3,47-2,88,56+2,88+144,EDITLINEITEM,FT3TXT,16,0,0 FT3TXT EQU ITEM33TXT FT4 DITEM 4,35,08,44,168,CHECKITEM,FT4TXT,0,0,0 FT4TXT STR 'Case sensitive' FNDCASE EQU FT4+16 FT5 DITEM 5,24,08,33,168,CHECKITEM,FT5TXT,0,0,0 FT5TXT STR 'Read only fields' FNDREAD EQU FT5+16 FT6 DITEM 6,13,08,22,168,CHECKITEM,FT6TXT,0,0,0 FT6TXT STR 'Editable fields' FNDEDIT EQU FT6+16 FT9 DITEM 9,02,08,11,239,DISABLEDTEXT,FT9TXT,0,0,0 FT9TXT STR 'Find Text Search Parameters' END ABC* ---------------------------------------------------------------- * * CR is used as a shortcut for generating the screen coordinates * used in the DITEM macro calls. Parameter ]2 of DITEM is a * QDII Rect: y1,x1,y2,x2 with commas between the numbers. * GETLONG is a shorcut for picking up data by GETTHEDATA. MACRO CR &S AIF C:&T>0,.Y GBLA &T GBLA &B .Y AIF C:&S=0,.Z &T SETA &S .Z &T SETA &T+11 &B SETA &T+9 MEND MACRO &LAB DITEM &ID,&V1,&H1,&V2,&H2,&DT,&DS,&V,&F,&C &LAB DC I2'&ID,&V1,&H1,&V2,&H2,&DT' DC I4'&DS' DC I2'&V,&F' DC I4'&C' MEND MACRO GETLONG &DPLOC,&OFFSET,&WHERE LDY #&OFFSET LDA [&DPLOC],Y STA &WHERE INY INY LDA [&DPLOC],Y STA &WHERE+2 MEND EFGHIJKL MACRO &lab _HiliteControl &lab ldx #$1110 jsl $E10000 MEND MACRO &lab _CloseDialog &lab ldx #$0C15 jsl $E10000 MEND MACRO &lab _DisableDItem &lab ldx #$3915 jsl $E10000 MEND MACRO &lab _GetControlDItem &lab ldx #$1E15 jsl $E10000 MEND MACRO &lab _GetDItemValue &lab ldx #$2E15 jsl $E10000 MEND MACRO &lab _GetIText &lab ldx #$1F15 jsl $E10000 MEND MACRO &lab _GetNewModalDialog &lab ldx #$3215 jsl $E10000 MEND MACRO &lab _ModalDialog &lab ldx #$0F15 jsl $E10000 MEND MACRO &lab _SetDItemValue &lab ldx #$2F15 jsl $E10000 MEND MACRO &lab _SetIText &lab ldx #$2015 jsl $E10000 MEND MACRO &lab _Dec2Int &lab ldx #$280B jsl $E10000 MEND MACRO &lab _Int2Dec &lab ldx #$260B jsl $E10000 MEND MACRO &lab _Int2Hex &lab ldx #$220B jsl $E10000 MEND MACRO &lab _Long2Hex &lab ldx #$230B jsl $E10000 MEND MACRO &lab _InitCursor &lab ldx #$CA04 jsl $E10000 MEND MACRO &lab pulllong &addr1,&addr2 &lab ANOP AIF C:&addr1=0,.a AIF C:&addr2=0,.b LCLC &C &C AMID &addr1,1,1 AIF "&C"="[",.zeropage pullword &addr1 sta &addr2 pullword &addr1+2 sta &addr2+2 MEXIT .a pullword pullword MEXIT .b pullword &addr1 pullword &addr1+2 MEXIT .zeropage ldy #&addr2 pullword &addr1,y ldy #&addr2+2 pullword &addr1,y MEND MACRO &lab pullword &SYSOPR &lab ANOP pla AIF C:&SYSOPR=0,.end sta &SYSOPR .end MEND MACRO &lab pushlong &addr,&offset &lab ANOP LCLC &C LCLC &REST &C AMID &addr,1,1 AIF "&C"="#",.immediate AIF "&C"="[",.zeropage AIF C:&offset=0,.nooffset AIF "&offset"="s",.stack pushword &addr+2,&offset pushword &addr,&offset MEXIT .nooffset pushword &addr+2 pushword &addr MEXIT .immediate &REST AMID &addr,2,L:&addr-1 dc I1'$F4',I2'(&REST)|-16' dc I1'$F4',I2'&REST' MEXIT .stack pushword &addr+2,s pushword &addr+2,s MEXIT .zeropage ldy #&offset+2 pushword &addr,y ldy #&offset pushword &addr,y MEND MACRO &lab pushword &SYSOPR &lab ANOP AIF C:&SYSOPR=0,.b LCLC &C &C AMID "&SYSOPR",1,1 AIF ("&C"="#").AND.(S:LONGA),.immediate lda &SYSOPR pha MEXIT .b pha MEXIT .immediate LCLC &REST LCLA &BL &BL ASEARCH "&SYSOPR"," ",1 AIF &BL>0,.a &BL SETA L:&SYSOPR+1 .a &REST AMID "&SYSOPR",2,&BL-2 dc I1'$F4',I2'&REST' MEND MACRO &lab str &string &lab dc i1'L:&string',C'&string' MEND MACRO &lab _AlertWindow &lab ldx #$590E jsl $E10000 MEND MACRO &lab _ShowWindow &lab ldx #$130E jsl $E10000 MEND MACRO CR &S AIF C:&T>0,.Y GBLA &T GBLA &B .Y AIF C:&S=0,.Z &T SETA &S .Z &T SETA &T+11 &B SETA &T+9 MEND MACRO &LAB DITEM &ID,&V1,&H1,&V2,&H2,&DT,&DS,&V,&F,&C &LAB DC I2'&ID,&V1,&H1,&V2,&H2,&DT' DC I4'&DS' DC I2'&V,&F' DC I4'&C' MEND MACRO GETLONG &DPLOC,&OFFSET,&WHERE LDY #&OFFSET LDA [&DPLOC],Y STA &WHERE INY INY LDA [&DPLOC],Y STA &WHERE+2 MEND MACRO &lab movelong &from,&to1,&to2 &lab ANOP LCLC &C LCLC &REST &C AMID &from,1,1 &REST AMID &from,2,L:&from-1 AIF "&C"="[",.zeropage AIF C:&to2=0,.a AIF ("&to1"="s").or.("&to1"="x").or.("&to1"="y"),.indexed moveword &from,&to1,&to2 AGO .b .a moveword &from,&to1 .b AIF "&C"="#",.immediate AIF C:&to2=0,.c moveword &from+2,&to1+2,&to2+2 MEXIT .c moveword &from+2,&to1+2 MEXIT .immediate AIF C:&to2=0,.d moveword #^&REST,&to1+2,&to2+2 MEXIT .d moveword #^&REST,&to1+2 MEXIT .zeropage moveword &from,&to1,&to2 ldy #&to1+2 lda &from,y sta &to2+2 MEXIT .indexed lda &from,&to1 sta &to2 lda &from+2,&to1 sta &to2+2 MEND MACRO &lab moveword &from,&to1,&to2 &lab ANOP LCLC &C &C AMID &from,1,1 AIF "&C"="[",.zeropage lda &from sta &to1 AIF C:&to2=0,.a sta &to2 .a MEXIT .zeropage AIF "&to1"="0",.b ldy #&to1 lda &from,y sta &to2 MEXIT .b lda &from sta &to2 MEND COMPILE -L HS.XCMD.ASM KEEP=HS.XCMD LINK +L HS.XCMD KEEP=HS.XCMD FILETYPE HS.XCMD $BC OPQRSTUVWY + ,= HSXCMDK022 6ȷ6 %22܅k33/HyperStudio XCMD Exerciser Written by Eric C. Mueller Updated by Ken Kashmarek/ ^Version 3.0, 01-DEC-89 32/Card ID number invalid (error $ )./ Cancel H &" B`H &"H &"ȷHH #"ȷHHff #"HHȷhhHH  #"6H6HPP #"  ȷ  H H #"`HH  2"hPhPPHP H"!H"h#  !mhcNHPHPHN H."hILHPHPHN H/"JLN  I  I   IJ!kPHPH  "PHP H ">H>H!   "`"::B T "HHll 2"h>h>>H>HB H/">H>H9"HH>H>H"">H> H"VH"hF +&B>H>HB H/"B4 #/HXXY"h"VVF  T ">H>H  ">H>H!  ">H> H "B8  B n )   H   H ("H bYڢkH ""H Y"h 00   b  JHT>H> H "`22Kb 6 H 6:HkD::`2h   R u -     } [ 8  Z8 pN$5 /HyperStudio XCMD Exerciser 4NM\G-------Parameter List------- ---Function Calls--- --Action--4!(Original Button ID:! #I,%Current card ID:#, .A7<&Handle to script:.7f $ 9<B'Pointer to script:9B $ DCM&Length of script:DM $ OX!+Function call address:OXP $ ZEcr&Original card ID:Zc e n.Pointer to cmd line text:en $ p7y ?Command line text:py ! P  First card #, s  Last card .7  " Previous card9B   Next cardDM  " Move to card:BO 0000OX !  Redraw cardZc E ! Launch stacken j  Find text:!cp& % "*!   !"#$ Do It5C!  CancelN\!  Info...D) D g      A OK/8W\  Find text:-X: #,  #Case sensitive!  %Read only fields   $Editable fields   $Find Text Search Parametersfields   $Find Text Sea[\]^_`ab+ ,@ + K0246ȷ8 %24k33/HyperStudio XCMD Exerciser Written by Eric C. Mueller Updated by Ken Kashmarek/ ^Version 3.0, 01-DEC-89 32/Card ID number invalid (error $ )./ Cancel H &" B`H &"H  &"ȷ!!HH #"ȷ!!HHh #"HH!ȷ!hh!HH #"8H6HR #" , ȷ. . H, H #"`HH 2"hPhRRHPH"!H"h# !mhcNHRHPHNH."hILHRHPHNH/"JLN I I  IJ!kRHPH "RHPH "@H>H!  "`":<B T "HHl2"h>h@@H>HBH/"@H>H9"HH@H>H""@H>H"VH"hF +&B@H>HBH/"B4 #/HXY"h"VVF T"@H>H "@H>H! "@H>H "B8  Bn )  H H ("H bYڢkH ""HY"h 00  b JHT@H>H "`24Kb 8 H 6:HkD:<`2h R u - } [ 8 Z8 pN$5 HyperStudio XCMD Exerciser 4NMG-------Parameter List------- ---Function Calls--- --Action--4!Original Button ID:! #I,Current card ID:#, .A7<Handle to script:.7f $ 9<BPointer to script:9B $ DCMLength of script:DM $ OX!Function call address:OXP $ ZEcrOriginal card ID:Zc e nPointer to cmd line text:en $ p7y Command line text:py ! P  First card #, s  Last card .7  Previous card9B  Next cardDM  Move to card:BO 0000OX !  Redraw cardZc E  Launch stacken j  Find text:!cp&  "*! Do It5C! CancelN\! Info...D) D g   A OK/8W\ Find text:-X: #, Case sensitive! Read only fields  Editable fields   Find Text Search Parameters )B lhR&   GlXQ i   z ~  R u -     } [ 8  Z8 pN$5AM0<Zf|!DPfr D P g s       ! 9 E ^ j      )  D  g     ! 5 A P \ s        #&+ ,EZadho  )48;?J\gw{ /47H!  "`":<B T "HHo2"h>h@@H>HBH/"@H>H9"HH@H>H""@H>H"VH"hF +&B@H>HBH/"B4 #/HXY"h"VVF T"@H>H "@H>H! "@H>H "B8  En )  H H ("H bYڢkH ""HY"h 00 b JHT@H>H "`24Kb 8 H 6:HkD:<`2h U x 0 ^ ; # ]; sQ' 8 HyperStudio XCMD Exerciser 4NPG-------Parameter List------- ---Function Calls--- --Action--4!Original Button ID:! #I,Current card ID:#," .A7?Handle to script:.7i $ 9<BPointer to script:9B $ DCMLength of script:DM $ OX$Function call address:OXS $ ZEcuOriginal card ID:Zc e nPointer to cmd line text:en $ p7y Command line text:py ! S  First card #, v  Last card .7  Previous card9B  Next cardDM  Move to card:BO 0000OX $  Redraw cardZc H  Launch stacken m  Find text:!cp&  "*! Do It5C! CancelN\! Info...D- H k  E OK/8W` Find text:-X: #, Case sensitive! Read only fields  Editable fields   Find Text Search Parameters  #&+ ,EZadho  )48;?J\gw{ 27:?BEMX\bfjuy %(0;IMWaeoy} !$.6:FKT\bej     w T ` 9 E % !    k  H  -     a m < H  $      j v G S   iuGS$]i3?"DP8 'Qs ;]# ; ^      0 x U   }   l T XJo  & UklB#) MERLIN.ASMv' ')HS.XCMD.Sm:;oy* l.HS.XCMD.MACS.S/ Ny( lHSL.SL:y( l)HS.XCMD.L p/ y* l'HS.XCMD py* lnopqrstuvwxyz{|}~ԠƍРƍҠҍҠ΍ î 󮪍 Į Ĭ Į ֳ  占ÍÍؠ썠ԠƍӠòӮïͯԠ΍ ݲ ፪ 󮍪 ҠԠԫ ԫ͠Íנݱݲݳ̠ݴנݵݶ̠ݷ͍ǠÍ٠ݲݱݬٍݳٍٍݱݬٍݳ͍ ĠՠĠՠĠՠȠՠҠՠӠՠ 􍍠ˠ   Ġ Ǡİ ٠ ؠǠӻҠ卍ҠΠ卍Ǡİ ̍ Ġנİ̠ЍҠ̠󍍪 Ԡ̠Ǡ̠ĠԠנӠנԠנ͠נƠנŠנԠנǠ̠ĠנΠנ獠à à î à 믧à í ؠҠà Ҳà ؠ ٠Ġ čԲà۰ݬٻͲԫĠԠ퍠Ӎ ٠Ġ čԲà۰ݬٻͲԫ٠Ġ čԲà۰ݬٻͲԫǠȻб DzؠбͲԫǠĻб DzؠбͲԫǠ ǠбǠб Ǡ DzؠбͲԫDzؠһͲԫǠһͳ DzؠͳͲԫӍб̠ čǠԍǠǍנǍڠōԠǠԍР Šԍ 獠ō̠ԍԍР堨ԠԠ占РŠԍԍŠǻԍҠōŠŻǻԍƍ٠ōؠԠŠƍؠŠԱ٠ōҠ占ԳԱؠŠԲ٠čҠԳԲؠŠԍ٠ԍҠ卺ԳƍԍōŠԍ̠ԍԍԠǻԳԠ獠ǠǍԠǻͳԠ獠ӍŠנԠנ ΍ ǠԠ ԠᅪŠ΍Ҡ΍ڠč ԱҠ ǠčǠǍŠǻԍǻ 썠Ġ ǻ 占썠נǠ 卍ڠ΍ ԲǠ ԍР堨ԠԠ占РŠԍ Ԡ ŠǻԍԠРŠԍҠĠ獠ԍ ԍРŠԱ 獠Ԡ ԱР썠ѠōР ŠԍŠΠ卪 ԠΠŠԍ̠Բԍ ƍԠР Šԍč̠ԍ ԍР Ѡԍ̠ԍ ԍԠǻͳԠ頣獠ԠǻͳԠ獠ǠǍԍÍà Р 󿍠Ԡ젻РŠԱ 젻 썠؍Ҡ̠ԍ ԱР䍠Ѡō̠Բ ōͳԠ荠Ġƍ؍Рͳԫؠ䍠Р 덠Ǡͳԫ獠ؠ荠 òԍ؍ؠ͍ѠĠӠĠ 򍍠Ҡԭؠ ؠ č̠ Χ ҡĠ 䍠ǠҲĠҠ 獠፠ͳԠ荠ͳԫͳԫ̠ԍ ԲРŠԍ ҠԭǠͳԍĠƍؠ č̠ Χ ҡ ԍčŠԍ̠Աԍ ǠǍӍ Ǡİˠ Ҡԭҫ РРҍà̠ ԠӠ占ǠԻӍ àƫ͠ ̠ Ҡ̫ ̠ ؠ̫ 卻 Ġנ נ 占̠̠ ̠ ̠Ͱ ̠ͳ̠̠̠ͳ̠̠̠̠̠ͱ̠͹̠͸̠ͷ̠Ͷ̠͵̠ʹ̠ͳ̠Ͳ̠ͳ̠ͱ 占̠ ͱ͠ԻԻԠҠ ͳ͠ԻԻԠ à à 󭭭 àԠ Ҡ Ͳ͠Ԭ¬̻ԻԻԠҠ ĺͲ͠Ԭج¬̭ԻͲͲҠ ҍͳ͠Ԭ¬̻ԻԻԠҠ ĺͲ͠Ԭج¬̭ԻͲԻҠ ҍʹ͠Ԭ¬̻ԻԻԠҠ Ͳ͠Ԭج¬̭ԻͲԻҠ ҍ͵͠Ԭ¬̻ԻԻԠҠ Ͳ͠Ԭج¬̭ԻͲԻҠ ҍͶ͠Ԭ¬̻ԻԻԠҠ Ͳ͠Ԭج¬̭ԻͲԻҠ ҍͷ͠Ԭ¬̻ԻԻԠҠ 󺧍Ͳ͠Ԭج¬̭ԻͲԻҠ ҍ͸͠Ԭ¬̻ԻԻԠҠ ĺͲ͠Ԭج¬̭ԻͲԻҠ ҍ͹͠Ԭ¬̻ԻԻԠҠ Ͳ͠Ԭج¬̭ԻͲԻҠ ҍͱ͠Ԭ¬̻ԻԻԠҠ ͳ͠Ԭج¬ԻԠ ҍͱ͠Ԭ̬¬һԻԠҠ 䧍ҍͱ͠Ԭ̬¬һԻԠҠ 䧍ҍͱ͠Ԭ̬¬һԻԠҠ 䧍ҍͱ͠Ԭ̬¬һԻԠҠ 䧍ҍͱ͠Ԭ̬¬һԻԠҠ 产ͳ͠ԭҫ«ҫͻͳԻҠؠҍͱ͠Ԭ̬¬һԻԠҠ 䧍ҍͱ͠Ԭ̬¬һԻԠҠ 맍ҍͱ͠Ԭ̬¬һԻԠҠ ͳ͠ԭҫ«ҫͻͳԻà Ͱ͠ͻԻԠҠ Ͳ͠ͻԻԠҠ짍Ͳ͠ͻԻԠҠﮮ Ԡנ נ 占̠̠Ա ̠ԲԳ̠Դ̠Ե̠Զ̠Թ 占̠Ա͠ͻԻԠҠ˧Բ͠ԻԻԠҠ Գ͠ͻԳԻԳԠՠͳԍԴ͠ͻԻԠҠ 姍ŠՠԴԵ͠ͻԻԠҠ ĠՠԵԶ͠ͻԻԠҠ ԠՠԶԹ͠ԻԻԠҠ 󧍍Ԡƍ֠ӮĮ̠̍à젤Ǡà̠ݱ젤ñǠàб̠ݱ젤Ʊ͠àӠנݱݲ젤űԠà̠ݱ̠ݲݳ젤ƱŠàנݱנݲݳ젤ƱǠàв̠ݱ젤͠àנݱݲ젤Բؠà젤 Ҡà젤נà̠ݱ젤Šנàנݱ̠ݲݳ젤Š̠àנݱ̠ݲנà̠ݱנݲ̠àϠݰ̠ݱϠݰ̠ݲϠݰ̠ݳϠݰ̠ݴΠΠΠΠв̠àƠݱݱŠנݱΠנݱб̠àƠݱݱŠנݱΠנݱ̠àƠݱݱŠנݱΠנݱנàƠݱݱŠƠدݱΠݱΠӠàϠݰРݱޠŠΠǠàƠݱ䠣ݱŠݱΠݱĠàƠݱݱŠƠدݱΠݱΠǠàϠݰݱݱŠ䠍䠍ΠĠàϠݰݱΠƠدϠݰݱΠΠǠàݱݲݱݲĠàݱݲƠدݱݲΠ̠àؠݱ̠űDzؠà̠ݱݲנݳ젤 Բàà̠ݱݲנݳݴ젤 Ԡà̠ݱ̠ݲݳ젤Šàנݱݲ젤űòԠà젤 נàϠݰנݱϠݰנݲϠݰנݳϠݰנݴΠΠΠΠҍ̍͠ӮčҠ Ġ 򽲍Рà 卍ˠӮĮ̍֠ӮčK0246ȷ8 (24k33/HyperStudio XCMD Exerciser Written by Eric C. Mueller Updated by Ken Kashmarek/ ^Version 3.0, 01-DEC-89 32/Card ID number invalid (error $ )./ Cancel H &" B`H݆ &"H# &"ȷ!!HH #"ȷ!!HHk #"HH!ȷ!hh!HH #"8H6HU #" /ȷ11H/H #"`HH2"hPhRRHPH"$H"h& $pkfNHRHPHNH."hILLHRHPHNH/"JLNII  IJ$hRHPH"RHPH "@H>H! "`":h@@H>HBH/"@H>H9"HH@H>H""@H>H"VH"hF +&B@H>HBH/"B4 #/HXY"h"VVF T"@H>H"@H>H!"@H>H "B8  En)  HH ("H bYڢkH ""HǀY"h00 bJHT@H>H "`24Kb 8 H 6:HkD:<`2hߊUx0 ȉ^;#ֈ]; sQ' Ć8 HyperStudio XCMD Exerciser 4NPG-------Parameter List------- ---Function Calls--- --Action--4!Original Button ID:!܆ #I,Current card ID:#," .A7?Handle to script:.7i $ 9<BPointer to script:9B $ DCM؇Length of script:DM $ OX$Function call address:OXS $ ZEcuOriginal card ID:Zc e nPointer to cmd line text:en $ p7yCommand line text:py ! S First card #, v Last card .7  Previous card9B  Next cardDM  Move to card:BO0000OX $ Redraw cardZc H Launch stacken m Find text:!cp& "*! Do It5C! ؊CancelN\! Info...D-HkӋ EOK/8W` Find text:-X:#, Case sensitive! ‹Read only fields  Editable fields  Find Text Search Parameters02 46 8#(&2+4 Р B)݆,B##E#Za!d!hlo!!kkk!!!и86UUU/11 /&)4P8R;R?PJ$\&g$wN{RPNLLRPNJLNJ$RPАRP @>А2:7<:B?BTE"JooMoX>\@b@f>jBu@y>@>@>VFB@>BB#XX X%V(V0F;TI@M>TWa@e>lАoy@}>BEHǀǏ  А!$J.T6@:>F2K4T8\6bDe:jH!  "`":<B T "HHo2"h>h@@H>HBH/"@H>H9"HH@H>H""@H>H"VH"hF +&B@H>HBH/"B4 #/HXY"h"VVF T"@H>H "@H>H! "@H>H "B8  En )  H H ("H bYڢkH ""HY"h 00 b JHT@H>H "`24Kb 8 H 6:HkD:<`2h U x 0 ^ ; # ]; sQ' 8 HyperStudio XCMD Exerciser 4NPG-------Parameter List------- ---Function Calls--- --Action--4!Original Button ID:! #I,Current card ID:#," .A7?Handle to script:.7i $ 9<BPointer to script:9B $ DCMLength of script:DM $ OX$Function call address:OXS $ ZEcuOriginal card ID:Zc e nPointer to cmd line text:en $ p7y Command line text:py ! S  First card #, v  Last card .7  Previous card9B  Next cardDM  Move to card:BO 0000OX $  Redraw cardZc H  Launch stacken m  Find text:!cp&  "*! Do It5C! CancelN\! Info...D- H k  E OK/8W` Find text:-X: #, Case sensitive! Read only fields  Editable fields   Find Text Search Parameters  #&+ ,EZadho  )48;?J\gw{ 27:?BEMX\bfjuy %(0;IMWaeoy} !$.6:FKT\bej     w T ` 9 E % !    k  H  -     a m < H  $      j v G S   iuGS$]i3?"DP8 'Qs ;]# ; ^      0 x U   }   l T XJo  & UklB#) ORCA.Cv' ''XCMDLIB y y *HS.XCMD.CCW.ny HS.XCMD.ROOTx- y )HS.XCMD.A4y y 'HS.XCMDky y BUILD.CCy ,>LIBRARY  XCMDLIB.Ai   & 35 E V gM xo iiiiiiiii5 5 5 i ii!i-i7iAiGiPiXi_ikiuiii ERROROUTPUT HSFINDTEXTHSLAUNCHSCRIPT HSMOVETOCARDHSMOVETOFIRSTCARDHSMOVETOLASTCARDHSMOVETONEXTCARDHSMOVETOPREVCARDHSPARM HSREDRAWCARDINPUTIOFLAGOUTPUT ~COMMANDLINE~DPTR0 ~EOFINPUT ~EOLNINPUT~ERROROUTPUTCHAR~HSCALL ~HSMOVCAL ~HSMOVCLL ~HSMOVRET ~INPUTCHAR ~LINENUMBER ~MINSTACK ~OUTPUTCHAR ~PROCLIST ~PROCNAME~QUIT~REALVAL~RETURN~STACK ~STRINGLIST ~THISFILE ~TOOLERROR~USER_ID ~_BWCOMMON ~_BWSTARTUP,B ~_BWSTARTUPK ~COMMANDLINE ~COMMANDLINE ~USER_ID_ownerid;i~STACK~RETURN~RETURN h~DPTR0HH ~COMMANDLINE ~COMMANDLINE~HSCALL~HSCALLhh H~USER_IDH "V;[ ~MINSTACKc:zZګH "h ~MINSTACKHi ~MINSTACK "  ~INPUTCHAR ~EOLNINPUT ~EOFINPUT ~LINENUMBER ~PROCNAME ~PROCLIST ~PROCLIST ~STRINGLIST ~STRINGLIST ~THISFILE ~THISFILEk~QUIT`y,A ~_BWCOMMON ~COMMANDLINEN ~EOFINPUTN ~EOLNINPUTN ERROROUTPUTN ~ERROROUTPUTCHARNINPUTN ~INPUTCHARN ~MINSTACKNOUTPUTN ~OUTPUTCHARN~REALVALN ~THISFILEN ~TOOLERRORN~USER_IDNIOFLAGN ~STRINGLISTN ~PROCLISTN ~LINENUMBERN ~PROCNAMEN ~QUITNpH+nrrH"~MM_INIT, H"hk~STACKN~DPTR0N~RETURNN~HSCALLNl,= HSPARM ~COMMANDLINE ~COMMANDLINEk ,H HSMOVETOFIRSTCARD ~HSMOVCALN ~HSMOVCLLN~DPTR0H+Kb ~HSCALL H ~HSCALL:Hk ~HSMOVRETN+k[,G HSMOVETOLASTCARD\ ~HSMOVCAL[,G HSMOVETOPREVCARD\ ~HSMOVCAL[,G HSMOVETONEXTCARD\ ~HSMOVCALl,C HSMOVETOCARD Kb H\ ~HSMOVCLL hkW,C HSREDRAWCARD\ ~HSMOVCALN,E HSLAUNCHSCRIPTkt%,A HSFINDTEXTKb ZH\ ~HSMOVCLLhhhk/*----------------HyperStudio XCMD Exerciser--------------------------- HS.XCMD in ORCA/C Original from Merlin by Eric C. Mueller Pascal version inspired by David Sparks C version coded by Ken Kashmarek Version 3.0 01-DEC-89 ---------------------------------------------------------------------*/ #pragma stacksize 2048 #pragma optmize -1 #define dtItemListLength 40 /* for DialogItemplate array size */ #include #include #include #include #include #include #define RadFam 3 #define RadItem 0x0C #define RL 282 #define RR 405 /* RL + 123 */ #define CL 186 #define CX 191 /* CL + 5 */ #define Offset 32 #define DisabledText 0x800F /* ItemDisable + statText 0x8000+0x000F */ typedef struct HSParams { int ButtonID; int CardID; handle ScriptHand; long ScriptLength; char *TextPassedPtr; ptr HSAddress; } HSParams, *HSParamPtr; HSParamPtr param_list; GrafPortPtr XCMDialog; /* XCMDialog is defined later */ int RadResult = 0; boolean HS; int hit,cardnum; int FindPref; int FndValue,FndResult; GrafPortPtr FTdialog; /* FTdialog is defined later */ boolean canceled,action; CtlRecHndl ctlrec; /* for HiliteControl call */ int ToolError; char ITEM19Txt[] = "\pHyperStudio XCMD Exerciser"; ItemTemplate ITEM19 = {19,2,200,11,411,DisabledText,ITEM19Txt,0,0,nil}; char ITEM32Txt[] = "\p-------Parameter List------- ---Function Calls--- --Action--"; ItemTemplate ITEM32 = {32,13,52,22,590, DisabledText,ITEM32Txt,0,0,nil}; char ITEM2Txt [] = "\pOriginal Button ID:"; ItemTemplate ITEM2 = {2,24,52,33,CL, DisabledText,ITEM2Txt ,0,0,nil}; char ITEM22Txt[] = "\p "; ItemTemplate ITEM22 = {22,24,CX,33,RL-5,DisabledText,ITEM22Txt,0,0,nil}; char ITEM3Txt [] = "\pCurrent card ID:"; ItemTemplate ITEM3 = {3,35,73,44,CL, DisabledText,ITEM3Txt ,0,0,nil}; char ITEM23Txt[] = "\p "; ItemTemplate ITEM23 = {23,35,CX,44,RL-5,DisabledText,ITEM23Txt,0,0,nil}; char ITEM4Txt [] = "\pHandle to script:"; ItemTemplate ITEM4 = {4,46,65,55,CL, DisabledText,ITEM4Txt ,0,0,nil}; char ITEM24Txt[] = "\p$ "; ItemTemplate ITEM24 = {24,46,CX,55,RL-5,DisabledText,ITEM24Txt,0,0,nil}; char ITEM5Txt [] = "\pPointer to script:"; ItemTemplate ITEM5 = {5,57,60,66,CL, DisabledText,ITEM5Txt ,0,0,nil}; char ITEM25Txt[] = "\p$ "; ItemTemplate ITEM25 = {25,57,CX,66,RL-5,DisabledText,ITEM25Txt,0,0,nil}; char ITEM6Txt [] = "\pLength of script:"; ItemTemplate ITEM6 = {6,68,67,77,CL, DisabledText,ITEM6Txt ,0,0,nil}; char ITEM26Txt[] = "\p$ "; ItemTemplate ITEM26 = {26,68,CX,77,RL-5,DisabledText,ITEM26Txt,0,0,nil}; char ITEM7Txt [] = "\pFunction call address:"; ItemTemplate ITEM7 = {7,79,27,88,CL, DisabledText,ITEM7Txt ,0,0,nil}; char ITEM27Txt[] = "\p$ "; ItemTemplate ITEM27 = {27,79,CX,88,RL-5,DisabledText,ITEM27Txt,0,0,nil}; char ITEM8Txt [] = "\pOriginal card ID:"; ItemTemplate ITEM8 = {8,90,69,99,CL, DisabledText,ITEM8Txt ,0,0,nil}; char ITEM28Txt[] = "\p "; ItemTemplate ITEM28 = {28,90,CX,99,RL-5,DisabledText,ITEM28Txt,0,0,nil}; char ITEM9Txt [] = "\pPointer to cmd line Text:"; ItemTemplate ITEM9 = {9,101,11,110,CL, DisabledText,ITEM9Txt ,0,0,nil}; char ITEM29Txt[] = "\p$ "; ItemTemplate ITEM29 = {29,101,CX,110,RL-5,DisabledText,ITEM29Txt,0,0,nil}; char ITEM10Txt[] = "\pCommand line Text:"; ItemTemplate ITEM10 = {10,112,55,121,CL,DisabledText,ITEM10Txt,0,0,nil}; ItemTemplate ITEM30 = {30,112,CX,121,460, DisabledText,nil ,0,0,nil}; char ITEM11Txt[] = "\pFirst card"; ItemTemplate ITEM11 = {11,24,RL,33,RR, RadItem,ITEM11Txt,0,RadFam,nil}; char ITEM12Txt[] = "\pLast card"; ItemTemplate ITEM12 = {12,35,RL,44,RR, RadItem,ITEM12Txt,0,RadFam,nil}; char ITEM13Txt[] = "\pPrevious card"; ItemTemplate ITEM13 = {13,46,RL,55,RR, RadItem,ITEM13Txt,0,RadFam,nil}; char ITEM14Txt[] = "\pNext card"; ItemTemplate ITEM14 = {14,57,RL,66,RR, RadItem,ITEM14Txt,0,RadFam,nil}; char ITEM15Txt[] = "\pMove to card:"; ItemTemplate ITEM15 = {15,68,RL,77,RR, RadItem,ITEM15Txt,0,RadFam,nil}; char ITEM31Txt[] = "\p0000\0"; ItemTemplate ITEM31 = {31,66,RR+1,79, RR+49,editLine,ITEM31Txt,4,0,nil}; char ITEM16Txt[] = "\pRedraw card"; ItemTemplate ITEM16 = {16,79,RL,88,RR, RadItem,ITEM16Txt,0,RadFam,nil}; char ITEM17Txt[] = "\pLaunch stack"; ItemTemplate ITEM17 = {17,90,RL,99,RR, RadItem,ITEM17Txt,0,RadFam,nil}; char ITEM18Txt[] = "\pFind text:"; ItemTemplate ITEM18 = {18,101,RL,110,RR,RadItem,ITEM18Txt,0,RadFam,nil}; char ITEM33Txt[17] = "\0 "; ItemTemplate ITEM33 = {33,99,RR+1,112,RR+145,editLine,ITEM33Txt,16,0,nil}; char ITEM01Txt[] = "\pDo It"; ItemTemplate ITEM01 = {34,28,479,42,545, buttonItem,ITEM01Txt,0,0,nil}; char ITEM20Txt[] = "\pCancel"; ItemTemplate ITEM20 = {20,53,479,67,545, buttonItem,ITEM20Txt,0,0,nil}; char ITEM21Txt[] = "\pInfo..."; ItemTemplate ITEM21 = {21,78,479,92,545, buttonItem,ITEM21Txt,0,0,nil}; DialogTemplate XCMD = {18+Offset,24,141+Offset,592+24,false,nil, &ITEM21, &ITEM20, &ITEM01, &ITEM18,&ITEM33, &ITEM17, &ITEM16, &ITEM15,&ITEM31, &ITEM14, &ITEM13, &ITEM12, &ITEM11, &ITEM30,&ITEM10, &ITEM29,&ITEM9, &ITEM28,&ITEM8, &ITEM27,&ITEM7, &ITEM26,&ITEM6, &ITEM25,&ITEM5, &ITEM24,&ITEM4, &ITEM23,&ITEM3, &ITEM22,&ITEM2, &ITEM32, &ITEM19, nil}; char FT1Txt[] = "\pOK"; ItemTemplate FT1 = {1,20,180, 0, 0, buttonItem, FT1Txt, 0,1,nil}; char FT2Txt[] = "\pFind Text:"; ItemTemplate FT2 = {2,47, 8, 56, 87,DisabledText, FT2Txt, 0,0,nil}; ItemTemplate FT3 = {3,47-2,88,56+2,88+144,editLine, ITEM33Txt,16,0,nil}; char FT4Txt[] = "\pCase sensitive"; ItemTemplate FT4 = {4,35, 8, 44,168,checkItem, FT4Txt, 0,0,nil}; char FT5Txt[] = "\pRead only fields"; ItemTemplate FT5 = {5,24, 8, 33,168,checkItem, FT5Txt, 0,0,nil}; char FT6Txt[] = "\pEditable fields"; ItemTemplate FT6 = {6,13, 8, 22,168,checkItem, FT6Txt, 0,0,nil}; char FT9Txt[] = "\pFind Text Search Parameters"; ItemTemplate FT9 = {9, 2, 8, 11,239,DisabledText, FT9Txt, 0,0,nil}; DialogTemplate FT = {36+Offset,200,96+Offset,440,false,nil, &FT1, &FT2,&FT3, &FT4, &FT5, &FT6, &FT9, nil}; char InfoString[] = "33/HyperStudio XCMD Exerciser " "Written by Eric C. Mueller " "Updated by Ken Kashmarek/" " ^Version 3.0, 01-DEC-89 "; char Carderr[] = "32/Card ID number invalid (error $xxxx)./" " Cancel "; extern pascal HSParamPtr HSPARM(void); /* all functions uppercase for */ extern pascal boolean HSMOVETOFIRSTCARD(void);/* current ORCA/C v1 */ extern pascal boolean HSMOVETOLASTCARD(void); extern pascal boolean HSMOVETOPREVCARD(void); extern pascal boolean HSMOVETONEXTCARD(void); extern pascal boolean HSMOVETOCARD(int IDNum); extern pascal boolean HSREDRAWCARD(void); extern pascal boolean HSFINDTEXT(char *schstr,int flag); void InitDialog(void) { Int2Dec(param_list->CardID,ITEM28Txt+1,4,false); RadResult = 11; } void GetTheData(void) { Int2Dec (param_list->ButtonID, ITEM22Txt+1,4,false); Int2Dec (param_list->CardID, ITEM23Txt+1,4,false); Long2Hex(param_list->ScriptLength, ITEM26Txt+2,8); Long2Hex((long)param_list->ScriptHand, ITEM24Txt+2,6); Long2Hex((long)param_list, ITEM25Txt+2,6); Long2Hex((long)param_list->HSAddress, ITEM27Txt+2,6); ITEM30.itemDescr = param_list->TextPassedPtr; Long2Hex((long)ITEM30.itemDescr, ITEM29Txt+2,6); } void FindTxtD(void) { boolean done; int hit; FTdialog = GetNewModalDialog(&FT); ShowWindow(FTdialog); done = false; do { hit = ModalDialog(nil); if (hit==1) done = true; else if (hit>=4 && hit<=6) { FndResult = hit; FndValue = GetDItemValue(FTdialog,FndResult) ^ 0x0001; SetDItemValue(FndValue,FTdialog,FndResult); if (FndResult==4) { FT4.itemValue = FndValue; FindPref = FindPref ^ 0x0001; } else if (FndResult==5) { FT5.itemValue = FndValue; FindPref = FindPref ^ 0x0002; } else if (FndResult==6) { FT6.itemValue = FndValue; FindPref = FindPref ^ 0x0004; } } } while (! done); GetIText(FTdialog,3,ITEM33Txt); CloseDialog(FTdialog); SetIText(XCMDialog,33,ITEM33Txt); } void main(void) { InitCursor(); param_list = HSPARM(); if (RadResult == 0) InitDialog(); canceled = false; do { GetTheData(); XCMDialog = GetNewModalDialog(&XCMD); SetDItemValue(1,XCMDialog,RadResult); DisableDItem(XCMDialog,17); /* HiliteControl(0x00FF,GetControlDItem(XCMDialog,17)); had to be split */ ctlrec = GetControlDItem(XCMDialog,17); HiliteControl(0x00FF,ctlrec ); ShowWindow(XCMDialog); action = false; do { hit = ModalDialog(nil); if (hit>=11 && hit<=18) { RadResult = hit; SetDItemValue(1,XCMDialog,RadResult); if (RadResult==18) FindTxtD(); } else if (hit==21) cardnum = AlertWindow(0,nil,InfoString); else if (hit==20 || hit==34) action = true; } while (! action); if (hit==20) canceled = true; else if (hit=34) { GetIText(XCMDialog,31,ITEM31Txt); GetIText(XCMDialog,33,ITEM33Txt); CloseDialog(XCMDialog); if (RadResult==11) HS = HSMOVETOFIRSTCARD(); else if (RadResult==12) HS = HSMOVETOLASTCARD(); else if (RadResult==13) HS = HSMOVETOPREVCARD(); else if (RadResult==14) HS = HSMOVETOLASTCARD(); else if (RadResult==15) { ITEM31Txt[ITEM31Txt[0]+1] = 0; cardnum = Dec2Int(ITEM31Txt+1,ITEM31Txt[0],0); ToolError = toolerror(); /*ORCA/C does not set _toolErr */ if (ToolError==0 && cardnum > 0) HS = HSMOVETOCARD(cardnum); else {Int2Hex(ToolError,Carderr+43,4); cardnum = AlertWindow(0,nil,Carderr); strcpy(ITEM31Txt,"\p0000\0"); } } else if (RadResult==16) HS = HSREDRAWCARD(); else if (RadResult==18) HS = HSFINDTEXT(ITEM33Txt,FindPref); } } while (! canceled); CloseDialog(XCMDialog); } @,= ~_ROOT" ~_BWSTARTUP~GLOBALS" ~C_STARTUP"main" ~C_SHUTDOWN28TXT  " ~MOVESTRING ITEM29TXT ITEM29TXT   " ~MOVESTRING ITEM31TXT ITEM31TXT  " ~MOVESTRING  ITEM31TXT  ITEM33TXT ITEM33TXT F,A InitDialog ;8 [ param_list param_list H ITEM28Txt ITEM28TxtcHH &" ~TOOLERROR  RadResult+;ik4! e e "DITEMITEM22ITEM22! ITEM22TXT ITEM22TXT "DITEMITEM3ITEM3#I, z z ,A GetTheData ;8 [ param_list param_listH ITEM22Txt ITEM22TxtcHH &" ~TOOLERROR param_list param_list H ITEM23Txt ITEM23TxtcHH &" ~TOOLERROR param_list param_list H ITEM26Txt ITEM26TxtcH #" ~TOOLERROR param_list param_listH ITEM24Txt ITEM24TxtcH #" ~TOOLERROR param_list param_listH ITEM25Txt ITEM25TxtcH #" ~TOOLERROR param_list param_listH ITEM27Txt ITEM27TxtcH #" ~TOOLERROR param_list param_listH HITEM30ITEM30hi HhhhhITEM30 ITEM30H ITEM29Txt ITEM29TxtcH #" ~TOOLERROR+;ik  "DITEMITEM28ITEM28Zc ITEM28TXT ITEM28TXT "DITEMITEM9ITEM9 e n   "DITEMITEM29ITEM29en ITEM29TXT ITEM29TXT "DITEMITEM10ITEM10 p7y  ,? FindTxtD ;8 [HHFTFT H2" ~TOOLERRORFTdialogFTdialoghhFTdialogFTdialog H" ~TOOLERRORH" ~TOOLERROR h^dlK 8pzI0} 8pI0K FndResultHFTdialogFTdialogH FndResult H." ~TOOLERRORhIFndValueFndValueHFTdialogFTdialogH FndResult H/" ~TOOLERROR FndResultFndValueFT4FindPrefIFindPrefK FndResult*FndValueFT5FindPrefIFindPrefK FndResult6<KFndValueFT6FindPrefIFindPrefRIZFTdialogFTdialogHH ITEM33Txt ITEM33Txt H" ~TOOLERRORFTdialogFTdialog H " ~TOOLERROR XCMDialog XCMDialogH!H ITEM33Txt ITEM33Txt H " ~TOOLERROR+;ik21ITEM21N\!   0,; main;8 [" ~TOOLERROR"HSPARM param_list param_list RadResult(.2" InitDialogcanceled" GetTheDataHHXCMDXCMD H2" ~TOOLERROR XCMDialog XCMDialoghhH XCMDialog XCMDialogH RadResult H/" ~TOOLERROR XCMDialog XCMDialogHH9" ~TOOLERRORHH XCMDialog XCMDialogHH" ~TOOLERRORctlrecctlrechhHctlrecctlrec H" ~TOOLERROR XCMDialog XCMDialog H" ~TOOLERRORactionH" ~TOOLERRORhhithit8 pI0)8hitpI0 ).ghit RadResultH XCMDialog XCMDialogH RadResult H/" ~TOOLERROR RadResultZ`d"FindTxtDhitsy HH InfoString InfoString HY" ~TOOLERRORhcardnumhithit"actionactionIhitcanceled"  XCMDialog XCMDialogHH ITEM31Txt ITEM31Txt H" ~TOOLERROR XCMDialog XCMDialogH!H ITEM33Txt ITEM33Txt H" ~TOOLERROR XCMDialog XCMDialog H " ~TOOLERROR RadResult eku"HSMOVETOFIRSTCARDHS RadResult "HSMOVETOLASTCARDHS RadResult "HSMOVETOPREVCARDHS RadResult"HSMOVETOLASTCARDHS RadResult ITEM31Txt)iک  ITEM31Txt )H ITEM31Txt ITEM31Txt c ITEM31Txt)HH (" ~TOOLERRORhcardnum" toolerror ToolError ToolError09Vcardnum8LpJI0MV[icardnumH" HSMOVETOCARDHS ToolErrorHCarderrCarderr+cH "" ~TOOLERROR HHCarderrCarderr HY" ~TOOLERRORhcardnum** ITEM31Txt ITEM31TxtH"strcpy RadResult" HSREDRAWCARDHS RadResult ITEM33Txt ITEM33TxtHFindPrefH" HSFINDTEXTHScanceledI( XCMDialog XCMDialog H " ~TOOLERROR+;ik0000TT %@,? ~GLOBALS param_listNhitN RadResultN ToolErrorNctlrecNFTdialogNHSNFindPrefN XCMDialogNcanceledNactionNcardnumN FndResultNFndValueN q@,> ~ARRAYS ITEM12TxtN Last card ITEM22TxtN ITEM32TxtNIG-------Parameter List------- ---Function Calls--- --Action--ITEM01N "*!  ITEM01TxtITEM11N !  ITEM11TxtITEM21N N\!  ITEM21TxtITEM31N BO ITEM31Txt ITEM19TxtNHyperStudio XCMD Exerciser ITEM29TxtN $ ITEM18N en  ITEM18TxtITEM28N Zc ITEM28TxtXCMDN2hITEM21ITEM20ITEM01ITEM18ITEM33ITEM17ITEM16ITEM15ITEM31ITEM14ITEM13ITEM12ITEM11ITEM30ITEM10ITEM29ITEM9ITEM28ITEM8ITEM27ITEM7ITEM26ITEM6ITEM25ITEM5ITEM24ITEM4ITEM23ITEM3ITEM22ITEM2ITEM32ITEM19%%%%%%%%%%% %  InfoStringNo33/HyperStudio XCMD Exerciser Written by Eric C. Mueller Updated by Ken Kashmarek/ ^Version 3.0, 01-DEC-89 ITEM16TxtN Redraw card ITEM26TxtN $ ITEM15N DM  ITEM15TxtITEM25N 9B ITEM25Txt ITEM13TxtN Previous card ITEM23TxtN ITEM33TxtNITEM12N #,  ITEM12TxtITEM22N ! ITEM22TxtITEM32N 4N ITEM32TxtITEM19N   ITEM19TxtITEM29N en ITEM29Txt ITEM10TxtNCommand line Text: ITEM20TxtNCancel ITEM17TxtN Launch stack ITEM27TxtN $ ITEM16N OX  ITEM16TxtITEM26N DM ITEM26Txt ITEM14TxtN Next card ITEM24TxtN $ ITEM13N .7  ITEM13TxtITEM23N #, ITEM23TxtITEM33N !cp& ITEM33TxtITEM2N 4!ITEM2TxtITEM3N #I,ITEM3Txt ITEM01TxtNDo ItITEM4N .A7ITEM4Txt ITEM11TxtN First cardITEM5N 9<BITEM5Txt ITEM21TxtN Info...ITEM6N DCMITEM6Txt ITEM31TxtN0000ITEM7N OXITEM7TxtITEM8N ZEcITEM8TxtITEM9N e nITEM9TxtITEM10N p7y ITEM10TxtITEM20N 5C!  ITEM20TxtITEM30Npy ITEM18TxtN Find text: ITEM28TxtN ITEM17N Zc  ITEM17TxtITEM27N OX ITEM27TxtITEM2TxtNOriginal Button ID:ITEM3TxtNCurrent card ID:ITEM4TxtNHandle to script:ITEM5TxtNPointer to script:ITEM6TxtNLength of script:ITEM7TxtNFunction call address:ITEM8TxtNOriginal card ID:ITEM9TxtNPointer to cmd line Text:FTNDFT1FT2FT3FT4FT5FT6FT9% % %%%%%%%%%%%%%%%%%%% % %"%"%$%$%&%&%(%(%*%*%,%,%.%.%0%0%2%2%4%4%6%6%8%8%:%:%<%<%>%>%@%@%B%B%D%D%F%F%H%H%J%J ITEM15TxtN Move to card: ITEM25TxtN $ ITEM14N 9B  ITEM14TxtITEM24N .7 ITEM24TxtCarderrN;32/Card ID number invalid (error $xxxx)./ Cancel FT1N  FT1TxtFT2N /8WFT2TxtFT3N -X: ITEM33TxtFT4N #, FT4TxtFT5N ! FT5TxtFT6N   FT6TxtFT9N  FT9TxtFT1TxtNOKFT2TxtN Find Text:FT4TxtNCase sensitiveFT5TxtNRead only fieldsFT6TxtNEditable fieldsFT9TxtNFind Text Search ParametersL[\]^_`k @,@ "L"a""X;8 [H cHH &" +;ik;8 [HcHH &"Hk cHH &" H! cH #"Hj cH #"HcH #"H$ cH #"H H hi Hhhhh HcH #"+;ik;8 [HH H2"hhH"H"h8pI0ʊ8pI0ʊHHH."hIHHH/"[IEsI!IIHHq H"H "H!Hq H "+;ik;8 [""""^HHH2"hhHHH/"HH9"HHHH"hhHH"H"H"h8 pI0ʊ8pI0ʊ9HHH/""n$HH HY"h8"I "HHQ H"H!Hq H"H "  "  "o  "S "7Q )iک Q )HQ cQ )HH ("h"T8pI0ʊH"|SH+cH ""HHHY"hQ H" A "%q HH"WI(H "+;ikr et lui permettant de choisir l'une des 4 oprations suivantes + - / * pour calculer ces 2 nombres. Pour corser un peu le problme, disons que l'utilisateur ne pourra sortir du programme qu'en entrant le caractre "Q" (pour Quitter). Voil une occasion supplmentaire d'utiliser un boolen. Lexique : nombre1, nombre2 : variables de type rel (REAL en Pascal) sortir : boolen (BOOLEAN en Pascal) choix : variable de type caractre (CHAR en Pascal) Dbut Lire nombre1, nombre2 sortir <-- FAUX Afficher 'Entrez "Q" pour Quitter' TQ non sortir Afficher 'Quelle opration voulez-vous ? (+-*/) ' Lire choix Si choix = 'Q' Ou choix = 'q' Alors sortir <-- VRAI Sinon Si choix = '+' Alors Afficher nombre1 + nombre2 Sinon Si choix = '-' Alors Afficher nombre1 - nombre2 Sinon Si choix = '*' Alors Afficher nombre1 * nombre2 Sinon Si choix = '/' Alors Afficher nombre1 / nombre2 Sinon Afficher 'Erreur dans votre choix' FSi FSi FSi FSi FSi FTQ Fin. En Pascal, il existe une instruction trs intressante pour viter de se farcir la tripote de IF...THEN... C'est l'instruction CASE...OF. Pour une fois je vais faire un effort et vous prsenter la syntaxe Pascal concernant cette instruction pour que vous compreniez bien son intrt : ... WHILE NOT sortir BEGIN WRITE('Quelle opration voulez-vous ? (+-*/) ') ; READLN(choix) ; CASE choix OF 'Q','q': sortir := TRUE ; '+' : WRITELN(nombre1 + nombre2) ; '-' : WRITELN(nombre1 - nombre2) ; '*' : WRITELN(nombre1 * nombre2) ; '/' : WRITELN(nombre1 / nombre2) ; OTHERWISE WRITELN('Erreur dans votre choix') ; END ; END ; ... Je tords le cou du premier qui ose me dire qu'il ne voit pas l'intrt de l'instruction CASE...OF. En fait, le principal avantage de cette instruction rside dans sa compacit et sa lisibilit. En revanche, elle ne fait pas gagner de temps machine. S'il vous arrive de travailler sur compatible PC en Turbo Pascal, il vous faut remplacer OTHERWISE par ELSE. Pour le reste, la syntaxe est identique. Problme 2 : problme dit du palindrome. Un palindrome est une phrase qui peut tre lue dans les deux sens. Par exemple : ELLE, LAVAL, ESOPE RESTE ICI ET SE REPOSE, etc... L'utilisateur entre une phrase termine par un point et l'ordinateur lui dit s'il s'agit d'un palindrome. L'ordinateur ne doit pas tenir compte des espaces entre les mots pour la dtermination du palindrome. Lexique : phrase : chaine de 50 caractres debut, fin : variables de type nombre entier qui vont servir de pointeur dans la chaine palindrome : variable de type boolen Debut lire phrase fin <-- longueur(phrase) *** fin := LENGTH(phrase) ; *** debut <-- 1 palindrome <-- VRAI TQ debut < fin ET palindrome TQ phrase(debut) = ' ' debut <-- debut + 1 FTQ TQ phrase(fin) = ' ' fin <-- fin - 1 FTQ palindrome <-- phrase(debut) = phrase(fin) debut <-- debut + 1 fin <-- fin - 1 FTQ Si palindrome Alors Afficher 'C''est un palindrome' Sinon Afficher 'Ce n''est pas un palindrome' FSi Fin. Il me semble que l'emploi d'un jeu d'essai est ici plus que jamais indispensable. Passez-y le temps qu'il faudra mais il est important que vous compreniez cet algo. La premire boucle a pour but de tester s'il s'agit d'un palindrome. La premire fois on entre obligatoirement dans la boucle puisque le boolen palindrome est mis Vrai. Ensuite les deux petites boucles dans la grande ont pour but d'liminer les blancs puisqu'on a dit qu'ils n'intervenaient pas dans la dtermination du palindrome. Les "compteurs" debut et fin sont respectivement incrments et dcrments de manire se "dplacer" dans la chaine. Le boolen palindrome est ensuite test pour vrifier si le caractre la position "dbut" dans la chane "phrase" est gal au caractre la position "fin" dans la mme chane. Vous constatez qu'on peut donc "adresser" individuellement des lments d'une chane, les modifier, les comparer, tout comme on le fera tout l'heure avec les tableaux. N'oubliez pas que je ne dispose pas des crochets, alors faites attention en adaptant cet algo au Pascal. Si vous tes vraiment en difficult avec ce problme, faites des exercices de ce type : En algorithmique En Pascal ... Lire phrase READLN(phrase) ; Lire debut READLN(debut) ; Afficher phrase(debut) WRITELN(phrase(debut)) ; Afficher phrase WRITELN(phrase) ; phrase(5) <-- 'A' phrase(5) := 'A' ; Afficher phrase WRITELN(phrase) ; phrase(5) <-- phrase(7) phrase(5) := phrase(7) ; Afficher phrase WRITELN(phrase) ; etc... Problme 3 : programme qui retourne la factorielle d'un nombre entr par l'utilisateur. Pour ceux qui ne le sauraient pas, ou qui l'auraient oubli, voici quelques exemples de calculs de factorielles : - factorielle de 3 = 3! = 3 * 2 * 1 = 6 - factorielle de 4 = 4! = 4 * 3 * 2 * 1 = 24 Et voici l'algo... et l'occasion d'aborder l'utilisation des fonctions. Programme principal Lexique : valeur : variable de type nombre rel Dbut du programme principal Lire valeur Afficher valeur,'! = ',factorielle(valeur) Fin du programme principal ----------------------------------------------------------- FUNCTION factorielle (nombre : REAL) : REAL Lexique local : resultat : variable locale de type nombre rel utilise par la fonction et par elle seule Debut de la fonction resultat <-- 1 TQ nombre > 1 resultat <-- resultat * nombre nombre <-- nombre - 1 FTQ factorielle <-- resultat Fin de la fonction Les puristes de l'algorithmique vont rler car j'ai pris quelques liberts quant la dclaration de la fonction. En effet, je l'ai dclar dans la syntaxe exacte du Pascal. Vous pouvez donc l'utiliser telle quelle en Pascal, si ce n'est que la traduction du reste de la fonction demeure votre charge. L'usage de la fonction n'tait pas ici obligatoire. J'aurais trs bien pu intgrer le calcul de factorielle dans le programme principal. Vous pouvez d'ailleurs le faire si a vous chante. Mais j'ai voulu vous prsenter les fonctions, histoire d'avancer un peu et pour que ceux qui trouveraient que je ne vais pas assez vite trouvent quand mme leur compte. La fonction est un type de sous-programme. Si vous avez dj utilis des sous-programmes en Basic avec GOSUB et RETURN vous tes dj un petit peu familiaris avec ces notions. La fonction vue plus haut utilise trois notions : - resultat : variable dite "locale" utilise par la fonction pour effectuer les calculs. Cette variable, cre par la fonction lors de son appel, disparatra de la mmoire lors du retour au programme principal. - nombre : cette variable fait office de paramtre "entrant". Lors de l'appel de la fonction par le programme principal, le contenu de la variable "valeur" est pass comme paramtre la fonction "factorielle" et est plac dans la variable locale "nombre". - factorielle : c'est le nom de la fonction (FUNCTION en Pascal) mais c'est aussi une variable locale la fonction comme vous pouvez le constater dans l'algo, o on affecte la variable "factorielle" le rsultat du calcul. Supprimez l'avant-dernire ligne de la fonction pour voir ce qui se passe. N'hsitez pas modifier la fonction, quitte provoquer des erreurs. C'est mon avis une excellente faon d'apprendre. Le sous-programme (ou PROCEDURE en Pascal) permet de crer des blocs d'instructions qui sont susceptibles d'tre utiliss plusieurs reprises par le programme principal ou par d'autres sous-programmes. La fonction de calcul de factorielle telle qu'elle est prsente ici peut tre utilise telle quelle dans n'importe quel autre programme par un simple Copier-Coller via le presse-papier. Une fonction comme celle-ci est en fait un type particulier de procdure. En algorithmique, les sous-programmes s'crivent aprs le programme principal suivant en cela la structure de pense rationnelle qui consiste dcomposer les diffrents problmes en tches lmentaires. En Pascal, par contre, il faudra crire les fonctions et autres sous-programmes avant le programme principal. Lisez ce qui est dit sur la syntaxe des fonctions et procdures dans votre manuel. Il est intressant de constater que la fonction peut utiliser ses propres variables, appeles variables locales, qui lors de l'excution du programme seront cres en mmoire par l'appel la fonction et disparaitront au moment du retour au programme principal permettant ainsi de "jouer" sur la taille de la mmoire. Imaginez un programme dont la taille varierait au fur et mesure de son excution. C'est exactement ce qui se passe avec les fonctions et l'utilisation de variables locales. Les notions de variables locales et globales n'existent pas sur les vieux Basic o toutes les variables sont globales. Par contre elles existent sur des Basic rcents comme le GS.Basic. Il faut savoir aussi que les variables locales dclares dans la fonction ne peuvent tre utilises par le programme principal. Par contre, les variables globales du programme principal peuvent tre utilises par les sous programmes et les fonctions. C'est un peu le principe du miroir sans teint qui permet de voir sans tre vu. Ainsi la fonction peut "voir" et mme modifier le contenu des variables utilises par le programme principal. Cela ncessite d'tre vigilant dans l'attribution des noms donns aux variables, sinon bonjour les surprises. Remarque : quand vous programmez en Pascal, vous utilisez sans le savoir un grand nombre de fonctions prdfinies fournies avec le compilateur mais fonctionnant exactement comme celle que nous venons de voir. Par exemple l'instruction SQRT(arg) qui retourne la racine carre de l'argument plac entre parenthses est l'une de ces fonctions prdfinies. L'instruction LENGTH utilise dans le problme du palindrome est elle aussi une fonction. Voici quelques exemples d'utilisation : ... valeur := 9 ; ** valeur est un REAL ou un INTEGER ** WRITELN(SQRT(valeur)) ; toto := SQRT(valeur) ; ** toto est un REAL ou un INTEGER ** WRITELN(toto) ; WRITELN('Dites ',SQRT(1089)) ; READLN(phrase) ; ** phrase est une STRING ** WRITELN(LENGTH(phrase)) ; golub := LENGTH(phrase) ; ** golub est un INTEGER ** phrase := phrase + 'coucou' ** concatnation de 2 chanes ** WRITELN(phrase) ; WRITELN(LENGTH(phrase)) ; etc... Faites des appels de ce type avec la fonction factorielle vue plus haut afin de vous familiariser avec cette notion trs importante. Problme 4 : programme qui lit les coefficients a, b et c d'une quation du second degr (aX2 + bX + C = 0) et la rsout. Voil l-encore une occasion de rviser vos connaissances de maths. Attention, il faut prvoir le cas o le coefficient a est gal 0. On en revient alors une quation du premier degr du type : aX + b = 0. Si vous ne savez pas faire une rsolution d'quation, c'est le moment ou jamais de l'apprendre en tudiant l'algo qui suit : Programme principal Dbut Afficher 'Rsolution d''une quation du type : aX2 + bX + c = 0' Lire coco,bobo,toto Faire equation(coco,bobo,toto) Fin. -------------------------------------------------------- Procedure equation(a,b,c : variables de type nombre rel) *** a, b et c sont les paramtres entrants de la procdure equation *** Lexique local delta : variable locale de type REAL Dbut de la procdure Afficher 'Votre quation a donc la forme :' Si a = 0 Alors Afficher b,'X + ',c,' = 0' Si b <> 0 Alors Afficher 'La solution est ', -c/b Sinon Si c = 0 Alors Afficher 'La solution est R' Sinon Afficher 'Pas de solution' FSi FSi Sinon Afficher a,'X2 + ',b,'X + ',c,' = 0' Afficher 'Un instant, je calcule les solutions de X' delta <-- b * b - 4 * a * c Afficher 'Delta = ', delta Si delta > 0 Alors Afficher 'Votre quation a 2 solutions :' Afficher 'X1 = ', (-b - SQRT(delta)) / (2 * a) Afficher 'X2 = ', (-b + SQRT(delta)) / (2 * a) Sinon Si delta = 0 Alors Afficher 'Votre quation n''a qu''une solution :' Afficher ' X = ', -b / 2 * a Sinon Afficher 'Votre quation n''a pas de solution.' FSi FSi FSi Fin *** de la procdure *** Une procdure comme celle-ci peut tre facilement intgre n'importe quel programme ce qui n'est pas son moindre intrt. Comment peut-on l'utiliser ? Voici quelques exemples d'appel : En algorithmique En Pascal Lire coco,bobo,toto READLN(coco,bobo,toto) ; Faire equation(coco,bobo,toto) equation(coco,bobo,toto) ; Lire tic,toc READLN(tic,toc) ; Faire equation(tic,5,toc) equation(tic,5,toc) ; Faire equation(4.3,3,5) equation(4.3,3,5) ; etc... Remarquez que l'instruction Faire disparait en Pascal. Dans d'autres langages, elle serait remplace par DO ou encore PERFORM. Il faut savoir que les termes "module", "sous-programme" et "procdure" sont quivalents. Mais on emploiera plutt le terme procdure pour dsigner des modules utilisant des passages de paramtres comme le module equation par exemple. En Pascal il n'y a qu'un seul terme, c'est celui de PROCEDURE, pour dclarer des modules avec ou sans passage de paramtres. Il est ncessaire de comprendre qu'on n'aurait pas pu dclarer la procdure equation comme une fonction. En effet une fonction "retourne" obligatoirement un paramtre en sortie (comme dans factorielle ou SQRT) alors qu'une procdure peut faire beaucoup d'autres choses comme le montre la procdure equation. Reportez-vous au manuel de votre compilateur pour tous vos problmes de syntaxe. Passons maintenant l'tude des tableaux (ARRAY en Pascal) : Problme 5 : on saisit 5 notes dans un tableau puis le programme affiche le contenu du tableau. L'utilisation d'un tableau est ici intressante car elle vite de devoir stocker les 5 notes dans 5 variables diffrentes du style note1, note2, note3, etc... ce qui entranerait d'autres contraintes comme par exemple l'impossibilit de recourir une boucle et un surplus de travail pour le programmeur. Si vous n'tes pas convaincu, faites ce mme programme sans recourir un tableau et en utilisant 5 variables diffrentes, vous m'en direz des nouvelles. Programme principal Lexique : notes : tableau(1 5) de nombres rels variables Dbut Faire saisie_notes Faire affiche_notes Fin. N.B. : En Pascal, la dclaration du tableau se ferait ainsi : VAR notes : ARRAY(1..5) OF REAL ; Autre conseil : un FOR..TO..DO est ici particulirement indiqu en lieu et place du Tant Que. ------------------------------------- Module saisie_notes Dbut du module i <-- 1 TQ i <= 5 Lire notes(i) i <-- i + 1 FTQ Fin du module --------------------------------------- Module affiche_notes Dbut du module i <-- 1 TQ i <= 5 Afficher notes(i) i <-- i + 1 FTQ Fin du module Je parie que ce qui vous interpelle le plus, c'est que l'on puisse crire "Lire notes(i)". Eh bien oui, on peut affecter ainsi une valeur une "case" d'un tableau sans autre forme de procs comme on pourrait le faire avec les chanes. Ecrivez-vous de petits programmes utilisant des tableaux de petite dimension. Utilisez de petits exercices du mme type que ceux que je vous ai prsents pour l'utilisation de la chane phrase. Vous constaterez par exemple qu'on ne peut visualiser un tableau en totalit comme on le ferait pour une chane avec WRITELN(notes) par exemple. Il faut pour cela recourir une boucle comme dans le module affiche_notes. Il ne vous est pas interdit de dclarer un tableau comme suit : Produit : Tableau(15 255) de variables de type nombre entier En Pascal, cela donnerait : Produit : ARRAY(15..255) OF INTEGER ; (Attention : n'oubliez pas de substituer des crochets aux parenthses, en algo comme en Pascal, car je ne peux pas obtenir de crochets sur mon traitement de texte. En Basic, on utilise des parenthses et non des crochets). En Basic, il faudrait crire : DIM Produit%(255) Donc en Pascal, le tableau contiendra 241 lments numrots de 15 255 tandis qu'en Basic, ce mme tableau contiendra 256 lments numrots de 0 255 (en Basic on ne peut pas faire autrement). On pourra nanmoins ne travailler que sur les lments numro 15 255 si a nous chante, mais ceci au prix d'une perte de place mmoire. Il vous est aussi possible d'crire : Nom_jour : Tableau(Lundi Dimanche) de chanes ou encore : Montant_ventes : Tableau(mini maxi) de rels N'oubliez pas que l'on peut faire des tableaux de pratiquement n'importe quoi (CHAR, STRING, REAL, BOOLEAN, etc...), alors essayez, explorez, bidouillez, faites des essais, c'est le meilleur moyen pour comprendre. Un petit exercice : crivez un troisime module qui lira le tableau notes et affichera la note la plus haute ainsi que sa "position" dans le tableau. Ca ne vous rappelle rien ? Quand vous serez suffisamment aguerri, passez l'tude du... Problme 6 : on saisit en vrac les ventes du mois partir de bordereaux qui sont dans le dsordre. L'utilisateur entre le numro de mois indiqu sur le bordereau, puis le montant des ventes indiqu sur ce mme bordereau. S'il n'a plus de bordereau saisir, il entre un numro de mois gal 0 et le programme dite pour chaque mois : son nom, le nombre de ventes et le montant des ventes. Pour les masochistes qui ne seraient toujours pas convaincus de l'utilit des tableaux, je conseille de faire ce mme programme sans recourir des tableaux, c'est dire en dfinissant 36 variables diffrentes, puisqu'on a besoin ici de 3 tableaux de 12 lments chacun (1 pour stocker le montant des ventes de chaque mois, 1 pour stocker le nombre de ventes de chaque mois, et 1 pour stocker le nom de chaque mois). Si vous y arrivez... Bravo !!! (mais un bon conseil, laissez tomber l'informatique car mon avis c'est sans espoir). Blague part, avant d'attaquer l'tude de l'algo proprement dit, je voudrais vous indiquer la manire de stocker en mmoire le nom des mois. Pour ce faire j'utilise un tableau de chanes stock en constante, ce qui vite l'utilisateur de devoir entrer le nom des mois chaque fois qu'il lance le programme. Voici comment crire cela en Pascal (Attention : souvenez-vous de ce que je vous ai dit au sujet des parenthses et des crochets ! En cas de doute, reportez-vous au manuel de votre compilateur) : CONST tabnommois : ARRAY(1..12) OF STRING(9) = ('Janvier','Fevrier','Mars', 'Avril','Mai','Juin','Juillet','Aout','Septembre', 'Octobre','Novembre','Decembre') ; Si vous ne comprenez pas vraiment le fonctionnement des dclarations ci-dessus, retenez simplement la mthode et n'hsitez pas vous en servir. Vous comprendrez plus vite que vous ne le pensez. J'ai choisi ici une criture trs modulaire car chaque sous-programme peut ainsi tre tudi indpendamment. Imprimez cette partie et amusez-vous "dsosser" chaque module pour bien comprendre leur fonctionnement. Regardez bien qui fait quoi et qui appelle qui. Reprez les variables locales et globales. Faites-vous des jeux d'essai. N'oubliez pas qu'en Pascal, vous devrez crire tous les modules avant le programme principal... j'y reviendrai la fin de cet article. On pourrait encore optimiser la solution propose ci-dessous mais je ne tiens pas compliquer outre mesure. Revenons nos moutons : Programme principal Lexique des Variables globales : nombre_ventes : TABLEAU(1 12) de nombres entiers montant_ventes : TABLEAU(1 12) de nombres rels num_mois : variable de type nombre entier ventes_lues : variable de type nombre rel Dbut Faire init_tableau Faire saisie_ventes Faire edition_ventes Fin. ------------------------------------------------------- Module init_tableau *** On commence par initialiser les 2 tableaux 0 *** Dbut ** du module ** num_mois <-- 1 TQ num_mois <= 12 nombre_ventes(num_mois) <-- 0 montant_ventes(num_mois) <-- 0. num_mois <-- num_mois + 1 FTQ ** Initialisation termine ** Fin ** du module ** Explication du module init_tableau : l'initialisation des tableaux nombre_ventes et montant_ventes est indispensable car on fait ici des saisies en vrac et on n'est pas sr qu'en fin de saisie, tous les mois aient forcment des ventes. C'est une prcaution indispensable qui permet d'viter que des valeurs parasites ne viennent interfrer dans les calculs. Ca vous parait bizarre ? Si vous lancez un programme plusieurs fois, votre programme risque de se retrouver avec le contenu des variables utilises lors de sa prcdente excution. Bonjour les bugs ! A noter aussi qu'il vaut mieux initialiser un tableau de rels avec 0. que 0 tout court, sinon vous risquez de chercher un moment pourquoi votre programme "dbloque" (et l le TML/Pascal ne fait pas exception) car le compilateur "attend" un rel et vous lui donnez quelque chose qu'il prend pour un entier. Je sais c'est idiot mais c'est comme a. Ne demandez pas votre compilateur prfr qu'il fasse preuve d'intelligence. Pour en revenir notre module, vous remarquez qu'on utilise une seule boucle pour initialiser les 2 tableaux en mme temps. L'initialisation d'un tableau (surtout de cette taille) ncessite trs peu de temps machine comme vous pourrez le constater, alors autant la faire. ---------------------------------------------------------- Module saisie_ventes *** On saisit les ventes de chaque mois en vrac *** Dbut du module Lire num_mois TQ num_mois <> 0 Lire ventes_lues nombre_ventes(num_mois) <-- nombre_ventes(num_mois) + 1 montant_ventes(num_mois) <-- montant_ventes(num_mois) + ventes_lues Lire num_mois FTQ Fin du module L'utilisateur entre le numro du mois. Si le numro est diffrent de 0, on entre dans la boucle. L'utilisateur saisit alors le montant des ventes de ce mois, montant qui est cumul celui dj existant dans la "case" num_mois du tableau montant_ventes. De mme on incrmente de 1 le contenu de la "case" num_mois dans le tableau nombre_ventes. Puis on entre un nouveau numro de mois et rebelote. -------------------------------------------------------- Module edition_ventes *** dition des ventes des mois 1 12 *** Lexique: Constante locale : tabnommois : TABLEAU(1 12) de chaines de caractres Dbut du module Afficher ' Mois Nbre de ventes Total des ventes' num_mois <-- 1 TQ num_mois < 13 Afficher tabnommois(num_mois), nombre_ventes(num_mois), montant_ventes(num_mois) num_mois <-- num_mois + 1 FTQ Fin du module. La principale fonction de ce module est de lire les tableaux tabnommois, nombre_ventes et montant_ventes simultanment et entirement (des "cases" 1 12 pour tre prcis) afin d'afficher leur contenu. En Pascal on pourra crire la boucle ainsi : FOR num_mois := 1 TO 12 DO... ------------------------------------------------------------ --- Problme 7 : Nous allons maintenant reprendre le problme 6 pour l'amliorer. En plus de la saisie des ventes en vrac, le programme permettra l'dition au choix : - de tous les mois, - d'un mois (le choix du mois est laiss l'initiative de l'utilisateur), - d'une priode (de juillet novembre (mois 7 11), par exemple, mais l encore, c'est l'utilisateur qui dcide). Pour ce faire il suffira de modifier uniquement le module edition_ventes en lui ajoutant un menu et quelques petits amnagements. Module edition_ventes Variables locales : sortir : boolen (tiens, a faisait longtemps !) choix : CHAR (j'ai la flemme, de toute faon vous avez compris) mois_num1, mois_num2 : INTEGER Dbut sortir <-- FAUX TQ non sortir Afficher '1 - Edition de tous les mois..' Afficher '2 - Edition d''un mois..' Afficher '3 - Edition d''une priode..' Afficher '9 - Fin de session.' Afficher 'Entrez votre choix : ' Lire choix Si choix = '9' Alors sortir <-- VRAI Sinon Si choix = '1' Alors Faire periode(1,12) Sinon Si choix = '2' Alors Afficher 'Entrez le numro du mois' Lire mois_num1 Faire periode(mois_num1,mois_num1) Sinon Si choix = '3' Alors Afficher 'Entrez la priode dsire' Lire mois_num1, mois_num2 Faire periode(mois_num1,mois_num2) FSi FSi FSi FSi FTQ Fin du module Voil un programme de menu classique. Observez de quelle faon est appel le module periode. C'est important. N'hsitez pas vous servir de l'instruction CASE...OF... pour la transcription en Pascal. ------------------------------------------------------------ - Procedure periode(debut,fin : INTEGER) *** debut et fin sont les paramtres entrants *** Lexique: Constante locale : tabnommois : TABLEAU(1 12) de chaines de 9 caractres Dbut de la procdure Si debut > fin Alors Afficher 'Mauvais paramtres, recommencez' Sinon Afficher ' Mois Nbre de ventes Total des ventes' num_mois <-- debut TQ num_mois <= fin Afficher tabnommois(num_mois), nombre_ventes(num_mois), montant_ventes(num_mois) num_mois <-- num_mois + 1 FTQ FSi Fin du module. Comparez ce module avec la premire version du module edition_ventes. Il y aurait comme un air de famille que a ne m'tonnerait pas. ------------------------------------------------------------ --- Peut tre n'est-il pas inutile de rappeler la logique de notre programme de traitement des ventes : Programme principal ! !---- Module init_tableau !---- Module saisie_ventes !---- Module edition_ventes ! !---- Module periode Pour la transcription en Pascal, vous devrez crire les diffrents modules dans l'ordre suivant : Module init_tableau Module saisie_ventes Module periode Module edition_ventes Programme principal L'ordre dans lequel vous mettrez les modules init_tableau, saisie_ventes et edition_ventes importe peu condition de les dclarer avant le programme principal. En revanche, la procdure periode (qui est le module appel) doit obligatoirement se trouver avant le module appelant (en l'occurrence edition_ventes). C'est une rgle incontournable. Peut tre ai-je t un peu vite en prsentant la fois les tableaux et l'criture modulaire. Il ne tient qu' vous de me le dire. Je vous promets d'en tenir compte. De toute faon, vous avez toutes les vacances pour potasser tout a et a ne vous fera jamais qu'une occasion de plus de ne pas bronzer idiot. Je vous dconseille quand mme d'emmener votre GS et votre groupe lectrogne sur la plage. Au moins j'espre que vous avez compris la puissance de l'criture modulaire. Ce n'tait l qu'un aperu. Nous y reviendrons dans les prochains exercices car ne vous faites pas d'illusion, a ne fait que commencer et c'est maintenant que les choses deviennent intressantes. La prochaine fois, nous poursuivrons l'tude des tableaux, des procdures et nous verrons quelques algos de recherche dans des tableaux. Plus tard, nous aborderons les tableaux plusieurs dimensions et quelques autres rjouissances. En tout tat de cause, j'espre ne pas avoir fait d'erreur dans mes algos. Pour l'instant on ne m'a encore rien signal mais je n'ai pas la science infuse et je suis assez tourdi (non je n'ai pas une tte de docteur Nimbus, merci). N'oubliez pas non plus que ce ne sont que des exemples de solution que vous pouvez amnager votre guise. Certains puristes de l'algorithmique pourront me reprocher certaines liberts avec l'algo pure, notamment dans la dclaration de certaines procdures. Je prfre pour ma part simplifier le travail de traduction de mes lecteurs et les guider afin de leur permettre de comprendre la logique de mes exercices. C'est mon avis plus important que des querelles de clocher. Par contre, je suis intransigeant sur le fait qu'un bon algo doit tre bien document, facile lire et pas trop long (moins d'une page) d'o l'intrt de l'criture modulaire. Il doit aussi tre crit dans un esprit d'universalit, c'est dire dans le but d'une adaptation aise n'importe quel langage (sinon quoi a servirait que je me dcarcasse) mme si, lorsqu'on commence travailler sur un problme, on a une petite ide du langage que l'on va utiliser... et la traduction sera toujours plus aise en Pascal que dans d'autres langages. Sur ces bonnes paroles, salut tous et bonnes vacances. Grgory Jarrige. PATCH DE BOOT ---------------- Si votre GS est quip d'un disque dur et que vous avez rgl le Control-Panel pour bootez dessus ( slot du disque ou mode Scan ) , il peut vous arriver de temps en temps de souhaiter booter en fait sur une disquette , en port 5 par exemple . Voici un patch du bloc de boot ( le bloc zero de la piste zero ) . Editez ce bloc avec BlockWarden ou SpyEdit et assurez vous qu'il commence par 01 38 B0 03 ... et se finit par '()*DISK ACCESS de Seven Hills software Qui n'a pas pest en s'apercevant en plein travail qu'il ne dispose d'aucune disquette formatte toute prte pour sauver son travail ! La solution nous arrive des USA sous forme d'un super NDA, qui apporte toutes les fonctions du finder et beaucoup d'autres, dans le menu pomme. Double emploi ? Non car DISK ACCESS est vendu avec un programme de lancement "launcher" trs simple, de 7 K seulement, trs rapide charger et qui remplace donc le finder de GS OS. DISK ACCESS permet toutes les fonctions classiques : formattage, catalogue des slots, des disques, des fichiers, crations de subdirectory, copie de tous types de disques et fichiers, visualisation des rfrences de tous les fichiers (cration, types etc...), vrifications. Mais en prime, DISK ACCESS permet de visualiser un fichier ASCII l'cran et de l'diter, et par une puissante fonction "FIND", de retrouver dans tous les catalogues et sous catalogues les occurences d'un groupe de lettres, mme s'il ne s'agit pas d'un nom complet de fichier, et donc de localiser le chemin d'accs. C'est un gros NDA de 64K mais comme on peut supprimer le finder classique, il n'y pas perte de place mmoire. Au contraire il y a gain de temps pour passer d'un programme l'autre grace ce petit lanceur joint la disquette. Cot 49 dollars US avec un manuel trs bien conu. Grace cet outil, mon avis indispensable, toute action "technique de maintenance" est possible pendant n'importe quelle cession de travail et quelque soit le programme en usage. Essayez, c'est l'adopter ! O. Walusinski. ,Salut ,oui mais qui ? Il parat qu'il faut remuer nos chers adhrents pour qu'ils vous crivent , j'entreprends donc cette difficile tche. Tout d'abord je tiens rappeler que cette rubrique est l votre ,dans le sens o VOUS m'envoyez les solutions et VOUS posez les questions ; car je ne suis pas un gnie des jeux qui trouve toutes les solutions en un claquement de doigts ! En somme si vous restez muets comme des carpes malgr mon appel ,je vais finir par me demander si cela vaut la peine que je me ./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoAa ,@ main a """") ;8[il"H"hHHH "hHH"iHH"F:"""LL"d:"" moqsuwy{d}dddd  "S," :""""{imH"H"HiH"HiH""iHH"H"HiH""{i+k*/SYSTEM/TOOLSJVous avez un seul lecteur,remettez le disque SYSTEME et appuyez sur retour*/SYSTEM/TOOLS1Si tu n'es pas membre du club, efface ce disque ! A Certains... ;8[iRR"S," :""""{i+k/GSINF10/gsinfosX Remettez le disque GsInfo et appuyez sur la touche retour /GSINF10/gsinfos ;8[iH"h{i+k ;8[i d H{iH "h  ̉  {i+;ik ;8[iHH}H "hqq""""ϭцө{iHJ"{iHJ"{iH{iH"HH"H "h  9"{i+k/GSINF10/GSCLUB.10 ;8[i 3"  {iH"{iH" s s ^ ^ C C + +     {iH "{iH" u u {iH"{iH"W W @ @ ) )     {iH"{iH""HHH-"hH "HHH-"hH "HHH-"hH "HHH-"hH "HHH-"hH ""H"h*"{i+k==les plus\N447.==Hyperstudio\N446==Newcat\N445==Blue.Monk\N444==Transprog\N443==Palette 16 Bis\N442==Domaine Public\N441>> Le coin hard et soft \N3==Express load\N416.==Algorithmie \N415==TML Pascal Exemple \N414==TML Pascal et Toolbox\N413==Assembleur\N412>> Initiation \N2== Annonces\N510.== Disk Access\N509== PC Transporter\N508== Solutions de jeux\N507== Moniteur TV\N506== GS astuces\N505== Infos\N503== Editorial\N502>> Sommaire \N5== Quitter\N411*Qq. == Rserv aux non-membres\N402== Imprimer un article\N401>> Fichier \N12>>@\N0X==A propos de GS Infos...\N400==-\N401D. ;8[i """"""""""""H""{i+k ;8[i{iH(XJ"HH{iH "h"{iHhn}J"{iH ccH """ :""":""""F:""""i:"""(:""2:"JJ"P:""Fi:""}:"":"vv"H"h "{i+kFCertains portions of this software are copyrighted by TML Systems,Inc.(c)-1987 TML Systems,Inc..GSclub -- Groupe d'utilisateurs agr Apple --CMaintenez le bouton de la souris enfonc et appuyez sur une touche.DM.Lerman , D.Melchior, J.Rey , B.Tomeno , D.Toussaint, O.Walusinski ?J.P.Arnaud, H.Benon, C.Dreyfus , Y.Gobin, V.Hemeury, G.Jarrige,Editeur:&Pour quitter un article avant la fin :Ont particip ce numro :GGS Infos n10,le magazine du GS pour les membres du club exclusivement.Vu ;8[idݭ : i ݢ:"""ɢd,:"" "yy"""H"hH "h={iHJ"{iHU" {i+k-Pressez une touche pour continuer la lecture. ;8[iHHH "hۆݩۍݍ" ,"j "N%  "$&(*,.02468:<>@BDFHJLHH "hHH""",:""""""HH "{i+k2Cliquez la souris pour quitter l'article. ;8[i{iH((XdJ"HH{iH "hۆۢ" :"" """:"WW"-:""{iH(7J"{iH H "H"hۢ "{i+kVu@Les fichiers sont des fichiers de type texte avec fonte tendue.1Rcuprez le fichier avec BlueMonk et imprimez-le Vous voulez imprimer un article: ;8[i"""{i+kAlgorithmie: deuxime partie/GSINF10/articles/ALGO3 ;8[iww"[[""{i+kL'Express Load par B.Tomeno/GSINF10/articles/Art.ex.load ;8[i"'""{i+k&La liste des disques du domaine public/GSINF10/articles/catalogue ;8[ivv"TT"""{i+k!Palettes inverses par J.P. Arnaud/GSINF10/ARTICLES/ART.INV16 ;8[i "&""{i+k%Un shareware de F.Uhrich par B.Tomeno/GSINF10/articles/art.transprog ;8[iqq"TT""{i+kUn tremplin ASCII d'Y.Koenig/GSINF10/articles/Blue ;8[i" ""{i+kUn utilitaire Basic de B.Tomeno/GSINF10/articles/Newcat ;8[iYY""==""{i+kDes nouvelles de la section!/GSINF10/articles/art.hyperstudio ;8[i"  "{i+kLes plus/GSINF10/articles/les.plus ;8[i??"//""{i+kla rubrique jeu/GSINF10/articles/Art.jeu ;8[i ""{i+k Editorial/GSINF10/articles/art.Editorial ;8[i??"0""{i+k/Un accessoire de bureau, essai du Dr Walusinski/GSINF10/articles/disk.access ;8[i"$""{i+k#Le coeur de nos crans par H.Benon./GSINF10/articles/ART.TV2 ;8[i22"""{i+kLes trucs et astuces du GS/GSINF10/articles/Art.Astuces ;8[i"""{i+k 2me partie V.Hemeury/GSINF10/articles/ass10 ;8[i''",""{i+k+Un utilitaire disque dur de dfragmentation/GSINF10/articles/RENAISSANCE ;8[i">""{i+k=Initiation Pascal et la toolbox par Marc Lerman 6me partie/GSINF10/articles/Art.TML.6 ;8[i>>"#""{i+k"Exemple TML Pascal par Marc Lerman/GSINF10/Exemples/Art.TML.6.ex ;8[i!""""{i+k!Essai PC Transporter par M.Lerman /GSINF10/articles/PC.TRANSPORTER ;8[i44 """{i+kLes dernires nouvelles/GSINF10/articles/Art.Dernieres ;8[i"""{i+kLe prochain numro/GSINF10/articles/Art.Numero3 ;8[i  "  ""{i+kLes petites annonces/GSINF10/articles/Art.Annonces ;8[i{iH"J"{iHC0C0"{iH00"{iH//"{iH//"{i'H?/?/"{iGH.."{igH.."{iH|.|."{iH;.;."{iH--"{iH--"{iHx-x-"{i'H7-7-"{iGH,,"{igH,,"{iHt,t,"{iH3,3,"{iH++"{iH++"{iHp+p+"{i'H/+/+"{iGH**"{igH**"{iHl*l*"{iH+*+*"{iH))"{iH))"{iHh)h)"{i'H')')"{iGH(("{igH(("{iHd(d("{iH#(#("{iH''"{iHP0J"HH{iH "hHH"{iH_nJ"HH{iH ''H "{iHJ"{i{iHH{iHHH """:"''":"''"#:"k'k'"-:"L'L'"7:""'"'"A:""''" K:"&&" U:"&&" _:"s&s&"}:""7&7&":""&&"H"hHH "{i+k!Groupe d'utilisateurs agr Apple;GS CLUB 6 Impasse la Croix Pommier 94120 FONTENAY-SOUS-BOIS3Si vous ne dsirez pas devenir membre, effacez-la .8Cette disquette est l'organe de liaison interne du club.7GS Infos et ses articles ne sont pas du domaine public, ATTENTION)Vous recevrez GS Infos tous les deux moisDes domaines publics gratuits.'Vous bnficierez des services du club.Cotisation annuelle : 360 F..Pour recevoir GSInfos, devenez membre du club!Vu@0000000000000000000000000000000000000000000000000000000000000000@0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0@0F000000000000000000000000000000000000000000000000000000000000F0@0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFF111111F111111FFFFFFF111111FF11FF1111111FF1111111FFF0F0@0F0FFFFFF11111111F111111FFFFFF11FFFFFF11FF11FFF11FF11FFFF11FF0F0@0F0FFFF1111111111F1111111FFFFF11FFFFFF11FF11FFF11FF11FFFF11FF0F0@0F0FFFF1111FF11111F1111111FFFF11FFFFFF11FF11FFF11FF11FFFF11FF0F0@0F0FF11111FFF11111FF111111FFFF111111FF11FF11FFF11FF1111111FFF0F0@0F0FF1111FFFF1111FFFF11111FFFFFFFFFFFF11FFFFFFFFFFF11FFFFFFFF0F0@0F0FF1111FF111111FFFF11111FFFFFFFFFFFF11FFFFFFFFFFF11FFFFFFFF0F0@0F0F11111FF11111FFFFF11111FFFFFFFFFFFF11FFFFFFFFFFF11FFFFFFFF0F0@0F0F11111FFFFFFFFFFF11111FFFFFFFFFFFFF11FFFFFFFFFFFFFFFFFFFFF0F0@0F0F11111FFFFFFFFFF11111FFFFFFFFFFFFFF11FFFFFFFFFFFFFFFFFFFFF0F0@0F0F11111FFFFFFFFF11111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0F11111FFFFFFFFF11111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0F11111FFFF1111F11111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FF1111FFFF1111F11111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FF1111FFFF1111F111111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FF11111FF11111F1111111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFF11111111111FF11111111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFF11111111FFFF1111111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFF1111FFF11FF1111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFF1111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFF11111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFF111111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFFF11111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFFFF11111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFFFFF1111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFFFFFFF11FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0@0F000000000000000000000000000000000000000000000000000000000000F0@0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0@0000000000000000000000000000000000000000000000000000000000000000 ;8[iߥ߂"t"m"f ["T"M"F"?"8"1"*"#"""""""""""""ɐEɑDɒCɛBɜEɝDɞCɟBɠAɹ@ɺ?ɻ>ɼ=ɽ<ɾ;ɿ:987654321 ,"{i+;ik ;8[i H{iH"hͥ͂ "   {i+k ;8[i"""""""""{i+kH;i{HH ;[ H "H"hHHH "hhH "HHHH "hhe: "kHH ;[HH"HH""" d&y)H "h "Ԣ"""H"8kHH"h"kHH"k0;8 ;[H"h#H({iH "h%)))XHH "h: ) )d   +;i08k"k ;[ 0 1 :T+  ;i k ;[ k l e:e::D+  ;i k ;[   :0 )   h)+H   ;i(k HH;[H"h H "    hh+;ik ;[HH""+;ik ;[0  +  ;i k ;[0  +  ;i k ;[0   +  ;ik ;[  Ȁ +  ;ik ;[  Ȁ +  ;ik ;8 [  d) e )e     ;e i ;[907301 )80'e     +  ;ikHH ;[ d0b) W  gF @ e )e)8 0  ):  +;ik HH;[ F0D @0>)8 04  8 8  e :e   hh+  ;ik H;[d 8 2 )    8 ) h+  ;ik {cH;[hh+hk {cH;[ JJJ -)0 0 0 0 0 0 0  hh+hhk {cH;[  :JJJ 1)0 0 0 0 0 0 0  hh+;ik{cH ;[ +;ik{cH ;[ I7+;ik{cH ;[ 7+;ik ;[   (+;i (k ;[I7   (+;i (k ;[ I7  (+;i (k ;[ jjjjjjjj +;ik ;[JJJ+)0 0 0 0 0 0 0 7    (+;i(k H;[IIʩ FeI+k H;[ I Iʀ f  8 F F I+kcck8k H;[IIIIʀFf ee&IIhhhh+k H;[ I I IIʀ&&ff !  8  FfFfͥ  IIzzzzzz+kIIkIIk##kkCCkIIk8 # zz(k *kJjkjjjk***k;8 ;[  {iH "{iH{i H " +;ik;8 ;[  {iH "{iH{i H " +;ik;8 ;[H({iH "h+;ik;8 ;[H({iH "h)+;ik ;[:"hH "h::H:"+;ik;8 ;[{iH "{iHU""+;ik;8  ;[{i H)" 8   {iHU"+;i k;8 ;[{i H)" 8d  "zH"HHg"h{iH ~"h"+;ik;8 ;[{i H)" 8d  "zH"HHg"h{iH~"h"+;ik ;[) eH0"+;ikHHH ;[ HHHHH &"  Ȁ8: ))e:  +  ;ikHHH ;[H HHH HH '"  Ȁ 8: ))e:  +  ;i k;8% ;[$ &{i$H-H+H{iH "{i$H{iH1H/H "+'+&*;i)k ;[HHH)H ("h +;ik ;[HHHH)H )"h h +;ik;8& ;[.H,H{iH{iH{iH "{iH2H0H "+(,'+;i*kHHH ;[ )f A [8Ai a {8ai 80))  J ) J) +  ;i k""""""""""""""""""""""""""""""""33333333333333333333333333333333DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUffffffffffffffffffffffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww ;[;8 ")) )))));i+;ik ;[ HH H HHH "+  ;i k ;[;8")) ;i+;ik ;[;8" ;i+;ik ;[;8+" ;i+;ik ;[HHHHHH H$"h hhh+;ik ;[;8 " ;i+  ;ik ;[;8 " ;i+  ;ik ;[;8 " ;i+  ;ikHH;iHHHHHڢ "hhk    hhZ"HHkHHHH "hk ;[  "ኇ+ ;i k   ;[Z z Z"+hhhk . &     ;[Z z Z"+hhk ;[ ڢ "+  ;ik ;[  "+  ;ik   ڢ "+  ;ik ;[ " +hhk;iHHHڢ "ኃhhk ;[d  +hhk ;[ȗȥ @ȩ+hkH "hk ;[ "  +hhkHH "hhkH "hk;iH "hk "  k H H H H "(p0   ;ik;8  ;[dd\:"hi ) A[i     + ;ik;8 ;[$&{iH"` V$&") d d dd{iH"$&{iH"(+$#;i"k;8$ ;[HH,*"hH,*."h222202 2 2 22 2.)dHHH" "h!#%#2%2# {iH" 22+&2%1;i0k;8 ;[$$G$dd{iH"$$$$$ $$ + $#;i"k;8( ;[HH0."h! " "666646 6 6 66 62)AHHH" "h!#!%!'%6'6 66H0.2"h)6)66646 6 6 66 62)_HHH" "h!#!%!'%6'6) {iH" 666dd{iH"+*6)5;i4k;8 ;[  ' dd{iH"   + ;ik;8 ;[$$A${iH"$$HH""+ $#;i"k;8 ;[$& " {iH"+$#;i"k;8 ;[ "{iH"+ ;ikk;8 ;[  < $& d {iH"L  +$#;i"k;8 ;[  < $& d {iH"L  +$#;i"k;8 ;[$$n$HHHH$H " "hh {iH"${iH"{iH"+$#;i"k;8 ;[  2 {iH" H"zz$&+ ;ik ;[) +;ik;8 ;[$$$$$) d {iH"L $+ $#;i"k;8  ;[&&& d {iH"!&&  &!L &+"&!%;i$k ;[) +;ik ;[ HH"+;ik ;[ HH"+;ikHH ;[   ȥ  "+ ;i kHH ;[  )   "+;ikHH ;[    ȯ   ȯ   "+ ;i ktruefalseHHHHH ;[HHHHH &"  Ȁ 8 : ) )e:   "+  ;ikHHHHH ;[HHHH HH '"  Ȁ 8 : ) )e:   "+  ;ik;8) ;[//3 (3*(5 *{i(H9H7H{iH "{i(H{iHHH "5/1"++7*6;i5kHZHH ;[ 80,* )e)     HH"%  ȷ ȷ HH" +kHH ;[   ") "+  ;ikHH ;[   "  ) "+ ;i kHHHH ;[":e   Ȁ :    +  ;ikHH ;[   "%HHeHژ8 ("h "+ ;i kHH ;[   " ,HHHeHژ8 )"hh "+ ;i k;8* ;[0002"LHH{iH{i H{i H "{i H6H4H "02"+,4+3;i*kZHH ;[ "N)   Ș "Ȁػȷ)  Ȁ阠+hhhhkZ ;[ )? HH"% ȷȷ HH"+kZ ;[ ) )   +k;8 ;[d)  : )) H"h{i H)"{i H "H{i H{i HO"h)HH:" HH")j{i H)"H i H:" @HHg"{i HHH H H~"h"H 8 H:"HH "h)5HH "h)!HH ")  "+;ik;8< ;[BB)) H"h{i H)"{i1H "H{i H{i1HO"h)HH:"d{i H)"  i{iHV"᩼ {iHV"᩼ H({iH "hХ ɥ) {iHU" H i H:"႑v8pI9) {i H)"H H"8hH H:" 8 i{iHU"H"  B5 HHg"{i1HHH H H~"h"H 8 H:"Ⴋd;HHH "hhh=H ""h9) 4;Ȅ;  "= "BN&; " " ";;Ȅ;  9 ";f) B +>B=A;i@k;8 ;[d)  : HH " " +;ikprinter: console: keyboard: 22 35 @ DOc h^k`n^q` ^`    LL    q t wz}     >`>`W     ^`( +/^2`G Q T^W`ep s~ ^`  gRjRmpsv     >`>`W ~ m5 !$'69<y?yBqEqK5OyRyUX[^adn qtwz    ) ,0; Em5g   5        l75      s s ^ ^ C C +  +      $l7(+:5> A D G J M P S V Y \u _u nl7ru5W W @ @ ) )     l75    ! 2 7:F W \_k |      g  q  {                           >  R  q   c c                      #  3  6 9 C  P  ]  m  p s }             J J               * : =v@vJ [ l u{         yy   cD?#m5O b e  yy    * 069<?BEHKNQ T"W$Z&](`*c,f.i0l2r4u6x8{:~<>@BDFHJLNPRTVXZ\       f% 2 ? BEO UY\f im x      - : =@J W g jWmWw        yy55*y-y0w3w95=@C[F[L5Pyy55#y&y)v,v2569<T?TE5Iyy55#y&y)q,q2569<T?TE5Iyy55 yyYY5"%=(=.52yy5yy?? 5// 5$fyiylou5y}yy??55jymypsy5}5yy2255 ]y`ycfl5psvy5yy''55RyUyX[a5ehknt5xyy>>5 5jymypsy5}5yy445 5aydygjp5twz}5yy  5  5^  k C0n C0q zC 0 0 zC / / zC / / zC ?/ ?/ zC . . zC . . zC |. |. zC !;.!;.!zC!-"!-%!zC3!-6!-9!zCG!x-J!x-M!zC[!7-^!7-a!zCo!,r!,u!zC!,!,!zC!t,!t,!zC!3,!3,!zC!+!+!zC!+!+!zC!p+!p+!zC!/+!/+"zC"*"*"zC#"*&"*)"zC7"l*:"l*="zCK"+*N"+*Q"zC_")b")e"zCs")v")y"zC"h)"h)"zC"')"')"zC"("("zC"("("zC"d("d("zC"#("#("zC"'#'#zC%# C# g# # #'#'# # @$ M$ Z$ j$ m$'p$'z$ $ $'$'$ $ $k'$k'$ $ $L'$L'$ $ $"'$"'$  % % %'%''% 7% :%&=%&G% W% Z%&]%&g% w% z%s&}%s&% % % %7&%7&% % % %&%&% %  & 0 005 0b0P0E0000001111{1Y#1*11181]?1F1]M1T112 b2b{2 202b2!2Z2c22 2c22I22S 2 2 33333 &33233J33Q33g33333333333333333333334h4=43L43Q43a4 4 4 44444 4 ?5 L5 O5 r5 55555555^?m5?;?;??@&<@?A&< A?XAC[ACmHHrHH{HHHHKaK;KaKaL,TL|KLLL,TM,T>N|KONTaVNTa&OL-O,TOP,TP,T Q,T?Q,TSQ,TQ,TR,T(R,TR,TR,TR=S,TS,T>TtTaTtTTWTW UWUUYUU[U#URU)UTU1UVU?UWUWZVWVWXW)SeWWlWWsWWW]WW3ZWZW3ZWZ%X3ZXYXZXY!YZPYYYZY3ZZ3ZYZSfZZmZZtZZZ^Z\4\\4\!\,T9\ZE\K\`,TB`K]N`T`a,TaTaaZaK] ;[ 9;=?A): 9 +;ik;8 ;[     : pr ie H  HH H"2+ H) H1 H" :    A+;ik;8" ;[(@**d(*)ȷȷ)ȷ)Ȅe2 4  ) ,@ ~global ;[ 9;=?A): 9 +;ik;8 ;[     : pr ie H  HH H"2+ H) H1 H" :    A+;ik;8" ;[(@**d(*)ȷȷ)ȷ)Ȅe2 4  )EXEMPLESvմ"'  ',ART.TML.6.EX3.մմpBLUE Un superbe freeware en mode graphique, destop,souris et aide en ligne de notre ami Y.Koenig, en 2 versions et, en prime! le source complet en assembleur. On pourrait croire que l'ASCII est un standard, mais ds que l'on est amen manipuler des fichiers de type texte ASCII, on est trs vite agac par des problmes d'accents quand on les transmet d'une application l'autre. C'est l que BlueMonk intervient magistralement. Cet utilitaire de lecturstuef  !"#$%&'()*+,-./01ART.DERNIERES Nous rappelons tous que les communications au sein du club sont trs perturbes pendant les mois de juillet et d'aot et qu'il faut tre plus indulgent sur les dlais de rponse, le GS craint le sable et le courrier suit comme il peut. L'Assemble Gnrale du 16 juin ------------------------------- Aprs le rapport d'activit par le Prsident et le rapport financier par le secrtaire, l'assemble dcid de maintenir la cotisation au tarif 1990, c'est dire 360,00F. Dans un souci de solidarit, cette cotisation passe 360,00 F pour tous, DOM-TOM et Etranger y compris. Le dbat le plus anim concern l'entre du GS Club parmi les groupes d'utilisateurs agr Apple, pour finir, la dcision de signer la nouvelle charte, aprs lecture l'assemble, t prise l'unanimit (Signature faite le mercredi 20 juin) Dans les questions diverses, deux points ont t voqus. En premier, il s'agit de la qualit des enveloppes utilises pour envoyer GS Infos. Pour des considrations de volume, nous l'envoyons en enveloppe ordinaire. Si la disquette vous arrive dtriore, n'hsitez pas nous la retourner. En second lieu, il a t demand de mieux informer les membres sur les boutiques vendant des produits Apple II, logiciels et livres autres que Brjoux et Toolbox et de secouer la presse informatique qui ignore totalement le GS. Sur ce dernier point, un courrier adress SVM au dbut du mois de juin, avec enveloppe pour la rponse n'est toujours pas revenu. (En rponse la question de l'wxyART.HyperStudio Informations ------------ La version 2.1 est disponible et la mise jour doit dj tre en cours. Voici le dtail des amliorations : - Possibilit de retourner les dessins verticalement et horizontalement. - Dplacement parfaitement horizontal ou vertical des outils de dessin. - Possibilit de centrer cercle ou carr partir d'un point. - Possibilit de dessiner en mode multiple les rectangles,ovales et traits. - Avertissement lors du chargement d'une image 320 * 200 - Possibilit de changer une couleur par une autre. - Validation des boutons invisibles, animations et dessins en appuyant sur la touche retour au lieu de cliquer l'extrieur (ce qui ne permettait pas les boutons plein-cran sur l'ancienne version). - Choix du style et de la couleur pour le texte ditable - Possibilit de colorer le texte, le fond, les boutons. - On peut varier la taille d'un dessin slectionn. - La commande coller une carte insre la carte aprs la carte courante ou la dernire de la pile. - Possibilit d'aller une carte prcise par son numro. - La squence de touche Commande-S sauve la pile. - Save screen peut sauver la carte et tous ses attributs. - On peut verrouiller totalement une pile. - les piles antrieures sont compatibles mais converties au chargement, il vaut mieux les sauver nouveau sous la version 2.1. - Un module run-time permet de diffuser la pile ceux qui ne possdent pas hyperstudio.On peut inclure celui-ci sur une disquette condition qu'elle contienne une pile non commerciale ( LbBLUE.MONKvѴ'  'CMD.S{G zCOMPEX|Ni  z+BLUE.MONK.S} 'z(BLUE.1.S'Kô'Vδ z(BLUE.2.S z(BLUE.3.S$Dδ z(BLUE.4.S Zz(BLUE.5.S*Pδ z(BLUE.6.S.fz/BLUE.MONK.MAC.S4   z*BLUEMONK.L@;2δ z(BLUEMONK;8δ δ zӍ򠤰̍ӱcompact BlueMonk -O BlueMonkC express BlueMonkC -O Blue.Monk delete BlueMonkC ~ÍÍ Ӎ Ǎ 卻 Í䠻 􍠼Í䠻 獠䠻 􍠼à 占ݱݱÍݱӠÍݱᠣݲӍÍ򍠼Í젤Í젤 철㍠в̠ݱ̠ݲݳ철㍠젤㍠̠ݱݲנݳݴ̠ݵݶ㍠젤²㍠Ӡ̠ݱݲנݳݴ̠ݵݶ㍠젤ò㍠Ӡ̠ݱݲݳ̠ݴݵ㍠젤㍠נݱ̠ݲݳ㍠젤Ʋ捠捍썍㍍捪 󍪽䠽§ 堽ħ 㠽ɧ 堽է 堽֧ 頽ا 䠽 렽 렽 렽 덍 獪  󍪽Íƍ堽ĠĠĠĠ宱宲害宴宵家̍⠽󠴍󠲍󠴍󠴍󠴍󠴍󠴍󠴍󠴍󠲍󠴍󠴍󠴍󠴍󠴠 󠴍󠲍󠴍󠸍䍍 𺍪렠 占⠠ 󍍠 렻 󍍠 󍍠獠젺 姍蠻 鍠 ԍԠ 鍻 󍍪򍪍 Ӯӿ 󠠻 ᠠ 򠰠 占򠠻 ʧ 󡡍󍪍 󍪍獠獠썠쫲𠠻 򍍠𠠻 Ġ 򍍠čᠰ ㍠捠 占 占󍍪󍪍 󍪍占䠣 栻 󍍠č 卍덪 𺍪𠣰 卺 嫲 占ᠠ 占ᠠ 䠣 占 占 占젺 􍍠 卍 䧍ᠠ 򍍠򠠻 򠠻 󠠻 卍 󍍠ᠣƍ뫲ᠣƍ덠򠣤ƻ䠻 ᠠ 􍍠𠣳 젠 %F0 F5 suivi de quatorze 00 ( c'est le bloc de boot le plus rcent qu'on trouve sur les disquette , jadis il existait un boot plus long s'tendant en fait sur les blocs 0 et 1 , pour lequel ce patch n'est pas valable ). Reprez la chaine 4C 00 20 ( Jump 2000 ) situe tout juste un peu avant le mot PRODOS ( en clair ) . Remplacez la par 4C F2 09 . A la fin du bloc reprez les 14 octets qui sont zero . Remplacez les 13 premiers par la chaine: AD 00 C0 C9 B5 D0 03 4C 00 C5 4C 00 20 , et r-crivez le bloc sur disque . EXPLICATION : Le 4C F2 09 est un Jump au dbut de la chaine AD 00 ... qui ,elle signifie : -AD 00 C0 LDA $C000 Charge dans l'accumulateur le dernier caractre frapp au clavier -C9 B5 CMP B5 Etait-ce la touche "5" ? -D0 03 BNE +03 Si non saute les 3 octets suivants -4C 00 C5 JUMP $C500 Si oui : Saut l'adresse $C500 ( = boot sur le slot 5 ) -4C 00 20 JUMP $2000 Saut $2000 ( pour compenser celui qu'on vient de remplacer par 4C F2 09 ) ATTENTION : Comme tous les patchs sur disque celui-ci est potentiellement dangereux en cas de fausse manoeuvre . Il est de votre responsabilit de le faire ou non , et il peut etre bon de s'exercer avant sur une disquette "sacrifie" . MODE D'EMPLOI : Quand vous booterez sur votre disque dur , si vous appuyez sur la touche 5 aussitot aprs l'allumage du GS ( ou aprs le Pomme-Control-Reset ) , vous vous lancerez en fait la disquette du slot 5 . VARIATION : Si votre choix est de booter sur un autre slot que le 5 , le "n" par exemple , mettez Bn et Cn au lieu de B5 et C5 . PATCH DU FINDER ------------------- Sur le serveur RTEL , Castafiore ( c'est son pseudonyme ) a propos un patch bien utile . Normalement dans le Finder si vous faites Pomme-Q , le bouton selectionn par dfaut est "Eteindre le Systeme" . Il peut etre intressant de prferer que le choix par dfaut soit " Retour l'application de dmarrage " surtout si votre habitude est de bootez sur Prosel ou sur le Start de Transprog de notre ami Uhrich par exemple . Le patch est le suivant : avec BlocWarden ou SpyEdit choisissez de "suivre" ( Follow ) le fichier Finder ( bien souvent son nom est en fait "Start" ) . Avec les flches allez jusqu'au bloc 41 . Passez en Edition ( touche E ) puis avec Control-S localisez la chaine $7E60F40000F400 . C'est de ce dernier octet ( 00 ) que dpend le choix : mettez-le 02 pour avoir le "Retour l'application de dmarrage" par dfaut ( ou 01 pour avoir "Redmarrer" ) . Faites Escape et W pour r-crire le bloc sur le disque . C'est tout . Merci Castafiore !!! GRAPHIC.PATCH ( vu dans Nibble mai 90 ) ------------- Avec le GSOS 5.02 certains programmes de dessins ne marchent plus correctement voire refusent de booter.Voici des solutions : 1) PAINTWORKS GOLD BLOAD P...., T$B3,A768,L1,B$1FFE0 PRINT PEEK(768) Ne continuer que si la valeur du peek est 8 !!! Cela dpend des versions +++ POKE 768,127 BSAVE P...., T$B3,A768,L1,B$1FFE0 2) DELUXEPAINT BLOAD D....,T$B3,A768,L1,B$19C12 PRINT PEEK(768) On doit recueillir la valeur zro POKE 768,1 BSAVE D....,T$B3,A768,L1,B$19C12 B.TOMENO  EXPRESSLOAD ------------ Avec les nouvelles versions du GS OS est apparu "EXPRESSLOAD" , un message qui s'affiche sous le "thermomtre" lors du boot lorsque vous pressez les touches Pomme+Option pendant le dbut du chargement du systme . "EXPRESS LOAD" est une sorte de procdure spciale du systme GS OS qui permet un chargement 2 fois plus rapide des programmes et fichiers , grace une meilleure gestion de la mmoire par le Mmory Manager, sous certaines conditions . Il faut en effet , et en principe , que le programme ait t crit en respectant certains procds , pour pouvoir ensuite se laisser "expressloader". En ralit on peut rendre "expressloadable" beaucoup de programmes ( mais pas tous car certains ne supportent pas cette petite cuisine ) grace APW ou Prosel. La syntaxe sous APW est : Express fichier-source -o fichier-destination Sous Prosel il faut utiliser la commmande "ZIP": ZIP Le fichier zipp est habituellement un peu plus long que le fichier d'origine ( un ou deux blocs ) B.TOMENO TRANSPROG ? RE-MAR-QUA-BLE !!! ------------------------------------- La dernire production de F.Ulrich est poustouflante . Quand vous y aurez gout vous ne pourrez plus vous en passer . Qu'est ce ? Un ensemble de programmes en shareware ( 90 f ) qui mettent dans votre GS quelque chose qui est une sorte de mlange entre , ce que sont ( sur Mac Intosh ) Multifinder et OnCue , et ( sur GS ) Prosel et Hyperlaunch . Lors du boot , selon que vous aurez appuy , pen 􍍠獠獠 󠠻 卍卍 􍍠󍍪占񠺱󍍪 ᠻ č㍠㠣젠 卍᫲ 썠󍍪򍍠堺젺􍍺ᠻ ɍᠴ ፍ砣፠ 獠ᠻ 獠 獠ᠻ 퍠 獠ᠻ 􍍻 ᠱ čˠ ᠱ 䍠ˠ ˩ᠰ 占ᠰ 獠򠰠 퍍ᠣ 婍㍠㠣󠺵򠣤頺ᠣ Ӻ ϩᠺᠣ ϩ砠 卍ᠣ砻 婍䠻 ㍠堺ᠻ ύ砻 򍍠砣 덠ፍ 獠򍍺󍍪 􍪽趴堣㍍䍠堺젺占ᠣ占򫲠 򍍠 Ӡ䠻 񠺲젺Ӡ䠻 捠񠺳젺卍򫲠 ƍ 占 䍠嫲占諲荠㍠㠣 㠺󫲍 ɩᠻ ϩčᠥ߰߰߰ 占򠰍占썠񠺵젺卍ݬٍݍ򫲍򠠻 䍠򫲍栻 첍櫲Ӡ䠻 䍠堺퍍Ӡ䠻 卍占ᠣ占占嫲Ӡ ᠺ퍍򍍠Ӡ䠻 卍썠占ᠺӠ䠻 卺󍍺𠣥߰ 󍍠ᠣ 젺占ᠣĵ ᠣ 嫱 占嫲 嫱 占쭱 򿧍堺占㍠㠣占𠣥߰ 󍍠䠻 퍠퍍퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍍철썠썍򍍠󍍪 􍪽屍렰 占፠፠򫲍񠺺堻 占 占젺堻 卺俍䠻 堻 獠ᠻ 堺占堻 卺占䍍썠卍썠쫲퍠퍍퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍠퍺占퍠ƍ젤ű썍퍠ƍ젤ű썍 򍪽卍 堣廣㍠䍠堺젺堻 짍 􍍠占ᠣ占占嫲Ӡ 񠺹𠣤 񠺹젺򍍺占ᠣ占占嫲占占占卍Ӡ堻 占񠺱젺򍍺占ᠣ占򫲠 卍 Ӡ䠻 񠺱젺򍍺򫲍 占򫲠 卍占嫲 占Ӡ䠻 占񠺱젺卍Ӡ䠻 占堺򍍺占ᠣ占占嫲Ӡ 䍠ᠺ卍ᠺ卍Ӡ䠻 卺占󍍪򍍠獠㍠占򫲍򫲍嫲𫲠 􍍪 卪  㠺䍠堺ᠣ ᠺ卍 ᠣ ᠺ卺ᠣ ᠺ卺䍠썠뫱 卍ᠣ 婍ᠺ嫱 󍠻 堺͠ 占򫲍͍򫲍𫲍㠺 鍍堺㍠ ፠ 堻 占򫲍嫲썠䠣덠占ᠰ 򠰠 捠썠􍍠󍍪 卪𠥰߰ ݍ砻 䍠ᠤ 占ݍ𠥰߰ 󍍪 𠥰߰ ݍ䠣Ơ ݍ𠥰߰ 󍍪 𠥰߰ ݍ𠣤 ⠻ 鍠ͱ岭ͱ屭ͱ屬 忍蠻 鍠젺䠣Ơ ᠺ卍ͱ岬ᠺ卍ᠣ ⍺ݍ𠥰߰ 󍍪 ݠ ſ 󧍠𠣧 獠𠣧 堺ſ䍠ᠣijᠺ썺ᠣIJ썠ݍ堺čč堺͍򫲍͠젺獍ſſ𠣧ŧꍠ𠣧姍堺ſ𠥰߰ ᠣƍᠺ卺ꍠ𠥰߰ ᠣōᠺ卍ſ𠣧ŧꍠ𠣧姍堺𠥰߰ ᠣōᠺ卺𠥰߰ ᠣō𠥰߰ 堺򫲍𠥰߰ ᠺ􍍺𠥰߰ 𠣤 􍍠 𠣤𠣤č𠣧 򍍠𠣧㠺占𠣧ڧ󠺺占獠 􍻍ᠣ߰ 獠ᠺ􍍺獠ᠺ􍺺卺𠣧ާ𠣧፠𠣰堺젺豍젺ᠺ豠ᠺ􍍺 𠣧堺ᠣ 姍ᠺ 󭱍賍젺𳍠ᠺ􍍺賠ݍ𠥰߰ 堺 󍍻 ᠻ 𠣰 堺 󍠻 렻 ý蠻 占젺ᠣާ젺 󍍺ᠺ ᠻ 𠣰 堺 󍠻 렻 ý蠻 占젺ᠣ젺 蠻 𠥰߰ 򲠻 占򲫲򫲍𠥰߰ 젺􍍻 占ᠻ 𠣧ާ㠻 ý𠣧 ý尸ᠣ 占젺 󍍺㠻  ᅪ렻 ý蠻 젺ᠺ尸蠻 ýᠺ ፠ ῍렻 ý蠻 ፠젺ᠺ尸蠻 ý ýᠻ 𠥰߰ ㍠㠣 㠣 堺 占򫲍𠥰߰ ᠻ 젺􍍪 卍 ý𠥰߰ 㠣򲍠򫲍㠣򲫲𠥰߰ ݍ󭱍 卍 ý𠥰߰ 㠣 ý򲍠򫲍㠣򲫲𠥰߰ ݍ󭱍 Ӡ⍺⠻ 卺ᠻ 䍺 占ᠵ䠣Ơ 썠ᠵ젤ű° ɍ󍍪俍񠺱 卍䠣덠ᠰ 򠰠 捠썠卍ݍݬ򫲍ݬ䠣߱߱߱ ݬ䍺󍍪 俍俍썠쫲񠺱ݍݬ򫲍ݬ䠣߰߰߰ 񠺱ᠣ䍺󍍪 㠻 䧍젻 䍠砠 ᠠ ˍ󠠻 򍍪㍍ 䧍썠쫲񠺱 鍍 䧍젻 䧍占ᠠ 󠠻 䧍򠱴占Ġ č䠣ð 덠򠰠堠 占젻 卍ݠ 占 䧍ݬ򫲍 썠󍍪⠽⠽ 􍪍 䧍㍍젻 䧍砻 ᠠ 卍堺 占󠠻 卍򠠻 卍⫶ݬ 婍젺⍠ݬ𠣳 堺 嫲㍠㠣 嫲嫶㍠㠣 嫶⫶ ݬ 䧍䠣ƍ䠻 姍堺 ⫴ ݬ󍍠ᠣ 占ݬ 􍍺젻 䍠򠰠 ㍠ 㠺 젺堻  占嫲􍍠 򠰠 种堠 占 堻 占 堻 堻 䠣 젻 퍠卍 堠 占堻 占𠣭嫲㠣占젺􍍻  堠 卍 㠠 􍍠ᠠ 占堺堻 卍䍠 卍 卍렻 占ᠻ ύ ɍ𠣤፠㠣㠺堻 㼱 卍젻 䧍򠰠 򠰠 䧍堠 卍䍠堺堻 占젺 卍򠠻 占󍻍 򍻍󠺱򠠻 ᠠ 卍㠠 堺 㠠 򍺱󍍪卍 卪㻣፠ᠱ堺렻 ᠻ 占󍍺㍠፠㫲堣߰߰߰㻣󍍪ĠðŠðҠðǠð̠ð占𠥰 ج ᠾ̍ᠻ ̍䠣ưᠾ̍ᠾҍᠻ ҍᠣᠾҍᠾč頺 ᠾǍ䠣堺𠥰 ج 占ᠻ 𠥰 ج ᠻ 䠣 婍ᠾō፠ᠾҍ፠ᠾ̍𠥰 ج 占󍍪堺占ᠱ占ᠳ嫲ᠻ 占ᠻ 占堻 ㍠፠占፠㠣嫲卺 Ӣ Ĭ Ĭ Ů ծ Ŭ ũ Ǭ ή Ӭ ծ Ů 􍪍 ﮮ 򮍪 ō ō ō ō 卪 ͫ 卍ᠱ 䍠堻 䮮卍ᠳ嫲卍ᠵ嫴卍ᠷ嫶占젻 獍堠 􍠻 덍 ᠱ 𱍠ᠳ𱫲􍍠堣砻 獍 䠣Ʒƍ竱 ͍ͯ蠣砻 獍 퍪 ݬ㍠㠱 덠㠣 宮ᠱ ح䍠ݬ㍠㠣 ٭䍠፠ 卍堣 獍砣獍 􍍠卍 덠썠占嫴󍍪􍍠獠፠󠠻 􍍠獠񠺳 썠덠덍ᠣ獠󍍺덠󍍠젻 ƽ썠񠺲ᠣ堻 썍ߵӯӍӱ퍍󠠻 ߵ밠頻 Ѝ밍ᠣ䠣߱ ᠾ밬؍፠؍ᠾ밬؍፠؍젺밠 䍠⍠덠⍠㍠𠥰 ፠㍠񠺱ᠣ፠ᠾ󍺱㍠㍠占ᠰ䍠ᠣ፠⍍卍õĠ ⠰ᠺ̠ 󠺵ᠺԍ񠺵 占ᠺ ᠣᠺ堻 썺㠺õč⠰ᠺ̠ 덠󠺵ᠺ占𠣱堺 ᠺ񠺳 ˬ 𠣤ð 堺 ᠺᠺõč⠴ᠺ̍ᠺ㠺 􍺵㍠占𠥰⍠䍠썍̠⠳⠰ᠺԍ⠳Ԡ󠲱󠱍󠱍󠲍󠲍̠⠳⠰ᠺԍԍ⠴ᠰᠰ󠱍󠱠 卪䍍⠽Ⲡ⪲獠 썍ⲭ؍堺䍠젺፠ ᠣ⭱ᠻ  占؍ؽᠻ 썠 ᠣ㍠٠ ؠ ፠㍠젺䠻 占󍍪 荍獠 썍뱍벍볍봍뵍붍󍍪 󍪽ؠᠰ í獠򠰠 ᠣ𱠻 ፠㍠㠣𪲍 ؍ᠻ 䍠ፍ󠠻 ⠽Ⲡ⪲獠 썍ⲭ؍堺䍠젺፠򍠻ý ᠣ㠣젺䍍ᠣ⭱ᠻ  占؍ؽᠻ 썠 ᠣ㍠٠ ؠ ፠㍠젺󍍪 荍ᠣ 卍堻 ᠣӽ ý򍠻 砻ᠣ ፠䠣č󍍪卪堣㲍 鍠䲍񠺱ý㠠ӽ򍺱󠠻 荍퍍岠 岠 򫲍 占󠠻 卍荪 򍍠𠠻 堣 󠣤ƻ 鍍 卍򠣤Ơ 占𠥰 ج ᠣ㍠岍𠥰 ج 䠣ƍ፺፠򠣤 ፠㍠堺岠 򍍠㍠፠岍䠣ƍ፠򠣤፠㍠𠣸㠺򠣤Š 썠󠠻 卍獍䠽䲠䪲⠽Ⲡ⪲䭱IJ􍠻占ᠣ⭱፠؍፠썠ᠣ㍠ؠ ٍ፠㍠젺砣򍍺砣፠ī㠺 ˩ 쩍  Ĭ ý㠣䠻 젻 ؽ؍頺 ؍頺 IJ䲫堺ᠺ؍ ᠣ ؍ᠻ ý㠣䠻 čᠱ č卺ᠺ􍪭 ý ˩ 쩬 庍 ˩ 쩬 㠣 ý堻 獻 占占󍍪䠽䲠䪲⠽Ⲡ⪲䭱IJ􍠻占ᠣ⭱ᠻ  占؍ؽᠻ 썠 ᠣ㍠ؠ ٍ፠㍠젺砣򍍺砣፠ī㠺 ˩ 쩍  Ĭ ý㠣䠻 젻 ؽ؍頺 ؍頺 IJ䲫堺ᠺ؍ ᠣ ؍ᠻ ý㠣䠻 čᠱ č卺ᠺ􍍪 ؽ   캍 ؠ 젻 젠 젻 占젻 ㍠堻 󍍪䠽䲠䪲⠽Ⲡ⪲䭱IJ 占ᠣ⭱ᠻ  占؍ؽᠻ 썠 ᠣ㍠ؠ ٍ፠㍠젺砣򍍺砣፠ī㠺 ˩ 쩍  Ĭ ý㠣䠻 젻 ؽ؍頺 ؍頺 IJ䲫堺ᠺ؍ ᠣ ؍ᠻ ý㠣䠻 čᠱ č卺ᠺ􍍪䠽䲠䪲獍򠽠Ⲡ򪲍䭱򍍠 占ⲭ砣򍍺砣፠ī㠺 ˩ 쩍 덻 Ĭ ý젻 Ī ؽ䲬؍堺 ᠣ 占ᠺᠣ 卺ᠻ 䲬؍ᠻ ؽ č č占ᠺ卻 썠堻 堻 堻 堻 䍠堻 堻 占堻 䍠堻 占堻 荠堻 堻 堻 䍠堻 䍠堻 䍠堻 䍻 堻 䍠堻 堻 堻 堻 堻 堻 堻 堻 堻 堻 占堻 婍堻 䍠堻 䍠堻 䍠堻 占堻 썍占堻 򩍠堻 򩍠堻 򩍠堻 򩍠堻 򩍠屠 򩍠 󩍠 堻 𠻲 蠻 䠻 占蠻  堻 占𠻲 占𠻲 Í𠻲𠻲𠻲𠻲𠻲𠻲𠻲堻젻堠 孴 卍اĠ 맬ù㠧ħ㠧 Ġ퍍 ù仧留퍍 仧廢퍍 ù仧廢퍠㠧ħ 䧬 ù廢퍠 ù仧廢퍠㠧ħ ù仧퍠 ù仧짍Ġ퍠㠧 Ġ仧廢㠧ħ仧廢퍠仧㧻廢퍠仧廢퍠廢㠧ħ 仧槻廢퍠㠧 ù仧廢퍠㠧ħ ù㠧ħҧŬ ù㠧 Ƭ ù廢퍠㠧 姍퍠 ç 姍 ç 姍 󧍠㠧𠽠 𠽠蠽诲屠荠 占젰 ˍ썠占占ﱍﲍﳍ젰ˠ č譱譴퍠ˍ젰젻 č퍠썠젰堻 č ٬ج٬ج占占젰堻 č譱占젰 ά ةﱠ 䍠屬퍠ﱍ߰ 젰ﲠ 썠䫱屬퍠ﲍ߰ 젰ﳠ 덠䫲屬퍠ﳍ ߰ 젰ʧ  占Ƨ 占 ⠥߰ ⠸ 占㠧 䍍ﱍ Ӯ 姍ﲍ썠 Ӯ 䧬Ŭ 姍ﳍ덠 짬 򧬸Ŭ㧬Ŭ姍ˍ˧썠򧍍 罭 𠽠蠽诲屠荠 占젰 ˍ썠占ﱍﲍﳍﴍ젰ˠ č譸퍠ˍ젰젻 č譲퍠썠젰堻 č譳占젰 ά ةﱠ 䍠屬퍠ﱍ߰ 젰ﲠ 䫱屬퍠ﲍ߰ 젰ﳠ 䫲屬퍠ﳍ߰ 젰ﴠ 䫳屬퍠ﴍ߰ 젰ʧ  占Ƨ 占 ⠥߰ ⠸ 占㠧䍍ﱍ 姍ﲍ ﳍ ﴍ 󧍍 罭 ﱠﲠﳠﴠ 􍍪𠽠蠽诲屠荠 占젰 ˍ썠占ﱍﲍﳍﴍ﵍ﶍ﷍︍﹍젰ˠ č譸퍠ˍ젰젻 č譲퍠썠젰堻 č譱譳占젰 ά ةﱠ 占䍠屬퍠ﱍ߰ 젰ﲠ Í䫱屬퍠ﲍ߰ 젰ﳠ 占䫲屬퍠ﳍ߰ 젰ﴠ Í䫳屬퍠ﴍ߰ 젰ﵠ 占䫴屬퍠﵍߰ 젰ﶠ 䫵屬퍠ﶍ߰ 젰﷠ 䫶屬퍠﷍ ߰ 젰︠ 䫷屬퍠︍߰ 젰﹠ 䫸屬퍠﹍߰ 젰ʧ  占Ƨ 占 ⠥߰ ⠸ 占㠧䍍ﱍ 姍ﲍ çﳍ 姍ﴍ ç﵍ 姍ﶍ ﷍ ︍ ﹍ 󧍍 罭 ﱠﲠﳠﴠﵠﶠ﷠︠﹠𠽠蠽诲屠荠 占젰 ˍ썠占뱍벍볍봍뵍붍젰ˍč譸퍠ˍ젰썠č퍠썠젰占č譲占젰뱍䍠屬퍠뱍 占 獠젰벍䫱屬퍠벍 占젰볍䫲屬퍠볍젰봍䫳屬퍠봍젰뵍䫴屬퍠뵍젰붍䫵屬퍠붍젰ʧ  占Ƨ 占 ⠥߰ ⠸ 占㠧 Ƨ 占 ⠥ ⠸ 占Ĭč㠧 ì᧬ì姬ì駬ì溺ìč㠧 ŬƬĬĬ 嬧 ᬹᬹ䍍뱍 벍 ݣ 볍 봍 Ŭō뵍 Ŭƍ붍 ù IJùij 뱠베볠봠뵠붠 ͱ屍⠢ܢͱ岍⠤ŬĬƬč⠧ܧ⠤ĬŬĬƍ⠧ۧݧ⠤⠧᧬姬駬溺 占⠤ō 占⠤ƍ󍍠孤í孤í孤堻 卍 ƍƬŬìĬƬŬŬŬĬĸ´ôᰠì¬ìðñ÷øⰠ㲍㰠ı፺䰠፺尠¹·µƬĬ°Ƭ፺氠±³²Ķõűóፍà Í ƍ嬸欸ᵬᰬ፺ᱬ䬸㬸ᴬᲬƬᳬᰠ測⬹湬屬欲欹帍Ⱐ汬泬沬嶬崬峬ᶬᷬᬹ䍺㰠Ḭ⬹淬Ƭ捺䰠㴬湬涬欹捺尠ᬲ欴欴捺氠欴欵捍堻 卍 ƍƬŬìĬƬŬŬŬĬĸ´ôᰠì¬ìð䰬ᰬñ÷øⰠ䲬䳬䴬䵬䷬乬㲍㰠尬岬峬崬ı嵬嶬巬帬幬捺䰠氬汬沬泬洬浬涬淬測湬捺尠㹬ᶬ¹·ḬµṬĬ°Ƭ⸍氠±³²ⶬ䶬õűó㶬ᴬፍà Í ƍ嬸欸ᵬᰬ嬸፺ᱬ䬸㬸ᴬᲬᳬᰠ測⬹湬岬屬嵬巬幬氬帍Ⱐ汬泬沬嶬洬崬峬浬ᶬᷬᬹ䍺㰠Ḭ⬹淬尬ƬⰬⱬⲬṬ㍺䰠㴬ⳬ⴬⵬ⶬƶⷬ⸬⹬卺尠㰬㱬㲬㳬㵬㶬㷬㸬㹬捺氠䰬䱬䲬䳬䴬䵬䶬䷬丬乬捍卍 ƍ¬ì㬷⬷䍺¬ììŬƍᰠ¬ìĬŬƍⰠ°±²³´µ¶·¸¹¬ìĬŬƍ㰠ðñòóôõö÷øù¬ìĬŬƍ䰠İıIJijĴĵĶķĸŬìĬŬƍ尠ŰűŲųŴŵŶŷŸŹ¬ìĬŬƍ氠ưƱƲƳƴƵƶƷƸƹ¬ìĬŬƍ􍍪 ƍŬƬì¬čŬƬƬƬƬƬìᰠ¬Ĭ¬ŬⰠ㰠ƬƬƍ䰠ƬƬƬƬìŬ尠ŬììƬƍ氠ƬƬ 𠽠蠽诲荻𱍠𲍠𳍠𴍠𵍠𶍠𷍠𸍠𹍍𱍠㠧㠧㠧 姬Ĭč㠧 Ŭ 짬 㠧 îҮ Ƭ Ŭ 㠧 䧬Ŭ 㠧 Ƭ 㠸Ŭ  㧬Ŭ 㠧 㠧ޣ𲍠㠧㠧㠧 çĬč㠧 Ƭ Ŭ 㠧 䧬Ŭ 㠧 Ӯ Ƭ 㠸Ŭ  㧬Ŭ 㠧 򧬸Ŭ 𧬸Ŭ駬Ŭ 㠧 짬 㠧îҮ㠧ޣ𳍠㠧㠧㠧 姬Ĭč㠧 㠧 짬 Ƭ 㠧 Ƭ 㠧 宧㠧ޣ𴍠㠧㠧㠧 çĬč㠧 秬ŬŬ򧬸Ŭ 㠧 Ƭ 䧬Ŭ 㠧 Ӯč㠧 򧬸Ŭ 𧬸Ŭ駬Ŭ 㠧 짬 㠧îҮ㠧ޣ𵍠㠧㠧㠧 姬Ĭč㠧 Ƭ ŬƬĬĬ 㠧䧬Ŭ ݣ 㠧 Ƭ 㠸Ŭ 秬Ŭ󮧍㠧ޣ𶍠㠧㠧㠧 Ĭč㠧 宧č㠧 Ƭ ŬƬĬĬ 㠧䧬Ŭ ݣč㠧 Ƭ ì 㠧㧬Ŭ Ŭ Ŭ 㠧 Ϯ Ŭ  䧬Ŭ 㠧 㧬Ŭ 󮧍㠧ޣ𷍠㠧㠧㠧 Ĭč㠧 秬ŬŬ򧬸Ŭ 㠧 宧č㠧 ݣ 䧬Ŭ ŬƬĬĬ 㠧 󧬸Ŭ󧬰č㠲 姬 㠧 򧬸Ŭ᧬ 䧬 䧬 㠧㧬Ŭ Ŭ Ƭ 㠧 짬 㠧駬Ƭ 㠧ޣ𸍠㠧㠧㠧 Ĭč㠧 Ĵ ĵ㠧 㠧 㠧 Ӯč㠧 㠧ޣ𹍠㠧㠧㠧 󧬰Ĭč㠧 Ŭ Ƭ󮧬Ĭč㠧 㠧 㠧 󮧍㠧ޣ砻 𠽠蠽诲荻㠧 占㠧 ፠㠧ৠ 婍ʧ  Ƨ 占 ⠥߰ ⠸ 占㠧 ˧Ƨ 占 ⠥߰ ⠸ 占Ĭč㠧 槬Ŭ čč㠧Ӯ Ӯ ᬧč㠧 秬ŬŬ򧬸Ŭ ùč㠧 ӯ 󺧬č㠧 Ӭ ùĬč㠧é ˧Ŭ ƭ㠧ޣ砻 𠽠蠽诲荻㠧 占㠧 㠧 㠧 Ĵ󠱶 č㠧 ŬŬ 䧬Ŭ 駬Ŭč㠧 򿧍㠧 ҩ㠧 ⠰ 򍍪 !"#$%&'()*+,-./0123 򍪽ӧŬ 卍 ⠤ ⠤° ׯ㠠 썺 卺 󠱶 󠱲 獍  򺧍 ⠤³ӱ⠤ƠӍ㲠 䲠 썺 卺 岠󠱶 岠󠱲 獍 򍪽ˠˠ˧㠧 Ӯ 㠧 󰷠㠧Ӯ 𧬸Ŭ󱰠㠧Ŭ 姬󲷠㠧 䧬ůӧ 㠧 䧬Ŭ姬Ơ㠧Ŭ 姬󴰠㠧 姬󴲠㠧 󧬰 姬 姬 姬 姬󴸠㠧 󴹠㠧 㠧  㠧 Ŭà㠧 򧬸Ŭ姬Š㠧 짬Ŭ󵰠㠧 䧬Ŭꧬ 󵲠㠧 Ŭ󵴠㠧 Ŭ姬󵷠㠧 姬󵸠㠧  姬㠧Χ 䧬 짬Ŭ짬󲰱㠧ͧŬ  㠧 㠧 㠧 󰷍󱰍󲷍ƍ󴰍󴲍 󴴍 󴵍 󴶍 󴷍󴸍󴹍Íō󵰍󵲍󵴍󵷍󵸍 󲰱㍍ƍ Íō Ġ čɽ ̽ ɽ ̽ 荍 젰 󍍪  덻 덍䍠 젰 젰젰 􍍪젰 占젰 占 占젰 占젰젰젰ó 占젰 占 占젰堽 ㍠ 堻 占 젰 寴 ɍ  ō¬ 荠ì 󍍠Ŭ Ƭ 򍠻 ¬ ì 򍠻Ĭō 䍠ƬɍÍ 堽젰蠽蠽誴 ؠ٠卍፠ƍưƍưưƍưưƍưưƍưƳƍưưưƍưưưƍƳưưưƍưưưưƍưưưưƍưưưưƍƳưưưƍưƳưưưƳƍưƳóưƳƍưƳưưƳƍưƳưưưƳƍưƳưưưƳƍưưưưưưƍưưưưưưƍưưưưƳưƍưưưƳưƍưƴưưƳưƍưưưƳƳưƍƴưưưƳƳưƍƴưưưƳƳưƍƴƴưưƳƳưƍƴưƳưƍƴðưƍƴƴƴðưƍƴƴưƍƍ䠠 卺젰 卺젰 젰 卺 젰 젤Ơ 󩍠젰젰젰젰젰㠧 󠲰 󠱍䠽 䮍䠽 䮍䠽 䮍堽  󠽠 宍 堽 宍 宍 젽 젽 堽 堽 򮍍𠽠堽 䍻 堽堽卻 堽堽堽卻 堽 썻 썻 堽堽卍堻 堻 占젰 趴堻   ȍ趴 ׍ ȍ趴 ׍ 젰  젰 ㍠젰 ㍠젰 ㍠趴 젭 占젰 䍍占󠱫占߰߰߰ 򍠻嶴߰߱߰ 򍠻占卻 占덍߰߱߱ 򍍠߰߰߰ ߰߰߰ 򍍪젰젰򠽠߰߰߰堽߰߰߱堽߰߰߰堽߰߰߱砽߰߰߰砽߰߰߰ñ߰߰߰ñ߰߰߰߰߰߰렽߰߰߰߰߰߰߰߰߰󠽠߰߰߰򠽠߰߰߰߱߰߰߰߰߰򠽠߰߰߰젽߰߰߰󠽠߰߰߱򠽠߰߰߰젽߰߰߰󠽠߰߰߰젽堽𠽠젽堽蠽󠽠堽򠽠썍Ġ󠽠 󠽠󠽠󠽠 󠽠󠽠 썻 󠽠 썻 󍍠 Ġ č 젤 썠 젰 젥߰߱߰߰߰߰߰ 젭 젰 젰 젰 젰 젰 󍍪㍺ 占⠰ 卺⠸ 占 젰 ፍ젰 젰 퍠 56789:;<=>?à̠ݱ젤à̠ݱ젤ðàנݱ젤Űàв̠ݱ̠ݲݳ젤à젤ñà젤ıàб̠ݱ젤Ʊà젤Ʊàв̠ݱ젤àӠ젤àв̠ݱנݲ젤 à젤 à젤à젤àӠ젤à젤à젤àנݱ젤à젤à젤à젤ðà젤ưà젤İƠà젤ƠàӠ젤°Ơà젤Ơàנݱݲ젤ðƠà젤ðƠà젤İƠàנݱ젤Ơàנݱ젤ƠàӠ젤İà̠ݱ젤ưà젤àӠ젤à젤ðà젤à젤à젤±à젤ñà젤űà젤Ʊà젤à젤à젤à젤à̠ݱ젤°à젤°àӠ젤ðàנݱݲ젤à젤à젤àנݱ젤ðà젤ðà젤İà̠ݱ젤à젤àб̠ݱ젤à젤à젤àנݱݲ̠ݳݴݵݶ젤àנݱݲ̠ݳݴ̠ݵݶ젤à젤àà젤ààנݱݲ젤àà̠ݱݲ젤ààנݱ젤ààנݱ젤ààв̠ݱ젤Šà̠ݱ젤°Šà̠ݱ젤ŠàӠ젤Šà̠ݱݲ젤İŠà̠ݱ젤ŰŠà̠ݱ젤ưŠà̠ݱ젤Šàנݱ̠ݲݳ젤Šà젤ŠԠàӱݱӱà̠űݱ̠ݲ̠àנݱ̠ݲנà̠ݱנݲנàϠݰנݱϠݰנݲϠݰנݳϠݰנݴΠΠΠΠ̠àϠݰ̠ݱϠݰ̠ݲϠݰ̠ݳϠݰ̠ݴΠΠΠΠв̠àƠݱݱŠנݱΠנݱб̠àƠݱݱŠנݱΠנݱ̠àƠݱݱŠנݱΠנݱנàƠݱݱŠƠدݱΠݱΠӠàϠݰРݱޠŠΠàݱݱ͠àƠݱ䠣ݱŠݱΠݱàƠݱݱŠƠدݱΠݱΠàϠݰݱݱŠ䠍䠍ΠàϠݰݱΠƠدϠݰݱΠΠàؠݱ̠űàààݱàȧϠݰϠݲ뭱ݲŠϠݲ뭱ݲŠ ݲàݳΠΠΠϠݰϠݴ뭱ݴŠϠݴ뭱ݴŠ ݴàݵΠΠΠϠݰϠݶ뭱ݶŠϠݶ뭱ݶŠ ݶàݷΠΠΠ àààݱàȧϠݰàݲΠ àƠݱ砍砍̠Ҡݱ𠍠ŠƠݱ砍砍̠Ҡݱ𠍠ŠݱݱΠΠؠðà̠ű͠à䠍䠍ABCDEFGHIJKLMNOPQRSTUVWXYZ1239K 4  g َ")i`H"d@hh Rdhi@HHHH "BDF HHH"HH"46""))H"484i H:"H"""""hBhDhFhH`H1Y"h` x'ɖe` ǖq " o`x " (`) H& h&` K; :88+Hv y u ,JH 8,h:ꍗ " T"` S$⛍̚䛍䚭曍蛍ꛍ,웍D` 8"%HY"h` 4Ji뗩H 8㗝Qh:` jgH,"`x( "᭶8`̫ikm` " " " " "0P8J0)HH "h: "hm)H "hP " "`HH"H 8㕙Ŗh:HHE2"hhH"h> Ŗ02ڢŖ0  ŖکŖhJiڢ/"ဧ ""`HH"H 8,h:HH헢2"hhH"h> ,02ڢ,0  ,ک,hJiڢ/"ဧS  e`HH"H 8Qh:HH˖2"hhH"h > 02ڢ0  کhJiڢ/"ဧHH" HH>2"hhH"h $ ڛHڛJڢ/"R7777787777777777n77777777777777777777b]=όƍ T444444444Jw30b>>@\HX--A propos de Blue Monk\H---\D.>> Fichier \H--Ouvrir \H*Oo--Fermer\H*WwD--Sauver \H*SsD---\D--Format d'impression \HD--Imprimer \H*PpD---\D--Quitter \H*Qq--Lancer une application \H*Ll.>> Edition \H--Annuler\H*ZzD---\D--Couper\H*XxD--Copier\H*CcD--Coller\H*VvD--Effacer\HD---\D--Texte entier\H*FfD.>> Options \H--Recoder \H*RrD---\D--Configurer High Society \H---\D--Rgler la temporisation \H .>> Caractres \H--Choisir une police \H D.>> Aide \H--AEPC vers Apple\H --Apple vers AEPC\H --AEPC vers Apple blue\H --Apple blue vers AEPC\H--Enrichi vers GSwrite\H--Enrichi vers strict\H--High Society\H--Sources Merlin 16+\H--Ascii bas\H.2dsӕXMf X- dT ,- ;7- iB- JFOptions pour quitter ?- quitter GS.OS avec conservation du RamDisque- quitter GS.OS avec redfinition du RamDisque" retour l'application prcdenteOKAnnuler2)AYqX X  N +N —6N ͗AN ؗJFTemporisation 1 minute 2 minutes 3 minutes 4 minutes 2x/G_wט7m? m rO  b s  +  6  A ޙ L  W  b !JFRecodages AEPC vers Apple Apple vers AEPC AEPC vers Apple LittleBlue Apple LittleBlue vers AEPC! Texte enrichi vers ASCII GSwrite Texte enrichi vers ASCII strict High Society Sources Merlin 16+ ASCII bas(tԚ4n n .,LL9 D O 9 D ʛ O ֛JFHigh SocietyF {}|\ ^a^e^i^o^u aeiou ->  @ -> []# ->  MAJMIN -> Majmin AEae -> OEoe -> "" -> ܈\{|}#[]aeiou%%%؅ćʧʹʵʯʽʰʱšʎao'AAO-Y/,AEAEEIIIIOOOUUU؅ćЛɧšƤʎij߀@\{}|[#]@@CENOUa@aaaa\{}eeiiiinooooou|uu [c#][ BRCT'~ A0 Y a0 AAOOo__""'' yY/o<>ff .,, AEAEEIIIIOOOOUUU 7yPx0/\$0/AEPC vers Apple Recode un fichier texte import du monde MSDOS l'aide des utilitaires PC.TRANSPORTER. Les caractres tendus communs aux mondes Apple et MSDOS sont recods en fonction de la carte officielle Apple. Tout caractre tendu MSDOS n'existant pas chez Apple est remplac par un espace collant./^#00/\$0/Apple vers AEPC Recode un fichier texte Apple. Les caractres tendus communs aux mondes Apple et MSDOS sont recods en fonction de la carte officielle MSDOS. Tout caractre tendu Apple n'existant pas en MSDOS est remplac par un espace collant. Le fichier rsultant pourra tre expdi dans le monde MSDOS l'aide des utilitaires PC.TRANSPORTER./^#00/\$0/AEPC vers Apple LittleBlue Recode un fichier texte provenant du monde MSDOS en fonction de l'implantation des caractres dans la police LittleBlue. Tous les caractres communs aux deux univers seront leur place habituelle chez Apple./^#00/\$0/Apple LittleBlue vers AEPC Recode un fichier texte gnr sous AppleWorks GS avec la police LittleBlue. Tous les caractres seront recods selon les normes MSDOS. Le fichier rsultant pourra tre expdi dans le monde MSDOS l'aide des utilitaires PC.TRANSPORTER./^#00/\$0/TEXTE enrichi vers ASCII GSwrite Les 8 caractres des fichiers modernes sont recods en @{}|\ []# afin de pouvoir les relire avec GSwrite ou AppleWorks+SuperFonts. Les autres caractres tendus restent inchangs./^#00/\$0/TEXTE enrichi vers TEXTE strict Permet de passer un texte moderne dans un circuit pur texte. Les 8 caractres sont recods en @{}|\ []#. Les caractres enrichis comme le ou le sont remplacs par leur quivalent non 'accentu' soit ici, A et O. Les tendus pour lesquels il n'y a pas d'quivalent sont remplacs par des espaces./^#00/\$0/High Society Permet de passer un texte ancien ou gnr en ASCII par GSwrite dans un programme moderne. Les @{}|\ []# sont recods en . Les squences 'avec circonflexe' ou 'avec trma' d'AppleWriter ou d'AppleWorks sont remplaces par . Peut aussi passer en minuscules l'exception de la premire lettre de chaque mot./^#00/\$0/Sources Merlin 16+ Remplace les espaces tabulants par de vraies tabulations permettant une impression correcte dans AppleWorks.GS. Il restera placer les taquets de tabulation./^#00/\$0/Ascii bas Met zro le bit haut de tous les caractres. Option utile pour les sources Merlin et pour les fichiers provenant de quelques anciens traitements de textes./^#00/L41) `JFBLUE MONKF vous permet de transfrer des fichiers ASCII : MS.DOS vers GS.OS et vice-versa, fichiers ASCII gnrs par AppleWriter, AppleWorks ou mme GS/Write vers les programmes natifs modernes: AppleWorks GS, Beagle Write, Medley (C) Yvan KNIG 1990  Version F-0.7`^#002n4/Le document a t recod ou modifi. Voulez-vous le sauver?/^ Oui / Non Slectionner un document : Destination :Choisir le fichier lancer:2#aU*OKErreur GS.OS :Erreur :GS.OS occupUnit introuvableErreur d'E/SProtection d'critureUnit non en ligneSyntaxe incorrecteTrop de fichiers ouvertsVolume pleinDirectory pleinErreur de versionType non supportFin-de-fichier rencontreFichier verrouillFichier dj ouvertType non supportPlus de mmoireFichier en doubleCe n'est pas un disqueN de bloc trop grandMmoire insuffisante !ID indisponible !$0000xͬ(:Tg{ƭܭ'+/@BHIJKLNPRTWXZ     "! 80???303330?3<0??30?303?0<3333?33?3333O?3??ODO??OOO N{{{{{ tb4  g/i7e:g=@WcZ#_cfйis#w{c42 ,/g2e9<AEPT_cox~MMMUUU]]]```o.xx67? iӪlux{~wu{ysswu{yߏݏc"u%w(ُ+ۏ1s4>sADGJMSV_eshk{s|}|0000 Last card G-------Parameter List------- ---Function Calls--- --Action--"*! ! N\! 0 BOQ HyperStudio XCMD Exerciser $ en Zc 2hp @ / , u X o  W G 9 D    33/HyperStudio XCMD Exerciser Written by Eric C. Mueller Updated by Ken Kashmarek/ ^Version 3.0, 01-DEC-89 Redraw card $ DM ~9B Previous card #, ! 4N enCommand line Text:Cancel Launch stack $ OX  DM! Next card $ .7 \ #,k !cp&q 4!) #I,> Do It.A7P First card9<Bc Info...DCMw 0000OX ZEc e n p7y 5C!  py Find text: Zc  OX$ Original Button ID:Current card ID:Handle to script:Pointer to script:Length of script:Function call address:Original card ID:Pointer to cmd line Text:D3Kc{!#%')+-/13579;=?ACEGIKMOQSU Move to card: $ 9B _ .7j 32/Card ID number invalid (error $xxxx)./ Cancel  /8W-X:q #, !     OK Find Text:Case sensitiveRead only fieldsEditable fieldsFind Text Search ParametersKb ZH\hhhkKb H\hk CH+Kb J H H:Hk+k\\k\CH+AFEH"GH"hkK ;iAEF hCHHJHhh HH "V;[c:zZګH "hHi "    kHH; [    +;i kkH h\KzZڭHH; [Vi # " Ȁ " Ȁ  Z8czHHHH "$ Out of memory "\h h  m  Ȁ    )s  "   i  ")0"!) IMAGES.JPAv' 'MOVEBIBbL4!* aLETTREc$  a-ARTICLE.INV16g !a(INVERSE1s !7a$DEMOwA!aMOVEPICL4!2a%PAL.4L4! a(INVERSE2I!4a(INVERSE33%!0aMOVEPIC2"L!7aMOVEPAL3'3!S%a%PAL.8L4!E2a0 T8H`媪㠤ű⠰*@pc$@GSINFOS10SICg FINDER.DATACK"EXEMPLESOOTCM~ FINDER.ROOTC1| GSCLUB.10SIC0$LES.PLUSESICf PROGRAMMESIC|ICONSLES0TAC*ARTICLES0TACA.G.)Les autres vendeurs ------------------------------------------------------- Deux adresses que nous avions donnes dans GS Infos n1 Infothque: La librairie conseil en informatique.Tous les livres pour le IIGS des prix honntes.Vente par correspondance. 32 Rue de Moscou 75008 Paris Tel:-1-45 22 67 01 La boutique GENIUS Montparnasse: propose du logiciel pour Apple II GS. Paris 15me 36 Bd du Montparnasse Tel:-1-42 22 67 50 Une adresse pour les rubans pour Imagewriter MARVAL BP78 95603 Eaubonne Tel 34 16 07 44 Bote de 5 rubans noir pour Imagewriter I ou II 120,00F port 50.00F en sus Le Guide Apple II 1er Semestre 90 --------------------------------- Le nouveau Guide est sorti, toujours aussi indispensable et gratuit.120 pages de plus que le dernier, un format plus pratique utiliser pour un ouvrage de rfrence. Bravo l'Apple II Service Team ! Vous avez d le recevoir directement si vous aviez retourn votre questionnaire hijklmnopqrVO=====!====!====!====!====!====!====!====!====!====!====!====!====!====!====!===0 9 ** INVERSION DES IMAGES EN 16 PALETTES **9 _________________________________________NLCet article vient en compl{ment des explications concernant l'obtention des MKimages en 16 palettes (voir GS Infos n[7). L'id{e est d'obtenir ces images IGen n{gatif. Il s'agit dans tous les cas d'images non compress{es de 65 blocks (type $C1).MKD'abord il faut savoir ce que signifie "inverser" une image. Pour cela, il KIsuffit de regarder la palette d'une image normale, de l'inverser c'est @ Ldire obtenir son "n{gatif" et d'aller voir encore la palette des couleurs.MKL'image "DEMO" que vous trouverez sur cette disquette comprend une palette LJun peu particuli}re de d{grad{ du blanc au noir tr}s souvent utilis{e sur 2les images num{ris{es @ partir de photographies.:D'abord l'image normale telle qu'elle est sur le disque:D 1) A partir du Basic, fixer le pr{fixe correct (PREFIX/.......)0 2) Charger l'image (BLOAD DEMO,A$1000,T$C1)/ 3) Sous moniteur regarder l'adresse 00/8E00On otient ceci:; 00/8E00:00 00 11 01 22 02 33 03 44 04 55 05 66 06 77 07 *; 00/8E10:88 08 99 09 AA 0A BB 0B CC 0C DD 0D EE 0E FF 0FLJEnsuite avec un logiciel de dessin (GS PAINT par exemple), on va inverser GEl'image @ l'aide de l'option "Editer palette". On va intervertir les ?couleurs en utilisant le rectangle inf{rieur pour le transit:NLMettre la seizi}me couleur (le noir) dans ce rectangle. Prendre la premi}re KIcouleur (le blanc) et la placer en seizi}me position . Mettre ensuite le HFnoir du rectangle en premi}re position @ la place du blanc. Continuer :ainsi, intervertir la quinzi}me avec la deuxi}me, etc...MKOn doit obtenir une palette invers{e par rapport @ l'originale. Le noir se JHretrouve @ gauche et le blanc @ droite. L'image est elle aussi invers{e &comme sur un n{gatif photographique.LJApr}s l'avoir sauvegard{e puis charg{e @ partir du Basic comme ci-dessus, sous moniteur on obtient cela:; 00/8E00:FF 0F EE 0E DD 0D CC 0C BB 0B AA 0A 99 09 88 08 *; 00/8E10:77 07 66 06 55 05 44 04 33 03 22 02 11 01 00 00 Conclusion:MKPour inverser une image il suffit d'intervertir l'ordre des couleurs de sa KIpalette c'est @ dire les couples d'octets d{finissant chaque couleur. La LJpalette du logiciel de dessin est donc ici la repr{sentation exacte de la 4zone m{moire d{finissant les diff{rentes couleurs.LJPour une image affich{e avec 16 palettes, il faudra bien entendu, r{p{ter seize fois l'op{ration.I. Programme INVERSE1---------------------AC'est ce principe qui a {t{ retenu. Chacune des 16 palettes est retourn{e L'UNE APRES L'AUTRE.NLOn charge l'image dans le banc 00 puis on la transf}re ensuite dans le banc )E1 pour l'afficher (lignes 140 et 150).FDOn charge deux fois le groupe de palettes et avec des boucles et un JHsous-programme on permute les octets (lignes 185 @ 200 et 1000 @ 1050). HFC'est un peu compliqu{ et j'ai bricol{ un bon moment pour m'en sortir LJd'autan plus que j'ai d^u ajouter les lignes 182 et 200 qui traitent deux HFoctets r{calcitrants de la quinzi}me palette qui refusaient, pour une -obscure raison, de faire comme les autres!!4Si vous trouvez plus simple, faites-le moi savoir!ECOn transf}re ensuite le nouveau groupe de palettes en banc E1 pour 3affichage avec l'image d{j@ en place (ligne 250).II. Programme INVERSE2----------------------MKCette fois, c'est plus simple @ r{aliser. En effet on se borne @ retourner les seize palettes ENSEMBLE:LJLe dernier octet de la seizi}me palette prendra la place du premier octet 6de la premi}re palette et ainsi de suite...512 fois.6On charge et on tranf}re l'image (lignes 100 @ 150).JHOn charge deux fois le groupe de 16 palettes et on les retourne en bloc (lignes 186 @ 202).DOn transf}re les palettes en banc E1 pour l'affichage (ligne 250).JHRemarque: Les meilleurs r{sultats sont obtenus avec PAL.4 et PAL.8, les HFnum{ros entre parenth}ses donneront des r{sultats similaires avec des IGpalettes pourtant diff{rentes. PAL.9 donne des r{sultats diff{rents de <toutes les autres mais l'effet n'est pas tr}s int{ressant.III. Programme INVERSE3-----------------------JHUne petite fantaisie pour ce programme qui diff}re du pr{c{dent par une seule ligne:KIEn effet on retourne seulement un octet sur deux (c'est le step -2 de la ligne 190)HFSeule PAL.4 donne de bons r{sultats. L'effet est tr}s particulier, on Adirait que l'on voit l'image @ travers les lamelles d'un store.IN.B. Vous retrouverez sur cette disquette les fichiers PAL.4 et PAL.8,> les autres num{ros sont sur la disquette GS Infos n[7.LLes meilleurs effets sont obtenus, @ mon avis, avec des images num{ris{es. Amusez-vous bien!9 J-P ARNAUD Mai 1990tuv0 ** INVERSION DES IMAGES 16 PALETTES **_ ** J-P ARNAUD INVERSE 1 04/1990 **e:s(:D$(4)2D$"PR#3"<D$"BLOAD MOVEPIC2"KD$"BLOAD MOVEPAL3"P"INVERSION DES IMAGES 16 PALETTES INVERSE 1"# U:"ce programme inverse les palettes l'UNE APRES L'AUTRE"+ Z:N d"NOM DE L'IMAGE ";N$:N$""Āo n::"NOM DE LA PALETTE ";P$ D$"BLOAD";N$;",A$1000,T$C1" 768 D$"BLOAD";P$;",A$1000,L$300" D$"BLOAD";P$;",A$2000,L$300" J(4800):K(4801) W0:V8450 E4352483232) VV30:EE23 10009 M 4830,J:4831,KV 852 6::" ENCORE FIN SAUVER IMAGE

SAUVER PALETTES ";Z$ @Z$"E"ė:80 EZ$"P"450 JZ$"F"Ā QZ$"I"350 T310 ^: h"NOM DE L'IMAGE ";V$ rV$""Ā2 |V$V$".16P,T$C1"F D$;"CREATE";V$^ D$;"BLOAD MOVEBIB"g 768 D$;"BSAVE";V$;",A$1000,L$8000"  : "NOM DU GROUPE DE PALETTES ";P$ P$""290 D$;"BLOAD MOVEBIB" 768 D$;"BSAVE";P$;",A$8D00,L$300" 310, LVV3227 A(L)@ E,AJ EE2P a EE33:VV1p W1W0:~ W1:1000 xyz{|}~iڙvUD33"23CyeC2"T2"""Dwˈ̩{eS2"322!D33CUwwgWD2"3"!!T"#EݪFwVD"!"#VBCWy캇fUfD23""!""#!1"2fݹgeD2333""#22"!"!"SʧgV334#""2kݻgU2"""!2"Z̺UT2"C*Ɉu3"24xjɈe22"eˈV3"!!"#1DW˘wC!!23"2ffT2"2#2vvxgT"!"2"gwffe"!giwvf3!!!jwf33!!"""!"wf݆C32!""3433"""yvwDCS#!#D34D4322!wwwUUU32"4DDTETD3C"wwgwf3D3""33DEUUUUD432#"gwwwvوC33"22TTUfVgfTC3""""gwwUD3""34EVefggwUWTE33"!!ggvwܘfTD3"!5EDewfefwVUfTD32"fwvweD3""DUegwwfVwfVUUDD#"!gwgw|wT"!C5VwvhwxwgeFgTUS3"vwwxfT2WTUwfxxwywUgvfUD2"!""""!!wgwwޘC""WUgxxwwfxggUC2"!"2""#32!1gwvw˹T3""wTvwggwyfUD3"!"#23343"vvggxݹeCC"GvwUVfxwfTT3"!##344332#vgvw˽wU3C&vxweT32"24DD333443C433gvgfxܺfD$$vfE33EUUVUDDC3D4DD42"vwwwʻfTCxxwUC3UfffVUEDC3CD4DD32vwwwxˍdC!eD4wgweUVUED43DEUED4#"www똛w42wUDWefwvffVUDDCDEUDDD3#vwwwwުeC3jgVFwwxwvffVUUDEUeUEE432"vwwwͼʩgS3"I̼xvfwwwxvfVUUeUUUfffUUD33"C!wwww웙weD32"̼̻̼˼wwfxwweDD#EDUeffffUUD33""4 vwwxݙ۪݈4#2̼xxwTwvD3#3VevwvfVUED32!""DgwwhD3"!˻ܼˈTd"UfwgfUUD3#C2UwwwwܼC"̻u3E"""$fxxwfeDD4"""3"C4vwxwxzʻU#"!!w̼83"3"xwfVDD43"!!!""524wwxwnܚ﷕E2""Dx̻D$e2#2WfVTD422"!"2!432wwwwwiwD3!3"#4TUUy̼kͩDdEywfVUD33"!"!43D2vwwwwxɻeSED43&wvUEf̩VgxfUUD32""#!#C4C!wwwxxȖgxg5D˺VffwfVUD33""$!!fCVDwwxwxjfݛ̾YT1ww̺wfUDCC##"!3"EeDfDwxwwwxct4"wTwwg̻xwfUED3#""3EffffCwwwwݟT3"FCT""2xwfVD433#"""3DUfgv3wwwxwʻvCC#!V3!rS!̻ywfUD32#3""##D7Vfe1ww﯍uC33"CT"̻˻xwfUD3332"""#DfTwxwwxܸtDD2"! 4̻wweUT3333""#QUs2xwwwxyʆDT$!B̻̼̕xgfeD43332"""En~!wwwgw놅U"!uVff̻̼xvfUED3333"""ESswwgh̽fU2!6D̻̼̼wgfVU433C32!"4DwxwwwgɋVC"!!x̻̻wgeUTD4433"""!94wwgwx|D2̫̻wfeUED4443""7v1xwwxxwXȧC!̻̻˫gffUTDDDC32"|!wwwxxwwkV2̼˩̻xfUUEEDC32" C0wwwwwveu2!̼̻x̻xgVUUTDDC32!!ewwwwwvvgf23""!̼˪w˻wfeVUUDDD33""wwwwvgUTTE3""!ɫ˻̻wwfVUUTDD3#!2xwwxwwvlxfD|WUD2!"ܻwy˼xwgVVUEDD32"!2wwwwxvwwuUEFFD3""ܻwyxwwffUEDDC3"wwxxvxVgUxxxvD4"3\̪vxwvfUUE4D3"!xwwwxveeϚiVUD"4ܻ2"fwwfVUDD32"""wwwwfexfe$Dܼ˻DgxxgffEED322"""wwwwfV4Dͻ̻fwvfUUD33""""wxxugˊveD2̼xwvfUUD33"##"xxxwxwvg۽tdFBʻݻwWhfeED43"""3""wwwxWwͫuvVDl̪̻wUDDkwfVED42"!"#22""wxxiLeE̙fUDEcuwgVE43#""332""WC!xww:uE2˚eUy{hxwfUED32"#3333"iveeUTUT3wwxwh۝۸vD"8vU̺vwwfUUD3"!#33C32(fvffffeeUUUTwgfD2"vffgfX˭UVxxfUED3""333C3"wvfvffffeVgfVxxẍˈUC2#6zEUe˚VxwwfVTC#"#34C43wgwwvfvvffffffxwˊTu322GuufgfVT4"!"3#4D4Awvwwvgwvvfvwffwxw̹xw3T27twegxwfU53"""#44DC(wwfwwwwwfwvwfxxx쬶xux3D"1˼hvuxgeEE2""3DD4DDzwwxxwwwwfwwxwxxwfڎe3D"#&xigGwfUUD##"44EUTCwwwwwwwwwwəwwwwwuwSE2""fxTwgfUU#"3FfeTCwwwwwww˙xwxxwvˆfDvxC3""EeywvhwwfUEC33bwywwwffZvdjue33""YUxgwgfUE"3˻wwwxwffgUUvgfD3##"!UWvw˻gfUE33XܻwxwgwwVfgĖeYXwfD#2"!"!̼wfeUD#yܻg˼wxwwxwfWWwvfffC2""2"!h̼ffUT#3x˻xgwwfffv{VVVB2"#D!!˪wfUU332˪˪ʹ˺wgxvVfVfeޛheUeC2##C2"!9̻wveT333i̺˻˼wwwgVfeeffuE62#23C"22̺weUD333wܩəwwxgwxwwUVfjfewUC3"2ED"B$#̺geU3333W̻˻̼ͩxwwxgeZfUfuVfE#"$T3$BC"k˪wfVC4449W̼ܪ˺wxvwggUUVfUVfD3B##$""333E̻fVD4D34ig˪x̫xwgwwgUUeUUdghUD"3C"C"#333#2˪vfUDDDC3hʼ̼˙ܹwxwwgxwfeUUUTVfUvUDD2"3"#eC334˼feUUTD4Cxܻޚݻ˙wʪwwwggxwfUUUUUUUVxVe423##5gu4D˻vvUEEDDCxܼ̪̻̻ww˹wwggwgVUUUUTeUVUUE433DCD333DvgweVUTDCx۪ͽܻxh˩wwgggeUUUUUUUUTVUTUTDCCDC333!4EvUUTTCxݽݻ˹ݺwwggwxxfVTTUUTTUUUDvUE4UUTgE5CT"#DDgWDwfUUECxݼ۩ݽx""""3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww   """"3333DDDDUUUUffffwwww  𻻻 """"3333DDDDUUUUffffwwww 𻻻""""3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww ̙ """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  𙙙""""3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww 𙙙""""3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww 𘈈""""3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww 興""""3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  ̍""""3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww  """"3333DDDDUUUUffffwwww """"3333DDDDUUUUffffwwww  "3DUfw "3DUfw "3DUfw "3DUfw "3DUfw "3DUfw "3DUfw    p,AwA)0 T8) A)`8` n \ nԅ \ n A)`  80 T8`       0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0 1 2 3 4 5 6 7 8 9 : ; < = > ? 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 0123456789:;<=>?0123456789:;<=>?0 ** INVERSION DES IMAGES 16 PALETTES **_ ** J-P ARNAUD INVERSE 2 05/1990 **e:s(:D$(4)2D$"PR#3"<D$"BLOAD MOVEPIC"KD$"BLOAD MOVEPAL3"P:"INVERSION DES IMAGES 16 PALETTES INVERSE 2"' U:"Ce programme inverse les 16 palettes de l'image ENSEMBLE"` W:"Essayer PAL.4 (7.15) PAL.8 (6.12.13.16) PAL.9"h Z: d"NOM DE L'IMAGE <*> = IDEM ";N$:N$""Ā N$"*"160 D$"BLOAD";N$;",A$1000,T$C1" 768 ::"NOM DE LA PALETTE ";P$ D$"BLOAD";P$;",A$1000,L$300": D$"BLOAD";P$;",A$2000,L$300"E E4351Y L896084481d A(L)m E,Aw EE1} 852 6::" ENCORE FIN SAUVER IMAGE

SAUVER PALETTES ";Z$ @Z$"E"80 EZ$"P"450 JZ$"F"Ā QZ$"I"350 T310" ^:= h"NOM DE L'IMAGE ";V$L rV$""290b |V$V$".16P,T$C1"v D$;"CREATE";V$ D$;"BLOAD MOVEBIB" 768 D$;"BSAVE";V$;",A$1000,L$8000"  : "NOM DU GROUPE DE PALETTES ";P$ P$""290 D$;"BLOAD MOVEBIB" 768B D$;"BSAVE";P$;",A$8D00,L$300"H 0 ** INVERSION DES IMAGES 16 PALETTES **_ ** J-P ARNAUD INVERSE 3 05/1990 **e:s(:D$(4)2D$"PR#3"<D$"BLOAD MOVEPIC"KD$"BLOAD MOVEPAL3"P:"INVERSION DES IMAGES 16 PALETTES INVERSE 3"' U:"Ce programme inverse les 16 palettes de l'image ENSEMBLE"? W:"ESSAYER PAL.4"G Z:z d"NOM DE L'IMAGE <*> = IDEM ";N$:N$""Ā N$"*"160 D$"BLOAD";N$;",A$1000,T$C1" 768 ::"NOM DE LA PALETTE ";P$ D$"BLOAD";P$;",A$1000,L$300" D$"BLOAD";P$;",A$2000,L$300"$ E4351C L896084482: MODIF !!N A(L)W E,Aa EE1g p 852 6::" ENCORE FIN SAUVER IMAGE

SAUVER PALETTES ";Z$ @Z$"E"80 EZ$"P"450 JZ$"F"Ā QZ$"I"350 T310 ^:' h"NOM DE L'IMAGE ";V$6 rV$""290L |V$V$".16P,T$C1"` D$;"CREATE";V$x D$;"BLOAD MOVEBIB" 768 D$;"BSAVE";V$;",A$1000,L$8000"  : "NOM DU GROUPE DE PALETTES ";P$ P$""290 D$;"BLOAD MOVEBIB" 768, D$;"BSAVE";P$;",A$8D00,L$300"2 A)0 T8) `A)0T8) A)`        816/Paint                                                                                                      ART.INV16 ** INVERSION DES IMAGES EN 16 PALETTES ** _________________________________________ Cet article vient en complment des explications concernant l'obtention des images en 16 palettes (voir GS Infos n7). L'ide est d'obtenir ces images en ngatif. Il s'agit dans tous les cas d'images non compresses de 65 blocks (type $C1). D'abord il faut savoir ce que signifie "inverser" une image. Pour cela, il suffit de regarder la palette d'une image normale, de l'inverser c'est dire obtenir son "ngatif" et d'aller voir encore la palette des couleurs. L'image "DEMO" que vous trouverez sur cette disquette comprend une palette un peu particulire de dgrad du blanc au noir trs souvent utilise sur les images numrises partir de photographies. D'abord l'image normale telle qu'elle est sur le disque: 1) A partir du Basic, fixer le prfixe correct (PREFIX/.......) 2) Charger l'image (BLOAD DEMO,A$1000,T$C1) 3) Sous moniteur regarder l'adresse 00/8E00 On otient ceci: 00/8E00:00 00 11 01 22 02 33 03 44 04 55 05 66 06 77 07 * 00/8E10:88 08 99 09 AA 0A BB 0B CC 0C DD 0D EE 0E FF 0F Ensuite avec un logiciel de dessin (GS PAINT par exemple), on va inverser l'image l'aide de l'option "Editer palette". On va intervertir les couleurs en utilisant le rectangle infrieur pour le transit: Mettre la seizime couleur (le noir) dans ce rectangle. Prendre la premire couleur (le blanc) et la placer en seizime position . Mettre ensuite le noir du rectangle en premire position la place du blanc. Continuer ainsi, intervertir la quinzime avec la deuxime, etc... On doit obtenir une palette inverse par rapport l'originale. Le noir se retrouve gauche et le blanc droite. L'image est elle aussi inverse comme sur un ngatif photographique. Aprs l'avoir sauvegarde puis charge partir du Basic comme ci-dessus, sous moniteur on obtient cela: 00/8E00:FF 0F EE 0E DD 0D CC 0C BB 0B AA 0A 99 09 88 08 * 00/8E10:77 07 66 06 55 05 44 04 33 03 22 02 11 01 00 00 Conclusion: Pour inverser une image il suffit d'intervertir l'ordre des couleurs de sa palette c'est dire les couples d'octets dfinissant chaque couleur. La palette du logiciel de dessin est donc ici la reprsentation exacte de la zone mmoire dfinissant les diffrentes couleurs. Pour une image affiche avec 16 palettes, il faudra bien entendu, rpter seize fois l'opration. I. Programme INVERSE1 --------------------- C'est ce principe qui a t retenu. Chacune des 16 palettes est retourne L'UNE APRES L'AUTRE. On charge l'image dans le banc 00 puis on la transfre ensuite dans le banc E1 pour l'afficher (lignes 140 et 150). On charge deux fois le groupe de palettes et avec des boucles et un sous-programme on permute les octets (lignes 185 200 et 1000 1050). C'est un peu compliqu et j'ai bricol un bon moment pour m'en sortir d'autan plus que j'ai d ajouter les lignes 182 et 200 qui traitent deux octets rcalcitrants de la quinzime palette qui refusaient, pour une obscure raison, de faire comme les autres!! Si vous trouvez plus simple, faites-le moi savoir! On transfre ensuite le nouveau groupe de palettes en banc E1 pour affichage avec l'image dj en place (ligne 250). II. Programme INVERSE2 ---------------------- Cette fois, c'est plus simple raliser. En effet on se borne retourner les seize palettes ENSEMBLE: Le dernier octet de la seizime palette prendra la place du premier octet de la premire palette et ainsi de suite...512 fois. On charge et on tranfre l'image (lignes 100 150). On charge deux fois le groupe de 16 palettes et on les retourne en bloc (lignes 186 202). On transfre les palettes en banc E1 pour l'affichage (ligne 250). Remarque: Les meilleurs rsultats sont obtenus avec PAL.4 et PAL.8, les numros entre parenthses donneront des rsultats similaires avec des palettes pourtant diffrentes. PAL.9 donne des rsultats diffrents de toutes les autres mais l'effet n'est pas trs intressant. III. Programme INVERSE3 ----------------------- Une petite fantaisie pour ce programme qui diffre du prcdent par une seule ligne: En effet on retourne seulement un octet sur deux (c'est le step -2 de la ligne 190) Seule PAL.4 donne de bons rsultats. L'effet est trs particulier, on dirait que l'on voit l'image travers les lamelles d'un store. N.B. Vous retrouverez sur cette disquette les fichiers PAL.4 et PAL.8, les autres numros sont sur la disquette GS Infos n7. Les meilleurs effets sont obtenus, mon avis, avec des images numrises. Amusez-vous bien! J-P ARNAUD Mai 1990. ART.TV2 Deuxime partie de l'article de M.Benon commenc dans GS Infos n9. LA DECOMPOSITION D'UNE IMAGE COLOREE Une camra couleur, possde trois tubes d'analyse, placs cte cte. Chacun ne reoit qu'une image primaire R,V ou B, du mme point analys. Ce point ayant t dcompos par le systme optique de la camra. L'ancien signal noir et blanc, plus prcisment signal de luminance, reprsent par la lettre Y, est reconstitu par la formule de synthse des couleurs : Y = 0,59R + 0,30V + 0,11B. Le critre de compatibilit veut qu'un tlviseur en noir et blanc, continue fonctionner. On est donc, dans l'obligation d'mettre le signal de luminance Y, sur lequel il faudra superposer les informations de couleur. Un autre exercice, un peu plus complexe, mais cela en vaut la peine. Calculez, pour chaque barre de couleur, la valeur de Y = 0,59R + 0,30V + 0,11B. Vous obtiendrez les niveaux de gris, correspondant chaque couleur, sur un tlviseur noir et blanc. En donnant la valeur 1 chaque primaire R,V ou B, si elle existe ou 0 si elle est absente. Vous devez obtenir un escalier descendant. C'est le profil du signal de luminance transmis par l'metteur. Vous le trouverez aussi avec la MIRE.TV. On voit aussi qu'il n'est pas ncessaire de transmettre les quatre signaux Y et les trois primaires R,V et B. Trois seulement suffisent. Et la combinaison des trois signaux sera Y et deux seulement des trois primaires. Sur le plan international, il a t choisi de transmettre le R et le B. En fait on ne retransmet pas exactement le R et le B, mais des signaux de diffrence : Er = R - Y et Eb = B -Y, affects de coefficients diffrents selon les utilisations ultrieures en NTSC, en SECAM ou en PAL. En effet, le tlviseur couleur fera Y - Er - Eb pour retrouver Ev = Y - V, qui n'avait pas t transmis. LES STANDARDS DE CODAGE Maintenant il s'agit d'ajouter ces deux composantes de couleur au signal monochrome existant dj, de faon pouvoir les rcuprer par la suite. En plus il ne faut pas qu'ils gnent le signal monochrome ni qu'ils soient modifis par celui-ci. Nous allons dans un premier temps crer un signal unique contenant ces deux informations de couleur, qui sera le signal de chrominance. Et ensuite trouver une mthode pour le mlanger sans trop perturber le signal de luminance ou l'inverse et, aprs pouvoir les sparer. C'est le problme du codage. La premire solution exploite est le codage NTSC qui porte le nom du comit qui l'a tudi, et qui veut dire National Television Standard Comitee, en 1953. Ce standard est support par la norme M. Une remarque, si le NTSC est utilis dans une norme 60 trames et 525 lignes, il ne faut pas en dduire que 60 trames et 525 lignes dsignent le NTSC, comme on peut le lire dans beaucoup d'articles. Il existe par exemple l'Argentine, la Jamaique et l'Uruguay qui ont choisi le NTSC puisque ce sont des pays d'Amrique, et qui cependant ont un secteur 50 Hertz. Cette norme est la norme N, du NTSC en 50 Hertz. Le deuxime standard utilis est le Secam, invent en France par Monsieur Henri de France, et qui veut dire squentiel mmoire. Dans ce standard, utilis depuis 1955, les deux composantes ne sont plus transmises simultanment, mais seulement une ligne sur deux. La composante couleur est garde en mmoire et rutilise, une seconde fois la ligne suivante. Ceci a pu tre ralis grce la technique, qui a su fabriquer une ligne retard de 64 us, c'est dire qu'un signal entrant dans cette ligne est disponible 64 us plus tard avec la ligne suivante. On utilise avec la ligne bleue, l'information rouge prcdente retarde, et rciproquement. Il s'en suit une amlioration par rapport au NTSC. Il n'y a pas d'interfrences entre le rouge et le bleu. Le troisime standard est le PAL, qui signifie Phase Alternation Line, c'est le standard allemand venu aprs le Secam, qui met les deux composantes simultanment, comme le NTSC et qui utilise aussi la ligne retard de 64 us utilise par le Secam, pour son dcodage. Dans les trois standards, le signal de chrominance module une sous-porteuse qui sera ainsi ajoute la luminance. A la rception, il suffira de rcuprer cette sous-porteuse pour la dmoduler d'une part et pour avoir la luminance toute seule d'autre part. Il faut donc que cette sous-porteuse soit situe dans la bande vido de la luminance. Et pour beaucoup d'autres raisons il faut qu'elle soit lie la frquence ligne (fH). Trois cas diffrents pour chacun des standards. En NTSC - La frquence de la sous-porteuse est gale 455 fH/2. fH (NTSC) = 525 x 30 = 15750 Hz, ce qui donne une frquence de sous-porteuse gale 3,579545 MHz. Dans la littrature, on appellera ce NTSC le NTSC 3,58. Vous avez peut-tre vu cette expression sur votre tlviseur ou magntoscope multistandard. Mais vous avez pu voir aussi qu'il existe un NTSC 4,43. Et bien c'est un NTSC qui fonctionne dans une norme 50 Hz. La frquence de la sous-porteuse est gale 577 fH/2 ce qui donne 4,4296875 MHz, plus simplement dit 4,43. En PAL - La frquence de la sous-porteuse est gale 1135 fH/4 + fI (fI est la frquence d'image). Cette frquence a pour valeur 4,43361875, qu'on nomme simplement 4,43. En Secam -Il y a deux frquences lgrement diffrentes pour les deux lignes successives qui portent le rouge ou le bleu. La frquence de la sous-porteuse du rouge fr = 282 fH = 4,406250 mHz et celle de la sous-porteuse du bleu fb = 272 fH = 4,250 mHz. Ces sous-porteuses modules, constituent le signal de chrominance qui sera ajout simplement au signal de luminance, avant d'tre enregistr ou achemin vers un metteur. RESUME SUR LES DIFFERENTES SOURCES VIDEO Maintenant on doit faire un rcapitulatif des diffrentes sources que nous pouvons avoir : le signal natif noir et blanc, les signaux de base, La combinaison de ces signaux donneront : le signal composite monochrome, Pour l'analyse trichrome on aura, le signal primaire rouge - R, le signal primaire vert - V, le signal primaire bleu - B, Par matriage, ils donneront (en laissant de ct les coefficients) : le signal luminance Y = R + V + B le signal de diffrence rouge Er = Y - R, le signal de fiffrence bleu Eb = Y - B, Par codage ils donneront : le signal de chrominance NTSC avec deux composantes I et Q, le signal de chrominance Secam avec Dr et Db en lignes successives, le signal de chrominance PAL avec deux composantes U et V, et enfin, superposs la luminance Y : le signal cod NTSC, le signal cod Secam, le signal cod PAL. Tous ces signaux sont des sigaux vido, non transmissibles, en cet tat, par les metteurs. Pour pouvoir les acheminer vers les tlspectateurs il faut qu'ils soient ports, avec le son, par la porteuse d'un metteur. C'est cette porteuse qui rayonne l'nergie jusqu' l'antenne des tlspectateurs. Les normes, que l'on a dfinies plus haut, comportent encore d'autres caractristiques dont on a pas tenu compte dans cet expos. Tous systmes d'analyse d'une image (camra vido, lecteur de diapositive, tlcinma), donnent trois composantes primaires R,V et B avec ou sans le signal monochrome de luminance. Ces signaux ne peuvent servir qu' alimenter un moniteur vido, et naturellement ce, pourquoi ils sont faits, le codeur. Pour tre vhiculs, ils necessitent plusieurs cables, qui doivent tre de longueurs identiques (ceci est trs important), si on veut les rcuprer avec la mme phase. Pour pouvoir tre transmis, sur un seul cable, il faut qu'ils soient matrics et cods. C'est le signal qui entrera par l'entre vido, du tlviseur. On peut, pour certaines applications, vhiculer la luminance et la chrominance sparment sur deux cables. Ceci afin d'viter de perturber un signal par l'autre. C'est le cas des mlangeurs de studio. Le signal qui entre par le cable antenne du tlviseur doit tre dmodul, c'est dire dbarrass de la sous-porteuse ayant servi l'mission. LA PRISE PERITEL On peut donc faire maintenant un schma synoptique d'un tlviseur. On trouvera successivement : le dmodulateur, le dcodeur qui comprend : la sparation luminance et chrominance, le matriage qui reforme les signaux Y et R,V et B. Dans un tlviseur, depuis I983, la prsence d'une prise pritel est obligatoire. Tous les tlviseurs doivent pouvoir accepter l'un des trois signaux, HF modul, vido ou encore RVB. Mais il faut qu'on puisse utiliser au choix l'une ou l'autre des ces trois sources. Pour cela la prise pritel est cable sur une carte et possde des slecteurs. Les commandes de ces slecteur s'appellent commutation lente (pour utiliser l'entre vido) et commutation rapide (pour utiliser les entres RVB). Sur cette prise pritel, il y a aussi une sortie vido. Mais il n'y a pas de sorties RVB, cela n'aurait aucune utilit. Il y a en plus des entres et des sorties stro pour les sons droite et gauche. La prise pritel est utilise pour utiliser l'une de ces sources diffrentes. Exemple, le signal de canal +, est embrouill au dpart, et il arrive par l'antenne. Il faut donc d'abord le dmoduler, ceci est fait dans le tlviseur. Ensuite, pour tre dsembrouill, il faut le rcuprer dans le dcodeur canal +, payant. Ce signal alors dsembrouill, retourne dans le tlviseur pour tre utilis normalement. Comme c'est un signal vido, qui sort du tlviseur et qui revient du dsembrouilleur, c'est la commande commutation lente qui est utilise. Lorsque l'on branche le connecteur vido de notre ordinateur sur le tlviseur, ce sont les entres RVB qui seront utilises et c'est la commande commutation rapide qui doit tre oprationnelle. Quant au magntoscope, qui possde une prise pritel, c'est uniquement pour pouvoir enregistrer canal +, sans avoir besoin d'un tlviseur. En effet, le dsembrouilleur canal + n'a pas de dmodulateur, il doit utiliser un dmodulateur annexe (celui d'un tlviseur ou d'un magntoscope). Lorsqu'on veut enregistrer canal +, on doit utiliser le dmodulateur et la commutation lente du tlviseur. Thoriquement il y a une deuxime prise pritel pour acheminer le signal dsembrouill, jusqu'au magntoscope. Et de ce fait on ne peut pas regarder une autre chane, pendant un enregistrement de canal +. Pour ce faire, les constructeurs ont plac une prise pritel avec la commutation lente sur les magntoscopes, de faon utiliser le dmodulateur du magntoscope pour l'enregistrement et de pouvoir regarder sur le tlviseur une autre mission pendant ce temps. Mais la prise pritel du magntoscope, ne possde pas d'entres RVB ni de commutation rapide. Cela ne servirait rien puisque un magntoscope ne peut enregistrer qu'un signal composite cod. Ce n'est pas parce qu'il y a une prise pritel derrire un appareil que toutes les broches sont cables. Seules les broches qui lui sont ncessaires celui-ci sont utilises. Voyons maintenant le cablage de la prise pritel. broche 1 - sortie son droite 2 - entre son droite 3 - sortie son gauche ou mono 4 - masse son 5 - masse vido B 6 - entre son gauche ou mono 7 - entre vido B 8 - entre commutation lente 9 - masse vido V 10 - horloge 11 - entre vido V 12 - commande distance 13 - masse vido R 14 - masse commande distance 15 - entre vido R 16 - entre commutation rapide 17 - masse entre et sortie vido composite 18 - masse commutation rapide 19 - sortie vido composite 20 - entre vido composite 21 - blindage de la fiche La prise pritel a trois fonctions, la commutation lente, la commutation rapide ou non commute. Sur des tlviseurs anciens, avec prise pritel cable, (attention, il existait des tlviseurs avec prise pritel non cable, ou cable incompltement), il fallait entrer les tensions de commutation lente ou rapide sur les broches 8 ou 16. A l'autre bout du cable pritel, il y avait deux cables vido, deux cables son (entre et sortie) et un conducteur avec une fiche femelle permettant de brancher la tension de commutation lente. On pouvait le faire en y branchant une pile 9 volts. Puis la commutation lente tait commande par la position AV, de la tlcommande du tlviseur, la commutation rapide devant tre apporte par l'utilisateur. Maintenant il y a deux positions AV, sur les tlcommandes, la premire est en commutation lente et la seconde en commutation rapide. Les deux prises pritel permettent l'une le branchement d'un dsembrouilleur ou d'un dcodeur et la seconde ne comporte que les sorties pour alimenter un magntoscope ou un autre appareil. Que peut'on connecter sur la prise pritel ? Outre le dsembrouilleur canal +, il y a : le dcodeur ANTIOPE qui donne des services supplmentaires, par l'intermdiaire de la tlvision et les sous-titres des missions pour les malentendants, les dcodeurs de THVD, un lecteur de disque vido, les dsembrouilleurs des tlvisions codes trangres transmises aussi par satellite. J'ai employ le terme d'embrouilleur ou de dsembrouilleur, pour diffrencier cette particularit du codage, terme rserv au NTSC, Secam ou PAL. Cependant, vous trouverez, dans la presse le codage canal +, ceci est tout aussi acceptable, j'ai fait la distinction pour plus de comprhension dans cet expos. Les termes embrouilleur et dsembrouilleur, sont de plus en plus usits dans la littrature de la tlvision par satellites. Par contre le MAC (CMAC, DMAC) sont des systmes de codage, diffrents, pour remplacer le NTSC, le Secam et le PAL. Ce sont de nouvelles normes pour la THVD. LES COULEURS DE L'ORDINATEUR Nous avons vu que les couleurs de la tlvision sont restitues par une variation analogique continue de chaque primaire R,V ou B. Ce qui restitue un nombre infini de couleurs. Il n'en est pas de mme, pour notre ordinateur, qui doit coder les couleurs par des octets. Ceux-ci doivent, la fois commander un faisceau primaire ou l'autre et aussi son intensit. Les seize couleurs que nous avons decrites plus haut, sont codes sur un demi octet, soit sur quatre bits. Les couleurs de base Apple, ne sont pas les primaires R,V,B mais dj des couleurs composes. Le bit de plus faible poids commande les faisceaux R et B, en mme temps, avec une intensit gale au 1/3 de leur valeur maximum, ce qui donne la couleur deep red, code par 0001. Le deuxime bit excite le faisceau B, seul avec une intensit de 2/3. Le troisime bit excite seulement le faisceau V, avec une intensit de 1/3 et enfin, le quatrime bit excite les faisceaux R et V, en mme temps, avec une intensit de 2/3, ce qui donne un jaune fon, c'est dire brown. Les valeurs 1/3 et 2/3 de ces rapports ne sont pas primordiales, on pourrait par exemple choisir 2/5 et 3/5. Le principal est que le rapport soit le mme pour les trois primaires de faon obtenir un gris en les mlangeant et d'autre part ce que l'addition des deux gris donne le blanc maximum. Les seize couleurs seront dtermines par une combinaison de ces quatre bits. On voit aussi que ces quatre couleurs de base sont complmentaires deux deux. On aura, d'une part, : $4 0100 dark green, un vert fonc, couleur primaire, $1 0001 deep red, qui est dit, dans certaines traductions magenta, un mlange de rouge et de bleu et qui en est la couleur complmentaire et d'autre part, : $2 0010 dark blue, un bleu fon, couleur primaire, $8 1000 brown, un brun, qui en est aussi la couleur complmentaire. Si l'on fait la somme de ces couleurs complmentaires, on doit retrouver un blanc, avec une intensit qui les fait apparatre comme des gris. Ainsi : $1 + $4 = $5 soit 0101 est un gris fonc d'intensit 1/3 et, $2 + $8 = $A soit 1010 est un gris clair d'intensit 2/3. Si l'on mlange, nouveau ces deux gris, $5 + $A = $F soit 1111 on obtient bien un blanc d'intensit 1. Maintenant, on peut alors exprimer, la valeur des trois primaires pour les seize couleurs, en supposant que : $1, deep red, compos de R/3 + B/3, et que $4, dark green est un V/3 et, $2, dark blue est un 2B/3 et, $8, brown, compos de 2R/3 + 2V/3. On obtient les seize couleurs, dj dfinies, mais avec un niveau prcis : $0 0000 noir, les trois faisceaux teints, $1 0001 deep red, B/3 + R/3 (alors que magenta = R + B) $2 0010 dark blue, B/3 $3 0011 purple, 2B/3 + R/3 $4 0100 dark green, V/3 $5 0101 dark grey, B/3 + V/3 + R/3 $6 0110 medium blue, B/3 + V/3 $7 0111 light blue, 2B/3 + V/3 + R/3 $8 1000 brown, 2V/3 + 2R/3 (alors que jaune = R + V) $9 1001 orange, B/3 + 2V/3 + R $A 1010 light grey, 2B/3 + 2V/3 + 2R/3 $B 1011 pink, 2B/3 + 2V/3 + R $C 1100 light green, V + 2R/3 $D 1101 yellow, B/3 + V + R (alors que jaune = R + V) $E 1110 aquamarine B + 2V/3 + R $F 1111 white, B + V + R Cette mthode a permis d'avoir plus de couleurs en s'affranchissant de consommer des bits pour indiquer l'intensit des faisceaux primaires. Mais on voit aussi qu'avec l'ordinateur, on ne peut pour l'instant obtenir le rouge primaire. Il faudrait enlever, au deep red, la composante bleue. Ceci ne sera possible, qu'avec un autre fonctionnement des circuits de couleur. L'HORLOGE DE L'ORDINATEUR Commenons par l'Apple IIe. Il est quip d'un 6502 ou 65C02, qui fontionne 1 MHz. Le signal 14M, signal matre du timing est 14,25045 MHz. Partant de l, nous allons tirer toutes les autres frquences ncessaires son fonctionnement. Tout d'abord de quoi a-t-il besoin ? Faisons l'tude pour le fonctinnement 60 Hz. Dans sa premire fonction, il crit du texte en 40 colonnes. Chaque caractre est une matrice de 7 points horizontaux sur 8 verticaux. La dfinition horizontale de la ligne utile est de 40 fois sept points, soit 280 points. Mais le compteur ne s'arrte pas de compter pendant les suppressions. Pour le balayage horizontal, il compte jusqu' 65. Le compteur compte donc, pendant la ligne, 65 fois 7 points, soit 455. Il y a, 262 lignes, 60 fois par seconde. Cela donne une frquence de 7,1526 MHz. Ce signal 7M, est simplement le 14M divis par deux. Sur le IIe il est, exactement de 7,152225 MHz. Lorsque le IIe est muni de la carte EVE et qu'il travaille en 80 colonnes, il lui faut 560 points par ligne et, il utilise alors la frquence 14M. Par un circuit dcalage de 1/7, il va transformer les 7 bits srie, d'un caractre en 7 bits parallles. La frquence 7M devient alors, 1,018 MHz, qui est la vitesse du microprocesseur. Une autre frquence, apparat encore c'est la division par 2 du signal 7M. 3,562612, appel signal 3,58. Mais c'est la frquence de la sous porteuse du NTSC, en norme 60 Hz. Nous avons alors, tout ce qu'il nous faut, pour aborder tous les modes de fonctionnement du IIe, en noir et en couleur. Mais avant cela, voyons ce que cela donne pour le fonctionnement 50 Hz. Toujours 455 points par ligne, mais 50 fois 312 lignes par seconde. Cela donne 7,098 MHz, d'o une frquence du signal matre de 14,196 MHz. La frquence de 14,25045 MHz, choisie par Apple, est intermdiaire entre les deux valeurs qu'on vient de trouver. Mais pour avoir une sortie 4,43 MHz pour le PAL, me direz-vous ? Et bien, il y a, un oscillateur supplmentaire qui fournit ce 4,43. LE CODAGE NTSC ET PAL Afin de comprendre pourquoi, notre ordinateur, dlivre plus facilement un signal NTSC ou PAL, mais ne donne jamais de sortie Secam, il nous faut aborder la procdure de modulation de la sous-porteuse de chrominance. Essayons. La dfinition, en NTSC : les deux signaux de diffrence de couleur, modulent en amplitude, deux signaux de 3,58 MHz, en quadrature de phase, qui sont ensuite mlangs. Ne cherchons pas en connatre d'avantage, mais regardons en le rsultat. On obtient donc une onde, toujours 3,58 MHz, module en amplitude et en phase. La partie module en phase contient la couleur et la partie module en amplitude contient la puret. C'est cela la notion importante. Mais dans notre ordinateur, nous avons un signal 3,58M. Nous devons transmettre des bits d'octets reprsentant des couleurs. Il est donc facile, avec des circuits appropris, de moduler la phase du signal 3,58M, en fonction de la donne transmettre. Cela est fait par des bascules et des circuits coincidence. Il est tout aussi facile de moduler l'amplitude du mme signal 3,58M, en fonction de la quantit de blanc contenu dans la mme donne. On obtient alors un signal qui pourra tre dcod par un tlviseur NTSC, sans avoir eu recours au modulateur en anneau ncessaire la cration du signal de tlvision. Le problme a t simplifi du fait que l'ordinateur travaille avec des signaux non sinusoidaux, et que les donnes transmettre sont aussi numriques. Cela n'aurait pas t aussi facile si on avait du transmettre un signal analogique variation continue. Le codage PAL, utilise la mme thorie, mais avec une alternance de phase, une ligne sur deux. On peut appliquer encore la mme mthode, mais avec un signal spcial 4,43 MHz. Mais il n'en est plus de mme, pour la Secam, qui necessite son modulateur. Ce qui occasionerait un circuit supplmentaire, extrieur aux circuits de l'ordinateur. Il existe, des modulateurs Secam, qu'on alimente, partir du connecteur vido. Mais la qualit, sur un tlviseur, est trs mdiocre, compte tenu du fait que le signal de l'ordinateur n'a pas de balayage entrela. La prise pritel du tlviseur, nous permet d'entrer un signal RVB, nous n'avons donc aucun problme pour cela. Reste le cas de l'enregistrement sur magntoscope. Puisque nous avons une sortie en PAL, enregistrons en PAL, d'autant plus que les nouvelles camras CCD, fpnctionnent toutes en PAL et que, donc nos films familiaux sont de plus en plus en PAL. Bien sr, me direz vous, (c'est mon cas) certains d'entre nous ont une camra avec un magntoscope VHS qui fonctionne bien en Secam, et dont ils sont contents. Je vais leur donner une astuce. Pour rcuprer les beaux sous-titres, faits avec leur cher ordinateur, une mthode qui donne d'excellents rsultats, c'est de filmer l'cran de l'ordinateur avec la camra. Cette mthode tait la premire mthode de transcodage de NTSC en Secam, par exemple. On diffusait une mission en NTSC, donc 60 Hz, sur un tlviseur et on filmait l'image du tlviseur avec une camra Secam, 50 HZ. C'est bien meilleur que d'utiliser un codeur Secam du commerce, branch sur le connecteur vido, j'ai fait l'exprience avec le IIe, et le codeur dort dans un coin, depuis cette seule exprience. Voil pour ce premier expos. Il a abord des notions trs complexes, avec un langage simple. Bien des dtails ont t laisss de ct. Si cela peut tre utile, aux GSistes, on peut aborder le tltext, le minitel, la THVD, la digitalisation des images, etc...... Je prpare, en ce moment, un expos sur les modes graphiques des Apple II. H. BENON      +hhkKHH ;[$hHHhk֯HH"+hh`K\^&`k1 tk ! j 2e$   Hq xq  Q q Q &<BQ q L d |0 Q    p  @   ou si vous aviez demand par tlphone les prcdents. Autrement, demandez-le chez votre revendeur ou en tlphonant chez Apple France. On y trouve une information sur les services Apple, les adresses o trouver des produits Apple II, des rubriques techniques (GS/OS 5.0, utiliser un rseau AppleTalk, changer des informations entre GS et Mac, l'hypermdia, le diagnostic des pannes sur II e,c et GS), la liste des produits hard et soft. Un must de l'AppleIIphile... Nouvelles du Soft: ******************* Championne du VaporWare, la socit Seven Hills livre enfin "GraphicWriter III". Le produit est disponible chez Brjoux ( Boulogne et Lyon ) au prix de 900F TTC. J'ai test en 1987 la premire version ( Franaise l'poque ) de GraphicWriter et je n'avais pas t emball. Le produit a beaucoup volu mais, entre temps, est apparu AppleWorks GS qui fait la mme chose avec son module "Page Layout" et bien d'autres choses en plus. Le choix est simple, si votre passe temps ou votre travail ( car le GS est bien un outil de travail !) consiste raliser des documents maills d'illustrations, c'est certainement GraphicWriter III qui vous donnera le plus de satisfactions. Tout d'abord, comme le souligne J. Y. Bourdin dans POM'S ( oui je cite mes sources ) GW III tourne sous GS/OS 4.0 et 5.0 et ce sur seulement 512 k ( mais entre nous si vous n'avez pas 1 Mga, vous devez commencer tre malheureux !). Bien sr avec cette configuration vous n'crirez pas vos mmoires !. De GS/OS 4.0 reste l'option "Choose Printer" qui a migr dans le menu Pomme et qui vous renvoi au tableau de bord lorsque vous tournez sous 5.0. Plusieurs fonctions de gestion des fichiers sont trs 'Pro': * Ds la cration d'un document GW III vous demande de le nommer, ainsi votre disque ne sera pas envahi par des 'Untitled.xx'. * A l'ouverture d'un fichier existant, le choix vous est donn de crer un double permettant ainsi la conservation du document original. * Une fonction 'Auto-Save' permet d'viter la crise de nerfs quand une panne de courant intervient en plein milieu de votre 4489 me page, de plus elle libre la mmoire ce qui est trs utile sous 512 k. * Le programme est muni d'un vritable "Choose Fonts" qui autorise l'accs des fontes situes sur n'importe quel disque ( mais nos amis amricains ne doivent pas connatre "Fonte-DA Installateur de Franois UHRICH !). Je ne vais pas dcrire en dtail le produit, cel serait trop long. Comme tout traitement de texte, il comporte des fonctions de recherche et de remplacement de chanes de caractres et mme un dictionnaire; comme tout programme de PAO, il dispose de tous les outils de 'Draw' classiques. La fentre de dialogue du format de page est trs russie et, bien que manque l'op- tion 'qualit normale' chre Bourdin mais que je n'utilise jamais, il est trs facile de dfinir les diffrentes marges et vous tes aids en cel par une figure qui donne une ide exacte de la forme de votre zne de travail. Une case "Double-Sided" inverse les marges droites et gauches des pages paires et impaires pour faire de l'impression recto-verso. Les options sont toutes assistes, en plus des boutons et cases de saisies de donnes classiques, par une reprsentation graphique de votre action. Ceci est trs commode pour les enfants qui n'assimilent peut-tre pas trs bien la diff- rence entre justification totale, droite, gauche ou centre; les barres colores reprsentant le texte parlent d'elles mmes. Le formatage de votre document ainsi que les dessins ou logos dfinis sur la page matre sont reconduits automatiquement sur les autres pages. Les gros points forts de GraphicWriter III se trouvent dans ses fonctions d'impor- tation de textes et du dessins en provenance de trs nombreux softs grace des translateurs qui savent aussi interprter des commandes comme celles gnres par SuperFonts par exemple et traduire des graphiques de Print Shop GS. Ces translateurs tant des fichiers indpendants du programme principal, il n'est pas idiot de penser que la liste puisse s'agrandir. Astucieux aussi l'tirement automatique l'cran des dessins imports ce qui leur permet de retrouver leur taille normale aprs impression en mode compress ( avec AppleWorks GS, il faut d'abord dformer le dessin au 'pif' dans le module 'Paint' avant de le coller sur son document ). Enfin, il est rellement possible de faire suivre votre texte tous les contours, aussi biscornus soint-ils, de votre dessin. Un dialogue permet de fixer le dcalage haut, bas, droite et gauche entre le dessin et le texte; mais attention, procder toujours avec un cart faible au dbut, il sera toujours possible de l'augmenter par contre GW III semble planter quand on lui demande de diminuer cet espace. GW III offre quatre possibilits de reprsentation de votre document l'cran: * Meilleure lisibilit des caractres. * Position 'WYSIWIG' sense vous donner l'image exacte de l'impression. * 'Fit-in Window' dessine une vue rduite permettant de juger de la mise en page globale. * L'option 'Scale To' vous laisse le libre choix du rapport entre surface visible l'cran et taille de la feuille. Au chapitre des problmes, GW III justifie curieusement un texte comportant de nombreuses tabulations, une fonction est sense permettre de fixer l'cart entre les caractres mais pour l'instant je ne suis pas arriv rgler le problme de justification avec elle; je ne sais pas encore si cel est un bug ou une erreur de manipulation. Plus gnant est le problme induit par le driver d'imprimante spcifique de GW III, qu'il ne fonctionne qu'avec Graphic Writer passe encore, mais j'ai pass 2 heures rechercher la cause du message "Une grave erreur systme est survenue" ( je me croyais sur un Mac !) qui survenait de faon alatoire dans AppleWorks GS avant de me rendre compte que je n'avais pas dsactiv le driver d'imprimante de GW III. Autres dfauts de ce driver, il ne fonctionne pas sous AppleTalk et ne dessine pas les caractres de faon fine car il fonctionne en bi-directionnel; par contre, il est vraiment trs rapide. En utilisant les drivers standards du GS/OS, la qualit est excellente. GraphicWriter est un produit trs correct qui mrite d'tre dcouvert plus avant. Anti-virus: ************ Vitesse continue sa srie d'utilitaires du type 'Salvation' avec un anti-virus "The Exorciser". C'est, dans son tat actuel, le moins sduisant de ces outils ( il faut dire que nous possdons dj 'Spy Check Up' pour dtecter les microbes ) mais sa structure comportant des fichiers annexes pour chaque type de virus permet de l'adapter l'volution des contagions. Sa facilit d'utilisation est bien sr de type GS souris. Un point intressant, une de ses fonctions est un dsassembleur qui ne liste que les adresses des appels aux outils sensibles ( criture sur disque, lecture de l'horloge ... ) et qui peuvent tre des points d'entre de virus, ce qui permet dj de dtecter de possibles virus non rpertoris. Il cote 300,00F TTC, il est disponible dans toutes les bonnes boutiques Brjoux. Accessoires: ************* En direct de chez Brjoux, un accessoire de bureau dit par Roger Wagner: "DeskTop File Control". C'est un NDA qui, une fois install dans votre menu pomme, permet toutes sortes de manipulations sur les disquettes et les fichiers. Le haut de la fentre de dialogue vous informe sur le type du fichier slectionn, son type auxiliaire, sa taille et ses dates de cration et modification. En dessous trois boutons: "Exit" pour pratiquer le retrait !, "About" pour en savoir plus sur l'auteur et enfin le troisime, qui peut-tre "File Utils" ou "Disk Utils", dclenche un pop-up menu donnant accs aux fonctions 'renommer', 'dplacer', 'copier', 'modification du type Aux', 'vue du contenu', 'modification de l'accs' et enfin 'effacement' pour les fichiers et 'jection', 'renommer', 'effacer' et 'initialiser' pour les disques. Plus bas ce trouve, sur la gauche, une fentre avec ascenseur dans laquelle dfile le contenu du catalogue du disque choisi, droite les boutons "Next Disk" ( autre disque ), "Open" ( ouvrir un sous catalogue par ex. ), "Close" (fermer) et "On Line" qui fait apparatre les disques en ligne et bascule les fonctions du bouton "File Utils / Disk Utils". La fonction "View" ( voir le contenu ) ne donne un rsultat correct que sur un texte ASCII; la lecture d'un fichier d'application ou de dessin donnera une suite de signes curieux, traduction ASCII du contenu. L'option "Access" ( modification de l'accs ) permet de lire et ventuellement changer le flag qui indique qu'un fichier peut-tre effac, renomm, qu'il est lecture ou criture seule, qu'un Backup t effectu et enfin qu'il sera ou non invisible sur le bureau du Finder ( pour planquer un fichier confidentiel qui ne sera visible que si l'option 'Voir les fichiers Finder' est active ). Ce produit m'a beaucoup sduit par son ergonomie et sa prsentation, de plus, Roger Wagner oblige, le mode d'emploi est sous forme de pile HyperStudio que l'on peut consulter sans le programme l'aide du nouveau 'Run-Time'. Pour l'instant le prix n'est pas connu. Info dernire...Info dernire... ******************************* Le Quickie, c'est bien, mais il manque le 320/200 et les 16 tons de gris !!!! Et bien a vient ! Brjoux annonce un soft poustouflant, du jamais vu ! et j'espre bien tre le premier pouvoir vous en parler !!! A bientt J. Rey Nouvelles du Hard: ******************* Dans GS Infos 9, nous avions annonc l'arrive en France d'une nouvelle carte SCSI rapide de fabrication 'Apple' et les quelques chiffres relevs avec l'exemplaire reu quelques jours seulement avant la parution de la disquette semblaient trs prometteurs. Voici les rsultats de test plus complets, raliss sur un GS quip de 6 Mgas de mmoire et d'une TransWarp. Aprs avoir troqu ma GS Ram plus rv. 'A' contre une 'D', je peux enfin utiliser la fonction DMA ( accs direct mmoire ) secret de la rapidit de la nouvelle SCSI. Mon disque externe est un Seagate 40 Mgas type ST-251N dont la mcanique n'est pas des plus rapide mais dont les temps typiques sont similaires celle du Vulcan ( dont les caractristiques sont dues son driver spcial ). Comme je vous l'avais expliqu dans GS Infos 9, le test effectu avec Prosel 16 nous indique une amlioration du temps d'accs linaire (les donnes sont ranges dans des blocs contigus sur le disque) d'un facteur 3 ( 10 ms -> 3 ms ) ( Vulcan = 4.7 ms ) , certaines mcaniques plus rcentes ( et plus chres ) doivent faire mieux. Par contre le DMA a pour effet de ralentir l'accs alatoire aux donnes, qui est le plus frquent en pratique ( 28 ms -> 31 ms ), la diffrence n'est pas trs grande mais sur ce terrain le Vulcan est plus efficace ( 19 ms ). En pratique les rsultats varient en fonction de la capacit mmoire de votre GS: le mme fichier de 2,7 Mgas est charg en 35 s ( contre 50 avec l'ancienne carte ) sur un GS 6 Mgas, mais ce temps tombe 12 s seulement si vous ne possdez que 4 Mgas ou que vous avez cr un ram-disque de 2 Mgas rduisant la mmoire dispo- nible dans les mmes proportions ( le Vulcan donne 35 s dans les deux cas ). En utilisation normale, sur des fichiers de taille courante, le confort est tout fait identique entre le Vulcan et un disque courant Apple ( 20 ou 40 Mgas ) pilot par la nouvelle carte. Alors, me direz-vous, quel-est l'intrt de cette carte ?, tout d'abord sur la disquette qui l'accompagne se trouve un GS/OS 5.02 version Fvrier 90 qui corrige quelques bugs de la version prcdente et qu'il faut possder mme si l'on a une ancienne carte, ensuite l'implmentation de la totalit des ordres SCSI ouvre au GS de nouvelles perspectives ( Scanner, Backup sur bande ). Pour l'instant deux drivers sont fournis: celui pour les disques durs qui fonctionne aussi avec l'an- cienne carte et un driver CD-Rom qui exige la nouvelle. Quelques problmes tout de mme, un certain nombre d'informations font tat de difficults, voire d'impossibilit de formater des disques non utiliss habituel- lement par Apple. D'autre part, si votre disque dur est l'arrt, le boot d'une disquette en Prodos 8 stoppe pendant 35 secondes avant de redonner la main au lecteur pour la suite; ce n'est pas dramatique mais trs agaant !. Si vous tes tout Apple et rien qu'Apple, c'est la carte qu'il vous faut; si vous recherchez le prix le plus bas pour une mmoire de masse, ne ddaignez pas les anciennes cartes rvision 'C' qui peuvent circuler sur le march de l'occasion. Du Hard, encore du Hard: ************************ Ce sont les matheux qui vont tre contents !! Aprs quelques annonces prometteuses et beaucoup de patience, la poste me remet enfin la fameuse carte 'FPE' ( non ce n'est pas une carte postale !) ou 'Floating Point Engine' cre par 'Innovative Systems'. Il s'agit d'une toute petite carte pas plus large qu'un slot, comportant un coprocesseur mathmatique type 68881 ( a y est nous sommes en plein Mac !!) et deux ou trois composants annexes dont un spcialement personnalis pour I. S. Un copross, nous avons dj vu a, n'est pas ts utile celui qui se sert de son GS sans savoir le programmer et si une carte n'est l que pour faire un peu de chaleur elle n'en vaut pas la dpense ( 1800,00 F environ plus douanne ventuelle ). Et bien que les mordus d'AppleWorks GS et mme AppleWorks 8 bits se rjouissent la disquette qui l'accompagne contient une init pour driver, sous GS/OS, tout appel l'outil 'SANE' ( the Standard Apple Numerics Environment ) vers les fonc- tions quivalentes de la carte et un patch pour la version 8 bits du programme. C'est tout fait transparent et pour peu que la carte soit en slot 3, il n'y a pas besoin de la dclarer au tableau de bord. Les programmeurs ne sont pas laisss pour compte, une bibliothque de macros, y compris en mode 6502 car elle marche aussi sur II+ et //e, se trouve sur le disque. Seul petit problme qui, je l'espre, trouvera ts rapidement sa solution, ma carte TransWarp doit tre upgrade pour fonctionner avec FPE; j'ai donc, regret, remis en place ce bon vieux 65C816 pour les essais. Monsieur Alain Bonnet, Ingnieur des Ponts et Chausses, m'a transmi un test sur le tableur d'AppleWorks GS pour que nous puissions avoir un petit aperu de ses performances. Deux types de calculs sont proposs: arithmtiques ( addition, division ... ) et mathmatiques ( Cosinus ou Logarithmes ). Deux tailles de tableaux sont utilises 10 colonnes par 200 lignes, reprsentant les utilisations courantes, et, pour une utilisation plus professionnelle, 10 colonnes par 1300 lignes. Voici les temps de calcul des tableaux sur une configuration GS quip de 2 Mgas: * Calculs Arithmtiques Tableau 10 X 200 GS seul: 57s GS + FPE: 52s GS + TransWarp: 41s Tableau 10 X 1300 GS seul: 243s GS + FPE: 235s GS + TransWarp: 201s Bon, me direz-vous, j'ai une TransWarp alors a va plus vite !, et bien regardez la suite: * Calculs Mathmatiques Tableau 10 X 200 GS seul: 245s GS + FPE: 62s GS + TransWarp: 150s Tableau 10 X 1300 GS seul: 1550s GS + FPE: 367s GS + TransWarp: 949s Sur ce type d'oprations le gain est de 5 fois par rapport au GS de base et de 3 fois par rapport la TransWarp !. J'espre pouvoir associer bientt FPE et TransWarp ! Par contre, contrario des informations parues dans la presse amricaine, la carte FPE n'acclre pas l'affichage car QuickDraw II n'utilise pas l'outil SANE mais l'Integer.Math; sauf bien sr si c'est votre soft qui effectue un long calcul entre deux tracs l'cran ( la carte FPE divise par exemple par deux le temps de dessin d'une onde dans le programme PolySons de Babar de St Cyr ). FPE, une carte d'Innovative Systems PO Box 444, Severn, MD 21061-0444 USA tel. 301 987 8655 ou 301 768 4599 Disponible aussi auprs d'A2 Central. Et pourquoi-pas un peu de Hard ?: ********************************* Une nouvelle qui va rjouir nos adhrents bricoleurs ! M. Claude BATUT, membre du GS Club, a trouv le moyen de faire fonctionner la carte mmoire standard Apple avec des barettes SIMMs de 1 Mga, moyennant quelques modifications et un peu d'habilet au fer souder. On peut trouver ces barettes au prix de 580,00F l'unit sur la place Parisienne et il est possible d'en installer quatre !. Il faut prendre des barettes pour Macintosh ( et oui !), des 100 ns sont suffisantes ( 80 ns, c'est mieux mais plus cher !), consulter les pages d'annonces de la revue SVM Macintosh pour trouver les lieux de vente ( on y trouve aussi une foule de priphriques qui fonctionnent trs bien sur le GS ). Je suis en train de mettre en forme cette ralisation et la tester pour vous livrer son secret dans GS Infos de Septembre, je l'espre. Chez Brjoux: ************** C'est disponible, au prix de 1500,00 F HT, c'est le nouveau lecteur de disquettes 3,5 pouces la griffe d'Applied Engineering. Il est compatible avec le lecteur Apple 3.5, a le mme look et une diode bi-colore permettant de diffrencier les oprations de lecture et d'criture. Un upgrade 1,44 Mgas ( curieux, c'est trs MS DOS a !) est prvu dans le futur. J. Rey Infos Vie du Club: ----------------- Afin d'viter des frais inutiles nos adhrents qui choisissent de nous expdier leurs propres disquettes pour copie des domaines publics, nous avons dcid de permettre l'envoi de 10 disques condition d'utiliser une enveloppe 20 X 25 cm au maximum ( problme de bote aux lettres ). Il n'est pas utile non plus de mettre deux enveloppes bulles l'une dans l'autre, une seule et deux enveloppes kraft suffisent. Je reois encore des disquettes avec de nombreux "Bad Blocks" et, Dieu merci, ne bardez pas vos disques de ruban adhsif car la colle se dpose sur les glissires de mon lecteur dont le moteur n'arrive plus jecter en fin de copie !. Quelques personnes se plaignent de certaines rponses faites au tlphone par des gens de la socit Epsilon. Cette boutique fait des efforts en faveur des possesseurs de GS, mais ce n'est pas pour cel que tout son personnel est au courant de son existence ! Pour tout contact demander en particulier: Mme. Danile LEMAIRE pour toute commande de produit Apple (y compris GS/OS) M. Thierry RENARD pour les misres Hard (sur les produits Apple exclu- sivement) Bon nombre de nos membres ont fait appel leurs services et ont parfaitement obtenu satisfaction. J. Rey CDSTI ----- Nous avons reu un courrier de la socit CDSTI (Conception et Dveloppement de Systmes Tlmatiques et Informatiques) nous informant de ses activits. Il s'agit d'une socit qui dveloppe et conoit des systmes serveurs tourns vers les associations ou les personnes dsireuses d'offrir un service tlmatique. Pour ce qui nous concerne, cette socit diffuse un logiciel monovoie RTC , Stormtel V.3.0 fonctionnant sur tout Apple II. la version Apple II GS est sur une disquette 3.5p.Une version de dmonstration est disponible. Le logiciel en version de base avec sa connectique et sa documentation: cote 1000,00 F HT. On peut y ajouter des applications spcifiques (Tribune, Sondage, Rubriques paramtrables) pour 300,00 F HT. Installation, Formation, dplacement, uniquement en rgion parisienne 500,00 F HT. Cette socit offre aussi un service de cration de pages et d'applications spcifiques. Nous esprons pouvoir essayer ce logiciel pour en parler plus amplement. CDSTI: 31, Rue Paul Doumer 78130 LES MUREAUX Tel 46 36 75 66 ou 46 36 75 59. REVUE DE LA PRESSE AMERICAINE ( et franaise) par Y.Gobin --------------------------------------------------------- Pas grand chose cette fois-ci. APPLE IIgs BUYER'S GUIDE Printemps 1990 --------------------------------------- Il a perdu environ 40 pages ( sur 100) et n'a strictement aucun intrt. Cela sent la fin.... - 3 logiciels pour grer vos finances ( emprunts, impots etc..): managing your money, swiftax, 1040 Works-X. - faire des documents d'emtreprise avec Graphic Writer, publish-It. - Appleworks l'cole - Interwiew de Bob Carroll, prsident d'Applied Engineering - Des accessoires NDA et CDA - les rseaux tlmatiques amricains - changer les images avec Graphic Exchange de Roger Wagner - prsentation de logiciels: Cross Works 2.0 : pour les conversions entre PC et Apple II, FingerPrint GSi ( capteur d'cran ),GDL (pour faire des tiquettes), Prince of persion (aventure), Teleworks Plus ( tlcommunication en mode graphique). NIBBLE n4 Avril ---------------- - des jeux adapts d'anciennes versions: Master Detective, Solitaire royale, 2088: the cryllan mission - Six nouvelles commandes concernant le son pour l'applesoft (assembleur merlin) - rsolution d'quations (sur tableur Appleworks) - les ports (slots), petite tude. - RAMDisk 3.3 (avoir un RAMDisk en DOS 3.3): assembleur - ProdOS linker: installer une compatibilit DOS 3.3 dans ProDOS.(assembleur) - Apprendre le code MORSE. (basic) - la fonction SCRN en haute rsolution (assembleur) - ML integrator : intgrer des routine en langage machine dans les programmes basic. (assembleur) - un ducatif: les baleines. NIBBLE n5 Mai -------------- - Vu dans Nibble une pub d'Applied Engineering pour un lecteur 3,5 de 1,4 mega et plus pour l'Apple II. ( 279 $) - les jeux: Panzer Battle, les batailles du front russe ( faut aimer...), Mc Gee (l'aventure d'un gamin de deux ans ( pour les petits), - Directory designer: un programme pour classer vos fichiers comme vous le voulez ( enfin un progamme intressant de Nibble, en assembleur Merlin) - Mode d'emploi du mode graphique - Doublez vos points en graphique ( hyper-res plus ): pour les possesseurs de 2E et 2c - un expandeur pour Print shop ( en basic) - les ajouts Appleworks ( Timeout) - sauver des tableaux ( en baLES.PLUS Ce mois-ci, suite la demande de plusieurs membres, nous sommes partis la pche aux XCMD ou pltot la recherche du moyen de les fabriquer. XCMD.Sor.Code contient: - Un fichier texte XCMD.TXT en anglais. Ce fichier indique que les exemples sont compacts, sur notre disquette, nous avons mis les sources directement utilisables, par contre la pile de dmonstration n'est pas mise faute de place. - APW.ASM - MERLIN.ASM - ORCA.C - ORCA.PASCAL - TML.PASCAL - HS.XCMD la XCMD el456789:;<=>?@ABCDEFGHIJKPROGRAM 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; Procedure ChangeFonte (Fonte : Str255; taille,style : Byte); Var FonteID : FontID; Begin FonteID.famNum := GetFamNum (Fonte); FonteID.size := taille; FonteID.style := style; InstallFont (FonteID,0); If IsToolError then Exit End; Procedure ItemUtilisateur (dlog : DialogPtr; item : Integer); Var r : Rect; s : String[20]; Begin GetDItemBox (dlog,item,r); SetSolidPenPat (0); FrameRect (r); Case item of Titre_item : s := ' Titre : '; Rens_item : s := ' Renseignements : '; end; MoveTo (r.left + 10,r.top + 3); DrawString (s) End; Procedure ChangeFiche; Var r : Rect; Begin SetDItemValue (0,Fiche,M_item); SetDItemValue (0,Fiche,Mme_item); SetDItemValue (0,Fiche,Melle_item); SetDItemValue (0,Fiche,Ste_item); SetDItemValue (1,Fiche,Carnet[FicheActuelle].titre); SetIText (Fiche,Nom_item,Carnet[FicheActuelle].nom); SetIText (Fiche,Adr_item,Carnet[FicheActuelle].adresse); SetIText (Fiche,Code_item,Carnet[FicheActuelle].code); SetIText (Fiche,Ville_item,Carnet[FicheActuelle].ville); SetIText (Fiche,Tel_item,Carnet[FicheActuelle].tel); SetIText (Fiche,Div_item,Carnet[FicheActuelle].divers); SelectIText (Fiche,Nom_item,0,Length(Carnet[FicheActuelle].nom)); If FicheActuelle = 20 then HideDItem (Fiche,Suiv_item) else ShowDItem (Fiche,Suiv_item); If FicheActuelle = 1 then HideDitem (Fiche,Prec_item) else ShowDItem (Fiche,Prec_item); SetWTitle (Concat ('Fiche n',chr(161),IntToString(FicheActuelle)),Fiche) End; Procedure Items; Var r : Rect; Begin With r do begin top := 15; left := 36; bottom := 25; right := 105 end; NewDItem (Fiche,M_item,r,RadioItem,@'M.',255,0,nil); With r do begin top := 15; left := 136; bottom := 25; right := 200 end; NewDItem (Fiche,Mme_item,r,RadioItem,@'Mme',0,0,nil); With r do begin top := 15; left := 236; bottom := 25; right := 300 end; NewDItem (Fiche,Melle_item,r,RadioItem,@'Melle',0,0,nil); With r do begin top := 15; left := 336; bottom := 25; right := 400 end; NewDItem (Fiche,Ste_item,r,RadioItem,@'Ste',0,0,nil); SetDItemValue (0,Fiche,M_item); SetDItemValue (0,Fiche,Mme_item); SetDItemValue (0,Fiche,Melle_item); SetDItemValue (0,Fiche,Ste_item); SetDItemValue (1,Fiche,Carnet[FicheActuelle].titre); With r do begin top := 5; left := 15; bottom := 30; right := 400 end; NewDItem (Fiche,Titre_item,r,UserItem,@ItemUtilisateur,0,0,nil); With r do begin top := 126; left := 120; bottom := 139; right := 590 end; NewDItem (Fiche,Div_item,r,EditLineItem,@Carnet[FicheActuelle].divers,55,0,nil); With r do begin top := 110; left := 120; bottom := 123; right := 300 end; NewDItem (Fiche,Tel_item,r,EditLineItem,@Carnet[FicheActuelle].tel,20,0,nil); With r do begin top := 94; left := 120; bottom := 107; right := 590 end; NewDItem (Fiche,Ville_item,r,EditLineItem,@Carnet[FicheActuelle].ville,55,0,nil); With r do begin top := 78; left := 120; bottom := 91; right := 180 end; NewDItem (Fiche,Code_item,r,EditLineItem,@Carnet[FicheActuelle].code,5,0,nil); With r do begin top := 62; left := 120; bottom := 75; right := 590 end; NewDItem (Fiche,Adr_item,r,EditLineItem,@Carnet[FicheActuelle].adresse,55,0,nil); With r do begin top := 46; left := 120; bottom := 59; right := 590 end; NewDItem (Fiche,Nom_item,r,EditLineItem,@Carnet[FicheActuelle].nom,55,0,nil); SelectIText (Fiche,Nom_item,0,Length(Carnet[FicheActuelle].nom)); With r do begin top := 35; left := 15; bottom := 145; right := 595 end; NewDItem (Fiche,Rens_item,r,UserItem,@ItemUtilisateur,0,0,nil); With r do begin top := 48; left := 20; bottom := 59; right := 110 end; NewDItem (Fiche,NomStr_item,r,StatTextItem,@'Nom :',0,0,nil); With r do begin top := 64; left := 20; bottom := 75; right := 110 end; NewDItem (Fiche,AdrStr_item,r,StatTextItem,@'Adresse :',0,0,nil); With r do begin top := 80; left := 20; bottom := 91; right := 110 end; NewDItem (Fiche,CodeStr_item,r,StatTextItem,@'Code postal :',0,0,nil); With r do begin top := 96; left := 20; bottom := 107; right := 110 end; NewDItem (Fiche,VilleStr_item,r,StatTextItem,@'Ville :',0,0,nil); With r do begin top := 112; left := 20; bottom := 123; right := 110 end; NewDItem (Fiche,TelStr_item,r,StatTextItem,@'Telephone :',0,0,nil); With r do begin top := 128; left := 20; bottom := 139; right := 110 end; NewDItem (Fiche,DivStr_item,r,StatTextItem,@'Divers :',0,0,nil); With r do begin top := 148; left := 15; bottom := 163; right := 155 end; NewDItem (Fiche,Liste_item,r,ButtonItem,@'Liste...',0,0,nil); With r do begin top := 148; left := 300; bottom := 163; right := 440 end; NewDItem (Fiche,Prec_item,r,ButtonItem,@'Retour',0,0,nil); With r do begin top := 148; left := 455; bottom := 163; right := 595 end; NewDItem (Fiche,Suiv_item,r,ButtonItem,@'Suite',0,0,nil); With r do begin top := 148; left := 620; bottom := 163; right := 630 end; NewDItem (Fiche,Ok,r,ButtonItem,@'',0,0,nil); If FicheActuelle = 20 then HideDItem (Fiche,Suiv_item) else ShowDItem (Fiche,Suiv_item); If FicheActuelle = 1 then HideDitem (Fiche,Prec_item) else ShowDItem (Fiche,Prec_item) End;)ART.TML.6M:մմ.PC.TRANSPORTERl մ մ $BLUE1ִ ִ NEWCAT~ ִ1 ִ1 (LES.PLUS ִ/ ִ/ ,ART.ANNONCESִִ)CATALOGUE$ִִNOPQRSTUVWXYZ[\]^_`abcdefghijk__________________________________________________________________________ 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 _______________________________________________ (suite) 6 - UTILISATION DES FONTES APPLE Vous n'tes pas sans savoir qu'il existe de trs nombreuses fontes dans le monde de l'Apple IIGS (surtout dans le domaine public); vous intresserait-il de pouvoir les utiliser pour vos affichages textes, plutt que d'employer constamment la dsormais monotone (mais lisible) Shaston 8 ? Rien de plus simple, "Font Manager" est l pour vous servir ! Quelles sont les donnes dont on dispose propos d'une fonte ? Rponse : son numro de famille (une famille est le nom de la fonte, par exemple "Times", qui porte un numro prcis), sa taille, et son style. Donc, pour pouvoir changer la fonte en cours, il faut en installer une autre, en rcuprant son numro de famille, sa taille et enfin son style. Le systme connaissant en permanence toutes les informations concernant les fontes installes sur votre disquette ou disque dur, pas d'opration complexe raliser : il suffit d'utiliser la procdure ci-aprs. On lui passe le nom de la fonte charger (Str255), sa taille et son style (Byte); la procdure se charge d'en rcuprer le numro de famille, et d'envoyer tout a la procdure InstallFont (de l'unit FontMgr). __________________________________________________________________________ Procedure ChangeFonte (Fonte : Str255; taille,style : Byte); Var FonteID : FontID; Begin FonteID.famNum := GetFamNum (Fonte); FonteID.size := taille; FonteID.style := style; InstallFont (FonteID,0); If IsToolError then Exit End; (* de ChangeFonte *) __________________________________________________________________________ Nous ne rentrerons pas dans les dtails de Font Manager qui sortent du cadre de cette initiation. 7 - UTILISATION DE DIALOG MANAGER Tiens, j'entends des fanas de Macintosh et de programmation complexe hurler, du fond de la salle : "Pourquoi Dialog Manager ? Moi, j'utilise toujours Control Manager !!". Eh bien, nous utiliserons quand mme Dialog Manager; explications : aux dbuts du GS (il y a bien longtemps), Apple n'ayant pas inclus la possibilit d'utiliser des Resources ( l'anglaise) comme sur le Mac (c'est maintenant disponible avec le systme 5.0.2, voyez le TML Pascal II), la bote la Pomme s'est tout de mme dit qu'il fallait quelque chose de pratique pour utliser tout ces boutons, ascenseurs... qui font la joie de nos souris. Apple a donc simplifi au maximum l'utilisation de Dialog Manager : moralit, il est plus simple d'utiliser Dialog Manager dans ses programmes (pas de fentre complexe dfinir, ni de routines de gestion des boutons) que Control Manager (plus lourd, mais aussi plus puissant : d'ailleurs, en TML Pascal II, on ne l'utilise plus qu'exclusivement, grce aux Resources). Il y a deux faons d'utiliser Dialog Manager; nous en avons dj abord une dans GSInfos numro 8. Vous vous en rappelez ? non ? Allez, je vais tre gentil, pour dfinir une petite fentre "A propos de..."; a y est ? Bon, continuons. Ce premier type d'utilisation de Dialog Manager nous a amen crer un "ModalDialog"; qu'est-ce qu'un Modal Dialog ? comme vous auriez pu le remarquer en lanant notre premier programme exemple dcrit dans les articles antrieurs, un Modal Dialog est une fentre statique (qui ne peut pas tre dplace) et qui bloque toutes les autres options se situant en dehors de cette fentre (par exemple, des menus, des boutons, etc...). Cette fentre statique comporte, en gnral, un double cadre, et l'ordinateur met un bip (fort dsagrable) si on clique en dehors de celle-ci : l'utilisateur doit donc obligatoirement effectuer une action dans cette fentre avant de pouvoir passer la suite du programme. Nous utiliserons nouveau les "Modal Dialogs" dans notre programme Carnet, pour la procdure "AProposDe". La seconde faon d'utiliser Dialog Manager est de lui demander (poliment) d'ouvrir un "Modeless Dialog"; ce Modeless Dialog ressemble toute autre fentre, comporte un titre, peut tre dplac, etc... Cependant, l'avantage de cette fentre un peu particulire est que l'on peut y installer des boutons, des ascenseurs, etc de la mme faon que dans un "Modal Dialog"; tout y est accessible de la mme faon, ce qui simplifie bien les choses. Donc, normalement, vous devez dj savoir programmer en partie un Modeless Dialog (ai-je vraiment raison ?). Nous utiliserons les "Modeless Dialogs" afin d'afficher la fentre principale (la seule) de notre programme, celle qui contient quelques boutons et zones ditables, dont nous avons dfinis les ID la dernire fois (voyez dans la zone CONSTantes du programme). 7.1 - UTILISATION DES MODAL DIALOGS On va donc dfinir la procdure "AProposDe", dsormais classique (notez la facilit d'emploi de ChangeFonte) : __________________________________________________________________________ PProcedure AProposDe; Var aboutDlog : DialogPtr; { Boite de dialogue } r : Rect; ItemHit : Integer; Begin If CarnetOuvert then CloseWindow (Fiche); (* CarnetOuvert vrai si le Modeless Dialog est ouvert *) SetRect (r,145,30,495,170); aboutDlog := NewModalDialog (r,true,0); SetPort (aboutDlog); SetRect (r,260,115,330,130); NewDItem (aboutDlog,1,r,10,@'Ok',0,0,nil); ChangeFonte ('Venice',14,shadow); MoveTo (120,15); DrawString ('C A R N E T'); ChangeFonte ('Courier',10,italic); MoveTo (20,35); DrawString ('Capacite : 20 fiches'); ChangeFonte ('Shaston',8,bold); MoveTo (20,65); DrawString ('Pour tous renseignements, suggestions :'); ChangeFonte ('Shaston',8,plain); MoveTo (20,73); DrawString ('Marc LERMAN'); MoveTo (20,81); DrawString ('16, rue Lucien Sampaix'); MoveTo (20,89); DrawString ('75010 - Paris'); SetForeColor (15); SetBackColor (0); MoveTo (20,100); DrawString ('Certain portions of this software'); MoveTo (20,110); DrawString ('are copyrighted by TML Systems,Inc.'); SetForeColor (0); SetBackColor (15); ItemHit := ModalDialog (nil); CloseDialog (aboutDlog); If CarnetOuvert then MontreFiche (* on raffiche le Modeless Dialog , voir plus loin *) End; (* de AProposDe *) ____________________________________________________________________________ 7.2 - UTILISATION DES MODELESS DIALOGS Comme nous l'avons vu plus haut, nous utliserons un Modeless Dialog afin d'afficher la fentre des donnes du carnet d'adresses; nous devons alors dfinir plusieurs zones (texte ditable, boutons...) comme pour l'unique bouton de la procdure AProposDe; le nombre de ces zones tant plutt important, nous crerons une procdure spciales pour leur intialisation, "Items". Voyons donc ce qu'est un item de Modeless Dialog (cela est bien sr valable pour un Modal Dialog) : c'est une zone qui remplit une action spcifique; cette zone peut tre active, dsactive, on peut lire son contenu, la dplacer, l'effacer, lui donner un autre nom, lui donner un contenu par dfaut; de plus, au cas o une fentre serait sur la bote de dialogue, les items sont redessins : ils sont donc "rafrachis" en permanence. Alors, si par exemple on veut afficher un texte dans la fentre "sans mode", il faut absolument qu'il soit rafrachis au cas ou une fentre viendrait se superposer au Modeless Dialog; en l'occurence, dans notre programme, on n'a besoin que de deux messages : "Titre" et "Renseignements"; on va en plus tracer un cadre, pour faire joli. Tout ceci est assur par la procdure "ItemUtilisateur" : ____________________________________________________________________________ Procedure ItemUtilisateur (dlog : DialogPtr; item : Integer); Var r : Rect; s : String[20]; Begin GetDItemBox (dlog,item,r); (* on rcupre le rectangle : la zone *) SetSolidPenPat (0); FrameRect (r); Case item of Titre_item : s := ' Titre : '; Rens_item : s := ' Renseignements : '; end; MoveTo (r.left + 10,r.top + 3); DrawString (s) End; (* de ItemUtilisateur *) ____________________________________________________________________________ Dfinissons maintenant les divers boutons que l'on retrouvera dans la fentre du carnet, par la procdure "Items" (cela, au moyen de NewDItem, vu prcdemment) : ____________________________________________________________________________ Procedure Items; Var r : Rect; Begin With r do begin top := 15; left := 36; bottom := 25; right := 105 end; NewDItem (Fiche,M_item,r,RadioItem,@'M.',255,0,nil); With r do begin top := 15; left := 136; bottom := 25; right := 200 end; NewDItem (Fiche,Mme_item,r,RadioItem,@'Mme',0,0,nil); With r do begin top := 15; left := 236; bottom := 25; right := 300 end; NewDItem (Fiche,Melle_item,r,RadioItem,@'Melle',0,0,nil); With r do begin top := 15; left := 336; bottom := 25; right := 400 end; NewDItem (Fiche,Ste_item,r,RadioItem,@'Ste',0,0,nil); SetDItemValue (0,Fiche,M_item); SetDItemValue (0,Fiche,Mme_item); SetDItemValue (0,Fiche,Melle_item); SetDItemValue (0,Fiche,Ste_item); SetDItemValue (1,Fiche,Carnet[FicheActuelle].titre); With r do begin top := 5; left := 15; bottom := 30; right := 400 end; NewDItem (Fiche,Titre_item,r,UserItem,@ItemUtilisateur,0,0,nil); With r do begin top := 126; left := 120; bottom := 139; right := 590 end; NewDItem (Fiche,Div_item,r,EditLineItem,@Carnet[FicheActuelle].divers,55,0,nil); With r do begin top := 110; left := 120; bottom := 123; right := 300 end; NewDItem (Fiche,Tel_item,r,EditLineItem,@Carnet[FicheActuelle].tel,20,0,nil); With r do begin top := 94; left := 120; bottom := 107; right := 590 end; NewDItem (Fiche,Ville_item,r,EditLineItem,@Carnet[FicheActuelle].ville,55,0,nil); With r do begin top := 78; left := 120; bottom := 91; right := 180 end; NewDItem (Fiche,Code_item,r,EditLineItem,@Carnet[FicheActuelle].code,5,0,nil); With r do begin top := 62; left := 120; bottom := 75; right := 590 end; NewDItem (Fiche,Adr_item,r,EditLineItem,@Carnet[FicheActuelle].adresse,55,0,nil); With r do begin top := 46; left := 120; bottom := 59; right := 590 end; NewDItem (Fiche,Nom_item,r,EditLineItem,@Carnet[FicheActuelle].nom,55,0,nil); SelectIText (Fiche,Nom_item,0,Length(Carnet[FicheActuelle].nom)); With r do begin top := 35; left := 15; bottom := 145; right := 595 end; NewDItem (Fiche,Rens_item,r,UserItem,@ItemUtilisateur,0,0,nil); With r do begin top := 48; left := 20; bottom := 59; right := 110 end; NewDItem (Fiche,NomStr_item,r,StatTextItem,@'Nom :',0,0,nil); With r do begin top := 64; left := 20; bottom := 75; right := 110 end; NewDItem (Fiche,AdrStr_item,r,StatTextItem,@'Adresse :',0,0,nil); With r do begin top := 80; left := 20; bottom := 91; right := 110 end; NewDItem (Fiche,CodeStr_item,r,StatTextItem,@'Code postal :',0,0,nil); With r do begin top := 96; left := 20; bottom := 107; right := 110 end; NewDItem (Fiche,VilleStr_item,r,StatTextItem,@'Ville :',0,0,nil); With r do begin top := 112; left := 20; bottom := 123; right := 110 end; NewDItem (Fiche,TelStr_item,r,StatTextItem,@'Telephone :',0,0,nil); With r do begin top := 128; left := 20; bottom := 139; right := 110 end; NewDItem (Fiche,DivStr_item,r,StatTextItem,@'Divers :',0,0,nil); With r do begin top := 148; left := 15; bottom := 163; right := 155 end; NewDItem (Fiche,Liste_item,r,ButtonItem,@'Liste...',0,0,nil); With r do begin top := 148; left := 300; bottom := 163; right := 440 end; NewDItem (Fiche,Prec_item,r,ButtonItem,@'Retour',0,0,nil); With r do begin top := 148; left := 455; bottom := 163; right := 595 end; NewDItem (Fiche,Suiv_item,r,ButtonItem,@'Suite',0,0,nil); With r do begin top := 148; left := 620; bottom := 163; right := 630 end; NewDItem (Fiche,Ok,r,ButtonItem,@'',0,0,nil); If FicheActuelle = 20 then HideDItem (Fiche,Suiv_item) else ShowDItem (Fiche,Suiv_item); If FicheActuelle = 1 then HideDitem (Fiche,Prec_item) else ShowDItem (Fiche,Prec_item) End; (* de Items *) ____________________________________________________________________________ Prvoyons une procdure pour initialiser la fiche (ou pour passer la fiche suivante ou prcdente) : ____________________________________________________________________________ Procedure ChangeFiche; Var r : Rect; Begin SetDItemValue (0,Fiche,M_item); SetDItemValue (0,Fiche,Mme_item); SetDItemValue (0,Fiche,Melle_item); SetDItemValue (0,Fiche,Ste_item); SetDItemValue (1,Fiche,Carnet[FicheActuelle].titre); SetIText (Fiche,Nom_item,Carnet[FicheActuelle].nom); SetIText (Fiche,Adr_item,Carnet[FicheActuelle].adresse); SetIText (Fiche,Code_item,Carnet[FicheActuelle].code); SetIText (Fiche,Ville_item,Carnet[FicheActuelle].ville); SetIText (Fiche,Tel_item,Carnet[FicheActuelle].tel); SetIText (Fiche,Div_item,Carnet[FicheActuelle].divers); SelectIText (Fiche,Nom_item,0,Length(Carnet[FicheActuelle].nom)); If FicheActuelle = 20 then HideDItem (Fiche,Suiv_item) else ShowDItem (Fiche,Suiv_item); If FicheActuelle = 1 then HideDitem (Fiche,Prec_item) else ShowDItem (Fiche,Prec_item); SetWTitle (Concat ('Fiche n',chr(161),IntToString(FicheActuelle)),Fiche) End; (* de ChangeFiche *) ____________________________________________________________________________ Voil pour cette fois-ci ! La prochaine fois, nous afficherons les items dans notre Modeless Dialog (que nous dfinirons) et nous verrons les procdures de chargement et de sauvegarde d'un carnet. Vous trouverez la rcapitulation de notre partie de programme en annexe, dans le fichier "Art.TML.6.ex". A bientt ! ______________________ M. Marc LERMAN 16, rue Lucien Sampaix 75010 - Paris ______________________ P.S. : pas d'article spcifique au TML Pascal II dans ce numro, notamment cause de la PC-Transporter (voir l'article correspondant), mais vous en aurez deux fois plus dans GSInfos 11, alors patience, et mes excuses...mnopqrstuvwxyz{|}___________________________________________ PC-TRANSPORTER : Laissez-vous transporter ! ___________________________________________ INTRODUCTION : LA VOIX DE LA SAGESSE J'ai un Apple IIGS; seulement, mon travail, c'est un PC qui trne sur le bureau. Alors, pour terminer chez soi, pas trs pratique. De plus, j'aime bien voir Flight Simulator tourner sur le PC d'un ami, mais deux ordinateurs sur une petite table exige, c'est pas la joie. Quel compatible acheter ? Pour quel prix ? Faut-il revendre le GS, et acheter une configuration complte made in Tawan ? - Non, dit tranquillement Matre Applied Engineering; l'unique solution, mon fils, c'est de venir la boutique Brjoux Boulogne (plus prs de chez toi, Parisien), et de gnreusement t'offrir la carte PC-Transporter. - C'est tout ? demandais-je sottement. - Vois par toi-mme, mon fils, me dit le sage. ACTE I : LA RUEE VERS BOULOGNE Je cours donc Boulogne pour voir ce que cette carte a dans le ventre. Le vendeur me propose aimablement une dmonstration, qui me satisfait; je sors ma carte de crdit, et emporte avec moi la carte en question. De retour la maison, j'ouvre fbrilement l'ordinateur, et commence l'installation de la PC-Transporter; celle-ci n'est pas si aussi aise que je le pensais : 1 : il faut trouver un slot pour la carte, sachant que le lecteur Apple sera connect dessus. Cette carte peut se mettre dans n'importe quel port. Alors, o ? Voyons ma configuration : Slot 1 : l'ImageWriter II Slot 2 : le minitel Slot 3 : la TransWarp IIGS Slot 4 : la souris Slot 5 : le lecteur Apple 3,5" Slot 6 : mon vieux DuoDisk 5,25" Slot 7 : le disque dur Vulcan Je dcide d'insrer la carte dans le slot 2, le slot 5 n'tant pas pratique, car m'empchant l'utilisation du DuoDisk (utile, si !). 2 : une deuxime carte, beaucoup plus petite, nomme ColorSwitch, doit tre connecte le long de l'alimentation (ou prs du Vulcan); alors l, prparez une carte de visite en carton, pour empcher celle-ci d'tre d'office relie la masse du IIGS par le botier du Vulcan ! 3 : on relie la ColorSwitch la PC Transporter, le lecteur Apple 3,5" sur le connecteur de cette dernire, et enfin le connecteur rserv au moniteur sur la ColorSwitch, qui en offre un nouveau, sur lequel le moniteur devra tre branch (vous avez tout suivi ? relisez si ncessaire, puis passez la suite. Nota : c'est bien mieux expliqu dans la doc fournie). 4 : on referme l'ordinateur ACTE II : LE MOMENT DE GRACE Allumage : comme d'habitude, sauf que mon lecteur 3,5" n'est plus reconnu sous GS/OS; pas de problme : on met le Slot 2 sur "Your Card" et on modifie le fichier ProDOS avec PC.Install (fourni). Ca marche. Maintenant, tout se passe presque de faon transparente; presque ? oui, car le lecteur 3,5" ct PC roule beaucoup moins vite sous GS/OS qu'avant. Pourquoi ? parce que le driver AppleDisk 3,5" prsent dans le systme 5.02 ne fonctionne que pour le SmartPort intgr du GS; moralit, il faut se contenter de lire les disquettes comme si ce superbe driver n'existait pas. Esprons qu'Applied Engineering en crira bientt un nouveau, spcifique la PC Transporter. Un autre petit dtail qui tonne la premire fois : la LED du lecteur 3,5", toujours connect la PC Transporter, reste allume en permanence sous le Finder uniquement (sans doute parce que ce dernier teste de faon continue si une disquette est prsente). Une fois que le ou les lecteurs branchs sur la carte sont configurs pour GS/OS, il faut les configurer pour MS/DOS : aprs lancement de AEPC.System (qui permet d'activer la carte), on se retrouve en mode PC; on appuie 2 fois sur Caps Lock tout en maintenant la touche Shift enfonce pour passer dans le Control Panel de la PC Transporter. Dans ce tableau de bord, plusieurs options sont disponibles : voir les quivalences entre les claviers GS et PC (hlas, pour les claviers amricains), configurer la carte, charger des drivers, revenir au mode PC, retourner sous ProDOS. On indique donc les lecteurs connects avant de sauvegarder la configuration. Si on dispose d'un disque dur, le logiciel autorise la cration d'un fichier (d'une taille minimale de 140 k) qui sera considr par Ms/Dos comme un disque dur PC (personnellement, sur mon Vulcan 20Mo, j'ai cr un fichier pour Ms/Dos de 7 Mo, ce qui laisse 13 Mo pour Gs/Os). Les drivers fournis avec la carte permettent l'utilisation de plusieurs cartes Apple en mode PC : souris, imprimante, interface srie, parallle... Donc, tous les priphriques Apple dont vous disposez sont considrs par Ms/Dos comme des priphriques PC. Une petite rserve : les lecteurs 5,25 Apple; ne fonctionnant pas selon le mme mode d'encodage que leurs homologues PC, ils ne peuvent relire des disquettes Ms/DOS 5,25". On peut cependant les utiliser pour stocker et lire des donnes comme pour les autres lecteurs, seulement les disquettes formates dans ces lecteurs Apple ne fonctionneront pas sur un PC "de race". ACTE III : LA NOURRITURE DES TOASTERS Quelques logiciels sont fournis en standard : - un petit programme, PC.Launcher, qui permet de lancer une application Ms/Dos partir du Finder - les divers programmes d'installation - Transfer, un programme PC qui fait le transfert d'un fichier Ms/DOS en ProDOS et vice-versa (trs bien conu, sauf qu'il ne gre pas les accents de chez nous) - divers drivers (dont un d'mulation de l'imprimante graphique IBM) En option, et c'est bien regrettable, deux disquettes sur lesquelles on ne peut se permettre de faire l'impasse : l'IBM PC/Dos 3.30 (n'essayez pas avec un Dos d'un quelconque compatible : j'ai essay, et cela ne m'a attir que des ennuis) et l'mulateur Brjoux de caractres accentus pour ImageWriter (indispensable pour nous franais). ACTE IV : LE VENTRE DE LA BETE Parlons un peu technique : - La carte a t ralise avec beaucoup de soin; des composants trs haut niveau d'intgration ont t utiliss (dont les toutes rcentes mini-rsistances). Les dimensions de la carte sont semblables celles de la Transwarp. - Le microprocesseur utilis pour l'mulation est un Nec V30, cadenc 7,12 Mhz qui lui-mme mule le 8086. Un support vide est prsent sur la carte pour un coprocesseur mathmatique. - La carte ColorSwitch nous donne le mode CGA comme mode graphique (640* 200 en 2 couleurs, 320*200 en 4 couleurs). - La mmoire utilisable en mode PC est de 640k; la mmoire Apple disponible ne peut tre utilise qu'en disque virtuel (dont la taille se rgle au tableau de bord). En mode Apple, on dispose d'un disque virtuel /AEPCRAM de 752k (provenant de la PC Transporter); cette mmoire supplmentaire ne peut tre utilise comme mmoire additionnelle Apple. ACTE V : LE DRESSAGE DE LA BETE J'ai install Turbo Pascal 5.5, Turbo C 2.0, Sprint 1.5 et Flight Simulator 4 sur mon disque dur; l'affichage est assez rapide, le graphisme passe trs bien, le clavier est plutt bien mul ( part deux bizarreries : les deux touches droite et gauche de la barre d'espace sont inverses en mode PC, et la touche = se retrouve sur la touche /, la premire servant de Scroll Lock). Les touches de fonction sont accessibles par la combinaison Option-numro, et Alt correspond la touche Pomme-ouverte (commande). La souris fonctionne parfaitement; si le logiciel utilis a besoin d'une souris 2 ou 3 boutons, on utilise Shift+bouton souris pour le bouton 2, et Control+bouton souris pour le bouton 3. Le lecteur Apple formate les disquettes comme un PC-XT, en 720k; il est brillamment gr en mode PC. CONCLUSION : LE PARADIS En somme, tout a t prvu : le GS fonctionne comme un vrai PC; pas de limitation, la vitesse est trs raisonnable, les logiciels tournent sans problme. Bref, pour 4900 F (-10% pour les membres du Club), c'est un trs bon achat que je ne regrette absolument pas; je dirais mme plus, je vous le conseille. Cont par : ______________________ Marc LERMAN 16, rue Lucien Sampaix 75010 - Paris ______________________NEWCAT Un utilitaire bien pratique crit par B.Tomeno en Basic Applesoft qui permet d'imprimer le catalogue d'un disque sans trop consommer de papier. On le trouve dans le dossier PROGRAMMES. 2ART.ANNONCES. Daniel Foucault: 3,rue James Linard 78220 VIROFLAY Tlphone: bureau 39 51 03 57 domicile 30 24 64 62 --------------------------------------------------- Vends IBM PS2 modle 8530 021: mmoire 640K, D.Dur 20Mo, cran couleur IBM, Clavier azerty 102 touches IBM, souris IBM, joystick avec carte. Imprimante Epson 1050 LQ 132 colonnes 24 aiguilles. Traitement de texte Sprint de Borland Achet neuf en novembre 1988 (Visible Viroflay). Prix de vente 19 000 F Vends Apple IIGS 1.256K, cran coCATALOGUE. A Lire.... ********** Ceci est la suite du catalogue du domaine public pour les autres parties, voir GS Infos numros7,8 et 9. Attention , ne demandez pas de domaines publics entre le 15 juillet et le 15 aot afin que vos envois ne s'garent pas. Bonnes vacances tous! GS.CLUB 97 shareware de F.Uhrich a t mise jour et contient Transprog Version Anglaise. GS.CLUB 107 Soundsmith nouvelle version 0.94 GSCLUB.124 Images enle-mme. dant le "thermomtre" , sur telle ou telle touche ( dfinie par vous ) , vous vous retrouverez dans le programme de votre choix ( P16 ou P8 ) sans passer par le Finder . Un NDA additionnel vous permet , comme dans Prosel , de dfinir une liste d'applications "lanables" par un simple click partir de n'importe quel programme , de dcider o vous voulez aller lors du "QUIT" de cette application ( autre programme , Finder , etc ... ) , de garder ventuellement en mmoire l'application que vous venez de quitter pour pouvoir y revenir plus vite . Tout pour 90 frcs , avec fichier mode d'emploi fourni sur la disquette , il ne faut pas hsiter ( ce shareware est dans GS Infos 10, sous-dossier TRANSPROG dans le dossier PROGRAMMES ) . Une seule critique , mineure et qui sera corrige sur la prochaine version : si vous bootez avec une image de Startupscreen en ayant choisi d'aller directement dans une application en mode Texte , vous restez en cran graphique et vous avez l'impression que le GS est "plant" . Ce n'est qu'une impression : tapez une touche ou , au pire , faites un Control-Reset ( pour Appleworks par exemple ) et tout s'arrange . B.Tomeno TRANSPROG se trouve dans le dossier PROGRAMMES. q / ! , % ) - u 1 5 X9 = A E I M o Q  U W Y G ] 9 a D e  i m q u y }         8 ~P      ;  S !  \  k  q  )  >  P $ c E w c {        $    3 K c {  !#% '$)(+,-0/4183<5@7D9H;L=P?TAXC\E`GdIhKlMpOtQxS|U_ j '?q Wo%!$4NTgjw'*-5KNQh~ / !$*BFJNRVZ^bfjnrvz $)ORXdins|  UZrv} !$(JOKNT- 5QJck04[^)-38COMPILE -L HS.XCMD.CC KEEP=HS.XCMD LINK +L HS.XCMD XCMDLIB KEEP=HS.XCMD FILETYPE HS.XCMD $BC ORCA.PASCALv' ''XCMDLIBw y4 y4 +HS.XCMD.PASn3y4 HS.XCMD.ROOTy y )HS.XCMD.A&Jy y 'HS.XCMD $y y BUILD.PASy ,>LIBRARY  XCMDLIB.AX   & 3$ E V g< x^ XXXXXXXXX$ $ $ X XX!X-X7XAXGXPXXX_XkXuXXX ERROROUTPUT HSFINDTEXTHSLAUNCHSCRIPT HSMOVETOCARDHSMOVETOFIRSTCARDHSMOVETOLASTCARDHSMOVETONEXTCARDHSMOVETOPREVCARDHSPARM HSREDRAWCARDINPUTIOFLAGOUTPUT ~COMMANDLINE~DPTR0 ~EOFINPUT ~EOLNINPUT~ERROROUTPUTCHAR~HSCALL ~HSMOVCAL ~HSMOVCLL ~HSMOVRET ~INPUTCHAR ~LINENUMBER ~MINSTACK ~OUTPUTCHAR ~PROCLIST ~PROCNAME~QUIT~REALVAL~RETURN~STACK ~STRINGLIST ~THISFILE ~TOOLERROR~USER_ID ~_BWCOMMON ~_BWSTARTUP,B ~_BWSTARTUPK ~COMMANDLINE ~COMMANDLINE ~USER_ID;i~STACK~RETURN~RETURN h~DPTR0HH ~COMMANDLINE ~COMMANDLINE~HSCALL~HSCALLhh H~USER_IDH ";[ ~MINSTACKc:zZګH "h ~MINSTACKHi ~MINSTACK "  ~INPUTCHAR ~EOLNINPUT ~EOFINPUT ~LINENUMBER ~PROCNAME ~PROCLIST ~PROCLIST ~STRINGLIST ~STRINGLIST ~THISFILE ~THISFILEk~QUIT`y,A ~_BWCOMMON ~COMMANDLINEN ~EOFINPUTN ~EOLNINPUTN ERROROUTPUTN ~ERROROUTPUTCHARNINPUTN ~INPUTCHARN ~MINSTACKNOUTPUTN ~OUTPUTCHARN~REALVALN ~THISFILEN ~TOOLERRORN~USER_IDNIOFLAGN ~STRINGLISTN ~PROCLISTN ~LINENUMBERN ~PROCNAMEN ~QUITNpH+nrrH"~MM_INIT, H"hk~STACKN~DPTR0N~RETURNN~HSCALLNl,= HSPARM ~COMMANDLINE ~COMMANDLINEk ,H HSMOVETOFIRSTCARD ~HSMOVCALN ~HSMOVCLLN~DPTR0H+Kb ~HSCALL H ~HSCALL:Hk ~HSMOVRETN+k[,G HSMOVETOLASTCARD\ ~HSMOVCAL[,G HSMOVETOPREVCARD\ ~HSMOVCAL[,G HSMOVETONEXTCARD\ ~HSMOVCALl,C HSMOVETOCARD Kb H\ ~HSMOVCLL hkW,C HSREDRAWCARD\ ~HSMOVCALN,E HSLAUNCHSCRIPTkt%,A HSFINDTEXTKb ZH\ ~HSMOVCLLhhhk{ ----------------HyperStudio XCMD Exerciser--------------------------- HS.XCMD in ORCA/Pascal Original from Merlin by Eric C. Mueller Pascal version inspired by David Sparks Coded by Ken Kashmarek Version 3.0 01-DEC-89 --------------------------------------------------------------------- } {$stacksize 2048} {$optimize -1} PROGRAM HS_XCMD; USES Common, QuickDrawII, IntegerMath, WindowMgr, DialogMgr, ControlMgr; CONST RadFam = 3; RadItem= $0C; RL = 282; RR = 405; {RL + 123} CL = 186; CX = 191; {CL + 5} Offset = 32; DisabledText = $800F; { itemDisable + statText ($8000+$000F) } TYPE HSParamPtr = ^HSParams; HSParams = record ButtonID: integer; CardID: integer; ScriptHand: handle; ScriptLength: longint; TextPassedPtr: pstringptr; HSAddress: ptr; END; schstr = string[16]; VAR param_list: HSParamPtr; XCMD: dialogTemplate; XCMDialog: grafPortPtr; RadResult: integer; HS: boolean; hit,cardnum: integer; FindPref: integer; FndValue,FndResult: integer; FT: dialogTemplate; FTdialog: grafPortPtr; canceled,action: boolean; InfoString: string[111]; Carderr: string[60]; ITEM19,ITEM32, ITEM2,ITEM22,ITEM3,ITEM23,ITEM4,ITEM24,ITEM5,ITEM25, ITEM6,ITEM26,ITEM7,ITEM27,ITEM8,ITEM28,ITEM9,ITEM29, ITEM10,ITEM30,ITEM11,ITEM12,ITEM13,ITEM14,ITEM15,ITEM16,ITEM17,ITEM18, ITEM01,ITEM20,ITEM21,ITEM31,ITEM33: itemTemplate; ITEM22Txt,ITEM23Txt,ITEM28Txt: string[4]; ITEM24Txt,ITEM25Txt,ITEM26Txt,ITEM27Txt,ITEM29Txt: string[9]; ITEM31Txt: string[5]; ITEM33Txt: schstr; FT1,FT2,FT3,FT4,FT5,FT6,FT9: itemTemplate; Function HSParm: HSParamPtr; extern; Function HSMoveToFirstCard: boolean; extern; Function HSMoveToLastCard: boolean; extern; Function HSMoveToPrevCard: boolean; extern; Function HSMoveToNextCard: boolean; extern; Function HSMoveToCard(IDNum:integer): boolean; extern; Function HSReDrawCard: boolean; extern; Function HSFindText(sch:schstr;flag:integer): boolean; extern; Procedure DITEM(var template:itemTemplate; id:integer;y1,x1,y2,x2:integer;dtyp:integer; desc:ptr;value:integer;flag:integer;color:colorTblPtr); BEGIN WITH template DO BEGIN itemID := id; {SetRect(itemRect,x1,y1,x2,y2); } itemRect.v1 := y1; {Rect in memory is: y1,x1,y2,x2 } itemRect.h1 := x1; {naming order is: top,left,bottom,right } itemRect.v2 := y2; {QDII calls use Mac order: x1,y1,x2,y2 } itemRect.h2 := x2; {Mac naming order is: left,top,right,bottom } itemType := dtyp; itemDescr := desc; itemValue := value; itemFlag := flag; itemColor := color; END; END; PROCEDURE InitDialog; BEGIN XCMD.dtBoundsRect.v1 := 18+Offset; XCMD.dtBoundsRect.h1 := 0+24; XCMD.dtBoundsRect.v2 := 141+Offset; XCMD.dtBoundsRect.h2 := 592+24; XCMD.dtVisible := false; XCMD.dtRefCon := 0; XCMD.dtItemList[1] := @ITEM21; XCMD.dtItemList[2] := @ITEM20; XCMD.dtItemList[3] := @ITEM01; XCMD.dtItemList[4] := @ITEM18; XCMD.dtItemList[5] := @ITEM33; XCMD.dtItemList[6] := @ITEM17; XCMD.dtItemList[7] := @ITEM16; XCMD.dtItemList[8] := @ITEM15; XCMD.dtItemList[9] := @ITEM31; XCMD.dtItemList[10] := @ITEM14; XCMD.dtItemList[11] := @ITEM13; XCMD.dtItemList[12] := @ITEM12; XCMD.dtItemList[13] := @ITEM11; XCMD.dtItemList[14] := @ITEM30; XCMD.dtItemList[15] := @ITEM10; XCMD.dtItemList[16] := @ITEM29; XCMD.dtItemList[17] := @ITEM9; XCMD.dtItemList[18] := @ITEM28; XCMD.dtItemList[19] := @ITEM8; XCMD.dtItemList[20] := @ITEM27; XCMD.dtItemList[21] := @ITEM7; XCMD.dtItemList[22] := @ITEM26; XCMD.dtItemList[23] := @ITEM6; XCMD.dtItemList[24] := @ITEM25; XCMD.dtItemList[25] := @ITEM5; XCMD.dtItemList[26] := @ITEM24; XCMD.dtItemList[27] := @ITEM4; XCMD.dtItemList[28] := @ITEM23; XCMD.dtItemList[29] := @ITEM3; XCMD.dtItemList[30] := @ITEM22; XCMD.dtItemList[31] := @ITEM2; XCMD.dtItemList[32] := @ITEM32; XCMD.dtItemList[33] := @ITEM19; XCMD.dtItemList[34] := nil; DITEM(ITEM19,19,2,200,11,411,DisabledText, @'HyperStudio XCMD Exerciser', 0,0,nil); DITEM(ITEM32,32,13,52,22,590,DisabledText, @'-------Parameter List------- ---Function Calls--- --Action--', 0,0,nil); DITEM(ITEM2 , 2, 24, 52, 33, CL,DisabledText, @'Original Button ID:', 0,0,nil); DITEM(ITEM22,22, 24, CX, 33,RL-5,DisabledText,@ITEM22Txt,0,0,nil); DITEM(ITEM3 , 3, 35, 73, 44, CL,DisabledText, @'Current card ID:', 0,0,nil); DITEM(ITEM23,23, 35, CX, 44,RL-5,DisabledText,@ITEM23Txt,0,0,nil); DITEM(ITEM4 , 4, 46, 65, 55, CL,DisabledText, @'Handle to script:', 0,0,nil); DITEM(ITEM24,24, 46, CX, 55,RL-5,DisabledText,@ITEM24Txt,0,0,nil); DITEM(ITEM5 , 5, 57, 60, 66, CL,DisabledText, @'Pointer to script:', 0,0,nil); DITEM(ITEM25,25, 57, CX, 66,RL-5,DisabledText,@ITEM25Txt,0,0,nil); DITEM(ITEM6 , 6, 68, 67, 77, CL,DisabledText, @'Length of script:', 0,0,nil); DITEM(ITEM26,26, 68, CX, 77,RL-5,DisabledText,@ITEM26Txt,0,0,nil); DITEM(ITEM7 , 7, 79, 27, 88, CL,DisabledText, @'Function call address:', 0,0,nil); DITEM(ITEM27,27, 79, CX, 88,RL-5,DisabledText,@ITEM27Txt,0,0,nil); DITEM(ITEM8 , 8, 90, 69, 99, CL,DisabledText, @'Original card ID:', 0,0,nil); DITEM(ITEM28,28, 90, CX, 99,RL-5,DisabledText,@ITEM28Txt,0,0,nil); DITEM(ITEM9 , 9,101, 11,110, CL,DisabledText, @'Pointer to cmd line text:', 0,0,nil); DITEM(ITEM29,29,101, CX,110,RL-5,DisabledText,@ITEM29Txt,0,0,nil); DITEM(ITEM10,10,112, 55,121, CL,DisabledText, @'Command line text:', 0,0,nil); DITEM(ITEM30,30,112, CX,121, 460,DisabledText,nil ,0,0,nil); DITEM(ITEM11,11, 24, RL, 33, RR,RadItem,@'First card', 0,RadFam,nil); DITEM(ITEM12,12, 35, RL, 44, RR,RadItem,@'Last card', 0,RadFam,nil); DITEM(ITEM13,13, 46, RL, 55, RR,RadItem,@'Previous card', 0,RadFam,nil); DITEM(ITEM14,14, 57, RL, 66, RR,RadItem,@'Next card', 0,RadFam,nil); DITEM(ITEM15,15, 68, RL, 77, RR,RadItem,@'Move to card:', 0,RadFam,nil); DITEM(ITEM31,31,66,RR+1,79,RR+49,EditLine,@ITEM31Txt, 4,0, nil); DITEM(ITEM16,16, 79, RL, 88, RR,RadItem,@'Redraw card', 0,RadFam,nil); DITEM(ITEM17,17, 90, RL, 99, RR,RadItem,@'Launch stack', 0,RadFam,nil); DITEM(ITEM18,18,101, RL,110, RR,RadItem,@'Find text:', 0,RadFam,nil); DITEM(ITEM33,33,99,RR+1,112,RR+145,EditLine,@ITEM33Txt, 16,0, nil); DITEM(ITEM01,34,28,479,42,545,ButtonItem,@'Do It', 0,0,nil); DITEM(ITEM20,20,53,479,67,545,ButtonItem,@'Cancel', 0,0,nil); DITEM(ITEM21,21,78,479,92,545,ButtonItem,@'Info...', 0,0,nil); ITEM22Txt := ' '; ITEM23Txt := ' '; ITEM24Txt := '$ '; ITEM25Txt := '$ '; ITEM26Txt := '$ '; ITEM27Txt := '$ '; ITEM28Txt := ' '; ITEM29Txt := '$ '; ITEM31Txt := '0000'; ITEM31Txt[5] := chr(0); ITEM33Txt := ''; FT.dtBoundsRect.v1 := 36+Offset; FT.dtBoundsRect.h1 := 200; FT.dtBoundsRect.v2 := 96+Offset; FT.dtBoundsRect.h2 := 440; FT.dtVisible := false; FT.dtRefCon := 0; FT.dtItemList[1] := @FT1; FT.dtItemList[2] := @FT2; FT.dtItemList[3] := @FT3; FT.dtItemList[4] := @FT4; FT.dtItemList[5] := @FT5; FT.dtItemList[6] := @FT6; FT.dtItemList[7] := @FT9; FT.dtItemList[8] := nil; DITEM(FT1,1,20,180, 0, 0,ButtonItem, @'OK', 0,1,nil); DITEM(FT2,2,47, 8,56, 87,DisabledText, @'Find Text:', 0,0,nil); DITEM(FT3,3,47-2,88,56+2,88+144,EditLine,@ITEM33Txt, 16,0,nil); DITEM(FT4,4,35, 8,44,168, CheckItem, @'Case sensitive', 0,0,nil); DITEM(FT5,5,24, 8,33,168, CheckItem, @'Read only fields', 0,0,nil); DITEM(FT6,6,13, 8,22,168, CheckItem, @'Editable fields', 0,0,nil); DITEM(FT9,9,2,8,11,239,DisabledText,@'Find Text Search Parameters',0,0,nil); Int2Dec (param_list^.CardID,@ITEM28Txt[1],4,false); insert('33/HyperStudio XCMD Exerciser ',InfoString,1); insert('Written by Eric C. Mueller ', InfoString,33); insert('Updated by Ken Kashmarek/', InfoString,61); insert(' ^Version 3.0, 01-DEC-89 ', InfoString,86); InfoString[111] := chr(0); Carderr := '32/Card ID number invalid (error $xxxx)./ Cancel '; Carderr[59] := chr(0); RadResult := 11; END; PROCEDURE GetTheData; BEGIN Int2Dec (param_list^.ButtonID, @ITEM22Txt[1],4,false); Int2Dec (param_list^.CardID, @ITEM23Txt[1],4,false); Long2Hex(param_list^.ScriptLength, @ITEM26Txt[2],8); Long2Hex(longint(param_list^.ScriptHand), @ITEM24Txt[2],6); Long2Hex(ord4(param_list), @ITEM25Txt[2],6); Long2Hex(longint(param_list^.HSAddress), @ITEM27Txt[2],6); ITEM30.itemDescr := pointer(param_list^.TextPassedPtr); Long2Hex(longint(ITEM30.itemDescr), @ITEM29Txt[2],6); END; PROCEDURE FindTxtD; VAR done: boolean; hit : integer; BEGIN FTdialog := GetNewModalDialog(FT); ShowWindow(FTdialog); done := false; REPEAT hit := ModalDialog(nil); IF hit=1 THEN done := true ELSE IF ((hit>=4) and (hit<=6)) THEN BEGIN FndResult := hit; FndValue := GetDItemValue(FTdialog,FndResult) ! $0001; SetDItemValue(FndValue,FTdialog,FndResult); IF FndResult=4 THEN BEGIN FT4.itemValue := FndValue; FindPref := FindPref ! $0001; END ELSE IF FndResult=5 THEN BEGIN FT5.itemValue := FndValue; FindPref := FindPref ! $0002; END ELSE IF FndResult=6 THEN BEGIN FT6.itemValue := FndValue; FindPref := FindPref ! $0004; END; END; UNTIL done; GetIText(FTdialog,3,@ITEM33Txt); CloseDialog(FTdialog); SetIText(XCMDialog,33,@ITEM33Txt); END; BEGIN InitCursor; param_list := HSParm; IF RadResult = 0 THEN InitDialog; canceled := false; REPEAT GetTheData; XCMDialog := GetNewModalDialog(XCMD); SetDitemValue(1,XCMDialog,RadResult); DisableDitem(XCMDialog,17); HiliteControl(255,GetControlDItem(XCMDialog,17)); ShowWindow(XCMDialog); action := false; REPEAT hit := ModalDialog(nil); IF ((hit>=11) and (hit<=18)) THEN BEGIN RadResult := hit; SetDItemValue(1,XCMDialog,RadResult); IF RadResult = 18 THEN FindTxtD; END ELSE IF hit=21 THEN cardnum := AlertWindow(0,nil,@InfoString[1]) ELSE IF ((hit=20) or (hit=34)) THEN action := true; UNTIL action; IF hit=20 THEN canceled := true ELSE IF hit=34 THEN BEGIN GetIText(XCMDialog,31,@ITEM31Txt); GetIText(XCMDialog,33,@ITEM33Txt); CloseDialog(XCMDialog); IF RadResult=11 THEN HS := HSMoveToFirstCard ELSE IF RadResult=12 THEN HS := HSMoveToLastCard ELSE IF RadResult=13 THEN HS := HSMoveToPrevCard ELSE IF RadResult=14 THEN HS := HSMoveToNextCard ELSE IF RadResult=15 THEN BEGIN ITEM31Txt[length(ITEM31Txt)+1] := chr(0); cardnum := Dec2Int(@ITEM31Txt[1],length(ITEM31Txt),0); IF ((ToolError = 0) and (cardnum > 0)) THEN HS := HSMoveToCard(cardnum) ELSE BEGIN Int2Hex(ToolError,@Carderr[44],4); cardnum := AlertWindow(0,nil,@Carderr[1]); ITEM31Txt := '0000'; END; END ELSE IF RadResult=16 THEN HS := HSRedrawCard ELSE IF RadResult=18 THEN HS := HSFindText(ITEM33Txt,FindPref); END; UNTIL canceled; CloseDialog(XCMDialog); END. @,= ~_ROOT" ~_BWSTARTUP~GLOBALS" ~_PASMAIN\~QUITʚ;@B'd Q,A ~WRITEREAL~REALCOM!{;8[:ڋK  H" ~FORMATREAL PASSTRING ) PASSTRING"~_COUT  {i+k:,C ~WRITEREALEO~REALCOM{;8[:ڋK H" ~FORMATREAL PAp,< DITEMp;8 [31/-+)' % !ȥ#ȥ32+;i2k,C ~WRITELINEEO "k,A ~WRITELONG6{;8[:ڋKd!8!!-!2 (Ȁ( 0;(60!08! !y,A INITDIALOG ;8 [2XCMDXCMDXCMDhXCMDXCMDXCMD XCMD ITEM21ITEM21XCMDXCMDhhhhITEM20ITEM20XCMDXCMD hhhhITEM01ITEM01XCMDXCMD hhhhITEM18ITEM18XCMDXCMD hhhhITEM33ITEM33XCMDXCMD hhhhITEM17ITEM17XCMD"XCMD" hhhhITEM16ITEM16XCMD&XCMD& hhhhITEM15ITEM15XCMD*XCMD* hhhhITEM31ITEM31XCMD.XCMD. hhhhITEM14ITEM14XCMD2XCMD2 hhhhITEM13ITEM13XCMD6XCMD6 hhhhITEM12ITEM12XCMD:XCMD: hhhhITEM11ITEM11XCMD>XCMD> hhhhITEM30ITEM30XCMDBXCMDB hhhhITEM10ITEM10XCMDFXCMDF hhhhITEM29ITEM29XCMDJXCMDJ hhhhITEM9ITEM9XCMDNXCMDN hhhhITEM28ITEM28XCMDRXCMDR hhhhITEM8ITEM8XCMDVXCMDV hhhhITEM27ITEM27XCMDZXCMDZ hhhhITEM7ITEM7XCMD^XCMD^ hhhhITEM26ITEM26XCMDbXCMDb hhhhITEM6ITEM6XCMDfXCMDf hhhhITEM25ITEM25XCMDjXCMDj hhhhITEM5ITEM5XCMDnXCMDn hhhhITEM24ITEM24XCMDrXCMDr hhhhITEM4ITEM4XCMDvXCMDv hhhhITEM23ITEM23XCMDzXCMDz hhhhITEM3ITEM3XCMD~XCMD~ hhhhITEM22ITEM22XCMDXCMD hhhhITEM2ITEM2XCMDXCMD hhhhITEM32ITEM32XCMDXCMD hhhhITEM19ITEM19XCMDXCMD hhhhXCMDXCMDhhITEM19ITEM19   "DITEMITEM32ITEM32 4N   "DITEMITEM2ITEM24! e e "DITEMITEM22ITEM22! ITEM22TXT ITEM22TXT "DITEMITEM3ITEM3#I, z z "DITEMITEM23ITEM23#, ITEM23TXT ITEM23TXT "DITEMITEM4ITEM4.A7   "DITEMITEM24ITEM24.7 ITEM24TXT ITEM24TXT "DITEMITEM5ITEM59<B   "DITEMITEM25ITEM259B ITEM25TXT ITEM25TXT "DITEMITEM6ITEM6DCM   "DITEMITEM26ITEM26DM ITEM26TXT ITEM26TXT "DITEMITEM7ITEM7OX   "DITEMITEM27ITEM27OX ITEM27TXT ITEM27TXT "DITEMITEM8ITEM8ZEc   "DITEMITEM28ITEM28Zc ITEM28TXT ITEM28TXT "DITEMITEM9ITEM9 e n   "DITEMITEM29ITEM29en ITEM29TXT ITEM29TXT "DITEMITEM10ITEM10 p7y   "DITEMITEM30ITEM30%py"DITEMITEM11ITEM11 !    "DITEMITEM12ITEM12 #,  , , "DITEMITEM13ITEM13 .7  7 7 "DITEMITEM14ITEM149B  F F "DITEMITEM15ITEM15DM  Q Q "DITEMITEM31ITEM31BO ITEM31TXT ITEM31TXT "DITEMITEM16ITEM16OX  ` ` "DITEMITEM17ITEM17Zc  m m "DITEMITEM18ITEM18en  { { "DITEMITEM33ITEM33!cp& ITEM33TXT ITEM33TXT "DITEMITEM01ITEM01"*!    "DITEMITEM20ITEM205C!    "DITEMITEM21ITEM21N\!    "DITEM ITEM22TXT ITEM22TXT  " ~MOVESTRING ITEM23TXT ITEM23TXT  " ~MOVESTRING ITEM24TXT ITEM24TXT   " ~MOVESTRING ITEM25TXT ITEM25TXT   " ~MOVESTRING ITEM26TXT ITEM26TXT   " ~MOVESTRING ITEM27TXT ITEM27TXT   " ~MOVESTRING ITEM28TXT ITEM28TXT  " ~MOVESTRING ITEM29TXT ITEM29TXT   " ~MOVESTRING ITEM31TXT ITEM31TXT  " ~MOVESTRING  ITEM31TXT  ITEM33TXT ITEM33TXT  " ~MOVESTRINGDFTFTFTFTFTFT FT FT1FT1FTFThhhhFT2FT2FTFT hhhhFT3FT3FTFT hhhhFT4FT4FTFT hhhhFT5FT5FTFT hhhhFT6FT6FT"FT" hhhhFT9FT9FT&FT& hhhhFT*FT*hhFT1FT1    "DITEMFT2FT2/8W   "DITEMFT3FT3-X: ITEM33TXT ITEM33TXT "DITEMFT4FT4#,    "DITEMFT5FT5!    "DITEMFT6FT6     "DITEMFT9FT9     "DITEM PARAM_LIST PARAM_LIST H ITEM28TXT ITEM28TXTc &" ~TOOLERROR < <  INFOSTRING INFOSTRING"~INSERT \ \ INFOSTRING INFOSTRING!"~INSERT x x INFOSTRING INFOSTRING="~INSERT   INFOSTRING INFOSTRINGV"~INSERT  INFOSTRINGo CARDERRCARDERR  :" ~MOVESTRING CARDERR;  RADRESULT+;ikHyperStudio XCMD ExerciserG-------Parameter List------- ---Function Calls--- --Action--Original Button ID:Current card ID:Handle to script:Pointer to script:Length of script:Function call address:Original card ID:Pointer to cmd line text:Command line text: First card Last card Previous card Next card Move to card: Redraw card Launch stack Find text:Do ItCancelInfo... $ $ $ $ $ 0000OK Find Text:Case sensitiveRead only fieldsEditable fieldsFind Text Search Parameters33/HyperStudio XCMD Exerciser Written by Eric C. Mueller Updated by Ken Kashmarek/ ^Version 3.0, 01-DEC-89 32/Card ID number invalid (error $xxxx)./ Cancel CVCHCVGOTOXYCURSORON`CURSORON`INVERTCKTfa,A GETTHEDATA ;8 [ PARAM_LIST PARAM_LISTH ITEM22TXT ITEM22TXTc &" ~TOOLERROR PARAM_LIST PARAM_LIST H ITEM23TXT ITEM23TXTc &" ~TOOLERROR PARAM_LIST PARAM_LIST H ITEM26TXT ITEM26TXTc #" ~TOOLERROR PARAM_LIST PARAM_LISTH ITEM24TXT ITEM24TXTc #" ~TOOLERROR PARAM_LIST PARAM_LISTH ITEM25TXT ITEM25TXTc #" ~TOOLERROR PARAM_LIST PARAM_LISTH ITEM27TXT ITEM27TXTc #" ~TOOLERROR PARAM_LIST PARAM_LIST ITEM30ITEM30 ITEM30ITEM30 H ITEM29TXT ITEM29TXTc #" ~TOOLERROR+;ik,; PUTXCOMMON)  CONTROLCODES CHMASK PRINTHV`Xo@,= SCROLLCOMMONHZCHHCV HHHHH ;[ LINEADDRSdd CVCVCV  LINEADDRSMAXCH  MAXCH dd CVMAXCVɜCHASCGS  CONTROLCODES+hhhhhCVhCHzh` @,E ~D`,? FINDTXTD ;8 [HHFTFT2" ~TOOLERRORhFTDIALOGhFTDIALOGFTDIALOGFTDIALOG H" ~TOOLERRORdH" ~TOOLERRORhX  8pfI0i H8pyI0|#  FNDRESULTHFTDIALOGFTDIALOGH FNDRESULT H." ~TOOLERRORhIFNDVALUEHFTDIALOGFTDIALOGH FNDRESULT H/" ~TOOLERROR FNDRESULTFNDVALUEFT4FINDPREFIFINDPREF  FNDRESULTFNDVALUEFT5FINDPREFIFINDPREF  FNDRESULT FNDVALUEFT6FINDPREFIFINDPREF'FTDIALOGFTDIALOGH ITEM33TXT ITEM33TXT" ~TOOLERRORFTDIALOGFTDIALOG H " ~TOOLERROR XCMDIALOG XCMDIALOGH! ITEM33TXT ITEM33TXT " ~TOOLERROR+;ik/SC20/HS.XC/ORCA/XCMDLIBH~DoFPEFunctionZ,= FPEsinH~DoFPEFunction[,> MM !/RAM7/HS.XCMDI@,@ ~_PASMAIN;8 [" ~TOOLERROR"HSPARM PARAM_LIST PARAM_LIST RADRESULT(" INITDIALOGCANCELED" GETTHEDATAHHXCMDXCMD2" ~TOOLERRORh XCMDIALOGh XCMDIALOG XCMDIALOG XCMDIALOGH RADRESULT H/" ~TOOLERROR XCMDIALOG XCMDIALOG H9" ~TOOLERRORHH XCMDIALOG XCMDIALOG H" ~TOOLERROR" ~TOOLERROR XCMDIALOG XCMDIALOG H" ~TOOLERRORACTIONH" ~TOOLERRORhHIT8 pI0 H8HITpI0#HIT RADRESULT XCMDIALOG XCMDIALOGH RADRESULT H/" ~TOOLERROR RADRESULT"FINDTXTDkHITD H INFOSTRING INFOSTRINGY" ~TOOLERRORhCARDNUMkHITPHHIT"^kACTIONACTIONs=HITCANCELED#HIT"# XCMDIALOG XCMDIALOGH ITEM31TXT ITEM31TXT" ~TOOLERROR XCMDIALOG XCMDIALOGH! ITEM33TXT ITEM33TXT" ~TOOLERROR XCMDIALOG XCMDIALOG H " ~TOOLERROR RADRESULT "HSMOVETOFIRSTCARDHS# RADRESULT "HSMOVETOLASTCARDHS# RADRESULT  "HSMOVETOPREVCARDHS# RADRESULT"HSMOVETONEXTCARDHS# RADRESULT* ITEM31TXT ITEM31TXT"~LENGTH  ITEM31TXT H ITEM31TXT ITEM31TXT c ITEM31TXT ITEM31TXT"~LENGTH H (" ~TOOLERRORhCARDNUM ~TOOLERRORzHCARDNUM8pI0#CARDNUMH" HSMOVETOCARDHS ~TOOLERRORHCARDERRCARDERR,c "" ~TOOLERROR HCARDERRCARDERRY" ~TOOLERRORhCARDNUM ITEM31TXT ITEM31TXTEE" ~MOVESTRING# RADRESULT " HSREDRAWCARDHS# RADRESULT# ITEM33TXT ITEM33TXTFINDPREFH" HSFINDTEXTHSCANCELED+ XCMDIALOG XCMDIALOG H " ~TOOLERROR+;ik0000,C GetInGlobals HH "hh:@,? ~GLOBALS XCMDIALOGNXCMDN RADRESULTN PARAM_LISTNITEM9NITEM8NITEM7NITEM6NITEM5NITEM33NITEM4NITEM31NITEM30NITEM29NITEM28NITEM27NITEM26NITEM25NITEM24NITEM23NITEM3NITEM21NITEM20NITEM22NITEM2NITEM32NITEM18NITEM17NITEM16NITEM15NITEM14NITEM13NITEM12NITEM11NITEM01NITEM10NITEM19NHSNHITNFT9NFT6NFT5NFT4NFT3NFT2NFT1NFTDIALOGNFTN FNDRESULTNFNDVALUENFINDPREFNCANCELEDNCARDNUMNACTIONN@,> ~ARRAYS ITEM33TXTN ITEM31TXTN ITEM29TXTN ITEM28TXTN ITEM27TXTN ITEM26TXTN ITEM25TXTN ITEM24TXTN ITEM23TXTN ITEM22TXTN INFOSTRINGNpCARDERRN= $! @,@ "":\;8 [31/-+)' % !ȥ#ȥ32+;i2k;8 [2hhhhhhhhh hhhhKhhhhhhhhchhhh{hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh#hhhhhhhh;hhhh+hhhhShhhhChhhhkhhhh[hhhhhhhhshhhhhhhhhhhhhhhhhhhhhhhh hhhh hhhh3hhhh;hhhhhh;  "3 4N "4! "!"#I,"#, ".A7!".7"9<B4"s9B"DCMH"[DM"kOX["COX"SZEcs"+Zc"; e n"en"# p7y"py" ! " #, " .7 "9B "DM "BO"{OX "cZc "Ken "!cp&" "*! "5C! #"N\! +"4"D 8"D < "D E "D N "D W "D `"D d "D m"D  q"D D   hhhhhhhhhhhhhhhh!hhhho%hhhhW)hhhh-hh q"/8Wu"-X:"#, "! "o  "W  "97Hc &"o "!" ="&V"  ?:"D  5+;ikHyperStudio XCMD ExerciserG-------Parameter List------- ---Function Calls--- --Action--Original Button ID:Current card ID:Handle to script:Pointer to script:Length of script:Function call address:Original card ID:Pointer to cmd line text:Command line text: First card Last card Previous card Next card Move to card: Redraw card Launch stack Find text:Do ItCancelInfo... $ $ $ $ $ 0000OK Find Text:Case sensitiveRead only fieldsEditable fieldsFind Text Search Parameters33/HyperStudio XCMD Exerciser Written by Eric C. Mueller Updated by Ken Kashmarek/ ^Version 3.0, 01-DEC-89 32/Card ID number invalid (error $xxxx)./ Cancel ;8 [97Hc &"o97H c &"o97 Hc #"o97Hc #"o97Hc #"o97Hc #"o97  Hc #"o+;ik;8 [HH2"ohhH"odH"oh8pI0ʊH8pI0ʊ#HHH."ohIHHH/"oI0II'H"oH "oH! "o+;ik;8 ["o"7975""yHH2"ohhH5H/"oH9"oHHH"o"oH"oH"ohU8 pI0ʊH8UpI0ʊ#-U5H5H/"o5"OU HY"oh'UHU"=U U"H"oH!"oH "o5 "S:5 ""S(5 "0S5 ")S5"  Hc"H ("ohoH8pI0ʊ# H"SSoH,c ""oHY"oh"D *5 ">S5H"SH "o+;ik0000?Kb ZH\hhhkKb H\hk H+Kb  H :Hk+k\\\EGk\QW_H+H"/ qH"hkKEG q;i hHHEGhh HqH ";[Yc:zZګH "hYHiY " WKI}y{uwkmk{;8[:ڥHHH hhhHHH hhhI428:  ewu8le 8Xe8e 8eee e    H he     {i+k:eeeJ   ` ;[  )   +;ikKK!M!&O!k{;8[:ڥ HH H H IH"w!v H H H h h h  I  $J        {i+k ;[I4" )d9 I!I! ")   +`{;8[:ڥJ       {i +k K-c3E{K]cu{# #5;;M+SeSk}Ck[s %+=CU[ms  3;; 3& <T j  !":Ph4~sH[k [6CNdS|s+;#4Jx0H^v{cK  . D \ r  #  +  4  8  <  E& / N< E WR [ `h q d~  m  q       # 5 ; !M oS %e Wk )} -  q  u   2 H ` v o  W     " 2 ; K &T k t ? %Hz#lie|%MMQSW[_!I! 06HN`fx~ &8>PVhn(.@FX^pv )?Wm %=Sk #9Qg 7M{ 3Kay 1G_u)2?HU^kt &8>PVhn 5Kcy  %5>NWfnw  (=@CK`cf} cgjoz! &0MTWZcoy}*-36;FIWlvz$06BHTZhv (4@EPS[^fiu8;-HP]`cfilorux{ny36<{j  8fLz2`Ft,Z@n "8NdzDr.G`}P_fQ,>Pn.LIBRARY  XCMDLIB.A m'9lJ"[l}y!!!!y!!!! HSFINDTEXTHSLAUNCHSCRIPT HSMOVETOCARDHSMOVETOFIRSTCARDHSMOVETOLASTCARDHSMOVETONEXTCARDHSMOVETOPREVCARD HSREDRAWCARD_OLDDP _OLDSTACK_P16BLK _PASBEGINAPP _PASENDAPP _SANEHNDL _STACKHNDL_USERID~HSCALL ~HSMOVCAL ~HSMOVRETX,Cmain _PASBEGINAPPHAPWCOMMANDLINEAPWCOMMANDLINE;i{HH ;[APWCOMMANDLINEAPWCOMMANDLINE TOOLERRORNUM H "H"hH "h5HHH "hhH "HHHH "hhe: "k _SANEHNDLN _STACKHNDLN _OLDSTACKN_OLDDPN_USERIDN_P16BLKN~HSCALLNCd,Amain _PASENDAPP ;[ _OLDSTACK_OLDDP[Z _SANEHNDL _SANEHNDL _SANEHNDLH _SANEHNDL H" _STACKHNDLH _STACKHNDLH""_P16BLK_P16BLK"_P16BLK APWERRORCODEk%,Hmain HSMOVETOFIRSTCARD ~HSMOVCALN _OLDDPH+Kb~HSCALL H ~HSCALL:Hk ~HSMOVRETN+k[,Gmain HSMOVETOLASTCARD\ ~HSMOVCAL[,Gmain HSMOVETOPREVCARD\ ~HSMOVCAL[,Gmain HSMOVETONEXTCARD\ ~HSMOVCALW,Cmain HSREDRAWCARD\ ~HSMOVCAL1,Cmain HSMOVETOCARD H_OLDDPH+Kb~HSCALL H ~HSCALL:Hk+hkP ,Emain HSLAUNCHSCRIPT k;,Amain HSFINDTEXT  ZH_OLDDPH+Kb~HSCALL H ~HSCALL:Hk +hhhk { ----------------HyperStudio XCMD Exerciser--------------------------- HS.XCMD in TML/Pascal Original from Merlin by Eric C. Mueller Pascal version inspired by David Sparks Coded by Ken Kashmarek Version 3.0 01-DEC-89 --------------------------------------------------------------------- } {$StackSize 2048} {$APW} {....} PROGRAM HS_XCMD; USES QDIntf, GSIntf, IntMath; {....} CONST RadFam = 3; RadItem= $0C; RL = 282; RR = 405; {RL + 123} CL = 186; CX = 191; {CL + 5} Offset = 32; DisabledText = $800F; { itemDisable + statText ($8000+$000F) } TYPE pstringptr = StringPtr; {....} grafPortPtr= DialogPtr; {....} colorTblPtr = Ptr; itemTempPtr = ^itemTemplate; itemTemplate = record itemID: integer; itemRect: rect; itemType: integer; itemDescr: ptr; itemValue: integer; itemFlag: integer; itemColor: colorTblPtr; end; dialogTemplate = record dtBoundsRect: rect; dtVisible: integer; {....} dtRefCon: longint; dtItemList: array[1..40] of itemTempPtr; end; HSParamPtr = ^HSParams; HSParams = record ButtonID: integer; CardID: integer; ScriptHand: handle; ScriptLength: longint; TextPassedPtr: pstringptr; HSAddress: ptr; END; VAR {$XRefVar+} {....} APWCommandLine: longint; {$XRefVar-} {....} param_list: HSParamPtr; XCMD: dialogTemplate; XCMDialog: grafPortPtr; RadResult: integer; HS: boolean; hit,cardnum: integer; FindPref: integer; FndValue,FndResult: integer; FT: dialogTemplate; FTdialog: grafPortPtr; canceled,action: boolean; InfoString: string[111]; Carderr: string[60]; ITEM19,ITEM32, ITEM2,ITEM22,ITEM3,ITEM23,ITEM4,ITEM24,ITEM5,ITEM25, ITEM6,ITEM26,ITEM7,ITEM27,ITEM8,ITEM28,ITEM9,ITEM29, ITEM10,ITEM30,ITEM11,ITEM12,ITEM13,ITEM14,ITEM15,ITEM16,ITEM17,ITEM18, ITEM01,ITEM20,ITEM21,ITEM31,ITEM33: itemTemplate; ITEM22Txt,ITEM23Txt,ITEM28Txt: string[4]; ITEM24Txt,ITEM25Txt,ITEM26Txt,ITEM27Txt,ITEM29Txt: string[9]; ITEM31Txt: str255; ITEM33Txt: str255; FT1,FT2,FT3,FT4,FT5,FT6,FT9: itemTemplate; Function HSMoveToFirstCard: boolean; external; Function HSMoveToLastCard: boolean; external; Function HSMoveToPrevCard: boolean; external; Function HSMoveToNextCard: boolean; external; Function HSMoveToCard(IDNum:integer): boolean; external; Function HSReDrawCard: boolean; external; Function HSFindText(sch:str255;flag:integer): boolean; external; {....} function AlertWindow (stringType: integer; subStrPtr, alertStrPtr: ptr): {....} integer; tool 14,89; {....} Procedure DITEM(var template:itemTemplate; id:integer;y1,x1,y2,x2:integer;dtyp:integer; desc:ptr;value:integer;flag:integer;color:colorTblPtr); BEGIN WITH template DO BEGIN itemID := id; {SetRect(itemRect,x1,y1,x2,y2); {....} itemRect.top := y1; {Rect in memory is: y1,x1,y2,x2 } itemRect.left := x1; {naming order is: top,left,bottom,right } itemRect.bottom:=y2; {QDII calls use Mac order: x1,y1,x2,y2 } itemRect.right :=x2; {Mac naming order is: left,top,right,bottom } itemType := dtyp; itemDescr := desc; itemValue := value; itemFlag := flag; itemColor := color; END; END; PROCEDURE InitDialog; BEGIN XCMD.dtBoundsRect.top:= 18+Offset; {....} XCMD.dtBoundsRect.left:= 0+24; XCMD.dtBoundsRect.bottom:=141+Offset; XCMD.dtBoundsRect.right:=592+24; XCMD.dtVisible := 0 ; XCMD.dtRefCon := 0; XCMD.dtItemList[1] := @ITEM21; XCMD.dtItemList[2] := @ITEM20; XCMD.dtItemList[3] := @ITEM01; XCMD.dtItemList[4] := @ITEM18; XCMD.dtItemList[5] := @ITEM33; XCMD.dtItemList[6] := @ITEM17; XCMD.dtItemList[7] := @ITEM16; XCMD.dtItemList[8] := @ITEM15; XCMD.dtItemList[9] := @ITEM31; XCMD.dtItemList[10] := @ITEM14; XCMD.dtItemList[11] := @ITEM13; XCMD.dtItemList[12] := @ITEM12; XCMD.dtItemList[13] := @ITEM11; XCMD.dtItemList[14] := @ITEM30; XCMD.dtItemList[15] := @ITEM10; XCMD.dtItemList[16] := @ITEM29; XCMD.dtItemList[17] := @ITEM9; XCMD.dtItemList[18] := @ITEM28; XCMD.dtItemList[19] := @ITEM8; XCMD.dtItemList[20] := @ITEM27; XCMD.dtItemList[21] := @ITEM7; XCMD.dtItemList[22] := @ITEM26; XCMD.dtItemList[23] := @ITEM6; XCMD.dtItemList[24] := @ITEM25; XCMD.dtItemList[25] := @ITEM5; XCMD.dtItemList[26] := @ITEM24; XCMD.dtItemList[27] := @ITEM4; XCMD.dtItemList[28] := @ITEM23; XCMD.dtItemList[29] := @ITEM3; XCMD.dtItemList[30] := @ITEM22; XCMD.dtItemList[31] := @ITEM2; XCMD.dtItemList[32] := @ITEM32; XCMD.dtItemList[33] := @ITEM19; XCMD.dtItemList[34] := nil; DITEM(ITEM19,19,2,200,11,411,DisabledText, @'HyperStudio XCMD Exerciser', 0,0,nil); DITEM(ITEM32,32,13,52,22,590,DisabledText, @'-------Parameter List------- ---Function Calls--- --Action--', 0,0,nil); DITEM(ITEM2 , 2, 24, 52, 33, CL,DisabledText, @'Original Button ID:', 0,0,nil); DITEM(ITEM22,22, 24, CX, 33,RL-5,DisabledText,@ITEM22Txt,0,0,nil); DITEM(ITEM3 , 3, 35, 73, 44, CL,DisabledText, @'Current card ID:', 0,0,nil); DITEM(ITEM23,23, 35, CX, 44,RL-5,DisabledText,@ITEM23Txt,0,0,nil); DITEM(ITEM4 , 4, 46, 65, 55, CL,DisabledText, @'Handle to script:', 0,0,nil); DITEM(ITEM24,24, 46, CX, 55,RL-5,DisabledText,@ITEM24Txt,0,0,nil); DITEM(ITEM5 , 5, 57, 60, 66, CL,DisabledText, @'Pointer to script:', 0,0,nil); DITEM(ITEM25,25, 57, CX, 66,RL-5,DisabledText,@ITEM25Txt,0,0,nil); DITEM(ITEM6 , 6, 68, 67, 77, CL,DisabledText, @'Length of script:', 0,0,nil); DITEM(ITEM26,26, 68, CX, 77,RL-5,DisabledText,@ITEM26Txt,0,0,nil); DITEM(ITEM7 , 7, 79, 27, 88, CL,DisabledText, @'Function call address:', 0,0,nil); DITEM(ITEM27,27, 79, CX, 88,RL-5,DisabledText,@ITEM27Txt,0,0,nil); DITEM(ITEM8 , 8, 90, 69, 99, CL,DisabledText, @'Original card ID:', 0,0,nil); DITEM(ITEM28,28, 90, CX, 99,RL-5,DisabledText,@ITEM28Txt,0,0,nil); DITEM(ITEM9 , 9,101, 11,110, CL,DisabledText, @'Pointer to cmd line text:', 0,0,nil); DITEM(ITEM29,29,101, CX,110,RL-5,DisabledText,@ITEM29Txt,0,0,nil); DITEM(ITEM10,10,112, 55,121, CL,DisabledText, @'Command line text:', 0,0,nil); DITEM(ITEM30,30,112, CX,121, 460,DisabledText,nil ,0,0,nil); DITEM(ITEM11,11, 24, RL, 33, RR,RadItem,@'First card', 0,RadFam,nil); DITEM(ITEM12,12, 35, RL, 44, RR,RadItem,@'Last card', 0,RadFam,nil); DITEM(ITEM13,13, 46, RL, 55, RR,RadItem,@'Previous card', 0,RadFam,nil); DITEM(ITEM14,14, 57, RL, 66, RR,RadItem,@'Next card', 0,RadFam,nil); DITEM(ITEM15,15, 68, RL, 77, RR,RadItem,@'Move to card:', 0,RadFam,nil); DITEM(ITEM31,31,66,RR+1,79,RR+49,editlineitem,@ITEM31Txt, 4,0, nil); DITEM(ITEM16,16, 79, RL, 88, RR,RadItem,@'Redraw card', 0,RadFam,nil); DITEM(ITEM17,17, 90, RL, 99, RR,RadItem,@'Launch stack', 0,RadFam,nil); DITEM(ITEM18,18,101, RL,110, RR,RadItem,@'Find text:', 0,RadFam,nil); DITEM(ITEM33,33,99,RR+1,112,RR+145,editlineitem,@ITEM33Txt, 16,0,nil); DITEM(ITEM01,34,28,479,42,545,ButtonItem,@'Do It', 0,0,nil); DITEM(ITEM20,20,53,479,67,545,ButtonItem,@'Cancel', 0,0,nil); DITEM(ITEM21,21,78,479,92,545,ButtonItem,@'Info...', 0,0,nil); ITEM22Txt := ' '; ITEM23Txt := ' '; ITEM24Txt := '$ '; ITEM25Txt := '$ '; ITEM26Txt := '$ '; ITEM27Txt := '$ '; ITEM28Txt := ' '; ITEM29Txt := '$ '; ITEM31Txt := '0000'; ITEM31Txt[5] := chr(0); ITEM33Txt := ''; FT.dtBoundsRect.top:= 36+Offset; FT.dtBoundsRect.left:= 200; FT.dtBoundsRect.bottom:=96+Offset; FT.dtBoundsRect.right:=440; FT.dtVisible := 0 ; FT.dtRefCon := 0; FT.dtItemList[1] := @FT1; FT.dtItemList[2] := @FT2; FT.dtItemList[3] := @FT3; FT.dtItemList[4] := @FT4; FT.dtItemList[5] := @FT5; FT.dtItemList[6] := @FT6; FT.dtItemList[7] := @FT9; FT.dtItemList[8] := nil; DITEM(FT1,1,20,180, 0, 0,ButtonItem, @'OK', 0,1,nil); DITEM(FT2,2,47, 8,56, 87,DisabledText, @'Find Text:', 0,0,nil); DITEM(FT3,3,47-2,88,56+2,88+144,editlineitem,@ITEM33Txt, 16,0,nil); DITEM(FT4,4,35, 8,44,168, CheckItem, @'Case sensitive', 0,0,nil); DITEM(FT5,5,24, 8,33,168, CheckItem, @'Read only fields', 0,0,nil); DITEM(FT6,6,13, 8,22,168, CheckItem, @'Editable fields', 0,0,nil); DITEM(FT9,9,2,8,11,239,DisabledText,@'Find Text Search Parameters',0,0,nil); Int2Dec (param_list^.CardID,@ITEM28Txt[1],4,0 ); insert('33/HyperStudio XCMD Exerciser ',InfoString,1); insert('Written by Eric C. Mueller ', InfoString,33); insert('Updated by Ken Kashmarek/', InfoString,61); insert(' ^Version 3.0, 01-DEC-89 ', InfoString,86); InfoString[111] := chr(0); Carderr := '32/Card ID number invalid (error $xxxx)./ Cancel '; Carderr[59] := chr(0); RadResult := 11; END; PROCEDURE GetTheData; BEGIN Int2Dec (param_list^.ButtonID, @ITEM22Txt[1],4,0 ); Int2Dec (param_list^.CardID, @ITEM23Txt[1],4,0 ); Long2Hex(param_list^.ScriptLength, @ITEM26Txt[2],8); Long2Hex(longint(param_list^.ScriptHand), @ITEM24Txt[2],6); Long2Hex(ord4(param_list), @ITEM25Txt[2],6); Long2Hex(longint(param_list^.HSAddress), @ITEM27Txt[2],6); ITEM30.itemDescr := pointer(param_list^.TextPassedPtr); Long2Hex(longint(ITEM30.itemDescr), @ITEM29Txt[2],6); END; PROCEDURE FindTxtD; VAR done: boolean; hit : integer; BEGIN FTdialog := GetNewModalDialog(@FT); {....} ShowWindow(FTdialog); done := false; REPEAT hit := ModalDialog(nil); IF hit=1 THEN done := true ELSE IF ((hit>=4) and (hit<=6)) THEN BEGIN FndResult := hit; FndValue := bitxor(GetDItemValue(FTdialog,FndResult),$0001); SetDItemValue(FndValue,FTdialog,FndResult); IF FndResult=4 THEN BEGIN FT4.itemValue := FndValue; FindPref := bitxor(FindPref,$0001); END ELSE IF FndResult=5 THEN BEGIN FT5.itemValue := FndValue; FindPref := bitxor(FindPref,$0002); END ELSE IF FndResult=6 THEN BEGIN FT6.itemValue := FndValue; FindPref := bitxor(FindPref,$0004); END; END; UNTIL done; GetIText(FTdialog,3, ITEM33Txt); CloseDialog(FTdialog); {....} SetIText(XCMDialog,33, ITEM33Txt); END; BEGIN InitCursor; param_list := HSParamPtr(APWCommandLine); IF RadResult = 0 THEN InitDialog; {one time only} canceled := false; REPEAT GetTheData; XCMDialog := GetNewModalDialog(@XCMD); {....} SetDitemValue(1,XCMDialog,RadResult); DisableDitem(XCMDialog,17); HiliteControl(255,GetControlDItem(XCMDialog,17)); ShowWindow(XCMDialog); action := false; REPEAT hit := ModalDialog(nil); IF ((hit>=11) and (hit<=18)) THEN BEGIN RadResult := hit; SetDItemValue(1,XCMDialog,RadResult); IF RadResult = 18 THEN FindTxtD; END ELSE IF hit=21 THEN cardnum := AlertWindow(0,nil,@InfoString[1]) ELSE IF ((hit=20) or (hit=34)) THEN action := true; UNTIL action; IF hit=20 THEN canceled := true ELSE IF hit=34 THEN BEGIN GetIText(XCMDialog,31, ITEM31Txt); {....} GetIText(XCMDialog,33, ITEM33Txt); CloseDialog(XCMDialog); IF RadResult=11 THEN HS := HSMoveToFirstCard ELSE IF RadResult=12 THEN HS := HSMoveToLastCard ELSE IF RadResult=13 THEN HS := HSMoveToPrevCard ELSE IF RadResult=14 THEN HS := HSMoveToNextCard ELSE IF RadResult=15 THEN BEGIN ITEM31Txt[length(ITEM31Txt)+1] := chr(0); cardnum := Dec2Int(@ITEM31Txt[1],length(ITEM31Txt),0); IF ((not isToolError) and (cardnum > 0)) THEN {....} HS := HSMoveToCard(cardnum) ELSE BEGIN Int2Hex(ToolErrorNum,@Carderr[44],4); {....} cardnum := AlertWindow(0,nil,@Carderr[1]); ITEM31Txt := '0000'; END; END ELSE IF RadResult=16 THEN HS := HSRedrawCard ELSE IF RadResult=18 THEN HS := HSFindText(ITEM33Txt,FindPref); END; UNTIL canceled; CloseDialog(XCMDialog); END.  !"#$%&'()*+,-./0123456,?main _PASXFER" _PASBEGINAPP"_PASMAIN_PASHALTN" _PASENDAPPk0h h0`0RA 1DS 0DS LL% )1 "L9$0 "H $"0hh0H ("h> )1H:B@>0"-4.50J  1 J 1)H)H, ")H)H "` )1 "q,<main DITEMq ;8[i ȥȥ{i+;ik1 "L9$0 "H $"0hh0H ("h> )1H:B@>0"-4.50J  1 J 1)H)H, ")H)H "` )1 "X,Amain INITDIALOG ;8[i2XCMDXCMDXCMDhXCMDXCMDXCMD XCMD ITEM21ITEM21XCMDXCMDITEM20ITEM20XCMDXCMDITEM01ITEM01XCMDXCMDITEM18ITEM18XCMDXCMDITEM33ITEM33XCMDXCMD ITEM17ITEM17XCMD"XCMD$ITEM16ITEM16XCMD&XCMD(ITEM15ITEM15XCMD*XCMD,ITEM31ITEM31XCMD.XCMD0ITEM14ITEM14XCMD2XCMD4ITEM13ITEM13XCMD6XCMD8ITEM12ITEM12XCMD:XCMD<ITEM11ITEM11XCMD>XCMD@ITEM30ITEM30XCMDBXCMDDITEM10ITEM10XCMDFXCMDHITEM29ITEM29XCMDJXCMDLITEM9ITEM9XCMDNXCMDPITEM28ITEM28XCMDRXCMDTITEM8ITEM8XCMDVXCMDXITEM27ITEM27XCMDZXCMD\ITEM7ITEM7XCMD^XCMD`ITEM26ITEM26XCMDbXCMDdITEM6ITEM6XCMDfXCMDhITEM25ITEM25XCMDjXCMDlITEM5ITEM5XCMDnXCMDpITEM24ITEM24XCMDrXCMDtITEM4ITEM4XCMDvXCMDxITEM23ITEM23XCMDzXCMD|ITEM3ITEM3XCMD~XCMDITEM22ITEM22XCMDXCMDITEM2ITEM2XCMDXCMDITEM32ITEM32XCMDXCMDITEM19ITEM19XCMDXCMDXCMDXCMDITEM19ITEM19 ==H"DITEMITEM32ITEM32 4N  H"DITEMITEM2ITEM24!  H"DITEMITEM22ITEM22! ITEM22TXT ITEM22TXTH"DITEMITEM3ITEM3#I,  H"DITEMITEM23ITEM23#, ITEM23TXT ITEM23TXTH"DITEMITEM4ITEM4.A7  H"DITEMITEM24ITEM24.7 ITEM24TXT ITEM24TXTH"DITEMITEM5ITEM59<B  H"DITEMITEM25ITEM259B ITEM25TXT ITEM25TXTH"DITEMITEM6ITEM6DCM  H"DITEMITEM26ITEM26DM ITEM26TXT ITEM26TXTH"DITEMITEM7ITEM7OX  H"DITEMITEM27ITEM27OX ITEM27TXT ITEM27TXTH"DITEMITEM8ITEM8ZEcp p H"DITEMITEM28ITEM28Zc ITEM28TXT ITEM28TXTH"DITEMITEM9ITEM9 e nV V H"DITEMITEM29ITEM29en ITEM29TXT ITEM29TXTH"DITEMITEM10ITEM10 p7yC C H"DITEMITEM30ITEM30%py"DITEMITEM11ITEM11 ! 8 8 H"DITEMITEM12ITEM12 #, . . H"DITEMITEM13ITEM13 .7   H"DITEMITEM14ITEM149B   H"DITEMITEM15ITEM15DM   H"DITEMITEM31ITEM31BO ITEM31TXT ITEM31TXTH"DITEMITEM16ITEM16OX   H"DITEMITEM17ITEM17Zc   H"DITEMITEM18ITEM18en   H"DITEMITEM33ITEM33!cp& ITEM33TXT ITEM33TXTH"DITEMITEM01ITEM01"*!   H"DITEMITEM20ITEM205C!   H"DITEMITEM21ITEM21N\!   H"DITEM  ITEM22TXT  ITEM22TXT   ITEM22TXT   ITEM23TXT  ITEM23TXT   ITEM23TXT   ITEM24TXT  ITEM24TXT  ITEM24TXT  ITEM24TXT  ITEM24TXT  ITEM25TXT  ITEM25TXT  ITEM25TXT  ITEM25TXT  ITEM25TXT  ITEM26TXT  ITEM26TXT  ITEM26TXT  ITEM26TXT  ITEM26TXT  ITEM27TXT  ITEM27TXT  ITEM27TXT  ITEM27TXT  ITEM27TXT  ITEM28TXT  ITEM28TXT   ITEM28TXT   ITEM29TXT  ITEM29TXT  ITEM29TXT  ITEM29TXT  ITEM29TXT  ITEM31TXT  ITEM31TXT   ITEM31TXT ITEM31TXT  ITEM33TXT DFTFTFTFTFTFT FT FT1FT1FTFTFT2FT2FTFTFT3FT3FTFTFT4FT4FTFTFT5FT5FTFT FT6FT6FT"FT$FT9FT9FT&FT(FT*FT,FT1FT1   H"DITEMFT2FT2/8Wz z H"DITEMFT3FT3-X: ITEM33TXT ITEM33TXTH"DITEMFT4FT4#, k k H"DITEMFT5FT5! Z Z H"DITEMFT6FT6  J J H"DITEMFT9FT9  . . H"DITEM PARAM_LIST PARAM_LIST H ITEM28TXT ITEM28TXTH &" TOOLERRORNUM   INFOSTRING INFOSTRINGo" _PASINSERT   INFOSTRING INFOSTRINGo!" _PASINSERT   INFOSTRING INFOSTRINGo=" _PASINSERT   INFOSTRING INFOSTRINGoV" _PASINSERT  INFOSTRINGo CARDERR :TCARDERR  CARDERR;  RADRESULT{i+k:32/Card ID number invalid (error $xxxx)./ Cancel  ^Version 3.0, 01-DEC-89 Updated by Ken Kashmarek/Written by Eric C. Mueller 33/HyperStudio XCMD Exerciser Find Text Search ParametersEditable fieldsRead only fieldsCase sensitive Find Text:OK0000 $  $ $ $ $   Info...CancelDo It Find text: Launch stack Redraw card Move to card: Next card Previous card Last card First cardCommand line text:Pointer to cmd line text:Original card ID:Function call address:Length of script:Pointer to script:Handle to script:Current card ID:Original Button ID:cG-------Parameter List------- ---Function Calls--- --Action--HyperStudio XCMD ExerciserH"DITEMITEM7ITEM7OXH"DITEMITEM27ITEM27OX ITEM27TXT ITEM27TXTH"DITEMITEM8ITEM8ZEcH"DITEMITEM28ITEM28Zc ITEM28TXT ITEM28TXTH"DI7,Amain GETTHEDATA ;8[i PARAM_LIST PARAM_LISTH ITEM22TXT ITEM22TXTH &" TOOLERRORNUM PARAM_LIST PARAM_LIST H ITEM23TXT ITEM23TXTH &" TOOLERRORNUM PARAM_LIST PARAM_LIST HH ITEM26TXT ITEM26TXT H #" TOOLERRORNUM PARAM_LIST PARAM_LISTHH ITEM24TXT ITEM24TXT H #" TOOLERRORNUM PARAM_LISTH PARAM_LISTH ITEM25TXT ITEM25TXT H #" TOOLERRORNUM PARAM_LIST PARAM_LISTHH ITEM27TXT ITEM27TXT H #" TOOLERRORNUM PARAM_LIST PARAM_LIST ITEM30 ITEM30ITEM30HITEM30 H ITEM29TXT ITEM29TXT H #" TOOLERRORNUM{i+kMDBXCMDDITEM10ITEM10XCMDFXCMDHITEM29ITEM29XCMDJXCMDLITEM9ITEM9XCMDNXCMDPITEM28ITEM28XCMDRXCMDTITEM8ITEM8XCMDVXCMDXITEM27ITEM27XCMDZXCMD\ITEM7,?main FINDTXTD ;8[iHHFTFT H2" TOOLERRORNUMhFTDIALOGFTDIALOGFTDIALOGHFTDIALOG H" TOOLERRORNUM d H" TOOLERRORNUMUh  8pI 0 8pI 0%  FNDRESULTHFTDIALOGHFTDIALOGH FNDRESULT H." TOOLERRORNUMhIFNDVALUEFNDVALUEHFTDIALOGHFTDIALOGH FNDRESULT H/" TOOLERRORNUM FNDRESULT FNDVALUEFT4FINDPREFIFINDPREF7 FNDRESULT FNDVALUEFT5FINDPREFIFINDPREF FNDRESULT FNDVALUEFT6FINDPREFIFINDPREF   FTDIALOGHFTDIALOGH ITEM33TXT ITEM33TXT" TOOLERRORNUMFTDIALOGHFTDIALOG H " TOOLERRORNUM XCMDIALOGH XCMDIALOGH! ITEM33TXT ITEM33TXT " TOOLERRORNUM{i+kITEM10XCMDFXCMDHITEM29ITEM29XCMDJXCMDLITEM9ITEM9XCMDNXCMDPITEM28ITEM28XCMDRXCMDTITEM8ITEM8XCMDVXCMDXITEM27ITEM27XCMDZXCMD\ITEM7,?main _PASMAIN ;8[i" TOOLERRORNUMAPWCOMMANDLINE PARAM_LISTAPWCOMMANDLINE PARAM_LIST RADRESULT " INITDIALOG CANCELED " GETTHEDATAHHXCMDXCMD H2" TOOLERRORNUMh XCMDIALOG XCMDIALOG XCMDIALOGH XCMDIALOGH RADRESULT H/" TOOLERRORNUM XCMDIALOGH XCMDIALOG H9" TOOLERRORNUMHH XCMDIALOGH XCMDIALOG H" TOOLERRORNUM hH" TOOLERRORNUM XCMDIALOGH XCMDIALOG H" TOOLERRORNUM ACTION H" TOOLERRORNUMhHITHIT8 pI 0 8HITpI 0%5 HIT RADRESULT XCMDIALOGH XCMDIALOGH RADRESULT H/" TOOLERRORNUM RADRESULT "FINDTXTD f HIT#H INFOSTRING INFOSTRING HY" TOOLERRORNUMhCARDNUM4HIT  HIT" ACTION ACTION  HIT  CANCELED HIT " XCMDIALOGH XCMDIALOGH ITEM31TXT ITEM31TXT" TOOLERRORNUM XCMDIALOGH XCMDIALOGH! ITEM33TXT ITEM33TXT" TOOLERRORNUM XCMDIALOGH XCMDIALOG H " TOOLERRORNUM RADRESULT H"HSMOVETOFIRSTCARDh HS a RADRESULT H"HSMOVETOLASTCARDh HS F RADRESULT H"HSMOVETOPREVCARDh HS + RADRESULT H"HSMOVETONEXTCARDh HS  RADRESULT  ITEM31TXT)  ITEM31TXT H ITEM31TXT ITEM31TXTH ITEM31TXT)H (" TOOLERRORNUMhCARDNUM  8CARDNUMpI % HCARDNUMH" HSMOVETOCARDh HSR  TOOLERRORNUMHCARDERR,CARDERR, H "" TOOLERRORNUM HCARDERRCARDERR HY" TOOLERRORNUMhCARDNUM ITEM31TXT ITEM31TXT  ITEM31TXT = RADRESULT H" HSREDRAWCARDh HS " RADRESULT H ITEM33TXT ITEM33TXTFINDPREFH" HSFINDTEXTh HS CANCELED    XCMDIALOGH XCMDIALOG H " TOOLERRORNUM {i+k0000"DITEMITEM22ITEM22! ITEM22TXT ITEM22TXTH"DITEMITEM3ITEM3#I,  H"DITEMITEM23ITEM23#, ITEM23TXT ITEM23TXTH"DITEMITEM4ITEM4.A7%,@~global ~HS_XCMD1FT9NFT6NFT5NFT4NFT3NFT2NFT1N ITEM33TXTN ITEM31TXTN ITEM29TXTN ITEM27TXTN ITEM26TXTN ITEM25TXTN ITEM24TXTN ITEM28TXTN ITEM23TXTN ITEM22TXTNITEM33NITEM31NITEM21NITEM20NITEM01NITEM18NITEM17NITEM16NITEM15NITEM14NITEM13NITEM12NITEM11NITEM30NITEM10NITEM29NITEM9NITEM28NITEM8NITEM27NITEM7NITEM26NITEM6NITEM25NITEM5NITEM24NITEM4NITEM23NITEM3NITEM22NITEM2NITEM32NITEM19NCARDERRN= INFOSTRINGNpACTIONNCANCELEDNFTDIALOGNFTN FNDRESULTNFNDVALUENFINDPREFNCARDNUMNHITNHSN RADRESULTN XCMDIALOGNXCMDN PARAM_LISTNHIT" ACTION ACTION  HIT  CANCELED HIT " XCMDIALOGH XCMDIALOGH ITEM31TXT ITEM31TXT" TOOLERRORNUM XCMDIALOGH XCMDIALOGH! ITEM33TXT ITEM33TXT" TOOLERRORNUM XCMDIALOGH XCMDIALOG H " T89:;<=>?@ABCDEFe ,@ main "$""k ;8[i ȥȥ{i+;ik ;8[i2suwhy{}11IIaayy  !!99QQii))AAYYqq H" 4NvH"4!bH"!H"#I,QH"qq#,H"YY.A7?H"AA.7H"))9<B,H"9BH"DCMH"DMH"OXH"OXH"ZEc H"ZcH"ii e n H"QQenH"99 p7y H"!!py"   ! H" #, H" .7 H"9B H"DM H"BOH"OX } H"yyZc p H"aaen e H"!cp&H"II"*! _ H"115C! X H"N\! P H"K M  O  F H  J  < > @ B D 2 4 6 8 : ( * , . 0   " $ &                Dxx``HH00  H"xx/8W H"``-X:H"HH#, H"00! H"  H"   H"!#HH &"% >>o"xq >>o!"xW >>o="x= >>oV"x   :T < m{i+k:32/Card ID number invalid (error $xxxx)./ Cancel  ^Version 3.0, 01-DEC-89 Updated by Ken Kashmarek/Written by Eric C. Mueller 33/HyperStudio XCMD Exerciser Find Text Search ParametersEditable fieldsRead only fieldsCase sensitive Find Text:OK0000 $  $ $ $ $   Info...CancelDo It Find text: Launch stack Redraw card Move to card: Next card Previous card Last card First cardCommand line text:Pointer to cmd line text:Original card ID:Function call address:Length of script:Pointer to script:Handle to script:Current card ID:Original Button ID:G-------Parameter List------- ---Function Calls--- --Action--HyperStudio XCMD Exerciser ;8[i!#HH &"%!#HH &"%!# HHH #"%!#HHH #"%#H!HH #"%!#HHH #"%!# -//H-HH #"%{i+k ;8[iHHH2"%hHH"% d H"%h  8pI 0 8pI 0% bHHHbH."%hIddHHHbH/"%bdXfIf7bd@fIfbd(fIf   HH"%HH "%qHoH! "%{i+k ;8[i"%'!)#m"  "HHssH2"%hoqqHoHmH/"%qHoH9"%HHqHoH"%hH"%qHoH"%  H"%hjj8 pI 0 8jpI 0%5 jmqHoHmH/"%m" f j#H??HY"%hh4j  j"   j   j"qHoH"%qHoH!"%qHoH "%m H"h l am H"h l Fm H"h l +mH"h l m)  HH)H ("%hh  8hpI % HhH"h lR %H--H ""%HHY"%hhrt v =mH"h l "mHfH"wh l   qHoH "%{i+k0000  ZH H+Kb H :Hk +hhhk H H+Kb H :Hk+hk H+Kb H :Hk+k\\\\H)';i{ HH ;[')% H "H"h H "h5HH H "hhH "HHH H "hhe: "k ;[ [ZHH"HH"""+kHH ;[ d0b) W  gF @ e )e)8 0  ):  +;ik\vbQ|?,< \   J z   :} jp e _ *X ZP "  R    B   q  W  =    ]n-Yy9YGw7g'WO? m-]M} =m+[K{ ;kov &-4=FMT[bipy3c#SӅ+ > !5:T\y!,06;GLe ',CIs@ !$'-039Dt4Id $Ti)Dt2b"RBsz/#*18AJQX_fmt} :j *WZg| 036I[^at.369=H_!%+69ELSV]w~ !>FNadgl/2=P_b};or|z'=Sxρ* +Oloʁ &548#an| Kt4;}0     0        0Francois Uhrich ! Bb*:SYSTEM:TransProgConfig*:Basic.SystemK,C ~ExpressLoadK Z[T @,YfZ@,7Z'8DS--TransProg \H**9"k9" k9HZ"T8kH"&U9H"ek;8  [99H""T:"?:HHee"Th h   cchh  cch   9" 9 +;ik;8 [ iHH"T  +;ik;8 [HH"Thh H"THH:: "Th h HH H:: "Th h H{iH("T{iHU"T hhI# hh!:H:"T  H"/H"T +;ik;8 ["T yH{i HiGiGY"ThjH{i HGGY"ThJH{i HGGY"Th*H b"ThEF\"; +;i k;8 [)*&<<("T<<"2Rڅ h i<:6:6: "T"TE)9 A A A A"16:6: "T"TE+9 A A A A"{<<<8:<< "TD:ɳD:+9 A A A A\"{"T  +;i k;8 [9I A)] A)/ A): A A A{i hhh{i H "T A A A$Z:cz)/$Z:cz):{ih{iH "T+;ik;8 [ "T::::::hhhh 6:>:\:\:hh6:6: "T"T o}<<<<("TH{iHiGiGY"Th ':: "{oEF ER<<<8:HHH`:b:Hhchc9H "Th h "I<< "T :`:b:H::hhhh H H::hhhh : :8: : : "T::"I<< "TF`:b:H Hhchchh  << "T +;ik;8 [hh::<:6:6: "T"TE::"16:6: "T"TF{J=::L=L=hhhhR=T=T=hhP=J=J= "T::"IJ6:6: "TF :H::hhhh::hh  : :8:<<<8: : : "T::"I<< "T|===8:=::H==hhhh== "T::"I<< "T  +;ik;8 [9X99H "T99I"T99H"T9I "T+;ik;8 [ "Qhh H== '"T== "T  +;ik;8 [HH"Thh "TH"t HH/"Thh "TH"t HH"Thh "TH"t HH"Thh "TH"t  "T+;ik ;8 [H "Thnn "T;; "T"="= "T<< "T== "T" == "T&<&< "T:: "THH"T"Qhh HH H "Th h hhIн "Qhh . "T hhIy"T!"T"Too "T" &<&< "T;; "Trr "Ttt "T+;ik ;8 [ F A A   H iH A Ac"P  A j A A "Q  A A "Q  H iH A Ac"P  A   +;i k;84 [ =="T:xH2:8H{i H=="T=I[==  cc"u9==H"T==H"T6:59+;i8k;8  [HH"Thh 99H"T99H"T:"T,="T:"T<="TB:"T="THp:p:"Th"QHK8M:"Tp:p:"T H"T+;i k;8 [HH"Th99Ș 0LHH99Hd Hhchc0"Th h  H"T +;ik;8 [) )  ʊ  Hcccc":P 8 8 +;ik;8 [ "T9: DD    9U DD  H H"0:# DD     N DD DDZH iDDhhh iDDh+;ik;8 [ "T999 99HhhI_ ) 5 cch)<)(9ʊ 9"tRHm9;E9 Hi==h 9 H==ZH9"tRi9E9Ei hhh9"tRi9E9EH9 iDDhhh cch h )  i    8hh8hhh  cchh 9 Hci==h  cch h )  i    8hh8hhh "Q  cch"Q  cchh 99"9'9: DDi @qDqD9 iDDhhh9 iDDh+;ik;8 [9I"HHee"Th h 999 99 9? ? "T"T(H{i H7?7?Y"ThH"Th99I "T"T"T(H{i H7?7?Y"ThEH"Th99I]HH9H "Th9h9"T" 9H99H"T99I "9999Hhh999H "T"HHDDCCa"Th9h9HH99Hg0"Thh9HH"T9HH99Hh0"Thh9HH"THH99Hi0"Thh9HH"THH99Hj0"Thh:9HH"TH"T99H"T99H"T99HK"T"T99+;ik;8 [HHee"Th h cch h 9  O cch n 7   cch  H"Th"T"T"T+;ik;8 [HH99Hj0"Thhb=b="KNH"T99H"THQ"Th芍:H"g#H"T: :H"g+;ik;8 [ H""T 64H""T  +;i k;8 [H H""TH 64H""T+;ik;8 [:LL:MM:HHH2"Th9h::: "THH:9H:: "Th9h9HH99H#"Th9h9HH9964H#"Th9h999".:9H"T:9H"T+;ik;8$ [9 9 ,)99HH:: "ThhP< P<,H{iH.,i H"P20H"ThȘ564ȘF999999"H.,i H"PH"Th99".,),)IEHH:: "Thh (((  K H H,H,H8hhHH"TzhhhȘNHH20H"Th!h##!H"T(#!H"T .,."O HH:: "Thhhh?HHH:: "Thh ( ( (&2%1+;i0k;8 [9) H"/ 9 eH eHcch h )/ ):   i   8hhhchch HH Hhchc9H "Thh  Hcc"P+;ik;8& [**:6O6O]N]Nhh HH H2"Th h HHhhH"u99I H4 A A "T.HH H4"ThhH"T H3H "T9 H"T H"TH"Thǥ 9I H4 A A"T9 A) A A"/9HHHhchc9H@ "Thh! A Accc"P"Q  cch"Q  H3 A A"T A)HHHhchc9H@ "Th#h%## A Accc"P  H99H"Th#H#hHHhh  !H"T** ** ** H "T(,'++;i*k;8! [d {i9??"K89!ȗ  # A A"Y#9 A) A A"/ 9HH Hhchc9H "Thh A Ac cc"P  "Q   cch "Q  HhHHhh  {iH"$ hh99H9 "tRc  "O99H99H"T9::: "TH99H"ThH99H"T9I H"TH"T+;i!k;8  [H99H"Th)99H: "tRchh 999H "tRchHHhh : 699H8 "tRc99H "tRc "Os98 99H99H"T+;i k;8  [HH:: "Thh {iH"$ hhB:: "TH99H"ThH99H"T+;i k;8* [HH"Th!h#:9H"T9: DDi'%'%%)  h H h hHH:9H"ThhHH:9H"ThhHH:9H"ThhHH:9H"ThhH"T9(H"TH"TH"TP 9K :f P< 9!9!98!9}!:":":$6O$]Nc% AA& Ah& A& AM' A' A(?( A( A_) Az*:,:^,:, 0:i4C5J5GA A#C;AC<_C=}C:C=C<CDC?/D5D5D C9D'C=DECADcCEDCIDCMDC_D&:mD:{D<D;DUDDcDLML+MLCMM[MMsM MMM~<7M<OM-:gM<M?M]MMMMMMMNM-NMENM~<M< N-:!N<9N?QN]kNNoNNsNNwNN{NNN ON"<N<NNO%ODO`OHOxOLOOPOOTOOXOOlO"<O<ONO%OZRSRRTTTTTTU U U$U'VVVVFVcVTVVVVVVVTOWW[WWBXWnq} KoHiUbh|  (5Sem '7]| #0=PZr ),/7Rdgu ,2GMZw +CIOdj}(.1?LR_ly !'*>ADPSg  6BLbnx  '-7=GS *4:DJTZd -ps} *V_bnqt !1MUZ} GJWZd} q 4>LORX[ad{"%:NRVnru #&8ARX]`r{ #&258DNQTu .J[nN  +=AEQ[`ckuy}9NXa 4;Wp bPd JMfp +DNQ`k{PZ]0b4Hb!$)CX\_knq} BNQ%akru!,/>IL[fix #&69ENQ] %:t47~Fn :/? [7./I :V&Xm Qf(P 3Zmms  ',19KQUlArv FWj*1t| LVp (/7?EZ^d" K,C ~ExpressLoadK #@,B"#@,7# "'"t"";8 [" H{i HHY"hsH{i HHY"hQH{i HHY"h/H b"hEwF\ +;i k;8 [ihhH)  )/):t,"  rt ~  "- ʊВ h h h "H{i HHY"h 芅+;ik;8 ["$E  H"  H"  +;i k;8 [ "--hhhh hh "" F g // "MdffHHHHhchcH "h h "dd "Hhhhh H Hhhhh "//"dd "FH Hhchchh  dd " +;ik;8 ["H"hHHH"hh HHC""9""H"h*"JJhhH"hHH"hhHH"hhHH"hhHH"hhHH"hhh h"" "HH"h HH"h h hhIH HL"h"0""1"*"H66"h FHH"8 ZH`5]IH" H"H""Hhh H"+;ik;82 [ "x2H{i H"I H"+;i2k;8 [{iH "+;ik;8 [ HY"h " H` HHY"hx" hh8 H " H Hcchh + -i8pI0ʊmʊ&8 Hc,"+;ik;8 [) )  ʊ  Hcccc"/ 8 8 +;ik;8 [ ":     U   H H"& 0:#      N  ZH ihhh ih+;ik;8 [ "Hhh HhhI_ ) 5 cch)U )(ʊ$" Hm Hih   HZH" ii hhh" iH ihhh i cch h )  i    8hh8hhh   cch h  Hcih   cch h )  i   8hh8hhh "  cch"   cch h "  ih: i @:0" ZH?""+;ik;8 [ $Z:cz)/$Z:cz):.022hh.. "  {i h{i H) "+;ik!*/SYSTEM/DESK.ACCS/TransProg.DataIH7IHZ; [*8e쪥I+zzzkh@kK+-"p -8+Ik@k; [ 0  Ȁ    +;i kKzZڭHH; [Vi # " Ȁ " Ȁ  Z8czHHH H "$ Out of memory "\#h h  m  Ȁ    )s  "   i  ")0"!)      +hhkH h\#H ;[Fe+kK   H H "K;[c:zZګHi "  kInsufficient bank zero memory "JkH"E H"h")?CKZ\&^kKHH ;[$hHHhk֯HH"+hh`;8 [KH H"H H"d  1w    "  )@ H H"U H H"U ii d  +;i k  ;8 [KHH"n)bȷ8ȷ "  HH ;HH"& )d+;ik; [ +hzzH`; [8""9+hhkHH8H; [Zȷ\ȷ HH"+hhhhkK; [  8+hhzhhZګkHHH8H; [  "| % Q8  0 " " "|e i @< " "   "|Z ""+;i k; [ ȊwHwhȷ+;ikH; ["^ȿ`^`+hhkHHHHH; ["^`  ȷݠ^ȷ` ȷ+;i k:JJJJkhah-:Mw/fd5GXk/xddJ 68  $ U x  N >F2].;??C8sq" (>AM`coW\m}17=P[z8JM[hn{ ?IYfq|048KNT[^ht#-7:Z\_or~ !$;EH^amps'Ue 1ADor .1DG!7?BGRju|9K %5;PWZw=CI`m 47;]b-47F`pxILR %*3k?GNWZadg~_ ^qGW?U-_Mp1" 0%) *Lmt'c   ' 9 O" q        - PHI@' @3Z @' @* @F@ Fichier Edition  Lancer !Choix de l'application suivante :AnnulerCouperCopierCollerEffacerFermerQuitterA propos de TransProg Start...Autre...-Zz@XxCcVvWwQq-@- 0p0=JSTransProgS StartS v 1.01 par F.Uhrich Mai 1990 crit avec ORCA/C JL'ensemble STransProgS (Init, NDA, applications et documentation) est un SsharewareS. La copie de cet ensemble est lgale et gratuite, mais si vous aimez ce produit et voulez continuer l'utiliser, envoyez 90FF ($20 hors Europe) l'adresse suivante en indiquant votre version. Ce prix inclut une mise jour gratuite, ensuite vous serez inform des futures versions (gratuites l'exception des frais d'envoi): JFranois Uhrich 67 alle de la Robertsau 67000 Strasbourg FRANCE JSVOUSS seul pouvez me permettre de continuer dvelopper des produits que j'espre de qualit (!) des prix attractifs.=^ #0 36/J Volume *0 Introuvable/^ Insrer / Annuler 35/J Fichier *0 Introuvable/^ #0 35/J Fichier *0 Non Excutable/^ #0 52/JVoulez-vous vraiment Quitter ?/^ Eteindre / Quitter / Annuler %]G K,C ~ExpressLoadK @A@,F@@,7@ "9/"g7""39;8 [//H"፥: :"፥://"፥:+;ik;8 [)H )z8pI0ʊ+;ik;8 ["፥:H"፥:h/HH/H"፥:hh HHC"፥:"፥:9"፥:"፥:H"፥:h*"፥:1t9/  a{  ( ( ( .vx   "1hhH"፥:hHH"፥:h/h/HH"፥:h/h/HH"፥:h/h/HH"፥:h/h/HH"፥:h/h/HHa"፥:h/h/"I//// HH"፥:h lHH"፥:h hH HL"፥:h"፥:0"፥:"፥:1"፥:*"፥:H11"፥:h 11H"1'1)1H" !歆/I+//H "፥: H"፥:/H"፥:"፥:+;ik;8B [#%22"፥:22hhx2HFH{iH22"፥:2I 22H"፥:22HHcchh   # eH)  HHH"፥:h h 8hhH"፥:DHCG+;iFk;8 [HH""፥:hheHHHhchc/H "፥:hh HiH H"8 / / H{i H//HY"፥:hH"፥://H"_hh/0"፥:HHH"፥:hh H""፥: HH"፥:H "፥:HH H*"፥:H"፥:tH""፥:H"፥:H "፥:/0"፥: H`e+;ik;8 [ d"|9 "|9  +;ik;8 [H H!."፥:hEHH H""፥:hhH"፥:HH H3"፥:hhH"፥:HH H4"፥:hhH"፥:HH HC"፥:hhH"፥:HH HD"፥:hhH"፥:HH HE"፥:hhH"፥:HH H5"፥:hhH"፥:HH H""፥:hhH"፥:HH H3"፥:hhH"፥:HH H4"፥:hhH"፥:HH HC"፥:hhH"፥:HH HD"፥:hhH"፥:H H"."፥:h^HH H5"፥:hhH"፥:HH HE"፥:hhH"፥:\HH H5"፥:hhH"፥:HH HE"፥:hhH"፥:  +;i k;8 [HH"፥:hh"w:H "፥:HH332"፥:hhHH!/"፥:HH"/"፥:""{i H" 5H"H{i Hc &"፥: H3{i H "፥:H"H{i Hc &"፥: H4{i H "፥:  H{i Hc &"፥:H5{i H "፥:H"6H"፥:H"፥:H"፥:h!"@HH."፥:hIHH/"፥:H"63H{i H"፥:H{i Hc )H ("፥:h"w: % H{i H "፥:9.''{i H" 5H{i H "፥:,4H{i H"፥:H{i Hc )H ("፥:h"w: % H{i H "፥:9ɲ.,,{i H" 5H{i H "፥:v5oH{i H"፥:H{i Hc )H ("፥:h"w: # H{i H "፥:t</0"፥:HH!."፥:hZHH"."፥:hzH3{i H"፥: )/H{i Hc )H ("፥:hH4{i H"፥: )/H{i Hc )H ("፥:hH5{i H"፥: )/H{i Hc )H ("፥:hH""፥:H "፥:+;ik 543178;8  [ / / /[H//HY"፥:h芍/"# /"]/y""I////1"፥:KH//HY"፥:h,"&"d  -ڥ,"፥:  +;ik;8 [HHH"<9h 20  ʊ'"9 )H)8 +;ik;8 [::) 8"፥: HU"፥:HH"r"|9@2@2 c4"፥:{i Hi"HHHHJ"፥:{i HU"፥:{i HHi"HHJ"፥:@2@2@c4"፥:{i HU"፥:"፥:"፥:iH:"፥:)0 6"፥:iH:"፥:)i@H"፥:6)H"፥:iH:"፥:)H"፥:i#H:"፥:"፥:)"፥: "፥:HiHH"፥:8"፥:7"፥: +;ik;8 [ "፥: H@1>2HH//H 0"፥:h/h/HH//H 0"፥:h/h/HH//H 0"፥:h/h/HH//H 0"፥:h/h///H"፥://H"፥:H00 "፥:h/"w: -"፥:HY"፥:hHH"፥:h/h/"w: )"፥:H b"፥:h;//H "፥://///HHcch h HH/"9H/H "፥:h/h////="9eH"9 )  "9eiH"9i )  "9 ) H@1"9i ) H@1"9iZz"9iZzHH""9i H"፥:"9ihh"9i H H"9i hh//H""፥:HH"፥:hhH "፥:)JJJJJJJJH//c &"፥:)H//c ""፥:)JJJJJJJJJJJJi` / "፥:HH"፥:hh//H"፥:99//H/H//H"፥:22//H"፥:H"፥:"፥:+;ik;8 [//H "፥:// //HHcchh -""9iH"፥:ɤ+;ik;8 [ "፥:///H "፥:// //HHcchh HH""9iH"፥:hh"w:Hb"፥:hE""9iH"፥:"w:Hb"፥:hN////H""፥:/H"@5hchc//H"፥://H "፥://HHcchh// / /y"9eH"9)  "9eiH"9i)  "9i HHhhHH""፥:"9ihh"w:Hb"፥:h"9iH8""9iH "፥:"w:Hb"፥:h0"9i HH"9ihh{//H"፥://H""፥:"፥:/""፥:/"፥:/H "፥:"፥:+;ik;8 [ Q1.//H"፥:"L-//H"፥:")"L-"c+ hh  hhе  hhН  hh0H//H"፥:hH//H"፥:h  ,//H"፥://H"፥:~ ,//H"፥://H"፥:*//H"፥://H"፥:+;ik;8 [HH"፥:h h H"፥::"፥:"፥:{iHiH8HiVHi+HJ"፥:8"፥:{iHU"፥:{iHK"፥:@2@24"፥:{iHU"፥:7"፥:{iHS"፥:H"፥:h ) H"፥:"፥: i H "9c "9eH:"፥: "9e @1"፥: "፥:R*"፥: "9ei@H"፥:$"፥: "9eH"፥:D0"፥:8"፥:"፥: "፥: H"፥: +;ik;8 [HH222"፥:h h H"፥: H"፥: H"H1HH H5"፥:hhH"፥:HH "፥:{iHH  )HHHiH{iH"8 H5{iH "፥:HH""፥:/R  /  H3{i H "፥:/  H4{i H "፥: H3!"፥:HH H"፥:hh/H"፥:H"፥:H"፥:h H3{i H"፥: H4{i H"፥:34 H!"፥: ) )^ )V{i Hchh))  ) @1 H4)) "፥: 3 H4!"፥:3 ) ) @1 H)) "፥:3 ) ) )g6))z  {i H )g6)) ))_ )   ) @1I H4{i H "፥: H3{i H"፥: H4{i H"፥: H5{iH"፥: ) ))H"፥:H"፥:\ H3{i H"፥: )/ H4{i H"፥: )//^ /)///͢/// )/ H5{iH"፥:HH""፥:)HhchcHH"፥:HH "፥:HHH))H{iHHHiH"8HH""፥: H "፥: H "፥:+;ik;8 [//H"_ hh// H"/"I H"፥:/0"፥:H//H"፥:h////H""፥:/"9H//H"፥://H "፥:// "9Z/ z "9iZ/ z / H@1/ H@1"9iZz "9iZz "9i ȥ "9i ȗ HH"፥:hh//H"፥:99//H/H//H"፥:22//H"፥:H//H"፥:hH//H"፥:H"፥:+;ik;8 [/0"፥:// H//H"፥:h:"9i :"9i H Hhh-:"9i :"9 ) H@1:"9i ) H@13 / Q "9i  2 . 8 "9e H "9e H"5 /8 ///H""፥:/"9H//H"፥://H "፥:99//H/H//H"፥:+;ik;8 [// H//H"፥:h"9 )/ H@1/ #"9i )/ H@1/ @/^/"9i H"/"?/0"፥:"9Z/ z "9iZ/ z "9i H Hhh)""9i H"፥:HH"፥:h h//H"፥:99//H/H//H"፥:22//H"፥:H//H"፥:hH//H"፥: H"፥:"9 ) i@1@1H"9i ) H@1+;ikTransProg.Init v0.00 Normal Affichage IcneAnnuler$*/SYSTEM/SYSTEM.SETUP/TRANSPROG.INIT Attente ToucheDureOKK h2 h2 h2"Z2H2 2H 8kk.2N(3@33p3X333bsp 2aEo /3+4+C |,3Touche :D ,3ou5FS3404H4`4x444444X0f 2Xf4 /!  /": C /13p&4&58 E6CP(d4XD(4YE:G2HH; [    +;i k;8  ["-6' Y5OJ  e e f f ff` Y5  d Fejf)  @8 +;ik{;8[:ڥJ       {i +kd8d d 8k(((((‚ĄKzZڭ}:H{:H; [88Vi # " Ȁ " Ȁ  8Z8czHHH:H "$ Out of memory77 "\:h h  88m8  Ȁ  8 8 )s  "   i  ")0"!)    8 8 +hhkHH; [ 0  Ȁȗ +;ikH $;h\:; [ & dd  !F f+hhk'H; [*8e쪥+zzkh@kH ;[Fe+kK :};}:{: H:H "K;[:c:zZګ:Hi: " :::::::::::kInsufficient bank zero memoryF:F: "J:k:::H"::H"h")::K::&:kK8H8H ;[$M;M;hHHhk֯g=e=g=He=H";+hh`;8 [KH H">H H"<dy< y< ɡ=e=1e=e=w    s<" q< )@ H H"= H H"= ii d  +;i ky<=  ;8 [KHH">n)bQ=S=ȷU=8S=W=ȷU=Y= W=" O= HH =HH"? )d+;ike==e=; [ {;+hzzH`; [8"!>">+hhkHH8H; [:ȷ:ȷ HH"+hhhhkKy+;i k; [ ȊwHwhȷ+;ikH; ["@:ȿ:::+hhkHHHHH; ["@::  ȷݠ:ȷ: ȷ+;i k:JJJJk/C/-1122f/ 3 ". ' ,@2@20Y/}/92 @2:"2<%)%)*9+2-9.9.2Q/@13(3 3@3333p33X333 33432L3/3333343043H43`43x4444444 4444$42<4/T4/l4/144445287e:F:::::::::::9;M;<;M;;y<;e=y< !$0@FP*0Tjnr-369Lby':=HR~ )ax{ &6RbtPk #GJS !$07:FVo| Ban !$,03?UXor~7*:NpTx|'*.PU5#&),/258;>Ahx(,  !Pd=_!'t ,Dby_0Q 1I'CJQ2@W|A*a([r2K~+F}BZׂI9]aglq+9' >FSW] -'      G _ q "       % 3 A -O  N P]PL@ @O @C" Y@ Fichier Edition Options Choix Dmarrage...Icne...Application Ajouter :!Choix du Programme de Dmarrage :AnnulerCouperCopierCollerEffacerFermerSauverQuitterA propos de TransProg Config...-BbIiZz@XxCcVvWwQqSs-@- 0p0=JSTransProgS ConfigurationS v 1.0 par F.Uhrich Avril 1990 crit avec ORCA/C JL'ensemble STransProgS (Init, NDA, applications et documentation) est un SsharewareS. La copie de cet ensemble est lgale et gratuite, mais si vous aimez ce produit et voulez continuer l'utiliser, envoyez 90FF ($20 hors Europe) l'adresse suivante en indiquant votre version. Ce prix inclut une mise jour gratuite, ensuite vous serez inform des futures versions (gratuites l'exception des frais d'envoi): JFranois Uhrich 67 alle de la Robertsau 67000 Strasbourg FRANCE JSVOUSS seul pouvez me permettre de continuer dvelopper des produits que j'espre de qualit (!) des prix attractifs.=^ #0 54/JVoulez-vous sauver les modifications ?/^ Sauver / Abandonner / Annuler 70/JDmarrage Actuel S*0/ Slectionner / Normal /^ Annuler 75=JDsol mais **/SYSTEM/SYSTEM.SETUP/TRANSPROG.INIT est introuvable...=^ Quitter    P0 AaAjouter  ^0 MmModifier  0 Enlever " N  P (l   !"#$%&'()*+,-./O=====!====!====!====!====!====!====!====!====!====!====!====!====!====!====!===B~IntroductionR^evons un peu... >Une lettre urgente ? J'allume mon GS... Le disque d{marre...KIJ'appuie un instant sur la touche T alors que la temp{rature augmente au Afur et @ mesure que le thermom}tre me conduit vers le Finder...JHEt voil@ qu'au lieu d'atteindre ce Finder (ou tout autre s{lecteur...), JH{tape n{cessaire et inutile avant mon Traitement de texte favori, c'est ce dernier qui m'appara^it !!!JHMa r{ponse @ un membre de mon fan club (j'ai bien commenc{ par "R^evons JHun peu" !) {tant sur le point d'^etre achev{e, je d{cide d'y ins{rer un Hbeau dessin (qui comme chacun sait vaut mieux qu'un long discours...).IGJe s{lectionne alors dans le menu Pomme un Accessoire de Bureau qui me JHpropose un menu dans lequel je choisis le nom de mon logiciel de dessin ECfavori; ce qui a pour cons{quence imm{diate de me faire quitter le JHtraitement de texte et de lancer non moins imm{diatement le logiciel de JHdessin sans passer par la case d{part Finder !!! (et h{las sans toucher les 20 000F...) Cessons de r^ever...Voici TransProg v 1.0 EL'ensemble TransProg fonctionne sous syst}me GS/OS 5.0 et permet: IG- L'association des applications (ex{cutables GS/OS ou ProDOS 8) @ des FDtouches du clavier. La simple pression d'une de ces touches lors du Cd{marrage, pendant le thermom}tre, lance l'application associ{e !HF- La d{finition de l'application par d{faut qui sera lanc{e au cas o| aucune touche n'est appuy{e.KI- Enfin et surtout de quitter une application vers une autre directement GEsans avoir @ passer par le Finder; cela avec diverses options telles que la purge de la m{moire...KIL'ensemble TransProg (Init, NDA, applications et documentation) est un LJshareware. La copie de cet ensemble est l{gale et gratuite mais si vous MKaimez ce produit et voulez continuer @ l'utiliser, envoyer (au minimum...) OM90FF ($20 hors Europe) @ l'adresse ci-dessous en indiquant votre version. Ce KIprix inclut une mise @ jour gratuite (y compris le disque), ensuite vous IGserez inform{s des futures versions (gratuites @ l'exception des frais d'envoi): Fran\ois Uhrich67 all{e de la Robertsau67000 Strasbourg FRANCE MKVOUS seul pouvez me permettre de continuer @ d{velopper @ plein temps pour Jl'Apple IIgs des produits que j'esp}re de qualit{ @ des prix attractifs.NLTous vos commentaires, suggestions et (ne reculant devant rien !) m^eme vos 2critiques (constructives...) sont les bienvenus. Pour me contacter sur Minitel:7 5b.a.l. CIRITHORN ou TAROT sur 3614 RTEL1 ou RTEL2 ou  129040384*BACKSTER GL'ensemble TransProg contient des {l{ments de la librairie ORCA/C?copyright 1987-1989 by Byte Works, Inc. Used with permission.  $I. Description et Installation @L'Init et l'Accessoire de Bureau sont totalement ind{pendants.GECertains de ces fichiers contenant des ressources, leur installation LJn{cessite l'utilisation d'un copieur reconnaissant les ressources (Finder v1.3 par exemple). I.A. Init. $I.A.1. TransProg.Init (type PIF)  -* Installation: dans */SYSTEM/SYSTEM.SETUP.GE* R^ole: Init permettant par simple pression d'une touche sp{cifique G Ependant le d{marrage (durant l'affichage du "thermom}tre") de lancer G El'application li{e @ cette touche sans passer par le Finder ou autre s{lecteur. %I.A.2. TransProgConfig (type S16) .* Installation: dans */SYSTEM de pr{f{rence.HF* R^ole: programme permettant de configurer les touches du clavier en ? =fonction des applications d{sir{es. Le programme modifie les ! ressources de TransProg.Init. I.B. Accessoire de Bureau. #I.B.1. TransProg.NDA (type NDA) ** Installation: dans */SYSTEM/DESK.ACCS.FD* R^ole: accessoire de bureau permettant de quitter une application @ >directement vers une autre sans passer par le Finder ou autre s{lecteur. $I.B.2. TransProg.Data (type TXT) ** Installation: dans */SYSTEM/DESK.ACCS.FD* R^ole: texte utilis{ par TransProg.NDA dans lequel sont stock{s ; 9les noms et chemins d'acc}s de la liste des applications # apparaissant dans le menu du NDA. %I.B.3. TransProg.Start (type S16) D* Installation: s'il est utilis{, dans */SYSTEM sous le nom START.GE* R^ole: programme de Start minimal (environ 10Ko) reprenant le menu 4 du NDA tel qu'il est stock{ dans TransProg.Data. II. Utilisation II.A. Init. II.A.1. G{n{ralit{s. IGNormalement, lors du d{marrage d'un disque GS/OS, l'application lanc{e CAest dans l'ordre prioritaire */SYSTEM/START ou sinon, le premier IGex{cutable de type S16 (ou SYS) sur le r{pertoire principal et dont le )nom se termine par .SYS16 (ou .SYSTEM).KITransProg.Init permet de lancer au d{marrage n'importe quel ex{cutable JHde n'importe quel volume (en ligne ou non) MAIS, malgr{ tout, le disque GEde d{marrage doit obligatoirement comporter une application de d{but IG(START, .SYS16 ou .SYSTEM). Celle-ci peut ^etre le Finder, ProSel16 ou CAn'importe quel autre ex{cutable (notamment TransProg.Start qui !n'occupe qu'une dizaine de Ko). II.A.2. TransProg.Init. JHD{s que le thermom}tre appara^it, vous pouvez choisir l'application qui KIsera lanc{e par simple pression de la touche qui lui est d{di{e (inutile CAde rester appuy{ !). Attention, si vous pressez une touche avant GEl'affichage du thermom}tre, vous serez en mode pause du d{marrage de GS/OS ({cran texte)...ECIl est recommand{ pour des raisons de standardisation de conserver ?=l'affectation de la touche ESC au programme de configuration FDTransProgConfig. La touche DELETE lance toujours l'application de IGd{marrage classique du disque (START, .SYS16 ou .SYSTEM). Si plusieurs IGtouches ont {t{ enfonc{es, c'est toujours la derni}re qui est prise en compte.GEQuand TransProg.Init est ex{cut{, l'ic^one repr{sentant un losange IG(symbolisant une application) travers{ d'une fl}che est affich{e (cela ECbien s^ur uniquement si l'init est configur{ comme devant afficher Gl'ic^one). La suite d{pend de l'{ventuelle touche qui a {t{ enfonc{e:GE- Touche DELETE : l'application de d{marrage classique est lanc{e et l'ic^one dispara^it.JH- Touche valide : l'application correspondante est lanc{e et l'ic^one @ doubles losanges appara^it.IG- Touche non valide : si TransProg.Init est configur{ comme ayant un GEd{marrage normal, l'ic^one dispara^it et l'application classique est GElanc{e (comme pour DELETE). Si TransProg.Init a une application de B@d{marrage par d{faut, celle-ci est lanc{e et l'ic^one @ doubles losanges est affich{e.FD- Aucune touche : si TransProg.Init est configur{ comme ayant une FDdur{e d'attente et que celle-ci est diff{rente de 0, le thermom}tre HFs'arr^ete dans l'attente d'une touche. Si aucune touche n'est appuy{e B@@ la fin de la dur{e d'attente (ou bien s'il n'y a pas de dur{e FDd'attente...), le processus continue comme si une touche non valide B@avait {t{ press{e. Si la dur{e d'attente a pour valeur 0, alors @>l'ic^one se met @ clignoter ind{finiment dans l'attente d'une touche...FDAu moment de lancer l'application choisie, si le volume de celle-ci IGn'est pas en ligne, il vous sera demand{ (poliment...) de bien vouloir KIins{rer ce volume; si vous changez alors d'avis, appuyez sur ESCAPE pour JHcontinuer un d{marrage classique. Cette possibilit{ est tr}s utile pour )ceux qui n'ont qu'un lecteur de disque. II.A.3. TransProg Config. 3Ce programme permet de modifier TransProg.Init:3- Touches d{di{es @ des applications sp{cifiques.I- Application de D{marrage par d{faut (si aucune touche n'est appuy{e).DB- Affichage ou non de l'ic^one, position de cette ic^one et dur{e d'attente.B@Toutes ces modifications ne seront r{ellement effectu{es que si JHl'utilisateur s{lectionne l'option SAUVER du menu FICHIER ou bien apr}s 7confirmation au moment de QUITTER TransProg Config. $II.A.3.a. Touches et Applications. IGD{s l'arriv{e dans TransProg Config, une fen^etre contenant la liste ECdes applications s{lectionnables au d{marrage est affich{e. Chaque ECligne de cette liste est compos{e ainsi: au d{but les deux touches IG(couramment majuscule et minuscule d'une m^eme lettre) d{di{es @ cette 8application, puis le chemin d'acc}s de cette derni}re.GEEn plus de cette liste, la fen^etre comporte trois boutons: Ajouter, Modifier et Enlever. i) Ajouter. - Cliquez dans le bouton OU tapez "A" ou "a". C ADans une premi}re fen^etre, vous devez s{lectionner l'ex{cutable E C(GS/OS ou ProDOS 8) concern{; confirmez votre choix ou annulez-le; @ >puis si vous l'avez confirm{ appara^it une deuxi}me fen^etre; D Bindiquez les 2 touches qui lui seront d{di{es, les touches encore  libres sont affich{es. B @Si la premi}re touche est une lettre de l'alphabet, la deuxi}me F Dtouche sera par d{faut la majuscule ou la minuscule correspondante. E CSi la premi}re touche est ^ ,alors la deuxi}me indiquera la touche D BCONTROL concern{e: ^ -X pour Control-X (c'est @ dire CLEAR), ^ -[ E Cpour ESCAPE, ^ -I pour TAB...etc. Vous pouvez {galement modifi{ le " chemin d'acc}s de l'application. @ >Ceci termin{, vous {tes libre de confirmer ou d'annuler cette D Bliaison entre les touches et l'application; si vous la confirmez, A celle-ci est plac{e dans la liste suivant l'ordre alphab{tique.  ii) Modifier. F DCliquez dans le bouton OU tapez "M" ou "m" OU double-cliquez sur la - ligne de la liste que vous voulez modifier. F DLa fen^etre indiquant le chemin d'acc}s, les 2 touches {quivalentes < :et l'ensemble des touches encore libres est affich{e. Les D Bmodifications ne seront prises en compte que si vous cliquez dans  le bouton OK.  iii) Enlever. C APour supprimer plusieurs {l{ments de la liste en une seule fois, F Dutilisez les touches SHIFT (s{l{ction par bloc) ou POMME (ajoute ou E Cenl}ve de la s{l{ction). Cliquez dans le bouton "Enlever" OU tapez  la touche DELETE. II.A.3.b. Options.  i) D{marrage. F DDans le menu OPTIONS, s{lectionnez "Choix D{marrage". L'application E Cde d{marrage actuelle est affich{e: NORMAL pour START, ".SYS16" ou - ".SYSTEM", sinon le chemin d'acc}s complet. E CPour ne rien modifier, choisissez ANNULER; pour avoir un d{marrage D Bclassique, choisissez NORMAL; enfin pour donner le chemin d'acc}s A ?du programme de d{marrage, choisissez SELECTIONNER. Peut ^etre > choisi n'importe quel ex{cutable de n'importe quel volume ! = ;Aucune modification physique n'est effectu{e sur le volume @ >concern{, seul le chemin d'acc}s de l'application choisie est m{moris{. ii) Ic^one. C ACette option permet @ l'utilisateur de choisir d'afficher ou non E Cl'ic^one pendant le thermom}tre; d'indiquer o| sera affich{e cette E Cic^one ({vitez de la placer sur le thermom}tre...); la pr{sence ou @ >non d'une dur{e d'attente; et enfin la dur{e de cette attente E C(Rappel: la dur{e 0 correspond @ une attente infinie). Si l'ic^one ? n'est pas affich{e, bien {videmment il n'y a pas d'attente...  II.B Accessoire de Bureau. II.B.1. G{n{ralit{s. KILorsque l'utilisateur quitte une application, le syst}me GS/OS revient @ GEla derni}re application "empil{e": il s'agit d'une pile de type LIFO FD(Last In First Out) affect{e au Quit, o| sont conserv{s les chemins CAd'acc}s des programmes empil{s. Les s{lecteurs du type Finder ou JHProSel16 sont un exemple de programme empil{. Normalement l'utilisateur FDlance @ partir d'un s{lecteur l'application d{sir{e; puis lorsqu'il CAquitte cette derni}re, il revient @ son s{lecteur pour lancer le ECprogramme suivant. S'il n'y a plus de programme empil{, le syst}me Hchoisit l'application de d{marrage classique (Start, .SYS16, .SYSTEM).JHLe syst}me GS/OS offre une autre possibilit{ qui est de rendre r{sident JHen RAM une application que l'on quitte; lorsque l'utilisateur reviendra DBdans ce programme, le syst}me n'aura pas @ recharger du disque la FDtotalit{ de l'application. Cette possibilit{ est @ nouveau utilis{e FDquasiment exclusivement par les s{lecteurs: le retour au Finder est IGpresque instantan{ pour peu que le syst}me ait trouv{ assez de m{moire pour le conserver r{sident. II.B.2. TransProg.NDA. 0II.B.2.a. Lancement de l'application suivante. DBLa pi}ce ma^itresse du NDA est une menu d{roulant (de type Pop-Up B@Menu) contenant une liste d'applications que l'utilisateur peut HFd{cider de lancer. Si le programme d{sir{ n'est pas dans cette liste, B@il peut choisir l'article "AUTRE" qui lui donnera l'occasion de GEs{lectionner n'importe quel ex{cutable. Le bouton "LANCER AUTRE" est ){quivalent @ l'article "AUTRE" du menu.HFEn 2 clics de la souris, l'utilisateur peut donc quitter un programme ECvers un autre de son choix: s{lection du NDA TransProg, choix de :l'application suivante dans le menu du NDA, c'est tout !A?Si au moment de la quitter, l'application en cours demande une HFconfirmation et que l'utilisateur d{cide de rester dans ce programme, DBle NDA aura pour intitul{ "TransProg On" dans le menu Pomme: cela =;signifie que TransProg a "amorc{" le Quit vers une autre B@application, c'est @ dire que si l'utilisateur choisit l'option IGQUITTER du programme sans passer par le NDA TransProg, le syst}me de <:reviendra pas au dernier programme "empil{" mais ira dans HFl'application qui avait {t{ demand{e dans TransProg... Pour annuler GEce transfert, il suffit @ l'utilisateur de s{lectionner dans le menu %du NDA TransProg l'article AUCUN.IGSi l'application n'a pas Pomme-Q comme {quivallent clavier de l'option FDQUITTER (un seul exemple @ ma connaissance: DeluxePaint), TransProg FDn'arrivera pas @ quitter imm{diatement cette application mais comme HFd{crit ci-dessus il aura "amorc{" le Quit vers une autre application. Il suffit ;9donc @ l'utilisateur de s{lectionner l'option QUITTER de /l'application pour que le transfert advienne. II.B.2.b. Options. i) Purge. C ACette option permets de purger au maximum la m{moire apr}s avoir = ;quitt{ le programme courant et avant de lancer le suivant. F DTransProg affiche les diverses informations concernant la m{moire @ >avant et apr}s la purge: la RAM totale (bien {videmment cette : 8valeur ne change pas!), la RAM r{ellement libre, la RAM D Bactuellement libre et enfin la taille maximale de RAM cons{cutive  libre. ii) Pile. B @Si cette option est s{lectionn{e, l'application que l'on quitte C Asera empil{e sur la pile du Quit syst}me (voir II.B.1.): c'est @ E Cdire que la prochaine fois que l'utilisateur quittera un programme D Bnormalement, il reviendra dans cette application empil{e (@ moins / qu'une application ait {t{ empil{e apr}s...).  iii) R{sident. @ >Si cette option est s{lectionn{e, le syst}me GS/OS tentera de A conserver en RAM l'application que l'on quitte (voir II.B.1.). E CToutes les applications ne sont pas pr{vues pour ^etre r{sidentes: ; 9notamment il peut y avoir un probl}me avec les variables C initialis{es qui doivent normalement ^etre recharg{es du disque. E CBien {videmment la capacit{ m{moire du GS entre en ligne de compte D Bdans la r{ussite de la conservation d'un programme en RAM: en cas C de n{cessit{, le syst}me lib{rera la RAM d'un programme r{sident. %II.B.2.c. Modification de la liste. GEApr}s avoir s{lectionn{ le bouton "Modifier Liste", une fen^etre est FDaffich{e @ l'{cran. Dans cette fen^etre, on peut voir d'une part la FDliste des applications qui composent le menu du NDA et d'autre part ECcinq boutons: "Ajouter", "Modifier", "Enlever", "Annuler" et enfin "Sauver Liste". i) Liste des applications. , Cette liste est limit{e @ 40 applications. E CDans le menu du NDA, les applications ont un nom qui ne correspond B @pas obligatoirement @ celui de leur chemin d'acc}s: par exemple C A"Basic" au lieu de "BASIC.System". Pour chaque application de la C Aliste il y a donc deux cha^ines de caract}res m{moris{es: le nom , affich{ dans le menu et le chemin d'acc}s.C ALa liste comprend uniquement les noms mais lorsque l'utilisateur B @clique sur un nom, le chemin d'acc}s correspondant @ ce nom est affich{ au-dessus de la liste.  ii) Ajouter. F DL'utilisateur doit alors s{lectionner l'ex{cutable (GS/OS ou ProDOS D B8) qu'il veut ajouter @ la liste. Apr}s avoir confirm{ son choix, C Ale chemin d'acc}s de cet ex{cutable est affich{ ainsi que le nom C Apar d{faut. L'utilisateur a alors tout le loisir de modifier ces  deux cha^ines de caract}res. F DSi l'utisateur veut saisir directement ces deux cha^ines sans avoir F Dauparavant s{lectionn{ l'ex{cutable, il peut cliquer dans le bouton + "Ajouter" en maintenant la touche Option.  iii) Modifier. @ >Pour modifier un {l{ment de la liste, l'utilisateur peut soit F Dcliquer dans le bouton "Modifier" apr}s avoir s{lectionn{ l'{l{ment 3 en question; soit double-cliquer sur cet {l{ment.C ALe nom et le chemin d'acc}s sont alors affich{s et peuvent ^etre modifi{s.  iv) Enlever. C APour supprimer plusieurs {l{ments de la liste en une seule fois, F Dutilisez les touches SHIFT (s{l{ction par bloc) ou POMME (ajoute ou B enl}ve de la s{l{ction); cliquer alors dans le bouton "Enlever".  v) Sauver Liste. C ASi l'utilisateur d{sire annuler les modifications effectu{es, il E Clui suffit de s{lectionner le bouton "Annuler"; pour confirmer ces F Dmodifications, il doit s{lectionner "Sauver Liste". Dans ce cas, le A ?fichier */SYSTEM/DESK.ACCS/TransProg.Data est modifi{ sur le  disque de d{marrage. II.B.3. TransProg.Data. HFCe fichier de type TXT contient le nom et le chemin d'acc}s de toutes Ales applications apparaissant dans le menu du NDA TransProg. ECL'utilisateur peut modifier ce fichier gr^ace @ l'option "Modifier DBListe" du NDA, mais il peut aussi le faire par l'interm{diaire de B@n'importe quel traitement de texte pourvu que ce dernier puisse 3sauvegarder le texte dans un fichier de type TXT.IGVoici le format de ce fichier: pour chaque {l{ment de la liste, le nom JHest sur la premi}re ligne pr{c{d{ par un caract}re quelconque, puis sur A?la ligne suivante vient le chemin d'acc}s pr{c{d{ lui par deux &caract}res quelconques. Par exemple:$Basic$$/System.Disk/Basic.SystemKILe menu {tant limit{ @ 40 applications, TransProg.Data est donc limit{ @ 80 lignes. II.B.4. TransProg.Start. IGL'utilisation de ce programme est facultative. Il s'agit en effet d'un KIprogramme de d{marrage minimal (seulement une dizaine de Ko) qui utilise IGTransProg.Data pour cr{er comme dans le NDA un menu contenant le nom 1des applications que l'utilisateur peut lancer.HFLe menu contient bien s^ur l'article AUTRE pour lancer n'importe quel autre ex{cutable.KIPour utiliser TransProg.Start, il suffit de le copier dans */SYSTEM et de le renommer START.SCRIPTSv' w'TRANSPROG.US1  0,TRANSPROG.VF4  0FONT.DA.US7   0FONTE.DA.VF8  0START.US9  0START.VF:#  0{/U/M/M/M/M/M/M/M/M/M/M---"&)-AERV]С`ptmmm]/M/ U/U/U/U/&U/-U/4U/;U/BU/IUdgjmsvuw{ysuwy {ss"),/28;>CHNsQUmw菓DG,b̏   $' 4TW afi s : > Na #n c # # N    ! $ ' + < C G K O S V h l o s ~    5 9 ? B R 1 4 A G N )R U    11 1 x ɏ e Ǐ q / o   & & " , , T S̏"%(+,.1D?77H%U]rz㏇QgЖгж̫ikm'@мCO㏔EEEŏŏŏŏ1;>,GJz,,,,Q˖ˏ!/7b>>e>ڏڏ7777787777777777n77777777777777777777b ] =ϏƏ T44 4"4$4&4(4*4,4.0/256SCRIPT V1.10 RR TransProg VF Ce script installe ou enlve les fichiers ncessaires l'utilisation de l'ensemble TransProg v1.0. Le disque slectionn doit tre un disque de dmarrage. F. Uhrich avril 1990\\ :TransProg~* Ceci est le script de l'Installer ncessaire pour copier les fichiers TransProg de :TRANSPROG sur le disque de dmarrage de l'utilisateur. ~:::Workspace::: 1 TransProg.VF:TransProg.NDA System:Desk.Accs:TransProg.NDA ~:::Workspace::: 1 TransProg.VF:TransProg.Data System:Desk.Accs:TransProg.Data ~:::Workspace::: 1 TransProg.VF:TransProg.Init System:System.Setup:TransProg.Init ~:::Workspace::: 1 TransProg.VF:TransProgConfig System:TransProgConfig ~:::Workspace::: 1 Icons:TransProg.Icon Icons:TransProg.Icon ~~ 8  !"#$%&'()*+,-./01234567J/6w/:3/>/B0/Fb/Ss/W/[/_/c/g/k/////;/i////)/A/Y/q////5/M/e/}////G/_/w/ //////#/'7/;/S/kO/b/s//////+ /C!/Lt/P/T/X/\/`/d/h/l4///L/////(/@֏%%!#%%7'y)+-/1P35x/;)) .x .....͏.....(!.:#.T%.g'.{).+.-./.Ə1.܏3.5.//!/11{/A1SCRIPT V1.10 Rn TransProg Start VF Ce script enlve l'actuel programme Start et installe le Start de TransProg (environ 10Ko). Le disque slectionn doit tre un disque de dmarrage. F. Uhrich avril 1990 \\ :TransProg~* ~:::Workspace::: 2 TransProg.VF:TransProg.Start System:Start ~~ <=>HIJKLMNOPQRSTUVWXYZ[\]^_`a82 ,@BlueMonk BlueMonk 2K 4  g.  ")i.`H"d@hh R dhi@HHHH "BDF HHH"HH"46"1"1)1)1H1"484i H:"H""1"""hBhDhFhH`H1)Y"h` x'e.` q. " o.`x " (`) H& h& ` K; :88+Hv y u ,JH  8,h:ꍗ1 " T"` S$,D` 8"%HY"h` 4JiH  8Qh:`  jg.H,"`x(+++ "᭶+8`+i.k.m.` " " " " "0P8+J0)HH "h:+ "hm+)H "hP " "`HH"H  8h:HHE2"hhH"h> 02ڢ0  کhJiڢ/"ဧ ""`HH"H  8,h:HH2"hhH"h> ,02ڢ,0  ,ک,hJiڢ/"ဧS  e`HH"H  8Qh:HH2"hhH"h > 02ڢ0  کhJiڢ/"ဧHH" HH>2"hhH"h $ HJڢ/"R 7777787777777777n77777777777777777777 b]=  T 444444444Jw30b>>@\HX--A propos de Blue Monk\H---\D.>> Fichier \H--Ouvrir \H*Oo--Fermer\H*WwD--Sauver \H*SsD---\D--Format d'impression \HD--Imprimer \H*PpD---\D--Quitter \H*Qq--Lancer une application \H*Ll.>> Edition \H--Annuler\H*ZzD---\D--Couper\H*XxD--Copier\H*CcD--Coller\H*VvD--Effacer\HD---\D--Texte entier\H*FfD.>> Options \H--Recoder \H*RrD---\D--Configurer High Society \H---\D--Rgler la temporisation \H .>> Caractres \H--Choisir une police \H D.>> Aide \H--AEPC vers Apple\H --Apple vers AEPC\H --AEPC vers Apple blue\H --Apple blue vers AEPC\H--Enrichi vers GSwrite\H--Enrichi vers strict\H--High Society\H--Sources Merlin 16+\H--Ascii bas\H.2dsXMf X- /dT ,- ;7- iB- JFOptions pour quitter ?- quitter GS.OS avec conservation du RamDisque- quitter GS.OS avec redfinition du RamDisque" retour l'application prcdenteOKAnnuler2)AYqX X  N +N 6N AN JFTemporisation 1 minute 2 minutes 3 minutes 4 minutes 2x/G_w7m? m rO  b s  +  6  A  L  W  b !JFRecodages AEPC vers Apple Apple vers AEPC AEPC vers Apple LittleBlue Apple LittleBlue vers AEPC! Texte enrichi vers ASCII GSwrite Texte enrichi vers ASCII strict High Society Sources Merlin 16+ ASCII bas(t4n n .,LL9 D O 9 D  O JFHigh SocietyF {}|\ ^a^e^i^o^u aeiou ->  @ -> []# ->  MAJMIN -> Majmin AEae -> OEoe -> "" -> ܈\{|}#[]aeiou%%%؅ćʧʹʵʯʽʰʱšʎao'AAO-Y/,AEAEEIIIIOOOUUU؅ćЛɧšƤʎij߀@\{}|[#]@@CENOUa@aaaa\{}eeiiiinooooou|uu [c#][ BRCT'~ A0 Y a0 AAOOo__""'' yY/o<>ff .,, AEAEEIIIIOOOOUUU 7y !"#$P&'x(0/\$0/AEPC vers Apple Recode un fichier texte import du monde MSDOS l'aide des utilitaires PC.TRANSPORTER. Les caractres tendus communs aux mondes Apple et MSDOS sont recods en fonction de la carte officielle Apple. Tout caractre tendu MSDOS n'existant pas chez Apple est remplac par un espace collant./^#00/\$0/Apple vers AEPC Recode un fichier texte Apple. Les caractres tendus communs aux mondes Apple et MSDOS sont recods en fonction de la carte officielle MSDOS. Tout caractre tendu Apple n'existant pas en MSDOS est remplac par un espace collant. Le fichier rsultant pourra tre expdi dans le monde MSDOS l'aide des utilitaires PC.TRANSPORTER./^#00/\$0/AEPC vers Apple LittleBlue Recode un fichier texte provenant du monde MSDOS en fonction de l'implantation des caractres dans la police LittleBlue. Tous les caractres communs aux deux univers seront leur place habituelle chez Apple./^#00/\$0/Apple LittleBlue vers AEPC Recode un fichier texte gnr sous AppleWorks GS avec la police LittleBlue. Tous les caractres seront recods selon les normes MSDOS. Le fichier rsultant pourra tre expdi dans le monde MSDOS l'aide des utilitaires PC.TRANSPORTER./^#00/\$0/TEXTE enrichi vers ASCII GSwrite Les 8 caractres des fichiers modernes sont recods en @{}|\ []# afin de pouvoir les relire avec GSwrite ou AppleWorks+SuperFonts. Les autres caractres tendus restent inchangs./^#00/\$0/TEXTE enrichi vers TEXTE strict Permet de passer un texte moderne dans un circuit pur texte. Les 8 caractres sont recods en @{}|\ []#. Les caractres enrichis comme le ou le sont remplacs par leur quivalent non 'accentu' soit ici, A et O. Les tendus pour lesquels il n'y a pas d'quivalent sont remplacs par des espaces./^#00/\$0/High Society Permet de passer un texte ancien ou gnr en ASCII par GSwrite dans un programme moderne. Les @{}|\ []# sont recods en . Les squences 'avec circonflexe' ou 'avec trma' d'AppleWriter ou d'AppleWorks sont remplaces par . Peut aussi passer en minuscules l'exception de la premire lettre de chaque mot./^#00/\$0/Sources Merlin 16+ Remplace les espaces tabulants par de vraies tabulations permettant une impression correcte dans AppleWorks.GS. Il restera placer les taquets de tabulation./^#00/\$0/Ascii bas Met zro le bit haut de tous les caractres. Option utile pour les sources Merlin et pour les fichiers provenant de quelques anciens traitements de textes./^#00/L41)/ `JFBLUE MONKF vous permet de transfrer des fichiers ASCII : MS.DOS vers GS.OS et vice-versa, fichiers ASCII gnrs par AppleWriter, AppleWorks ou mme GS/Write vers les programmes natifs modernes: AppleWorks GS, Beagle Write, Medley (C) Yvan KNIG 1990  Version F-0.7`^#002n4/Le document a t recod ou modifi. Voulez-vous le sauver?/^ Oui / Non Slectionner un document : Destination :Choisir le fichier lancer:2#aU*OKErreur GS.OS :Erreur :GS.OS occupUnit introuvableErreur d'E/SProtection d'critureUnit non en ligneSyntaxe incorrecteTrop de fichiers ouvertsVolume pleinDirectory pleinErreur de versionType non supportFin-de-fichier rencontreFichier verrouillFichier dj ouvertType non supportPlus de mmoireFichier en doubleCe n'est pas un disqueN de bloc trop grandMmoire insuffisante !ID indisponible !$0000x,,,,,,,,--(-:-T-g-{-------.'+/@BHIJKLNPRTWXZ     "!/ 80???303330?3<0??30?303?0<3333?33?3333O?3??ODO??OOO N{1{1{{{ tb 7:=@WZ_isw{ ,/29AGJMSV_ehk{"&)-AERV`ptgmv ",/28;>CHNQUmwGb $'4TWafis :>an!$'+Jz+!/7e  "$&(*,.0!#%')+-/135 !#%')+-/135A1111{1/!/;))/@(Ll4hd`\XTPLtC!+ sbkOS;'7# w_G/}eM5qYA)i;/kgc_[WSsFbB0>:36w2Jb>GE@+++++?7 o. 1) 1R 11 1? 1S 1)++++s*j+d*IUBU;U4U-U&UUUU UMm*]1-1MMMMMMMMMMUD++{*u*i*.x,`,],U,M,.0f.i.z)BLUE.MONKcZ6δ δ z.LITTLE.BLUE.12Ȁ6 pz.LITTLE.BLUE.24ȇpzdefghijklmnopqrstuvwxyz{|}~T,CRob Turner ~ExpressLoadT 22r ,@BlueMonk BlueMonk 52 ,@BlueMonk BlueMonk 2K 4  g.  ")i.`H"d@hh R dhi@HHHH "BDF HHH"HH"46"1"1)1)1H1"484i H:"H""1"""hBhDhFhH`H1)Y"h` x'e.` q. " o.`x " (`) H& h& ` K; :88+Hv y u ,JH  8,h:ꍗ1 " T"` S$,D` 8"%HY"h` 4JiH  8Qh:`  jg.H,"`x(+++ "᭶+8`+i.k.m.` " " " " "0P8+J0)HH "h:+ "hm+)H "hP " "`HH"H  8h:HHE2"hhH"h> 02ڢ0  کhJiڢ/"ဧ ""`HH"H  8,h:HH2"hhH"h> ,02ڢ,0  ,ک,hJiڢ/"ဧS  e`HH"H  8Qh:HH2"hhH"h > 02ڢ0  کhJiڢ/"ဧHH" HH>2"hhH"h $ HJڢ/"R 7777787777777777n77777777777777777777 b]=  T 444444444Jw30b>>@\HX--A propos de Blue Monk\H---\D.>> Fichier \H--Ouvrir \H*Oo--Fermer\H*WwD--Sauver \H*SsD---\D--Format d'impression \HD--Imprimer \H*PpD---\D--Quitter \H*Qq--Lancer une application \H*Ll.>> Edition \H--Annuler\H*ZzD---\D--Couper\H*XxD--Copier\H*CcD--Coller\H*VvD--Effacer\HD---\D--Texte entier\H*FfD.>> Options \H--Recoder \H*RrD---\D--Configurer High Society \H---\D--Rgler la temporisation \H .>> Caractres \H--Choisir une police \H D.>> Aide \H--AEPC vers Apple\H --Apple vers AEPC\H --AEPC vers Apple blue\H --Apple blue vers AEPC\H--Enrichi vers GSwrite\H--Enrichi vers strict\H--High Society\H--Sources Merlin 16+\H--Ascii bas\H.2dsXMf X- /dT ,- ;7- iB- JFOptions pour quitter ?- quitter GS.OS avec conservation du RamDisque- quitter GS.OS avec redfinition du RamDisque" retour l'application prcdenteOKAnnuler2)AYqX X  N +N 6N AN JFTemporisation 1 minute 2 minutes 3 minutes 4 minutes 2x/G_w7m? m rO  b s  +  6  A  L  W  b !JFRecodages AEPC vers Apple Apple vers AEPC AEPC vers Apple LittleBlue Apple LittleBlue vers AEPC! Texte enrichi vers ASCII GSwrite Texte enrichi vers ASCII strict High Society Sources Merlin 16+ ASCII bas(t4n n .,LL9 D O 9 D  O JFHigh SocietyF {}|\ ^a^e^i^o^u aeiou ->  @ -> []# ->  MAJMIN -> Majmin AEae -> OEoe -> "" -> ܈\{|}#[]aeiou%%%؅ćʧʹʵʯʽʰʱšʎao'AAO-Y/,AEAEEIIIIOOOUUU؅ćЛɧšƤʎij߀@\{}|[#]@@CENOUa@aaaa\{}eeiiiinooooou|uu [c#][ BRCT'~ A0 Y a0 AAOOo__""'' yY/o<>ff .,, AEAEEIIIIOOOOUUU 7y !"#$P&'x(0/\$0/AEPC vers Apple Recode un fichier texte import du monde MSDOS l'aide des utilitaires PC.TRANSPORTER. Les caractres tendus communs aux mondes Apple et MSDOS sont recods en fonction de la carte officielle Apple. Tout caractre tendu MSDOS n'existant pas chez Apple est remplac par un espace collant./^#00/\$0/Apple vers AEPC Recode un fichier texte Apple. Les caractres tendus communs aux mondes Apple et MSDOS sont recods en fonction de la carte officielle MSDOS. Tout caractre tendu Apple n'existant pas en MSDOS est remplac par un espace collant. Le fichier rsultant pourra tre expdi dans le monde MSDOS l'aide des utilitaires PC.TRANSPORTER./^#00/\$0/AEPC vers Apple LittleBlue Recode un fichier texte provenant du monde MSDOS en fonction de l'implantation des caractres dans la police LittleBlue. Tous les caractres communs aux deux univers seront leur place habituelle chez Apple./^#00/\$0/Apple LittleBlue vers AEPC Recode un fichier texte gnr sous AppleWorks GS avec la police LittleBlue. Tous les caractres seront recods selon les normes MSDOS. Le fichier rsultant pourra tre expdi dans le monde MSDOS l'aide des utilitaires PC.TRANSPORTER./^#00/\$0/TEXTE enrichi vers ASCII GSwrite Les 8 caractres des fichiers modernes sont recods en @{}|\ []# afin de pouvoir les relire avec GSwrite ou AppleWorks+SuperFonts. Les autres caractres tendus restent inchangs./^#00/\$0/TEXTE enrichi vers TEXTE strict Permet de passer un texte moderne dans un circuit pur texte. Les 8 caractres sont recods en @{}|\ []#. Les caractres enrichis comme le ou le sont remplacs par leur quivalent non 'accentu' soit ici, A et O. Les tendus pour lesquels il n'y a pas d'quivalent sont remplacs par des espaces./^#00/\$0/High Society Permet de passer un texte ancien ou gnr en ASCII par GSwrite dans un programme moderne. Les @{}|\ []# sont recods en . Les squences 'avec circonflexe' ou 'avec trma' d'AppleWriter ou d'AppleWorks sont remplaces par . Peut aussi passer en minuscules l'exception de la premire lettre de chaque mot./^#00/\$0/Sources Merlin 16+ Remplace les espaces tabulants par de vraies tabulations permettant une impression correcte dans AppleWorks.GS. Il restera placer les taquets de tabulation./^#00/\$0/Ascii bas Met zro le bit haut de tous les caractres. Option utile pour les sources Merlin et pour les fichiers provenant de quelques anciens traitements de textes./^#00/L41)/ `JFBLUE MONKF vous permet de transfrer des fichiers ASCII : MS.DOS vers GS.OS et vice-versa, fichiers ASCII gnrs par AppleWriter, AppleWorks ou mme GS/Write vers les programmes natifs modernes: AppleWorks GS, Beagle Write, Medley (C) Yvan KNIG 1990  Version F-0.7`^#002n4/Le document a t recod ou modifi. Voulez-vous le sauver?/^ Oui / Non Slectionner un document : Destination :Choisir le fichier lancer:2#aU*OKErreur GS.OS :Erreur :GS.OS occupUnit introuvableErreur d'E/SProtection d'critureUnit non en ligneSyntaxe incorrecteTrop de fichiers ouvertsVolume pleinDirectory pleinErreur de versionType non supportFin-de-fichier rencontreFichier verrouillFichier dj ouvertType non supportPlus de mmoireFichier en doubleCe n'est pas un disqueN de bloc trop grandMmoire insuffisante !ID indisponible !$0000x,,,,,,,,--(-:-T-g-{-------.'+/@BHIJKLNPRTWXZ     "!/ 80???303330?3<0??30?303?0<3333?33?3333O?3??ODO??OOO N{1{1{{{ tb 7:=@WZ_isw{ ,/29AGJMSV_ehk{"&)-AERV`ptgmv ",/28;>CHNQUmwGb $'4TWafis :>an!$'+Jz+!/7e  "$&(*,.0!#%')+-/135 !#%')+-/135b>GE@+++++?7 1) 1R 11 1? 1S 1)++++s*j+d*m*]1-1D++{*u*i*.x,`,],U,M,.0f.  &-4;BI26:>BF SW[_cgk5Me} #';Sk+CLPTX\`dhl(@;1A Little.Blue    L #I@( @R")@@( @"E@ 0 ( @R")@@( C~:"\G8_78s>3߿~  ?w)RR @0;0((P @R")@@( C%*bDcE(D@A$ID$PTEI" H@@ E$HE8@@( @R")@@( CU'@PcFq@D@AS(QIDQBDbq<}=2t۽}FPqL;69wLٳf.CA< %D/H@ :)0#)CP(A^g@@|@AQDQPD@B*ebdP%"JP(OcĄ!F1H"A))?[%2jy2D>CB/i1B"BGD@A^DQPB@yE*EbC$EPyt?!F1dH"$CAd%.jHIID/S{xx#P)#(*"DA"gBDHEhP@D A@EB*Eb@PB>Т(E!@!F1H"LCA%SHFD( PKJ0"( )@P( #(@"HQ" tH("DHEdI(D !@"*EbDRAE"E"(EcĄ!F1$ɓ&GAX<%HIIE) KJ"( )@P( #(0D q;#<38 s@w>{?lAM;;Fu];pCf͛'?;ω@2:( KJ"( )@P( #*  L@@!?@( @KJ"( )@P( mpp88 A聀( KJ"( )@P(  %&),168=>BGLQV[`ejotuw} %,39<@BGNPV\aglpv}  &,28?EJOTY^chmry~ ")/28?FIOT[bglmqw|  &*/49@GLSZahov{ Little.Blue ~ "pA@*UZ03  003 3 30 "#@`a?~U@03  003 3 30!0 px?xx0`0 1 CÀ UZ03  003 3 30?$,!IH !A "0t $`!0 a! $ H@Ip90!!` qH"0 $C"`LC!*U@Q03  003 3 30?D!I$A  `4 $b!`b!D  @I 0(#! BA@" BAA ` ?? Aa !UZ`03  003 3 30?! $B   @ $"!@"D D  @IP ("   @A ` Aa`c| U@@03  003 3 30?p(B (   !$B   @IP@$$@Ac ` #p(<"a004` UZ@03  003 3 30?!P (@/(  `<"A!$ P>< r|?C9yßI"@$$|>x|üx8s8q"A ` 39(0"a`gy  a U@@03  003 3 30?  H@!0`$ `(D"A! D$p J@PA ð aH@@#a @"! $I"@"$BA$ af@fa ` I0a @h PUZ@@O?  0? 33?D 0  H@!X C HD >!@D $ J@  b @H@"@ @" $IA@"$ D @$@$ @8` ;O0 0a@` "!LUp@@O?  0? 33?$( '  H@A0DD "A!$' Q@P@$ BI@"H@" P@IA@!$|H`@ BD# ` 0`0 a@` B,UZ 00 3  ?H@ 0HaD"A"!$$@Q@P0@' BJ@"H@@ @!@!$a !0@ BD%A ` H 0a @pG?@ ?U 00 3  ?@`Q @@0H<@B " !$@Q@@@$ BM@"H@@ @I@ "@0H @ DIc `  ̅a@@ȃ d@!@B,*UZf??? 0??30?B`! @0@B@ $" !@"D @ $ BH@"H@@PI    $@H @ H ?` a@  b"!FUpf??? 0??30? B`Q A H `"`$ $" ! `bD  b @H@@"@ @ID0 c d @ @$@$ @  ?` ,6<c B b @UZf 00 00303 300?C ` B0`b``"0 $`BA 0a  0 aH @"aB!@IDa a 1 !4Faf@faDC0C1 _` c @H  a aUpf 00 00303 300?`x` χ_<x x<8O| y?<@I x;x>?>>0 `*U@f|00 00303 3008`UZf00 00303 300`U@f00 00303 300 &.:FGKOV_cnot} ,8CO\ir}(5@DIMVdhs "-6?KXep} #1<FPZdnx +5?JVbku "'.5CNYbckw~ )5?LT^dnx $2@N\jt|e qui il ne manque qu'une fonction d'dition pour tre parfait, permet de recoder les fichiers pour qu'ils restent corrects dans l'application d'arrive (Le devenu { redevient un ). Ceci du monde MS.DOS PC Transporter au monde Apple II, mais aussi dans le monde Apple II d'Appleworks 1.4 Appleworks GS par exemple. C'est un outil fantastique qui procure un gain de temps norme notre rdaction qui se bat souvent avec des fichiers gnrs avec les applications les plus diverses. Mais, il ne s'arrte pas l ! On peut imprimer le fichier charg, en totalit, mais aussi en partie, le couper-coller fonctionne et en cas de fausse manipulation, une fonction texte entier vous restitue le fichier sans accs disque. Nous vous recommandons d'utiliser BlueMonk pour imprimer les fichiers GS Infos. Et en plus: la date et l'heure dans la barre de menus et une fonction qui teint l'cran suivant une temporisation dfinie par l'utilisateur. BlueMonk ne fonctionne que sous GS/OS 5.0.(Possder cette version du systme est INDISPENSABLE, absolument INDISPENSABLE ! ce n'est pas une simple volution, mais une rvolution et ne pas l'avoir, c'est se priver de l'usage des logiciels qui sortent actuellement) BLUE.MONK se trouve dans le dossier PROGRAMMES et contient: - Les fichiers sources - 2 fontes pour les changes MS.DOS-GS/OS - BlueMonk version du programme gnre par Merlin - Blue.Monk version du programme compacte et "expressload" ASS10 Aprs une absence de deux numros, nous revoicis dans le monde merveilleux de l'criture d'une application pour Apple IIGS. Ce retard dans la poursuite de la srie s'explique en partie par la rception (tardive, EXTREMEMENT tardive de la doc du systme 5.0), cela au moment o le systme 6.0 commence circuler, mais aussi par un travail fou... Toujours est-il que le nouveau systme modifie considrablement la faon de programmer, qu'il apporte un certain nombre de nouveaux outils (TextEdit, Overlay Tool...) et que nombre d'outils ont t compltement revus (Control Manager, QuickDraw Aux...) Rassurez-vous, ce que vous avez appris dans le premier article, reste valide et meme plus, c'est toujours la faon la plus rapide de programmer un GS (rapide au sens vitesse d'xcution). En revanche, ce n'est plus la manire la plus simple. Ce nouveau systme apporte trois innovations majeures: _ Un Control Manager rcrit, trs, trs simple mettre en oeuvre. _ TextEdit, qui est le traitement de textes d'AppleWorks GS convertit en un outil, deux exceptions prs. _ Le Resource Manager, qui apporte la souplesse et une facilit de modification de l'apparence visuelle d'un programme au prix d'une certaine lenteur et d'un rapprochement suspect avec le Mac, suspect puisque le GS n'est pas un Mac et contrarier cette "loi naturelle" n'est pas vraiment pour me plaire, mais c'est un jugement personnel. Avant de commencer, je voudrais justement dcrire les diffrences entre la version 5.0 et la 5.0.2. o Liste des bugs de la version 5.0 corrigs dans la version 5.0.2 _ Le ProDOS FST corrige un bug qui affectait les appels Write suivis d'un SetEOF sur des fichiers de type "Sparse". _ Le Resource Manager ne ferme plus toutes les resources lors d'un appel ResourceShutdown mais uniquement les resource appartenant l'application courante. _ La fonction CopyPixels de l'outil QuickDraw Auxiliary effaait alatoirement des donnes, ce n'est plus le cas. _ Standard File n'a plus de problmes lorsque l'utilisateur slectionne un fichier alors que le volume le contenant a t ject. Les minuscules sont ignores lors du tri d'une liste. Les procdures de filtre reoivent un AuxType correct. _ TEGetText n'est plus entach des nombreux problmes qui taient les siens. La suppression d'un "SuperBlock" n'entraine plus le plantage du systme et l'utilisation de controles n'entraine plus la destruction alatoire de GrafPorts. _ Le Dialog Manager alloue maintenant un handle fixe ce qui prvient l'effacement de portions de mmoires lors des appels xxxAlert (agent triple x). _ L'utilisation d'un appel AddToRunQueue ou d'un RemoveFromRunQueue ne laisse plus le Desk Manager dans un tat "actif". Quickdraw est maintenant capable de dessiner des objets de plus de 160 octets de large. >>>> Conclusion: Il vaut mieux utiliser ce systme et pas l'autre. Ceux qui ont command l'Apple IIGS Epluch ont certainement reu leur exemplaire et n'ont probablement pas regrett leur achat, c'est un excellent bouquin. Certes, il y a quelques erreurs, c'est invitable, et il est peut-etre d'un abord un peu ardu pour les dbutants, mais ceux-ci, s'ils sont membres du GS Club, n'ont pas de soucis se faire car ils bnficient de l'aide des conseillers. Cela dit, la "devise" des auteurs, "No Tools" n'est pas de mise ici, mme si les outils ne sont pas aussi rapides qu'ils pourraient l'etre, ils ralisent simplement et en assurant la compatibilit (contrairement ce qui est crit dans le livre cit plus haut) des oprations qu'il serait vraiment trop ardu de programmer avec les mthodes expliques dans le livre (dans le genre d'un diteur de textes, multi-fenetres, multi-polices...). Et maintenant, en route pour de nouvelles aventures... Ce mois-ci, nous verrons _ Comment utiliser ExpressLoad _ Comment initialiser les outils et profiter du gain de vitesse du nouveau systme. Dirty Henri in the jungle of GS/OS & ExpressLoad Initialisation, complment d'information. Pour complter ce qui a t dit propos de l'initialisation de GS/OS, il existe une squence bien pratique pour dterminer le nom de votre application (son nom sur le volume) ainsi que le prfixe afin de construire un chemin d'accs signifiant pour grer les segments dynamiques. ExpressLoad et les numros de segments... Dans les temps anciens de ProDOS 16 et de GS/OS 4.0, bref avant notre monde civilis, il existait deux appels mythiques LGetPathName et LGetPathName2, le premier renvoyant une chaine de caractres de type Pascal, le second une chaine GS/OS. Malheureusement, la conversion sous ExpressLoad pertube le fonctionnement de ces appels, bien pratiques, ma foi. Heureusement, il y a une alternative. Si. C'est une squence de rcupration du prfixe par dfaut que nous avons vue il y a quelques mois, qui, suivie de l'appel GetName fait rendre grace ExpressLoad. ExpressLoad est une possibilit dont personne ne doit se priver, car un programme sous compatible ExpressLoad fonctionnera avec GS/OS 4.0. Certains ont crit qu'il fallait appeler les segments par leur nom pour l'utiliser. En fait, on peut tout aussi bien utiliser l'appel LoadSegNum qui renvoit l'adresse d'un segment dont on indique l'identit du programme auquel il appartient, son numro de fichier et le numro du segment en question mais incrment de 1, puisque ExpressLoad ajoute un segment DATA en tete du fichier OMF. Ce principe est utilis par des programmes comme le Finder ou AppleWorks GS, il ne vous est donc pas interdit. Allons, tout ce que fait le Finder n'est pas mauvais... mauvaise langue. Comment crer un programme ExpressLoad Les thoriciens s'opposent sur ce point il me parait bon d'viter l'esprit partisan en proposant les deux mthodes. 1re mthode: je ne change pas de compilateur mais d'utilitaires La compilation se fait toujours par LINKED mais une fois le programme li, je lance l'utilitaire COMPACT qui va convertir les segments OMF 1.0 en segments version 2.0 puis j'utilise l'utilitaire EXPRESS qui se charge de rendre le programme compatible ExpressLoad. En bref cela donne quelque chose comme: ASML Mon.Pgm keep=Example Compact Example Express Example -o Exemple Delete Example Contrairement l'utilitaire Zip de Glen Bredon ou l'utilitaire Compact, Express produit un fichier xcutable dont le nom doit etre diffrent du fichier source. Cela dit, Zip n'est pas compatibles avec les Segments OMF 2.01 et en consquence, ne peut pas, pour l'instant, etre utilis. C'est un peu lourd. Il existe une autre mthode: 2me mthode, je change de compilateur, en fait, d'utilitaires Apple propose un nouveau compilateur qui est un utilitaire. Son nom: LinkIIGS. Celui-ci compile des fichiers objets produits aussi bien par l'Assembleur 1.1 que le 1.0, c'est heureux, c'est ce dernier que j'utilise. Avantage: il convertit automatiquement les segments au dernier format en vigueur (2.01) et il produit des segments ExpressLoad. Inconvnient: ce linker est incapable de lier les entits xxx.A et xxx.Root, elles doivent etre auparavant concatnes en un seul fichier. Pour cela, il faut utiliser l'utilitaire Join. L'exemple plus haut devient: Join Mon.Pgm.A Mon.Pgm.Root Mon.PGM LinkIIGS Mon.Pgm -o Exemple J'utilise indistinctement les deux mthodes en fonction du nombre de programmes qui doivent etre joints. Mon APW (version 1.0) refuse obstinment l'utilisations de l'astrique (*) comme marque de dbut de commentaires. Si on ote ces commentaires de l'utilitaire CrunchIIGS, il est possible d'utiliser la commande: Crunch Mon.Pgm la place de join... On ne peut pas s'en plaindre ! Systme 5.0 et initialisations, corrections. a) Gnralits Le systme propose maintenant un moyen simple d'initialiser les outils dans une squence correcte (ce qui va finir par devenir un exploit, vu le niveau d'interdpendance des outils). L'ordre de dmarrage des outils est primordial, c'est le cas de le dire. Ainsi, le Desk Manager doit etre initialis en dernier et shunt en premier sous peine de plantages rptitions. Bref, comme cela devenait touffu, y compris pour les gens d'Apple, deux nouvelles fonctions compltent le Tool Locator. On utilise maintenant un appel StartupTools (code $1801) pour dmarrer une liste d'outils qui peut etre rfrence par un pointeur, un handle ou une resource, au retour, la fonction renvoit un pointeur ou un handle pour la fonction ShutdownTools. Avant d'aborder la mise en oeuvre de ces fonctions, je voudrais indiquer que l'initialisation de deux outils apporte de nouvelles amliorations de la vitesse de fonctionnement, il s'agit de QuickDraw II et du Window Manager. Il est maintenant possible d'utiliser un second buffer vido hardware en banc $01. L'allocation de ce buffer (si l'occupation mmoire le permet) est controle par le bit 15 du paramtre masterSCB, 1, le buffer vido sera allou, 0, il ne le sera pas. Le gain de vitesse est thoriquement de l'ordre de 8 20% pour toutes les oprations, mais Apple n'utilise pas le quart de la moiti de ce qu'un tel buffer autoriserait, en particulier en ce qui concerne la restauration du fond de l'cran aprs l'affichage d'une alerte ou d'un menu. Si vous programmez une application qui change de rsolution en cours de fonctionnement, vous devez etre averti tape deux pages de listings pour vous donnez des solution de jeux... Et au risque de me rpter , A bon entendeur salut. Si vous vous dcidez donc m'envoyer une petite lettre : CYRIL DREYFUS CENTRE MURAT 143 BD MURAT PARIS 75116 Ce mois -ci j'ai test pour vous GRAND PRIX CIRCUIT : GRAND PRIX CIRCUIT d'ACCOLADE ou l'art de lifter Test drive II : Il y a une ressemblance trs troublante entre Gpc et Td II ,je dirais mme plus il y a une ressemblance troublante ; rien d'tonnant puisque tous deux viennent de la mme bote Accolade. Seuls deux points les diffrencient : _Dans Gpc on court sur un circuit contre des concurents. _Gpc benificie de quelques options supplmentaires. Mais ils restent toujours aussi injouable : une innovation dans le sport automobile : une Maclaren Version.Gpc aussi rapide qu'un escargot (aprs son repas). Aprs une prsentation fracassante qui laisse prsumer le meilleur ,vous accdez au tableau des options. Une fois en piste et aprs avoir choisi votre pays vous effectuez un tour pour les qualifications.Si on peut allouer une qualit au jeu proprement dit ,c'est a ressemblance (mis par la vitesse) avec les vritables courses.Quoi de neuf par rapport Td II ? vous bnficiez dans cette 'nouvelle version' de : _Une "bote d'information" qui vous donne votre position,le nombre de tours raliss,et le temps qu'il vous reste. _Une carte vue arienne _Un arrt changement de pneus Personnellement ce n'est pas mon genre de jeux.Mais on peut aimer ,qui sait ? NOTE : 11 PRIX : 350 Fttc DISPONIBLE : Brjoux INSTALLABLE SUR DISQUE DUR : NON Maintenant en tant que testeur de jeux j'aimerais vous parler de SPACE HARRIER DEMO de FTA (j'en profite pour remercier FTA de leur fantastique demo : Nucleus). La musique de space harrier t faite partir de sound smith ,c'est tout dire. vous pouvez l'admirer durant le jeu et la page de prsentation.Les couleurs sont un dlice et ct animation c'est srement la version la plus fluide et la mieux reussie de toutes les versions pour tous ordinateurs confondus.Tout a pour vous dire qu'ils ont du talent les programmeurs de FTA et qu'on peut les remercier. Enfin la suite de la solution de POLICE QUEST : repasser au bureau prendre votre coquipire - allez au jardin et faite attendez cach en maintenant le contact radio de temps autre - un dealer change alors de la drogue , contactez le commissariat , hurler "police" puis faites un raport - le dealer s'est envol mais rattrapez le drogu et suivez la procdure d'une arrestation (dans le manuel d'utilisation !!!) - puis l'emmener la prison pour "drugs use" - retourner au commissariat - cherchez jack et suivez les instructions - demandez cheets de vous aider - allez donc voir la seine locale ,hoffman y est mort - retournez voir morgan suivre les instructions (les instructions pour la teinture sont sur la flacon) ,puis retourner chez morgan en lorgnant bien sur le tlphone pour connatre le numro de morgan - suivre les ordres et descendre boire un coup - l vous rencontrerez cheets comme prvu puis commander au bar "poker" - ensuite remontez applez morgan puis les renseignements (0) pour un taxi pour cheets - allez recommander un "poker" - suivre les instructions du manuel pour le jeu de poker - avec 500$ en poche retournez dans votre chambre - prenez le bic radio du collgue seul - retournez au poker - gagnez puis acceptez l'invitation - appelez vos confrres avec le bic radio - et VOILA. Et voici une autre solution de jean au look d'enfer (PS : jean,m'aurais-tu oubli ?) solution de UNINVITED : sortir de la voiture rapidement, (elle explose) - ouvrir la boite aux lettres droite ,ouvrir la lettre ,prendre le talisman ,fermer la lettre ,fermer la bote ,entrer dans la maison - aller tout droit - monter au premier tage , ouvrir la premire porte droite - prendre l'anti ghost :"NO GHOST" ,revenir dans le couloir -aller la deuxime porte droite - prendre la hache , revenir dans le couloir - descendre au 1er ,ouvrir la bouteille anti ghost , ouvrir la 1re porte gauche : une "femme" apparat de dos ,faire : NO GHOST operate FEMME ,elle disparat , jeter la bouteille, aller dans la salle d'o vient la femme - aller tout droit - prendre la cage , revenir - aller a droite - c'est la salle manger , prendre le bouquet de fleurs sur la table,aller gauche - c'est la cuisine ,aller droite - prendre la boite d'allumette (match box) - revenir dans la salle manger , aller droite - prendre la deuxieme porte droite - faire HACHE operate CHAISE DE GAUCHE, une clef apparait la prendre - aller au 1er etage - prendre la 1ere porte gauche - ouvrir l'armoire au fond avec la clef ,prendre la boite marron , fermer l'armoire - revenir dans le hall avec les deux chaises , ouvrir la boite d'allumettes , prendre deux allumettes ,fermer la boite , allumer une allumette (allumette operate boite d'allumette) -, puis allumer le feu dans la cheminee (allumette operate cheminee) ,le feu est allume , mettre la boite marron dans le feu ,un talisman apparait , le prendre , aller dans le couloir - prendre la 1ere porte gauche , c'est la "Rec room" - aller tout droit - aller tout droit et sortir de la maison - aller dans la serre tout droit - prendre le pot vide , l'arroser avec l'arrosoir (arrosoir operate pot) -, ressortir et revenir vers la maison - aller droite vers la chapelle - parler au chien et lui dire (un des deux) : INSTANTUM ILLUMINARIS ABRAXAS , ils disparaissent le passage est libre , entrer alors... allumer une allumette et allumer le chandelier , poser la cage et la hache , prendre le chandelier et la croix sur l'hotel , l'hotel bouge mais ne pas y attacher d'importance , parler la statue droite et dire : SPECAN HEAFOD ABRAXAS ,elle parle son tour et ouvre un passage a gauche , sortir par ce passage - un fantme apparat mais fuit devant le chandelier allum ,revenir dans la chappelle - posez le chandelier et prendre la cage , resortir vers la gauche - aller tout droit dans le labyrinthe - le chemin a suivre :haut,gauche,gauche,haut,haut,gauche ,gauche,haut,haut,haut,haut,droite,droite,droite,doite ,!!!,droite,droite,bas,bas,%, gauche. !!! : attention au zombie ! faire : TALISMAN(celui de la boite aux lettres) operate ZOMBIE... % :deposer le bouquet de fleurs devant la croix ,elle se deplace... Une fois devant les cages les ouvrir avec la clef de l'armoir des animaux sortent , mettre le corbeau en cage (cage operate corbeau) , le serpent mange le chat et devient sans danger - faire bas,bas - ouvrir la cage , le corbeau s'envole et le monstre va le poursuivre , prendre ce moment le diamant ,et revenir au point de dpart - haut,haut,droite,haut,haut, gauche,gauche,gauche,gauche,gauche, gauche,bas,bas,bas,bas,droite,droite,bas,bas,droite,droite,bas,bas, revenir dans la chapelle, poser la cage - revenir prs de la maison, aller gauche au Magisterium - faire correspondre le diamant dans le haut de la porte , elle s'ouvre alors ,entrer - durant toutes` ces aventures la plante grandi dans le pot elle a des fruits , faire PLANTE operate MONSTRE , il mange une baie et s'enfuit , aller tout droit - ouvrir le coffre-fort , le code est : 79-47-80 (les nos atomiques de l'or , l'argent et du mercure), il s'ouvre , prendre la boite biscuit , fermer le coffre. aller dans la chappelle ,et faire HACHE operate BOITE , elle se casse et il reste un biscuit , le prendre - revenir alors dans la maison , dans la rec room , poser le biscuit par terre et faire marcher le poste a droite , puis le petit monstre rouge que l'on a deja vu passer vient prendre le biscuit pos terre et laisse un clef - prendre la clef noire , et revenir dans la salle de chimie avec le coffre en dehors de la maison - ouvrir la trappe sur le sol et descendre - aller a gauche tout de suite - un homme parle , faire ensuite TALISMAN (celui de la boite marron) operate GLACE (toute la piece en fait) - un esprit du feu apparait et fait tout fondre , suivre le corps donc aller tout droit - mettre le corps dans le trou de gauche et aller a gauche - ouvrir la porte avec la clef noire ,sortir - on se trouve dans la maison ,aller au 1ER etage - prendre la 2ieme porte a gauche - aller a droite dans la salle de bain et ouvrir le robinet de la baignoir , l'eau coule, faire LAMPE operate LAMPE ( la lampe au plafond ) jusqu'a ce que le niveau d'eau soit important deans la piece , monter par la trappe fermee. faire CROIX operate GARCON (le garcon c'est votre petit frere celui que vous deviez retrouver au debut du jeu et la croix c'est celle de la chapelle) un dmon sort de lui et votre frre s'enfuit avec fracas par la fentre , faire alors CROIX operate DEMON il disparat...Haut...et vous n'avez plus qu' attendre la musique et mettre votre nom sur le diplme qui confirmera que vous avez gagn ! de la prsence d'un bug lorsque vous utiliserez ce second buffer hardware. En effet, dans ce cas prcis, les pixels maps de vos fenetres sont fixes en $012000. Mais CtlNewRes ne semble pas supporter cette addresse. Il est donc ncessaire de "parcourir" la liste des fenetres pour transformer le $012000 en $E12000. Un deuxime bit du paramtre masterSCB permet lui aussi un gain de vitesse sur une SERIE d'oprations QuickDraw. Il s'agit du bit 14 qui controle ce que l'on appelle les FastPorts. Les FastPorts permettent d'viter les changements de patterns entre deux oprations de meme nature. Par exemple, si je veux dessiner 3 cercles et en effacer 2 autres, il me faut d'abord effacer les deux cercles puis en dessiner les 3, dans ce cas, QuickDraw II ne modifiera sa pattern de dessin que 2 fois au lieu de 5. Ce bit est le 14me de masterSCB, 1, FastPort est actif, 0, il est inactif. Il existe dans le sous-rpertoire FONT un fichier du nom de FastFont qui regroupe plusieurs faons de dessiner la police systme. Beaucoup d'applications ne vont pas chercher plus loin que a. Si vous dessinez en dehors de l'cran graphique, utilisez les fonctions OpenPort et InitPort pour allouer votre GrafPort. La deuxime modification assez importante concerne le Window Manager. Lorsque vous initialiserez le Window Manager avec StartupTools ou si vous utilisez l'appel RefreshDesktop (ce que fait systmatiquement StartupTools) il se dessinera la pattern du Finder. Mais ce n'est pas obligatoire. En effet, le Tool Locator garde la trace d'un "message" qui contient soit la pattern de fond utiliser lors d'un RefreshDesktop, soit les donnes caractrisant une image. Ce message peut trs bien etre lu et modifi au moyen de la fonction MessageCenter. Pour grer les outils, le Tool Locator fournit deux appels: StartUpTools (code $1801) et ShutDownTools (code $1901). Ils manipulent essentiellement ce qu'Apple nomme un "StartStop record" ce qui n'est autre qu'une structure qui prcise l'initialisation quels outils je veux utiliser et comment, StartUpTools compltant cette structure pour ShutDownTools. Voici l'organisation de cet enregistrement: offset nom description sommaire ! ! ! v v v $00 flags Mot - Drapeau, doit etre zro $02 videoMode Mot - Mode vido pour QuickDraw II $04 refFileID Mot - champ complt par StartUpTools $06 dPageHandle Long - handle de la page zro, champ complt par StartUpTools $0A numTools Mot - nombres d'entres dans "toolArray" $0C toolArray "numTools" ToolSpec records videoMode Ce drapeau cod sur un mot dfinit le mode vido pour QuickDraw II. L'octet de poids faible donne la valeur du SCB tandis que les bits 15 et 14 commandent l'utilisation du second buffer vido ainsi que les FastPorts. resFileID Il s'agit du numro de fichier des resources. dPageHandle Handle de la page zro. Il est allou par StartUpTools et stock cet endroit car ShutdownTools en a besoin pour l'opration inverse. toolArray Chaque entre dfini un outil dmarrer. Le champ numTools donne le nombre d'entres, entre qui est organise comme suit $00 toolNumber Mot - Identificateur de l'outil (son numro) $02 minVersion Mot - Version minimale rclame toolNumber Indique l'outil que l'on dsire charger. toolversion Donne le numro de version partir duquel on peut initialiser l'outil. Conformment ce qui est dfini pour tous les nouveaux appels du systme 5.0 manipulant des structures, cette table de paramtres peut etre dsigne par un pointeur, un handle ou une resource dont les numros de rfrence sont, respectivement, 0, 1 et 2. Voici comment utiliser StartUpTools: Phd rservons un espace sur la pile pour obtenir un pointeur Phd ou un handle sur la structure StartStop modifie Pushword My_ID Pea $0000 nous utilisons un pointeur Pushlong Tools_Table _StartUpTools bcc Loadtools_ok brl fatal_error loadTools_ok anop PullLong res_ToolsTable stockage du rsultat _InitCursor * Nous avons initialis QuickDraw Aux, StartUpTools affiche alors une montre * InitCursor affiche la flche si familire... * ... suite du programme Lorsque l'on indique un pointeur, le systme renvoit un pointeur (en pratique, il indique la meme adresse qu'en entre). Si on prfre utiliser un handle ou une resource, alors l'outil renvoit un handle. Pour la routine de sortie, nous allons utiliser ce rsultat de la faon suivante: Pea $0000 un pointeur, si nous avions utilis un handle Pushlong res_ToolsTable ou une resource, il faudrait empiler $0001. _ShutDownTools * ... res_ToolsTable ds 4 Tools_Table anop ds 2 flags video_mode Dc i'$C080' Aux_buf+Fast_Ports / Mode 640 res_fileID ds 2 dpage_HANDLE ds 4 num_Tools dc i'12' dc i'4,3' dc i'5,3' dc i'6,3' dc i'$0E,3' dc i'$0F,3' dc i'$10,3' dc i'$12,3' dc i'$14,3' dc i'$15,3' dc i'$16,3' dc i'$1D,3' Text Edit dc i'$1E,1' resource manager En ce qui concerne, les prfixes, il en existe un nouveau, qui est le prfixe . Eh oui, :, c'est comme le prfixe *: qui dsigne le volume de boot, sauf que celui-ci dsigne le volume utilisateur par dfaut et qu'il peut rfrencer un volume AppleShare partir duquel l'application a pu etre lance. Maintenant, est-il ncessaire de l'utiliser ? Non, bien sur, sauf si on crit une application tirant parti d'AppleShare, ce qui est une gageure en France puisque le manuel est quasi-introuvable. Et aussi parce que la version d'AppleShare distribue par Apple aujourd'hui ncessite un Mac comme serveur de fichiers, alors qu'il est tout fait possible de s'en passer, ce qu'Apple sait pertinemment puisqu'ils l'ont ralis. b) Le Resource Manager Si nous utilisons une resource comme lieu de stockage de la table de paramtres, vous en dduisez trs justement que le Resource Manager doit etre en tat de marche (vous le dduisez car vous etes membre du GS Club, par consquent, malin, dans le cas contraire, devenez membre, vous recevrez le disque deux mois plus tot, vous profiterez des conseils gratuits de tous les conseillers). En fait, c'est le Startup Tools qui va dmarrer automatiquement le Resource Manager et charger les "PreLoad" resources, les resources qui doivent etre en mmoire aprs l'enregistrement de l'application dans les tablettes du Resource Manager. A propos, il se peut que vous trouviez difficile d'obtenir un source partir des exemples essaims au cours de la srie, mais cela est voulu car si l'on propose un source comment tout bete, personne ne cherche comprendre comment il fonctionne mais essaie de modifier telle ou telle routine avant de le recompiler, mais cette srie est faite pour que vous criez et non pas pour que vous copiiez. Si on veut faire cela la main c'est bien sur possible, nous allons voir comment: BufferTooSmall equ $004E Find_Pgm_Name Anop Pushlong My_Name Lao-Tseu a dit: "Les plus grands programmes" Pea $2027 commencent par une simple ligne de code" Jsl $E100B0 Bcc Got_Name Cmp BufferTooSmall Beq Yes_Retry_GetName Brl Fatal_Error Yes_RetryGetName Anop Ldx $0000 Taille haute du handle allouer Phx Reserve space for address of Handle Phx Lda My_ID On va former l'ID du Handle allouer Eor $0200 GS/OS ram_ID: 12xx Tay *^ ! Lda Buffer_PgmName+2 !- on distingue plus clairement * l'origine d'une ID Inc A Inc A Jsr Get_Memory * Je ne teste pas la russite de l'appel; si on ne peut pas allouer un handle * d'une vingtaine d'octets, les carottes sont cuites. Pla en revanche, je dpile l'adresse du Handle Sta My_Name+2 Sta $00 stockage en page zro pour rfrence ultrieure Pla Sta My_Name+4 Sta $02 Lda Buffer_PgmName+2 Inc A Inc A Sta $00 Bra Find_Pgm_Name Got_Name Anop Pushword My_ID _ResourceStartUp ($021E) Ldy 2 on rcupre la longueur Lda $00,y Inc A Inc A Sta $00 Lda '/1' nous sommes sous APW Sta $00,y Phd Pushword My_ID Pushlong My_Name J'indique l'adresse du nom du programme _OpenResourceFile Pla Sta Res_File_Number * ... My_Name Dc i'1' pCount Dp 'Buffer_PgmName' <-- en fin de compte, cette adresse contient * le chemin d'accs complet de l'application Res_File_Number Ds 2 Buffer_PgmName Dc i'4,0' ... * Sous-Programme d'allocation mmoire: * * En entre: X-A: Taille haute-Basse, Y: ID * * En sortie: X-A: Handle haut-Bas * Sur la pile, l'adresse du rfrence par le Handle Get_Memory Anop Pha prserve la taille (basse) du handle Lda $03,s je copie l'adresse de retour pour pouvoir utiliser Sta $07,s l'espace destin au retour des paramtres. * * Si je veux une routine appelable partir d'un autre banc: * Phb prservation du banc de donnes * Lda $03,s * Sta $05,s * Lda $01,s * Sta $03,s * Mais alors l'espace n'est plus que d'un mot * Pla Phd Phd Phx Taille haute Pha Taille basse Phy ID Mem_Attr Pea %1100000000001000 attributs Lda $0000 ^ Pha !--- pas d'utilisation de mmoire spciale Pha bancs $00,$01,$E0 et $E1 _NewHandle Bcc DeReference_Handle Plx A = Code d'erreur Plx Rts Dereference_Handle Anop Phd on prserve le pointeur de page zro courant Tsc Tcd la pile devient la page zro Lda $03 offset $01: Ancien pointeur de D Sta $09 offset $03: Handle nouvellement allou par le Ldy 0002 Memory Manager Lda $03,y offset $07: Adresse de retour Sta $0B offset $09: Long - Espace pour paramtres Pld Pla Plx Rts Quelques remarques propos de ce dernier sous-programme. Il vous montre comment utiliser l'adressage relatif la pile (tout au moins un mode d'adressage relatif la pile) ainsi que la faon dont on peut crer des variables locales sur cette meme pile. Certes, il est possible de dfinir des adresses en page zro o ce meme sous-programme pourrait stocker les valeurs qu'il doit retourner. Il est aussi possible de modifier les attributs du handle allou par la fonction, tout simplement en prservant la valeur par dfaut, en indiquant une nouvelle valeur et en restaurant la valeur originelle aprs l'appel: Lda Mem_Attr+1 on prserve l'ancienne valeur Sta Old_Attr Lda %1000000000000000 Sta Mem_Attr+1 * ... on appelle la fonction Lda Old_Attr on restaure les attributs par dfaut Sta Mem_Attr+1 Les tools APW 1.1 comporte un nouveau fichier de macros qui propose une batterie de fonctions pour la dfinition et l'utilisation de variables locales sur la pile. Il se trouve que contrairement ce que pourrait laisser croire l'exemple ci-dessus, je ne suis pas trop partisan de telles mthodes, du moins sur un GS 2.5MHz pour deux raisons majeures; la premire tant que l'utilisation d'un registre de page zro non align sur une frontire de page diminue la vitesse d'xcution des instructions accdant cette page zro, la deuxime raison tant que cette pratique rend le debugging particulirement difficile. L'utilisation de la pile comme rceptacle des variables locales est d'un grand intret... en environnement multi-processeurs/espace mmoire commun, cela est loin d'etre une ralit sur GS, par consquent je ne crois pas que cela soit trs utile. a disquette GS CLUB 125 Calva et GS CLUB 133 Apple IIGS 90 contiennent ce run-time). Pour un usage commercial, une licence doit tre paye. Questions diverses ------------------ A la question de la dernire fois, comment crire et utiliser une XCMD une rponse de R.Wagner lui-mme. Vous trouverez dans le sous-dossier XCMD.Sor.Code du dossier LES.PLUS , une explication complte de l'criture d'une commande externe pour Hyperstudio. L'exemple est repris en plusieurs langages ( Assembleur APW et Merlin, ORCA Pascal et C, TML Pascal II) uleur, 1 lecteur 3.5p, 2 lecteurs 5.25p avec carte contrleur Apple, 1 D.Dur SCSI 20Mo Mgastore avec carte SCSI Apple, carte acclratrice Transwarp GS, systme franais GS/OS 5.0. Plus logiciels originaux: Appleworks GS, Gribouille, Copy II plus, Prosel, VS File, SuperMacroWorks, Ultra MacroWorks, Print Shop avec Sampler et Party Edition, Wintype, Marble Madness, Space Quest, Basket Ball. Prix de vente 14 000 F M. BRUERE Loc: 5 impasse de Saint Maud 56270 PLOEMEUR Tlphone: 97 83 18 25 -------------------------------------------------------- Recherche logiciel CRISTEL (serveur pour Apple 2 et modem Digitelec) version PRODOS. ICONSvմ' '/GSINFOS10.ICONS ԴԴV */GSINFOS/GSinfosGSINFOSSX(ffffoffffffffffffffzwwzwzzwzzwzzwzzwwwzwzzwzwzwzzwzwzzzzzwz  /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  16 palettes par J.P Arnaud (Volume 2) Toujours de superbes images en slide show. GSCLUB.125 Com V.1.0 par D.Ottello L'animateur de la cit Apple II sur calvacom nous a envoy cette disquette. Elle contient des programmes plutt orients communication: Blu et Shrinkit compacteurs et dcompacteurs de fichiers, Kermit et Talk is Cheap programmes de communication Une pile Hyperstudio avec son run-time prsentant Calvacom et ses possibilits. IIGS Minitel,Tlphone, XY Modem: trucs et astuces de communisic) - formater les chaines caractres (assembleur) - cross-Works : un ensemble de liaisons pour passer d'IBM Apple. ( programme et cables) AMPERSAND --------- - numro reprenant des articles dj parus dans la revue. ( Un best off, en quelque sorte). Je rappelle que si vous voulez que cette revue continue, il vous faut envoyer des articles............ sur le IIgs. Et ne venez pas vous plaindre si, comme vous ne faites rien, les revues GS disparaissent. cation. GSCLUB.126 DB Master V.5 de Stone Edge Il ne s'agit pas d'une dmo, mais bel et bien du programme de base de donnes en mode texte. Stone Edge a dcid de le diffuser en shareware $45. Une documentation imprimer est incluse sur le disque. Ce programme trs puissant est encore au catalogue Brjoux juin 90 1500,00F GSCLUB.127 Jeux One Arm Battle (super machine sous) et Mage Maze (labyrinthe en mode graphique) GSCLUB.128 Space Harrier Demo par le FTA Une dmo du clbre jeu d'arcade une vitesse poustouflante. GSCLUB.129 Stormtel V.3.0 dmo par CDSTI La dmo du serveur RTC de CDSTI GSCLUB.130 Hiroglyphes 1 GSCLUB.131 Hiroglyphes 2 GSCLUB.132 Hiroglyphes 3 par A.Elkoubi Soyez Champollion et plongez au coeur de cette pile hyperstudio en 3 disquettes Ncessite Hyperstudio.GS/OS 5.0 GSCLUB.133 Le GS en 90 par Brjoux Tous les produits Brjoux dans une pile hyperstudio. Cette disquette ne ncessite pas le logiciel pour tre utilis. GS/OS 5.0. is option will be removed, changed, or otherwise be different at some point in the future. While HyperStudio will read the data fork from extended files, it does not yet support the resource fork. That is, the Resource Manager is not started. Do not start or attempt to use the Resource Manager at this time. It may conflict with a future version of HyperStudio. A word of caution to APW and ORCA/M users: Apple Computer, Inc., has supplied new utilities for APW to assist in developing applications under GS/OS V3, which is on System Disk V5.02. Some of these utilities deal with creation and manipulation of OMF2 files. These new utilities were NOT used for this effort. There are some compatibility issues between the old OMF1 utilities and the new OMF2 utilities. XCMDLIB is delivered in OMF1 format. It may not be usable with the new OMF2 utilities. If you run into problems with the new OMF2 utilities, report them to Apple Computer, Inc. ================================================================ Merlin Assembler The original version of the XCMD exerciser was written by Eric C. Mueller, using Merlin 16+. The existing version in this package has been significantly modified to make it easier to understand the mechanics of using the assembler language subroutine interface to HyperStudio. Several macros were added to shorten the length of the code, make it easier to read, and make it easier to compare to the high level language versions. For example, routine GetTheData was originally more than one page of code, and difficult to read, follow, or understand. It is now a few lines of code, and almost identical to the high level language versions. For QuickDraw II applications, a significant burden in assembly language is keying in the dialog templates. A new macro, DITEM, was written for that purpose. Note that operands for Merlin macros must be separated by semi-colons. The first operand for DITEM is the dialog item number. The second operand is a rectangle specification, with two points in (y,x) coordinate form. These values are separated by commas. The entire list of four numbers is treated as one operand. This was necessary since Merlin macros are limited to 8 parameters. The directory MERLIN.ASM contains the source file, macro file, object file, linker file for creating the object and load file, plus the HS.XCMD generic load file itself (file type $BC). See the Fall 1989 issue of Call -A.P.P.L.E. for a further discussion of HyperStudio XCMDs. The final Merlin version of the exerciser program file is just over 3K in length (memory required for execution). ================================================================ APW or ORCA/M Assembler This file is a direct conversion of the Merlin assembler code. Of course, many of the shortcuts of Merlin were taken out (local labels for example). The macros were rewritten and placed in the macro file. Otherwise, the code is pretty much the same. Since APW does not have a set of "super macros", the length of the source file is significantly longer. The programmer is responsible for additional stack and register manipulation to get the same job done. MOVELONG and MOVEWORD are from an early version of the macros delivered with APW. You will find two calls that use "00" as a parameter instead "0". This is due to a bug in the original macro definition. The generated code is the same. In some cases, you will find fewer comments in the APW version. This is a result of the conversion process. See the Merlin version for details. The directory APW.ASM contains the source file, macro files, object file, build file for creating the object and load file, plus the HS.XCMD generic load file itself (file type $BC). The final APW version of the exerciser program file is just over 3K in length (memory required for execution). ==============?????????<<<???<