antoine-source/labellezohra/sources st/zohra_final.txt

1083 lines
35 KiB
Plaintext
Raw Normal View History

2023-08-26 20:54:05 +00:00
$C+
' ON BREAK GOSUB verif
2023-08-28 16:01:04 +00:00
' ramdisk!=TRUE
2023-08-26 20:54:05 +00:00
'
2023-08-28 16:01:04 +00:00
RESERVE FRE(0)+MALLOC(-1)-170000 !cad reserver 170000 octets de buffers
2023-08-26 20:54:05 +00:00
'
init
musique
init2
main
'
2023-08-28 16:01:04 +00:00
PROCEDURE xx
IF FRE(0)<fff
fff=FRE(0)
ENDIF
IF MALLOC(-1)<mmm
mmm=MALLOC(-1)
ENDIF
RETURN
'
2023-08-26 20:54:05 +00:00
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
'
2023-08-28 16:01:04 +00:00
IF ramdisk!=TRUE
PRINT AT(1,1);"malloc ";MALLOC(-1)'"fre ";FRE(0)''''
ENDIF
2023-08-26 20:54:05 +00:00
'
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)
2023-08-28 16:01:04 +00:00
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
2023-08-26 20:54:05 +00:00
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
2023-08-28 16:01:04 +00:00
IF reference_objet%(i%)=objet% AND paragraphe_lu!(i%)=FALSE !L'ON PEUT AFFICHER (SELON LES TEXTES A LIRE)
2023-08-26 20:54:05 +00:00
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
2023-08-28 16:01:04 +00:00
vigil(0,162,319,199,FALSE) !ON SCANNE LA SOURIS POUR DESIGNER UNE ICONE PECHE
2023-08-26 20:54:05 +00:00
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
2023-08-28 16:01:04 +00:00
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
2023-08-26 20:54:05 +00:00
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)
2023-08-28 16:01:04 +00:00
UNTIL objet%=reference_objet%(i%) AND peche%=reference_peche%(i%) AND indicateur!(indicateur_paragraphes_prealables%(i%))=TRUE AND paragraphe_lu!(i%)=FALSE
2023-08-26 20:54:05 +00:00
'
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"
2023-08-28 16:01:04 +00:00
ramdisk
2023-08-26 20:54:05 +00:00
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
'
2023-08-28 16:01:04 +00:00
hide_screen2
2023-08-26 20:54:05 +00:00
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%
2023-08-28 16:01:04 +00:00
show_screen2
2023-08-26 20:54:05 +00:00
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
'
2023-08-28 16:01:04 +00:00
hide_screen2
2023-08-26 20:54:05 +00:00
'
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%
2023-08-28 16:01:04 +00:00
show_screen2
2023-08-26 20:54:05 +00:00
'
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
2023-08-28 16:01:04 +00:00
CLS !ON EFFACE L'ECRAN (INDISPENSABLE POUR LE COMPILATEUR)
2023-08-26 20:54:05 +00:00
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
2023-08-28 16:01:04 +00:00
nombre_paragraphes%=110 !NOMBRE MAXI DE TEXTES
2023-08-26 20:54:05 +00:00
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
2023-08-28 16:01:04 +00:00
ramdisk
2023-08-26 20:54:05 +00:00
ice_load(fichier$)
ice_disp(adresse_image%)
SGET bureau$ !CAPTURE DU BUREAU
'
fichier$="IMAGES\11.PI1" !CHARGEMENT DES ICONES
2023-08-28 16:01:04 +00:00
ramdisk
2023-08-26 20:54:05 +00:00
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
2023-08-28 16:01:04 +00:00
DATA 10,100,310,190
DATA 10,100,310,190
2023-08-26 20:54:05 +00:00
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>
2023-08-28 16:01:04 +00:00
ramdisk
2023-08-26 20:54:05 +00:00
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("<22>") !PETITE CORRECTION
POKE pointeur_text%+1,ASC("<22>") !ON RAJOUTE UN PSEUDO RETURN ("<22>")
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%)
2023-08-28 16:01:04 +00:00
ramdisk
OPEN "I",#1,fichier$ !ON OUVRE LE FICHIER
2023-08-26 20:54:05 +00:00
index$=SPACE$(LOF(#1)) !ON CREE UNE VARIABLE DE LA LONGUEUR
CLOSE !DU FICHIER INDEX (>256 SIGNES DONC PAS INPUT)
2023-08-28 16:01:04 +00:00
BLOAD fichier$,VARPTR(index$) !ON CHARGE LE FICHIER A PARTIR DE SON ADRESSE
2023-08-26 20:54:05 +00:00
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$
2023-08-28 16:01:04 +00:00
indicateur_paragraphes_prealables%(pointeur_paragraphes%)=pointeur_indicateurs%
2023-08-26 20:54:05 +00:00
' PRINT "&";indicateur$;" cr<63>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<EFBFBD>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<63>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$,"<22>",j%) !ON CHERCHE LE PROCHAIN PSEUDO RETURN ("<22>")
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 <20>
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<61>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 <20>:",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<6C>e...",0,100,"607")
carre("...par aristide aristibus",20,150,"607")
CASE 7
carre("<22>crit et r<>alis<69> par fran<61>ois coulon",0,99,"073")
CASE 8
carre("<22> 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
'
2023-08-28 16:01:04 +00:00
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
'
2023-08-26 20:54:05 +00:00
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'<27>cran
GET 0,i%,max_colonnes%*8-1,i%,bloc_text$(nombre_lignes%)
NEXT i%
CLS !puis on efface l'<27>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
2023-08-28 16:01:04 +00:00
RBOX x%,y%-1,xx%,yy% !ET UN CADRE NOIR AUTOUR
2023-08-26 20:54:05 +00:00
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 <20> 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 <20> 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
2023-08-28 16:01:04 +00:00
ecran2%=MALLOC(32000) !on ouvre un buffer de la taille de l'<27>cran
BMOVE XBIOS(3),ecran2%,32000 !on copie l'<27>cran dedans
~XBIOS(5,L:-1,L:ecran2%,L:-1)!on cache ce qui se passe <20> l'<27>cran
2023-08-26 20:54:05 +00:00
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
2023-08-28 16:01:04 +00:00
OUT 4,18
HIDEM
2023-08-26 20:54:05 +00:00
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
2023-08-28 16:01:04 +00:00
SETCOLOR 0,0,0,0
2023-08-26 20:54:05 +00:00
'
RETURN
PROCEDURE rythme(rythme%)
'
FOR i%=10 DOWNTO 1 !RAZ DES BUFFERS CONTENANT LES SAMPLES
son$(i%)=""
NEXT i%
CLR son%
'
2023-08-28 16:01:04 +00:00
ancienne_adresse%=adresse_rythme%
2023-08-26 20:54:05 +00:00
'
fichier$="SONS\BEAT"+STR$(rythme%)+".CMP"
2023-08-28 16:01:04 +00:00
ramdisk
e%=C:routine_decomp%(L:0,L:VARPTR(fichier$),L:*adresse%,L:*long%)
2023-08-26 20:54:05 +00:00
IF e%<>0
2023-08-28 16:01:04 +00:00
STOP
2023-08-26 20:54:05 +00:00
ENDIF
2023-08-28 16:01:04 +00:00
adresse_rythme%=adresse%
longueur_rythme%=long%
'
frequence_rythme%=10000
2023-08-26 20:54:05 +00:00
'
2023-08-28 16:01:04 +00:00
@stop_sample
f%=C:routine_decomp%(L:adresse_rythme%,L:longueur_rythme%,W:frequence_rythme%,W:65535,W:15,L:*suiveuse%)
~MFREE(ancienne_adresse%)
2023-08-26 20:54:05 +00:00
'
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"
2023-08-28 16:01:04 +00:00
ramdisk
2023-08-26 20:54:05 +00:00
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'<27>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<EFBFBD>vision?"
DATA 3FAITFRA,7500,"qu'est-ce qu'ils ont fait","pour la france?"
2023-08-28 16:01:04 +00:00
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<EFBFBD> sur les bords!",""
2023-08-26 20:54:05 +00:00
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'<27>tions pas pour","l'alg<6C>rie francaise"
DATA 4algesah,7500,"nous <20>tions pour l'alg<6C>rie et","le sahara francais!"
DATA 4sousoff,7500,"les sous-off' de la coloniale,","dont j'<27>tais"
DATA FIN,0,"",""
'
DATA 5haine,7500,"qui a la haine de l'<27>tranger?",""
DATA 5terrfra,7500,"la terre de france, elle est","d'abord aux fran<61>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<61>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
2023-08-28 16:01:04 +00:00
IF ramdisk!=FALSE
SYSTEM
ELSE
END
ENDIF
2023-08-26 20:54:05 +00:00
RETURN
'
' -----------------------------------------------------------------------------