(**********************************************************************

    :Program.    Interface.def
    :Contents.   Interface between m2make, m2c and m2l
    :Support.    thanks to Fridtjof for his contribution to "Startm2c"
    :Author.     Nicolas Benezan [bne]
    :Address.    Postwiesenstr. 2, D7000 Stuttgart 60
    :Phone.      711/333679
    :Copyright.  Shareware, see Doc-File
    :Language.   Modula-2
    :Translator. M2Amiga A+L V3.2d
    :Imports.    Environment, MemSystem1.3, ErrorReq1.2 [bne]
    :Imports.    Queue1.1 [mif]
    :History.    V1.0 [bne] 11.Feb.1989
    :History.    V1.1 [bne] 30.Mar.1989 (CreateProc bug fixed)
    :History.    V1.2 [bne] 4.Apr.1989 (+ Options)
    :History.    V1.3 [bne] 18.May.1989 (+ ExDos)

**********************************************************************)

DEFINITION MODULE Interface;

FROM SYSTEM     IMPORT ADDRESS;
FROM Arts       IMPORT ModName;
FROM ExDos      IMPORT FileLockPtr;

CONST   CompilerName = "m2c";
        LinkerName   = "m2l";

PROCEDURE InitCompilerArgList;
(*:Semantic.    Initialises the argument list for the compiler,
  :Semantic.    must be called before any AddCompilerArg().
*)

PROCEDURE AddCompilerArg(Argument:ModName;Dir:FileLockPtr);
(*:Input.       Argument: Name of the module to be compiled
  :Input.       (with extension, but without path)
  :Input.       Dir: FileLock of the directory containing the module
  :Semantic.    Queues a compiler argument.
  :Note.        Dir is DupLock()ed.
*)

PROCEDURE StartCompiler;
(*:Semantic.    Starts the compiler and passes all arguments
  :Semantic.    previously queued with AddCmpilerArg().
*)

PROCEDURE StartLinker(Argument:ModName;
                      Dir:FileLockPtr);
(*:Input.       Argument: Name of the module to be linked
  :Input.       (with extension, but without path)
  :Input.       Dir: FileLock of the directory containing the module
  :Semantic.    Starts the linker and passes options and argument to it.
  :Note.        Dir is DupLock()ed.
  :Note.        Do not StartLinker() before the Compiler has finished.
*)

PROCEDURE WaitUntilCompleted;
(*:Semantic.    Waits for the compiler or linker to Exit(), then
  :Semantic.    deallocates its arguments.
  :Note.        The Dirs of arguments are UnLocked().
*)

END Interface.

