$C+ ' ON BREAK GOSUB verif ' ramdisk!=TRUE ' RESERVE FRE(0)+MALLOC(-1)-170000 !cad reserver 170000 octets de buffers ' init musique init2 main ' PROCEDURE xx IF FRE(0)max_xx% !ET ON L'EMPECHE DE SORTIR DU SETMOUSE max_xx%,MOUSEY !CADRE FIXE ELSE IF MOUSEXmax_yy% SETMOUSE MOUSEX,max_yy% ELSE IF MOUSEY8 AND paragraphe_lu!(i%)=FALSE IF indicateur!(indicateur_paragraphes_prealables%(i%))=TRUE icone_objets!(reference_objet%(i%))=TRUE ENDIF ENDIF NEXT i% ' hide_screen2 !ON MASQUE PUDIQUEMENT L'ECRAN CLS palette(palette_bureau$) SPUT bureau$ !AFFICHAGE DU FOND FOR i%=1 TO nombre_objets% !AFFICHAGE DE L'ICONE DE CHAQUE IF icone_objets!(i%)=TRUE !OBJET OU IL RESTE DES TEXTES A LIRE PUT objet_x%(i%),objet_y%(i%),icone_objets$(i%) ENDIF NEXT i% show_screen2 !ON REAFFICHE L'ECRAN D'UN SEUL COUP ' CLR objet% !RAZ DU NUMERO DE L'ICONE OBJET DESIGNEE REPEAT !ON SCANNE LA SOURIS POUR DESIGNER UNE ICONE OBJET vigil(0,0,319,160,TRUE) FOR i%=1 TO nombre_objets% !L'ENDROIT CLIQUE CORRESPOND A UNE ICONE??? IF icone_objets!(i%)=TRUE !(SEULEMENT SI CELLE-CI EST ALLUME) IF souris_x%>=objet_x%(i%) AND souris_x%<=objet_xx%(i%) AND souris_y%>=objet_y%(i%) AND souris_y%<=objet_yy%(i%) AND souris_bouton%=1 objet%=i% !OK? ON MEMORISE SON NUMERO... ENDIF ENDIF NEXT i% UNTIL objet%<>0 !ON CONTINUE JUSQU'A TEMPS QUE LA SOURIS DESIGNE UNE ICONE ' RETURN ' PROCEDURE demande_peche ' ARRAYFILL icone_peches!(),FALSE !RAZ DE CHAQUE INDICATEUR D'AFFICHAGE ' FOR i%=1 TO pointeur_paragraphes% !ON VOIT QUELS SONT LES ICONES PECHE QUE IF reference_objet%(i%)=objet% AND paragraphe_lu!(i%)=FALSE !L'ON PEUT AFFICHER (SELON LES TEXTES A LIRE) IF indicateur!(indicateur_paragraphes_prealables%(i%))=TRUE icone_peches!(reference_peche%(i%))=TRUE ENDIF ENDIF NEXT i% ' hide_screen2 !ON CACHE L'ECRAN palette(palette_bureau$) SPUT bureau$ !ON REAFFICHE LE FOND DU BUREAU ET L'ICONE OBJET DEJA DESIGNEE PUT objet_x%(objet%),objet_y%(objet%),icone_objets$(objet%) ' fin_demande_peche!=TRUE FOR i%=1 TO nombre_peches% !AFFICHAGE DES ICONES OU IL RESTE IF icone_peches!(i%)=TRUE !DES TEXTES A LIRE PUT peche_x%(i%),peche_y%(i%),icone_peches$(i%) fin_demande_peche!=FALSE !OK,IL RESTE ENCORE QUELQUE CHOSE A LIRE... ENDIF NEXT i% ' show_screen2 !ON REAFFICHE L'ECRAN D'UN SEUL COUP ' IF fin_demande_peche!=FALSE !SI DES ICONES ONT ETE AFFICHEES... REPEAT !ON ATTEND QU'ON AIT RELACHE LA SOURIS UNTIL MOUSEK=0 CLR peche% !RAZ DU NUMERO DE L'ICONE CLIQEE REPEAT vigil(0,162,319,199,FALSE) !ON SCANNE LA SOURIS POUR DESIGNER UNE ICONE PECHE FOR i%=1 TO nombre_peches% !ET ON VOIT SI L'ENDROIT CLIQUE CORRESPOND A IF icone_peches!(i%)=TRUE !UNE ICONE ALLUME IF souris_x%>=peche_x%(i%) AND souris_x%<=peche_xx%(i%) AND souris_y%>=peche_y%(i%) AND souris_y%<=peche_yy%(i%) AND souris_bouton%=1 peche%=i% ENDIF ENDIF NEXT i% UNTIL peche%<>0 OR souris_bouton%=2 !ON SORT SI UNE ICONE EST CLIQUE ENDIF !OU SI ON A APPUY SUR LE BOUTON DROIT DE LA SOURIS ' IF peche%=0 fin_demande_peche!=TRUE !ON BASCULE L'INDICATEUR DE SORTIE SI BOUTON DROIT ENDIF ' RETURN ' PROCEDURE recherche_references ' CLR i% REPEAT !ON CHERCHE DANS LA LISTE DES TEXTES LE PREMIER QUI CORRESPOND A INC i% !L'OBJET ET AU PECHE CHOISI (SI LES INDICATEURS DU TEXTE SONT OK) UNTIL objet%=reference_objet%(i%) AND peche%=reference_peche%(i%) AND indicateur!(indicateur_paragraphes_prealables%(i%))=TRUE AND paragraphe_lu!(i%)=FALSE ' IF i%>pointeur_paragraphes% !SI RIEN N'EST TROUVE the_end !ON ARRETE TOUT (????) ENDIF ' paragraphe%=i% !SINON C'EST CE TEXTE QU'ON LIRA ' RETURN ' PROCEDURE affiche_image IF ancien_objet%=objet% !SI L'OBJET CHOISI EST LE MEME QU'AVANT palette(palette_image$) SPUT image$ !PAS BESOIN DE RECHARGER L'IMAGE! ELSE !SINON ON LA CHARGE NORMALEMENT ancien_objet%=objet% !ON REACTUALISE LE DERNIER OBJET VU... fichier$="IMAGES\"+RIGHT$("0"+STR$(objet%),2)+".pi1" ramdisk ice_load(fichier$) !ON CHARGE L'IMAGE... ice_disp(adresse_image%) !ON L'AFFICHE... palette_image$=palette$ !ON MEMORISE LA PALETTE palette(palette$) !ON MET LA PALETTE... SGET image$ !ET ON LA CAPTURE POUR LA PROCHAINE FOIS ENDIF ' RETURN ' PROCEDURE sauvegarde ' LOCAL a$,b$,fichier$ CLR a$,b$ CLS ' FOR i%=1 TO pointeur_indicateurs% !ON RASSEMBLE TOUS LES INDICATEURS IF indicateur!(i%)=FALSE !DANS UNE SEULE CHAINE DE CARACTERES a$=a$+"0" ELSE a$=a$+"1" ENDIF NEXT i% ' FOR i%=1 TO pointeur_paragraphes% IF paragraphe_lu!(i%)=FALSE b$=b$+"A" ELSE b$=b$+"B" ENDIF NEXT i% ' fichier$="textes\page.sav" OPEN "o",#1,fichier$ PRINT #1;a$ PRINT #1;b$ CLOSE fin ' RETURN ' PROCEDURE chargement ' LOCAL a$,b$,fichier$ ' CLR paragraphes_lus% ' fichier$="textes\page.sav" IF EXIST(fichier$) OPEN "i",#1,fichier$ INPUT #1;a$ INPUT #1;b$ CLOSE KILL fichier$ ' FOR i%=1 TO pointeur_indicateurs% IF MID$(a$,i%,1)="0" indicateur!(i%)=FALSE ELSE indicateur!(i%)=TRUE ENDIF NEXT i% ' FOR i%=1 TO pointeur_paragraphes% IF MID$(b$,i%,1)="A" paragraphe_lu!(i%)=FALSE ELSE paragraphe_lu!(i%)=TRUE INC paragraphes_lus% ENDIF NEXT i% ENDIF ' RETURN ' PROCEDURE the_end CLS fichier$="textes\page.sav" IF EXIST(fichier$) KILL "fichier$)" ENDIF cree_fenetre(9,pointeur_paragraphes%) pre_scrolling CLS DO LOOP RETURN ' PROCEDURE pre_scrolling ' reference_objet%(paragraphe%)=0 !ON DETRUIT LES REFERENCES DU TEXTE ' reference_peche%(paragraphe%)=0 !(POUR NE PAS LE LIRE DEUX FOIS...) paragraphe_lu!(paragraphe%)=TRUE ' INC paragraphes_lus% !UN TEXTE LUS DE PLUS ' ' ON BASCULE L'INDICATEUR "=" (VOIR LE TEXTE ORIGINAL...) indicateur!(indicateur_paragraphes%(paragraphe%))=TRUE ' LE TEXTE APPELLE T'IL UNE SUITE AUTOMATIQUEMENT? IF UPPER$(indicateur$(indicateur_paragraphes%(paragraphe%)))="SUITE" suite!=TRUE ELSE suite!=FALSE ENDIF ' scrolling RETURN ' PROCEDURE scrolling LOCAL a$,mouvement%,souris_motif% ' moyenne%=(y%+yy%)/2 moyenne1%=(y%+y%+yy%)/3 moyenne2%=(y%+yy%+yy%)/3 HIDEM SETMOUSE (x%+xx%)/2,moyenne% SHOWM ' DO REPEAT souris_y%=MOUSEY souris_bouton%=MOUSEK ' IF MOUSEX>xx% SETMOUSE xx%,MOUSEY ELSE IF MOUSEXyy% SETMOUSE MOUSEX,yy% ELSE IF MOUSEY1 ' IF souris_y%>moyenne2% mouvement%=souris_y%-moyenne2% ELSE IF souris_y%>moyenne% mouvement%=1 ELSE IF souris_y%0 AND premiere_ligne%+max_lignes%<=nombre_lignes% IF premiere_ligne%+max_lignes%+mouvement%>=nombre_lignes% OR mouvement%=0 mouvement%=1 ENDIF ' hide_screen2 GET x%+10,y%+2+mouvement%,xx%-8,yy%-2,a$ !on capture le bloc PUT x%+10,y%+2,a$ !qu'on d‚cale vers le haut FOR i%=1 TO mouvement% !puis on remplit la partie vide display_text(premiere_ligne%+max_lignes%+i%-1,yy%-2-mouvement%+i%) NEXT i% show_screen2 ADD premiere_ligne%,mouvement% !on update le pointeur ENDIF ' ' ' !on fait "descendre le texte" IF mouvement%<0 AND premiere_ligne%>1 IF premiere_ligne%+mouvement%<=0 mouvement%=-1 ENDIF ' hide_screen2 ' GET x%+10,y%+2,xx%-8,yy%-2+mouvement%,a$ PUT x%+10,y%+2-mouvement%,a$ ADD premiere_ligne%,mouvement% !on update le pointeur FOR i%=-1 DOWNTO mouvement% !puis on remplit la partie vide display_text(premiere_ligne%-i%-1,y%+1-i%) NEXT i% show_screen2 ' ENDIF LOOP ' ' RETURN ' PROCEDURE verif ' CLS FOR i%=1 TO pointeur_indicateurs% PRINT indicateur$(i%);TAB(22);indicateur!(i%) NEXT i% ~INP(2) ' CLS FOR i%=1 TO pointeur_paragraphes% PRINT paragraphe_lu!(i%); NEXT i% ~INP(2) ' CLS PRINT paragraphes_lus%,pointeur_paragraphes% ~INP(2) fin RETURN ' PROCEDURE init CLS !ON EFFACE L'ECRAN (INDISPENSABLE POUR LE COMPILATEUR) init_resolution !ON TESTE SI ON EST EN MOYENNE RESOLUTION... mouse_off !ON DECONNECTE LA SOURIS init_routines !ON CHARGE LES ROUTINES SON ET TINY xb2%=XBIOS(2) !ADRESSE INVARIABLE DE L'ECRAN (POUR LE SCROLLING...) RETURN ' PROCEDURE init2 init_objets init_peches init_icones init_indicateurs init_fenetres init_souris ' init_pub init_texte chargement mouse_on RETURN ' PROCEDURE init_resolution IF XBIOS(4)<>0 !SI ON EST PAS EN BASSE RESOLUTION... ALERT 3,"basse r‚solution,| scrogneugneu!!",1,"fichtre!",a% END ENDIF RETURN ' PROCEDURE init_indicateurs nombre_indicateurs%=30 !NOMBRE MAXI D'INDICATEURS pointeur_indicateurs%=0 !CLEAR DU NOMBRE D'INDICATEURS nombre_paragraphes%=110 !NOMBRE MAXI DE TEXTES DIM indicateur$(nombre_indicateurs%) !NOM DES INDICATEURS UTILISES PAR MOI DIM indicateur!(nombre_indicateurs%) !INDICATEUR EN LUI-MEME DIM paragraphe_lu!(nombre_paragraphes%) ' ' !NUMERO DE L'INDIC CRE A CHAQUE TEXTE: DIM indicateur_paragraphes%(nombre_paragraphes%) ' !NUMERO DE L'INDIC NECESSAIRE POUR LIRE CE TEXTE: DIM indicateur_paragraphes_prealables%(nombre_paragraphes%) ' indicateur!(0)=TRUE !INDICATEUR VIRTUEL TOUJOURS POSITIF ' RETURN ' PROCEDURE init_objets nombre_objets%=8 !NOMBRE D'OBJETS DIM objet$(nombre_objets%) !NOM DE CHAQUE OBJET RESTORE objets FOR i%=1 TO nombre_objets% !QU'ON LIT DANS LES DATAS... READ objet$(i%) NEXT i% CLR ancien_objet% RETURN ' PROCEDURE init_peches nombre_peches%=7 !NOMBRE DE PECHES DIM peche$(nombre_peches%+1) !NOM DE CHAQUE PECHE (+1 POUR L'INDIC SUITE...) RESTORE peches FOR i%=1 TO nombre_peches%+1 !QU'ON LIT DANS LES DATAS... READ peche$(i%) NEXT i% RETURN ' PROCEDURE init_icones ' DIM icone_objets!(nombre_objets%) !ICONES ALLUMES OU ETEINTES DIM icone_peches!(nombre_peches%+1) !(+1 POUR L'INDICATEUR DE SUITE...) ' DIM icone_objets$(nombre_objets%) !BLOCS GRAPHIQUES DES ICONES DIM icone_peches$(nombre_peches%) ' DIM objet_x%(nombre_objets%) !COORDONNES DES ICONES DES OBJETS DIM objet_y%(nombre_objets%) DIM objet_xx%(nombre_objets%) DIM objet_yy%(nombre_objets%) ' DIM peche_x%(nombre_peches%) !COORDONNE DES ICONES DES PECHES DIM peche_y%(nombre_peches%) DIM peche_xx%(nombre_peches%) DIM peche_yy%(nombre_peches%) ' RESTORE coordonnees_objets !LECTURE DES COORDONNES DES OBJETS FOR i%=1 TO nombre_objets% READ objet_x%(i%),objet_y%(i%),objet_xx%(i%),objet_yy%(i%) NEXT i% ' RESTORE coordonnees_peches FOR i%=1 TO nombre_peches% !CALCUL DES COORDONNES DES PECHES READ peche_x%(i%),peche_y%(i%),peche_xx%(i%),peche_yy%(i%) NEXT i% ' FOR i%=0 TO 15 !EFFACEMENT DE L'ECRAN SETCOLOR i%,0,0,0 NEXT i% ' fichier$="IMAGES\10.PI1" !CHARGEMENT DE L'IMAGE DE FOND ramdisk ice_load(fichier$) ice_disp(adresse_image%) SGET bureau$ !CAPTURE DU BUREAU ' fichier$="IMAGES\11.PI1" !CHARGEMENT DES ICONES ramdisk ice_load(fichier$) ice_disp(adresse_image%) ' FOR i%=1 TO nombre_peches% !CAPTURE DES ICONES DES PECHES GET peche_x%(i%),peche_y%(i%),peche_xx%(i%),peche_yy%(i%),icone_peches$(i%) NEXT i% ' FOR i%=1 TO nombre_objets% !CAPTURE DES ICONES DES OBJETS GET objet_x%(i%),objet_y%(i%),objet_xx%(i%),objet_yy%(i%),icone_objets$(i%) NEXT i% ' CLS !ON EFFACE L'ECRAN AVANT D'APPELLER LA ROUTINE PALETTE palette_bureau$=palette$ !ON MEMORISE LA PALETTE DE L'IMAGE... ' RETURN ' PROCEDURE init_routines INLINE routine_decomp%,5000 RETURN ' PROCEDURE init_fenetres INC nombre_objets% ' !COORDONNES DES FENETRES DE TEXTE (UNE PAR IMAGE) DIM fenetre_x%(nombre_objets%),fenetre_y%(nombre_objets%) DIM fenetre_xx%(nombre_objets%),fenetre_yy%(nombre_objets%) ' RESTORE fenetres FOR i%=1 TO nombre_objets% !QU'ON LIT DANS LES DATAS READ fenetre_x%(i%),fenetre_y%(i%) READ fenetre_xx%(i%),fenetre_yy%(i%) NEXT i% ' DEC nombre_objets% !ON RAMENE LE NOMBRE D'OBJETS A 8 (9=FIN) RETURN ' PROCEDURE init_souris INLINE souris%,74 FOR i%=0 TO 73 souris$=souris$+CHR$(PEEK(souris%+i%)) NEXT i% RETURN ' PROCEDURE datas_init fenetres: DATA 10,100,310,190 DATA 10,100,310,190 DATA 10,100,310,190 DATA 120,10,310,190 DATA 10,100,310,190 DATA 10,100,310,190 DATA 10,100,310,190 DATA 10,10,200,190 DATA 10,100,310,190 ' objets: DATA LUNETTES,CUILLERE,FLEUR,CARNET,DICO,BIJOUX,CLES,ARGENT,FIN ' peches: DATA ORGUEIL,AVARICE,GOURMANDISE,ENVIE,LUXURE,COLERE,PARESSE,suite ' coordonnees_objets: DATA 238,51,283,88 DATA 222,110,268,151 DATA 195,0,266,39 DATA 0,17,57,54 DATA 27,55,106,103 DATA 131,32,178,64 DATA 276,19,319,50 DATA 133,69,188,101 ' coordonnees_peches: DATA 184,162,227,199 DATA 0,162,43,199 DATA 46,162,89,199 DATA 276,162,319,199 DATA 92,162,135,199 DATA 138,162,181,199 DATA 230,162,273,199 ' RETURN ' PROCEDURE init_texte LOCAL i%,j%,long%,temps ' DIM bloc_text$(2000) !BLOCS GRAPHIQUES CONTENANT L'IMAGE DU TEXTE (1/LIGNE) text%=MALLOC(110000) !BUFFER CONTENANT LE TEXTE pointeur_text%=text% !POINTEUR DU BUFFER TEXTE ' FOR k%=1 TO nombre_objets% !UN FICHIER TEXTE PAR OBJET temps=TIMER presentation !ON FAIT PATIENTER fichier$="TEXTES\TXT_"+STR$(k%)+".TXT" !ON CHARGE LE FICHIER COMPACT ramdisk e%=C:routine_ice%(W:0,L:V:fichier$,L:*buffer_text%,L:*long%) IF e%<>0 STOP ENDIF ' BMOVE buffer_text%,pointeur_text%,long%-2 !ON MET LE TEXTE A LA FIN... ADD pointeur_text%,long%-2 !DU BUFFER ' POKE pointeur_text%,ASC("œ") !PETITE CORRECTION POKE pointeur_text%+1,ASC("œ") !ON RAJOUTE UN PSEUDO RETURN ("œ") ADD pointeur_text%,2 !A LA FIN DU BUFFER ' ~MFREE(buffer_text%) !ON SE DEBARASSE DU BUFFER PROVISOIRE ' REPEAT UNTIL temps+1000256 SIGNES DONC PAS INPUT) BLOAD fichier$,VARPTR(index$) !ON CHARGE LE FICHIER A PARTIR DE SON ADRESSE j%=1 !ON SCANNE A PARTIR DU PREMIER CARACTERE indicateur_fin!=FALSE REPEAT INC pointeur_paragraphes% !ON CREE UN NOUVEAU PARAGRAPHE ' lookindex !INSTRUCTION (A$) SUIVANTE... (REFERENCES DU PARAGRAPHE) reference_objet%(pointeur_paragraphes%)=i% reference_peche%(pointeur_paragraphes%)=VAL(a$) ' lookindex !LONGUEUR DU PARAGRAPHE... paragraphe%(pointeur_paragraphes%)=paragraphe%(pointeur_paragraphes%-1)+VAL(a$) ' lookindex !INDICATEURS "&" (CF TEXTE) PREALABLES indicateur$=a$ IF indicateur$<>"NADA" !SI CET INDICATEUR EXISTE... indicateur_trouve!=FALSE !ON LE CHERCHE DANS LA LISTE DE CEUX FOR k%=1 TO pointeur_indicateurs% !DEJA IDENTIFIES IF indicateur$=indicateur$(k%) !IL EXISTE? indicateur_trouve!=TRUE !OK! indicateur_paragraphes_prealables%(pointeur_paragraphes%)=k% ' PRINT "&";indicateur$;" reference ";k% ENDIF NEXT k% ' IF indicateur_trouve!=FALSE !IL N'EXISTE PAS? INC pointeur_indicateurs% !ON LE CREE indicateur$(pointeur_indicateurs%)=indicateur$ indicateur_paragraphes_prealables%(pointeur_paragraphes%)=pointeur_indicateurs% ' PRINT "&";indicateur$;" cr‚ation " ENDIF ENDIF ' lookindex !INSTRUCTION SUIVANTE...(INDICATEUR "=") indicateur$=a$ !ON CAPTURE SON NOM... IF indicateur$<>"NADA" !LE CAS ECHEANT S'IL EXISTE indicateur_trouve!=FALSE !ON LE CHERCHE DANS LA LISTE DE FOR k%=1 TO pointeur_indicateurs% !CEUX DEJA IDENTIFIES IF indicateur$=indicateur$(k%) !IL EXISTE? indicateur_trouve!=TRUE !OK! indicateur_paragraphes%(pointeur_paragraphes%)=k% ' PRINT "=";indicateur$;" r‚f‚rence ";k% ENDIF NEXT k% ' IF indicateur_trouve!=FALSE !SINON ON LE CREE COMME AU DESSUS INC pointeur_indicateurs% indicateur$(pointeur_indicateurs%)=indicateur$ indicateur_paragraphes%(pointeur_paragraphes%)=pointeur_indicateurs% ' PRINT "=";indicateur$;" cr‚ation " ENDIF ENDIF ' UNTIL indicateur_fin!=TRUE !ON S'ARRETE A LA FIN DU FICHIER INDEX ' depart%=paragraphe%(pointeur_paragraphes%) NEXT i% ' RETURN ' PROCEDURE lookindex j1%=INSTR(index$,"œ",j%) !ON CHERCHE LE PROCHAIN PSEUDO RETURN ("œ") IF j1%<>0 AND j1%<>LEN(index$) !SI ON EST PAS A LA FIN DE LA CHAINE a$=MID$(index$,j%,j1%-j%) !ON CAPTURE LE MOT ENTRE LES DEUX œ j%=j1%+1 !ET ON DEPLACE LA POINTEUR ELSE indicateur_fin!=TRUE !SION LE FICHIER INDEX EST FINI a$=MID$(index$,j%,LEN(index$)-j%) !ET ON CAPTURE LE DERNIER "MOT" ENDIF RETURN ' PROCEDURE presentation CLS SELECT k% !K% EST LE NUMERO DU TEXTE EN TRAIN D'ETRE LU SUR DISQUETTE CASE 1 carre("la belle zohra",100,80,"771") carre("(morceaux de bravoure)",100,120,"704") TEXT 0,180,319,"fran‡ois coulon" TEXT 0,190,319,"les logiciels d'en face 1992.reproduction interdite" CASE 2 carre("graphismes faustino ribeiro",25,20,"437") CASE 3 carre("programmation pascal piat",25,180,"275") CASE 4 carre("musique erik ecqier",100,0,"743") CASE 5 carre("un grand merci …:",150,20,"743") carre("emmanuel talmy",50,100,"743") carre("sans qui ce logiciel... etc.",70,180,"177") CASE 6 carre("miss zohra c‚lestibus est habill‚e...",0,100,"607") carre("...par aristide aristibus",20,150,"607") CASE 7 carre("‚crit et r‚alis‚ par fran‡ois coulon",0,99,"073") CASE 8 carre("… la famille paspire...",100,180,"555") ENDSELECT RETURN ' PROCEDURE carre(texte$,x%,y%,couleur$) SETCOLOR 0,0,0,0 !FOND DE L'ECRAN EN NOIR SETCOLOR 15,7,7,5 !TEXTE EN JAUNE DEFTEXT 1,1,0,6 !ON CHOISIT UN TEXTE EN GRAS IF y%>100 !SI LE TEXTE DOIT ETRE AFFICHE EN BAS... SETCOLOR 1,VAL("&H"+couleur$) !ON CHOISIT LA DEUXIEME COULEUR DEFFILL 2,1,1 ELSE SETCOLOR 2,VAL("&H"+couleur$) !SINON C'EST LA PREMIERE DEFFILL 3,1,1 ENDIF PBOX x%,y%,x%+12,y%+12 !ON TRACE UN PETIT CARRE DE COULEUR... TEXT x%+15,y%+8,LEN(texte$)*8,texte$ !ET LE TEXTE A COTE... RETURN ' PROCEDURE ramdisk LOCAL fichier2$,znort%,long%,i%,j% IF ramdisk!=TRUE !SI LE RAMDISK EXISTE... REPEAT i%=j% j%=INSTR(fichier$,"\",i%+1) !CAPTURE DU NOM DU FICHIER A CHARGER (SANS PATH) UNTIL j%=0 ' fichier2$="E:"+MID$(fichier$,i%) !PATH QU'ON REMPLACE PAR CELUI DU RAMDISK IF EXIST(fichier2$) !SI LE FICHIER EXISTE DEJA SUR LE RAMDISK fichier$=fichier2$ ELSE OPEN "i",#99,fichier$ !SINON ON REGARDE LA LONGUEUR DU FICHIER... long%=LOF(#99) CLOSE IF DFREE(5)>long%+80000 AND MALLOC(-1)>long% !ASSEZ DE PLACE? znort%=MALLOC(long%) !ON CREE UN BUFFER DE LA TAILLE DU FICHIER BLOAD fichier$,znort% !ON CHARGE LE FICHIER DANS LE BUFFER BSAVE fichier2$,znort%,long% !ET ON LE SAUVE DANS LE RAMDISK ~MFREE(znort%) !ON SUPPRIME LE BUFFER DEVENU INUTILE ENDIF ENDIF ENDIF RETURN ' PROCEDURE shoot_text ' LOCAL j%,ligne%,mot$,temps ' timer=temps ERASE bloc_text$() DIM bloc_text$(1000) ' CLR ligne%,nombre_lignes%,mot$ premiere_ligne%=1 hide_screen CLS FOR j%=paragraphe%(paragraphe%-1) TO paragraphe%(paragraphe%)-1 ' i%=PEEK(j%+text%) mot$=mot$+CHR$(i%) ' IF i%=156 mot$=LEFT$(mot$,LEN(mot$)-1) IF ligne%+LEN(mot$)temps+200 ' RETURN ' PROCEDURE shoot_ligne LOCAL i% FOR i%=0 TO 8 !on scanne toute la hauteur de la ligne INC nombre_lignes% !et on capture chaque ligne de l'‚cran GET 0,i%,max_colonnes%*8-1,i%,bloc_text$(nombre_lignes%) NEXT i% CLS !puis on efface l'‚cran RETURN ' PROCEDURE cree_fenetre(objet%,paragraphe%) LOCAL i% x%=fenetre_x%(objet%) !ON PREND LES COORDONNEES CORRESPONDANT A L'OBJET CHOISI y%=fenetre_y%(objet%) xx%=fenetre_xx%(objet%) yy%=fenetre_yy%(objet%) ' max_colonnes%=(xx%-x%-10)/8 !ON CALCUL LE NOMBRE DE SIGNES PAR COLONNE max_lignes%=(yy%-y%)-3 !ON LAISSE UNE PETITE MARGE EN HAUT ET EN BAS shoot_text !ON CAPTURE LE DESSIN DU TEXTE GRAPHMODE 1 DEFFILL 1,1,1 !ON DESSINE UN RECTANGLE BLANC PRBOX x%,y%-1,xx%,yy% COLOR 0 RBOX x%,y%-1,xx%,yy% !ET UN CADRE NOIR AUTOUR RBOX x%-1,y%-1,xx%+1,yy% COLOR 1 RBOX x%-2,y%-2,xx%+2,yy%+1 RBOX x%-3,y%-2,xx%+3,yy%+1 FOR i%=1 TO max_lignes% display_text(i%,y%+1+i%) !ET ON AFFICHE LES PREMIERES LIGNES DU TEXTE NEXT i% RETURN ' PROCEDURE display_text(ligne%,niveau%) PUT x%+10,niveau%,bloc_text$(ligne%),12 !on l'affiche … l'endroit voulu RETURN ' PROCEDURE ice_load(fichier$) LOCAL erreur% INLINE routine_ice%,968 erreur%=C:routine_ice%(W:0,L:V:fichier$,L:*adresse_image%,L:*longueur_image%) IF erreur%<>0 STOP ENDIF palette$=SPACE$(32) BMOVE adresse_image%+2,VARPTR(palette$),32 RETURN ' PROCEDURE ice_disp(adresse_image%) BMOVE adresse_image%+34,XBIOS(3),32000 ~MFREE(adresse_image%) RETURN ' PROCEDURE palette(palette$) ~XBIOS(6,L:VARPTR(palette$)) RETURN ' PROCEDURE hide_screen ecran%=MALLOC(32000) !ON OUVRE UN BUFFER DE LA TAILLE DE L'CRN BMOVE XBIOS(3),ecran%,32000 !ON COPIE L'CRAN DEDANS ~XBIOS(5,L:ecran%,L:-1,L:-1)!ON CACHE CE QUI SE PASSE ¶ L'CRAN VSYNC RETURN ' PROCEDURE show_screen ~XBIOS(5,L:XBIOS(2),L:XBIOS(2),W:-1) !ON RTABLIT L'AFFICHAGE NORMAL ~MFREE(ecran%) !ON FERME LE BUFFER RETURN ' PROCEDURE hide_screen2 ecran2%=MALLOC(32000) !on ouvre un buffer de la taille de l'‚cran BMOVE XBIOS(3),ecran2%,32000 !on copie l'‚cran dedans ~XBIOS(5,L:-1,L:ecran2%,L:-1)!on cache ce qui se passe … l'‚cran VSYNC RETURN ' PROCEDURE show_screen2 ~XBIOS(5,L:xb2%,L:xb2%,W:-1) !on r‚tablit l'affiche normal ~MFREE(ecran2%) !on ferme le buffer RETURN ' PROCEDURE mouse_on OUT 4,8 DEFMOUSE souris$ RETURN ' PROCEDURE mouse_off OUT 4,18 HIDEM RETURN ' PROCEDURE musique ' @init_musique FOR beat%=1 TO 5 @rythme(beat%) @charge_son SETCOLOR 0,7,7,7 SETCOLOR 15,0,0,0 @clavier_sonore SETCOLOR 0,0,0,0 NEXT beat% @fin_musique ' RETURN ' PROCEDURE init_musique son%=10 !NOMBRE MAXI DE SAMPLES SPOKE &H484,PEEK(&H484) AND &HFE !PAS DE BIP CLAVIER ' DIM son$(son%),frequence_son%(son%) DIM sous_titre1$(son%),sous_titre2$(son%) ' RESTORE musique DEFFILL 0,2,8 PBOX 0,0,319,199 SETCOLOR 0,0,0,0 ' RETURN ' PROCEDURE rythme(rythme%) ' FOR i%=10 DOWNTO 1 !RAZ DES BUFFERS CONTENANT LES SAMPLES son$(i%)="" NEXT i% CLR son% ' ancienne_adresse%=adresse_rythme% ' fichier$="SONS\BEAT"+STR$(rythme%)+".CMP" ramdisk e%=C:routine_decomp%(L:0,L:VARPTR(fichier$),L:*adresse%,L:*long%) IF e%<>0 STOP ENDIF adresse_rythme%=adresse% longueur_rythme%=long% ' frequence_rythme%=10000 ' @stop_sample f%=C:routine_decomp%(L:adresse_rythme%,L:longueur_rythme%,W:frequence_rythme%,W:65535,W:15,L:*suiveuse%) ~MFREE(ancienne_adresse%) ' RETURN ' PROCEDURE charge_son REPEAT READ nom_son$,frequence_son%(son%+1),sous_titre1$(son%+1),sous_titre2$(son%+1) IF nom_son$<>"FIN" INC son% fichier$="SONS\"+nom_son$+".CMP" ramdisk fichier2$=fichier$ e%=C:routine_decomp%(L:0,L:VARPTR(fichier$),L:*adresse%,L:*long%) son$(son%)=SPACE$(long%) BMOVE adresse%,VARPTR(son$(son%)),long% ~MFREE(adresse%) ENDIF UNTIL nom_son$="FIN" ' RETURN ' PROCEDURE clavier_sonore REPEAT UNTIL INKEY$="" REPEAT IF TIMER>temps_sous_titre+500 AND sous_titre!=TRUE !APRES UN PETIT TEMPS t(23,SPACE$(40)) !ON EFFACE LE SOUS-TITRE t(22,SPACE$(40)) sous_titre!=FALSE ENDIF ' a$=INKEY$ !ON SCANNE LE CLAVIER IF ASC(a$)=27 !SI C'EST UN CODE ESCAPE, ON PASSE TOUS LES COUPLETS beat%=10 stop_sample !ET ON ARRETE LE SON ENDIF ' a%=ASC(RIGHT$(a$,1))-58 !UNIQUEMENT LES TOUCHES DE FONCTION IF a%<=son% AND a%>=0 !TOUCHE DE FONCTION CORRESPONDANT A UN SON?? @mix(a%) !ON EMET LE SAMPLE CORRESPONDANT temps_sous_titre=TIMER !DEBUT DU DCOMPTE DE L'AFFICHE DU SOUS_TITRE sous_titre!=TRUE t(22,SPACE$(40)) @t(23,SPACE$(40)) !ON EFFACE CELUI QU'IL Y AVAIT AVANT... t(22,sous_titre1$(a%)) @t(23,sous_titre2$(a%)) !ON AFFICHE LE NOUVEAU... sous_titre1$(a%)="" !POUR NE L'AFFICHER QU'UNE SEULE FOIS sous_titre2$(a%)="" ' ENDIF UNTIL suiveuse%=0 OR a%=10 !ON SORT SI C'EST LA TOUCHE F10 ' REPEAT !ON VIDE LE BUFFER CLAVIER UNTIL INKEY$="" RETURN ' PROCEDURE mix(numero_son%) ~C:routine_decomp%(L:-VARPTR(son$(numero_son%)),L:LEN(son$(numero_son%)),W:frequence_son%(numero_son%),W:100) RETURN ' PROCEDURE stop_sample ~C:routine_decomp%(L:-1) !FORCAGE DE LA FIN DU SAMPLE RETURN ' PROCEDURE fin_musique @stop_sample ~MFREE(adresse_rythme%) ERASE son$() ERASE frequence_son%() ERASE sous_titre$() RETURN ' PROCEDURE data_fichiers_musique musique: DATA 1cemonsi,7500,"ce monsieur!","" DATA 1safemme,7500,"sa femme!","" DATA 1lechame,7500,"le chameau!","" DATA 1smala,7500,"et toute la smala!","" DATA fx_batte,10000,"","" DATA fx_flute,5000,"","" DATA fx_synth,5000,"","" DATA fx_tromp,7500,"","" DATA fx_tromp,10000,"","" DATA FIN,0,"","" ' DATA 2coinfli,7500,"des coins o—","les flics ne vont plus" DATA 2kararab,7500,"y'a des quartiers arab'","" DATA 2karbret,7500,"si c'‚tait des quartiers bretons...","" DATA 2gensnan,7500,"some people from Nanterre,","some people from Belleville!" DATA fx_boing,5000,"","" DATA fx_couic,5000,"","" DATA fx_siren,5000,"","" DATA fx_guita,5000,"","" DATA fx_guita,7500,"","" DATA FIN,0,"","" ' DATA 3BOPARLE,7500,"ces beaux-parleurs","de la t‚l‚vision?" DATA 3FAITFRA,7500,"qu'est-ce qu'ils ont fait","pour la france?" DATA 3PASMILI,7500,"les trois quarts du temps, y z'ont","pas fait leur service miliaire" DATA 3UNPEUPE,7500,"y sont meme un peu p‚d‚ sur les bords!","" DATA fx_hey,7500,"hey hey hey!","" DATA fx_cuivr,7500,"","" DATA fx_dzoin,7500,"","" DATA fx_dehem,7500,"","" DATA fx_dehem,10000,"","" DATA FIN,0,"","" ' DATA 4algefra,7500,"nous n'‚tions pas pour","l'alg‚rie francaise" DATA 4algesah,7500,"nous ‚tions pour l'alg‚rie et","le sahara francais!" DATA 4sousoff,7500,"les sous-off' de la coloniale,","dont j'‚tais" DATA FIN,0,"","" ' DATA 5haine,7500,"qui a la haine de l'‚tranger?","" DATA 5terrfra,7500,"la terre de france, elle est","d'abord aux fran‡ais" DATA 5collabo,7500,"on nous parle des collabos,","y z'en ont fait moins" DATA 5clepen,7500,"c'est Le Pen (de ch'val)","" DATA 5antifra,7500,"est anti-fran‡ais","" DATA 5abrutis,7500,"nous sommes des a.....s","" DATA fx_beat,7500,"","" DATA fx_glin1,7500,"","" DATA fx_glin2,7500,"","" DATA FIN,0,"","" RETURN ' PROCEDURE t(ligne%,texte$) TEXT 160-LEN(texte$)*4,ligne%*8,texte$ RETURN ' PROCEDURE fin ~MFREE(text%) ~FRE(0) mouse_on SHOWM IF ramdisk!=FALSE SYSTEM ELSE END ENDIF RETURN ' ' -----------------------------------------------------------------------------