amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > keymap.library / MapANSI [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

04.08.2003, 18:43 Uhr

_PAB_
Posts: 3016
Nutzer
Hallo,

kann mir jemand einen Beispiel-Code geben, wie man ein Zeichen bzw.
einen kurzen Text (zB. "abc") in RawKey-Codes umwandelt ?
Man kann davon ausgehen, daß die Keymap.library und das Input.devide
bereits offen sind:

KeymapBase = (struct KeymapBase *) OpenLibrary ("keymap.library", 40);
inputPort = CreateMsgPort ();
ioStdReq = CreateIORequest (inputPort, sizeof (*ioStdReq) + sizeof (*inputEvent));
inputEvent = (struct InputEvent *) (ioStdReq + 1);
OpenDevice ("input.device", 0L, (struct IORequest *) ioStdReq, 0L));
STRPTR text = "abc";

die Funktion MapANSI oder ähnliches sollte verwendet werden...

Vielen Dank & beste Grüße.

[ - Antworten - Zitieren - Direktlink - ]

04.08.2003, 19:19 Uhr

thomas
Posts: 7716
Nutzer

Warum nimmst du nicht amiga.lib/InvertString() ?

struct InputEvent *events = InvertString(text,NULL);
...
FreeIEvents (events);

Darüberhinaus ist in den Autodocs ein Beispiel, warum nimmst du das nicht ?

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

04.08.2003, 21:20 Uhr

_PAB_
Posts: 3016
Nutzer
Wie ich schrieb: "MapANSI oder ähnliches" ;-)
InvertString scheint gut zu sein.
Ich hoffe man kann das Resultat (verkettete Liste von InputEvents) einfach so an DoIO übergeben ?
Vielen Dank schonmal für den Hinweis.

[ - Antworten - Zitieren - Direktlink - ]

04.08.2003, 22:06 Uhr

platon42
Posts: 400
[Ex-Mitglied]
Zitat:
Original von _PAB_:
Wie ich schrieb: "MapANSI oder ähnliches" ;-)
InvertString scheint gut zu sein.
Ich hoffe man kann das Resultat (verkettete Liste von InputEvents) einfach so an DoIO übergeben ?
Vielen Dank schonmal für den Hinweis.


Nein, Du musst die Reihenfolge der Events noch umdrehen. Welcher Entwickler sich das auch immer ausgedacht hat, war bestimmt gerade nicht nüchtern. Außerdem gibt es da noch einen Bug, wenn man so ein paar Sonderfunktionen benutzt, wie <f10> usw...
--
--
Best Regards

Chris Hodges

[ - Antworten - Zitieren - Direktlink - ]

05.08.2003, 00:00 Uhr

_PAB_
Posts: 3016
Nutzer
@platon42:
Hmm, dann mache ich lieber eine Schleife mit MapANSI und erzeuge einzelne IORequests, die kann man wenigstens mit DoIO abschicken, mit einer InputEvent-Liste geht das offenbar doch nicht.

Falls sich jemand fragt "wofür das Ganze":
Ich möchte einem externen Programm vorgaukeln jemand schriebe auf der Tastatur, dabei werden aber nur Buchstaben geschrieben, die aber wiederum in RawKey vorliegen müssen, damit ich ein InputEvent machen kann, welches von dem anderen Programm auch "verstanden" wird.

[ - Antworten - Zitieren - Direktlink - ]

05.08.2003, 00:38 Uhr

_PAB_
Posts: 3016
Nutzer
Hmm, dieses Beispiel sieht ja sehr gut aus:
http://www.innoidea.hu/subsites/amiga/developer/FUNCTIONS/AmigaOS/MapANSI/ex01_MapANSI.c

[ - Antworten - Zitieren - Direktlink - ]

05.08.2003, 20:55 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von _PAB_:
Hmm, dieses Beispiel sieht ja sehr gut aus:
http://www.innoidea.hu/subsites/amiga/developer/FUNCTIONS/AmigaOS/MapANSI/ex01_MapANSI.c

Ja, aber wenn man ohnehin die Commodities-Lib verwendet, kann man sich auch die Rumhantiererei mit KeyMap-Zeug ersparen.
code:
#include       <exec/types.h>
#include       <exec/memory.h>
#include       <dos/dos.h>
#include       <devices/inputevent.h>

#include       <clib/exec_protos.h>
#include       <clib/commodities_protos.h>

#include       <stdio.h>

#ifdef LATTICE
int CXBRK(void)  { return(0); }  /* Disable Lattice CTRL/C handling */
void chkabort(void) { return; }  /* really */
#endif

struct Library          *CxBase = NULL;           /* AddIEvents() & InvertKeyMap() function */

struct InputEvent       *InputEvent = NULL;       /* we'll allocate this, chained */

/* prototypes for our program functions */

void openall(void);
void closeall(void);
void closeout(UBYTE *errstring, LONG rc);

int main(int argc, char **argv)
{
    UBYTE               *string;
    UBYTE               *chPtr;
    struct InputEvent*  evPtr;

    openall();

    string = ";String converted to input events and sent to input device\n";

    evPtr = InputEvent = (struct InputEvent*)AllocMem(sizeof(struct InputEvent), MEMF_CLEAR);
    for (chPtr = string; *chPtr; chPtr++)
    {
      if (evPtr == NULL)  closeout("Can't allocate memory for input event",RETURN_FAIL);
      InvertKeyMap(*chPtr, evPtr, NULL);
      evPtr->ie_NextEvent = (struct InputEvent*)AllocMem(sizeof(struct InputEvent), MEMF_CLEAR);
      evPtr = evPtr->ie_NextEvent;
    }

    /* Send the events */
    AddIEvents(InputEvent);

    closeall();
    exit(0);
}

void openall(void)
{
    CxBase = OpenLibrary("commodities.library", 37);
    if (CxBase == NULL)  closeout("Kickstart 2.0 required", RETURN_FAIL);
}

void closeall()
{
    if (CxBase)        CloseLibrary(CxBase);
    while (InputEvent)
    {
      struct InputEvent *next = InputEvent->ie_NextEvent;
      FreeMem(InputEvent, sizeof(struct InputEvent));
      InputEvent = next;
    }
}

void closeout(UBYTE *errstring, LONG rc)
{
    if(*errstring)     printf("%s\n",errstring);
    closeall();
    exit(rc);
}

So in etwa.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > keymap.library / MapANSI [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.