app/mpg/1987/src/GRAPHIK.Turtle

Raw file
Back to index

(**************************************************************************) 
(*                                                                        *) 
(*                        MPG - Graphik - System                          *) 
(*                                                                        *) 
(*                      Version 2.1 vom 10.09.1987                        *) 
(*                                                                        *) 
(*            (c) 1987 Beat Jegerlehner & Carsten Weinholz                *) 
(*                unter Verwendung der Standard-Graphik                   *) 
(*            "Turtle-Graphik" geschrieben von B.Jegerlehner              *) 
(*                                                                        *) 
(**************************************************************************) 
(*                                                                        *) 
(*               Dieses Paket stellt eine LOGO-aehnliche                  *)
(*                'Schildkroetengraphik' zur Verfuegung                   *)
(*                                                                        *) 
(**************************************************************************) 
PACKET turtle graphics DEFINES begin turtle, 
                               end   turtle, 
                               forward     ,
                               forward to  , 
                               turn        , 
                               turn to     , 
                               pen up      , 
                               pen down    ,
                               pen         ,
                               angle       ,
                               get turtle  :
 
REAL VAR x pos, 
         y pos, 
         winkel; 
 
PICFILE VAR bild; 
PICTURE VAR pic; 
 
BOOL VAR direct, 
         pen status;
 
PROC begin turtle: 
  direct := TRUE; 
  x pos  := 0.0; 
  y pos  := 0.0; 
  winkel  := 0.0; 
  begin plot;
  clear;
  viewport (0.0, 1.0, 0.0, 1.0);
  window (-500.0, 500.0, -500.0, 500.0); 
  pen up; 
  forward to (0.0, 0.0) 
END PROC begin turtle; 
 
PROC begin turtle (TEXT CONST picfile): 
  direct := FALSE; 
  bild := picture file (picfile); 
  pic  := nilpicture; 
  x pos := 0.0; 
  y pos := 0.0; 
  winkel := 0.0; 
  pen up; 
  forward to (0.0,0.0) 
END PROC begin turtle; 
 
PROC end turtle: 
  IF direct 
    THEN end plot 
    ELSE ausgabe 
  FI. 
 
  ausgabe: 
    REAL VAR x cm,y cm; 
    INT VAR dummy; 
    put picture (bild,pic); 
    drawing area (x cm,y cm,dummy,dummy); 
    viewport (bild, 0.0, 1.0, 0.0, 1.0); 
    window (bild, -500.0,500.0,-500.0,500.0); 
    plot(bild) 
END PROC end turtle; 
 
PROC turn (REAL CONST w): 
  winkel := (winkel + w) MOD 360.0 
END PROC turn; 
 
PROC turn to (REAL CONST w): 
  winkel := w MOD 360.0
END PROC turn to; 
 
REAL PROC angle: 
  winkel 
END PROC angle; 

PROC forward (REAL CONST len): 
  forward to (x pos + cosd (winkel) * len, 
      y pos + sind (winkel) * len) 
END PROC forward; 
 
PROC pen up: 
  pen status := FALSE 
END PROC pen up; 
 
PROC pen down: 
  pen status := TRUE 
END PROC pen down; 
 
BOOL PROC pen:
  pen status 
END PROC pen; 

PROC forward to (REAL CONST x,y): 
  IF direct 
    THEN dir plot 
    ELSE pic plot 
  FI; 
  x pos := x; 
  y pos := y. 
 
  dir plot: 
    IF pen status
      THEN draw (x,y) 
      ELSE move (x,y) 
    FI. 
 
  pic plot: 
    IF length (pic) > 1923 
      THEN put picture (bild,pic); 
           pic := nilpicture 
    FI; 
    IF pen status
      THEN draw (pic,x,y) 
      ELSE move (pic,x,y) 
    FI 
END PROC forward to;

PROC get turtle (REAL VAR x,y): 
  x := x pos;
  y := y pos
END PROC get turtle
 
END PACKET turtle graphics