1 /*- 2 * %sccs.include.proprietary.c% 3 */ 4 5 #ifndef lint 6 static char sccsid[] = "@(#)atoplot.c 4.3 (Berkeley) 04/18/91"; 7 #endif /* not lint */ 8 9 #include <stdio.h> 10 11 float deltx; 12 float delty; 13 14 char *mapLineType(); 15 16 main(argc,argv) char **argv; { 17 int std=1; 18 FILE *fin; 19 20 while(argc-- > 1) { 21 if(*argv[1] == '-') 22 switch(argv[1][1]) { 23 case 'l': 24 deltx = atoi(&argv[1][2]) - 1; 25 break; 26 case 'w': 27 delty = atoi(&argv[1][2]) - 1; 28 break; 29 } 30 31 else { 32 std = 0; 33 if ((fin = fopen(argv[1], "r")) == NULL) { 34 fprintf(stderr, "can't open %s\n", argv[1]); 35 exit(1); 36 } 37 fplt(fin); 38 fclose(fin); 39 } 40 argv++; 41 } 42 if (std) 43 fplt( stdin ); 44 exit(0); 45 } 46 47 48 fplt(fin) FILE *fin; { 49 int c; 50 char s[256]; 51 int xi,yi,x0,y0,x1,y1,r,dx,n,i; 52 int pat[256]; 53 54 openpl(); 55 while((c=getc(fin)) != EOF){ 56 switch(c){ 57 case 'm': 58 xi = getsi(fin); 59 yi = getsi(fin); 60 move(xi,yi); 61 break; 62 case 'l': 63 x0 = getsi(fin); 64 y0 = getsi(fin); 65 x1 = getsi(fin); 66 y1 = getsi(fin); 67 line(x0,y0,x1,y1); 68 break; 69 case 't': 70 getstr(s,fin); 71 label(s); 72 break; 73 case 'e': 74 erase(); 75 break; 76 case 'p': 77 xi = getsi(fin); 78 yi = getsi(fin); 79 point(xi,yi); 80 break; 81 case 'n': 82 xi = getsi(fin); 83 yi = getsi(fin); 84 cont(xi,yi); 85 break; 86 case 's': 87 x0 = getsi(fin); 88 y0 = getsi(fin); 89 x1 = getsi(fin); 90 y1 = getsi(fin); 91 space(x0,y0,x1,y1); 92 break; 93 case 'a': 94 xi = getsi(fin); 95 yi = getsi(fin); 96 x0 = getsi(fin); 97 y0 = getsi(fin); 98 x1 = getsi(fin); 99 y1 = getsi(fin); 100 arc(xi,yi,x0,y0,x1,y1); 101 break; 102 case 'c': 103 xi = getsi(fin); 104 yi = getsi(fin); 105 r = getsi(fin); 106 circle(xi,yi,r); 107 break; 108 case 'f': 109 getstr(s,fin); 110 linemod( mapLineType(s) ); 111 break; 112 case 'd': 113 xi = getsi(fin); 114 yi = getsi(fin); 115 dx = getsi(fin); 116 n = getsi(fin); 117 for(i=0; i<n; i++)pat[i] = getsi(fin); 118 dot(xi,yi,dx,n,pat); 119 break; 120 } 121 /* scan to newline */ 122 while( (c = getc( fin )) != '\n' ) { 123 if ( c == EOF ) { 124 break; 125 } 126 } 127 } 128 closepl(); 129 } 130 getsi(fin) FILE *fin; { /* get an integer stored in 2 ascii bytes. */ 131 int i; 132 133 if ( fscanf(fin, " %d", & i) != 1 ) { 134 return(EOF); 135 } 136 return( i ); 137 } 138 getstr(s,fin) char *s; FILE *fin; { 139 for( ; *s = getc(fin); s++) 140 if(*s == '\n') 141 break; 142 *s = '\0'; 143 } 144 145 char *lineMap[] = { 146 "solid", /* line type 0 */ 147 "solid", /* line type 1 */ 148 "dotted", /* line type 2 */ 149 "dotdashed", /* line type 3 */ 150 "shortdashed", /* line type 4 */ 151 "longdashed", /* line type 5 */ 152 "dotlongdash", /* line type 6 */ 153 "dotshortdash", /* line type 7 */ 154 "dotdotdash", /* line type 8 */ 155 } ; 156 157 char * 158 mapLineType( cp ) 159 char *cp; 160 { 161 int i; 162 163 if ( sscanf(cp, "%d", &i) == 1 ) { 164 if ( i < 0 || i > sizeof(lineMap)/sizeof(char *) ) { 165 i = 1; 166 } 167 return( lineMap[i] ); 168 } 169 else { 170 return( cp ); 171 } 172 } 173