home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga GigaPD 3
/
Amiga_GigaPD_v3_3of3.iso
/
amiga-magazin
/
ungepackt
/
mai_94
/
disk2
/
amigaguide
/
agbeispiel
/
agbeispiel.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-06-25
|
7KB
|
327 lines
/*
**
** Beispiel zur AmigaGuide-Library
**
**
** von Stephan Fuhrmann
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <proto/dos.h>
#include <proto/exec.h>
#include <proto/graphics.h>
#include <proto/amigaguide.h>
#include <proto/intuition.h>
#include <exec/execbase.h>
#include <libraries/amigaguide.h>
#include <utility/hooks.h>
extern struct ExecBase *SysBase;
struct Library *AmigaGuideBase;
char prozessor[80];
char matheprozessor[80];
char betriebssystem[80];
STRPTR Cont[]=
{
"MAIN",
"ABOUT"
};
/* diese Funktion ruft spΣter "hostEntry" auf */
ULONG __asm hookEntry(
register __a0 struct Hook *h,
register __a2 VOID *obj,
register __a1 VOID *msg)
{
/* Pass the parameters on the stack */
return ((h->h_SubEntry)(h, obj, msg));
}
/* diese Funktion behandelt die AmigaGuideHost-Nachrichten */
ULONG __saveds __stdargs hostEntry(struct Hook *h,STRPTR db,Msg msg)
{
ULONG ergebnis=0;
switch (msg->MethodID)
{
case HM_FINDNODE:
{
struct opFindHost *opfh=(struct opFindHost *)msg;
printf ("FindNode [%s]\n",opfh->ofh_Node);
if (!stricmp(opfh->ofh_Node,"MAIN"))
ergebnis=1;
if (!stricmp(opfh->ofh_Node,"CPU"))
{
opfh->ofh_Title="Prozessor";
ergebnis=1;
}
if (!stricmp(opfh->ofh_Node,"FPU"))
{
opfh->ofh_Title="Mathe-Prozessor";
ergebnis=1;
}
if (!stricmp(opfh->ofh_Node,"OS"))
{
opfh->ofh_Title="Betriebssystem-Version";
ergebnis=1;
}
break;
}
case HM_OPENNODE:
{
struct opNodeIO *opni=(struct opNodeIO *)msg;
printf ("OpenNode [%s]\n",opni->onm_Node);
if (!stricmp(opni->onm_Node,"CPU"))
{
ULONG len;
ULONG proz=68000;
if (SysBase->AttnFlags & AFF_68040)
proz+=40;
else
{
if (SysBase->AttnFlags & AFF_68030)
proz+=30;
else
{
if (SysBase->AttnFlags & AFF_68020)
proz+=20;
else
{
if (SysBase->AttnFlags & AFF_68010)
proz+=10;
}
}
}
opni->onm_DocBuffer=prozessor;
len=sprintf (prozessor,"Sie besitzen einen Motorola %ld Prozessor!\n",proz);
opni->onm_BuffLen=len;
opni->onm_Flags=HTNF_KEEP|HTNF_ASCII;
ergebnis=1;
}
if (!stricmp(opni->onm_Node,"FPU"))
{
ULONG len;
ULONG proz=0;
if (!(SysBase->AttnFlags & AFF_68881))
proz=0;
else
{
if (SysBase->AttnFlags & AFF_FPU40)
proz=68040;
else
{
if (SysBase->AttnFlags & AFF_68882)
proz=68882;
else
{
if (SysBase->AttnFlags & AFF_68881)
proz=68881;
}
}
}
opni->onm_DocBuffer=matheprozessor;
if (proz)
len=sprintf (matheprozessor,"Sie besitzen einen Motorola %ld Coprozessor!\n",proz);
else
len=sprintf (matheprozessor,"Sie besitzen keinen Motorola Coprozessor!\n");
opni->onm_BuffLen=len;
opni->onm_Flags=HTNF_KEEP|HTNF_ASCII;
ergebnis=1;
}
if (!stricmp(opni->onm_Node,"OS"))
{
ULONG len;
opni->onm_DocBuffer=betriebssystem;
len=sprintf (betriebssystem,"Ihr Amiga verfⁿgt ⁿber das Betriebssystem v%ld.%ld!\n",SysBase->LibNode.lib_Version,SysBase->SoftVer);
opni->onm_BuffLen=len;
opni->onm_Flags=HTNF_KEEP|HTNF_ASCII;
ergebnis=1;
}
break;
}
case HM_CLOSENODE:
{
struct opNodeIO *opni=(struct opNodeIO *)msg;
printf ("CloseNode [%s]\n",opni->onm_Node);
break;
}
case HM_EXPUNGE:
{
printf ("Expunge\n");
break;
}
}
return (ergebnis);
}
void main(void)
{
struct Hook hook;
struct NewAmigaGuide NAG;
AMIGAGUIDECONTEXT MyContext;
AMIGAGUIDEHOST MyHost;
if (AmigaGuideBase=OpenLibrary ("amigaguide.library",33))
{
ULONG sigs,agsig,bekommen;
struct AmigaGuideMsg *agm;
int schluss=0;
/* Dokument ist im aktuellen Verzeichnis */
NAG.nag_Lock=CurrentDir(CurrentDir(0));
NAG.nag_Name="SystemDaten.guide";
NAG.nag_Screen=0;
NAG.nag_PubScreen=0;
NAG.nag_HostPort=0;
NAG.nag_ClientPort="SystemDaten-HELP";
NAG.nag_BaseName="SystemDaten";
/* beim Start alles Laden */
NAG.nag_Flags=HTF_LOAD_ALL;
NAG.nag_Context=0;
NAG.nag_Node=0;
NAG.nag_Line=0;
NAG.nag_Extens=0;
NAG.nag_Client=0;
hook.h_Entry=(ULONG (* )())hookEntry;
hook.h_SubEntry=(ULONG (* )())hostEntry;
/* Host einrichten */
if (MyHost=AddAmigaGuideHost (&hook,"ExampleHost", NULL))
{
/* Asynchronen Proze▀ starten */
if (MyContext=OpenAmigaGuideAsyncA(&NAG,0))
{
/* Signal d. Dokumentes herausfinden */
agsig=AmigaGuideSignal (MyContext);
sigs=agsig | SIGBREAKF_CTRL_C;
printf ("Bitte aktivieren Sie dieses Fenster, drⁿcken Sie CTRL-C und klicken\n");
printf ("Sie auf das Schlie▀-Symbol, um das Programm zu beenden.\n");
/* warten, bis Proze▀ 'oben' ist */
Delay (2);
/* Inhaltsverzeichnis auf den Schirm bringen */
SendAmigaGuideCmdA (MyContext,"ALINK MAIN",0);
do
{
/* auf alle Signale warten */
bekommen=Wait (sigs);
if (bekommen &áagsig)
{
while (agm=GetAmigaGuideMsg(MyContext))
{
printf ("Message bekommen: ");
switch (agm->agm_Type)
{
case StartupMsgID:
printf ("StartupMsgID\n");
break;
case LoginToolID:
printf ("LoginToolID\n");
break;
case LogoutToolID:
printf ("LogoutToolID\n");
break;
case ShutdownMsgID:
printf ("ShutdownMsgID\n");
break;
case ActivateToolID:
printf ("ActivateToolID\n");
break;
case DeactivateToolID:
printf ("DeactivateToolID\n");
break;
case ActiveToolID:
printf ("ActiveToolID\n");
break;
case InactiveToolID:
printf ("InactiveToolID\n");
break;
case ToolStatusID:
printf ("ToolStatusID\n");
break;
case ToolCmdID:
printf ("ToolCmdID\n");
break;
case ToolCmdReplyID:
printf ("ToolCmdReplyID\n");
break;
case ShutdownToolID:
printf ("ShutdownToolID\n");
break;
default:
printf ("Unbekannt!\n");
}
if (agm->agm_Pri_Ret)
printf ("Fehler: %s!",GetAmigaGuideString (agm->agm_Sec_Ret));
ReplyAmigaGuideMsg (agm);
}
}
} while (!(bekommen & SIGBREAKF_CTRL_C) && !schluss);
CloseAmigaGuide (MyContext);
}
else
printf ("Konnte AmigaGuide-Dokument nicht ÷ffnen!\n");
/* Schleife, bis Host entfernt */
while (RemoveAmigaGuideHost (MyHost,0)>0)
{
/* Verz÷gerung, damit das Multitasking nicht belastet wird */
Delay (1);
}
}
else
printf ("Konnte Host nicht einrichten (lΣuft noch einer?)!\n");
CloseLibrary (AmigaGuideBase);
}
else
puts ("Konnte AmigaGuide-Library nicht ÷ffnen!");
}