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)