LEX 'YESNOLEX' * (c) 1987 PPC Paris et l'Auteur ID #5C MSG 0 Pas de messages POLL 0 Pas de pollhandler * ATNFLG EQU #2F442 Drapeau ATTN BF2DSP EQU #01C0E Affichage d'1 buffer BLDDSP EQU #01898 Construction de l'affichage CKSREQ EQU #00721 VÅrifie une requÉte CRLFOF EQU #02296 Termine l'affichage FNRTN2 EQU #0F219 Retour È BASIC POPBUF EQU #010EE Prend une touche du buffer SLEEP EQU #006C2 Mise en sommeil lÅger kcN EQU #00022 Code de la touche 'N' kcY EQU #00006 Code de la touche 'Y' * ENTRY yesno CHAR #F C'est une fonction KEY 'YESNO' TOKEN 223 È vous de mettre le bon ENDTXT NIBHEX 00 Aucun paramÉtre yesno CD0EX Sauvegarde de D0 R0=C dans R0 CD1EX Sauvegarde de D1 R1=C dans R1 GOSUB pop1 Pour rÅcupÅrer l'adresse de * la chaÑne È afficher dans * la pile de retour NIBHEX B1 chr$(27) } NIBASC '>' } curseur ON NIBASC ' ? Y/N' message È afficher NIBHEX B1 chr$(27) \ NIBASC 'D' | curseur NIBHEX B1 | 3 caractÉres NIBASC 'D' | en arriÉre NIBHEX B1 | NIBASC 'D' / NIBHEX B1 chr$(27) } NIBASC '<' } curseur off NIBHEX FF Marqueur de fin de chaÑne * pop1 C=RSTK Adresse de chaÑne dans C(A) GOSUB dsp Affichage de la chaÑne * * Routine principale : mise en sommeil et attente * d'une touche ou d'une alarme ou autre (HPIL) * key? GOSBVL SLEEP Met le 71 en sommeil lÅger GOC srq? Si aucune touche dans * le buffer de touche (le * 71 a ÅtÅ rÅveillÅ par * autre chose qu'1 touche) GOSBVL POPBUF Code de touche dans B(A) C=0 A C(A) = 00000 LC(2) kcY C(A) = 00006 ?C=B A Touche pressÅe = 'Y' ? GOYES yes Oui : traiter touche 'Y' LC(2) kcN C(A) = 00022 ?C=B A Touche pressÅe = 'N' GOYES no Oui : traiter touche 'N' * * Il faut maintenant Åviter tout effet indÅsirable * de la touche ATTN : Purger tout le tampon * de touche et attendre une nouvelle touche. * D1=(5) ATNFLG Adresse du tampon de touche C=0 W DAT1=C W D1=D1+ 16 DAT1=C W GONC key? B.E.T. srq? GOSBVL CKSREQ Chercher qui rÅveilla Titan GOTO key? et retourner dormir * * Traitement de la touche 'Y' * - renvoyer 1 È BASIC * - afficher 'Yes' È la place de 'Y/N' * yes C=0 W C(W) = 0000000000000000 C=C+1 S C(W) = 1000000000000000 CSRC C(W) = 0100000000000000 R2=C RÅsultat dans R2 GOSUB pop2 Pour avoir l'adresse * du compte rendu * È afficher NIBASC 'Yes' Chaine È afficher NIBHEX FF Marqueur de fin de chaÑne * * Traitement de la touche 'N' : * - renvoyer 0 È BASIC * - remplacer 'Y/N' È l'affichage par 'No' * no C=0 W C(W) = 000000000000000 R2=C RÅsultat dans R2 GOSUB pop2 Pour avoir l'adresse * du compte rendu * È afficher NIBASC 'No ' Chaine È afficher NIBHEX FF Marqueur de fin de chaÑne * * Affichage du compte-rendu et renvoi * de la rÅponse È BASIC * L'adresse de la chaÑne È afficher est dans * la pile de retour. Il ne reste plus * qu'È l'afficher. * pop2 C=RSTK C(A) = adresse de la chaÑne GOSUB dsp Pour affichage GOSBVL CRLFOF Termine ligne d'affichage C=R2 RÅcupÅrer rÅsult. dans C(W) A=R1 Restorer D1 D1=A A=R0 Restorer D0 GOVLNG FNRTN2 Envoi du rÅsultat * et retour È BASIC * * Routine d'affichage d'une chaÑne pointÅe par C(A) * dsp D1=C Adresse de chaÑne dans D1 GOSBVL BF2DSP Envoie la chaÑne au display GOSBVL BLDDSP Construction de l'affichage RTNCC Retour END