ccount@ATHENA.MIT.EDU (03/16/90)
Posting-number: Volume 11, Issue 38 Submitted-by: ccount@ATHENA.MIT.EDU Archive-name: starchart/part10 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 10 (of 32)." # Contents: starchart/starX10.c starchart/stardsp.c # starchart/starsample.c PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'starchart/starX10.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'starchart/starX10.c'\" else echo shar: Extracting \"'starchart/starX10.c'\" \(14957 characters\) sed "s/^X//" >'starchart/starX10.c' <<'END_OF_FILE' X/* X * X10 Driver for starchart 3.0. Craig Counterman Jan, 1989 X * X * X * Copyright (c) 1990 by Craig Counterman. All rights reserved. X * X * This software may be redistributed freely, not sold. X * This copyright notice and disclaimer of warranty must remain X * unchanged. X * X * No representation is made about the suitability of this X * software for any purpose. It is provided "as is" without express or X * implied warranty, to the extent permitted by applicable law. X * X */ X Xstatic char rcsid[]="$Header: starX10.c,v 2.3 90/02/19 17:52:58 ccount Exp $"; X X#include <stdio.h> X#include <math.h> X#include <ctype.h> X#include "star3.h" X X#ifndef SYSV X#include <strings.h> X#else X#include <string.h> X#endif X X#include <X/Xlib.h> X/*#include "Xlib.h"*/ X X/* Cursor for window */ X#define target_width 16 X#define target_height 16 X#define target_x_hot 8 X#define target_y_hot 8 Xshort target_bits[] = { X 0x0000, 0x0280, 0x0280, 0x0ee0, X 0x1290, 0x2288, 0x26c8, 0xfd7e, X 0x0280, 0xfd7e, 0x26c8, 0x2288, X 0x1290, 0x0ee0, 0x0280, 0x0280}; X#define target_mask_width 16 X#define target_mask_height 16 X#define target_mask_x_hot 8 X#define target_mask_y_hot 8 Xshort target_mask_bits[] = { X 0x0000, 0x0280, 0x0380, 0x0fe0, X 0x1390, 0x2388, 0x26c8, 0xfd7e, X 0x7abc, 0xfd7e, 0x26c8, 0x2388, X 0x1390, 0x0fe0, 0x0380, 0x0280}; X X/* Use array of styles and fonts */ X#define MAXLNSTY MAXSTLNS X#define MAXFONTS 100 X X/* X items */ XDisplay *display; /* connection to display server */ XWindow window; /* window to graphics in */ Xint planes; /* plane mask */ Xint *pixels; /* color map cells */ XCursor cursor; /* current cursor */ Xint inmask; /* input mask for window */ Xint ncolors; /* number of colors */ Xint is_color; /* is color workstation */ Xint colr; /* current color */ Xint forepix, backpix; XFontInfo *D_Fonts[MAXFONTS]; XFontInfo *D_GrkFont; XFontInfo *current_font; Xint D_Linesty[MAXLNSTY]; X X#define BLACK 0 X#define WHITE 1 X#define RED 2 X#define ORANGE 3 X#define YELLOW 4 X#define GREEN 5 X#define CYAN 6 X#define BLUE 7 X#define VIOLET 8 X#define BLUE_WHITE 9 X X X/* Externs */ Xextern int g_argc; Xextern char **g_argv; X Xextern char *title; /* Title of page */ X Xextern mapwindow *mapwin[MAXWINDOWS]; Xextern int numwins; X Xextern int cur_function; Xextern int cur_map_type; Xextern int cur_map_tag; Xextern char *cur_tag_field; X X X/* Scale multiplier, minimum, X mangitude change, maximum, for thumbnail,*/ X#define THSMUL 1.2 X#define THSMIN 12.0 X#define THMADJ 2.5 X#define THMMAX 5.0 X X/* size of window */ X#define WINWID 1020 X#define WINHGT 800 X X X/* Exports */ X X/* The variables in the first few lines MUST be set by driver */ Xmapwindow fullpage = { X 880, 700, 20, 65, /* width, height, x and y offsets */ X 8.0, 2.0, 2.05, /* default limiting mags for glyph, name, label */ X X/* The next several variables SHOULD be set by the driver, X but are only used by the driver */ X FULLPAGEMAP, /* Type of map: THUMBNAIL may have X some restrictions */ X 0, /* May be used by driver for whatever */ X "String", /* May be used by driver for whatever */ X X/* The next several variables may be set by the driver, but the main routines X may reset them (and the driver routines may then override that) */ X SANSONS, /* Projection mode */ X FALSE, FALSE, /* Draw grids */ X 0.5, 5.0, /* grid step size */ X 0.0, 0.0, /* grid origin */ X X FALSE, /* Invert (flip north south) */ X}; X X/* The variables in the first few lines MUST be set by driver */ Xmapwindow mainmap = { X 880, 500, 20, 265, /* width, height, x and y offsets */ X 8.0, 2.0, 2.05, /* default limiting mags for glyph, name, label */ X X/* The next several variables SHOULD be set by the driver, X but are only used by the driver */ X MAINMAP, /* Type of map: THUMBNAIL may have X some restrictions */ X 0, /* May be used by driver for whatever */ X "String", /* May be used by driver for whatever */ X X/* The next several variables may be set by the driver, but the main routines X may reset them (and the driver routines may then override that) */ X SANSONS, /* Projection mode */ X FALSE, FALSE, /* Draw grids */ X 0.5, 5.0, /* grid step size */ X 0.0, 0.0, /* grid origin */ X X FALSE, /* Invert (flip north south) */ X}; X X X/* The variables in the first few lines MUST be set by driver */ Xmapwindow thumbmap = { X 480, 195, 420, 35, /* width, height, x and y offsets */ X 5.5+THMADJ, 1.0+THMADJ, 2.05+THMADJ, X /* default limiting mags for glyph, name, label */ X X/* The next several variables SHOULD be set by the driver, X but are only used by the driver */ X THUMBNAIL, /* Type of map: THUMBNAIL may have X some restrictions */ X 0, /* May be used by driver for whatever */ X "String", /* May be used by driver for whatever */ X X/* The next several variables may be set by the driver, but the main routines X may reset them (and the driver routines may then override that) */ X SANSONS, /* Projection mode */ X FALSE, FALSE, /* Draw grids */ X 0.5, 5.0, /* grid step size */ X 0.0, 0.0, /* grid origin */ X X FALSE, /* Invert (flip north south) */ X}; X X/* h & v tick text controls */ Xint htick_lim = 2; Xint htext_lim = 80; Xint htext_xoff = 2; Xint htext_yoff = 17; Xint vtick_lim = 2; Xint vtext_lim = 20; Xint vtext_xoff = 24; Xint vtext_yoff = 0; X X/* externs for labels */ Xint x_nameoffset = 10, y_nameoffset = 0; Xint x_lbloffset = 7, y_lbloffset = 10; Xint x_magoffset = 7, y_magoffset = -10; X X/* externs for legend: variables of positioning are here */ Xint l_til=220; Xint l_stil=185; X Xint l_lmar1=40; Xint l_lmar2=65; Xint l_ltext=95; Xint l_rmar1=205; Xint l_rmar2=230; Xint l_rtext=260; X Xint l_line1=150; Xint l_line2=125; Xint l_line3=100; Xint l_line4=75; Xint l_line5=50; Xint l_line6=25; X X/* Point sizes for font calls */ Xint titlesize=16; Xint subtlsize=12; Xint namesize=10; Xint lblsize=8; Xint magsize=8; X X/* Fonts for font calls */ Xint namefnt=TIMESROMAN; Xint lblfnt=HELV; Xint magfnt=COURIER; Xint titlefnt=TIMESBOLD; Xint subtlfnt=TIMESROMAN; X X/* Scale multiplier, minimum, X mangitude change, maximum, for thumbnail,*/ Xdouble th_smul = THSMUL; Xdouble th_smin = THSMIN; Xdouble th_madj = THMADJ; Xdouble th_mmax = THMMAX; X X#define MAX(a,b) ((a)>(b)?(a):(b)) X#define MIN(a,b) ((a)<(b)?(a):(b)) X X/* Device control argument */ XD_control_arg(s) Xchar *s; X{ X int i = 0; X int c; X X while (c = s[i++]) switch (c) { X default: X break; X } X} X X/* Open the device */ XD_open() X{ X char *wname; X extern char *getenv(); X char *str, *prog = "Starchart"; /* default name string */ X char *fore_color, *back_color; X int reverse = 1; X Color cdef; X X wname= NULL; X X if ( !(display = XOpenDisplay(wname))) X return FALSE; X X if ((str = XGetDefault(prog, "ReverseVideo")) && strcmp(str, "on") == 0) X reverse = 0; X fore_color = XGetDefault(prog, "ForeGround"); X back_color = XGetDefault(prog, "BackGround"); X X cursor=XCreateCursor(target_width,target_height, X target_bits,target_mask_bits, X target_x_hot,target_y_hot, X BlackPixel,WhitePixel,GXcopy); X X X /* create color map */ X X if (reverse) { X forepix = BlackPixel; X backpix = WhitePixel; X } X else { X forepix = WhitePixel; X backpix = BlackPixel; X } X X is_color = (DisplayPlanes() >= 4); X ncolors = (is_color ? 12 : 2); X X pixels = (int *) malloc((long) ncolors*sizeof(int)); X if (is_color) { X if (!XGetColorCells(0, ncolors, 0, &planes, pixels)) { X fprintf(stderr, "Error, can't get color cells\n"); X exit(10); X } X X if (!fore_color || !XParseColor(fore_color, &cdef)) { X cdef.pixel = forepix ; X XQueryColor(&cdef) ; X } X cdef.pixel = pixels[0] ; X XStoreColor(&cdef) ; X if (!back_color || !XParseColor(back_color, &cdef)) { X cdef.pixel = backpix ; X XQueryColor(&cdef) ; X } X cdef.pixel = pixels[1] ; X XStoreColor(&cdef) ; X D_setcolors(); X } else { X pixels[BLACK] = backpix ; X pixels[WHITE] = forepix ; X } X X colr = pixels[WHITE]; X X /* open window */ X window = XCreateWindow(RootWindow,0,0,WINWID,WINHGT,2,WhitePixmap, X BlackPixmap); X XMapWindow(window) ; X XDefineCursor(window,cursor); X inmask = ButtonPressed|KeyPressed|ExposeWindow ; X XSelectInput(window, inmask) ; X X D_setfnts(); X D_setlinesty(); X X XFlush(); X X return TRUE ; /* open successful */ X} X X/* Close the device */ XD_close() X{ X Window closebox; X XEvent rep; /*isn't really used*/ X X XFlush(); X /* create a close box */ X closebox=XCreateWindow(window,0,0,20,20,0,WhitePixmap,BlackPixmap); X X XMapWindow(closebox); X XSelectInput(closebox,ButtonPressed); X XWindowEvent(closebox,ButtonPressed,&rep); X XUndefineCursor(window); X XFreeCursor(cursor); X XDestroyWindow(window) ; X XCloseDisplay(display) ; X} X X Xstatic int current_x, current_y; X X/* Move to (x, y) */ XD_move(x, y) X int x, y; X{ X current_x = x; X current_y = y; X} X X X/* Draw a line of style line_style from the current point to (x, y) */ X/* Note, this replaces vecdraw vecdrawdot and vecdrawhyph */ XD_draw(x, y, line_style) X int x, y; X int line_style; /* SOLID, DOTTED, DASHED, etc. */ X{ X Vertex line[2]; X int l_style; X X line[0].x = current_x; X line[0].y = WINHGT - current_y; X line[1].x = x; X line[1].y = WINHGT - y; X line[0].flags = line[1].flags = 0; X X switch (cur_function) { X case CHRTOUTLN: X case CHRTHTICK: X case CHRTVTICK: X l_style = SOLID; X break; X case GRID_RA: X case GRID_DEC: X l_style = DASHED; X break; X case ECLIPT: X l_style = DOTTED; X break; X case CONSTBOUND: X l_style = DASHED; X break; X case CONSTPATTRN: X l_style = DOTTED; X break; X case CONSTNAME: X case CHARTFILE: X l_style = line_style; X break; X default: X l_style = line_style; X break; X } X X XDrawDashed(window, line, 2, 1, 1, (is_color ? colr : pixels[BLACK]), X D_Linesty[l_style], GXcopy, AllPlanes); X X current_x = x; X current_y = y; X} X/* This routine is encouraged to look at the extern cur_funtion X and change the line style drawn as desired */ X X/* Move to (x1, y1) then draw a line of style line_style to (x2, y2) */ XD_movedraw(x1, y1, x2, y2, line_style) X int x1, y1, x2, y2; X int line_style; /* SOLID, DOTTED, DASHED, etc. */ X{ X D_move(x1, y1); X D_draw(x2, y2, line_style); X} X X/* Set the color to be used for lines and text */ X/* color_str is a 2 char (+ '\0') string X containing a specification for a color, X e.g. "G2" for the color of a star of spectral class G2, or "r7" for X red, level seven. The interpretation of the color string is left to X the device driver */ XD_color(color_str) X char *color_str; X{ X if (!is_color) return; X X switch (color_str[0]) { X case 'O': X colr = pixels[BLUE_WHITE]; X break; X case 'B': X colr = pixels[BLUE]; X break; X case 'A': X colr = pixels[WHITE]; X break; X case 'F': X colr = pixels[WHITE]; X break; X case 'G': X colr = pixels[YELLOW]; X break; X case 'K': X colr = pixels[ORANGE]; X break; X case 'M': X colr = pixels[RED]; X break; X case 'R': X case 'N': X case 'S': X colr = pixels[RED]; X break; X case ' ': X default: X colr = pixels[WHITE]; X break; X } X} X X X/* Set the font and font size to be used for text. */ X/* Note order of args */ XD_fontsize(fsize, font) X int fsize; /* Size of font */ X int font; /* e.g. TIMES, HELV, TIMES+ITALIC */ X{ X switch(cur_function) { X case CHRTOUTLN: X case CHRTHTICK: X case CHRTVTICK: X current_font = D_Fonts[TIMESBOLD]; X case GRID_RA: X case GRID_DEC: X case ECLIPT: X case CONSTBOUND: X case CONSTPATTRN: X break; X case CONSTNAME: X current_font = D_Fonts[TIMESROMAN]; X case CHARTFILE: X case CURNTFONT: X default: X break; X } X} X/* This routine is encouraged to look at the extern cur_funtion X and change the font used as desired */ X X X/* Display text string str at x,y, in current font and font size. X if star_lbl is TRUE, string is a star label, use X greek characters (if possible) */ XD_text(x, y, str, star_lbl) X int x, y; X char *str; X int star_lbl; X{ X FontInfo *tfont; X X if (star_lbl) { X if (isgreek(str[0]) && (isdigit(str[1]) || (str[1] == ' '))) { X tfont = D_GrkFont; X } else { /* Star label, but not greek */ X /* remove leading spaces */ X while (*str == ' ') str++; X tfont = current_font; X } X } else tfont = current_font; X X XText(window, x, WINHGT - y, str, strlen(str), X tfont->id, X backpix, forepix); X} X Xisgreek(c) Xchar c; X{ X char *cp; X X#ifdef OLD_GREEK X cp = "abgdezh@iklmnEoprstuOx%w"; X#else X cp = "abgdezhqiklmnxoprstujcyw"; X#endif X while (*cp && (*cp != c)) cp++; X return (*cp != '\0'); /* True if letter was in greek string */ X} X X X X/* Return input coordinate in device coords where there are pointing devices */ XD_inxy(x, y) X int *x, *y; X{ X} X X/* Put non-displayed comment in output. Allowed in postscript, but X few other drivers will be able to support this. */ XD_comment(str) X char *str; X{ X fprintf(stderr, "%s\n", str); X} X X X/** XHigher level functions X**/ X Xdrawlen(x, y, dx, dy, len) X int x, y, dx, dy, len; X{ X D_movedraw(x + dx, y + dy, x + dx + len, y + dy, SOLID); X} X XD_setfnts() X{ X D_Fonts[TIMESROMAN] = XOpenFont("6x10"); X D_Fonts[TIMESBOLD] = XOpenFont("6x10"); X D_Fonts[TIMESITAL] = XOpenFont("6x10"); X D_Fonts[TIMESBOLDITAL] = XOpenFont("6x10"); X D_Fonts[HELV] = XOpenFont("6x10"); X D_Fonts[HELVBOLD] = XOpenFont("6x10"); X D_Fonts[HELVITAL] = XOpenFont("6x10"); X D_Fonts[HELVBOLDITAL] = XOpenFont("6x10"); X D_Fonts[COURIER] = XOpenFont("6x10"); X D_Fonts[COURBOLD] = XOpenFont("6x10"); X D_Fonts[COURITAL] = XOpenFont("6x10"); X D_Fonts[COURITALBOLD] = XOpenFont("6x10"); X D_GrkFont = XOpenFont("6x10"); X X current_font = D_Fonts[TIMESROMAN]; X} X XD_setlinesty() X{ X D_Linesty[SOLID] = SolidLine; X D_Linesty[DOTTED] = (is_color ? DottedLine : SolidLine); X D_Linesty[DASHED] = (is_color ? DashedLine : SolidLine); X D_Linesty[VECSOLID] = SolidLine; X D_Linesty[VECDOT] = (is_color ? DottedLine : SolidLine); X D_Linesty[VECDASH] = (is_color ? DashedLine : SolidLine); X} X XD_setcolors() X{ X Color c ; X X c.red = 256*0; X c.green = 256*0; X c.blue = 256*0; X c.pixel = pixels[BLACK]; X XStoreColor(&c); X X c.red = 256*255; X c.green = 256*255; X c.blue = 256*255; X c.pixel = pixels[WHITE]; X XStoreColor(&c); X X c.red = 256*255; X c.green = 256*0; X c.blue = 256*0; X c.pixel = pixels[RED]; X XStoreColor(&c); X X c.red = 256*255; X c.green = 256*100; X c.blue = 256*0; X c.pixel = pixels[ORANGE]; X XStoreColor(&c); X X c.red = 256*255; X c.green = 256*255; X c.blue = 256*0; X c.pixel = pixels[YELLOW]; X XStoreColor(&c); X X c.red = 256*0; X c.green = 256*0; X c.blue = 256*255; X c.pixel = pixels[GREEN]; X XStoreColor(&c); X X c.red = 256*0; X c.green = 256*255; X c.blue = 256*255; X c.pixel = pixels[CYAN]; X XStoreColor(&c); X X c.red = 256*0; X c.green = 256*0; X c.blue = 256*255; X c.pixel = pixels[BLUE]; X XStoreColor(&c); X X c.red = 256*255; X c.green = 256*0; X c.blue = 256*255; X c.pixel = pixels[VIOLET]; X XStoreColor(&c); X X c.red = 256*130; X c.green = 256*130; X c.blue = 256*255; X c.pixel = pixels[BLUE_WHITE]; X XStoreColor(&c); X XFlush(); X} X X END_OF_FILE if test 14957 -ne `wc -c <'starchart/starX10.c'`; then echo shar: \"'starchart/starX10.c'\" unpacked with wrong size! fi # end of 'starchart/starX10.c' fi if test -f 'starchart/stardsp.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'starchart/stardsp.c'\" else echo shar: Extracting \"'starchart/stardsp.c'\" \(17440 characters\) sed "s/^X//" >'starchart/stardsp.c' <<'END_OF_FILE' X/* X * TTY Display driver for starchart.c mainline X */ X X/* X ! patched December, 1987 by Alan Paeth (awpaeth@watcgl), X ! X ! [1] formal/actual parmaters for drawNebu, drawPlan.. now agree X ! [2] "bigmaster" chart layout now added X ! X * Modified for starchart 3.0. Craig Counterman Jan, 1989 X * X * Copyright (c) 1990 by Craig Counterman. All rights reserved. X * X * This software may be redistributed freely, not sold. X * This copyright notice and disclaimer of warranty must remain X * unchanged. X * X * No representation is made about the suitability of this X * software for any purpose. It is provided "as is" without express or X * implied warranty, to the extent permitted by applicable law. X * X */ X Xstatic char rcsid[]="$Header: stardsp.c,v 2.4 90/02/19 17:55:01 ccount Exp $"; X X#include <stdio.h> X#include <math.h> X#ifndef SYSV X#include <strings.h> X#else X#include <string.h> X#endif X#include <ctype.h> X#include "star3.h" X X/* Externs */ Xextern int g_argc; Xextern char **g_argv; X Xextern char *title; /* Title of page */ X Xextern mapwindow *mapwin[MAXWINDOWS]; Xextern int numwins; X Xextern int cur_function; Xextern int cur_map_type; Xextern int cur_map_tag; Xextern char *cur_tag_field; X X X/* Scale multiplier, minimum, X mangitude change, maximum, for thumbnail,*/ X#define THSMUL 1.2 X#define THSMIN 12.0 X#define THMADJ 2.5 X#define THMMAX 5.0 X X X/* Exports */ X X/* The variables in the first few lines MUST be set by driver */ Xmapwindow fullpage = { X 880, 700, 20, 65, /* width, height, x and y offsets */ X 5.9, 2.0, 2.05, /* default limiting mags for glyph, name, label */ X X/* The next several variables SHOULD be set by the driver, X but are only used by the driver */ X FULLPAGEMAP, /* Type of map: THUMBNAIL may have X some restrictions */ X 0, /* May be used by driver for whatever */ X "String", /* May be used by driver for whatever */ X X/* The next several variables may be set by the driver, but the main routines X may reset them (and the driver routines may then override that) */ X SANSONS, /* Projection mode */ X FALSE, FALSE, /* Draw grids */ X 0.5, 5.0, /* grid step size */ X 0.0, 0.0, /* grid origin */ X X FALSE, /* Invert (flip north south) */ X}; X X/* The variables in the first few lines MUST be set by driver */ Xmapwindow mainmap = { X 880, 500, 20, 265, /* width, height, x and y offsets */ X 5.9, 2.0, 2.05, /* default limiting mags for glyph, name, label */ X X/* The next several variables SHOULD be set by the driver, X but are only used by the driver */ X MAINMAP, /* Type of map: THUMBNAIL may have X some restrictions */ X 0, /* May be used by driver for whatever */ X "String", /* May be used by driver for whatever */ X X/* The next several variables may be set by the driver, but the main routines X may reset them (and the driver routines may then override that) */ X SANSONS, /* Projection mode */ X FALSE, FALSE, /* Draw grids */ X 0.5, 5.0, /* grid step size */ X 0.0, 0.0, /* grid origin */ X X FALSE, /* Invert (flip north south) */ X}; X X X/* The variables in the first few lines MUST be set by driver */ Xmapwindow thumbmap = { X 480, 195, 420, 35, /* width, height, x and y offsets */ X 3.0+THMADJ, 1.0+THMADJ, 2.05+THMADJ, X /* default limiting mags for glyph, name, label */ X X/* The next several variables SHOULD be set by the driver, X but are only used by the driver */ X THUMBNAIL, /* Type of map: THUMBNAIL may have X some restrictions */ X 0, /* May be used by driver for whatever */ X "String", /* May be used by driver for whatever */ X X/* The next several variables may be set by the driver, but the main routines X may reset them (and the driver routines may then override that) */ X SANSONS, /* Projection mode */ X FALSE, FALSE, /* Draw grids */ X 0.5, 5.0, /* grid step size */ X 0.0, 0.0, /* grid origin */ X X FALSE, /* Invert (flip north south) */ X}; X X/* h & v tick text controls */ Xint htick_lim = 2; Xint htext_lim = 80; Xint htext_xoff = 2; Xint htext_yoff = 17; Xint vtick_lim = 2; Xint vtext_lim = 20; Xint vtext_xoff = 24; Xint vtext_yoff = 0; X X/* Scale multiplier, minimum, X mangitude change, maximum, for thumbnail,*/ Xdouble th_smul=THSMUL; Xdouble th_smin=THSMIN; Xdouble th_madj=THMADJ; Xdouble th_mmax=THMMAX; X X#define MAX(a,b) ((a)>(b)?(a):(b)) X#define MIN(a,b) ((a)<(b)?(a):(b)) X X#define ROWS 32L X#define COLS 79L X X/* Device control argument */ XD_control_arg(s) Xchar *s; X{ X int i = 0; X int c; X X while (c = s[i++]) switch (c) { X default: X break; X } X} X Xint oldx, oldy, scrx, scry; /* Must be 32 bits */ Xchar **linevec; Xchar *calloc(); X X X/* Open the device */ XD_open() X{ X int i; X X linevec = (char**)(calloc((unsigned)ROWS, sizeof(char*))); X if (linevec == NULL) return FALSE; X for (i=0; i<ROWS; i++) { X linevec[i] = (char*)(calloc((unsigned)COLS, sizeof(char))); X if (linevec[i] == NULL) return FALSE; X } X X return TRUE ; /* open successful */ X} X X X/* Close the device */ XD_close() X{ X int i, j, k; X char c; X X for (i=0; i<ROWS; i++) X { X for (j=COLS-1; j>0; j--) if (linevec[i][j]) break; X for (k=0; k<=j; k++) putchar((c=linevec[i][k]) ? c : ' '); X putchar('\n'); X free((char *)linevec[i]); X } X fflush(stdout); X free((char *)linevec); X} X X X/* Move to (x, y) */ XD_move(x, y) X int x, y; X{ X oldx = x; X oldy = y; X scrx = (x*COLS+512L)/1024L; X scry = (((768L-y)*ROWS)+384L)/768L; X} X X X/* Draw a line of style line_style from the current point to (x, y) */ X/* Note, this replaces vecdraw vecdrawdot and vecdrawhyph */ XD_draw(x, y, line_style) X int x, y; X int line_style; /* SOLID, DOTTED, DASHED, etc. */ X{ X int dx, dy, savex, savey, i, steps; X char c; X X /* all styles are the same */ X savex = oldx; X savey = oldy; X dx = x-oldx; X dy = y-oldy; X c = (abs(dx) > abs(dy)) ? '-' : '|'; X steps = MAX(MAX(abs(dx),abs(dy))/12, 1); X for(i=0; i<=steps; i++) X { X D_move(savex+(i*dx+steps/2)/steps,savey+(i*dy+steps/2)/steps); X sym(c); X } X} X/* This routine is encouraged to look at the extern cur_funtion X and change the line style drawn as desired */ X X X/* Move to (x1, y1) then draw a line of style line_style to (x2, y2) */ XD_movedraw(x1, y1, x2, y2, line_style) X int x1, y1, x2, y2; X int line_style; /* SOLID, DOTTED, DASHED, etc. */ X{ X D_move(x1, y1); X D_draw(x2, y2, line_style); X} X X X/* Set the color to be used for lines and text */ X/* color_str is a 2 char (+ '\0') string containing X a specification for a color, X e.g. "G2" for the color of a star of spectral class G2, or "r7" for X red, level seven. The interpretation of the color string is left to X the device driver */ XD_color(color_str) X char *color_str; X{ X switch (color_str[0]) { X case 'O': X break; X case 'B': X break; X case 'A': X break; X case 'F': X break; X case 'G': X break; X case 'K': X break; X case 'M': X break; X case 'R': X case 'N': X case 'S': X break; X case 'r': X case 'g': X case 'b': X case 'y': X case 'c': X case 'p': X case 'o': X case 'w': X break; X case ' ': X default: X break; X } X} X X X/* Set the font and font size to be used for text. */ X/* Note order of args */ XD_fontsize(fsize, font) X int fsize; /* Size of font */ X int font; /* e.g. TIMES, HELV, TIMES+ITALIC */ X{ X} X/* This routine is encouraged to look at the extern cur_funtion X and change the font used as desired */ X X X/* Display text string str at x,y, in current font and font size. X if star_lbl is TRUE, string is a star label, use X greek characters (if possible) */ XD_text(x, y, str, star_lbl) X int x, y; X char *str; X int star_lbl; X{ X char c; X X D_move(x, y); X X if (star_lbl) { X /* remove leading spaces */ X while (*str == ' ') str++; X /* can't display greek characters */ X } X X while(c = *str++) X { X sym(c); X scrx++; X } X} X X Xchar char_overwrite(); X Xsym(c) X char c; X{ X if ( (scrx >= 0) && (scrx < COLS) && X (scry >= 0) && (scry < ROWS) ) X linevec[scry][scrx] = char_overwrite(linevec[scry][scrx], c ); X} X X Xchar char_overwrite(under, over) X char under, over; X{ X if (over == under) return(over); X if (!under) return(over); X if (!over) return(under); X if (isspace(under)) return(over); X if (isspace(over)) return(under); X if (over == '%') return(over); X if (over == '~') return(over); X if (over == '@') return(over); X if (under == '%') return(under); X if (under == '~') return(under); X if (under == '@') return(under); X if ( isalnum(under) && isalnum(over)) return(over); X if (!isalnum(under) && isalnum(over)) return(over); X if ( isalnum(under) && !isalnum(over)) return(under); X if ((under == '-') && (over == '|')) return('+'); X if ((under == '|') && (over == '-')) return('+'); X if ((under == '+') && (over == '-')) return('+'); X if ((under == '+') && (over == '|')) return('+'); X if ((under == ',') && (over == '.')) return(';'); X if ((under == '.') && (over == ',')) return(';'); X if ((under == '.') && (over == '.')) return(':'); X if ((under == '|') && (over == '.')) return('!'); X if ((under == '|') && (over == ',')) return('!'); X if ((under == '.') && (over == '|')) return('!'); X if ((under == ',') && (over == '|')) return('!'); X if ((under == '.') && (over == '.')) return(':'); X return(under); X} X X X/* Return input coordinate in device coords where there are pointing devices */ XD_inxy(x, y) X int *x, *y; X{ X} X X X/* Put non-displayed comment in output. Allowed in postscript, but X few other drivers will be able to support this. */ XD_comment(str) X char *str; X{ X/* X fprintf(stderr, "%s\n", str); X*/ X} X X X/** XHigher level functions X**/ X X/* Point sizes for font calls */ X#define TITLESIZE 16 X#define SUBTLSIZE 12 X#define NAMESIZE 10 X#define LBLSIZE 8 X#define MAGSIZE 8 X X/* Fonts for font calls */ X#define NAMEFNT TIMESROMAN X#define LBLFNT HELV X#define MAGFNT COURIER X#define TITLEFNT TIMESBOLD X#define SUBTLFNT TIMESROMAN X Xint x_nameoffset = 10, y_nameoffset = 0; Xint x_lbloffset = 0, y_lbloffset = 10; Xint x_magoffset = 7, y_magoffset = -15; X X X/* Interface Function */ X/* Draw object at x, y. properties set by other parameters */ Xdrawobj(x, y, mag, type, color_str, label_field, con_str, obj_name, X comment_str, file_line, X draw_glyph, draw_text, use_lbl, use_name, use_mag) X X int x, y; X double mag; /* Magnitude of object */ X char *type; /* 2 chars, object code and subcode */ X char *color_str; /* 2 chars, spectral type for stars, X color code otherwise */ X char *label_field; /* 2 chars, Bayer or flamsteed for stars, X size in seconds for nebulae and X planets */ X char *con_str; /* 3 chars, the constellation the object is in */ X char *obj_name; /* Name of object */ X char *comment_str; /* Comment field */ X char *file_line; /* The full line from the file, X containing the above if it is in X standard format */ X int draw_glyph; /* Draw object symbol */ X int draw_text; /* Draw text */ X int use_lbl; /* Label object with the label_field string */ X int use_name; /* Label object with the obj_name string */ X int use_mag; /* Label object with a 2 or 3 character string X containing the magnitude * 10 without X decimal point */ X{ X char magstr[10]; X X/*fprintf(stderr, "%d %d %f <%s> <%s> <%s> <%s> <%s> <%s> <%s>\n", x, y, mag, X type, color_str, label_field, con_str, obj_name, comment_str, X file_line);*/ X X if (draw_glyph) X switch(type[0]) { X case 'S': drawStar(x,y,mag,type[1],color_str); X break; X case 'P': drawPlan(x,y,mag,type[1],color_str, size_obj(label_field), X comment_str); X break; X case 'N': drawNebu(x,y,mag,type[1],color_str, size_obj(label_field)); X break; X case 'G': drawGalx(x,y,mag,type[1],color_str, size_obj(label_field)); X break; X case 'C': drawClus(x,y,mag,type[1],color_str, size_obj(label_field)); X break; X case 'U': X drawUnknown(x,y,mag,type[1],color_str, size_obj(label_field)); X break; X case 'O': X drawOther(x,y,mag,type[1],color_str, size_obj(label_field)); X break; X case 'V': X case 'A': X case 'I': X break; X case '#': X default: X break; X }; X X X/* X * use name or label X */ X if (draw_text) { X if (type[0] == 'I') X D_color(color_str); X else X D_color(" "); X X if (use_name && obj_name[0]) { X D_fontsize(NAMESIZE, NAMEFNT); X D_text(x+x_nameoffset, y+y_nameoffset, obj_name, FALSE); X } else if (use_lbl && X ((label_field[0] != ' ') || (label_field[1] != ' '))) { X D_fontsize(LBLSIZE, LBLFNT); X D_text(x+x_lbloffset, y+y_lbloffset, label_field, TRUE); X } X/* If you want to mag label other objects, change this */ X if (use_mag && (type[0] == 'S')) { X sprintf(magstr, "%02d", (int)(mag*10.0+0.5)); X D_fontsize(MAGSIZE, MAGFNT); X D_text(x+x_magoffset, y+y_magoffset, magstr, FALSE); X } X } X} X XdrawStar(x, y, mag, type, color) X int x, y; X double mag; X char type, *color; X{ X switch ((int)(mag+0.5)) X { X case -1: X case 0: X D_text(x, y, "O", FALSE); X break; X case 1: X D_text(x, y, "*", FALSE); X break; X case 2: X D_text(x, y, "o", FALSE); X break; X case 3: X D_text(x, y, "-", FALSE); X break; X case 4: X D_text(x, y, ",", FALSE); X break; X default: X D_text(x, y, ".", FALSE); X break; X } X} X XdrawPlan(x, y, mag, pcode, color, plansize) X int x,y; X double mag; X char pcode, *color; X long plansize; X X{ X D_text(x, y, "+", FALSE); X} X XdrawGalx(x, y, mag, type, color, nebsize) X int x, y; X double mag; X char type, *color; X long nebsize; /* -1 should give default size */ X{ X D_text(x, y, "@", FALSE); X} X XdrawClus(x, y, mag, type, color, nebsize) X int x, y; X double mag; X char type, *color; X long nebsize; /* -1 should give default size */ X{ X D_text(x, y, "%", FALSE); X} X XdrawNebu(x, y, mag, type, color, nebsize) X int x, y; X double mag; X char type, *color; X long nebsize; /* -1 should give default size */ X{ X D_text(x, y, "~", FALSE); X} X XdrawUnknown(x, y, mag, type, color, nebsize) X int x, y; X double mag; X char type, *color; X long nebsize; /* -1 should give default size */ X{ X D_text(x, y, "?", FALSE); X} X XdrawOther(x, y, mag, type, color, nebsize) X int x, y; X double mag; X char type, *color; X long nebsize; /* -1 should give default size */ X{ X D_text(x, y, "#", FALSE); X} X X/* Functions for areas, drawn as lines for now */ X/* Move to (x, y) to begin an area */ XD_areamove(x, y) X int x, y; X{ X D_move(x, y); X} X X/* Add a segment to the area border */ XD_areaadd(x, y) X int x, y; X{ X D_draw(x, y, SOLID); X} X X/* Fill the area, after adding the last segment */ XD_areafill(x, y) X int x, y; X{ X D_draw(x, y, SOLID); X} X X X/* Variables of positioning are here */ X#define L_TIL 220 X#define L_STIL 185 X X#define L_LMAR1 40 X#define L_LMAR2 65 X#define L_LTEXT 95 X#define L_RMAR1 205 X#define L_RMAR2 230 X#define L_RTEXT 260 X X#define L_LINE1 150 X#define L_LINE2 125 X#define L_LINE3 100 X#define L_LINE4 75 X#define L_LINE5 50 X#define L_LINE6 25 X X Xchartlegend(win) X mapwindow *win; X{ X char ras[20], dls[20], outstr[40]; X if (!title[0]) title = "LEGEND"; X rastr(ras, win->racen); X declstr(dls, win->dlcen); X X if (win->map_type != FULLPAGEMAP) { X sprintf(outstr, "(%s,%s lim: %2.1f)", ras, dls, win->maglim); X D_fontsize(TITLESIZE, TITLEFNT); D_text(L_LMAR1, L_TIL, title, FALSE); X D_fontsize(SUBTLSIZE, SUBTLFNT); D_text(L_LMAR1, L_STIL, outstr, FALSE); X X drawStar(L_LMAR2, L_LINE1, 0.0, 'S', " "); X D_fontsize(12, NAMEFNT); X D_text(L_LTEXT, L_LINE1,"<0.5", FALSE); X if (win->maglim >= 0.5) X { X drawStar(L_RMAR2, L_LINE1, 1.0, 'S', " "); X D_fontsize(10, NAMEFNT); X D_text( L_RTEXT, L_LINE1,"<1.5", FALSE); X } X if (win->maglim >= 1.5) X { X drawStar(L_LMAR2, L_LINE2, 2.0, 'S', " "); X D_fontsize( 9, NAMEFNT); X D_text(L_LTEXT, L_LINE2,"<2.5", FALSE); X } X if (win->maglim >= 2.5) X { X drawStar(L_RMAR2, L_LINE2, 3.0, 'S', " "); X D_fontsize( 8, NAMEFNT); X D_text(L_RTEXT, L_LINE2,"<3.5", FALSE); X } X if (win->maglim >= 3.5) X { X drawStar(L_LMAR2, L_LINE3, 4.0, 'S', " "); X D_fontsize( 7, NAMEFNT); X D_text(L_LTEXT, L_LINE3,"<4.5", FALSE); X } X if (win->maglim > 4.5) X { X drawStar(L_RMAR2, L_LINE3, 5.0, 'S', " "); X D_fontsize( 6, NAMEFNT); X D_text(L_RTEXT, L_LINE3,">4.5", FALSE); X } X X D_fontsize(10, NAMEFNT); X D_text(L_LTEXT,L_LINE4,"double", FALSE); X drawStar(L_LMAR2,L_LINE4,2.0, 'D', " "); X D_fontsize(10, NAMEFNT); X D_text(L_RTEXT,L_LINE4,"variable",FALSE); X drawStar(L_RMAR2,L_LINE4,2.0, 'V', " "); X X D_fontsize(10, NAMEFNT); X D_text(L_LTEXT,L_LINE5,"planet", FALSE); X drawPlan(L_LMAR2,L_LINE5,1.0, ' ', " ", (long) -1); X X D_fontsize(10, NAMEFNT); X D_text(L_RTEXT,L_LINE5,"galaxy", FALSE); X drawGalx(L_RMAR2,L_LINE5,1.0, 'E', " ", (long) -1); X drawGalx(L_RMAR1,L_LINE5,1.0, 'S', " ", (long) -1); X X D_fontsize(10, NAMEFNT); X D_text(L_LTEXT,L_LINE6,"nebula", FALSE); X drawNebu(L_LMAR2,L_LINE6,1.0, 'D', " ", (long) -1); X drawNebu( L_LMAR1,L_LINE6,1.0, 'P', " ", (long) -1); X X D_fontsize(10, NAMEFNT); X D_text(L_RTEXT,L_LINE6,"cluster", FALSE); X drawClus(L_RMAR2,L_LINE6,1.0, 'O', " ", (long) -1); X drawClus(L_RMAR1,L_LINE6,1.0, 'G', " ", (long) -1); X } else { X D_fontsize(8, NAMEFNT); X X sprintf(outstr, "%s: %s,%s lim: %2.1f", title, ras, dls, win->maglim); X D_text(15, 15, outstr, FALSE); X } X} X X X END_OF_FILE if test 17440 -ne `wc -c <'starchart/stardsp.c'`; then echo shar: \"'starchart/stardsp.c'\" unpacked with wrong size! fi # end of 'starchart/stardsp.c' fi if test -f 'starchart/starsample.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'starchart/starsample.c'\" else echo shar: Extracting \"'starchart/starsample.c'\" \(14975 characters\) sed "s/^X//" >'starchart/starsample.c' <<'END_OF_FILE' X/* X * Driver skeleton X */ X X/* X * Produced for starchart 3.0 by Craig Counterman Jan, 1989 X * X * Copyright (c) 1990 by Craig Counterman. All rights reserved. X * X * This software may be redistributed freely, not sold. X * This copyright notice and disclaimer of warranty must remain X * unchanged. X * X * No representation is made about the suitability of this X * software for any purpose. It is provided "as is" without express or X * implied warranty, to the extent permitted by applicable law. X * X */ X Xstatic char rcsid[]="$Header: starsample.c,v 2.3 90/02/19 17:56:56 ccount Exp $"; X X#include <stdio.h> X#include <math.h> X#ifndef SYSV X#include <strings.h> X#else X#include <string.h> X#endif X#include <ctype.h> X#include "star3.h" X X/* Externs */ Xextern int g_argc; Xextern char **g_argv; X Xextern char *title; /* Title of page */ X Xextern mapwindow *mapwin[MAXWINDOWS]; Xextern int numwins; X Xextern int cur_function; Xextern int cur_map_type; Xextern int cur_map_tag; Xextern char *cur_tag_field; X X/* Set by initxform X One could use elements of the mapwindow structure, X but these should be faster for the current window */ Xextern double xf_west, xf_east, xf_north, xf_south, xf_bottom; Xextern int xf_xcen, xf_ycen, xf_ybot; Xextern int xf_w_left, xf_w_right, xf_w_top, xf_w_bot; Xextern double xf_c_scale; X X/* Scale multiplier, minimum, X mangitude change, maximum, for thumbnail,*/ X#define THSMUL 1.2 X#define THSMIN 12.0 X#define THMADJ 2.5 X#define THMMAX 5.0 X X X/* Exports */ X X/* The variables in the first few lines MUST be set by driver */ Xmapwindow fullpage = { X 880, 700, 20, 65, /* width, height, x and y offsets */ X 5.9, 2.0, 2.05, /* default limiting mags for glyph, name, label */ X X/* The next several variables SHOULD be set by the driver, X but are only used by the driver */ X FULLPAGEMAP, /* Type of map: THUMBNAIL may have X some restrictions */ X 0, /* May be used by driver for whatever */ X "String", /* May be used by driver for whatever */ X X/* The next several variables may be set by the driver, but the main routines X may reset them (and the driver routines may then override that) */ X SANSONS, /* Projection mode */ X FALSE, FALSE, /* Draw grids */ X 0.5, 5.0, /* grid step size */ X 0.0, 0.0, /* grid origin */ X X FALSE, /* Invert (flip north south) */ X}; X X/* The variables in the first few lines MUST be set by driver */ Xmapwindow mainmap = { X 880, 500, 20, 265, /* width, height, x and y offsets */ X 5.9, 2.0, 2.05, /* default limiting mags for glyph, name, label */ X X/* The next several variables SHOULD be set by the driver, X but are only used by the driver */ X MAINMAP, /* Type of map: THUMBNAIL may have X some restrictions */ X 0, /* May be used by driver for whatever */ X "String", /* May be used by driver for whatever */ X X/* The next several variables may be set by the driver, but the main routines X may reset them (and the driver routines may then override that) */ X SANSONS, /* Projection mode */ X FALSE, FALSE, /* Draw grids */ X 0.5, 5.0, /* grid step size */ X 0.0, 0.0, /* grid origin */ X X FALSE, /* Invert (flip north south) */ X}; X X X/* The variables in the first few lines MUST be set by driver */ Xmapwindow thumbmap = { X 480, 195, 420, 35, /* width, height, x and y offsets */ X 3.0+THMADJ, 1.0+THMADJ, 2.05+THMADJ, X /* default limiting mags for glyph, name, label */ X X/* The next several variables SHOULD be set by the driver, X but are only used by the driver */ X THUMBNAIL, /* Type of map: THUMBNAIL may have X some restrictions */ X 0, /* May be used by driver for whatever */ X "String", /* May be used by driver for whatever */ X X/* The next several variables may be set by the driver, but the main routines X may reset them (and the driver routines may then override that) */ X SANSONS, /* Projection mode */ X FALSE, FALSE, /* Draw grids */ X 0.5, 5.0, /* grid step size */ X 0.0, 0.0, /* grid origin */ X X FALSE, /* Invert (flip north south) */ X}; X X/* h & v tick text controls */ Xint htick_lim = 2; Xint htext_lim = 80; Xint htext_xoff = 2; Xint htext_yoff = 17; Xint vtick_lim = 2; Xint vtext_lim = 20; Xint vtext_xoff = 24; Xint vtext_yoff = 0; X X/* Scale multiplier, minimum, X mangitude change, maximum, for thumbnail,*/ Xdouble th_smul=THSMUL; Xdouble th_smin=THSMIN; Xdouble th_madj=THMADJ; Xdouble th_mmax=THMMAX; X X#define MAX(a,b) ((a)>(b)?(a):(b)) X#define MIN(a,b) ((a)<(b)?(a):(b)) X X X/* Device control argument */ XD_control_arg(s) Xchar *s; X{ X int i = 0; X int c; X X while (c = s[i++]) switch (c) { X default: X break; X } X} X X/* Open the device */ XD_open() X{ X X return TRUE ; /* open successful */ X} X X X/* Close the device */ XD_close() X{ X} X X X/* Move to (x, y) */ XD_move(x, y) X int x, y; X{ X} X X X/* Draw a line of style line_style from the current point to (x, y) */ X/* Note, this replaces vecdraw vecdrawdot and vecdrawhyph */ XD_draw(x, y, line_style) X int x, y; X int line_style; /* SOLID, DOTTED, DASHED, etc. */ X{ X} X/* This routine is encouraged to look at the extern cur_funtion X and change the line style drawn as desired */ X X X/* Move to (x1, y1) then draw a line of style line_style to (x2, y2) */ XD_movedraw(x1, y1, x2, y2, line_style) X int x1, y1, x2, y2; X int line_style; /* SOLID, DOTTED, DASHED, etc. */ X{ X} X X X/* Set the color to be used for lines and text */ X/* color_str is a 2 char (+ '\0') string containing X a specification for a color, X e.g. "G2" for the color of a star of spectral class G2, or "r7" for X red, level seven. The interpretation of the color string is left to X the device driver */ XD_color(color_str) X char *color_str; X{ X switch (color_str[0]) { X case 'O': X break; X case 'B': X break; X case 'A': X break; X case 'F': X break; X case 'G': X break; X case 'K': X break; X case 'M': X break; X case 'R': X case 'N': X case 'S': X break; X case 'r': X case 'g': X case 'b': X case 'y': X case 'c': X case 'p': X case 'o': X case 'w': X break; X case ' ': X default: X break; X } X} X X X/* Set the font and font size to be used for text. */ X/* Note order of args */ XD_fontsize(fsize, font) X int fsize; /* Size of font */ X int font; /* e.g. TIMES, HELV, TIMES+ITALIC */ X{ X} X/* This routine is encouraged to look at the extern cur_funtion X and change the font used as desired */ X X X/* Display text string str at x,y, in current font and font size. X if star_lbl is TRUE, string is a star label, use X greek characters (if possible) */ XD_text(x, y, str, star_lbl) X int x, y; X char *str; X int star_lbl; X{ X if (star_lbl) { X /* remove leading spaces */ X while (*str == ' ') str++; X /* can't display greek characters */ X } X} X X X/* Return input coordinate in device coords where there are pointing devices */ XD_inxy(x, y) X int *x, *y; X{ X} X X X/* Put non-displayed comment in output. Allowed in postscript, but X few other drivers will be able to support this. */ XD_comment(str) X char *str; X{ X/* X fprintf(stderr, "%s\n", str); X*/ X} X X X/** XHigher level functions X**/ X X/* Point sizes for font calls */ X#define TITLESIZE 16 X#define SUBTLSIZE 12 X#define NAMESIZE 10 X#define LBLSIZE 8 X#define MAGSIZE 8 X X/* Fonts for font calls */ X#define NAMEFNT TIMESROMAN X#define LBLFNT HELV X#define MAGFNT COURIER X#define TITLEFNT TIMESBOLD X#define SUBTLFNT TIMESROMAN X Xint x_nameoffset = 10, y_nameoffset = 0; Xint x_lbloffset = 0, y_lbloffset = 10; Xint x_magoffset = 7, y_magoffset = -15; X X X/* Interface Function */ X/* Draw object at x, y. properties set by other parameters */ Xdrawobj(x, y, mag, type, color_str, label_field, con_str, obj_name, X comment_str, file_line, X draw_glyph, draw_text, use_lbl, use_name, use_mag) X X int x, y; X double mag; /* Magnitude of object */ X char *type; /* 2 chars, object code and subcode */ X char *color_str; /* 2 chars, spectral type for stars, X color code otherwise */ X char *label_field; /* 2 chars, Bayer or flamsteed for stars, X size in seconds for nebulae and X planets */ X char *con_str; /* 3 chars, the constellation the object is in */ X char *obj_name; /* Name of object */ X char *comment_str; /* Comment field */ X char *file_line; /* The full line from the file, X containing the above if it is in X standard format */ X int draw_glyph; /* Draw object symbol */ X int draw_text; /* Draw text */ X int use_lbl; /* Label object with the label_field string */ X int use_name; /* Label object with the obj_name string */ X int use_mag; /* Label object with a 2 or 3 character string X containing the magnitude * 10 without X decimal point */ X{ X char magstr[10]; X X/*fprintf(stderr, "%d %d %f <%s> <%s> <%s> <%s> <%s> <%s> <%s>\n", x, y, mag, X type, color_str, label_field, con_str, obj_name, comment_str, X file_line);*/ X X if (draw_glyph) switch(type[0]) X { X case 'S': drawStar(x,y,mag,type[1],color_str); X break; X X/* If your driver can't support scaled nebulae, galaxies, etc., X you can remove the calls to size_obj, and the corresponding X argument in the function */ X X case 'P': drawPlan(x,y,mag,type[1],color_str, size_obj(label_field)); X break; X case 'N': drawNebu(x,y,mag,type[1],color_str, size_obj(label_field)); X break; X case 'G': drawGalx(x,y,mag,type[1],color_str, size_obj(label_field)); X break; X case 'C': drawClus(x,y,mag,type[1],color_str, size_obj(label_field)); X break; X case 'U': X drawUnknown(x,y,mag,type[1],color_str, size_obj(label_field)); X break; X case 'O': X drawOther(x,y,mag,type[1],color_str, size_obj(label_field)); X break; X case 'V': X default: X break; X } X/* X * use name or label X */ X if (draw_text) { X if (use_name && obj_name[0]) { X D_fontsize(NAMESIZE, NAMEFNT); X D_text(x+x_nameoffset, y+y_nameoffset, obj_name, FALSE); X } else if (use_lbl && X ((label_field[0] != ' ') || (label_field[1] != ' '))) { X D_fontsize(LBLSIZE, LBLFNT); X D_text(x+x_lbloffset, y+y_lbloffset, label_field, TRUE); X } X/* If you want to magnitude label other objects, change this */ X if (use_mag && (type[0] == 'S')) { X sprintf(magstr, "%02d", (int)(mag*10.0+0.5)); X D_fontsize(MAGSIZE, MAGFNT); X D_text(x+x_magoffset, y+y_magoffset, magstr, FALSE); X } X } X} X XdrawStar(x, y, mag, type, color) X int x, y; X double mag; X char type, *color; X{ X switch ((int)(mag+0.5)) X { X case -1: X case 0: X case 1: X case 2: X case 3: X case 4: X break; X default: X break; X } X} X XdrawPlan(x, y, mag, pcode, color, plansize) X int x,y; X double mag; X char pcode, *color; X long plansize; /* -1 should give default size */ X{ X int diam; X X diam = (int) (plansize/(3600.*xf_c_scale)+.5); X if (diam < 10) /* size of object in device coords */ X diam = 10; X} X XdrawGalx(x, y, mag, type, color, nebsize) X int x, y; X double mag; X char type, *color; X long nebsize; /* -1 should give default size */ X{ X int diam; X X diam = (int) (nebsize/(3600.*xf_c_scale)+.5); X if (diam < 10) /* size of object in device coords */ X diam = 10; X} X XdrawClus(x, y, mag, type, color, nebsize) X int x, y; X double mag; X char type, *color; X long nebsize; /* -1 should give default size */ X{ X int diam; X X diam = (int) (nebsize/(3600.*xf_c_scale)+.5); X if (diam < 10) /* size of object in device coords */ X diam = 10; X} X XdrawNebu(x, y, mag, type, color, nebsize) X int x, y; X double mag; X char type, *color; X long nebsize; /* -1 should give default size */ X{ X int diam; X X diam = (int) (nebsize/(3600.*xf_c_scale)+.5); X if (diam < 10) /* size of object in device coords */ X diam = 10; X} X XdrawUnknown(x, y, mag, type, color, nebsize) X int x, y; X double mag; X char type, *color; X long nebsize; /* -1 should give default size */ X{ X int diam; X X diam = (int) (nebsize/(3600.*xf_c_scale)+.5); X if (diam < 10) /* size of object in device coords */ X diam = 10; X} X XdrawOther(x, y, mag, type, color, nebsize) X int x, y; X double mag; X char type, *color; X long nebsize; /* -1 should give default size */ X{ X int diam; X X diam = (int) (nebsize/(3600.*xf_c_scale)+.5); X if (diam < 10) /* size of object in device coords */ X diam = 10; X} X X X X/* Variables of positioning are here */ X#define L_TIL 675 X#define L_STIL 575 X X#define L_LMAR1 150 X#define L_LMAR2 175 X#define L_LTEXT 200 X#define L_RMAR1 600 X#define L_RMAR2 625 X#define L_RTEXT 650 X X#define L_LINE1 400 X#define L_LINE2 350 X#define L_LINE3 300 X#define L_LINE4 250 X#define L_LINE5 200 X#define L_LINE6 150 X X Xchartlegend(win) X mapwindow *win; X{ X char ras[20], dls[20], outstr[40]; X if (!title[0]) title = "LEGEND"; X rastr(ras, win->racen); X declstr(dls, win->dlcen); X X if (win->map_type != FULLPAGEMAP) { X sprintf(outstr, "(%s,%s lim: %2.1f)", ras, dls, win->maglim); X D_fontsize(TITLESIZE, TITLEFNT); D_text(L_LMAR1, L_TIL, title, FALSE); X D_fontsize(SUBTLSIZE, SUBTLFNT); D_text(L_LMAR1, L_STIL, outstr, FALSE); X X drawStar(L_LMAR2, L_LINE1, 0.0, 'S', " "); X D_fontsize(12, NAMEFNT); X D_text(L_LTEXT, L_LINE1,"<0.5", FALSE); X if (win->maglim >= 0.5) X { X drawStar(L_RMAR2, L_LINE1, 1.0, 'S', " "); X D_fontsize(10, NAMEFNT); X D_text( L_RTEXT, L_LINE1,"<1.5", FALSE); X } X if (win->maglim >= 1.5) X { X drawStar(L_LMAR2, L_LINE2, 2.0, 'S', " "); X D_fontsize( 9, NAMEFNT); X D_text(L_LTEXT, L_LINE2,"<2.5", FALSE); X } X if (win->maglim >= 2.5) X { X drawStar(L_RMAR2, L_LINE2, 3.0, 'S', " "); X D_fontsize( 8, NAMEFNT); X D_text(L_RTEXT, L_LINE2,"<3.5", FALSE); X } X if (win->maglim >= 3.5) X { X drawStar(L_LMAR2, L_LINE3, 4.0, 'S', " "); X D_fontsize( 7, NAMEFNT); X D_text(L_LTEXT, L_LINE3,"<4.5", FALSE); X } X if (win->maglim > 4.5) X { X drawStar(L_RMAR2, L_LINE3, 5.0, 'S', " "); X D_fontsize( 6, NAMEFNT); X D_text(L_RTEXT, L_LINE3,">4.5", FALSE); X } X X D_fontsize(10, NAMEFNT); X D_text(L_LTEXT,L_LINE4,"double", FALSE); X drawStar(L_LMAR2,L_LINE4,2.0, 'D', " "); X D_fontsize(10, NAMEFNT); X D_text(L_RTEXT,L_LINE4,"variable",FALSE); X drawStar(L_RMAR2,L_LINE4,2.0, 'V', " "); X X D_fontsize(10, NAMEFNT); X D_text(L_LTEXT,L_LINE5,"planet", FALSE); X drawPlan(L_LMAR2,L_LINE5,1.0, ' ', " ", (long) -1); X X D_fontsize(10, NAMEFNT); X D_text(L_RTEXT,L_LINE5,"galaxy", FALSE); X drawGalx(L_RMAR2,L_LINE5,1.0, 'E', " ", (long) -1); X drawGalx(L_RMAR1,L_LINE5,1.0, 'S', " ", (long) -1); X X D_fontsize(10, NAMEFNT); X D_text(L_LTEXT,L_LINE6,"nebula", FALSE); X drawNebu(L_LMAR2,L_LINE6,1.0, 'D', " ", (long) -1); X drawNebu( L_LMAR1,L_LINE6,1.0, 'P', " ", (long) -1); X X D_fontsize(10, NAMEFNT); X D_text(L_RTEXT,L_LINE6,"cluster", FALSE); X drawClus(L_RMAR2,L_LINE6,1.0, 'O', " ", (long) -1); X drawClus(L_RMAR1,L_LINE6,1.0, 'G', " ", (long) -1); X } else { X D_fontsize(8, NAMEFNT); X sprintf(outstr, "%s: %s,%s lim: %2.1f", title, ras, dls, win->maglim); X D_text(75, 105, outstr, FALSE); X } X} X X X X X END_OF_FILE if test 14975 -ne `wc -c <'starchart/starsample.c'`; then echo shar: \"'starchart/starsample.c'\" unpacked with wrong size! fi # end of 'starchart/starsample.c' fi echo shar: End of archive 10 \(of 32\). cp /dev/null ark10isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 32 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0