0 REM < ---- EASY_INPUT.BAS -----> 1 REM Copyright 2020 Dominique Rioual 2 REM This program is free software 3 REM and distributed under the GNU GPL version 3 10 HOME 15 REM <---- Init des donnees ----> 20 NC = 18 : DIM CM$(NC) 30 FOR I = 1 TO NC : READ CM$(I) : NEXT I 40 DATA "NORD", "SUD", "EST", "OUEST", "BOIRE","ALLER NORD", "ALLER SUD", "ALLUMER BRIQUET", "ASSEOIR TRONE", "ATTAQUER MONSTRE" 41 DATA "MONTER ESCALIER", "OUVRIR PORTE", "OUVRIR VOLET", "PRENDRE BRIQUET", "PRENDRE TRESOR", "REGARDER", "SUICIDER","SUPPRIMER" 50 PRINT "VOCABULAIRE :" 51 PRINT "-------------" 55 FOR I = 1 TO NC : PRINT CM$(I);", ";:NEXT I : PRINT 60 IX = 0 : GOSUB 100 70 IF IX > 0 THEN PRINT "Commande saisie : ";CM$(IX):GOTO 80 75 PRINT "Je n'ai pas compris." 80 PRINT : END 90 REM <--- Fin du Main ---> 99 REM <---- S/P de saisie de la commande avec completion ----> 100 IF NC = 1 THEN IX = 1 : RETURN 110 DIM CA(NC) 120 FOR I = 1 TO NC : CA(I) = 1 : NEXT I 130 P = 1 : REM Position caractere courant 140 CT$ = "" : REM Chaine trouvee 150 IX = 0 : REM Index de la solution trouvee 180 NR = NC : REM Nombre de candidats restants 190 VTAB 18 : HTAB 1 : PRINT "ENTREZ COMMANDE > " 195 VTAB 18 : HTAB 19 200 IF NR < 1 THEN 580 210 GET C$ 215 IF ASC(C$) = 8 THEN GOTO 120 : REM Annulation de la saisie 220 IF ASC(C$) = 13 AND NR = 1 THEN PRINT : RETURN : REM Validation solution trouvee 230 IX = 0 239 REM Passage en majuscule 240 IF C$ > = "a" AND C$ <= "z" THEN C$ = CHR$(ASC(C$) - 32) 250 IF (C$ < "A" OR C$ > "Z") AND C$ <> " " THEN 210 259 REM Recherche des commandes possibles, compatibles avec la saisie. 260 FOR I = 1 TO NC 270 IF CA(I) = 0 THEN GOTO 310 280 IF P > LEN(CM$(I)) THEN CA(I) = 0 : NR = NR -1 : GOTO 310 290 IF MID$(CM$(I),P,1) <> C$ THEN CA(I) = 0 : NR = NR - 1 : GOTO 310 300 IX = I 310 NEXT I 350 IF NR = 1 THEN CT$ = CM$(IX) 399 REM Auto-completion 400 FI = 0 410 IF NR <=1 OR FI = 1 THEN GOTO 550 415 CC = 0 : CC$="" 420 FOR I = 1 TO NC 430 IF CA(I) = 0 THEN GOTO 470 440 IF P > LEN(CM$(I)) THEN FI = 1 : GOTO 500 450 IF CC$ = "" THEN CC$=MID$(CM$(I),P,1) : CC = CC + 1 : GOTO 470 460 IF MID$(CM$(I),P,1) = CC$ THEN CC = CC + 1 470 NEXT I 500 IF CC <> NR THEN GOTO 550 510 P = P +1 520 CT$ = CT$ + CC$ 530 GOTO 410 550 VTAB 18 : HTAB 19 : PRINT CT$; 560 GOTO 200 580 PRINT : RETURN