home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 2
/
goldfish_vol2_cd1.bin
/
files
/
util
/
misc
/
kalender
/
txt
/
arexx.mod
< prev
next >
Wrap
Text File
|
1993-12-18
|
2KB
|
106 lines
IMPLEMENTATION MODULE ARexx; (* Copyright 1993 by Kai Hofmann *)
(*$ StackChk := FALSE *)
(*$ RangeChk := FALSE *)
(*$ OverflowChk := FALSE *)
(*$ NilChk := FALSE *)
(*$ CaseChk := FALSE *)
(*$ ReturnChk := FALSE *)
(*$ LargeVars := FALSE *)
(*$ EntryClear := TRUE *)
(*$ Volatile := TRUE *)
(*$ StackParms := TRUE *)
(*$ CStrings := TRUE *)
FROM SYSTEM IMPORT ADR,ADDRESS,BITSET;
FROM ExecD IMPORT MsgPort,MsgPortPtr,MsgPortAction;
FROM ExecL IMPORT CreateMsgPort,DeleteMsgPort,FindPort,GetMsg,ReplyMsg,
PutMsg,Forbid,Permit,WaitPort;
FROM RexxD IMPORT RexxMsg,RexxMsgPtr,RexxArg,RexxArgPtr,Command;
FROM RexxL IMPORT CreateArgstring,DeleteArgstring,
CreateRexxMsg,DeleteRexxMsg,
ClearRexxMsg,FillRexxMsg;
FROM String IMPORT Length;
VAR
erg : BOOLEAN;
port : MsgPortPtr;
PROCEDURE PutRexxMsg(msg : RexxMsgPtr; portname : ARRAY OF CHAR) : BOOLEAN;
VAR
dport : MsgPortPtr;
stat : BOOLEAN;
BEGIN
stat := FALSE;
Forbid();
dport := FindPort(ADR(portname));
IF dport # NIL THEN
PutMsg(dport,msg);
stat := TRUE;
END;
Permit();
RETURN(stat);
END PutRexxMsg;
PROCEDURE OpenRexxPort() : MsgPortPtr;
VAR
port : MsgPortPtr;
BEGIN
port := CreateMsgPort();
RETURN(port);
END OpenRexxPort;
PROCEDURE CloseRexxPort(port : MsgPortPtr);
BEGIN
;
DeleteMsgPort(port);
END CloseRexxPort;
PROCEDURE SendRexxMsg(port : MsgPortPtr; dest : ARRAY OF CHAR;
msg : ARRAY OF CHAR) : BOOLEAN;
VAR
rexxmsg : RexxMsgPtr;
arg : ADDRESS;
erg : BOOLEAN;
BEGIN
rexxmsg := CreateRexxMsg(port,NIL,NIL);
IF rexxmsg # NIL THEN
rexxmsg^.action.command := comm;
arg := CreateArgstring(ADR(msg),Length(msg));
IF arg # NIL THEN
ClearRexxMsg(rexxmsg,16);
erg := FillRexxMsg(rexxmsg,1,BITSET{});
rexxmsg^.args[0] := arg;
erg := PutRexxMsg(rexxmsg,dest);
IF erg THEN
WaitPort(port);
rexxmsg := GetMsg(port);
END;
DeleteArgstring(arg);
ELSE
erg := FALSE;
END;
DeleteRexxMsg(rexxmsg);
ELSE
erg := FALSE;
END;
RETURN(erg);
END SendRexxMsg;
BEGIN
END ARexx.