antoine-source/labellezohra/sources st/zohra_final.txt
Antoine Vignau e25f1b7de4 v+1
2023-08-30 16:42:20 +02:00

1122 lines
35 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

$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)<fff
fff=FRE(0)
ENDIF
IF MALLOC(-1)<mmm
mmm=MALLOC(-1)
ENDIF
RETURN
'
PROCEDURE main
'
LOCAL image$ !BLOC GRAPHIQUE DE LA DERNIERE IMAGE DE L'OBJET
'
DO !ON BOUCLE A PERPET'
teste_fin !TOUS LES TEXTES SONT-IL LUS?
demande_objet !QUEL OBJET EST CHOISI?
REPEAT
~FRE(0) !NETTOYAGE P<>RIODIQUE DE LA MEMOIRE
demande_peche !QUEL PECHE EST CHOISI?
IF fin_demande_peche!=FALSE !SI ON NE SORT PAS...
recherche_references !ON CHERCHE LE TEXTE A AFFICHER
' affiche_image !ON AFFICHE L'IMAGE CORRESPONDANTE
REPEAT !ON BOUCLE....
affiche_image
cree_fenetre(objet%,paragraphe%) !ON OUVRE LA FENETRE DE TEXTE
pre_scrolling !ON GERE LE SCROLLING
IF suite!=TRUE !UN AUTRE TEXTE A SUIVRE?
INC paragraphe% !OUI, ON PASSE AU SUIVANT
ENDIF
UNTIL suite!=FALSE !SINON ON SORT
ENDIF
UNTIL fin_demande_peche!=TRUE !JUSQU'A CE QU'ON CHANGE D'OBJET
LOOP
'
RETURN
'
PROCEDURE vigil(max_x%,max_y%,max_xx%,max_yy%,sauvegarde!)
'
REPEAT !ON ATTEND QU'ON RELACHE LA SOURIS
UNTIL NOT MOUSEK
'
IF ramdisk!=TRUE
PRINT AT(1,1);"malloc ";MALLOC(-1)'"fre ";FRE(0)''''
ENDIF
'
REPEAT !ET ON ATTEND UN EVENEMENT SOURIS
IF MOUSEX>max_xx% !ET ON L'EMPECHE DE SORTIR DU
SETMOUSE max_xx%,MOUSEY !CADRE FIXE
ELSE IF MOUSEX<max_x%
SETMOUSE max_x%,MOUSEY
ELSE IF MOUSEY>max_yy%
SETMOUSE MOUSEX,max_yy%
ELSE IF MOUSEY<max_y%
SETMOUSE MOUSEX,max_y%
ENDIF
SHOWM
'
IF sauvegarde!=TRUE AND ASC(INKEY$)=27 !SI LA SAUVEGARDE EST PERMISE...
sauvegarde !ON LA FAIT EN TAPANT "ESC"
ENDIF
'
UNTIL MOUSEK
'
souris_x%=MOUSEX !ON MEMORISE LES COORDONN<4E>ES DE LA SOURIS
souris_y%=MOUSEY
souris_bouton%=MOUSEK !AINSI QUE L'ETAT DU BOUTON
HIDEM !ON REFAIT DISPARAITRE LE CURSEUR
'
RETURN
'
PROCEDURE teste_fin
'
IF paragraphes_lus%=pointeur_paragraphes%-1
the_end
ENDIF
'
RETURN
'
PROCEDURE demande_objet
ARRAYFILL icone_objets!(),FALSE !RAZ DE CHAQUE INDICATEUR D'AFFICHAGE
'
FOR i%=1 TO pointeur_paragraphes% !ON VOIT S'IL RESTE QUELQUE CHOSE A LIRE
'
' ON BASCULE LES INDICATEURS S'IL RESTE DES TEXTES CORESPONDANT A CETTE
' REFERENCE (SAUF "8"=INDICATEUR DE SUITE)
IF reference_peche%(i%)<>8 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 ALLUM<55>E)
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 ALLUM<55>E
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 CLIQU<51>E
ENDIF !OU SI ON A APPUY<55> 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 MOUSEX<x%
SETMOUSE x%,MOUSEY
ELSE IF MOUSEY>yy%
SETMOUSE MOUSEX,yy%
ELSE IF MOUSEY<y%
SETMOUSE MOUSEX,y%
ENDIF
'
souris_y%=MOUSEY
'
UNTIL souris_bouton%
'
EXIT IF souris_bouton%>1
'
IF souris_y%>moyenne2%
mouvement%=souris_y%-moyenne2%
ELSE IF souris_y%>moyenne%
mouvement%=1
ELSE IF souris_y%<moyenne1%
mouvement%=souris_y%-moyenne1%
ELSE IF souris_y%<moyenne%
mouvement%=-1
ENDIF
'
'
'
' !on fait "monter" le texte
IF mouvement%>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 dcale 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 rsolution,| 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 CR<43>E 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 ALLUM<55>ES 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%) !COORDONN<4E>ES DES ICONES DES OBJETS
DIM objet_y%(nombre_objets%)
DIM objet_xx%(nombre_objets%)
DIM objet_yy%(nombre_objets%)
'
DIM peche_x%(nombre_peches%) !COORDONN<4E>E DES ICONES DES PECHES
DIM peche_y%(nombre_peches%)
DIM peche_xx%(nombre_peches%)
DIM peche_yy%(nombre_peches%)
'
RESTORE coordonnees_objets !LECTURE DES COORDONN<4E>ES 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 COORDONN<4E>ES 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%
' !COORDONN<4E>ES 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<43>
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+1000<TIMER
NEXT k%
'
init_indicateurs_texte !ET ON PASSE A LA SUITE
'
RETURN
'
PROCEDURE init_indicateurs_texte
'
LOCAL i%
'
DIM paragraphe%(nombre_paragraphes%) !INDEX DE DES DEBUTS DES PARAGRAPHES
paragraphe%(1)=0
CLR pointeur_paragraphes% !NOMBRE TOTAL DE PARAGRAPHES
CLR paragraphes_lus% !NOMBRE DE TEXTES DEJA LUS
'
' NUMERO DE L'OBJET ASSOCIE A CHAQUE PARAGRAPHE
DIM reference_objet%(nombre_paragraphes%)
' NUMERO DU PECHE ASSOCIE A CHAQUE PARAGRAPHE
DIM reference_peche%(nombre_paragraphes%)
'
FOR i%=1 TO nombre_objets% !ON CHARGE CHAQUE FICHIER INDEX...
fichier$="TEXTES\REF."+STR$(i%)
ramdisk
OPEN "I",#1,fichier$ !ON OUVRE LE FICHIER
index$=SPACE$(LOF(#1)) !ON CREE UNE VARIABLE DE LA LONGUEUR
CLOSE !DU FICHIER INDEX (>256 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$;" cration "
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$;" rfrence ";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$;" cration "
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 clestibus est habille...",0,100,"607")
carre("...par aristide aristibus",20,150,"607")
CASE 7
carre("crit et ralis 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$)<max_colonnes%
PRINT mot$
shoot_ligne
CLR ligne%,mot$
ELSE
shoot_ligne
PRINT mot$
shoot_ligne
CLR mot$,ligne%
ENDIF
ENDIF
'
IF i%=32
IF ligne%+LEN(mot$)<max_colonnes%
PRINT mot$;
ADD ligne%,LEN(mot$)
CLR mot$
ELSE
PRINT
shoot_ligne
PRINT mot$;
ligne%=LEN(mot$)
CLR mot$
ENDIF
ENDIF
'
NEXT j%
'
show_screen
REPEAT
UNTIL TIMER>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'<27>CRN
BMOVE XBIOS(3),ecran%,32000 !ON COPIE L'<27>CRAN DEDANS
~XBIOS(5,L:ecran%,L:-1,L:-1)!ON CACHE CE QUI SE PASSE ¶ L'<27>CRAN
VSYNC
RETURN
'
PROCEDURE show_screen
~XBIOS(5,L:XBIOS(2),L:XBIOS(2),W:-1) !ON R<>TABLIT 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 rtablit 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 D<>COMPTE 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 tlvision?"
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 pd 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'algrie francaise"
DATA 4algesah,7500,"nous tions pour l'algrie 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
'
' -----------------------------------------------------------------------------