Linuxpops  3.01.04
Spectral Anaysis Package for Single Dish Data
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
region.c
Go to the documentation of this file.
1 /*
2 Copyright 2021 Arizona Board of Regents on behalf of the University of Arizona.
3 
4 For commercial uses, to obtain a license to sell and or sublicense copies of
5 the Software please contact the University of Arizona at Tech Launch Arizona:
6 lewish@tla.arizona.edu.
7 
8 Permission is hereby granted, free of charge, to any person obtaining a copy
9 of this software and associated documentation files (the "Software"), to deal
10 in the Software without restriction for non-commercial use educational and
11 research purposes, including without limitation the rights to use, copy,
12 modify, merge, publish, distribute, and to permit persons to whom the Software
13 is furnished to do so, subject to the following conditions:
14 
15 The entire above copyright notice and this permission notice shall be included
16 in all copies or substantial portions of the Software.
17 
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 SOFTWARE.
25 
26 1. Additional Required Provisions
27 
28 1.1. Arbitration. The parties agree that if a dispute arises between them
29 concerning this Agreement, the parties may be required to submit the matter to
30 arbitration pursuant to Arizona law.
31 
32 1.2. Applicable Law and Venue. This Agreement shall be interpreted pursuant
33 to the laws of the State of Arizona. Any arbitration or litigation between the
34 Parties shall be conducted in Pima County, ARIZONA, and LICENSEE hereby
35 submits to venue and jurisdiction in Pima County, ARIZONA.
36 
37 1.3. Non-Discrimination. The Parties agree to be bound by state and federal
38 laws and regulations governing equal opportunity and non-discrimination and
39 immigration.
40 
41 1.4. Appropriation of Funds. The Parties recognize that performance by
42 ARIZONA may depend upon appropriation of funds by the State Legislature of
43 ARIZONA. If the Legislature fails to appropriate the necessary funds, or if
44 ARIZONA’S appropriation is reduced during the fiscal year, ARIZONA may cancel
45 this Agreement without further duty or obligation. ARIZONA will notify
46 LICENSEE as soon as reasonably possible after it knows of the loss of funds.
47 
48 1.5. Conflict of Interest. This Agreement is subject to the provisions of
49 A.R.S. 38-511 and other conflict of interest regulations. Within three years
50 of the EFFECTIVE DATE, ARIZONA may cancel this Agreement if any person
51 significantly involved in initiating, negotiating, drafting, securing, or
52 creating this Agreement for or on behalf of ARIZONA becomes an employee or
53 consultant in any capacity of LICENSEE with respect to the subject matter of
54 this Agreement.
55 
56  */
57 
58 #include "region.h"
59 
60 #ifdef DATASERV
61 #include "ds_extern.h"
62 #include "ds_proto.h"
63 
64 static int font0 = FONT_SIZE_SMALL;
65 #else
66 #include "extern.h"
67 #endif
68 
70 
72 
73 char region_tok[40][40];
74 
75 char *region_delim = "\n\t,() ";
76 
78 
79 int region_get_tok(edit)
80 char *edit;
81 {
82  int c = 0;
83  char *token;
84 
85  bzero((char *)&region_tok, sizeof(region_tok));
86 
87  token = strtok(edit, region_delim);
88  while(token != (char *)NULL)
89  {
90  sprintf(region_tok[c++], "%s", token);
91  token = strtok((char *)NULL, region_delim);
92  }
93 
94  return(c);
95 }
96 
97 
98 
100 int color;
101 double ra, dec, rsize, dsize;
102 char *title;
103 {
104  static int indx = 0;
105  struct REGION_BOX *b;
106 
107  /* Create a fresh list */
108  if(region_box_head == NULL)
109  {
110  if((region_box_head=(struct REGION_BOX *)malloc((unsigned)(sizeof(struct REGION_BOX))))==NULL)
111  {
112  log_msg("Error in addRegionBox malloc(%d)", sizeof(struct REGION_BOX));
113 
114  return(1);
115  }
116 
117  region_box_head->indx = indx = 0;
118  region_box_head->color = color;
119  region_box_head->ra = ra;
120  region_box_head->dec = dec;
121  region_box_head->rsize = rsize;
122  region_box_head->dsize = dsize;
123 
124  strcpy(region_box_head->title, title);
125 
126  region_box_head->next = NULL;
127 
128 #ifdef DATASERV
129  log_msg("addRegionBox(indx=%d, color=%d, ra=%f, dec=%f, rsize=%f, dsize=%f, title=%s", indx, color, ra, dec, rsize, dsize, title);
130 #else
131  st_report("addRegionBox(indx=%d, color=%d, ra=%f, dec=%f, rsize=%f, dsize=%f, title=%s", indx, color, ra, dec, rsize, dsize, title);
132 #endif
133 
134  indx++;
135 
137 
138  return(0);
139  }
140 
141  /* Find next available slot */
142  for(b=region_box_head;b->next; b=b->next)
143  {
144  ;
145  }
146 
147  /* Append new scan */
148  if((b->next=(struct REGION_BOX *)malloc((unsigned)(sizeof(struct REGION_BOX))))==NULL)
149  {
150  log_msg("Error in addRegionBox malloc(%d)", sizeof(struct REGION_BOX));
151 
152  return(1);
153  }
154 
155  b->next->indx = indx;
156  b->next->color = color;
157  b->next->ra = ra;
158  b->next->dec = dec;
159  b->next->rsize = rsize;
160  b->next->dsize = dsize;
161 
162  strcpy(b->next->title, title);
163 
164  b->next->next = NULL;
165 
166 #ifdef DATASERV
167  log_msg("addRegionBox(indx=%d, color=%d, ra=%f, dec=%f, rsize=%f, dsize=%f, title=%s", indx, color, ra, dec, rsize, dsize, title);
168 #else
169  st_report("addRegionBox(indx=%d, color=%d, ra=%f, dec=%f, rsize=%f, dsize=%f, title=%s", indx, color, ra, dec, rsize, dsize, title);
170 #endif
171 
172  indx++;
173 
175 
176  return(0);
177 }
178 
179 
181 {
182  struct REGION_BOX *p;
183  struct REGION_BOX *q;
184 
185 #ifdef DATASERV
186  log_msg("remRegions(); Removing Old Regions");
187 #else
188  st_report("remRegions(); Removing Old Regions");
189 #endif
190 
191  for(p=region_box_head; p; p=q)
192  {
193  q = p->next;
194 
195  if(p)
196  {
197  free((char *)p);
198  }
199  }
200 
201  region_box_head = NULL;
202  regions_defined = 0;
203 
204  return(0);
205 }
206 
207 
209 {
210  struct REGION_BOX *p;
211 
212 #ifdef DATASERV
213  log_msg("listRegions();");
214 #else
215  st_report("listRegions();");
216 #endif
217 
218  for(p=region_box_head;p;p=p->next)
219  {
220  if(p)
221  {
222  if(p->ra != 0.0 && p->dec != 0.0)
223  {
224 #ifdef DATASERV
225  log_msg("BOX( %f, %f, %f, %f, %d ) %s", p->ra, p->dec, p->rsize, p->dsize, p->color, p->title);
226 #else
227  st_report("BOX( %f, %f, %f, %f, %d ) %s", p->ra, p->dec, p->rsize, p->dsize, p->color, p->title);
228 #endif
229  }
230  }
231  }
232 
233  return(0);
234 }
235 
236 
237 
239 {
240  double ra, dec;
241  struct REGION_BOX *p;
242 
243 #ifdef DATASERV
244  log_msg("listRegions();");
245 #else
246  st_report("listRegions();");
247 #endif
248 
249  max_ra = -1.0;
250  min_ra = 500.0;
251  max_dec = -100;
252  min_dec = 100.0;
253 
254  for(p=region_box_head;p;p=p->next)
255  {
256  if(p)
257  {
258  if(p->ra != 0.0 && p->dec != 0.0)
259  {
260  ra = p->ra + p->rsize / 2.0;
261  if(ra > max_ra)
262  {
263  max_ra = ra;
264  }
265 
266  ra = p->ra - p->rsize / 2.0;
267  if(ra < min_ra)
268  {
269  min_ra = ra;
270  }
271 
272  dec = p->dec + p->dsize / 2.0;
273  if(dec > max_dec)
274  {
275  max_dec = dec;
276  }
277 
278  dec = p->dec - p->dsize / 2.0;
279  if(dec < min_dec)
280  {
281  min_dec = dec;
282  }
283  }
284  }
285  }
286 
287 #ifdef DATASERV
288  log_msg("Map externs: Ra+ = %f, Ra- = %f, Dec+ = %f, Dec- = %f", max_ra, min_ra, max_dec, min_dec);
289  log_msg("Map Size: Ra = %f, Dec %f", (max_ra - min_ra), (max_dec - min_dec));
290 #else
291  st_report("Map externs: Ra+ = %f, Ra- = %f, Dec+ = %f, Dec- = %f", max_ra, min_ra, max_dec, min_dec);
292  st_report("Map Size: Ra = %f, Dec %f", (max_ra - min_ra), (max_dec - min_dec));
293 #endif
294 
295  return(0);
296 }
297 
298 
300 char *buf;
301 {
302  listRegions();
303 
304  return(0);
305 }
306 
307 
308 
310 char *buf;
311 {
312 #ifdef DATASERV
313  char tbuf[256];
314 #endif
315 
316  remRegions();
317 
318 #ifdef DATASERV
319  otf.regionshow = 0;
320 
321  strcpy(tbuf, "0");
322 
323  do_showRegion(tbuf);
324 #endif
325 
326  return(0);
327 }
328 
329 
330 /*
331 
332 # Region file format: DS9 version 4.1
333 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1
334 fk5
335 box(20:24:44.4114,38:58:12,10',10',0) # color=green width=2
336 box(20:24:43.4389,39:08:12,10',10',0) # color=green width=2
337 box(20:24:42.4582,39:18:12,10',10',0) # color=green width=2
338 
339 box(20:24:44.4114,38:58:12,10',10',0) # color=green width=2 text={CO21_001}
340 #box(20:24:43.4389,39:08:12,10',10',0) # color=green width=2 text={CO21_001}
341 #box(20:24:42.4582,39:18:12,10',10',0) # color=green width=2 text={CO21_001}
342 #box(20:24:41.4694,39:28:12,10',10',0) # color=green width=2 text={CO21_001}
343 #box(20:24:40.4723,39:38:12,10',10',0) # color=green width=2 text={CO21_001}
344 #box(20:24:39.4669,39:48:12,10',10',0) # color=green width=2 text={CO21_001}
345 #box(20:24:38.4531,39:58:12,10',10',0) # color=green width=2 text={CO21_001}
346 
347 
348 
349  0 1 2 3 4 5 6 7 8
350 box 20:24:41.4694 39:28:12 10' 10' 0 # color=green width=2
351  */
352 
353 
355 char *buf;
356 {
357  int n, color;
358  double ra, dec, rsize, dsize, scale = 1.0;
359  char inBuf[256], fname[256], title[256], *cp, tmpBuf[256];
360  FILE *fp;
361 
362 #ifdef DATASERV
363  int reply = 0;
364  char tbuf[256];
365 #endif
366 
367  remRegions();
368 
369 
370  cp = strtok(buf, "\n\r\t ");
371  if(!cp)
372  {
373  log_msg("do_loadRegion(): No filename passed");
374 
375  return(1);
376  }
377 
378  strcpy(fname, cp);
379 
380  cp = strtok(NULL, "\n\r\t ");
381  if(!cp)
382  {
383  log_msg("do_loadRegion(): No scale passed");
384 
385  return(1);
386  }
387 
388  scale = atof(cp);
389 
390 #ifdef DATASERV
391  cp = strtok(NULL, "\n\r\t ");
392  if(cp)
393  {
394  reply = atoi(cp);
395  }
396 
397  log_msg("Reply = %d", reply);
398 #endif
399 
400  if( (fp = fopen(fname, "r") ) <= (FILE *)0)
401  {
402  log_perror("open");
403 
404  log_msg("do_loadRegion(): Unable to open region file '%s'", fname);
405 
406  return(1);
407  }
408 
409 #ifdef DATASERV
410  log_msg("do_loadRegion(): Reading in region file: '%s'", fname);
411 #else
412  st_report("do_loadRegion(): Reading in region file: '%s'", fname);
413 #endif
414 
415  while(fgets(inBuf, 256, fp) != NULL)
416  {
417  if(!strncmp(inBuf, "#", 1))
418  {
419  continue;
420  }
421 
422  bzero((char *)&title, sizeof(title));
423  color = 0;
424  ra = 0.0;
425  dec = 0.0;
426  rsize = 0.0;
427  dsize = 0.0;
428 
429  strcpy(tmpBuf, inBuf);
430 
431  /* 0123456 */
432  /* text={CO21_001} */
433  if((cp = strstr(tmpBuf, "text")))
434  {
435  strcpy(title, cp+6);
436  strcmprs(title); /* Strimp and excess spaces */
437 
438  title[strlen(title)-1] = '\0';
439  }
440 
441  n = region_get_tok(inBuf);
442 
443  if(n > 0)
444  {
445  if(!strcmp(region_tok[0], "global"))
446  {
447  }
448  else
449  if(!strcmp(region_tok[0], "fk5"))
450  {
451  }
452  else
453  if(!strcmp(region_tok[0], "box"))
454  {
455  ra = ctod(region_tok[1]) * 15.0;
456  dec = ctod(region_tok[2]);
457 
458  rsize = atof(region_tok[3]);
459  if(strstr(region_tok[3], "'"))
460  {
461  rsize /= 60.0;
462  }
463  else
464  if(strstr(region_tok[3], "\""))
465  {
466  rsize /= 3600.0;
467  }
468 
469  dsize = atof(region_tok[4]);
470  if(strstr(region_tok[4], "'"))
471  {
472  dsize /= 60.0;
473  }
474  else
475  if(strstr(region_tok[4], "\""))
476  {
477  dsize /= 3600.0;
478  }
479 
480  color = BLACK;
481  if(strstr(region_tok[7], "green"))
482  {
483  color = GREEN;
484  }
485  else
486  if(strstr(region_tok[7], "red"))
487  {
488  color = RED;
489  }
490  else
491  if(strstr(region_tok[7], "blue"))
492  {
493  color = BLUE;
494  }
495  else
496  if(strstr(region_tok[7], "yellow"))
497  {
498  color = YELLOW;
499  }
500  else
501  if(strstr(region_tok[7], "cyan"))
502  {
503  color = CYAN;
504  }
505  else
506  if(strstr(region_tok[7], "magenta"))
507  {
508  color = MAGENTA;
509  }
510 
511  addRegionBox(color, ra, dec, rsize, dsize, title);
512  }
513  }
514  }
515 
516  fclose(fp);
517 
518  listRegions();
519 
521 
522  ra = (max_ra - min_ra) / 2.0 + min_ra;
523  dec = (max_dec - min_dec) / 2.0 + min_dec;
524 
525  rsize = (max_ra - min_ra ) * scale;
526  dsize = (max_dec - min_dec) * scale;
527 
528 #ifdef DATASERV
529 
530  if(reply == 1)
531  {
532  log_msg("RA: %f, Dec: %f, Rsize = %f, Dsize = %f", ra, dec, rsize, dsize);
533  sprintf(tbuf, "otf_map_ra = %f", ra);
534  to_helper(tbuf);
535 
536  sprintf(tbuf, "otf_map_dec = %f", dec);
537  to_helper(tbuf);
538 
539  sprintf(tbuf, "otf_map_xsize = %f", rsize);
540  to_helper(tbuf);
541 
542  sprintf(tbuf, "otf_map_ysize = %f", dsize);
543  to_helper(tbuf);
544  }
545 
546  otf.regionshow = 1;
547 
548  paintOtfGrid();
549 
550 #else
552 
553  region_ra = ra;
554  region_dec = dec;
555  region_rsize = rsize;
556  region_dsize = dsize;
557 
558 #endif
559 
560  return(0);
561 }
562 
563 #ifdef DATASERV
564 
565 int do_showRegion(buf)
566 char *buf;
567 {
568  char *cp;
569 
570  cp = strtok(buf, "\n\r\t ");
571 
572  if(cp)
573  {
574  otf.regionshow = atoi(cp);
575  }
576  else
577  {
578  log_msg("do_showRegion() missing arg");
579  return(1);
580  }
581 
582 // log_msg("do_showRegion(): Setting Region Show to %d", otf.regionshow);
583 
584  if(otf.regionshow)
585  {
586  otf.valueMaxChanged = 1;
587  otf.intenChanged = 1;
588  otf.newShade = 1;
589 
590  if(otf.head == NULL)
591  {
592  return(1);
593  }
594 
595  paintOtfGrid();
596 
598  }
599  else
600  {
602  }
603 
604  return(0);
605 }
606 
607 
608 int do_toggleRegion()
609 {
610  char tbuf[256];
611 
612  if(!regions_defined)
613  {
614  log_msg("No regions defined");
615  printf("No regions defined\n");
616 
617  return(1);
618  }
619 
620  if(otf.regionshow)
621  {
622  otf.regionshow = 0;
623  }
624  else
625  {
626  otf.regionshow = 1;
627  otf.regionshowbold = 0; /* Reset to 0 */
628  }
629 
630  sprintf(tbuf, "%d", otf.regionshow);
631 
632  do_showRegion(tbuf);
633 
634  return(0);
635 }
636 
637 
639 {
640  char tbuf[256];
641 
642  if(!regions_defined)
643  {
644  log_msg("No regions defined");
645  printf("No regions defined\n");
646 
647  return(1);
648  }
649 
650  if(otf.regionlabelshow)
651  {
652  otf.regionlabelshow = 0;
653  }
654  else
655  {
656  otf.regionlabelshow = 1;
657  }
658 
659  sprintf(tbuf, "%d", otf.regionshow);
660 
661  do_showRegion(tbuf);
662 
663  return(0);
664 }
665 
666 
667 int do_toggleRegionBold(dir)
668 int dir;
669 {
670  char tbuf[256];
671 
672  if(!regions_defined)
673  {
674  log_msg("No regions defined");
675  printf("No regions defined\n");
676 
677  return(1);
678  }
679 
680  if(dir == 1)
681  {
683  }
684  else
685  {
687  }
688 
689  if(otf.regionshowbold > 23)
690  {
691  otf.regionshowbold = 0;
692  }
693 
694  if(otf.regionshowbold < 0)
695  {
696  otf.regionshowbold = 23;
697  }
698 
699  sprintf(tbuf, "%d", otf.regionshow);
700 
701  do_showRegion(tbuf);
702 
703  return(0);
704 }
705 
706 
707 
708 
709 int drawRegions()
710 {
711  int c;
712  float xl, xr, yt, yb;
713  float xmin, xmax, ymin, ymax;
714  float xscale, yscale;
715  struct REGION_BOX *p;
716 
717  xscale = otf.manNyquistRa / 3600.0 * otf.cols;
718  xmin = xscale / -2.0 - otf.manNyquistRa / 7200.0;
719  xmax = xscale / 2.0 - otf.manNyquistRa / 7200.0;
720 
721  yscale = (otf.manNyquistDec * otf.rows) / 3600.0;
722  ymin = yscale / -2.0;
723  ymax = yscale / 2.0;
724 
725  otf.plotxb = OTFPLOTXB;
726  otf.plotxe = OTFPLOTXE;
727  otf.plotyb = OTFPLOTYB;
728  otf.plotye = OTFPLOTYE;
729 
730 
731  for(p=region_box_head;p;p=p->next)
732  {
733  if(p)
734  {
735  if(p->ra != 0.0 && p->dec != 0.0)
736  {
737 
738  xl = (otf.manMapRa - p->ra) - (p->rsize / cos(otf.manMapDec * CTR)) / 2.0;
739  xr = (otf.manMapRa - p->ra) + (p->rsize / cos(otf.manMapDec * CTR)) / 2.0;
740 
741  yt = (p->dec - otf.manMapDec) - p->dsize / 2.0;
742  yb = (p->dec - otf.manMapDec) + p->dsize / 2.0;
743 
744 
745  switch(otf.regionshowbold)
746  {
747 // case 1: c = GRAY32; break;
748 // case 2: c = GRAY50; break;
749 // case 3: c = GRAY75; break;
750 // case 4: c = BLACK; break;
751 
752  case 0: c = p->color; break;
753  default: c = otf.regionshowbold; break;
754  }
755 
756  xgr_drawRectangle( xmin, xmax, ymin, ymax, xl, yt, xr, yb, c, 0);
757 
758  if(otf.regionlabelshow)
759  {
760  /* Turns out, 'yb' discribes the top of the box */
761  xgr_drawTextInGrid( xmin, xmax, ymin, ymax, xl, yb, p->title, c, font0);
762  }
763 
764  }
765  }
766  }
767 
768 
769  return(0);
770 }
771 
772 #endif
float plotxe
Definition: otf.h:223
int regionshow
Definition: otf.h:188
double ctod(char *str)
#define FONT_SIZE_SMALL
Definition: dataFonts.h:6
#define YELLOW
Definition: colors.h:7
char * strcmprs(char *str)
int do_toggleRegion(void)
double max_dec
Definition: region.c:71
float manMapDec
Definition: otf.h:228
float manNyquistRa
Definition: otf.h:231
int log_perror(char *msg)
double min_dec
Definition: region.c:71
int xgr_drawTextInGrid(double xmin, double xmax, double ymin, double ymax, double x, double y, char *msg, int color, int f)
#define CTR
Definition: defines.h:26
#define RED
Definition: colors.h:5
struct HEADER * head
Definition: otf.h:246
int region_get_tok(char *edit)
Definition: region.c:79
FILE * fp
Definition: linuxpops.c:70
#define OTFPLOTYB
Definition: otf.h:21
#define BLUE
Definition: colors.h:8
double region_rsize
Definition: region_cmd.c:60
int newShade
Definition: otf.h:164
#define OTFPLOTYE
Definition: otf.h:22
float plotxb
Definition: otf.h:221
double min_ra
Definition: region.c:71
float plotye
Definition: otf.h:224
int doOtfGridRePaint(void)
Definition: otf.c:1104
double region_dsize
Definition: region_cmd.c:60
#define CYAN
Definition: colors.h:10
int color
Definition: region.h:6
char region_tok[40][40]
Definition: region.c:73
struct REGION_BOX * region_box_head
Definition: region.c:69
int addRegionBox(int color, double ra, double dec, double rsize, double dsize, char *title)
Definition: region.c:99
int do_toggleRegionLabels(void)
int do_listRegions(char *buf)
Definition: region.c:299
int log_msg(const char *fmt,...)
int regionshowbold
Definition: otf.h:189
int computeRegionExtents(void)
Definition: region.c:238
int regionlabelshow
Definition: otf.h:190
int do_toggleRegionBold(int dir)
struct REGION_BOX * next
Definition: region.h:13
int valueMaxChanged
Definition: otf.h:176
float manNyquistDec
Definition: otf.h:232
int drawRegions(void)
double region_dec
Definition: region_cmd.c:60
char title[32]
Definition: region.h:11
int strcmp()
int do_loadRegion(char *buf)
Definition: region.c:354
int remRegions(void)
Definition: region.c:180
double max_ra
Definition: region.c:71
double ra
Definition: region.h:7
char title[256]
Definition: specplot.c:34
int regions_defined
Definition: region.c:77
int displayRequestedOtf(void)
Definition: otf.c:3737
int paintOtfGrid(void)
Definition: otf.c:1844
void st_report()
int do_remRegions(char *buf)
Definition: region.c:309
int rows
Definition: otf.h:170
float manMapRa
Definition: otf.h:227
#define OTFPLOTXB
Definition: otf.h:19
int cols
Definition: otf.h:169
#define OTFPLOTXE
Definition: otf.h:20
int listRegions(void)
Definition: region.c:208
#define BLACK
Definition: colors.h:4
int intenChanged
Definition: otf.h:177
struct OTF_STRUCT otf
Definition: specdata.c:100
double rsize
Definition: region.h:9
float plotyb
Definition: otf.h:222
double dec
Definition: region.h:8
char * region_delim
Definition: region.c:75
int do_showRegion(char *buf)
int xgr_drawRectangle(double xmin, double xmax, double ymin, double ymax, double xl, double yt, double xr, double yb, int color, int bold)
int indx
Definition: region.h:5
double dsize
Definition: region.h:10
double region_ra
Definition: region_cmd.c:60
int to_helper(char *buf)
Definition: dataserv.c:125
#define MAGENTA
Definition: colors.h:9
#define GREEN
Definition: colors.h:6