home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
576.lha
/
WBStart_v1.0
/
WBStarter.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-11-24
|
2KB
|
111 lines
/*
* WBStarter.c V1.0
*
* Start WB programs via WBStart-Handler
*
* (c) 1991 by Stefan Becker
*
*/
#include "WBStart.h"
#include <clib/dos_protos.h>
#include <clib/exec_protos.h>
#include <dos/dostags.h>
#include <workbench/startup.h>
#include <stdlib.h>
#include <stdio.h>
/* Version string */
static char Version[]="$VER: WBStarter V1.0 (24.11.1991)";
void main(int argc, char *argv[])
{
BPTR fl;
struct WBStartMsg msg;
struct MsgPort *mp,*hp;
if (!(mp=CreateMsgPort()))
{
puts("No message port!\n");
exit(20);
}
fl=CurrentDir(NULL);
msg.wbsm_Msg.mn_Node.ln_Pri=0;
msg.wbsm_Msg.mn_ReplyPort=mp;
msg.wbsm_DirLock=fl;
msg.wbsm_Stack=4096;
msg.wbsm_Prio=0;
msg.wbsm_NumArgs=0;
msg.wbsm_ArgList=NULL;
while (--argc)
{
msg.wbsm_Name=*++argv;
/* Try to send a message to the WBStart-Handler */
Forbid();
hp=FindPort(WBS_PORTNAME);
if (hp) PutMsg(hp,(struct Message *) &msg);
Permit();
/* No WBStart-Handler, try to start it! */
if (!hp)
{
BPTR ifh=Open("NIL:",MODE_NEWFILE);
BPTR ofh=Open("NIL:",MODE_OLDFILE);
/* Start handler */
if (SystemTags(WBS_LOADNAME,SYS_Input,ifh,
SYS_Output,ofh,
SYS_Asynch,TRUE,
SYS_UserShell,TRUE,
NP_ConsoleTask,NULL,
NP_WindowPtr,NULL,
TAG_DONE)!=-1)
{
int i;
/* Handler started, try to send message (Retry up to 5 seconds) */
for (i=0; i<10; i++)
{
/* Try to send message */
Forbid();
hp=FindPort(WBS_PORTNAME);
if (hp) PutMsg(hp,(struct Message *) &msg);
Permit();
/* Message sent? Yes, leave loop */
if (hp) break;
/* No, wait 1/2 second */
Delay(25);
}
}
else
{
/* Handler not started, close file handles */
Close(ifh);
Close(ofh);
}
}
/* Could we send the message? */
if (hp)
{
/* Get reply message */
WaitPort(mp);
GetMsg(mp);
}
else
{
/* Oops. ERROR! */
puts("Can't find 'WBStart-Handler'!");
break;
}
}
/* Free resources */
CurrentDir(fl);
DeleteMsgPort(mp);
}