mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-22 14:30:24 +00:00
1105 lines
35 KiB
Plaintext
1105 lines
35 KiB
Plaintext
|
$C+
|
|||
|
' ON BREAK GOSUB verif
|
|||
|
'
|
|||
|
'
|
|||
|
RESERVE 270000
|
|||
|
init
|
|||
|
musique
|
|||
|
RESERVE FRE(0)+MALLOC(-1)-170000 !cad reserver 170000 octets de buffers
|
|||
|
init2
|
|||
|
main
|
|||
|
'
|
|||
|
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 CORRESP
|
|||
|
ONDANTE
|
|||
|
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
|
|||
|
'
|
|||
|
'
|
|||
|
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%>=o
|
|||
|
bjet_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 AFFIC
|
|||
|
HER (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 PE
|
|||
|
CHE
|
|||
|
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 indicate
|
|||
|
ur!(indicateur_paragraphes_prealables%(i%))=TRUE AND paragraphe_lu!(i%)=FALS
|
|||
|
E
|
|||
|
'
|
|||
|
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"
|
|||
|
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
|
|||
|
'
|
|||
|
ecran2%=MALLOC(32257) !on ouvre un buffer de la taille de l'<27>cran
|
|||
|
ecran3%=INT(ecran2%/256)*256+256
|
|||
|
'
|
|||
|
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
|
|||
|
'
|
|||
|
BMOVE XBIOS(3),ecran3%,32000 !on copie l'<27>cran dedans
|
|||
|
~XBIOS(5,L:-1,L:ecran3%,L:-1)!on cache ce qui se passe <20> l'<27>cran
|
|||
|
VSYNC
|
|||
|
'
|
|||
|
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%
|
|||
|
~XBIOS(5,L:xb2%,L:xb2%,W:-1) !on r<>tablit l'affiche normal
|
|||
|
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
|
|||
|
'
|
|||
|
BMOVE XBIOS(3),ecran3%,32000 !on copie l'<27>cran dedans
|
|||
|
~XBIOS(5,L:-1,L:ecran3%,L:-1)!on cache ce qui se passe <20> l'<27>cran
|
|||
|
VSYNC
|
|||
|
'
|
|||
|
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%
|
|||
|
~XBIOS(5,L:xb2%,L:xb2%,W:-1) !on r<>tablit l'affiche normal
|
|||
|
'
|
|||
|
ENDIF
|
|||
|
LOOP
|
|||
|
~MFREE(ecran2%)
|
|||
|
'
|
|||
|
'
|
|||
|
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 COMPILATE
|
|||
|
UR)
|
|||
|
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%=115 !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
|
|||
|
ice_load(fichier$)
|
|||
|
ice_disp(adresse_image%)
|
|||
|
SGET bureau$ !CAPTURE DU BUREAU
|
|||
|
'
|
|||
|
fichier$="IMAGES\11.PI1" !CHARGEMENT DES ICONES
|
|||
|
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 120,10,310,190
|
|||
|
DATA 120,10,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>
|
|||
|
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%)
|
|||
|
OPEN "I",#1,fichier$ !ON OUVRE LE FICH
|
|||
|
IER
|
|||
|
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 ADRE
|
|||
|
SSE
|
|||
|
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)+VA
|
|||
|
L(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_ind
|
|||
|
icateurs%
|
|||
|
' 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 T
|
|||
|
EXTE A COTE...
|
|||
|
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'<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
|
|||
|
RBOX x%,y%-1,xx%,yy% !ET UN CADRE NOIR AUTO
|
|||
|
UR
|
|||
|
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
|
|||
|
ecran2%=MALLOC(32257) !on ouvre un buffer de la taille de l'<27>cran
|
|||
|
ecran3%=INT(ecran2%/256)*256+256
|
|||
|
BMOVE XBIOS(3),ecran3%,32000 !on copie l'<27>cran dedans
|
|||
|
~XBIOS(5,L:-1,L:ecran3%,L:-1)!on cache ce qui se passe <20> l'<27>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%)=""
|
|||
|
~FRE()
|
|||
|
NEXT i%
|
|||
|
CLR son%
|
|||
|
'
|
|||
|
stop_sample
|
|||
|
~MFREE(adresse_rythme%)
|
|||
|
'
|
|||
|
fichier$="SONS\BEAT"+STR$(rythme%)+".CMP"
|
|||
|
e%=C:routine_decomp%(L:0,L:VARPTR(fichier$),L:*adresse_rythme%,L:*longueur_ryt
|
|||
|
hme%)
|
|||
|
IF e%<>0
|
|||
|
PRINT "pas assez de m<>moire"
|
|||
|
END
|
|||
|
ENDIF
|
|||
|
'
|
|||
|
f%=C:routine_decomp%(L:adresse_rythme%,L:longueur_rythme%,W:10000,W:65535,W:15
|
|||
|
,L:*suiveuse%)
|
|||
|
'
|
|||
|
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"
|
|||
|
fichier2$=fichier$
|
|||
|
e%=C:routine_decomp%(L:0,L:VARPTR(fichier$),L:*adresse%,L:*long%)
|
|||
|
son$(son%)=SPACE$(long%)
|
|||
|
' PRINT "1 ";FRE()''''''MALLOC(-1)
|
|||
|
BMOVE adresse%,VARPTR(son$(son%)),long%
|
|||
|
~MFREE(adresse%)
|
|||
|
' PRINT "2 ";FRE()''''''MALLOC(-1)
|
|||
|
ENDIF
|
|||
|
UNTIL nom_son$="FIN"
|
|||
|
'
|
|||
|
RETURN
|
|||
|
'
|
|||
|
PROCEDURE clavier_sonore
|
|||
|
REPEAT
|
|||
|
~FRE()
|
|||
|
UNTIL INKEY$=""
|
|||
|
' PRINT FRE()''''''MALLOC(-1)
|
|||
|
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:fre
|
|||
|
quence_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$()
|
|||
|
~FRE()
|
|||
|
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?"
|
|||
|
DATA 3PASMILI,7500,"les trois quarts du temps, y z'ont","pas fait leur service
|
|||
|
miliaire"
|
|||
|
DATA 3UNPEUPE,7500,"y sont m<>me un peu p<>d<EFBFBD> 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'<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
|
|||
|
SYSTEM
|
|||
|
RETURN
|
|||
|
'
|
|||
|
' -----------------------------------------------------------------------------
|