(*************************************************************** 
    :Program.  	 UNIXPlot.mod
    :Author.   	 Joel Swank
    :Author.     Übersetzung C -> MODULA2, Gary Struhlik
    :Version.  	 1.0
    :Date.     	 10.09.1989 (Übersetzung)
    :Date.       April 1988 (Original C Quellcode)
    :Copyright.  Public Domain (Original C code auf Fred Fisk Disk Nr. 165)
    :Copyright.  Public Domain  (auch diese MODULA2-Übersetzung)
    :Language. 	 Modula-II
    :Translator. M2Amiga 3.2d
    :Imports.	 -
    :Contents.   Erzeugt UNIX plot files, die geräteunabhängig sind.
    :Contents.   Es werden Grundgrafikbefehle zur Verfügung gestellt.
    :Remark.	 Für den Amiga Modula-2 Klub / Stuttgart
    :History.    V 1.0, 10.9.89
                                               
***************************************************************)

IMPLEMENTATION MODULE UNIXPlot;

FROM FileSystem IMPORT Lookup, Close, WriteChar, File;
FROM SYSTEM IMPORT SHIFT,BITSET,CAST;

VAR
	f : File;

PROCEDURE openpl(name : ARRAY OF CHAR); 
BEGIN
      Lookup(f,name,5000,TRUE)
END openpl;

PROCEDURE closepl;
BEGIN
	Close(f)
END closepl;

PROCEDURE AndInt( a,b : INTEGER ) : INTEGER;  (* logisches UND mit INTEGER *)
VAR
	Wort1, Wort2 : BITSET;
BEGIN
	Wort1:=CAST( BITSET,a );
        Wort2:=CAST( BITSET,b );
	Wort1:=Wort1*Wort2;
        RETURN CAST( INTEGER, Wort1 )
END AndInt;

PROCEDURE putint(i : INTEGER);
VAR
	j : INTEGER;
BEGIN
	j:=AndInt(i,0FFH);
	WriteChar(f,CHAR(j));
	j:=AndInt(SHIFT(i,-8),0FFH);
	WriteChar(f,CHAR(j))
END putint;	

PROCEDURE putxy( x,y : INTEGER);
BEGIN
	putint(x);
	putint(y)
END putxy;

PROCEDURE erase;
BEGIN
	WriteChar(f,'e')
END erase;

PROCEDURE label( s : ARRAY OF CHAR);
VAR
	j : INTEGER;
BEGIN
	WriteChar(f,'t');
	FOR j:=0 TO HIGH(s) DO
	  WriteChar(f,s[j])
	END;
	WriteChar(f,CHR(10))
END label;

PROCEDURE line(x1,y1,x2,y2 : INTEGER);
BEGIN
	WriteChar(f,'l');
	putxy(x1,y1);
	putxy(x2,y2)
END line;

PROCEDURE circle(x,y,r : INTEGER);
BEGIN
	WriteChar(f,'c');
	putxy(x,y);
	putint(r)
END circle;

PROCEDURE arc(x,y,x0,y0,x1,y1 : INTEGER);
BEGIN
	WriteChar(f,'a');
	putxy(x,y);
	putxy(x0,y0);
	putxy(x1,y1)	
END arc;

PROCEDURE move( x,y : INTEGER);
BEGIN
	WriteChar(f,'m');
	putxy(x,y)
END move;
	
PROCEDURE cont( x,y : INTEGER);
BEGIN
	WriteChar(f,'n');
	putxy(x,y)
END cont;

PROCEDURE point(x,y : INTEGER);
BEGIN
	WriteChar(f,'p');
	putxy(x,y)
END point;

PROCEDURE linemod( s : ARRAY OF CHAR);
VAR
	j : INTEGER;
BEGIN
	WriteChar(f,'f');
	FOR j:=0 TO HIGH(s) DO
	  WriteChar(f,s[j])
	END;
	WriteChar(f,CHR(10))
END linemod;

PROCEDURE space(x1,y1,x2,y2 : INTEGER);
BEGIN
	WriteChar(f,'s');
	putxy(x1,y1);
	putxy(x2,y2)
END space;	

END UNIXPlot.
