/* * header for 4107 plot routines */ /* complements to mike edmonds for initially doing this stuff */ #include /* * * This code supports a Tektronix 4107 graphics display terminal. * Consequently, it will handle most other 41-series * terminals with only minor mods. * * This version modified by Joel Swank */ #define MAX_XPIXEL 640 /* Pixels in the display */ #define MAX_YPIXEL 480 #define MAX_XADDR 3500 /* Addresses on the display, really 4096 */ #define MAX_YADDR 3133 #define CXSIZE 8 /* Character width */ #define CYSIZE 14 /* Character height */ #define CHARW 39 /* Character width */ #define CHARH 59 /* Character height */ #define BITS 4 /* Number bits needed to encode color */ /* * Globalize (most of) these values for the main display code. */ extern int xcur, ycur, color; extern int xlow, ylow; extern float xmag, ymag; #define ON 1 /* Mode switches */ #define OFF 0 #define ANSI 1 #define TEK 0 /* * Convert from pixel number to logical address and back. */ #define adrconv(adr,in,out) ( (((adr) * (out)) + ((out) / 2)) / (in) ) #define xpixtoaddr(pix) adrconv((pix), MAX_XPIXEL, MAX_XADDR) #define ypixtoaddr(pix) adrconv((pix), MAX_YPIXEL, MAX_YADDR) #define xaddrtopix(adr) adrconv((adr), MAX_XADDR, MAX_XPIXEL) #define yaddrtopix(adr) adrconv((adr), MAX_YADDR, MAX_YPIXEL) /* * Switch terminal into various modes. */ #define code(sw) { fputs("\033%!", stdout); encode(sw); } #define vector_mode() putchar('\035') #define alpha_mode() putchar('\037') /* * Dialog area */ #define daindex(ch,bk,dabk) { fputs("\033LI", stdout); encode(ch);\ encode(bk); encode(dabk); } #define davisibility(sw) { fputs("\033LV", stdout); encode(sw); } #define page() fputs("\033\014", stdout) #define acursor(ind1,ind2) { fputs("\033TD", stdout);\ encode(ind1); encode(ind2); } #define enable_dia() { fputs("\033KA1",stdout); } #define disable_dia() { fputs("\033KA0",stdout); } #define dia_lines(num) { fputs("\033LL",stdout); encode(num); } #define dia_buf(num) { fputs("\033LB",stdout); encode(num); } /* * Reports : be sure to cancel bypass mode after reading reports */ #define report_code() { fputs("\033#!0",stdout); } #define report_dabuf() { fputs("\033IQLB",stdout); } #define report_dalin() { fputs("\033IQLL",stdout); } #define report_aci() { fputs("\033IQTD",stdout); } #define bypass_can() { fputs("\012",stdout); } /* * Cancel whatever's going on. */ #define cancel() fputs("\033KC", stdout) /* * Set color maps. */ #define cmode(spec, over, gray) { fputs("\033TM", stdout); \ encode(spec); encode(over); encode(gray); } #define cmap(idx, hue, light, satur) \ { fputs("\033TG", stdout); \ encode(1); encode(4); encode(idx); \ encode(hue); encode(light); encode(satur); } /* * Change line style and color. */ #define linestyle(style) { fputs("\033MV", stdout); \ encode(style); } #define lineindex(index) { fputs("\033ML", stdout); \ encode(index); } /* * Build panels. */ #define fillpattern(ptrn) { fputs("\033MP", stdout); \ encode(ptrn); } #define beginpanel(x,y,border) { fputs("\033LP", stdout); \ encode_xy(x, y); encode(border); } #define endpanel() { fputs("\033LE", stdout); } /* * Define char sets. */ #define rul() {fputs("\033)0", stdout);fputs("\036", stdout);} #define supp() {fputs("\033)3", stdout);fputs("\036", stdout);} #define ascii() {fputs("\037", stdout);} /* * Display graphtext. */ #define gtback(tind,dind) { fputs("\033MB", stdout);\ encode(tind); encode(dind); } #define gtindex(index) { fputs("\033MT", stdout); encode(index); } #define gtprecision(prec) { fputs("\033MQ", stdout); encode(prec); } #define gtsize(wd, hi, sp) { fputs("\033MC", stdout); \ encode(wd); encode(hi); encode(sp); } #define gtrotation(angle) { fputs("\033MR", stdout); encode(angle); } #define gamode(mode) { fputs("\033MG", stdout); encode(mode); } #define gtext(str) { fputs("\033LT", stdout); \ encode(strlen(str)); fputs(str, stdout); } /* * Move and draw commands. */ #define mov(x,y) { fputs("\033LF", stdout); encode_xy(x, y); } #define drw(x,y) { fputs("\033LG", stdout); encode_xy(x, y); } /* mov to point on circumfrence and then give circle point on opposite side of circle and origonal point */ #define circle(x,y,x1,y1) { fputs("\033UC", stdout);fputs("12+", stdout);\ encode_xy(x,y); encode_xy(x1,y1); } /* * Segment definitions */ #define beginseg(segno) { fputs("\033SO", stdout); encode(segno); } #define newseg(segno) { fputs("\033SE", stdout); encode(segno); } #define nextseg() { fputs("\033SN", stdout); } #define prevseg() { fputs("\033SB", stdout); } #define endseg() { fputs("\033SC", stdout); } #define delallseg() { fputs("\033SK", stdout); encode(-1); } #define delseg(segno) { fputs("\033SK", stdout); encode(segno); } #define segpos(segno,x,y) { fputs("\033SX", stdout); encode(segno); \ encode_xy(x, y); } #define segrot(segno,angle) { fputs("\033SJ", stdout); encode(segno);\ encode(1); encode(0);\ encode(1);encode(0); \ encode(angle); encode(0); } #define segxform(segno,angle,x,y) { fputs("\033SJ", stdout); encode(segno);\ encode(1); encode(0);\ encode(1);encode(0); \ encode(angle); encode(0);\ encode_xy(x, y); } #define segpivot(x,y) { fputs("\033SP", stdout); encode_xy(x, y); } #define segvis(segno,vis) { fputs("\033SV", stdout); encode(segno); \ encode(vis); } #define seghilite(segno,vis) { fputs("\033SH", stdout); encode(segno); \ encode(vis); } /* * gin definitions */ #define gin(dev,num) { fputs("\033IE", stdout); encode(dev);\ encode(num); } #define ginend(dev) { fputs("\033ID", stdout); encode(dev); } #define ginrpt(dev) { fputs("\033IP", stdout); encode(dev); } /* * macro definitions */ #define defmac(num,str) { fputs("\033KD", stdout); encode(num);\ encode_str(str); } #define clrmac(num) { fputs("\033KD", stdout); encode(num); } /* * viewport and window commands. */ #define vatt(snum,wind,bind) { fputs("\033RA", stdout);\ encode(snum); encode(wind); encode(bind); } #define viewport(xl,yl,xr,yr) { fputs("\033RV", stdout);\ encode_xy(xl,yl); encode_xy(xr,yr); } #define selview(vnum) { fputs("\033RC", stdout); encode(vnum); } #define window(xl,yl,xr,yr) { fputs("\033RW", stdout);\ encode_xy(xl,yl); encode_xy(xr,yr); } /* misc commands */ #define bel() putchar('\07'); #define set_aci(fi,si) { fputs("\033TD", stdout);\ encode(fi); encode(si); }