History

Plan 9 from Bell Labs Second Edition 1995-04-05

David du Colombier committed 31 years ago2e-1995-04-05

Commit 219b2ee1 parent bd389b311749 files · +2555453 −1889727Browse files

Showing the changes to sys/src/cmd/plot/libplot (3 of 11749 files). Show all

Unified · Split

3 files
  1. sys/src/cmd/plot/libplot/machdep.c +110 −1
  2. sys/src/cmd/plot/libplot/mplot.h +10 −9
  3. sys/src/cmd/plot/libplot/ppause.c +1 −1
sys/src/cmd/plot/libplot/machdep.c+110−1
@@ -44,6 +44,110 @@ void m_vector(int x0, int y0, int x1, int y1, int c){ · 43 unmodified lines
4444 if(c>(1<<(1<<screen.ldepth))-1) c=(2<<screen.ldepth)-1;
4545 segment(offscreen, Pt(x0, y0), Pt(x1, y1), c, S);
4646 }
47+Rectangle scr;
48+int scrset=0;
49+char *scanint(char *s, int *n){
50+ while(*s<'0' || '9'<*s){
51+ if(*s=='\0'){
52+ fprint(2, "plot: bad -Wxmin,ymin,xmax,ymax\n");
53+ exits("bad arg");
54+ }
55+ s++;
56+ }
57+ *n=0;
58+ while('0'<=*s && *s<='9'){
59+ *n=*n*10+*s-'0';
60+ s++;
61+ }
62+ return s;
63+}
64+void setwindow(char *s){
65+ s=scanint(s, &scr.min.x);
66+ s=scanint(s, &scr.min.y);
67+ s=scanint(s, &scr.max.x);
68+ scanint(s, &scr.max.y);
69+ scrset=1;
70+}
71+Rectangle getscr(void){
72+ int fd;
73+ char buf[12*5];
74+ fd=open("/dev/screen", OREAD);
75+ if(fd==-1) fd=open("/mnt/term/dev/screen", OREAD);
76+ if(fd==-1) return Rect(0,0,1024,1024);
77+ if(read(fd, buf, sizeof buf)!=sizeof buf){
78+ fprint(2, "Can't read /dev/screen: %r\n");
79+ exits("screen read");
80+ }
81+ return Rect(atoi(buf+12), atoi(buf+24), atoi(buf+36), atoi(buf+48));
82+}
83+char *rdenv(char *name){
84+ char *v;
85+ int fd, size;
86+ fd=open(name, OREAD);
87+ if(fd<0) return 0;
88+ size=seek(fd, 0, 2);
89+ v=malloc(size+1);
90+ if(v==0){
91+ fprint(2, "Can't malloc: %r\n");
92+ exits("no mem");
93+ }
94+ seek(fd, 0, 0);
95+ read(fd, v, size);
96+ v[size]=0;
97+ close(fd);
98+ return v;
99+}
100+void winit(void (*errfun)(char *), char *font, char *label, Rectangle r){
101+ char *srv, *mntsrv;
102+ char spec[100];
103+ int srvfd, cons, pid;
104+ switch(rfork(RFFDG|RFPROC|RFNAMEG|RFENVG|RFNOTEG|RFNOWAIT)){
105+ case -1:
106+ fprint(2, "Can't fork: %r\n");
107+ exits("no fork");
108+ case 0:
109+ break;
110+ default:
111+ exits(0);
112+ }
113+ srv=rdenv("/env/8½srv");
114+ if(srv==0){
115+ free(srv);
116+ mntsrv=rdenv("/mnt/term/env/8½srv");
117+ srv=malloc(strlen(mntsrv)+10);
118+ sprint(srv, "/mnt/term%s", mntsrv);
119+ free(mntsrv);
120+ pid=0; /* 8½srv can't send notes to remote processes! */
121+ }
122+ else pid=getpid();
123+ srvfd=open(srv, ORDWR);
124+ free(srv);
125+ if(srvfd==-1){
126+ fprint(2, "Can't open %s: %r\n", srv);
127+ exits("no srv");
128+ }
129+ sprint(spec, "N%d,%d,%d,%d,%d\n", pid, r.min.x, r.min.y, r.max.x, r.max.y);
130+ if(mount(srvfd, "/mnt/8½", 0, spec)==-1){
131+ fprint(2, "Can't mount: %r\n");
132+ exits("no mount");
133+ }
134+ close(srvfd);
135+ bind("/mnt/8½", "/dev", MBEFORE);
136+ cons=open("/dev/cons", OREAD);
137+ if(cons==-1){
138+ NoCons:
139+ fprint(2, "Can't open /dev/cons: %r");
140+ exits("no cons");
141+ }
142+ dup(cons, 0);
143+ close(cons);
144+ cons=open("/dev/cons", OWRITE);
145+ if(cons==-1) goto NoCons;
146+ dup(cons, 1);
147+ dup(cons, 2);
148+ close(cons);
149+ binit(errfun, font, label);
150+}
47151 /*
48152 * Startup initialization
49153 */
@@ -52,7 +156,12 @@ void m_initialize(char *s){ · 2 unmodified lines
52156 int dx, dy;
53157 USED(s);
54158 if(first){
55− binit(0,0,0);
159+ if(!scrset){
160+ scr=getscr();
161+ scr.min=div(sub(add(scr.min, scr.max), Pt(520, 520)), 2);
162+ scr.max=add(scr.min, Pt(520, 520));
163+ }
164+ winit(0,0,0,scr);
56165 clipminx=mapminx=screen.r.min.x+4;
57166 clipminy=mapminy=screen.r.min.y+4;
58167 clipmaxx=mapmaxx=screen.r.max.x-5;
sys/src/cmd/plot/libplot/mplot.h+10−9
@@ -25,16 +25,17 @@ struct seg { · 24 unmodified lines
2525 char stat;
2626 };
2727 /*
28− * Color values
28+ * Color values -- these only work with ldepth=3 & standard plan 9 color map
2929 */
30−#define ZERO 3
31−#define RED 2
32−#define GREEN 2
33−#define YELLOW 1
34−#define BLUE 2
35−#define MAGENTA 1
36−#define CYAN 1
37−#define WHITE 0
30+#define RGB(r,g,b) (255&~(((r)<<5)|((g)<<2)|((b)>>1)))
31+#define ZERO RGB(0,0,0) /* really should be ~0, but bcolor uses neg for error */
32+#define RED RGB(7,0,0)
33+#define GREEN RGB(0,7,0)
34+#define YELLOW RGB(7,7,0)
35+#define BLUE RGB(0,0,7)
36+#define MAGENTA RGB(7,0,7)
37+#define CYAN RGB(0,7,7)
38+#define WHITE RGB(7,7,7)
3839 /*
3940 * display parameters
4041 */
sys/src/cmd/plot/libplot/ppause.c+1−1
@@ -2,6 +2,6 @@ · 1 unmodified line
22 void ppause(void){
33 char aa[4];
44 fflush(stdout);
5− read(2, aa, 4);
5+ read(0, aa, 4);
66 erase();
77 }