home *** CD-ROM | disk | FTP | other *** search
- /*----------------------------------------------------------------------------
- File : InputMain.c
- Projekt: InputView ab V0.24
- Inhalt : OpenDevs (Unterfunktion für OpenAll, die nur Devices behandelt)
- OpenAll (die berühmte "Öffne-Mir-Alles"-Routine)
- CloseAll (Zumachen tu ich das dann auch wieder)
- ShowHelp (Gibt den Hilfe-Text in CLI-Fenster aus)
- TestArgs (die CLI-Parameter werden ausgewertet)
- main (zumindest mal ein HauptPrg)
-
- Version: 0.24
- Autor : Uwe Röhm
- Adresse: Auber Str. 25, W-6209 Hohenstein 4
- (Semester) Wörthstr. 18 W-8390 Passau
- Bemerkung:
- Dies soll ein kurzes TestProgramm werden (eines unter vielen), mit dem
- ich mal die Input-Hander Geschichten ausprobieren kann.
- Zumindest will ich wissen, welche Events wann wieoft erscheinen.
- ----------------------------------------------------------------------------*/
- short PRGVersion = 0;
- short PRGRevision= 24;
-
- #include <exec/Types.h>
- #include <exec/io.h>
- #include <exec/memory.h>
- #include <exec/ports.h>
- #include <devices/InputEvent.h>
- #include <devices/timer.h>
- #include <libraries/dos.h>
- #include <intuition/intuitionbase.h>
- #include <graphics/gfxbase.h>
- #include "InputHandy.h"
-
- #ifndef LATTICE
- #include <functions.h>
- #else
- #include <proto/exec.h>
- #include <proto/dos.h>
- #endif
- #include <stdio.h>
- #include <stdlib.h>
-
- /* -------------------- Globale Variablen -------------------- */
- struct Interrupt *InputInt;
- struct IOStdReq *InputDev;
- struct timerequest *TimeRequest;
- struct IEZahlen *Numbers;
- struct MsgPort *MyPort;
- struct Library *TimerBase;
- int Priority, WaitTime, BigBuffer;
- char *FileName;
- BOOL Sperre, Laden, Sichern;
-
-
- /* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- Funktion : OpenDevs
- Parameter : --
- Rückgabe : BOOL (TRUE+ => alles korrekt geöffnet, sonst FALSE)
-
- Aufruf von: OpenAll (s.u.)
- UnterFunks: --
- Autor : Uwe Röhm
- Datum : -?-
- Bemerkung :
- Die benötigten Devices werden geöffnet (der Versuch zählt!).
- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */
- BOOL OpenDevs ()
- {
- if ((MyPort = (struct MsgPort *) FindPort (PORTNAME)))
- { Signal (MyPort->mp_SigTask, SIGBREAKF_CTRL_C); }
- else
- {
- if (MyPort = CreatePort (PORTNAME, 0) )
- {
- InputDev = (struct IOStdReq *) CreateExtIO (MyPort, sizeof (struct IOStdReq));
- if (InputDev)
- {
- if( OpenDevice ("input.device", NULL,(struct IORequest *) InputDev, NULL) )
- {
- DeleteExtIO ((struct IORequest *) InputDev);
- InputDev = NULL;
- }
- else
- {
- TimeRequest =(struct timerequest *)CreateExtIO(MyPort, sizeof(struct timerequest));
- if (TimeRequest)
- {
- if ( (OpenDevice (TIMERNAME,UNIT_VBLANK,(struct IORequest *)TimeRequest,0)) != NULL)
- {
- DeleteExtIO ((struct IORequest *) TimeRequest);
- TimeRequest = NULL;
- }
- else
- {
- TimerBase = (struct Library*) TimeRequest->tr_node.io_Device;
- return TRUE; }
- }
- }
- }
- }
- }
- return FALSE;
- }
-
-
- /* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- Funktion : OpenAll
- Parameter : --
- Rückgabe : BOOL (TRUE+ => alles korrekt geöffnet, sonst FALSE)
-
- Aufruf von: main (s.u.)
- UnterFunks: OpenDevs (s.o.)
- Autor : Uwe Röhm
- Datum : -?-
- Bemerkung :
- Die benötigten Devices werden geöffnet (über OpenDevs) und Speicher
- allokiert.
- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */
- BOOL OpenAll ()
- {
- if (OpenDevs ())
- {
- if (InputInt = (struct Interrupt*) AllocMem (sizeof (*InputInt), MEMOPTS))
- {
- if (Numbers = (struct IEZahlen*) AllocMem (sizeof (*Numbers), MEMOPTS))
- {
- if (Numbers->BufferAnfang = (struct InputEvent *) AllocMem (BigBuffer * sizeof(struct InputEvent), MEMOPTS))
- {
- Numbers->BufferMarke = Numbers->BufferAnfang;
- Numbers->BufferEnde = Numbers->BufferAnfang + BigBuffer * sizeof (struct InputEvent);
- Numbers->TimerMax = WaitTime * 10; /* Sekunden in Ticks umgerechnet */
- Numbers->MyPort = MyPort;
- if ((Numbers->IESignal = AllocSignal (-1)) != -1)
- { return TRUE; }
- }
- }
- }
- }
- return FALSE;
- }
-
-
- /* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- Funktion : CloseAll
- Parameter : --
- Rückgabe : --
-
- Aufruf von: main (s.u.)
- UnterFunks: --
- Autor : Uwe Röhm
- Datum : ???
- Bemerkung :
- Meine globale ShowDown-Funktion. Was mit "OpenAll" aufgemacht wurde, sollte
- hier auch wieder geschlossen werden.
- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */
- VOID CloseAll ()
- {
- if (Numbers)
- {
- FreeSignal (Numbers->IESignal);
- if (Numbers->BufferAnfang)
- { FreeMem (Numbers->BufferAnfang, BigBuffer * sizeof (struct InputEvent));
- if (Numbers->IESignal != -1)
- FreeSignal (Numbers->IESignal);
- }
- FreeMem (Numbers, sizeof (*Numbers));
- }
- if (InputInt)
- { FreeMem (InputInt, sizeof (*InputInt)); }
- if (TimeRequest)
- {
- CloseDevice ((struct IORequest *) TimeRequest);
- DeleteExtIO ((struct IORequest *) TimeRequest);
- TimeRequest = NULL;
- }
- if (InputDev)
- {
- CloseDevice ((struct IORequest *) InputDev);
- DeleteExtIO ((struct IORequest *) InputDev);
- InputDev = NULL;
- }
- if (MyPort)
- {
- DeletePort (MyPort);
- MyPort = NULL;
- }
- }
-
-
- /* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- Funktion : ShowHelp
- Parameter: --
- Rückgabe : --
-
- Aufruf von: main (s.u.)
- UnterFunks: --
- Autor : Floyd
- Datum : ???
- Bemerkung :
- Gibt eine Kurzbeschreibung dieses wahrhaften tollen PRGs aus (wenn ich den
- Sinn mal vergessen sollte, werde ich noch dankbar sein...).
- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */
- VOID ShowHelp ()
- {
- printf ("\n Ich installiere einen kleinen Input-Handler, der mir\n");
- printf (" eingehende Events kopiert. Nach der angegebenen Zeit\n");
- printf (" spiele ich sie dann einfach wieder ein. Very nett....\n");
- printf (" Parameter:\n");
- printf (" -P# : Die Priorität, mit der mein 'ProudHandler' ge-\n");
- printf (" startet wird (DEFAULT: %d)\n",HANDLERPRI);
- printf (" -W# : Ich warte # Sekunden lang (DEFAULT %d)\n",WAITTIME);
- printf (" -Z# : Eine neue Größe meines Events-Buffers (DEFAULT %d)\n",BUFFERMAX);
- printf (" -A : Schaltet die Abfangroutine ein/aus (DEFAULT: %d)\n",Sperre);
- printf (" -S [<File-Name>]:\n Die kopierten Events werden in <File-Name> gespeichert\n");
- printf (" -L [<File-Name>]:\n Aus <File-Name> werden die Events geladen und abgespielt.\n");
- }
-
-
- /* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- Funktion : TestArgs
- Parameter : int anz (Zahl der CLI-Parameter)
- char *arg[] (einzelne Paramterstrings)
- Rückgabe : BOOL (FALSE => ungültige Parameter oder Hilfe, sonst TRUE)
-
- Aufruf von: main (s.u.)
- UnterFunks: ShowHelp (s.o.)
- Autor : Uwe
- Datum : keine Ahnung
- Bemerkung :
- Ich werte hier die CLI-Parameter aus: Vorangestellte '-' filtere ich aus,
- Groß- und Kleinschreibung unterscheide ich nicht; Der erste Buchstabe
- zählt (einbuchstabige Befehle...).
- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */
- BOOL TestArgs (int anz, char *arg[])
- {
- BOOL retcode = TRUE,
- helpme = FALSE;
- int i,p;
-
- for (i = 1; i < anz; i++)
- {
- if (arg[i][0] == '-')
- p = 1;
- else
- p = 0;
-
- if ( (arg[i][p] == '?') || ((arg[i][p] & 0x5f) == 'H') )
- { helpme = TRUE; }
-
- switch (arg[i][p] & 0x5f)
- {
- case 'A':
- Sperre = !Sperre;
- break;
- case 'L':
- Laden = TRUE;
- goto getname;
- case 'P':
- Priority = atoi (&arg[i][p+1]);
- break;
- case 'S':
- Sichern = TRUE;
- getname: if (arg[i][p+1] != 0x00)
- FileName = &arg[i][p+1];
- else if (i != (anz-1))
- FileName = arg[++i];
- break;
- case 'W':
- WaitTime = atoi (&arg[i][p+1]);
- break;
- case 'Z':
- BigBuffer = atoi (&arg[i][p+1]);
- break;
- default:
- retcode = FALSE;
- break;
- }
- }
-
- if (!retcode)
- { if (helpme)
- { ShowHelp (); }
- else
- { printf ("FEHLER in den Parametern....\n"); }
- }
-
- return retcode;
- }
-
-
- /* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- Funktion : main
- Parameter : int arc (Zahl der CLI-Parameter)
- char *argv[] (einzelne Paramterstrings)
- Rückgabe : --
-
- Aufruf von: Benutzer über CLI
- UnterFunks: TestArgs (s.o.)
- OpenAll (s.o.)
- CloseAll (s.o.)
- LoadEvents (InputHandler.c)
- SaveEvents (InputHandler.c)
- LaunchHandler (InputHandler.c)
- InInputs (InputHandler.c)
- Autor : Uwe Röhm
- Datum : ???
- Bemerkung:
- Vorerst beschränke ich mich auf CLI-Benutzung.
- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */
- VOID main (int argc, char *argv[])
- {
- ULONG SigMask;
-
- printf (HAILTEXT, PRGVersion, PRGRevision);
- WaitTime = WAITTIME;
- Priority = HANDLERPRI;
- BigBuffer= BUFFERMAX;
- Sperre = TRUE;
- FileName = NULL;
- Laden = FALSE;
- Sichern = FALSE;
-
- if (TestArgs (argc, argv))
- {
- if (OpenAll ())
- {
- if (!Laden)
- {
- LaunchPHandler ();
-
- do
- { SigMask = Wait (Numbers->IESignal); }
- while (!(SigMask & Numbers->IESignal));
-
- CatchHandler ();
- }
- else
- LoadEvents ();
-
- if (Sichern)
- SaveEvents ();
- else
- InInput ();
- }
-
- CloseAll ();
- }
-
- }
-