[INHERIT ('SYS$LIBRARY:STARLET.PEN')]
MODULE Complement;

{ Routines for performing the COMPLEMENT command }

(******************* Declare External Variables and Constants *****************)

%INCLUDE 'HEX$DIRECTORY:HEXGLOB.INC/NOLIST'

(********************* External RTL Routine Declarations **********************)

%INCLUDE 'HEX$DIRECTORY:LIB.INC/NOLIST'

(****************** External Homemade Routine Declarations ********************)

[EXTERNAL] PROCEDURE Check_Extra_Chars; EXTERN;

(******************************************************************************)
(*									      *)
(*			    Procedure Do_Complement			      *)
(*									      *)
(******************************************************************************)

[GLOBAL] FUNCTION Do_Complement: INTEGER;

{ This function complements the bytes in the designated range of virtual
  memory. }

VAR
	I		: UNSIGNED;
	VM_Index	: INTEGER;

BEGIN

  I := From;
  WHILE (I <= Thru) DO
    BEGIN
      VM_Index := (I - Offset)::INTEGER;
      VM[VM_Index] := 255 - VM[VM_Index];
      I := I + Step_Param;
    END;
  Check_Extra_Chars;
  Do_Complement := SS$_NORMAL;

END;

(******************************************************************************)

END. { module complement }
