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