DataMuseum.dk

Presents historical artifacts from the history of:

ICL Comet

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about ICL Comet

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦c7e541e6f⟧ TextFile

    Length: 23168 (0x5a80)
    Types: TextFile
    Names: »PASGRAF.PAS«

Derivation

└─⟦443ac2dce⟧ Bits:30004209 Juletilbud 1985 fra ICL A/S til ICL Comet (2x80 spor)
    └─ ⟦this⟧ »PASGRAF.PAS« 

TextFile

program TESTGRAF; (* Version 1.0 - 1985.08.16 / ULJ *)


(*>>>>>>>>> Copyright (c) 1985, ICL A/S - Ulrich Lysdal Jensen <<<<<<<<<<*)


Var
  hkar: char;
  i: integer;

(**********************-- PASGRAF --***************************************

>>>>>>>>>>> Copyright (c) 1985, ICL A/S - Ulrich Lysdal Jensen <<<<<<<<<<<<

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!                                                      !!!!!!!!!!!
!!!!!!!!!!      ICL A/S PÅTAGER SIG IKKE NOGET ANSVAR FOR       !!!!!!!!!!!
!!!!!!!!!!  EVENTUELLE  FEJL ELLER MANGLER I DETTE PROGRAMMEL.  !!!!!!!!!!!
!!!!!!!!!!                                                      !!!!!!!!!!!
!!!!!!!!!!     PROGRAMMELLET MÅ KUN MED ICL's SKRIFTLIGE        !!!!!!!!!!!
!!!!!!!!!!     GODKENDELSE ANVENDES I KOMMERCIELT ØJEMED.       !!!!!!!!!!!
!!!!!!!!!!                                                      !!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


###########################################################################


Disse PASCAL-procedurer udfører de grundlæggende grafiske operationer:

        Status          Undersøger om grafikprocessoren er klar til
                        en ny kommando.
        GrafBillede1:   Skifter til grafikbillede nr. 1.
        GrafBillede2:   Skifter til grafikbillede nr. 2.
        VideoBillede:   Skifter til videobilledet.
        GrafInit:       Initierer for grafik - se spec. i proceduren.
        SletBillede:    Sletter det viste grafikbillede.
        PenNed:         Sætter pen til tegning.
        PenOp:          Sætter pen til ikke tegne.
        EraseNed:       Sætter pen til sletning (viskelæder).
        EraseOp:        Sætter pen til ikke sletning (samme effekt som
                        PenOp ved flytning af pennen).
        KarSize(ch,cy): Sætter karakterstørrelse - se spec. i proc.
        LinieType(l):   Sætter linietype for tegning - se spec. i proc.
        KarType(k):     Sætter karaktertype ved tekst - se spec. i proc.
        MovePen(x,y):   Flytter pennen fra nuværende position til (x,y).
                        Der tegnes/slettes i overensstemmelse med gældende
                        pen/eraser op/ned.
        MoveTo(x,y):    Flytter pennen uden tegning til (x,y).
        DrawTo(x,y):    Tegner linie fra nuværende position til (x,y).
        EraseTo(x,y):   Sletter linie fra nuværende position til (x,y).
        PrikOn(x,y):    Tænder en pixel i (x,y).
        PrikOff(x,y):   Slukker en pixel i (x,y).
        Cirkel(x,y,r):  Tegner cirkel m. centrum (x,y) og radius r.
        Tekst(x,y,cx,cy,strg):  Skriver teksten strg startende i (x,y)
                                med karakterstørrelsen cx,cy.

Grafikskærmens dimensioner er 512 x 512 pixels, der adresseres i et
koordinatsæt med (0,0) i skærmens nederste venstre hjørne, dvs.
x og y ligger i intervallet 0 til 511.

BEMÆRK: Med rutinerne MovePen, MoveTo, DrawTo og EraseTo må der højest
        tegnes/flyttes eller slettes over afstande, der svarer til en til-
        vækst i X- og/el. Y-retningen på max. 510 pixels.

Denne fil - PASGRAF.PAS - kan anvendes som include-fil i et PASCAL-program.

I den aktuelle anvendelse kan visse procedurer evt. udelades, men brugeren
må være opmærksom på, at de enkelte procedurer kalder hinanden indbyrdes, 
hvorfor kriteriet for sletning IKKE alene er, at proceduren ikke forekommer
i brugerens programdel.

Et eksempel på anvendelse af disse procedurer findes i programmet TESTGRAF.




Lyngby, den 16. august 1985  /  Ulrich Lysdal Jensen.


##########################################################################*)

TYPE
   streng = string(.80.);   (* Anvendes i Tekst *)
   

procedure Status;          (*********************************************)

(* Checker om grafikprocessor klar til ny kommando *)

 begin
   while port(.160.) AND $F4 = 0 do;
 end;
 

procedure GrafBillede1;    (*********************************************)

(* Vælger grafikbillede nr. 1 *)

 begin
   port(.176.) := 255;
   port(.179.) := 0;
 end;
 

procedure GrafBillede2;    (*********************************************)

(* Vælger grafikbillede nr. 2 *)

 begin
   port(.176.) := 255;
   port(.179.) := 255;
 end;
 
procedure VideoBillede;     (***********************************************)


(* Vælger videobilledet *)

 begin
   port(.176.) := 0;
 end;


procedure GrafInit;         (***********************************************)

(* Initiering af grafikmodul:
   - Billede 1 og 2 blankstilles
   - X-reg = Y-reg. = DX-reg. = DY-reg. = 0
   - Pen DOWN
   - CHX = CHY = 1
   - Kontinuert linietype
   - Lodret skrift på vandret linie
   - RMW OFF
   Efter udførelse af GrafInit vises grafikbillede nr. 1*)
   
 begin
   GrafBillede2;
   port(.160.) := 7;
   GrafBillede1;
   port(.160.) := 7;
   port(.177.) := 0;
 end; 
 

procedure SletBillede;            (****************************************)

(* Sletter det viste grafikbillede *)

 begin
   port(.160.) := 7;
 end;


procedure PenNed;                 (***************************************)

(* Sætter Pen DOWN - skrive *)

 begin
   port(.160.) := 0;
   port(.160.) := 2;
 end;


procedure PenOp;                  (**************************************)

(* Sætter Pen UP - flytte uden skrive *)

 begin
   port(.160.) := 0;
   port(.160.) := 3;
 end;


procedure EraseNed;               (**************************************)

(* Sætter Eraser DOWN - sletter *)

 begin
   port(.160.) := 1;
   port(.160.) := 2;
 end;


procedure EraseOp;                (**************************************)

(* Sætter Eraser UP - flytte uden slette *)

 begin
   port(.160.) := 1;
   port(.160.) := 2;
 end;


procedure KarSize(x,y: integer);  (***************************************)

(* Sætter karakterstørrelsen CHX = x og CHY = y
   x/y = <1...16>  (1 = mindste karakterstørrelse).
   Hvis x og/el. y > 16 sættes værdien til 16.
   BEMÆRK: intervallet for x og y er forskellig fra det for grafikmodulet
           specificerede. *)

 begin
   if x>=16 then x:=0;
   if y>=16 then y:=0;
   port(.163.) := x*16+y;
 end;


procedure LinieType(l: integer);   (***************************************)

(* Sætter linietype til l: 0 => kontinuert linietype         ______
                           1 => punkteret linietype          ......
                           2 => stiplet linietype            ------
                           3 => stiplet/punkteret linietype  _._._.
   Hvis l > 3 sættet kontinuert linietype *)

 begin
   if l > 3 then l:=0;
   port(.162.) := (port(.162.) AND $FC) + l;
 end;


procedure KarType(k: integer);     (**************************************)

(* Sætter karaktrtype til k: 0 => lodret skrift på vandret linie
                             1 => skrå   skrift på vandret linie
                             2 => lodret skrift på lodret  linie
                             3 => skrå   skrift på lodret  linie
   Hvis k > 3 sættes lodret skrift på vandret linie *)

 begin
   if k > 3 then k:=0;
   port(.162.) := (port(.162.) AND $F3) + k*4;
 end;


procedure MovePen(x,y: integer);    (*************************************)

(* Bevæger pen/eraser fra nuværende koordinater (X-reg,Y-reg) til (x,y)
   Under flytningen tegnes/slettes i overensstemmelse med valget af
   pen/eraser op/ned.
   Der kan maksimalt flyttes en afstand svarende til en tilvækst i
   X- og/el. Y-retningen på 510 pixels. *)

Var
   i,kommando,mx,my,mdx,mdy: integer;
 
 begin
   mx := port(.168.)*256 + port(.169.);
   my := port(.170.)*256 + port(.171.);
   mdx := x - mx;
   mdy := y - my;
   port(.165.) := ABS(mdx) DIV 2;
   port(.167.) := ABS(mdy) DIV 2;
   if mdx>0 then
      if mdy>0 then
         kommando := 17
      else
         kommando := 21
   else
      if mdy>0 then
         kommando := 19
      else
         kommando := 23;
   port(.160.) := kommando;
   Status;
   port(.165.) := ABS(mdx) - port(.165.);
   port(.167.) := Abs(mdy) - port(.167.);
   port(.160.) := kommando;
 end; 


procedure MoveTo(x,y: integer);     (*************************************)

(* Flytter pen oppe (ikke skrive) til (x,y).
   Tilvæksten i X- og/el. Y-retningen må højest være 510 pixels. *)

 begin
   PenOp;
   MovePen(x,y);
 end;


procedure DrawTo(x,y: integer);     (************************************)

(* Tegner ret linie fra gældende koordinater (X-reg,Y-reg) til (x,y).
   Tilvæksten i X- og/el. Y-retningen må højest være 510 pixels. 
   Den rette linie tegnes med gældende linietype - se LinieType. *)

 begin
   PenNed; 
   MovePen(x,y);
 end;
 

procedure EraseTo(x,y: integer);    (*************************************)

(* Sletter en ret linie fra gældende koord. (X-reg,Y-reg) til (x,y).
   Tilvæksten i X- og/el. Y-retningen mø højest være 510 pixels. *)

 begin
   EraseNed;
   MovePen(x,y);
 end;


procedure PrikOn(x,y: integer);     (*************************************)

(* Sætter prikken i (x,y) lysende *)

 begin
   MoveTo(x,y);
   PenNed;
   port(.160.) := 128;
 end;
 

procedure PrikOff(x,y: integer);    (*************************************)

(* Slukker prikken i (x,y) *)

 begin
   MoveTo(x,y);
   EraseNed;
   port(.160.) := 128;
 end;


procedure Cirkel(x,y,r: integer);   (*************************************)

(* Tegner cirkel med centrum i (x,y) og radius r.
   Linietypen er altid kontinuert. *)

Var
  cx,cy,s: integer;
  
 begin
   cx := r;
   cy := 0;
   s := r - 2*cx;
   while cx >= cy do
     begin
       PrikOn(x+cx,y+cy);
       PrikOn(x+cy,y+cx);
       PrikOn(x-cy,y+cx);
       PrikOn(x-cx,y+cy);
       PrikOn(x-cx,y-cy);
       PrikOn(x-cy,y-cx);
       PrikOn(x+cy,y-cx);
       PrikOn(x+cx,y-cy);
       s := s + 2*cy + 1;
       cy := cy + 1;
       if s >= 0 then
         begin
           s := s - 2*cx + 2;
           cx := cx - 1;
         end;
     end;
   end;


procedure Tekst(x,y,cx,cy: integer; strg: streng);    (*******************)

(* Skriver en tekst indeholdt i strg, startende i (x,y).
   karakterstørrelse er bestemt af cx,cy.
   karaktertypen er den gældende - se KarType. *)

Var
  ti: integer;
  
 begin
   MoveTo(x,y);
   PenNed;
   KarSize(cx,cy);
   for ti:=1 to len(strg) do
     begin
       port(.160.) := ord(strg(.ti.));
       Status;
     end;
 end;
 
(***********************-- Slut PASGRAF --*********************************)


(* ----------- Nogle procedurer lavet med PASGRAF-procedurerne ----------- *)

procedure Rektangel(x1,y1,x2,y2: integer);

(* Eksempel på sammenstilling af PASGRAF procedurer til tegning af
   en figur - her et rektangel med sider parallelle med koordinat-
   akserne og to diamentralt modsatte hjørnepunkter (x1,y1) og (x2,y2) *)

 begin
   MoveTo(x1,y1);
   DrawTo(x2,y1);
   DrawTo(x2,y2);
   DrawTo(x1,y2);
   DrawTo(x1,y1);
 end;
 

procedure Rhombe(xb,yb,xt,yt: integer);
 
 (* Tegner rhombe med øverste hjørnepunkt (xt,yt) og nederste hjørnepunkt
    (xb,yb) *)
    
 Var
   hjy: integer;
   
  begin
    MoveTo(xt,yt);
    hjy := (yt - yb) DIV 2;
    DrawTo(xb-hjy,yb+hjy);
    DrawTo(xb,yb);
    Drawto(xb+hjy,yb+hjy);
    DrawTo(xt,yt);
  end;


procedure Slette(x1,y1,x2,y2: integer);

(* Sletter et rektangulært område af skærmen. Rektanglet er bestemt af
   de to diamentralt modsatte hjørner (x1,y1) og (x2,Y2) *)

Var
  si: integer;
        
 begin
   for si := 0 to ABS(y2-y1) do 
     begin
       MoveTo(x1,y1+si);
       EraseTo(x2,y1+si);
     end;
 end;
   

(***************************** HOVEDPROGRAM ********************************)
 
begin
  GrafInit;
  Rektangel(0,0,500,500);
  for i:=1 to 150 do Rhombe(250,250+i,250,250-i);
  MoveTo(0,250);
  DrawTo(100,250);
  MoveTo(250,500);
  DrawTo(250,400);
  MoveTo(500,250);
  DrawTo(400,250);
  Moveto(250,0);
  DrawTo(250,100);
  Slette(200,200,300,300);
  Tekst(210,242,2,2,'PASGRAF');
  for i:=1 to 50 do Cirkel(100,100,i);
  for i:=1 to 25 do Cirkel(100,400,i*2);
  for i:=1 to 10 do Cirkel(400,400,i*5);
  for i:=1 to 5 do Cirkel(400,100,i*10);
  Tekst(300,10,1,1,'Tryk <RETURN> for afslutning.');
  readln(hkar);
  Videobillede; 
end.

(**********************-- PASGRAF --***************************************

>>>>>>>>>>> Copyright (c) 1985, ICL A/S - Ulrich Lysdal Jensen <<<<<<<<<<<<

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!                                                      !!!!!!!!!!!
!!!!!!!!!!      ICL A/S PÅTAGER SIG IKKE NOGET ANSVAR FOR       !!!!!!!!!!!
!!!!!!!!!!  EVENTUELLE  FEJL ELLER MANGLER I DETTE PROGRAMMEL.  !!!!!!!!!!!
!!!!!!!!!!                                                      !!!!!!!!!!!
!!!!!!!!!!     PROGRAMMELLET MÅ KUN MED ICL's SKRIFTLIGE        !!!!!!!!!!!
!!!!!!!!!!     GODKENDELSE ANVENDES I KOMMERCIELT ØJEMED.       !!!!!!!!!!!
!!!!!!!!!!                                                      !!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


###########################################################################


Disse PASCAL-procedurer udfører de grundlæggende grafiske operationer:

        Status          Undersøger om grafikprocessoren er klar til
                        en ny kommando.
        GrafBillede1:   Skifter til grafikbillede nr. 1.
        GrafBillede2:   Skifter til grafikbillede nr. 2.
        VideoBillede:   Skifter til videobilledet.
        GrafInit:       Initierer for grafik - se spec. i proceduren.
        SletBillede:    Sletter det viste grafikbillede.
        PenNed:         Sætter pen til tegning.
        PenOp:          Sætter pen til ikke tegne.
        EraseNed:       Sætter pen til sletning (viskelæder).
        EraseOp:        Sætter pen til ikke sletning (samme effekt som
                        PenOp ved flytning af pennen).
        KarSize(ch,cy): Sætter karakterstørrelse - se spec. i proc.
        LinieType(l):   Sætter linietype for tegning - se spec. i proc.
        KarType(k):     Sætter karaktertype ved tekst - se spec. i proc.
        MovePen(x,y):   Flytter pennen fra nuværende position til (x,y).
                        Der tegnes/slettes i overensstemmelse med gældende
                        pen/eraser op/ned.
        MoveTo(x,y):    Flytter pennen uden tegning til (x,y).
        DrawTo(x,y):    Tegner linie fra nuværende position til (x,y).
        EraseTo(x,y):   Sletter linie fra nuværende position til (x,y).
        PrikOn(x,y):    Tænder en pixel i (x,y).
        PrikOff(x,y):   Slukker en pixel i (x,y).
        Cirkel(x,y,r):  Tegner cirkel m. centrum (x,y) og radius r.
        Tekst(x,y,cx,cy,strg):  Skriver teksten strg startende i (x,y)
                                med karakterstørrelsen cx,cy.

Grafikskærmens dimensioner er 512 x 512 pixels, der adresseres i et
koordinatsæt med (0,0) i skærmens nederste venstre hjørne, dvs.
x og y ligger i intervallet 0 til 511.

BEMÆRK: Med rutinerne MovePen, MoveTo, DrawTo og EraseTo må der højest
        tegnes/flyttes eller slettes over afstande, der svarer til en til-
        vækst i X- og/el. Y-retningen på max. 510 pixels.

Denne fil - PASGRAF.PAS - kan anvendes som include-fil i et PASCAL-program.

I den aktuelle anvendelse kan visse procedurer evt. udelades, men brugeren
må være opmærksom på, at de enkelte procedurer kalder hinanden indbyrdes, 
hvorfor kriteriet for sletning IKKE alene er, at proceduren ikke forekommer
i brugerens programdel.

Et eksempel på anvendelse af disse procedurer findes i programmet TESTGRAF.




Lyngby, den 16. august 1985  /  Ulrich Lysdal Jensen.


##########################################################################*)

TYPE
   streng = string(.80.);   (* Anvendes i Tekst *)
   

procedure Status;          (*********************************************)

(* Checker om grafikprocessor klar til ny kommando *)

 begin
   while port(.160.) AND $F4 = 0 do;
 end;
 

procedure GrafBillede1;    (*********************************************)

(* Vælger grafikbillede nr. 1 *)

 begin
   port(.176.) := 255;
   port(.179.) := 0;
 end;
 

procedure GrafBillede2;    (*********************************************)

(* Vælger grafikbillede nr. 2 *)

 begin
   port(.176.) := 255;
   port(.179.) := 255;
 end;
 
procedure VideoBillede;     (***********************************************)


(* Vælger videobilledet *)

 begin
   port(.176.) := 0;
 end;


procedure GrafInit;         (***********************************************)

(* Initiering af grafikmodul:
   - Billede 1 og 2 blankstilles
   - X-reg = Y-reg. = DX-reg. = DY-reg. = 0
   - Pen DOWN
   - CHX = CHY = 1
   - Kontinuert linietype
   - Lodret skrift på vandret linie
   - RMW OFF
   Efter udførelse af GrafInit vises grafikbillede nr. 1*)
   
 begin
   GrafBillede2;
   port(.160.) := 7;
   GrafBillede1;
   port(.160.) := 7;
   port(.177.) := 0;
 end; 
 

procedure SletBillede;            (****************************************)

(* Sletter det viste grafikbillede *)

 begin
   port(.160.) := 7;
 end;


procedure PenNed;                 (***************************************)

(* Sætter Pen DOWN - skrive *)

 begin
   port(.160.) := 0;
   port(.160.) := 2;
 end;


procedure PenOp;                  (**************************************)

(* Sætter Pen UP - flytte uden skrive *)

 begin
   port(.160.) := 0;
   port(.160.) := 3;
 end;


procedure EraseNed;               (**************************************)

(* Sætter Eraser DOWN - sletter *)

 begin
   port(.160.) := 1;
   port(.160.) := 2;
 end;


procedure EraseOp;                (**************************************)

(* Sætter Eraser UP - flytte uden slette *)

 begin
   port(.160.) := 1;
   port(.160.) := 2;
 end;


procedure KarSize(x,y: integer);  (***************************************)

(* Sætter karakterstørrelsen CHX = x og CHY = y
   x/y = <1...16>  (1 = mindste karakterstørrelse).
   Hvis x og/el. y > 16 sættes værdien til 16.
   BEMÆRK: intervallet for x og y er forskellig fra det for grafikmodulet
           specificerede. *)

 begin
   if x>=16 then x:=0;
   if y>=16 then y:=0;
   port(.163.) := x*16+y;
 end;


procedure LinieType(l: integer);   (***************************************)

(* Sætter linietype til l: 0 => kontinuert linietype         ______
                           1 => punkteret linietype          ......
                           2 => stiplet linietype            ------
                           3 => stiplet/punkteret linietype  _._._.
   Hvis l > 3 sættet kontinuert linietype *)

 begin
   if l > 3 then l:=0;
   port(.162.) := (port(.162.) AND $FC) + l;
 end;


procedure KarType(k: integer);     (**************************************)

(* Sætter karaktrtype til k: 0 => lodret skrift på vandret linie
                             1 => skrå   skrift på vandret linie
                             2 => lodret skrift på lodret  linie
                             3 => skrå   skrift på lodret  linie
   Hvis k > 3 sættes lodret skrift på vandret linie *)

 begin
   if k > 3 then k:=0;
   port(.162.) := (port(.162.) AND $F3) + k*4;
 end;


procedure MovePen(x,y: integer);    (*************************************)

(* Bevæger pen/eraser fra nuværende koordinater (X-reg,Y-reg) til (x,y)
   Under flytningen tegnes/slettes i overensstemmelse med valget af
   pen/eraser op/ned.
   Der kan maksimalt flyttes en afstand svarende til en tilvækst i
   X- og/el. Y-retningen på 510 pixels. *)

Var
   i,kommando,mx,my,mdx,mdy: integer;
 
 begin
   mx := port(.168.)*256 + port(.169.);
   my := port(.170.)*256 + port(.171.);
   mdx := x - mx;
   mdy := y - my;
   port(.165.) := ABS(mdx) DIV 2;
   port(.167.) := ABS(mdy) DIV 2;
   if mdx>0 then
      if mdy>0 then
         kommando := 17
      else
         kommando := 21
   else
      if mdy>0 then
         kommando := 19
      else
         kommando := 23;
   port(.160.) := kommando;
   Status;
   port(.165.) := ABS(mdx) - port(.165.);
   port(.167.) := Abs(mdy) - port(.167.);
   port(.160.) := kommando;
 end; 


procedure MoveTo(x,y: integer);     (*************************************)

(* Flytter pen oppe (ikke skrive) til (x,y).
   Tilvæksten i X- og/el. Y-retningen må højest være 510 pixels. *)

 begin
   PenOp;
   MovePen(x,y);
 end;


procedure DrawTo(x,y: integer);     (************************************)

(* Tegner ret linie fra gældende koordinater (X-reg,Y-reg) til (x,y).
   Tilvæksten i X- og/el. Y-retningen må højest være 510 pixels. 
   Den rette linie tegnes med gældende linietype - se LinieType. *)

 begin
   PenNed; 
   MovePen(x,y);
 end;
 

procedure EraseTo(x,y: integer);    (*************************************)

(* Sletter en ret linie fra gældende koord. (X-reg,Y-reg) til (x,y).
   Tilvæksten i X- og/el. Y-retningen mø højest være 510 pixels. *)

 begin
   EraseNed;
   MovePen(x,y);
 end;


procedure PrikOn(x,y: integer);     (*************************************)

(* Sætter prikken i (x,y) lysende *)

 begin
   MoveTo(x,y);
   PenNed;
   port(.160.) := 128;
 end;
 

procedure PrikOff(x,y: integer);    (*************************************)

(* Slukker prikken i (x,y) *)

 begin
   MoveTo(x,y);
   EraseNed;
   port(.160.) := 128;
 end;


procedure Cirkel(x,y,r: integer);   (*************************************)

(* Tegner cirkel med centrum i (x,y) og radius r.
   Linietypen er altid kontinuert. *)

Var
  cx,cy,s: integer;
  
 begin
   cx := r;
   cy := 0;
   s := r - 2*cx;
   while cx >= cy do
     begin
       PrikOn(x+cx,y+cy);
       PrikOn(x+cy,y+cx);
       PrikOn(x-cy,y+cx);
       PrikOn(x-cx,y+cy);
       PrikOn(x-cx,y-cy);
       PrikOn(x-cy,y-cx);
       PrikOn(x+cy,y-cx);
       PrikOn(x+cx,y-cy);
       s := s + 2*cy + 1;
       cy := cy + 1;
       if s >= 0 then
         begin
           s := s - 2*cx + 2;
           cx := cx - 1;
         end;
     end;
   end;


procedure Tekst(x,y,cx,cy: integer; strg: streng);    (*******************)

(* Skriver en tekst indeholdt i strg, startende i (x,y).
   karakterstørrelse er bestemt af cx,cy.
   karaktertypen er den gældende - se KarType. *)

Var
  ti: integer;
  
 begin
   MoveTo(x,y);
   PenNed;
   KarSize(cx,cy);
   for ti:=1 to len(strg) do
     begin
       port(.160.) := ord(strg(.ti.));
       Status;
     end;
 end;
 
(***********************-- Slut PASGRAF --*********************************)
«eof»