home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
500-599
/
ff599.lzh
/
InputView
/
Source.lha
/
InputMain.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-01-31
|
10KB
|
350 lines
/*----------------------------------------------------------------------------
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 ();
}
}