home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1998 #5
/
AmigaPlus_CD-ROM_Nr.5-98.iso
/
system
/
dsound
/
source.lha
/
ARexx.c
next >
Wrap
C/C++ Source or Header
|
1994-07-18
|
2KB
|
97 lines
/*ARexx.c: This is the ARexx support code module*/
#include <exec/types.h>
#include <intuition/intuition.h>
#include <clib/intuition_protos.h>
#include <clib/exec_protos.h>
#include "minrexx.h"
#include "arexx.h"
#include <strings.h>
#include <ctype.h>
#include <stdlib.h>
#include <pragmas/exec_pragmas.h>
#include <pragmas/intuition_pragmas.h>
#include <pragmas/dos_pragmas.h>
extern struct Library *SysBase;
extern struct Library *IntuitionBase;
struct RexxMsg *rexxMsg;
BOOL rexxAbort=FALSE;
extern char *version; /*DSound's version string*/
void rQuit(char *p);
struct rexxCommandList commandList[] =
{
{ "quit" , (APTR)&rQuit }, /*Quit*/
{ NULL, NULL }
};
char portName[16];
char arexxBuf[140];
/*Open the ARexx port*/
long initRexxPort(void)
{
determinePortName(portName); /*Get the port name*/
/*Ask minrexx to open the port and return the port's signal bit*/
return(upRexxPort(portName,commandList,"rx",(APTR)&disp));
}
char *result="RESULT";
UBYTE errorNum=0;
/*Determine what the ARexx port name should be. The first running instance*/
/*of DSound should have an ARexx port named 'DSound.1'. The second, 'DSound.2'*/
/*etc. This starts at 'DSound.1' and works up until it finds a free space*/
/*(up to DSound.99)*/
void determinePortName(char *portName)
{
ULONG c=1;
UBYTE len;
strcpy(portName,"DSound.");
do
{
len=stcu_d(&portName[7],c++);
portName[7+len]=NULL;
}
while(FindPort(portName)!=NULL && c<1000);
if(FindPort(portName)!=NULL)
exit(50);
return;
}
/*The ARexx command dispatch function. This calls the functions associated*/
/*with a particular command*/
int disp(struct RexxMsg *msg,struct rexxCommandList *dat,char *p)
{
rexxMsg=msg;
/*Call the function that supports the command*/
((int (*)())(dat->userdata))(p);
/*Reply to ARexx, using the reply string and error number set by the*/
/*function just called*/
replyRexxCmd(rexxMsg,errorNum,0,arexxBuf);
errorNum=0;
return(1); /*1 means that minrexx shouldn't reply to the rexx message*/
}
/*Quit DSound*/
void rQuit(char *p)
{
rexxAbort=TRUE;
strcpy(arexxBuf,result);
}
/*End of ARexx.c*/