IMPLEMENTATION MODULE Versions ;
(*
        Title:          PANOS Version number handler.
        Author:         Keith Rautenbach.
        History:
          10 Aug 84     Initial version.
          31 Aug 84     Strins removed.
*)

FROM String IMPORT CopyLC , LengthC ;
FROM IO IMPORT WriteByte , BlockWrite ;
FROM SYSTEM IMPORT ADR ;
IMPORT Program , TrapHandler , TKCalls , BBC , SYSTEMTYPES , String , Storage ;
IMPORT Store , Error , Utils , Debug , DecodeArg , Convert ;
IMPORT Fields , GlobalString , IO , IOSupport , File , TimeAndDate ;
IMPORT LinkTable , Loader ;
IMPORT Random , Handler , DirtyHandler , Command , Versions ;
IMPORT Panos ;

(* ========================================================================= *)

PROCEDURE Version( VAR String : ARRAY OF CHAR ) ;
BEGIN
   CopyLC( "Versions        0.01/21  27 Nov 84 17:18:18" , String ) ;
END Version ;

(* ========================================================================= *)

PROCEDURE WriteS( VAR String : ARRAY OF CHAR ) ;
VAR
   Junk                        : INTEGER ;
   Index                       : CARDINAL ;
   Length                      : CARDINAL ;
   LengthWritten               : CARDINAL ;
BEGIN

   Junk := BlockWrite(LengthWritten, LengthC( String ) , ADR( String[ 0 ])) ;

END WriteS ;

(* ========================================================================= *)

PROCEDURE WriteAllVersions ;
(* Writes the version strings of all modules in PANOS *)
BEGIN
   WriteVersion( Program.Version ) ;
   WriteVersion( TrapHandler.Version ) ;
   WriteVersion( TKCalls.Version ) ;
   WriteVersion( BBC.Version ) ;
   WriteVersion( SYSTEMTYPES.Version ) ;
   WriteVersion( String.Version ) ;
   WriteVersion( Fields.Version ) ;
   WriteVersion( Storage.Version ) ;
   WriteVersion( Store.Version ) ;
   WriteVersion( Error.Version ) ;
   WriteVersion( Utils.Version ) ;
   WriteVersion( Debug.Version ) ;
   WriteVersion( DecodeArg.Version ) ;
   WriteVersion( Convert.Version ) ;
   WriteVersion( LinkTable.Version ) ;
   WriteVersion( Loader.Version ) ;
   WriteVersion( GlobalString.Version ) ;
   WriteVersion( IO.Version ) ;
   WriteVersion( IOSupport.Version ) ;
   WriteVersion( File.Version ) ;
   WriteVersion( TimeAndDate.Version ) ;
   WriteVersion( Random.Version ) ;
   WriteVersion( DirtyHandler.Version ) ;
   WriteVersion( Handler.Version ) ;
   WriteVersion( Command.Version ) ;
   WriteVersion( Versions.Version ) ;
   WriteVersion( Panos.Version ) ;
END WriteAllVersions  ;

(* ========================================================================= *)

PROCEDURE WriteVersion( Proc : VersionPROC ) ;
(* Writes the version string associated with the given Proc *)
VAR
   Buffer                  : ARRAY [ 0..50 ] OF CHAR ;
   Junk                    : INTEGER ;
BEGIN
   Proc( Buffer ) ;
   WriteS( Buffer ) ;
   Junk := WriteByte( 10 ) ;
END WriteVersion ;

END Versions.
