1 REM Ins{nd av Kristoffer Eriksson <5357> 1985-10-19 00.55.58
KEY.INF
+--------------------------------------------------------------------+
! KEY.BAC, KEYPROG.BAS, ST[LLPAR.BAS, KEY.INF !
! F|r ABC800-serien. !
! 1985-10-15 Av Kristoffer Eriksson ABC-klubben <5357> !
! F}r kopieras fritt f|r ickekommersiella syften. !
+--------------------------------------------------------------------+
0. Inneh}ll
------------
1. Vad ska man med KEY.BAC till?
2. Filer
3. Nya BASIC-instruktioner
4. CTRL-tecken och PF-tangenter
5. Tillf{llig avst{ngning av tangentprogrammeringen (CTRL-F)
6. T|mning av bufferten (CTRL-C)
7. Kedjor av programmerade tangenter
8. Knappkn{ppningar (tangentklick)
9. SYS(6)
10. Minnes}tg}ng
11. Autostart
12. [ndring av parametrar i KEY.BAC
13. Det interna arbetet i KEY.BAC
1. Vad ska man med KEY.BAC till?
---------------------------------
KEY.BAC {r en tangentbordsbuffert med m|jlighet till omprogrammering
av alla tangenter. Dessutom kan Du med ABC 800 och 802 f} klickningar
i h|gtalaren n{r Du trycker p} tangenterna.
Tangentbordsbufferten g|r att Du inte beh|ver sitta och v{nta medan
datorn laddar ett program eller g|r n}got annat tidskr{vande - Det {r
bara att knappa vidare s} l{ser datorn ifatt s} sm}ningom.
Omprogrammering av tangenter inneb{r att n{r Du trycker p} en tangent
f}r datorn i sig n}got helt annat {n vad som st}r p} tangenten. Det
kan vara ett enda tecken eller en hel flod av bokst{ver fr}n en enda
tangent-tryckning.
- Du kan f} ett mark|r-paden p} ABC99 att ge ifr}n sig ABC77-koder
eller tv{rtom.
- Du kan programmera in ofta anv{nda kommandon p} olika tangenter.
Ex: Tryck p} CTRL-R s} skriver den RUN.
- Om Du ska g|ra n}gon sak med m}nga tangenttryckningar flera
g}nger i rad, s} kan Du programmera in dessa alla tryckningar
som {r lika fr}n g}ng till g}ng p} en eller tv} tangenter och
bara trycka p} dem.
- Du kan l{gga upp ett slags JOB-filer p} tangenterna. Alla
tryckningar som beh|vs f|r att starta och k|ra en hel rad prog-
ram kan l{ggas in p} en enda tangent, och vill Du spara denna
programmering f|r framtiden g}r det bra att l{gga programme-
ringskommandot i ett vanligt BASIC-program.
Sj{lv brukar jag programmera en tangent till att spara det program jag
arbetar med, och slipper p} s} s{tt vara r{dd f|r att skriva fel pro-
gramnamn. Namnet st}r n{mligen i b|rjan av programmet sj{lvt p} en rad
som ser ut s} h{r: "10 ! save NAMN". Tangenten ger ifr}n sig "ED",
n}gra fram}tpilar, CE, flera fram}tpilar och RETURN.
Jag brukar ocks} programmera en tangent s} att den ger ifr}n sig ca 5
fram}tpilar, vilket {r praktiskt vid programeditering.
2. Filer
---------
KEY.BAC Detta program l{gger upp tangentbufferten och |vriga
rutiner som beh|vs i datorns minne. Du kan k|ra det
n{rhelst Du uppt{cker att Du beh|ver dess finesser. Du
kan {ven f} det att k|ras automatiskt n{r Du trycker
p} reset.
KEYPROG.BAS I det skick KEY.BAC levereras startas KEYPROG automa-
tiskt n{r man k|rt KEY.BAC. Det programmerar om n}gra
tangenter s} att de avger n}gra vanliga kommandon. Det
k{nner ocks} av om Du anv{nder ett tangentbord ABC 99,
och i s} fall st{ller den om en hel del av dess tang-
enter.
ST[LLPAR.BAS Det h{r programmet anv{nder Du om n}gon av de f|rins-
t{llda parametrarna i KEY.BAC inte {r till Din bel}-
tenhet.
3. Nya BASIC-instruktioner
---------------------------
F|r att styra programmets arbete finns tv} nya BASIC-instruktioner som
kan anv{ndas b}de som direktkommandon och i program.
KEY Denna instruktion har tre varianter. Beroende p} hur m}nga
parametrar man anger kan man {ndra en tangents programme-
ring, helt avprogrammera en tangent, eller visa alla prog-
rammeringar.
KEY "tangent","nytext"
KEY A$,B$
N{r man anger tv} str{ngar programmerar man den tangent som
anges i f|rsta str{ngen till att avge den text som st}r i
andra str{ngen. Om minnesutrymmet f|r tangentprogrammeringar
inte r{cker till erh}lls felkod 201 (Minnet fullt).
Exempel: KEY "_A","RUN LIB"
CTRL-A kommer att avge texten RUN LIB n{r man
trycker p} den.
KEY "tangent"
KEY A$
Men bara en str{ng inneb{r den h{r instruktionen att den i
str{ngen angivna tangenten avprogrammeras och b|rjar funge-
rar helt normalt igen.
Exempel: KEY "_A"
F|reg}ende exempel omintetg|rs.
KEY
Om man bara skriver KEY ut en lista p} alla programmerade
tangenter. Om listan blir s} l}ng att hela inte rymms p}
bildsk{rmen f}r man mata fram slutet av listan rad f|r rad
genom att trycka p} valfri tangent upprepade g}nger. Som
standard intr{ffar det h{r om mer minst 21 tangenter {r
programmerade.
Exempel: KEY "_A","RUN LIB"
KEY "_\","RUN LIB_M2_M"
KEY
_A= "RUN LIB"
_\= "RUN LIB_M2_M"
De sista tv} raderna (plus en tomrad) skrevs ut
som svar p} det sista KEY-kommandot.
KEYMODE Denna instruktion anv{nds f|r att sl} p} och av tangentprog-
rammering och buffertanv{ndning och {ven f|r att radera all
programmering.
KEYMODE ,
Par1 p}verkar tangentbordbufferten och par2 tangentprogram-
meringen.
Par1: 0 = St{ng av bufferten.
1 = Sl} p} bufferten igen.
2 = T|m och st{ng av bufferten.
3 = T|m och sl} p} bufferten.
Par2: 0 = St{ng av tangentprogrammeringarna.
1 = Sl} p} programmeringarna igen.
2 = Radera och st{ng av all programmering.
Alla tangenter fungerar normalt igen.
3 = Radera och sl} p} programmeringen.
N{r man startar {r tangentprogrammeringen och bufferten p}.
Exempel: KEYMODE 0,0 St{ng av alla finesser men bevara
programmeringarna i minnet.
KEYMODE ,1 Sl} p} programmeringarna igen.
KEYMODE 3 Sl} p} bufferten ocks}, men t|m den
f|rst.
Som synes beh|ver man inte n|dv{ndigtvis ange b}da talen,
utan det r{cker med det som ska {ndras. Ett annat s{tt att
programm{ssigt t|mma bufferten {r med den h{r loopen:
WHILE SYS(5) : GET X$ : WEND
4. CTRL-tecken och PF-tangenter
--------------------------------
N{r man i KEY-instruktionen ska ange CTRL-kombinationer och PF-tangen-
ter kan man alltid anv{nda CHR$ om man vet tangentens ASCII-kod.
Exempel: KEY CHR$(1),"RUN LIB"+CHR$(13)
KEY CHR$(192),CHR$(12)+"LIST"+CHR$(13)
CTRL-A (CHR$(1)) ger ifr}n sig RUN LIB f|ljt av RETURN
(CHR(13)) vilket drar ig}ng LIB-programmen med en enda tang-
ent-tryckning.
PF1 (CHR$(192)) blankar bildsk{rmen och listar aktuellt
BASIC-program.
Men det finns ett annat s{tt. CTRL-koder kan skrivas som ett underst-
rykningstecken (_) f|ljt av motsvarande bokstav och PF-tangenter som
ett Et-tecken (&) f|ljt av tangentens nummer.
Exempel: KEY "_A","RUN LIB_M"
KEY "&1","_LLIST_M"
Effekten av detta exempel {r precis detsamma som exemplet
innan.
Eftersom RETURN {r detsamma som CTRL-M kan RETURN skrivas som "_M".
Fram}tpil {r CTRL-I ("_I") och bak}tpil {r CTRL-J ("_J").
Det g}r {ven att skriva PF-tangenter i kombination med CTRL och SHIFT.
CTRL anges givetvis med "_" och SHIFT anges med "#".
Exempel: KEY "&1","A"
KEY "","B"
KEY "&_1","C"
KEY "&_#1","D"
PF1 blir A, SHIFT-PF1 blir B, CTRL-PF1 blir C och
CTRL-SHIFT-PF1 blir D.
Ordningen mellan "_" och "#" spelar ingen roll, d{remot m}ste det hela
b|rja med "&".
OBS: Eftersom det som mest finns PF1 - PF15 blir det vissa problem med
att ha ytterligare siffror efter PF1. F|r att ange PF1 + 1 g}r det
inte att skriva "&11" eftersom det tolkas som PF11. I st{llet m}ste
man skriva "&011" eftersom maximalt tv} siffror efter "&" r{knas in i
PF-numret.
Exempel: KEY CHR$(129),"&012"
P} ett ABC99-bord blir STOP-tangenten programmerad till PF1
f|ljt av en tv}a.
Eftersom "_" och "&" har f}tt specialbetydelser kr{vs det lite extra
knep f|r att skriva just de tecknen. Knepet {r att dubblera tecknet.
Exempel: KEY "__","E"
KEY "&&","F"
KEY "_","G"
"_" blir E och "&" blir F. Den sista raden visar hur man
st{ller CTRL-SHIFT-O (CHR$(31)) till G.
Efter allt detta blir det {nd} tangenter |ver p} tangentbord ABC99. De
m}ste anges med CHR$. Undrar Du vad en viss tangent har f|r kod kan Du
anv{nda den h{r snutten:
GET X$ : ;ASC(X$)
Efter att ha tryckt p} RETURN ska Du trycka p} den tangent du undrar
|ver s} visas genast den tangentens ASCII-kod.
5. Tillf{llig avst{ngning av tangentprogrammeringen (CTRL-F)
-------------------------------------------------------------
Om man har exempelvis har programmerat "K" till att bli "L" blir det
lite sv}rt av avprogrammera den igen. Det g}r ju inte att utan vidare
skriva KEY "K" eftersom det genast |vers{tts till LEY "L". Om man
d{remot trycker p} CTRL-F f|re bokstaven K passerar bokstaven op}ver-
kad. KEY " K" ger r{tt resultat.
Vill man mata in ett CTRL-F f}r man trycka tv} g}nger p} CTRL-F.
I st{llet f|r CTRL-F kan man med ST[LLPAR-programmet v{lja n}gon annan
tangent.
6. T|mning av bufferten (CTRL-C)
---------------------------------
F|rutom att CTRL-C stoppar programexekvering som vanligt t|mmer den
{ven tangentbordsbufferten. Eftersom CTRL-C t|mmer bufferten kan inte
CTRL-C buffras s} som de |vriga tecknen, utan har alltid omedelbar
effekt. Det g}r heller inte att programmera n}gon annan tangent till
att ha samma effekt som CTRL-C.
7. Kedjor av programmerade tangenter
-------------------------------------
Exempel: KEY "A","B"
KEY "B","C"
Ovanst}ende exempel visar en kort kedja av programmerade tangenter.
Trycker man p} A |vers{tts det till B som i sin tur |vers{tts till C.
Effekten av att trycka p} A blir allts} ett C.
Denna m|jlighet {r starkt begr{nsad. Det {r bara sista tecknet i en
programmering som |vers{tts p} nytt.
Exempel: KEY "A","BBB"
KEY "B","C"
Effekten av att trycka p} A blir h{r BBC eftersom det sista, och BARA
det sista, B:et |vers{tts till C.
\vers{ttningen av det sista tecknet kan som vanligt undvikas med
CTRL-F (eller det tecken som Du har best{mt med ST[LLPAR).
Exempel: KEY "A","BB_FB"
KEY "B","C"
Trycker man p} A s} f}r man BBB precis som om |vers{ttningen fr}n B
till C inte fanns.
Exempel: KEY "A","B"
KEY "B","A"
Ovanst}ende exempel betyder att A ska |vers{ttas till B som ska |ver-
s{ttas till A och till B igen i all o{ndlighet. En s}dan kedja {r inte
till}ten och ger i praktiken antingen A eller B beroende p} omst{ndig-
heterna. Vill man l}ta tv} tangenter byta funktion med varandra ska
det inte skrivas som ovanst}ende exempel, utan med CTRL-F.
Exempel: KEY "A","_FB"
KEY "B","_FA"
P} det h{r s{ttet |vers{tts A till B och B till A p} ett korrekt s{tt.
8. Knappkn{ppningar (tangentklick)
-----------------------------------
Om datorn har h|gtalare (ABC 800, ABC 802) h|rs ett litet klick varje
g}ng n}gon tangent trycks ned. Denna finess kan st{ngas av med prog-
rammet ST[LLPAR.
9. SYS(6)
----------
SYS(6) brukar l{gga tillbaks senast l{sta tecken i tangentbordsbuffer-
ten genom att sl} p} tangentbordsflaggan (KEYFLG). Detta fungerar inte
n{r det finns ytterligare tecken i KEY.BAC's tangentbordsbuffert
eftersom det tidigare l{sta tecknet (KEYCHR) redan ersatts med n{sta
tecken ur bufferten.
S} {r det {ven i vanliga fall om man hinner mata in ett nytt tecken
innan SYS(6) exekveras, men det brukar inte h{nda s} ofta.
Dessv{rre anv{nder LIST-rutinen ett slags SYS(6) n{r den v{ntar p}
n}gon tangenttryckning efter att ha fyllt hela sk{rmen med programra-
der, vilket g|r att enstaka buffrade tecken kan f|rsvinna n{r en list-
ning avbryts.
10. Minnes}tg}ng
-----------------
KEY.BAC roffar }t sig ca 830 bytes plus utrymme f|r tangentbufferten
fr}n datorns RAM-minne. Programmet l{gger sig p} l{gsta oanv{nda
adress och h|jer densamma (Y.BOTM) s} att andra program inte kollide-
rar med det. Programmet {r relokerbart, vilket inneb{r att om det lig-
ger andra rutiner i botten av RAM-minnet samsas KEY.BAC med dem och
l{gger sig l{ngre upp i minnet.
Det g}r inte att anv{nda KEY.BAC tillsammans med andra program som {r
"stygga" och vill ha samma minne. Ibland kan det g} om KEY.BAC laddas
sist, efter det andra programmet. Det g}r inte heller tillsammans med
program som beh|ver hela datorns RAM-minne. ORD 800 och ORD III {r tv}
exempel p} program som inte g}r.
Tangentbuffertens storlek {r fr}n b|rjan 180 tecken, vilket b|r r{cka
till n{stan vad som helst. Tangentprogrammeringarna lagras ocks} i
bufferten (fr}n andra h}llet). Storleken kan {ndras med st{llpar, men
m}ste vara minst 25 tecken.
OBS: N{r en programmerad tangent buffras tar det bara upp en teckenpo-
sition oavsett hur m}nga tecken tangenten {r programmerad till. \ver-
s{ttningen g|rs tecken f|r tecken i takt med att de blir l{sta.
Det g|r inget om man k|r KEY.BAC flera g}nger utan att g|ra reset
emellan. KEY.BAC uppt{cker detta och dubbellagras INTE i minnet.
11. Autostart
--------------
Det {r inte n|dv{ndigt att autostarta KEY.BAC, det g}r bra att starta
"manuellt" n{r som helst, men det kan vara ganska praktiskt. Tyv{rr
}stadkommer man detta p} n}got olika s{tt med olika DOS. H{r f|ljer
n}gra riktlinjer.
Gamla DOS: Anv{nd programmet PRESTART eller PREABS f|r att {ndra
BASICINI.SYS s} att BASIC-programmet KEY.BAC autostartas.
UFD-DOS: [ndra i programmet DRINI s} att den rad i b|rjan av
programmet som b|rjar med Link$=... blir Link$='KEY.BAC'.
NET med meny0: Autostart av KEY.BAC ej l{mplig, eftersom meny0 ska
autostartas i st{llet.
I vanliga fall forts{tter uppstarten efter KEY.BAC med programmet
KEYPROG.BAC. Vill man starta ytterligare program efter detta kan man
{ndra en DATA-sats i b|rjan av KEYPROG.BAC s} att den anger namnet p}
|nskat program. Vill man inte att KEYPROG.BAC ska startas av
KEY.BAC g}r detta att {ndra med programmet ST[LLPAR.
Till sist finns det en m|jlighet att alldeles f|re start av KEY.BAC
best{mma vad som ska startas direkt efter KEY.BAC: Om man med ST[LLPAR
anger att inget program ska startas efter KEY.BAC kommer KEY.BAC att
se efter om det p} adress 63747 (dosbuffert 4) i datorns minne finns
ett filnamn, och i s} fall f|rs|ka g|ra CHAIN till det. Filnamnets
slut ska markeras med kod 255. F|ljande programsnutt l{gger in F$ som
filnamn i minnet:
FOR I=1 TO LEN(F$) : POKE 63746+I,ASC(RIGHT$(F$),I) : NEXT I
POKE I,255
Denna m|jlighet finns till f|r specialfall och beh|ver inte utnyttjas
av den "genomsnittlige" anv{ndaren.
12. [ndring av parametrar i KEY.BAC
------------------------------------
Det finns ett antal parametrar i KEY.BAC som kan st{llas in i f|rv{g
med hj{lp av programmet ST[LLPAR. Dessa parametrar sparas i sj{lva
filen KEY.BAC och ligger kvar till n{sta g}ng de {ndras med ST[LLPAR.
Om man k|r KEY och vill {ndra n}gon parameter m}ste man k|ra ST[LLPAR,
ange r{tt parametrar, trycka p} reset och ladda in KEY.BAC p} nytt.
Det g}r bra att ha flera kopior (med olika namn f|rst}s om de ligger
p} samma skiva) av KEY.BAC med olika parametrar i.
N{r man k|r ST[LLPAR f}r man b|rja med att ange namnet p} den KEY--
kopia som ska behandlas. Filtyp beh|ver inte anges. De nuvarande para-
metrarna visas, varefter man f|r varje parameter f}r fr}gan om den ska
{ndras. Svarar man ja f}r man tillf{lle att mata in ett nytt v{rde.
F|ljande parametrar finns:
Antal rader i KEY-list f|re stopp: Ange hur m}nga tangenterprogramme-
ringar som ska skrivas ut av instruktionen KEY innan den
b|rjar visa en rad i taget och inv{nta tangenttryckningar
mellan varje. Anv{nds f|r att inte en l}ng lista ska rulla
f|rbi innan man hinner l{sa den. Fr}n b|rjan 21. Se KEY.
Knappklick?
Ange ja eller nej beroende p} om h|gtalaren ska klicka n{r
man skriver.
ASCII-kod f|r avprogrammeringstecknet:
Ange koden f|r den tangent som ska f|rhindra att n{sta tang-
enttrycknings programmering ska f} effekt. Se CTRL-F.
Buffertl{ngd (minst 25):
Ange hur m}nga tecken tangentbordsbufferten ska rymma. T{nk
p} att tangentprogrammeringarna ocks} lagras i bufferten.
Fr}n b|rjan {r den 180 tecken. Se Minnes}tg}ng.
Fil som chainas efter exekvering:
Ange namnet p} ett BASIC-program som ska startas automatiskt
efter KEY.BAC. Detta program brukar st{lla in en del tang-
entprogrammeringar. Max 16 tecken. Fr}n b|rjan KEYPROG. Se
Autostart.
13. Det interna arbetet i KEY.BAC
----------------------------------
Den vanliga rutinen f|r interrupt fr}n tangentbordet ers{tts av en
rutin som vid behov lagrar inl{sta tecken i en buffert. Den gamla
rutinen anv{nds inte alls.
Rutinen f|r att l{sa tecken fr}n tangentbordet (den man kommer till
via CONSI) f}r en rej{l utbyggnad med rutiner f|r att h{mta tecken
fr}n bufferten och tolkning av "programmerade" tangenter. Om det finns
tecken i bufferten ser dessa rutiner till att KEYCHR fylls p} med nya
varje g}ng den gamla CONSI h{mtat ett tecken d{rifr}n. Den gamla ruti-
nen anv{nds alltid.
Filosofin med ovanst}ende {r att KEYCHR (65507) och KEYFLG (65506)
utifr}n sett ska fungera som vanligt. Enda skillnaden blir att CONSI
M]STE anropas om det ska komma nya tecken i KEYCHR; det r{cker inte
att passivt ligga och avl{sa KEYCHR. Det f|rst inkomna tecknet hamnar
direkt i KEYCHR, men |vriga l{ggs i bufferten {nda tills CONSI anro-
pas.
De tv} nya BASIC-instruktionerna l{nkas in i instruktionslistan. Ruti-
nerna som h|r till dessa (L{gg till/Ta bort programmeringar, Lista
programmeringar, \vers{tt CTRL- och PF-tecken) tar ganska stor plats.
Alla dessa rutiner f|rkl{ds tillsammans med en relokeringsrutin till
ett ".BAC"-program som kan k|ras direkt med RUN. Programmet g}r inte
att lista eftersom det (n{stan) inte inneh}ller n}gon BASIC.
De utskrifter som g|rs (vid uppstart och instruktionen KEY) sker via
filsystemet till enheten "CON:", vilket {r en ganska "sn{ll" metod. Om
man gjort n}got finurligt med den enheten fungerar det {ven f|r
KEY.BAC.
Ha det s} trevligt med KEY |nskar
Kristoffer Eriksson <5357>
(Vassv{gen 3, 702 31 \REBRO)