DEFINITION MODULE FullArgHandler;
(*$ LargeVars:=FALSE LongAlign:=FALSE *)
(* 22.9.90/bp Jetzt reicht's mir! *)

FROM SYSTEM IMPORT ADDRESS;
IMPORT DosD, ExecD;

CONST
  defaultSize=SIZE(ExecD.MsgPort);

TYPE
  ArgSource=(editor, keyboard, arexx);
  OptionProc=PROCEDURE(ARRAY OF CHAR,INTEGER):BOOLEAN;

VAR interActive, verbose: BOOLEAN;
    source: ArgSource; (* nur wichtig, wenn =editor! *)
    myCD:DosD.FileLockPtr; (* kann auch vom Editor oder ARexx temporär sein! *)
    fName: ARRAY[0..255] OF CHAR;
    fNameLen:INTEGER;

(* p wird aufgerufen, wenn ein String mit '+' oder '-' oder '?' beginnt. *)
PROCEDURE InitHandler(p:OptionProc; portSize:INTEGER;
		rexxStr,portName,msg,firstName,secName:ADDRESS):ADDRESS;
(* firstName ist z.B. "ENV:m2c", secName ist z.B. "m2c.opt"
   msg muß %s enthalten, z.B. "(%s) m2c> "
   portName="M2C" oder "M2L"
   rexxStr muß GROSS sein und mit Leerzeichen enden!
   ("COMPILE " oder "LINK ")
*)

PROCEDURE GotoDir(s:ARRAY OF CHAR):BOOLEAN; (* ""=goHome! *)
(* berücksichtigt auch, daß nur temporär, wenn von ARexx! *)

PROCEDURE SetReply(val{0}:LONGINT);
(* Nach jedem compile/link-Vorgang aufrufen!
   setzt replyVal auf mindestens val
   replyVal wird jeweils von GetArgString zurückgegeben und
   nach GetArgString auf 0 gesetzt
*)

(* holt von ENV:, Arguments, editor, arexx oder tastatur *)
(* Resultat FALSE heißt: ungültige Option! *)
(* fNameLen=0 heißt: kein Name zu holen *)
PROCEDURE FetchName():BOOLEAN;

PROCEDURE GetTextChar(VAR ch: CHAR); (* nur m2c *)

END FullArgHandler.
