Example #1
0
void rexxyesno(struct RexxMsg *mess)
{
        char foo[2],ja,nej,def,*pek;
        pek=hittaefter(mess->rm_Args[0]);
        if(!pek[0]) {
                ja='j'; nej='n'; def=1;
        } else {
                ja=pek[0];
                pek=hittaefter(pek);
                if(!pek[0]) {
                        nej='n'; def=1;
                } else {
                        nej=pek[0];
                        pek=hittaefter(pek);
                        if(!pek[0]) def=1;
                        else def=pek[0]-'0';
                }
        }
        foo[0]=jaellernej(ja,nej,def)+'0';
        foo[1]=0;
        if(carrierdropped()) {
                mess->rm_Result1=100;
                return;
        }
        mess->rm_Result1=0;
        if(mess->rm_Action & 1L<<RXFB_RESULT) {
                if(!(mess->rm_Result2=(long)CreateArgstring(foo,1)))
                        puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
        }
}
Example #2
0
LONG rxsupp_null(struct Library *RexxSupportBase, struct RexxMsg *msg, UBYTE **argstring)
{
    void *ptr = NULL;
  
    *argstring = CreateArgstring((UBYTE *)&ptr, sizeof(void *));
    return 0;
}
Example #3
0
void rexxrecbinfile(struct RexxMsg *mess) {
        char buf[1024];
        struct TransferFiles *tf;

        Servermem->action[nodnr] = UPLOAD;
        Servermem->varmote[nodnr] = 0;
        Servermem->vilkastr[nodnr] = NULL;

        if(recbinfile(hittaefter(mess->rm_Args[0]))) strcpy(buf,"0");
        else
        {
                buf[0] = NULL;
                for(tf=(struct TransferFiles *)tf_list.mlh_Head;tf->node.mln_Succ;tf=(struct TransferFiles *)tf->node.mln_Succ)
                {
                        strcat(buf,FilePart(tf->Filnamn));
                        strcat(buf,(char *)" ");
                }
                buf[strlen(buf)-1] = NULL;
        }

        while(tf=(struct TransferFiles *)RemHead((struct List *)&tf_list))
                FreeMem(tf,sizeof(struct TransferFiles));

        if(mess->rm_Action & 1L<<RXFB_RESULT) {
                if(!(mess->rm_Result2=(long)CreateArgstring(buf,strlen(buf))))
                        puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
        }
}
Example #4
0
LONG rxsupp_delay(struct Library *RexxSupportBase, struct RexxMsg *msg, UBYTE **argstring)
{
    int pos, len;
    char *arg = ARG1(msg);
    
    len = strlen(arg);
    if (len == 0)
    {
	*argstring = NULL;
	return ERR10_018;
    }

    for (pos = 0; pos < len; pos++)
    {
	if (!isdigit(arg[pos]))
	{
	    *argstring = NULL;
	    return ERR10_018;
	}
    }
    
    Delay(atoi(arg));
    
    *argstring = CreateArgstring("0", 1);
    return RC_OK;
}
Example #5
0
void rxchglatestinfo(struct RexxMsg *mess) {
        char *what,retstr[15];
        int ammount,retval;
        what = hittaefter(mess->rm_Args[0]);
        ammount = atoi(hittaefter(what));
        switch(what[0]) {
                case 'r' : case 'R' :
                        retval = Statstr.read += ammount;
                        break;
                case 'w' : case 'W' :
                        retval = Statstr.write += ammount;
                        break;
                case 'd' : case 'D' :
                        retval = Statstr.dl += ammount;
                        break;
                case 'u' : case 'U' :
                        retval = Statstr.ul += ammount;
                        break;
                default:
                        retval = -1;
        }
        sprintf(retstr,"%d",retval);
        if(mess->rm_Action & 1L<<RXFB_RESULT) {
                if(!(mess->rm_Result2=(long)CreateArgstring(retstr,strlen(retstr))))
                        puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
        }
        mess->rm_Result1=0;
}
Example #6
0
void whichmeet(struct RexxMsg *mess) {
        char buf[5];
        sprintf(buf,"%d",mote2);
        mess->rm_Result1=0;
        if(mess->rm_Action & 1L<<RXFB_RESULT) {
                if(!(mess->rm_Result2=(long)CreateArgstring(buf,strlen(buf))))
                        puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
        }
}
Example #7
0
/**
 * Set the result variable.
 *
 * @param rxmsg the message defining the ARexx context.
 * @param string the contents of the result
 */
static void arexx_set_result(struct RexxMsg *rxmsg, CONST_STRPTR string)
{
	if (!string) string = "";
	if (rxmsg->rm_Action & (1L << RXFB_RESULT))
	{
		if (rxmsg->rm_Result2) DeleteArgstring((STRPTR)rxmsg->rm_Result2);
		rxmsg->rm_Result2 = (LONG)CreateArgstring( string,strlen(string));
	}
}
Example #8
0
LONG rxsupp_rename(struct Library *RexxSupportBase, struct RexxMsg *msg, UBYTE **argstring)
{
    BOOL ok;

    ok = Rename(ARG1(msg), ARG2(msg));
    *argstring = CreateArgstring(ok ? "1" : "0", 1);

    return RC_OK;
}
Example #9
0
// Allocate an ARexx message, and set arguments and stem values automatically
struct RexxMsg *LIBFUNC L_BuildRexxMsgEx(
	REG(a0, struct MsgPort *port),
	REG(a1, UBYTE *extension),
	REG(d0, UBYTE *host),
	REG(a2, struct TagItem *tags))
{
	struct RexxMsg *msg;
	struct TagItem *tag,*tstate;
	char *varname=0;

	// Create message
	if (!(msg=L_CreateRexxMsgEx(port,extension,host)))
		return 0;

	// Go through tags
	tstate=tags;
	while ((tag=NextTagItem(&tstate)))
	{
		// Argument string?
		if (tag->ti_Tag>=RexxTag_Arg0 &&
			tag->ti_Tag<=RexxTag_Arg15)
		{
			short arg;

			// Get argument number
			arg=tag->ti_Tag-RexxTag_Arg0;

			// Create argument string
			msg->rm_Args[arg]=CreateArgstring((CONST STRPTR)tag->ti_Data,strlen((char *)tag->ti_Data)+1);
		}

		// Variable name?
		else
		if (tag->ti_Tag==RexxTag_VarName)
		{
			// Store pointer to variable name
			varname=(char *)tag->ti_Data;
		}

		// Variable value?
		else
		if (tag->ti_Tag==RexxTag_VarValue)
		{
			// Got valid name pointer?
			if (varname)
			{
				// Set value
				L_SetRexxVarEx(msg,varname,(char *)tag->ti_Data,-1);
				varname=0;
			}
		}
	}

	// Return message
	return msg;
}
Example #10
0
void rexxchkbuffer(struct RexxMsg *mess) {
        char foo[5];

        sprintf(foo,"%d",checkcharbuffer());
        mess->rm_Result1=0;
        if(mess->rm_Action & 1L<<RXFB_RESULT) {
                if(!(mess->rm_Result2=(long)CreateArgstring(foo,strlen(foo))))
                        puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
        }
}
Example #11
0
int commonsendrexx(int komnr,int hasarg) {
  char rexxCmd[1081];
  struct RexxMsg *nikrexxmess, *mess;

  sendrexxrc = -5;
  if(!hasarg) {
    sprintf(rexxCmd, "NiKom:rexx/ExtKom%d %d %d", komnr, nodnr, inloggad);
  } else {
    sprintf(rexxCmd, "NiKom:rexx/ExtKom%d %d %d %s", komnr, nodnr, inloggad, argument);
  }

  if(!(nikrexxmess = (struct RexxMsg *) CreateRexxMsg(
      rexxport, "nik", rexxport->mp_Node.ln_Name))) {
    LogEvent(SYSTEM_LOG, ERROR, "Couldn't allocate a RexxMsg.");
    return -5;
  }
  if(!(nikrexxmess->rm_Args[0] =
       (STRPTR)CreateArgstring(rexxCmd,strlen(rexxCmd)))) {
    DeleteRexxMsg(nikrexxmess);
    LogEvent(SYSTEM_LOG, ERROR, "Couldn't allocate a rexx ArgString.");
    return -5;
  }

  nikrexxmess->rm_Action = RXCOMM | RXFB_TOKEN;
  if(!SafePutToPort((struct Message *)nikrexxmess, "REXX")) {
    LogEvent(SYSTEM_LOG, ERROR, "Can't launch ARexx script, REXX port not found.");
    return -5;
  }

  for(;;) {
    mess = (struct RexxMsg *)WaitPort(rexxport);
    while(mess = (struct RexxMsg *)GetMsg(rexxport)) {
      if(mess->rm_Node.mn_Node.ln_Type == NT_REPLYMSG) {
        DeleteArgstring(nikrexxmess->rm_Args[0]);
        if(nikrexxmess->rm_Result1) {
          LogEvent(SYSTEM_LOG, WARN, "Error return code %d from ARexx script: '%s'",
                   nikrexxmess->rm_Result1, rexxCmd);
          SendString("\r\n\nError executing ARexx script.\r\n\n");
        }
        DeleteRexxMsg(nikrexxmess);
        if(!rxlinecount) {
          rxlinecount=TRUE;
          radcnt = 0;
        }
        return sendrexxrc;
      }
      handleRexxCommand(mess->rm_Args[0], mess);
      ReplyMsg((struct Message *)mess);
    }
  }
  if(carrierdropped()) return(-8);
  return(sendrexxrc);
}
Example #12
0
void rxedit(struct RexxMsg *mess) {
        int editret,cnt,len;
        char *filnamn,retstr[2];
        BPTR fh;
        struct EditLine *el;
        nu_skrivs=ANNAT;
        filnamn=hittaefter(mess->rm_Args[0]);
        if(!filnamn[0]) {
                mess->rm_Result1=5;
                mess->rm_Result2=NULL;
                return;
        }
/*      puttekn("\r\n\n",-1); Detta måste nu fixas i ARexx-programmet
		istället */

        if((editret=edittext(filnamn))==1) {
                mess->rm_Result1=100;
                mess->rm_Result2=NULL;
                return;
        } else if(editret==0) {
                if(!(fh=Open(filnamn,MODE_NEWFILE))) {
                        sprintf(outbuffer,"\r\n\nKunde inte öppna %s för skrivning!\r\n");
                        puttekn(outbuffer,-1);
                        mess->rm_Result1=5;
                        mess->rm_Result2=NULL;
                        return;
                }
                cnt=0;
                for(el=(struct EditLine *)edit_list.mlh_Head;el->line_node.mln_Succ;el=(struct EditLine *)el->line_node.mln_Succ) {
                        len=strlen(el->text);
                        el->text[len]='\n';
                        if(Write(fh,el->text,len+1)==-1) {
                                sprintf(outbuffer,"\r\n\nFel vid skrivandet av %s!\r\n",filnamn);
                                puttekn(outbuffer,-1);
                                Close(fh);
                                mess->rm_Result1=5;
                                mess->rm_Result2=NULL;
                                return;
                        }
                        cnt++;
                }
                Close(fh);
                freeeditlist();
        }
        mess->rm_Result1=0;
        retstr[0]= editret ? '0' : '1';
        retstr[1]=0;
        if(mess->rm_Action & 1L<<RXFB_RESULT) {
                if(!(mess->rm_Result2=(long)CreateArgstring(retstr,1)))
                        puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
        }
}
Example #13
0
void rexxgetstring(struct RexxMsg *tempmess) {
        char *rexxargs1,*rexxargs2;
        char defaultstring[257];
        int ra1=0,ra2=0;

        defaultstring[0] = NULL;
        rexxargs1=hittaefter(tempmess->rm_Args[0]);
        if(rexxargs1[0])
        {
			ra2=EKO;
			if(!(ra1=atoi(rexxargs1))) ra1=50;
			rexxargs2=hittaefter(rexxargs1);
			if(rexxargs2[0] && !strncmp(rexxargs2,"NOECHO",6)) ra2=EJEKO;
			else
			{
				if(rexxargs2[0])
				{
					if(!strncmp(rexxargs2,"STARECHO",8))
						ra2 = STAREKO;
					else
						strcpy(defaultstring,rexxargs2);
				}
			}
        }
        else
        {
                ra1=50;
                ra2=EKO;
        }
        if(defaultstring[0] != NULL)
        {
                if(getstring(ra2,ra1,defaultstring))
                {
                        tempmess->rm_Result1=100;
                        tempmess->rm_Result2=NULL;
                        return;
                }
        }
        else
        {
                if(getstring(ra2,ra1,NULL)) {
                        tempmess->rm_Result1=100;
                        tempmess->rm_Result2=NULL;
                        return;
                }
        }
        tempmess->rm_Result1=0;
        if(tempmess->rm_Action & 1L<<RXFB_RESULT) {
                if(!(tempmess->rm_Result2=(long)CreateArgstring(inmat,strlen(inmat))))
                        puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
        }
}
Example #14
0
void rexxsendstring(struct RexxMsg *mess) {
        char *str,ret,retstr[2];
        str=hittaefter(mess->rm_Args[0]);
        ret=puttekn(str,-1);
        if(ret) retstr[0]='1';
        else retstr[0]='0';
        retstr[1]=0;
        mess->rm_Result1=0;
        if(mess->rm_Action & 1L<<RXFB_RESULT) {
                if(!(mess->rm_Result2=(long)CreateArgstring(retstr,1)))
                        puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
        }
}
Example #15
0
void rxextratime(struct RexxMsg *mess) {
        char buf[10],*arg=hittaefter(mess->rm_Args[0]);
        if(!strcmp(arg,"GET")) {
                sprintf(buf,"%d",extratime);
                if(mess->rm_Action & 1L<<RXFB_RESULT) {
                        if(!(mess->rm_Result2=(long)CreateArgstring(buf,strlen(buf))))
                                puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
                }
        } else {
                extratime=atoi(arg);
                mess->rm_Result2=NULL;
        }
        mess->rm_Result1=0;
}
Example #16
0
void senastread(struct RexxMsg *tempmess) {
        char tempstr[20];
        tempmess->rm_Result1=0;
        if(senast_text_typ!=BREV && senast_text_typ!=TEXT) {
                tempmess->rm_Result2=NULL;
                return;
        }
        if(senast_text_typ==BREV) sprintf(tempstr,"B %d %d",senast_brev_anv,senast_brev_nr);
        else sprintf(tempstr,"T %d %d",senast_text_nr,senast_text_mote);
        if(tempmess->rm_Action & 1L<<RXFB_RESULT) {
                if(!(tempmess->rm_Result2=(long)CreateArgstring(tempstr,strlen(tempstr))))
                        puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
        }
}
Example #17
0
void rxgettime(struct RexxMsg *mess) {
        long tidgrans,tidkvar,tid;
        char buf[10];
        if(Servermem->cfg.maxtid[Servermem->inne[nodnr].status]) {
                time(&tid);
                tidgrans=60*(Servermem->cfg.maxtid[Servermem->inne[nodnr].status])+extratime;
                tidkvar=tidgrans-(tid-logintime);
        } else tidkvar=0;
        sprintf(buf,"%d",tidkvar);
        if(mess->rm_Action & 1L<<RXFB_RESULT) {
                if(!(mess->rm_Result2=(long)CreateArgstring(buf,strlen(buf))))
                        puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
        }
        mess->rm_Result1=0;
}
Example #18
0
void rexxgettekn(struct RexxMsg *mess) {
        UBYTE foo[2];
        foo[0]=gettekn();
        foo[1]=0;
        if(foo[0]==10 && carrierdropped()) {
                mess->rm_Result1=100;
                mess->rm_Result2=NULL;
        } else {
                mess->rm_Result1=0;
                if(mess->rm_Action & 1L<<RXFB_RESULT) {
                        if(!(mess->rm_Result2=(long)CreateArgstring(foo,1)))
                                puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
                }
        }
}
Example #19
0
/*
 * This function will send a string to ARexx...
 *
 * The default host port will be that of your task...
 *
 * If you set StringFile to TRUE, it will set that bit for the message...
 *
 * Returns TRUE if it send the message, FALSE if it did not...
 */
short SendARexxMsg(AREXXCONTEXT RexxContext,char *RString,
			short StringFile)
{
    register	struct	MsgPort	*RexxPort;
    register	struct	RexxMsg	*rmsg;
    register		short	flag=FALSE;

    if (RexxContext) if (RString)
    {
	if (rmsg=CreateRexxMsg(RexxContext->ARexxPort,
			       RexxContext->Extension,
			       RexxContext->PortName))
	{
	    rmsg->rm_Action=RXCOMM | (StringFile ?
				      (1L << RXFB_STRING):0);
	    if (rmsg->rm_Args[0]=CreateArgstring(RString,
						 (LONG)strlen(RString)))
	    {
				/*
				 * We need to find the RexxPort and this needs
				 * to be done in a Forbid()
				 */
		Forbid();
		if (RexxPort=FindPort(RXSDIR))
		{
					/*
					 * We found the port, so put the
					 * message to ARexx...
					 */
		    PutMsg(RexxPort,(struct Message *)rmsg);
		    RexxContext->Outstanding+=1;
		    flag=TRUE;
		}
		else
		{
					/*
					 * No port, so clean up...
					 */
		    DeleteArgstring(rmsg->rm_Args[0]);
		    DeleteRexxMsg(rmsg);
		}
		Permit();
	    }
	    else DeleteRexxMsg(rmsg);
	}
    }
    return(flag);
}
Example #20
0
void rxgetnumber(struct RexxMsg *mess)
{
	int minvarde, maxvarde, defaultvarde, returvarde;
	char retstr[15];
	char *pek1 = NULL, *pek2 = NULL, *pek3 = NULL;

	pek1=hittaefter(mess->rm_Args[0]);
	if(pek1)
		pek2=hittaefter(pek1);
	if(pek2)
		pek3=hittaefter(pek2);

	if(pek1[0] && !pek2[0])
	{
		defaultvarde = atoi(pek1);
		returvarde = getnumber(0, 0, &defaultvarde);
	}
	else if(pek1[0] && pek2[0])
	{
		minvarde = atoi(pek1);
		maxvarde = atoi(pek2);
		if(pek3[0])
		{
			defaultvarde = atoi(pek3);
			returvarde = getnumber(&minvarde, &maxvarde, &defaultvarde);
		}
		else
		{
			returvarde = getnumber(&minvarde, &maxvarde, 0);
		}

	}
	else
	{
		returvarde = getnumber(0, 0, 0);
	}

	sprintf(retstr,"%d",returvarde);
	if(mess->rm_Action & 1L<<RXFB_RESULT)
	{
		if(!(mess->rm_Result2=(long)CreateArgstring(retstr,strlen(retstr))))
			puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
	}
	mess->rm_Result1=0;

}
Example #21
0
void rexxsendbinfile(struct RexxMsg *mess) {
        char buf[257],*pek,filtemp[257],tmp[3];
        int i,quote;
        struct TransferFiles *tf;

        mess->rm_Result1=0;
        pek=hittaefter(mess->rm_Args[0]);
        NewList((struct List *)&tf_list);
        while(pek[0]!=NULL && mess->rm_Result1!=20) {
		filtemp[0]=NULL;
		i=0; quote=0;
		while(pek[0]==' ' && pek[0]!=NULL) pek++;
		if(pek[0]=='"') { quote=1; pek++; }
		if(!pek[0]) break;
		while(((pek[0]!='"' && quote) || (pek[0]!=' ' && !quote)) && pek[0]!=NULL) {
			filtemp[i++]=pek[0];
			pek++;
		}
		if(pek[0]=='"') pek++;
		filtemp[i]=NULL;
                if(!(tf=(struct TransferFiles *)AllocMem(sizeof(struct TransferFiles),MEMF_CLEAR))) {
                        mess->rm_Result1=20;
                        mess->rm_Result2=NULL;
		} else {
			strcpy(tf->path,filtemp);
			tf->filpek=NULL;
			AddTail((struct List *)&tf_list,(struct Node *)tf);
		}
	}
        sendbinfile();
        buf[0] = NULL;
        for(tf=(struct TransferFiles *)tf_list.mlh_Head;tf->node.mln_Succ;tf=(struct TransferFiles *)tf->node.mln_Succ)
        {
                sprintf(tmp,"%d ",tf->sucess);
                strcat(buf,tmp);
        }
        buf[strlen(buf)-1] = NULL;

        while(tf=(struct TransferFiles *)RemHead((struct List *)&tf_list))
                FreeMem(tf,sizeof(struct TransferFiles));

        if(mess->rm_Action & 1L<<RXFB_RESULT) {
                if(!(mess->rm_Result2=(long)CreateArgstring(buf,strlen(buf))))
                        puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
        }
}
Example #22
0
void rexx_handle_events (void)
{
    struct RexxMsg *msg;
    while ((msg = (struct RexxMsg*)GetMsg (ARexxPort))) {
	if (!(msg->rm_Action & RXCOMM)) {
	    write_log ("Unknown action '%08X' recieved!\n",
		       msg->rm_Action);
	    continue;
	}
	msg->rm_Result1 = process_cmd (msg->rm_Args[0]);
	msg->rm_Result2 = 0;
	if (msg->rm_Action & RXFF_RESULT) {
	    int len = strlen (RESULT); /* holger: trick for powerup */
	    msg->rm_Result2 = (LONG)CreateArgstring (RESULT,len);
	}
	ReplyMsg ((void*)msg);
    }
}
Example #23
0
/*************
 * FUNCTION:		ReplyRexxCommand
 * VERSION:			0.1 08.03.1995
 * DESCRIPTION:	Sends a RexxMsg back to the rexx server, can include
 *						result codes
 * INPUT:			RexxMessage
 *						Primary			primary result
 *						Secondary		secondary result
 *						Result			result string
 * OUTPUT:			none
 * HISTORY:       DATE		NAME		COMMENT
 *						08.03.95	ah			first release
 *************/
VOID ReplyRexxCommand(struct RexxMsg *RexxMessage,LONG Primary,LONG Secondary,STRPTR Result)
{
	/* Valid pointer given? */
	if(RexxMessage && RexxMessage->rm_Node.mn_Node.ln_Type == NT_MESSAGE)
	{
		/* No secondary result and results wanted? */
		if(Secondary == NULL && (RexxMessage->rm_Action & RXFF_RESULT))
		{
			/* Build result string... */
			if(Result)
				Secondary = (LONG)CreateArgstring((char *)Result,strlen((char *)Result));
		}

		/* Set both results... */
		RexxMessage->rm_Result1 = Primary;
		RexxMessage->rm_Result2 = Secondary;

		/* ...and reply the message. */
		ReplyMsg((struct Message *)RexxMessage);
	}
}
Example #24
0
/*************
 * FUNCTION:		SendRexxCommand
 * VERSION:			0.1 08.03.1995
 * DESCRIPTION:	Sends a command to the rexx server, requires pointers
 *						to the MsgPort of the calling Host and the command string.
 *						File extension and host name are optional and may be
 *						NULL
 * INPUT:			HostPort
 *						CommandString
 *						FileExtension
 *						HostName
 * OUTPUT:			TRUE: sucessfull, else false
 * HISTORY:       DATE		NAME		COMMENT
 *						08.03.95	ah			first release
 *************/
LONG SendRexxCommand(struct MsgPort *HostPort,STRPTR CommandString,STRPTR FileExtension,STRPTR HostName)
{
	struct MsgPort	*RexxPort = (struct MsgPort *)FindPort(RXSDIR);
	struct RexxMsg	*HostMessage;

	/* Valid pointers given? */
	if(CommandString && HostPort && RexxPort)
	{
		/* No special host name given? Take the MsgPort name. */
		if(!HostName)
			HostName = (STRPTR)HostPort->mp_Node.ln_Name;

		/* No file name extension? Take the default. */
		if(!FileExtension)
			FileExtension = (STRPTR)"rexx";

		/* Create the message. */
		HostMessage = CreateRexxMsg((struct MsgPort *)HostPort,(char *)FileExtension,(char *)HostName);
		if(HostMessage)
		{
			/* Add the command. */
			HostMessage->rm_Args[0] = CreateArgstring((char *)CommandString,strlen((char *)CommandString));
			if(HostMessage->rm_Args[0])
			{
				/* This is a command, not a function. */
				HostMessage->rm_Action = RXCOMM;

				/* Release it... */
				PutMsg(RexxPort,(struct Message*)HostMessage);

				/* Successful action. */
				return(TRUE);
			}
			DeleteRexxMsg(HostMessage);
		}
	}
	return(FALSE);
}
Example #25
0
void rxsendrawfile(struct RexxMsg *mess) {
        BPTR fh;
        int antal;
        char retstr[2] = "x", *filnamn = hittaefter(mess->rm_Args[0]);
        if(!(fh = Open(filnamn,MODE_OLDFILE))) {
                sprintf(outbuffer,"\n\n\rKan inte öppna filen %s\n\r",filnamn);
                puttekn(outbuffer,-1);
                retstr[0]='0';
        } else {
                while(antal = Read(fh,outbuffer,99)) {
                        if(antal == -1) break;
                        outbuffer[antal] = 0;
                        putstring(outbuffer,-1,0);
                }
                Close(fh);
                retstr[0] = '1';
        }
        if(mess->rm_Action & 1L<<RXFB_RESULT) {
                if(!(mess->rm_Result2=(long)CreateArgstring(retstr,1)))
                        puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1);
        }
        mess->rm_Result1=0;
}
Example #26
0
static BOOL localSendRexxMsg(struct MsgPort *reply, STRPTR rxport, STRPTR rxcmd)
{
  BOOL success = FALSE;
  struct RexxMsg *rxmsg;

  ENTER();

  if((rxmsg = CreateRexxMsg(reply, NULL, NULL)) != NULL)
  {
    rxmsg->rm_Action = RXCOMM|RXFF_STRING|RXFF_NOIO;

     if((rxmsg->rm_Args[0] = (IPTR)CreateArgstring(rxcmd,strlen(rxcmd))) != 0)
     {
       struct MsgPort *port;

       Forbid();

       if((port = FindPort(rxport)) != NULL)
       {
         PutMsg(port, (struct Message *)rxmsg);

         success = TRUE;
       }

       Permit();

       if(success == FALSE)
         DeleteArgstring((APTR)rxmsg->rm_Args[0]);
     }

     if(success == FALSE)
       DeleteRexxMsg(rxmsg);
  }

  RETURN(success);
  return success;
}
Example #27
0
/*
 * Use this to return a ARexx message...
 *
 * If you wish to return something, it must be in the RString.
 * If you wish to return an Error, it must be in the Error.
 * If there is an error, the RString is ignored.
 */
void ReplyARexxMsg(AREXXCONTEXT RexxContext,struct RexxMsg *rmsg,
			char *RString,LONG Error)
{
    if (RexxContext) if (rmsg) if (rmsg!=REXX_RETURN_ERROR)
    {
	rmsg->rm_Result2=0;
	if (!(rmsg->rm_Result1=Error))
	{
	    /*
	     * if you did not have an error we return the string
	     */
	    if (rmsg->rm_Action & (1L << RXFB_RESULT)) if (RString)
	    {
		rmsg->rm_Result2=(LONG)CreateArgstring(RString,
						       (LONG)strlen(RString));
	    }
	}

	/*
	 * Reply the message to ARexx...
	 */
	ReplyMsg((struct Message *)rmsg);
    }
}
Example #28
0
/* send a message to an AREXX port.
 */
static int ADDRESS (const char *hostname, const char *cmd)
{
    struct MsgPort *RexxPort,
		   *ReplyPort;
    struct RexxMsg *HostMsg,
		   *answer;
    int result = RC_WARN;

    if (!stricmp (hostname, "COMMAND"))
	return SystemTagList(cmd,NULL);

    if ((RexxPort = (void *)FindPort (hostname))) {
	if ((ReplyPort = (void *)CreateMsgPort ())) {
	    if ((HostMsg = CreateRexxMsg (ReplyPort, NULL, hostname))) {
		unsigned int len = strlen (cmd); /* holger: trick for powerup */
		if ((HostMsg->rm_Args[0] = CreateArgstring ((char *)cmd, len))) {
		    HostMsg->rm_Action = RXCOMM | RXFF_RESULT;
		    PutMsg (RexxPort, (void*)HostMsg);
		    WaitPort (ReplyPort);
		    while (!(answer = (void *)GetMsg (ReplyPort)));
		    result = answer->rm_Result1;
		    if (result == RC_OK) {
			if (answer->rm_Result2) {
			    strncpy (RESULT,(char *)answer->rm_Result2, RESULT_LEN);
			    DeleteArgstring ((char *)answer->rm_Result2);
			} else RESULT[0] = '\0';
		    }
		    DeleteArgstring (HostMsg->rm_Args[0]);
		} else strcpy (RESULT, "Can't create argstring!");
		DeleteRexxMsg (HostMsg);
	    } else strcpy (RESULT, "Can't create rexx message!");
	    DeleteMsgPort (ReplyPort);
	} else strcpy (RESULT, "Can't alloc reply port!");
    } else sprintf (RESULT, "Port \"%s\" not found!", hostname);
    return result;
}
Example #29
0
int commonsendrexx(int komnr,int hasarg) {
        char macronamn[1081],*rexxargs1;
        int going = TRUE;
        struct RexxMsg *nikrexxmess,*tempmess;
        struct MsgPort *rexxmastport;

        sendrexxrc=-5;
        if(!hasarg)
                sprintf(macronamn,"NiKom:rexx/ExtKom%d %d %d",komnr,nodnr,inloggad);
        else
                sprintf(macronamn,"NiKom:rexx/ExtKom%d %d %d %s",komnr,nodnr,inloggad,argument);

        if(!(nikrexxmess=(struct RexxMsg *)CreateRexxMsg(rexxport,"nik",rexxport->mp_Node.ln_Name))) {
                puttekn("\r\n\nKunde inte allokera ett RexxMsg!\r\n\n",-1);
                return(-5);
        }
        if(!(nikrexxmess->rm_Args[0]=(STRPTR)CreateArgstring(macronamn,strlen(macronamn)))) {
                DeleteRexxMsg(nikrexxmess);
                puttekn("\r\n\nKunde inte allokera en ArgString1\r\n\n",-1);
                return(-5);
        }
        nikrexxmess->rm_Action=RXCOMM | RXFB_TOKEN;
        Forbid();
        if(!(rexxmastport=(struct MsgPort *)FindPort("REXX"))) {
                Permit();
                puttekn("\r\n\nRexxMast är inte igång!\r\n\n",-1);
                return(-5);
        }
        PutMsg(rexxmastport,(struct Message *)nikrexxmess);
        Permit();
        while(going) {
                tempmess = (struct RexxMsg *)WaitPort(rexxport);
                if(!tempmess) printf("*** Something's fishy around here... ***\n");
                while(tempmess=(struct RexxMsg *)GetMsg(rexxport)) {
                        if(tempmess->rm_Node.mn_Node.ln_Type==NT_REPLYMSG) {
                                DeleteArgstring(nikrexxmess->rm_Args[0]);
                                if(nikrexxmess->rm_Result1) {
                                        sprintf(outbuffer,"\r\n\nRexx: Return-code %d\r\n\n",nikrexxmess->rm_Result1);
                                        puttekn(outbuffer,-1);
                                }
                                DeleteRexxMsg(nikrexxmess);
                                if(!rxlinecount)
                                {
	                                rxlinecount=TRUE;
	                                radcnt = 0;
								}
                                return(sendrexxrc);
                        }
                        if(!strnicmp(tempmess->rm_Args[0],"sendstring",10)) rexxsendstring(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"sendserstring",13)) rexxsendserstring(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"getstring",9)) rexxgetstring(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"sendtextfile",12)) sendfile(rexxargs1=hittaefter(tempmess->rm_Args[0]));
                        else if(!strnicmp(tempmess->rm_Args[0],"showtext",8)) rxvisatext(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"showletter",10)) rexxvisabrev(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"lasttext",8)) senastread(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"nikcommand",10)) kommando(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"niknrcommand",12)) niknrcommand(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"edit",4)) rxedit(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"sendbinfile",11)) rexxsendbinfile(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"recbinfile",10)) rexxrecbinfile(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"getchar",7)) rexxgettekn(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"chkbuffer",9)) rexxchkbuffer(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"yesno",5)) rexxyesno(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"whicharea",9)) whicharea(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"whichmeet",9)) whichmeet(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"logout",6)) rxlogout(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"runfifo",7)) rxrunfifo(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"runrawfifo",10)) rxrunrawfifo(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"entermeet",9)) rxentermeet(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"setlinecount",12)) rxsetlinecount(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"extratime",9)) rxextratime(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"gettime",7)) rxgettime(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"sendchar",8)) rxsendchar(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"sendserchar",11)) rxsendserchar(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"setnodeaction",13)) rxsetnodeaction(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"sendrawfile",11)) rxsendrawfile(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"changelatestinfo",16)) rxchglatestinfo(tempmess);
                        else if(!strnicmp(tempmess->rm_Args[0],"getnumber",9)) rxgetnumber(tempmess);
                        else {
                                sprintf(outbuffer,"\r\n\nKan inte hantera: %s\r\n",tempmess->rm_Args[0]);
                                puttekn(outbuffer,-1);
                                tempmess->rm_Result1=5;
                                tempmess->rm_Result2=NULL;
                        }
                        ReplyMsg((struct Message *)tempmess);
                }
        }
        if(carrierdropped()) return(-8);
        return(sendrexxrc);
}
Example #30
0
LONG SendRexxCommand(CONST_STRPTR port, CONST_STRPTR Cmd, STRPTR Result, LONG ResultSize)
{
	struct MsgPort *RexxPort;
	struct MsgPort *ReplyPort = &((struct Process *)FindTask(NULL))->pr_MsgPort;
	struct Library *RexxSysBase;
#ifdef __AMIGAOS4__
	struct RexxSysIFace *IRexxSys;
#else
	void *IRexxSys;
#endif
	int rc;

	*Result = '\0';

	if ((RexxSysBase = OpenLibraryInterface("rexxsyslib.library", 36L, &IRexxSys)))
	{
		Forbid();

		if ((RexxPort = FindPort(port)))
		{
			struct RexxMsg *rexxMsg, *Answer;

			if ((rexxMsg = CreateRexxMsg(ReplyPort, NULL, NULL)))
			{
				if ((rexxMsg->rm_Args[0] = (STRPTR)CreateArgstring(Cmd, strlen(Cmd))))
				{
					rexxMsg->rm_Action = RXCOMM | RXFF_RESULT;

					PutMsg(RexxPort, &rexxMsg->rm_Node);
					Permit();

					do
					{
						WaitPort(ReplyPort);
						Answer = (struct RexxMsg *)GetMsg(ReplyPort);
					} while (Answer == NULL);

					if ((rc = (Answer->rm_Result1 == RETURN_OK)))
					{
						if (Answer->rm_Result2)
						{
							strncpy(Result, (STRPTR)Answer->rm_Result2, ResultSize);
							DeleteArgstring((STRPTR)Answer->rm_Result2);
						}
					}

					DeleteArgstring((STRPTR)ARG0(Answer));
					DeleteRexxMsg(Answer);

					CloseLibraryInterface(RexxSysBase,IRexxSys);
					return rc;
				} else
				{
					DeleteRexxMsg(rexxMsg);
				}
			}
		}

		Permit();

		CloseLibraryInterface(RexxSysBase,IRexxSys);
	}

	return 0;
}