|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ T m ┃
Length: 3640 (0xe38) Types: TextFile Names: »manregis.c«
└─⟦87ddcff64⟧ Bits:30001253 CPHDIST85 Tape, 1985 Autumn Conference Copenhagen └─ ⟦this⟧ »cph85dist/mandelbrot/manregis.c«
/* * Display Mandelbrot set pixels. * * This version uses the Regis display protocol (for Dec VT125, * VT240, and PRO-350). It should be "fairly" easy to adapt * it for other displays. */ #include <stdio.h> #include <ctype.h> #ifdef vms #include errno #define IO_ERROR errno #endif #define FALSE 0 #define TRUE 1 #define EOS '\0' /* * The Regis screen is fixed at 767 horizontal by 479 vertical pixels. * Although there is are relative coordinate system commands, we don't bother. * XORIGIN and YORIGIN define the lower-left corner of the Mandelbrot display. */ #define MAX_NPIXEL 400 #define SMAXX 768 #define SMAXY 480 #define XORIGIN 300 #define YORIGIN 425 #define GRAY_SCALE 13 /* Density ranges from 0 to 12 */ #define TICK 8 /* Length of boarder tick-marks */ #define CXSIZE 8 /* Character width */ #define CYSIZE 10 /* Character height */ /* * Globalize these values for the main display code. */ int max_npixel = MAX_NPIXEL; int smaxx = SMAXX; int smaxy = SMAXY; int xorigin = XORIGIN; int yorigin = YORIGIN; int gray_scale = GRAY_SCALE; /* Make known to mandisp.c */ int tick = TICK; int cxsize = CXSIZE; int cysize = CYSIZE; /* * Display routines for the bit-map display. * dsp_init() Initialize for bit-map writing, clear screen. * dsp_done() Done writing to the bit-map (don't clear) * dsp_finis() All done (about to exit to o.s., clear screen) * dsp_move(r,c) Move bitmap cursor to to this row-column * dsp_endline() Finish off a scanline * dsp_draw(d,len) Draw a horizontal line of the selected density * dsp_text(r,c,t) Write text string from this position * dsp_line(x,yf,xt,yt) Draw line from [xf,yf] to [xt,yt] */ dsp_init() /* * Start writing to the bitmap display. */ { printf("\33P1pS[0,0]S(E)S(C0)"); /* Regis initialize */ printf("S(M0(L0)1(L25)2(L50)3(L75))"); /* Regis Luminance */ } dsp_done() /* * Stop writing to the bitmap (don't clear it). */ { printf("\033\\"); fflush(stdout); } dsp_finis() /* * Exiting, clear display. */ { printf("\033P1pS(E)\033\\"); fflush(stdout); } dsp_move(row, col) int row, col; /* * Move bitmap cursor to this position. */ { printf("P[%d,%d]", row, col); } dsp_endline() /* * Executed at the end of a scan line. */ { printf("W(I3)W(P1)"); /* Reset density to known state */ fflush(stdout); } char *dens_command[GRAY_SCALE] = { /* Regis display controls */ "W(I0)", /* 0 == black */ "W(I1)W(P6)", /* 1 == dim, sparse dots */ "W(I1)W(P4)", /* 2 == dim, half-dense dots */ "W(I1)W(P5)", /* 3 == dim, dense dots */ "W(I1)W(P1)", /* 4 == dim, full line */ "W(I2)W(P6)", /* 5 == mid, sparse dots */ "W(I2)W(P4)", /* 6 == mid, half-dense dots */ "W(I2)W(P5)", /* 7 == mid, dense dots */ "W(I2)W(P1)", /* 8 == mid, full line */ "W(I3)W(P6)", /* 9 == full, sparse dots */ "W(I3)W(P4)", /* 10 == full, half-dense dots */ "W(I3)W(P5)", /* 11 == full, dense dots */ "W(I3)W(P1)", /* 12 == full, full line */ }; dsp_draw(density, length) int density; int length; /* * Draw a line of this density. * On entrance, cursor is at the left edge of the line. * Leave the cursor at the end of the line. */ { if (density < 0) density = 0; else if (density >= GRAY_SCALE) density = GRAY_SCALE - 1; printf("%sV[+%d]", dens_command[density], length); } dsp_text(row, col, text) int row, col; char *text; /* Must not contain a single quote "'" */ { dsp_move(row, col); printf("T'%s'", text); } dsp_line(xfrom, yfrom, xto, yto) int xfrom, yfrom; int xto, yto; /* * Draw a line */ { dsp_move(xfrom, yfrom); printf("V[%d,%d]", xto, yto); }