A large commit.
[pdp8.git] / sw / src / pascal / KREUZ.PS
diff --git a/sw/src/pascal/KREUZ.PS b/sw/src/pascal/KREUZ.PS
new file mode 100644 (file)
index 0000000..1911990
--- /dev/null
@@ -0,0 +1,54 @@
+PROGRAM PLOTKREUZKURVE(INPUT,OUTPUT);
+
+  CONST H0=640;
+
+  VAR   N,H,I,R: INTEGER;
+
+  PROCEDURE ANFANG;
+    BEGIN
+        WRITELN("H", H DIV 2 + 100 :1, "@", H + H DIV 2 + 100 :1, "AKI")
+    END (* ANFANG *);
+
+  PROCEDURE STRECKE(R: INTEGER);
+    BEGIN
+        CASE R MOD 4 OF
+          0: WRITELN(H:1,"A@J");
+          1: WRITELN(H:1,"@AJ");
+          2: WRITELN(H:1,"Q@J");
+          3: WRITELN(H:1,"PAJ")
+        END
+    END (* STRECKE *);
+
+  PROCEDURE SCHLUSS;
+    VAR I: INTEGER;
+    BEGIN
+        WRITELN("H3000@100AK");
+        FOR I := 1 TO 384 DO WRITE(" "); WRITELN
+    END (* SCHLUSS *);
+
+
+  PROCEDURE KREUZ(I,R: INTEGER);
+    BEGIN
+        IF I>0 THEN
+            BEGIN
+                KREUZ(I-1,R);
+                  STRECKE(R+1); STRECKE(R);
+                KREUZ(I-1,R+1);
+                  STRECKE(R);
+                KREUZ(I-1,R-1);
+                  STRECKE(R); STRECKE(R-1);
+                KREUZ(I-1,R)
+            END ELSE STRECKE(R)
+    END (* KREUZ *);
+
+
+BEGIN
+    WHILE NOT EOF DO
+    BEGIN READ(N);
+        H := H0; FOR I := 1 TO N DO H := H DIV 2;
+        ANFANG;
+        FOR R := 0 TO 3 DO
+            BEGIN KREUZ(N,R); STRECKE(R+1); STRECKE(R) END;
+        SCHLUSS
+    END
+END.