2 Copyright © 1995-2007, The AROS Development Team. All rights reserved.
8 #include <proto/alib.h>
9 #include <proto/exec.h>
10 #include <proto/rexxsyslib.h>
11 #include <rexx/storage.h>
12 #include <rexx/errors.h>
16 /*****************************************************************************
28 Set a the value of the name rexx variable.
31 msg - A rexx message generated from a running rexx script
32 varname - The name of the variable to set the value
33 value - a pointer to the beginning of the value to set
34 length - the length of the value argument
37 0 when succes, otherwise a rexx error value is returned.
46 CheckRexxMsg, GetRexxVar
49 This function creates a rexx message that is sent to the AREXX
50 port with a RXSETVAR command.
53 *****************************************************************************/
55 struct Library
*RexxSysBase
= NULL
;
56 struct RexxMsg
*msg2
= NULL
, *msg3
;
57 struct MsgPort
*port
= NULL
, *rexxport
;
58 LONG retval
= ERR10_003
;
60 RexxSysBase
= OpenLibrary("rexxsyslib.library", 0);
61 if (RexxSysBase
==NULL
) goto cleanup
;
69 rexxport
= FindPort("REXX");
76 port
= CreateMsgPort();
77 if (port
== NULL
) goto cleanup
;
78 msg2
= CreateRexxMsg(port
, NULL
, NULL
);
79 if (msg2
==NULL
) goto cleanup
;
80 msg2
->rm_Private1
= msg
->rm_Private1
;
81 msg2
->rm_Private2
= msg
->rm_Private2
;
82 msg2
->rm_Action
= RXSETVAR
| 2;
83 msg2
->rm_Args
[0] = (IPTR
)CreateArgstring(varname
, strlen(varname
));
84 msg2
->rm_Args
[1] = (IPTR
)CreateArgstring(value
, length
);
85 if (msg2
->rm_Args
[0]==NULL
|| msg2
->rm_Args
[1]==NULL
) goto cleanup
;
87 PutMsg(rexxport
, (struct Message
*)msg2
);
92 msg3
= (struct RexxMsg
*)GetMsg(port
);
93 if (msg3
!=msg2
) ReplyMsg((struct Message
*)msg3
);
96 if (msg3
->rm_Result1
==RC_OK
) retval
= 0;
97 else retval
= (LONG
)msg3
->rm_Result2
;
102 if (msg2
->rm_Args
[0]!=NULL
) DeleteArgstring((UBYTE
*)msg2
->rm_Args
[0]);
103 if (msg2
->rm_Args
[1]!=NULL
) DeleteArgstring((UBYTE
*)msg2
->rm_Args
[1]);
106 if (port
!=NULL
) DeletePort(port
);
107 if (RexxSysBase
!=NULL
) CloseLibrary(RexxSysBase
);