A large commit.
[pdp8.git] / sw / src / pascal / PLOTES.PS
diff --git a/sw/src/pascal/PLOTES.PS b/sw/src/pascal/PLOTES.PS
new file mode 100644 (file)
index 0000000..37ea78b
--- /dev/null
@@ -0,0 +1,66 @@
+PROGRAM PLOTTERTEST(OUTPUT);
+
+CONST UP="H"; DOWN="I";
+      C=100.0; P=0.125; RHO=0.0174532925;
+      X0=950.0; Y0=1300.0;
+
+VAR   X,Y,R,PHI: REAL;
+      GRAD: INTEGER;
+
+      PENXPOS,PENYPOS: INTEGER;
+
+(********** P L O T T E R  PROZEDUREN **********)
+
+PROCEDURE PEN(I:CHAR);
+    BEGIN WRITE(I) END;
+
+PROCEDURE SEND(IX,IY: INTEGER);
+    BEGIN
+      IF IX>=0  THEN WRITE( IX:1,"@")
+                ELSE WRITE(-IX:1,"P");
+      IF IY>=0  THEN WRITE( IY:1,"A")
+                ELSE WRITE(-IY:1,"Q")
+    END;
+
+PROCEDURE MOVE(X,Y: REAL);
+    BEGIN
+      PENXPOS:=ROUND(X); PENYPOS:=ROUND(Y);
+      WRITE("H");
+      SEND(PENXPOS,PENYPOS);
+      WRITELN("K")
+    END;
+
+PROCEDURE LINE(X,Y: REAL);
+  VAR DX,DY: INTEGER;
+    BEGIN
+      DX:=ROUND(X)-PENXPOS;
+      DY:=ROUND(Y)-PENYPOS;
+      SEND(DX,DY); WRITELN("J");
+      PENXPOS:=PENXPOS+DX; PENYPOS:=PENYPOS+DY
+    END;
+
+PROCEDURE SYSIZE(R,G: INTEGER);
+    BEGIN
+      WRITE("C", CHR(G+16*(R+2)))
+    END;
+
+(***********************************************)
+
+BEGIN
+    MOVE(200,2600);
+    SYSIZE(0,6);
+    WRITELN("BPLOTTER-PROGRAMMIERUNG IN PASCAL-S");
+    MOVE(X0,Y0);
+    PEN(DOWN);
+    MOVE(X0+C,Y0);
+    PEN(DOWN);
+    FOR GRAD := 1 TO 180 DO
+        BEGIN
+           PHI := 5*GRAD*RHO;
+           R := C*EXP(P*PHI);
+           X := R*COS(PHI);
+           Y := R*SIN(PHI);
+           LINE(X0+X,Y0+Y)
+        END;
+    PEN(UP)
+END.