IMPLEMENTATION MODULE BBC ;
(*
        Title:          PANOS Version number handler.
        Author:         Keith Rautenbach.
        History:
          14 Aug 84     Initial version.
          30 Aug 84     Declare procedure etc removed.
          30 Aug 84     Install System Condition Handler.
          05 Sep 84     Implement and Correct Xprocs.
          08 Oct 84     SystemSignal calls in X procs.
*)


FROM String IMPORT CopyLC , LengthC ;

FROM SYSTEM IMPORT ADR , ADDRESS , TKCALL , REGISTER ;

FROM Handler IMPORT InstallPANOSHandler, SystemSignal  ;

FROM TKCalls IMPORT TKCall , TKbyte , TKword ;

FROM File IMPORT OSFileArray ;

IMPORT File ;


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

PROCEDURE Version( VAR String : ARRAY OF CHAR ) ;
BEGIN
   CopyLC( "BBC             0.00/13  07 Dec 84 14:54:37" , String ) ;
END Version ;

(* ----------------------------------------------------------------------------
      OSByte(CARDINAL: Command,
             CARDINAL: ParamX,
             CARDINAL: ParamY);INTEGER: ResultCode,
                               CARDINAL: ResultX,
                               CARDINAL: ResultY,
                               BOOLEAN: Cbit
*)
PROCEDURE OSByte( VAR ResultX : CARDINAL ;
                  VAR ResultY : CARDINAL ;
                  VAR Cbit : BOOLEAN ;
                      Command : CARDINAL ;
                      ParamX : CARDINAL ;
                      ParamY : CARDINAL ) : INTEGER ;
CONST
   UPSR                          = 8 ;
VAR
   Result                        : INTEGER ;
BEGIN
   Result := TKCALL( TKbyte , Command , ParamX , ParamY ) ;
   IF Result < 0 THEN
      RETURN REGISTER( 1 ) ;
   ELSE
      ResultX := CARDINAL( REGISTER( 2 ) ) MOD 256 ;
      ResultY := CARDINAL( REGISTER( 3 ) ) MOD 256 ;
      Cbit := ( 0 IN BITSET( REGISTER( UPSR ) ) ) ;
      RETURN  0 ;
   END (* if *) ;
END OSByte ;

(* ----------------------------------------------------------------------------
      OSWord(CARDINAL: Command,
             ADDRESS: ParamBlock);INTEGER: ResultCode
*)
PROCEDURE OSWord( Command : CARDINAL ; ParamBlock : ADDRESS ) : INTEGER ;
VAR
   Result                        : INTEGER ;
BEGIN
   IF ( TKCALL( TKword , ParamBlock ) < 0 ) THEN
      RETURN REGISTER( 1 ) ;
   ELSE
      RETURN 0 ;
   END (* if *) ;
END OSWord ;


(* ----------------------------------------------------------------------------
      OSFile(CARDINAL: Command,
             STRING: FileName,
             ADDRESS: ParamBlockArray);INTEGER: ResultCode
*)
PROCEDURE OSFile( Command : CARDINAL ;
                  FileName : ARRAY OF CHAR ;
                  VAR ParamBlockArray : OSFileArray ) : INTEGER ;
BEGIN
   (* We have to ask the File manager to perform this BBC.OSFile takes a
      PANOS file name.
   *)
   RETURN File.PANOSFile( Command , FileName , ParamBlockArray ) ;
END OSFile ;

(* ----------------------------------------------------------------------------
      XOSByte(CARDINAL: Command,
              CARDINAL: ParamX,
              CARDINAL: ParamY);CARDINAL: ResultX,
                                CARDINAL: ResultY,
                                BOOLEAN: Cbit
*)
PROCEDURE XOSByte( VAR ResultY : CARDINAL ;
                   VAR Cbit    : BOOLEAN ;
                       Command : CARDINAL ;
                       ParamX  : CARDINAL ;
                       ParamY  : CARDINAL ) : CARDINAL ;
VAR
   Result                        : INTEGER ;
   ResultX                       : CARDINAL ;
BEGIN
   Result := OSByte( ResultX , ResultY , Cbit , Command , ParamX , ParamY ) ;
   IF Result < 0 THEN
      SystemSignal( Result , 5 ) ;
   END (* if *) ;

   RETURN ResultX;

END XOSByte ;

(* ----------------------------------------------------------------------------
      XOSWord(CARDINAL: Command, ADDRESS: ParamBlock)
*)
PROCEDURE XOSWord( Command : CARDINAL ; ParamBlock : ADDRESS ) ;
VAR
   Result                        : INTEGER ;
BEGIN
   Result := OSWord( Command , ParamBlock ) ;
   IF Result < 0 THEN
      SystemSignal( Result , 2 ) ;
   END (* if *) ;
END XOSWord ;


(* ----------------------------------------------------------------------------
      XOSFile(CARDINAL: Command,
              STRING: FileName,
              ADDRESS: ParamBlock)
*)
PROCEDURE XOSFile( Command : CARDINAL ;
                   FileName : ARRAY OF CHAR ;
                   VAR ParamBlockArray : OSFileArray ) ;
VAR
   Result                        : INTEGER ;
BEGIN
   Result := OSFile( Command , FileName , ParamBlockArray ) ;
   IF Result < 0 THEN
      SystemSignal( Result , 4 ) ;
   END (* if *) ;
END XOSFile ;



BEGIN

   InstallPANOSHandler();

END BBC.
