Login Register
Frontpage Code library Pastebin

asc2scan() ja scan2asc()

Author: Jare
Added: 6. elokuuta 2015 kello 22.01
Edited: 6. elokuuta 2015 kello 22.01
Category: Syötteet

Description

Muuntaa ascii-merkkejä KeyHit() yms. funktioiden käyttämään scan-koodimuotoon ja päinvastoin. En ole tätä nyt hirveästi testaillut. Periaatteessa tämän pitäisi kyetä tulkitsemaan esimerkiksi 0-näppäin vastaavaksi ascii-merkiksi riippumatta siitä, onko kyseessä numpadin näppäin 0 vai tavallinen näppäin 0. Tämä konversio on kuitenkin "häviöllinen": jos muunnos tehdään takaisin toisinpäin, ei voida tiedää, kumpi näppäin on kyseessä, joten koodin pitäisi palauttaa tavallisen 0-nppäimen scan-koodi. Sama pätee kaikkiin muihinkin merkkeihin, joille on näppäimistössä kaksi näppäintä. scan2asc() ei osaa huomioida mahdollisen shiftin tai alt gr:n tilaa, joten se palauttaa aina ascii-koodin olettaen, että shiftiä tai alt gr:ää ei ole painettu. Esimerkkinä, jos scan2asc():lle syötetään näppäimen E scan-koodi, palautetaan ascii-koodi, joka vastaa pikku-e-kirjainta, eikä isoa E-kirjainta tai €-merkkiä vastaavaa ascii-koodia. Taustaa ------- TEE TÄMÄ VAIN, JOS FUNKTIOISSA ON KORJATTAVAA. Muuntomerkkijonojen generointiin kehitin alkeellisen ohjelman, jossa scan-koodit selvitetään KeyDown()-funktion avulla. Ohjelma käynnistetään, ja näppäimet ja merkit "tallennetaan" seuraavasti: 1. Varmista, että caps lock ei ole päällä. 2. Painetaan numpadista kaikki merkit yksi kerrallaan läpi (jako, kerto, miinus, plus ja numerot). Järjestyksellä ei ole väliä 3. Painetaan yksitellen näppäimiä space, tab ja enter. 4. Painetaan alt gr pohjaan ja käydään yksitellen läpi kaikki näppäimet, joissa alt gr tekee jonkin erikoismerkin. Yksinkertaisinta on käydä läpi kaikki näppäimet 0 - 9, a - ö ja erikoismerkit (ei numpadin näppäimiä). 5. Painetaan vasen shift pohjaan ja käydään läpi kaikki näppäimet, joissa shift tekee eri merkin kuin ilman shiftiä. 6. Käydään jälleen kerran läpi kaikki merkinsyöttönäppäimet (poislukien numpad), tällä kertaa ilman shiftiä tai alt gr:ää. 7. Painetaan F1. Ohjelma tallentaa tulokset tiedostoon "ascii conversion.txt" ja sulkeutuu. Tulokset voidaan suoraan poimia CB-lähdekoodiin kyseisestä tiedostosta. Aina kun näppäintä painetaan, sen scan- ja ascii-arvot sijoitetaan muuntomerkkijonoihin. Periaatteessa näppäinten painallusjärjestyksellä ei ole väliä (ja saman näppäimen/merkin voi painaa uudestaan monta kertaa ilman, että muuntomerkkijonon pituus kasvaa turhaan), mutta järjestys vaikuttaa siihen, minkä scan-koodin konversio palauttaa silloin, kun tehdään muunnos asc2scan() merkille, jolle on olemassa kaksi näppäintä. scan2asc()-muunnoksessa taas järjestys määrää sen, mikä ascii-merkki palautetaan sellaisen näppäimen kohdalla, jolla on useita merkkivaihtoehtoja riippuen shiftin tai alt gr:n käytöstä. Mikäli asc2scan() tai scan2asc() -funktioissa on virheitä, koodin lopussa olevalla generointiohjelmalla voitte yrittää tehdä korjatut muuntomerkkijonot.

Code

Select all
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Function asc2scan(ascii)
	to_scan$ = "                          015         028                                                      057002003004005006007043009010043012051053052008011002003004005006007008009010052051086011086012003030048046032018033034035023036037038050049024025016019031020022047017045021044009012010   053   030048046032018033034035023036037038050049024025016019031020022047017045021044008   011      018                                                                                                      004005      041                                       029                     041                  040026                                                039                                       040026                                                039                         "
	Return Int(Mid(to_scan, ascii*3, 3))
EndFunction

Function scan2asc(scan)
	to_ascii$ = "     049050051052053054055056057048043      009113119101114116121117105111112229   013181097115100102103104106107108246228167   039122120099118098110109044046045   042   032                                                045         043                     060                                                                                                                                                                                                                                                                                          045                                                                                                                                                                                                                            "
	Return Int(Mid(to_ascii, scan*3, 3))
EndFunction











//Muuntomerkkijonojen generointiohjelma (NORMAALISTI EI TARVITSE KOPIOIDA MUKAAN!)

SCREEN 500,900

file = OpenToWrite("ascii conversion.txt")
to_scan$	= String(" ",255*3)
to_ascii$	= String(" ",255*3)
Repeat
	again:
	WaitKey
	UpdateGame
	If KeyDown(cbKeyF1) Then Exit
	ascii = GetKey()
	If ascii = 0 Then Goto again
	For scan = 1 To 255
		If scan <> cbKeyLShift And scan <> cbKeyRAlt And KeyDown(scan) Then Exit
	Next scan
	ascii_s$ = ascii
	While Len(ascii_s) < 3
		ascii_s = "0"+ascii_s
	Wend
	scan_s$ = scan
	While Len(scan_s) < 3
		scan_s = "0"+scan_s
	Wend
	to_scan	= StrInsert2(to_scan,	ascii*3,	scan_s)
	to_ascii= StrInsert2(to_ascii,	scan*3,	ascii_s)
Forever

WriteLine file, "to_scan$ = "+Chr(34)+to_scan+Chr(34)
WriteLine file, "to_ascii$ = "+Chr(34)+to_ascii+Chr(34)
CloseFile file

Function StrInsert2(haystack$, offset, needle$, legacy_offset=0)
	Return StrRemove(StrInsert(haystack, offset-1+legacy_offset, needle), offset+Len(needle)+legacy_offset, Len(needle))
EndFunction

Comments

No comments. You can be first!

Leave a comment

You must be logged in to comment.