home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 19
/
CD_ASCQ_19_010295.iso
/
bonus
/
morse.zip
/
MORSE.BAS
< prev
next >
Wrap
BASIC Source File
|
1994-11-09
|
32KB
|
1,012 lines
' Conçu pour fonctionner sous QBASIC de Microsoft MS/DOS 5.xx & +
'
' Codes Morse ) Légionnaire en retraite qui s'emmerde...
' ))
' Pogam Alexis )))
' 87 allée des étoiles )))) Codé par Xor - Respectez l'auteur MERCI ...
' 97310 Kourou )))
' )) Je n' ai pas de compilateur Basic.
' tél. 32.06.08 ) Je vous offre ce programme.
' Un compilateur Basic me ferai plaisir
' On a le droit de rèver, non !...
'
' Si vous perfectionnez ce programme, vous pouvez mettre votre nom ci-dessous.
' et m'envoyer une copie.
' P.S. Je ne suis pas Radio Amateur, si des erreurs ont été commises, je vous
' prie de bien vouloir m'en informer. encore Merci.
'
'
'
'
'
'
DECLARE SUB EHaut ()
DECLARE SUB ChargeTexte ()
DECLARE SUB Cadre (x1%, y1%)
DECLARE SUB aaz ()
DECLARE SUB CodesQ () ' J'ai pondu ce merdier en 5 jours.
DECLARE SUB PasBon () ' Si vous avez fait des programmes intéressant
DECLARE SUB SauveVitesse () ' Envoyez-les moi
DECLARE SUB ChargeVitesse ()
DECLARE SUB auteur ()
DECLARE SUB Info ()
DECLARE SUB Morse ()
DECLARE SUB Menu ()
DECLARE SUB Aleatoire ()
DECLARE SUB clair ()
DECLARE SUB Click ()
DECLARE SUB Init () ' Merci à Micro Application
DECLARE SUB Souris (OnOff%) ' Le Grand Livre Qbasic
DECLARE SUB GetSouris () ' pour les routines de traitement
DECLARE SUB SetSouris (X%, Y%) ' de la souris.
DECLARE SUB Reglage ()
DECLARE SUB Apprendre ()
DECLARE SUB Exercices () ' Tout le reste, je l'ai imaginé.
DECLARE SUB Quitter ()
DECLARE SUB Sortie ()
DECLARE SUB SortieM ()
DECLARE SUB Lecon (L%)
DECLARE SUB selectfile (chemin$, filename$)
DECLARE SUB readfiles (path$, masque$, files$(), flen&(), attr%(), masque%, nbrefich%)
DECLARE SUB selectentry (titre$, liste$(), nbre%, X%, Y%, b%, h%, Choix%)
DECLARE FUNCTION Interr% (NuM%, ax%, BX%, CX%, DX%)
DIM SHARED files$(200), flen&(200), attr%(200)
DIM SHARED chemin$, nom$
DIM SHARED SourisX%, SourisD$, SourisY%, SourisC$, SourisB%, Sort%
DIM SHARED ms%(30), Choix%, Choix1%, alea$(100), a$, S$(9), P$
DIM SHARED v, t, frq, v1, t1, frq1, Scr
'ON ERROR GOTO Niet
DIM SHARED EcranHaut(1 TO 7)
Init
Souris 1
Menu
END
Niet: ' Non en Russe
PasBon
Souris.Data:
DATA 55,8b,ec,56,57
DATA 8b,76,0c,8b,04
DATA 8b,76,0a,8b,1c
DATA 8b,76,08,8b,0c
DATA 8b,76,06,8b,14
DATA cd,21
DATA 8b,76,0c,89,04
DATA 8b,76,0a,89,1c
DATA 8b,76,08,89,0c
DATA 8b,76,06,89,14
DATA 5f,5e,5d
DATA ca,08,00
DATA #
Lm.Data: 'G H D B
DATA &HB8,&H01,&H06,&HB9,&H00,&H08,&HBA,&H4F,&H15,&HB7,&H00,&HCD,&H10,&HCB
SUB aaz
Click
IF Choix% = 7 THEN Choix% = 0: Souris 0: PCOPY 2, 0: Souris 1: EXIT SUB
IF Choix% <> 7 THEN
Souris 0: PCOPY 2, 0
COLOR 0, 7: LOCATE 1, 14: PRINT " Apprendre le Morse "
COLOR 0, 1
LOCATE 3, 16: PRINT "╔═════════════╗"
LOCATE 4, 16: PRINT "║ Annuler ║██"
LOCATE 5, 16: PRINT "║ ------- ║██"
LOCATE 6, 16: PRINT "║ Leçon 1 ║██"
LOCATE 7, 16: PRINT "║ Leçon 2 ║██"
LOCATE 8, 16: PRINT "║ Leçon 3 ║██"
LOCATE 9, 16: PRINT "║ Leçon 4 ║██"
LOCATE 10, 16: PRINT "║ Leçon 5 ║██"
LOCATE 11, 16: PRINT "╚═════════════╝██"
LOCATE 12, 18: PRINT "███████████████"
LOCATE 4, 36: PRINT "╔════════════════════╗"
LOCATE 5, 36: PRINT "║ Leçon 1+2 ║██"
LOCATE 6, 36: PRINT "║ Leçon 1+2+3 ║██"
LOCATE 7, 36: PRINT "║ Leçon 1+2+3+4 ║██"
LOCATE 8, 36: PRINT "║ Leçon 1+2+3+4+5 ║██"
LOCATE 9, 36: PRINT "║ 1+2+3+4+5+chiffres ║██"
LOCATE 10, 36: PRINT "╚════════════════════╝██"
LOCATE 11, 38: PRINT "██████████████████████"
Souris 1
END IF
Choix% = 7
END SUB
SUB Aleatoire
FOR i = 1 TO 80 ' 80 groupe de 5 caractères
alea$(i) = ""
FOR J = 1 TO 5
a = INT(RND * 26) + 65
alea$(i) = alea$(i) + CHR$(a)
NEXT
alea$(i) = alea$(i) + " "
NEXT
FOR i = 81 TO 100 '+ 20 groupes de 5 chiffres
alea$(i) = ""
FOR J = 1 TO 5
a = INT(RND * 10) + 48
alea$(i) = alea$(i) + CHR$(a)
NEXT
alea$(i) = alea$(i) + " "
NEXT
a = 0
FOR i = 1 TO 100 STEP 10 ' affichage des 100 groupes
a = a + 1
LOCATE 11 + a, 10: PRINT " ";
FOR J = 0 TO 9
PRINT alea$(i + J);
NEXT
PRINT
NEXT
a = 0
a$ = "# ": Morse ' envoie de # au s/prog Morse
FOR i = 1 TO 100 STEP 10 ' et des 100 groupes
a = a + 1
FOR J = 0 TO 9 ' par lignes de 10 groupes
Sortie
' t'en as marre, tu quittes.
IF Sort% = 1 THEN EXIT SUB
a$ = alea$(i + J): Morse ' sinon ça continue
NEXT
NEXT
a$ = " #": Morse ' envoie du BT de fin de texte
END SUB
SUB Apprendre
IF Choix% = 2 THEN Choix% = 0: Souris 0: PCOPY 2, 0: Souris 1: EXIT SUB
IF Choix% <> 2 THEN
Souris 0: PCOPY 2, 0
COLOR 0, 7: LOCATE 1, 14: PRINT " Apprendre le Morse "
COLOR 0, 1
LOCATE 3, 16: PRINT "╔═════════════╗"
LOCATE 4, 16: PRINT "║ Apprendre ║██"
LOCATE 5, 16: PRINT "║ ------- ║██"
LOCATE 6, 16: PRINT "║ A à Z ║██"
LOCATE 7, 16: PRINT "║ 0 à 9 ║██"
LOCATE 8, 16: PRINT "║ Ponctuation ║██"
LOCATE 9, 16: PRINT "║ Codes Q ║██"
LOCATE 10, 16: PRINT "╚═════════════╝██"
LOCATE 11, 18: PRINT "███████████████"
Souris 1
END IF
Choix% = 2
END SUB
SUB auteur
IF Choix% = 6 THEN Choix% = 0: Souris 0: PCOPY 2, 0: Souris 1: EXIT SUB
IF Choix% <> 6 THEN
Souris 0: PCOPY 0, 3: PCOPY 2, 0: Souris 1
COLOR 0, 1
LOCATE 3, 56: PRINT "╔═════════════╗"
LOCATE 4, 56: PRINT "║ Annuler ║██"
LOCATE 5, 56: PRINT "╚═════════════╝██"
LOCATE 6, 58: PRINT "███████████████"
v1 = v: t1 = t: frq1 = frq ' Fréquence et vitesse du code d'origine
v = 1200: t = .8: frq = 2400 ' Nouvelle Frq et vitesse.
a = 16
a$ = SourisD$ ' SourisD$ = Nom et Adresse de l'Auteur
FOR i = 1 TO LEN(SourisD$) ' Codés par Xor 16 à 24
b$ = MID$(SourisD$, i, 1) '
b = (ASC(b$)) ' l'idée m'est venue en décortiquant
c = b XOR a ' un programme des [ Ducons Craker's ]
MID$(a$, i, 1) = CHR$(c) ' tournant sur CPC 6128 (il y a lontemps)
a = a + 1: IF a > 25 THEN a = 17 '
NEXT '
LOCATE 12, 12: PRINT a$ '
Morse
IF Sort% = 1 THEN
v = v1: t = t1: frq = frq1 ' Remise en place Frq et vitesse d'origine
EXIT SUB
END IF
END IF
Choix% = 6
END SUB
SUB Cadre (x1%, y1%)
c1% = POS(0)
COLOR 0
PRINT "┌"; STRING$(x1% - 2, "─"); "┐"
b$ = "│" + SPACE$(x1% - 2) + "│"
FOR i% = 1 TO y1% - 2
LOCATE , c1%
PRINT b$
NEXT i%
LOCATE , c1%
PRINT "└" + STRING$(x1% - 2, "─"); "┘"
END SUB
SUB ChargeTexte
Souris 0: PCOPY 2, 0
COLOR 0, 1
LOCATE 3, 34: PRINT "╔═════════════╗"
LOCATE 4, 34: PRINT "║ Annuler ║██"
LOCATE 5, 34: PRINT "╚═════════════╝██"
LOCATE 6, 36: PRINT "███████████████"
SetSouris 36, 4
Souris 1
FOR i = 1 TO 14
EHaut
NEXT
Scr = 8: COLOR 1, 0
OPEN nom$ FOR INPUT AS #1
DO
LINE INPUT #1, a$
Scr = Scr + 1: IF Scr > 22 THEN Scr = 22: EHaut
LOCATE Scr, 1: PRINT " "; a$
Morse
IF Sort% = 1 THEN CLOSE #1: EXIT SUB
LOOP UNTIL (EOF(1))
CLOSE #1
END SUB
SUB ChargeVitesse
OPEN "Morse.dat" FOR INPUT AS #1
INPUT #1, SourisD$ ' Nom et adresse de l'auteur codé par Xor
FOR i = 1 TO 9
INPUT #1, S$(i)
NEXT
INPUT #1, v ' Une variable qui ne sert à rien
INPUT #1, t ' Vitesse
INPUT #1, frq ' Fréquence
CLOSE #1
END SUB
SUB clair
Souris 0: PCOPY 0, 4: PCOPY 2, 0: Souris 1
LOCATE 3, 28: PRINT " Exercice texte clair "
LOCATE 22, 36: PRINT " Annuler "
LOCATE 20, 36: PRINT " OK "
selectfile chemin$, filename$
COLOR 1, 7
IF Sort% = 1 THEN Choix% = 3: EXIT SUB
Choix% = 3
END SUB
SUB Click ' Attend que l'on relache le bouton de la souris
WHILE SourisB%
GetSouris
WEND
SourisB% = 0
END SUB
SUB CodesQ
Choix% = 0
LOCATE 4, 35: PRINT " Codes internationaux "
LOCATE 5, 35: PRINT " -------------------- "
LOCATE 6, 35: PRINT " QTH .... = ma position est .... "
LOCATE 7, 35: PRINT " QTH ? = quelle est votre position ? "
LOCATE 8, 35: PRINT " QRZ .... = j'appelle ..... "
LOCATE 9, 35: PRINT " QRZ ? = qui m'appelle ? "
LOCATE 10, 35: PRINT " QSO .... = j'ai liaison avec .... "
LOCATE 11, 35: PRINT " QSO ? .... = avez-vous liaison avec ....? "
LOCATE 12, 35: PRINT " "
LOCATE 13, 35: PRINT " Vous trouverez les codes internationaux "
LOCATE 14, 35: PRINT " auprès de toute Station Radio Amateur. "
LOCATE 15, 35: PRINT " "
LOCATE 16, 35: PRINT " "
Click
DO
GetSouris
LOOP UNTIL SourisB% = 1
Souris 0: PCOPY 2, 0: Souris 1: Choix% = 0
END SUB
SUB EHaut
DEF SEG = VARSEG(EcranHaut(1))
CALL Absolute(VARPTR(EcranHaut(1)))
DEF SEG
END SUB
SUB Exercices
IF Choix% = 3 THEN Choix% = 0: Souris 0: PCOPY 2, 0: Souris 1: EXIT SUB
IF Choix% <> 3 THEN
Souris 0: PCOPY 2, 0
COLOR 0, 7: LOCATE 1, 36: PRINT " Exercices "
COLOR 0, 1
LOCATE 3, 34: PRINT "╔═════════════╗"
LOCATE 4, 34: PRINT "║ Annuler ║██"
LOCATE 5, 34: PRINT "║ --------- ║██"
LOCATE 6, 34: PRINT "║ Texte Clair ║██"
LOCATE 7, 34: PRINT "║ ║██"
LOCATE 8, 34: PRINT "║ Aléatoire ║██"
LOCATE 9, 34: PRINT "╚═════════════╝██"
LOCATE 10, 36: PRINT "███████████████"
Souris 1
END IF
Choix% = 3
END SUB
SUB GetSouris
R% = Interr%(&H33, 3, BX%, CX%, DX%)
SourisB% = BX%
SourisX% = CX% / 8 + 1
SourisY% = DX% / 8 + 1
END SUB
SUB Info
IF Choix% = 4 THEN Choix% = 0: Souris 0: PCOPY 2, 0: Souris 1: EXIT SUB
IF Choix% <> 4 THEN
Souris 0: PCOPY 2, 0
COLOR 0, 7: LOCATE 1, 49: PRINT " Souris "
COLOR 0, 1
LOCATE 3, 41: PRINT "╔═════════════════════╗"
LOCATE 4, 41: PRINT "║ Info. Souris ║██"
LOCATE 5, 41: PRINT "║ ------------ ║██"
LOCATE 6, 41: PRINT "║ Un clic Prolongé ║██"
LOCATE 7, 41: PRINT "║ est nécessaire pour ║██"
LOCATE 8, 41: PRINT "║ que l'action soit ║██"
LOCATE 9, 41: PRINT "║ prise en compte, ║██"
LOCATE 10, 41: PRINT "║ en particulier pour ║██"
LOCATE 11, 41: PRINT "║ sortir des règlages ║██"
LOCATE 12, 41: PRINT "║ et des Exercices. ║██"
LOCATE 13, 41: PRINT "╚═════════════════════╝██"
LOCATE 14, 43: PRINT "███████████████████████"
Souris 1
END IF
Choix% = 4
END SUB
SUB Init
SCREEN 0, 1, 2, 2: CLS ' Effacement des écrans utilisés par le programme.
SCREEN 0, 1, 3, 3: CLS ' "
SCREEN 0, 1, 1, 1: CLS ' "
SCREEN 0, 1, 0, 0: CLS ' "
PALETTE 1, 63
COLOR 1, 15
LOCATE 1, 1, 0
CLS ' Création du menu
COLOR 0, 1
LOCATE 1, 1: PRINT " Règlages Apprendre le Morse Exercices Souris Auteur Quitter "
PCOPY 0, 2
RESTORE Souris.Data ' Chargement des codes machine pour la souris
DEF SEG = VARSEG(ms%(0))
FOR i% = 0 TO 99
READ Octet$
IF Octet$ = "#" THEN EXIT FOR
POKE VARPTR(ms%(0)) + i%, VAL("&H" + Octet$)
NEXT
RESTORE Lm.Data
P = VARPTR(EcranHaut(1))
DEF SEG = VARSEG(EcranHaut(1))
FOR i = 0 TO 13
READ J
POKE (P + i), J
NEXT i
DEF SEG
ChargeVitesse ' Chargement des vitesse et fréquence et XOR
SetSouris 40, 10 ' Positionne la souris en 40,10
Souris 1 ' affiche la souris
COLOR 0, 7
END SUB
FUNCTION Interr% (NuM%, ax%, BX%, CX%, DX%)
IF ms%(0) = 0 THEN PasBon
DEF SEG = VARSEG(ms%(0))
POKE VARPTR(ms%(0)) + 26, NuM%
CALL Absolute(ax%, BX%, CX%, DX%, VARPTR(ms%(0)))
Interr% = ax%
END FUNCTION
SUB Lecon (L%)
LOCATE 4, 16: PRINT "║ Annuler ║██"
COLOR 1, 7: FOR i = 14 TO 22: LOCATE i, 1: PRINT SPACE$(78): NEXT
COLOR 0, 1
IF L% = 1 THEN '1
P$ = "# A N I M E A N I M E "
LOCATE 14, 7
GOSUB OKLecon
P$ = " ANIME EMINA AEINM MINAE IAMEN EMINA NAMIE MANIE NMEIE AEAMN #"
LOCATE 15, 7
GOSUB OKLecon
END IF
IF L% = 2 THEN '2
P$ = "# B V K R W B V K R W "
LOCATE 14, 7
GOSUB OKLecon
P$ = " BVKRW WVKBR VBWKR VRKBW RBRKW BVVRK VKBVR RRVKB WRKVB BVRWK #"
LOCATE 15, 7
GOSUB OKLecon
END IF
IF L% = 3 THEN '3
P$ = "# C F L P X C F L P X "
LOCATE 14, 7
GOSUB OKLecon
P$ = " CFLPX FCXPL PCXFL CLXPF CCLPF XLFXP CLFPX LXFPC CFLPX XPFLC #"
LOCATE 15, 7
GOSUB OKLecon
END IF
IF L% = 4 THEN '4
P$ = "# D U S O G D U S O G "
LOCATE 14, 7
GOSUB OKLecon
P$ = " DUSOG UDGOS DOSUG OGSUD SSOGDU UDSGG GOSUD ODUSD DUSOG OGDUS #"
LOCATE 15, 7
GOSUB OKLecon
END IF
IF L% = 5 THEN '5
P$ = "# Z Q Y X T H Z Q Y X T H "
LOCATE 14, 7
GOSUB OKLecon
P$ = " ZQYXT HZQYX THZXQ YZTHX HTXYQ ZXTHY QXTHZ YXQTH TYZQX YHQTZ #"
LOCATE 15, 7
GOSUB OKLecon
END IF
IF L% = 7 THEN '1&2
P$ = "# A N I M E B V K R W A N I M E B V K R W "
LOCATE 14, 7
GOSUB OKLecon
P$ = " ANIME BVKRW ABNVI KMREW WKRVE BIMAN WRKVB ENIMA WERMK IVNBA #"
LOCATE 15, 7
GOSUB OKLecon
END IF
IF L% = 8 THEN '1&2&3
P$ = "# ACNFI LMPEX BCVCK CRCWC ACNFI FMFEF BAVAK APRWX ALBCI FEKNV "
LOCATE 14, 7
GOSUB OKLecon
P$ = " VNKEF ICBLA XCBLA XWRPA KAVAB FENPM IFNCA CWCRB XEPML IFNCA "
LOCATE 15, 7
GOSUB OKLecon
P$ = " VNKLA EFXCB XWRPA ICPKA VABFE BLANI FNMCA WMMRB XEPCL INCAC #"
LOCATE 16, 7
GOSUB OKLecon
END IF
IF L% = 9 THEN '1&2&3&4
P$ = "# ARNBI PCMDO EVWFU XKGLS EODMC PIBNR ASLGK XUFWV IBNRA ODMCP "
LOCATE 14, 7
GOSUB OKLecon
P$ = " IBARN OEVWF UXSEO DMCPI BNRBI PASLG KCMDX UFWVN RKGLA ODMCP "
LOCATE 15, 7
GOSUB OKLecon
P$ = " VNILG BAVMC WFUXS EODPI BNRBI PDMAO ESKCM DXUFR NWRKG LAOCP "
LOCATE 16, 7
GOSUB OKLecon
P$ = " PCOAL GKVNI LESGB MCWFA VXSEU OPIBD NBIRP RMAOK DXCMU FWRRN #"
LOCATE 17, 7
GOSUB OKLecon
END IF
IF L% = 10 THEN '1&2&3&4&5
P$ = "# AZRNB QIPYC MDXOE TVWFH UXZKG LSEQO DMCYP IBNRX ASLGT KXUFH "
LOCATE 14, 9
GOSUB OKLecon
P$ = " WVIBN AODMC PZQYT VAZRN BQIPY CMDXO ETVWF HUXZK GLSEQ ODMCY "
LOCATE 15, 9
GOSUB OKLecon
P$ = " PIBNR XASLG TKXUF HAODM CPZQY TVAZR NBQIP YCMDX OETVWFIBNRX #"
LOCATE 16, 9
GOSUB OKLecon
END IF
IF L% = 11 THEN '1&2&3&4&5&chiffres
P$ = "# A1ZRN 2BQ3I PY4CM 5DXO6 ET7VW F8HU9 XZK0G L5SEQ 5OD6M C4YPI "
LOCATE 14, 9
GOSUB OKLecon
P$ = " WVI7B N65AO D4M3C 9P8ZQ Y2TVA 7BN8R 9XA1S L23GT KXUFH 0ZRNB "
LOCATE 15, 9
GOSUB OKLecon
P$ = " D1MC4 PZQ3Y TV5AZ 5RNB9 QIPY8 TVW4F IBNR0 E4TVW WZ0K2 G8LSE "
LOCATE 16, 9
GOSUB OKLecon
P$ = " P6IBN R00X1 ASL8G TK4XU FH5AO 1QIPY CMDXO 7FH1U E4TVW Q9ODM "
LOCATE 17, 9
GOSUB OKLecon
P$ = " C5YXE 8CMDX 76O2E PZQ3Y 5DXO6 R8NB7 TG32L 7L2J8 QZOA0 AGDES #"
LOCATE 18, 9
GOSUB OKLecon
END IF
IF L% = 12 THEN 'Ponctuation
P$ = "# , . / : ( ) - + é à ? ' "
LOCATE 14, 7
GOSUB OKLecon
P$ = " à l'école : ( 30 + 1 / 2 = 31 - 0, 5 ) ok ? A+ # "
LOCATE 15, 7
GOSUB OKLecon
END IF
IF L% = 13 THEN 'Chiffres
P$ = "# 1 2 3 4 5 6 7 8 9 0 "
LOCATE 14, 7
GOSUB OKLecon
P$ = " 12345 67890 78946 32109 28163 72945 46859 10327 09524 86173 #"
LOCATE 15, 7
GOSUB OKLecon
END IF
GOTO finLecon
OKLecon:
FOR i = 1 TO LEN(P$)
a$ = MID$(P$, i, 1)
PRINT a$;
Morse
IF Sort% = 1 THEN GOTO finLecon ' t'en as marre, tu quittes.
NEXT
RETURN
finLecon:
Choix% = 7
Sort% = 0
'Souris 0: PCOPY 2, 0: Souris 1: choix% = 0: L% = 0
END SUB
SUB Menu
DO
DebutMenu:
IF Sort% = 1 THEN Souris 0: PCOPY 2, 0: Souris 1: Choix% = 0: Sort% = 0
a$ = INKEY$: IF a$ = CHR$(27) THEN Quitter
IF a$ = "q" OR a$ = "Q" THEN Quitter
IF a$ = "a" OR a$ = "A" THEN auteur
'LOCATE 23, 1: PRINT "X:"; SourisX%; " Y:"; SourisY%, choix%
GetSouris
SELECT CASE SourisY% ' pour cette boucle, rien à dire
CASE 1 ' les SUBs portent le nom de leur
SELECT CASE SourisB% ' fonction
CASE 1
SELECT CASE SourisX%
CASE 2 TO 11
Reglage
Click
CASE 14 TO 33
Apprendre
Click
CASE 36 TO 46
Exercices
Click
CASE 49 TO 56
Info
Click
CASE 59 TO 66
Click
auteur
CASE 70 TO 78
Click
Quitter
END SELECT
END SELECT
END SELECT
SELECT CASE SourisB%
CASE 2
EXIT SUB
END SELECT
IF Choix% = 2 THEN
SELECT CASE SourisB%
CASE 1
SELECT CASE SourisX%
CASE 17 TO 29
SELECT CASE SourisY%
CASE 6
aaz
CASE 7
Lecon 13
CASE 8
Lecon 12
CASE 9
CodesQ
CASE 8
END SELECT
END SELECT
END SELECT
END IF
IF Choix% = 9 THEN
SELECT CASE SourisB%
CASE 1
SELECT CASE SourisX%
CASE 17 TO 28
SELECT CASE SourisY%
CASE 4
Souris 0: PCOPY 2, 0: Souris 1: Choix% = 0
END SELECT
END SELECT
END SELECT
END IF
IF Choix% = 7 THEN
SELECT CASE SourisB%
CASE 1
SELECT CASE SourisX%
CASE 17 TO 28
SELECT CASE SourisY%
CASE 4
Souris 0: PCOPY 2, 0: Souris 1: Choix% = 0
CASE 6 TO 10
Lecon SourisY% - 5
END SELECT
CASE 37 TO 56
SELECT CASE SourisY%
CASE 4 TO 10
Lecon SourisY% + 2
END SELECT
END SELECT
END SELECT
END IF
IF Choix% = 3 THEN
SELECT CASE SourisB%
CASE 1
SELECT CASE SourisX%
CASE 35 TO 47
SELECT CASE SourisY%
CASE 4
Souris 0: PCOPY 2, 0: Souris 1: Choix% = 0
CASE 6
clair
CASE 8
Aleatoire
END SELECT
END SELECT
END SELECT
END IF
IF Choix% = 1 THEN
LOCATE 6, 5: PRINT USING ("##### Hz"); frq
'LOCATE 10, 5: PRINT USING ("#####"); v ' calcul à revoir
GOSUB 100: GOSUB 100: GOSUB 100: GOSUB 200: GOSUB 300: GOSUB 300
GetSouris
SELECT CASE SourisB% ' Règlage Fréquence et Vitesse
CASE 1
SELECT CASE SourisY%
CASE 4
SELECT CASE SourisX%
CASE 3 TO 14
Souris 0: PCOPY 2, 0: Souris 1: Choix% = 0
END SELECT
CASE 7
SELECT CASE SourisX%
CASE 3
frq = frq - 100: IF frq < 37 THEN frq = frq + 100
CASE 14
frq = frq + 100: IF frq > 32767 THEN frq = frq - 100
END SELECT
CASE 9
SELECT CASE SourisX%
CASE 3
t = t + .1: v = v - 80: IF t > 65535 THEN t = t + .1: v = v + 5
CASE 14
t = t - .1: v = v + 80: IF t < 0 THEN t = t + .1: v = v - 5
END SELECT
END SELECT
END SELECT
END IF
IF Choix% = 5 THEN
GetSouris
SELECT CASE SourisB%
CASE 1
SELECT CASE SourisY%
CASE 1
GOTO FinMenu
CASE 10
SELECT CASE SourisX%
CASE 54 TO 58
Souris 0
SauveVitesse
GOTO termine
CASE 67 TO 72
termine:
Souris 0 ' Quitter le programme
COLOR 15, 0
SCREEN 0, 1, 2, 2: CLS ' Explications dans Init
SCREEN 0, 1, 3, 3: CLS
SCREEN 0, 1, 1, 1: CLS
SCREEN 0, 1, 0, 0: CLS
COLOR 15, 0
a = 17 ' ici, nom nom et mon
FOR J = 1 TO 8 ' adresse codés par Xor
a$ = S$(J) '
FOR i = 1 TO LEN(a$) '
b$ = MID$(S$(J), i, 1) '
b = (ASC(b$)) '
c = b XOR a '
MID$(a$, i, 1) = CHR$(c) '
a = a + 1: IF a > 25 THEN a = 17 '
IF J > 1 THEN COLOR 15, 4 '
NEXT '
LOCATE 10 + J, 28: PRINT a$ '
NEXT '
COLOR 15, 0 '
SYSTEM
END SELECT
END SELECT
END SELECT
END IF
FinMenu:
LOOP
' Série de V pour les règlages
100 SOUND frq, t ' Point
SOUND 32767, t
RETURN
200 SOUND frq, t * 2 ' Trait
SOUND 32767, t
RETURN
300 SOUND 32767, t * 2 ' Espace
RETURN
END SUB
SUB Morse
' Alphabet, chiffres et ponctuation usuelle
FOR lon = 1 TO LEN(a$)
SortieM
' t'en as marre, tu quittes.
IF Sort% = 1 THEN EXIT SUB
L = ASC(MID$(a$, lon, 1))
IF L = 32 THEN GOSUB 30
IF L = 130 THEN GOSUB eaccent
IF L = 133 THEN GOSUB aaccent
IF L > 32 AND L < 65 THEN L = L - 32: GOSUB chiffres
IF L > 64 AND L < 91 THEN L = L - 64: GOSUB lettres
IF L > 96 AND L < 123 THEN L = L - 96: GOSUB lettres
SortieM
IF Sort% = 1 THEN EXIT SUB
L = ASC(MID$(a$, lon, 1))
NEXT
GOTO FinMorse
chiffres:
ON L GOSUB 30, 30, bt, 30, 30, 30, apostrophe, parent, parent, X, ar, virgule, tiret, pt, barre, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, pt2, 30, 30, bt, 30, imi, 30
RETURN
lettres:
ON L GOSUB a, b, c, d, e, f, g, h, i, J, k, L, m, n, O, P, q, R, S, t, u, v, w, X, Y, z
RETURN
END
10 SOUND frq, t ' point
SOUND 32767, t
RETURN
20 SOUND frq, t * 2 ' trait
SOUND 32767, t
RETURN
30 SOUND 32767, t * 2 ' espace
RETURN
a: GOSUB 10: GOSUB 20: GOSUB 30: RETURN
b: GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 30: RETURN
c: GOSUB 20: GOSUB 10: GOSUB 20: GOSUB 10: GOSUB 30: RETURN
d: GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 30: RETURN
e: GOSUB 10: GOSUB 30: RETURN
f: GOSUB 10: GOSUB 10: GOSUB 20: GOSUB 10: GOSUB 30: RETURN
g: GOSUB 20: GOSUB 20: GOSUB 10: GOSUB 30: RETURN
h: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 30: RETURN
i: GOSUB 10: GOSUB 10: GOSUB 30: RETURN
J: GOSUB 10: GOSUB 20: GOSUB 20: GOSUB 20: GOSUB 30: RETURN
k: GOSUB 20: GOSUB 10: GOSUB 20: GOSUB 30: RETURN
L: GOSUB 10: GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 30: RETURN
m: GOSUB 20: GOSUB 20: GOSUB 30: RETURN
n: GOSUB 20: GOSUB 10: GOSUB 30: RETURN
O: GOSUB 20: GOSUB 20: GOSUB 20: GOSUB 30: RETURN
P: GOSUB 10: GOSUB 20: GOSUB 20: GOSUB 10: GOSUB 30: RETURN
q: GOSUB 20: GOSUB 20: GOSUB 10: GOSUB 20: GOSUB 30: RETURN
R: GOSUB 10: GOSUB 20: GOSUB 10: GOSUB 30: RETURN
S: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 30: RETURN
t: GOSUB 20: GOSUB 30: RETURN
u: GOSUB 10: GOSUB 10: GOSUB 20: GOSUB 30: RETURN
v: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 20: GOSUB 30: RETURN
w: GOSUB 10: GOSUB 20: GOSUB 20: GOSUB 30: RETURN
X: GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 20: GOSUB 30: RETURN
Y: GOSUB 20: GOSUB 10: GOSUB 20: GOSUB 20: GOSUB 30: RETURN
z: GOSUB 20: GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 30: RETURN
1 : GOSUB 10: GOSUB 20: GOSUB 20: GOSUB 20: GOSUB 20: GOSUB 30: RETURN
2 : GOSUB 10: GOSUB 10: GOSUB 20: GOSUB 20: GOSUB 20: GOSUB 30: RETURN
3 : GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 20: GOSUB 20: GOSUB 30: RETURN
4 : GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 20: GOSUB 30: RETURN
5 : GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 30: RETURN
6 : GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 30: RETURN
7 : GOSUB 20: GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 30: RETURN
8 : GOSUB 20: GOSUB 20: GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 30: RETURN
9 : GOSUB 20: GOSUB 20: GOSUB 20: GOSUB 20: GOSUB 10: GOSUB 30: RETURN
0 : GOSUB 20: GOSUB 20: GOSUB 20: GOSUB 20: GOSUB 20: GOSUB 30: RETURN
pt: GOSUB 10: GOSUB 20: GOSUB 10: GOSUB 20: GOSUB 10: GOSUB 20: GOSUB 30: RETURN
pt2: GOSUB 20: GOSUB 20: GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 30: RETURN
ar: GOSUB 10: GOSUB 20: GOSUB 10: GOSUB 20: GOSUB 10: GOSUB 30: RETURN
virgule: GOSUB 20: GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 20: GOSUB 20: GOSUB 30: RETURN
eaccent: GOSUB 10: GOSUB 10: GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 30: RETURN
aaccent: GOSUB 10: GOSUB 20: GOSUB 20: GOSUB 10: GOSUB 20: GOSUB 30: RETURN
imi: GOSUB 10: GOSUB 10: GOSUB 20: GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 30: RETURN
barre: GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 20: GOSUB 10: GOSUB 30: RETURN
bt: GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 20: GOSUB 30: RETURN
parent: GOSUB 20: GOSUB 10: GOSUB 20: GOSUB 20: GOSUB 10: GOSUB 20: GOSUB 30: RETURN
tiret: GOSUB 20: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 10: GOSUB 20: GOSUB 30: RETURN
apostrophe: GOSUB 10: GOSUB 20: GOSUB 20: GOSUB 20: GOSUB 20: GOSUB 10: GOSUB 30: RETURN
'teste: GOSUB 10: RETURN
FinMorse:
Choix% = 0
END SUB
SUB PasBon ' rien à dire
SCREEN 0, 1, 2, 2: CLS ' Effacement des écrans utilisés par le programme.
SCREEN 0, 1, 3, 3: CLS ' "
SCREEN 0, 1, 1, 1: CLS ' "
SCREEN 0, 1, 0, 0
COLOR 15, 0: CLS
LOCATE 10, 26: PRINT " Un problème est survenu "
LOCATE 12, 26: PRINT " retour au système"
SYSTEM
END SUB
SUB Quitter
IF Choix% = 5 THEN Choix% = 0: Souris 0: PCOPY 2, 0: Souris 1: EXIT SUB
IF Choix% <> 5 THEN
Souris 0: PCOPY 2, 0
COLOR 0, 7: LOCATE 1, 70: PRINT " Quitter "
COLOR 0, 1
LOCATE 3, 49: PRINT "╔═══════════════════════════╗"
LOCATE 4, 49: PRINT "║ Quitter ║██"
LOCATE 5, 49: PRINT "║ ------- ║██"
LOCATE 6, 49: PRINT "║ Voulez-vous sauvegarder ║██"
LOCATE 7, 49: PRINT "║ la vitesse et la tonalité ║██"
LOCATE 8, 49: PRINT "║ pour la prochaine fois? ║██"
LOCATE 9, 49: PRINT "║ ║██"
LOCATE 10, 49: PRINT "║ Oui / Non ║██"
LOCATE 11, 49: PRINT "╚═══════════════════════════╝██"
LOCATE 12, 51: PRINT "█████████████████████████████"
Souris 1
END IF
Choix% = 5
END SUB
SUB readfiles (path$, masque$, files$(), flen&(), attr%(), masque%, nbrefich%)
dta$ = STRING$(80, " ")
ax% = Interr%(&H21, &H1A00, 0, 0, SADD(dta$))
nbrefich% = 0
filename$ = path$ + masque$ + CHR$(0)
ax% = Interr%(&H21, &H4E00, 0, masque%, SADD(filename$))
WHILE ax% < 18
f$ = MID$(dta$, 31, 12)
IF INSTR(f$, CHR$(0)) THEN f$ = LEFT$(f$, INSTR(f$, CHR$(0)) - 1)
IF f$ <> "." THEN
nbrefich% = nbrefich% + 1
files$(nbrefich%) = f$
flen&(nbrefich%) = CVL(MID$(dta$, 27, 4))
attr%(nbrefich%) = ASC(MID$(dta$, 22, 1))
IF attr%(nbrefich%) = 16 THEN
files$(nbrefich%) = "[" + files$(nbrefich%) + "]"
END IF
END IF
ax% = Interr%(&H21, &H4F00, 0, 0, 0)
WEND
END SUB
SUB Reglage
IF Choix% = 1 THEN Choix% = 0: Souris 0: PCOPY 2, 0: Souris 1: EXIT SUB
IF Choix% <> 1 THEN
Souris 0: PCOPY 2, 0
COLOR 0, 7: LOCATE 1, 2: PRINT " Règlages "
COLOR 0, 1
LOCATE 3, 2: PRINT "╔════════════╗"
LOCATE 4, 2: PRINT "║ Sortir ║██"
LOCATE 5, 2: PRINT "║ -------- ║██"
LOCATE 6, 2: PRINT "║ ║██"
LOCATE 7, 2: PRINT "║"; CHR$(25); " Tonalité "; CHR$(24); "║██"
LOCATE 8, 2: PRINT "║ ║██"
LOCATE 9, 2: PRINT "║"; CHR$(25); " Vitesse "; CHR$(24); "║██"
LOCATE 10, 2: PRINT "║ ║██"
LOCATE 11, 2: PRINT "╚════════════╝██"
LOCATE 12, 4: PRINT "██████████████"
Souris 1
END IF
Choix% = 1
END SUB
SUB SauveVitesse ' Idem que ChargeVitesse
OPEN "Morse.dat" FOR OUTPUT AS #1
PRINT #1, SourisD$
FOR i = 1 TO 9
PRINT #1, S$(i)
NEXT
PRINT #1, v
PRINT #1, t
PRINT #1, frq
CLOSE #1
END SUB
SUB selectentry (titre$, liste$(), nbre%, X%, Y%, b%, h%, Choix1%)
LOCATE Y%, X%
Cadre b% + 2, h% + 2
'COLOR 4
LOCATE Y% - 1, X% + (b% - LEN(titre$) + 1) / 2
PRINT titre$;
offs% = 0
Choix1% = 1
nom$ = liste$(Choix1%)
DO
Boucle:
Souris 0
FOR i% = 1 TO h%
LOCATE Y% + i%, X% + 1
IF i% + offs% = Choix1% THEN COLOR 1, 0 ELSE COLOR 0, 7
IF i% + offs% <= nbre% THEN
PRINT liste$(i% + offs%); TAB(X% + b% + 1);
ELSE
PRINT SPACE$(b%);
END IF
NEXT i%
Souris 1
DO
GetSouris
LOCATE 15, 1: PRINT "x:"; SourisX%; "y:"; SourisY%; "Bouton:"; SourisB%
SELECT CASE SourisB%
CASE 1
SELECT CASE SourisX%
CASE 53 TO 68
SELECT CASE SourisY%
CASE 6 TO 20
Choix1% = SourisY% - 5: GOTO Touches
END SELECT
CASE 36 TO 44
SELECT CASE SourisY%
CASE 20
ChargeTexte
EXIT SUB
CASE 22
Sort% = 1
EXIT SUB
END SELECT
END SELECT
END SELECT
key$ = INKEY$
LOOP UNTIL LEN(key$)
IF key$ = CHR$(27) THEN Choix1% = 0: END
'IF key$ = CHR$(13) THEN Choix% = 11: EXIT SUB
IF key$ = CHR$(13) THEN
ChargeTexte
IF Sort% = 1 THEN EXIT SUB
EXIT SUB
END IF
Touches:
IF Choix1% > nbre% THEN Choix1% = nbre%
IF Choix1% < 1 THEN Choix1% = 1
IF Choix1% <= offs% THEN offs% = Choix1% - 1
IF offs% < Choix1% - h% THEN offs% = Choix1% - h%
GOTO fin
LOOP
COLOR 1, 0
fin:
nom$ = liste$(Choix1%)
'chargeico
GOTO Boucle
END SUB
SUB selectfile (chemin$, filename$)
'x% = xpos
'y% = 10'CSRLIN
COLOR 0, 7
LOCATE 9, 9: PRINT "Choisissez votre texte avec la souris"
DO
readfiles chemin$, "*.txt", files$(), flen&(), attr%(), 16 + 32, nbrefich%
selectentry "Selection du Texte", files$(), nbrefich%, 52, 5, 16, 15, chois%
IF Choix1% > 0 AND attr%(Choix1%) = 16 THEN
chemin$ = chemin$ + MID$(files$(Choix1%), 2, LEN(files$(Choix1%)) - 2) + "\"
IF RIGHT$(chemin$, 3) = "..\" THEN
FOR i% = LEN(chemin$) - 4 TO 1 STEP -1
IF MID$(chemin$, i%, 1) = "\" THEN
chemin$ = LEFT$(chemin$, i%)
EXIT FOR
END IF
NEXT i%
END IF
ELSE
EXIT DO
END IF
LOOP
filename$ = files$(Choix1%)
END SUB
SUB SetSouris (X%, Y%)
R% = Interr%(&H33, 4, BX%, X% * 8 - 8, Y% * 8 - 8)
END SUB
SUB Sortie
GetSouris ' pour sortir d'une SUB en cours
SELECT CASE SourisB%
CASE 1
SELECT CASE SourisY%
CASE 1
Sort% = 1: EXIT SUB
END SELECT
END SELECT
SourisB% = 0
END SUB
SUB SortieM
GetSouris ' pour sortir d'une SUB en cours
SELECT CASE SourisB%
CASE 1
SELECT CASE SourisY%
CASE 4
Sort% = 1: EXIT SUB
END SELECT
END SELECT
END SUB
SUB Souris (OnOff%)
IF OnOff% = 0 THEN OnOff% = 2 ELSE OnOff% = 1
R% = Interr%(&H33, OnOff%, BX%, CX%, DX%)
END SUB