[Back to CRT SWAG index]  [Back to Main SWAG index]  [Original]


Unit sCrt;

InterFace

uses
  Crt;

procedure init;
procedure ws(X, Y, Atr : Byte; Ch : Char);
function  rs(X, Y : byte) : Char;
procedure wst(X, Y, Atr : Byte; S : String);
procedure WstCenter(X, Y, Atr : Byte; Str : string);
procedure WstRight(X, Y, Atr : Byte; Str : string);

Implementation

var
  ScreenSeg : longint;
  att       : byte;                (* atributt(se over) *)

procedure init;
(* Denne prosedyren finner ut skjermadressen i RAM og setter att *)
(* til 15 (hvitt p} sort), dette funker b}de p} farge og monoskjerm *)
begin
  if (Mem[0000:1040] and 48) <> 48 then
    ScreenSeg := $B800
  else
    ScreenSeg := $B000;
  Att := 15;
end;

procedure ws(X, Y, Atr : Byte; Ch : Char);
(* Skriver ut et tegn(thischar) i posisjon (col,row), der col er *)
(* vanrett (1-80) og row er loddrett (1-25) *)
var
  locationCode : Integer;
begin
  Att := Atr;
  locationCode := (X - 1) * 2 + (Y - 1) * 160;
  Mem[screenseg : locationcode] := Ord(Ch);
  Mem[screenseg : locationcode + 1] := Atr;
end;

function rs(X, Y : byte) : Char;
(* Leser et tegn p} skjermen i pos. col,row *)
var
  locationcode : Integer;
begin
   LocationCode := (X - 1) * 2 + (Y - 1) * 160;
   rs := chr(Mem[ScreenSeg:LocationCode]);
end;

procedure wst(X, Y, Atr : Byte; S : String);
(* Skriver ut en streng til skjermen i pos. x,y *)
var
  t : Byte;
begin
   for t := 1 to Length(S) do
     ws(x + t - 1, y, Atr, S(.t.));
end;

procedure WstCenter(X, Y, Atr : Byte; Str : string);
var
  t : Byte;
begin
  for t := 1 to Length(Str) do
    Ws(t + X - (Length(Str) div 2), Y, Atr, Str[t]);
end;

procedure WstRight(X, Y, Atr : Byte; Str : string);
var
  t : Byte;
begin
  for t := 1 to Length(Str) do
    Ws(t + X - Length(Str), Y, Atr, Str[t]);
end;


begin
  Init;
end.

[Back to CRT SWAG index]  [Back to Main SWAG index]  [Original]