GENISTA (1971) : TUTORIEL "BBC BASIC FOR WINDOWS" EN FRANÇAIS : APPENDICE F : LISTING DU GÉNÉRATEUR DE CARACTÈRES



Logo Genista, fondé en 1971

Guide Tutoriel de BBC BASIC for Windows, App. F

BBC BASIC (BB4W) Tutorial: Character Designer Listing

Listing du Générateur de caractères (Tutoriel BBC BASIC, App. F) [Genista]

Par Peter Nairn  •  Traduction : Guy Schaffner (Texte et images) (Genista)

informatique et programmation Vous avez vu, dans le Chapitre 20, la fabrication intégrale d'un programme complexe, et pourtant simple : le Générateur de caractères qui pourra vous être utile.
Dans cet Appendice, vous trouvez l'intégralité du code nécessaire à la réalisation du
Générateur de caractères.
Bon amusement !
Appendice E   •   Appendice F   •   « BBC BASIC » a 25 ans      

Appendice F — Listing : Générateur de caractères



     REM ****************************************
     REM * Générateur de caractères utilisateur *
     REM * Version 1.0                 2/1/2006 *
     REM * Peter Nairn                          *
     REM ****************************************

     REM Déclarer les tableaux et la structure
     DIM Grille%(8,8)
     DIM TtalLigne%(8)
     DIM Curs{Ligne%,Col%,DernLigne%,DernCol%}

     PROC_Init
     PROC_DessEcranPrinc
     PROC_DessCarac
     PROC_DessCurs

     REPEAT
       Action%=FN_InterceptAction
       PROC_TraiterAction(Action%)
     UNTIL Exit

     PROC_Fermeture

     END

     REM ***************************************************
     REM PROC_Init - initialisation d'origine au lancement
     DEF PROC_Init

     REM Mettre en mode graphique
     MODE 21

     REM Définir les caractères 240, 241 et 242
     VDU 23,240,0,0,0,0,0,0,0,0
     VDU 23,241,255,129,129,129,129,129,129,255
     VDU 23,242,255,255,255,255,255,255,255,255

     REM Définir la position du curseur
     Curs.Ligne%=1
     Curs.DernLigne%=1
     Curs.Col%=1
     Curs.DernCol%=1

     REM Initialiser le drapeau de Sortie à 0
     Exit=FALSE

     REM Éteindre le curseur de texte
     VDU 23,1,0;0;0;0;

     ENDPROC

     REM ***************************************************
     REM PROC_DessEcranPrinc - affiche le texte statique,
     REM                       le titre, l'aide, etc.
     DEF PROC_DessEcranPrinc

     REM Fixer la couleur de fond
     COLOUR 128+7
     CLS
     COLOUR 0

     REM Afficher le titre
     PRINT TAB(12,0);"Générateur de Caractères"
     PRINT TAB(12,1);STRING$(24,"=")

     REM Afficher les instructions d'aide
     PRINT TAB(1,3);"Instructions :"
     PRINT TAB(1,4);"Flèches = déplacer curseur."
     PRINT TAB(1,5);"Espace = bascule de cellule."
     PRINT TAB(1,6);"Taper X ou ESC pour sortir."

     ENDPROC

     REM ***************************************************
     REM PROC_DessCarac - appelée quand le caractère change
     REM                  afin de le réafficher
     DEF PROC_DessCarac
     LOCAL ValCol%,Ligne%,Col%

     REM Tracer la Grille & calculer chaque total de ligne
     FOR Ligne%=1 TO 8
       ValCol%=128
       TtalLigne%(Ligne%)=0
       FOR Col%=1 TO 8
         IF Grille%(Col%,Ligne%)=0 THEN
           PRINT TAB(18+Col%,10+Ligne%);CHR$(241)
         ELSE
           PRINT TAB(18+Col%,10+Ligne%);CHR$(242)
           TtalLigne%(Ligne%)=TtalLigne%(Ligne%)+ValCol%
         ENDIF
         ValCol%=ValCol%/2
       NEXT Col%

       PRINT TAB(28,10+Ligne%);"    "
       PRINT TAB(28,10+Ligne%);TtalLigne%(Ligne%)
     NEXT Ligne%

     REM Dessiner le caractère réel
     VDU 23,240,TtalLigne%(1),TtalLigne%(2),TtalLigne%(3), \
     \         TtalLigne%(4),TtalLigne%(5),TtalLigne%(6), \
     \         TtalLigne%(7),TtalLigne%(8)
     FOR Col%=1 TO 8
       PRINT TAB(18+Col%,20);CHR$(240)
     NEXT Col%

     REM Afficher les codes VDU
     PRINT TAB(7,22);"Code BASIC pour faire ce caractère : "
     PRINT TAB(1,24);STRING$(50," ")
     PRINT TAB(4,24);"VDU 23,240";
     FOR Ligne%=1 TO 8
       PRINT ",";STR$(TtalLigne%(Ligne%));
     NEXT Ligne%

     ENDPROC

     REM ***************************************************
     REM PROC_DessCurs - effacer le curseur de l'ancienne
     REM                 position & redessiner à la nouvelle
     DEF PROC_DessCurs

     REM Mettre à couleur normale et effacer ancien curseur
     COLOUR 0
     PRINT TAB(18+Curs.DernCol%,10+Curs.DernLigne%);
     IF Grille%(Curs.DernCol%,Curs.DernLigne%)=0 THEN
       PRINT CHR$(241)
     ELSE
       PRINT CHR$(242)
     ENDIF
     REM Mettre en surbrillance et dessiner le curseur
     COLOUR 1
     PRINT TAB(18+Curs.Col%,10+Curs.Ligne%);
     IF Grille%(Curs.Col%,Curs.Ligne%)=0 THEN
       PRINT CHR$(241)
     ELSE
       PRINT CHR$(242)
     ENDIF
     REM Remettre la couleur normale
     COLOUR 0

     ENDPROC

     REM ***************************************************
     REM FN_InterceptAction - renvoie 1 code d'action valide
     REM                      quand choisi par l'utilisateur
     DEF FN_InterceptAction
     LOCAL Touche%,Code%

     REPEAT
       REM Attendre qu'une touche soit pressée
       Touche%=GET
       REM Traduire la touche en code d'action
       CASE Touche% OF
         WHEN 139: Code%=1   :REM Haut
         WHEN 137: Code%=2   :REM Droite
         WHEN 138: Code%=3   :REM Bas
         WHEN 136: Code%=4   :REM Gauche
         WHEN 32: Code%=5    :REM Bascule - espace
         WHEN 88: Code%=999  :REM Sortie
         WHEN 120: Code%=999
         OTHERWISE Code%=0
       ENDCASE
     UNTIL Code%<>0

     =Code%

     REM ***************************************************
     REM PROC_TraiterAction - actionne un code valide
     DEF PROC_TraiterAction(Code%)

     CASE Code% OF
       WHEN 1: PROC_DeplaCurs(1)
       WHEN 2: PROC_DeplaCurs(2)
       WHEN 3: PROC_DeplaCurs(3)
       WHEN 4: PROC_DeplaCurs(4)
       WHEN 5:
         IF Grille%(Curs.Col%,Curs.Ligne%)=1 THEN
           Grille%(Curs.Col%,Curs.Ligne%)=0
         ELSE
           Grille%(Curs.Col%,Curs.Ligne%)=1
         ENDIF
         PROC_DessCarac
       WHEN 999:
         REM Mettre le drapeau de Sortie à 1
         Exit=TRUE
     ENDCASE

     PROC_DessCurs

     ENDPROC

     REM ***************************************************
     REM PROC_DeplaCurs - déplacer le curseur
     REM                  dans la direction donnée : 
     REM                  1-Haut, 2-Droite, 3-Bas, 4-Gauche
     DEF PROC_DeplaCurs(Dirn%)

     REM Conserve position actuelle dans Position ancienne
     Curs.DernLigne%=Curs.Ligne%
     Curs.DernCol%=Curs.Col%

     REM Vérifie les limites et opère le déplacement
     CASE Dirn% OF
       WHEN 1: IF Curs.Ligne%>1 Curs.Ligne% -=1
       WHEN 2: IF Curs.Col%<8 Curs.Col% +=1
       WHEN 3: IF Curs.Ligne%<8 Curs.Ligne% +=1
       WHEN 4: IF Curs.Col%>1 Curs.Col% -=1
     ENDCASE

     ENDPROC

     REM ***************************************************
     REM PROC_Fermeture - fait le ménage avant de sortir
     DEF PROC_Fermeture

     REM Réactiver le curseur de texte
     VDU 23,1,1;0;0;0;
     REM Placer le curseur au bas de l'écran
     PRINT TAB(0,26);

     ENDPROC
    


Fin de l'Appendice F





Haut de Page  •  [Top of Page] Le « BBC BASIC a 25 ans »  •  [BB4W  is 25 years old]

Page précédente (Ap. E)  •  [Previous Page (Ap. E)]

Page d'entrée : BASIC, BBC BASIC et BB4W  •  [BASIC, BBC BASIC and BB4W  Entry Page]

Début du Guide pratique du BBC BASIC  •  [The Beginning of the BBC BASIC Tutorial]

Autres sujets  •  [Other subjects]