PACKET hrz plot DEFINES drawing area, {Autor: H. Indenbirken} begin plot, {Stand: 16.01.85 } end plot, clear, pen, move, draw: LET delete = 0, {Farbcodes} std = 1, red = 2, green = 3, blue = 4, black = 5, white = 6, nothing = 0; {Linientypen} LET POS = STRUCT (INT x, y); FILE VAR tr; TEXT VAR dummy; INT VAR act thick :: 0, i; POS VAR pos :: POS : (0, 0); PROC drawing area (REAL VAR x cm, y cm, INT VAR x pixel, y pixel) : x cm := 39.1; y cm := 27.6; x pixel := 3910; y pixel := 2760 END PROC drawing area; PROC begin plot : ENDPROC begin plot ; PROC end plot : ENDPROC end plot ; PROC clear : IF exists ("Plotter") THEN put line (tr, "NEXT 1;") ELSE init tr file FI; pos := POS : (0, 0); act thick := 0 . init tr file: tr := sequential file (output, "Plotter"); put line (tr, "#XBA,BEN=7800017 0029 UHRZS012 Graphik#."); put line (tr, "ECCO "); put line (tr, "#ANFANG,GRAFIK"); put line (tr, "#ZEICHNE,PL(1,9),MOD.=ZCH123,DINAF.=3.2,AUSS.=0'0'4200'2970,STIFTE=1'2'3'4'5'6,DATEI=/"); put line (tr, "CLEAR;BOX;") . END PROC clear; PROC pen (INT CONST background, foreground, thickness, linetype): set foreground; set thickness . set foreground: put line (tr, "PEN " + text (foreground) + ";") . set thickness: act thick := thickness * 2 . END PROC pen; PROC move (INT CONST x, y) : put (tr, text (x) + "!" + text (y) + ";"); pos := POS : (x, y) END PROC move; PROC draw (INT CONST x, y) : IF act thick <> 0 THEN IF horizontal line THEN thick y ELSE thick x FI; x MOVE y ELSE put (tr, text (x) + "&" + text (y) + ";") FI; pos := POS : (x, y) . horizontal line: abs (pos.x-x) > abs (pos.y-y) . thick y: INT VAR dy, old x :: pos.x-x ausgleich, new x :: x+x ausgleich; old x MOVE pos.y; new x DRAW y; FOR dy FROM 1 UPTO act thick REP old x MOVE pos.y+dy; new x DRAW y+dy; old x MOVE pos.y-dy; new x DRAW y-dy; PER . x ausgleich: IF pos.x <= x THEN act thick ELSE -act thick FI . thick x: INT VAR dx, old y :: pos.y-y ausgleich, new y :: y+y ausgleich; pos.x MOVE old y; x DRAW new y; FOR dx FROM 1 UPTO act thick REP pos.x+dx MOVE old y; x+dx DRAW new y; pos.x-dx MOVE old y; x-dx DRAW new y; PER . y ausgleich: IF pos.y <= y THEN act thick ELSE -act thick FI . END PROC draw; PROC draw (TEXT CONST record, REAL CONST angle, height, width): put (tr, height symbol + angle symbol + " SYMB """ + double record + """;") . height symbol: IF height = 0.0 THEN "" ELSE "H" + text (height) FI . angle symbol: IF angle = 0.0 THEN "" ELSE "A" + text (angle) FI . double record: dummy := record; change all (dummy, """", """"""); dummy . END PROC draw; PROC draw (TEXT CONST record) : draw (record, 0.0, 0.0, 0.0) END PROC draw; OP MOVE (INT CONST x, y): put (tr, text (x) + "!" + text (y) + ";") END OP MOVE; OP DRAW (INT CONST x, y): put (tr, text (x) + "&" + text (y) + ";") END OP DRAW; END PACKET hrz plot