home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / EFFO / forum23.lzh / f23b / SOFTWARE / PDRAW / IOread.c < prev    next >
Text File  |  1992-01-15  |  8KB  |  302 lines

  1. /***  IOread.c   ***/
  2.  
  3. #include <stdio.h>
  4. #include <strings.h>
  5. #include <math.h>
  6. #include "header.h"
  7. #ifndef OSK
  8. #include "Xdefs.h"
  9. #endif
  10.  
  11. /* Read the command line */
  12. fileopen(argc,argv)
  13. int argc;
  14. char **argv;
  15.    FILE     *optionfile, *fopen();
  16.    char     *strcpy();
  17.    double   atof();
  18.    pfileptr insert_pfile();
  19.    extern   char   printer[MAXCHAR];
  20.    extern   double scale;
  21.    extern   int    hiddenline, nosort, equalscale, postscript;
  22.    int      i,FILEFOUND;
  23. #ifdef OSK
  24.    char     *progname;                      /* program name */
  25.    char     *geometry;                      /* window geometry */
  26.    progname     = argv[0];
  27. #endif
  28.  
  29. #ifndef  OSK
  30.    /* initialize general X arguments */
  31.    progname     = argv[0];
  32.    font_name    = NULL;
  33.    geometry     = NULL;
  34.    display_name = NULL;
  35.    border_color = NULL;
  36.    fore_color   = NULL;
  37.    back_color   = NULL;
  38.    mouse_color  = NULL;
  39.    icon_color   = NULL;
  40.    reverse      = 0;
  41.    border_width = 0;
  42. #endif
  43.  
  44.    FILEFOUND = FALSE;
  45.    for (i=1; i < argc; i++) {     /* Parse Line */
  46.       if (argv[i][0] == '=') {
  47.          geometry = argv[i];
  48.          continue;
  49.          }
  50. #ifdef X
  51.       if (!strncmp(argv[i],"-g",2)) {             /* new geometry */
  52.          if (++i >= argc) usage(progname);
  53.          geometry = argv[i];
  54.          continue;
  55.          }
  56.       if (index(argv[i],':')!=NULL) {             /* host:display */
  57.          strncpy(display_name,argv[i],sizeof(display_name));
  58.          continue;
  59.          }
  60.       if (!strncmp(argv[i],"-d",2)) {             /* new display */
  61.          if (++i >= argc) usage(progname);
  62.          display_name = argv[i];
  63.          continue;
  64.          }
  65.       if (strcmp(argv[i],"-rv") == 0) {           /* reverse display */
  66.          reverse = 1;
  67.          continue;
  68.          }
  69.       if (strcmp(argv[i],"-bw") == 0) {           /* border width */
  70.          if (++i >= argc) usage(progname);
  71.          border_width = atoi(argv[i]);
  72.          continue;
  73.          }
  74.       if (strcmp(argv[i],"-bd") == 0) {           /* border color */
  75.          if (++i >= argc) usage(progname);
  76.          border_color = argv[i];
  77.          continue;
  78.          }
  79.       if (strcmp(argv[i],"-fg") == 0) {           /* foreground color */
  80.          if (++i >= argc) usage(progname);
  81.          fore_color = argv[i];
  82.          continue;
  83.          }
  84.       if (strcmp(argv[i],"-bg") == 0) {           /* background color */
  85.          if (++i >= argc) usage(progname);
  86.          back_color = argv[i];
  87.          continue;
  88.          }
  89.       if (strcmp(argv[i],"-fn") == 0) {           /* font type */
  90.          if (++i >= argc) usage(progname);
  91.          font_name  = argv[i];
  92.          continue;
  93.          }
  94. #endif
  95.       if (strcmp(argv[i],"-h") == 0) {            /* hiddenline */
  96.          hiddenline = ON;
  97.          fprintf(stdout,"   Commands: hiddenline      = ON\n");
  98.          continue;
  99.          }
  100.       if (strcmp(argv[i],"-nosort") == 0) {       /* sorting */
  101.          nosort = ON;
  102.          fprintf(stdout,"   Commands: nosort          = ON\n");
  103.          continue;
  104.          }
  105.       if (strcmp(argv[i],"-e") == 0) {            /* equalscale */
  106.          equalscale = OFF;
  107.          fprintf(stdout,"   Commands: equalscale      = OFF\n");
  108.          continue;
  109.          }
  110.       if (strncmp(argv[i],"-pr",3) == 0) {        /* printplot */
  111.          printplot  = ON;
  112.          fprintf(stdout,"   Commands: printplot       = ON\n");
  113.          continue;
  114.          }
  115.       if (strcmp(argv[i],"-noplot") == 0) {       /* noplot */
  116.          noplot     = ON;
  117.          fprintf(stdout,"   Commands: noplot          = ON\n");
  118.          continue;
  119.          }
  120.       if (strcmp(argv[i],"-ps") == 0) {           /* postscript */
  121.          postscript = OFF;
  122.          fprintf(stdout,"   Commands: postscript      = OFF\n");
  123.          continue;
  124.          }
  125.       if (strcmp(argv[i],"-s") == 0) {            /* scale factor */
  126.          if (++i >= argc) usage(progname);
  127.          scale = atof(argv[i]);
  128.          if (scale < 0.1 || scale > 1) {
  129.             scale = 1.0;
  130.             fprintf(stdout,"   Warning : Invalid scale -");
  131.             fprintf(stdout," scale reset to %f\n",scale);
  132.          }
  133.          fprintf(stdout,"   Commands: scale           = %f\n",scale);
  134.          continue;
  135.          }
  136.       if (strcmp(argv[i],"-v") == 0)  {           /* view */
  137.          if (++i >= argc) usage(progname);
  138.          eyepos.x = atof(argv[i]);
  139.          if (++i >= argc) usage(progname);
  140.          eyepos.y = atof(argv[i]);
  141.          if (++i >= argc) usage(progname);
  142.          eyepos.z = atof(argv[i]);
  143.          fprintf(stdout,"   Commands: eye-view        = %f %f %f\n",
  144.          eyepos.x,eyepos.y,eyepos.z);
  145.          continue;
  146.          }
  147.       if (strcmp(argv[i],"-o") == 0) {            /* options file */
  148.          if (++i >= argc) usage(progname);
  149.          if ((optionfile =  fopen(argv[i],"r")) == NULL) {
  150.            fprintf(stderr,"cat: can't open %s\n", argv[i]);
  151.            usage(progname);
  152.            }
  153.          else {
  154.            fprintf(stdout,"   Commands: options-file    = \"%s\"\n",argv[i]);
  155.            parse(optionfile);
  156.            fclose(optionfile);
  157.          }
  158.          continue;
  159.          }
  160.       if (argv[i][0] == '-' && argv[i][1] == 'P') {     /* Printer */
  161.          strcpy(printer,argv[i]); 
  162.          fprintf(stdout,"   Commands: Printer         = %s\n",printer);
  163.          continue;
  164.          }
  165.       if (argv[i][0] == '-') usage(progname);
  166.       if (argv[i][0] != '-' && argv[i][0] != '=') {
  167.          FILEFOUND = TRUE;
  168.          insert_pfile(argv[i]);
  169.          }
  170.    }
  171.    if (FILEFOUND == FALSE) usage(progname);
  172.    /* exit(0); */
  173. }
  174.  
  175. fileread(fp,format)
  176. FILE *fp;
  177. int  format;
  178. {
  179.    if (format == CONV) {
  180.       fileread_conv(fp);
  181.    } else if (format == PIF) {
  182.       fileread_pif(fp);
  183.    } else {
  184.       fprintf(stderr,"Error! Cant read format %d\n",format);
  185.       exit(-1);
  186.    }
  187. }
  188.  
  189. fileread_conv(fp)
  190. FILE *fp;
  191. {
  192.    float   rdfloat();
  193.    nodeptr insert_node();
  194.    segmptr insert_segm();
  195.  
  196.    extern  double   xmax,xmin,ymax,ymin,zmax,zmin;
  197.  
  198.    segmptr S;
  199.    nodeptr Nd;
  200.    double  x, y, z;
  201.    int     ncurves, npts, i, m;
  202.  
  203.    xmin = rdfloat(fp);   
  204.    xmax = rdfloat(fp);   
  205.    ymin = rdfloat(fp);     
  206.    ymax = rdfloat(fp);     
  207.    zmin = rdfloat(fp);     
  208.    zmax = rdfloat(fp);   
  209.    ncurves = (int)rdfloat(fp); 
  210.    if (ncurves <= 0) pltexit(1);
  211.       for (m=0; m<ncurves; m++) {
  212.       S    = insert_segm();
  213.       npts = (int)rdfloat(fp); 
  214.       if (npts<=0) pltexit(2);
  215.       for (i=0; i<npts; i++) {
  216.          x = rdfloat(fp);  
  217.          y = rdfloat(fp);   
  218.          z = rdfloat(fp);
  219.          Nd= insert_node(x,y,z,S);
  220.       }
  221.    }
  222. }
  223.  
  224. float rdfloat(fp)  /* Read a float; skip the whole line if failed */
  225. FILE *fp;
  226. {
  227.    int n;
  228.    char c;
  229.    float x;
  230.  
  231.    /* try to read a floating variable */
  232.    /* if fail, then skip the whole line */
  233.    while ( (n=fscanf(fp,"%f",&x)) != EOF && n!=1) {
  234.       if (n!=1)
  235.          while ( (c=getc(fp)) != EOF && c != '\n');
  236.       }
  237.  
  238.    if (n==EOF) pltexit(0);
  239.  
  240.    return(x);
  241. }
  242.  
  243. pltexit(mesg)
  244. int mesg;
  245. {
  246.    switch (mesg) {
  247.    case 0 : fprintf(stderr,"Error: Incorrect Format!\n");
  248.             exit(1); break;
  249.    case 1 : fprintf(stderr,"Error: Plot Curves <= 0\n");
  250.             exit(1); break;
  251.    case 2 : fprintf(stderr,"Error: Plot Points <= 0\n");
  252.             exit(1); break;
  253.    default: fprintf(stderr,"Error: Incorrect Format!\n");
  254.             exit(1); break;
  255.    }
  256. }
  257.  
  258. usage (program)
  259. char *program;
  260. {
  261.        /* -s for single curve format */
  262.       fprintf(stderr,"usage: %s [-v vx vy vz] [-o options-file] [-Pprinter] \
  263. [-s scale] [-e] [-h] [-nosort] [-noplot] [-print] [-ps] infile1 infile2 ...\n", program);
  264.       exit(1);
  265. }
  266.  
  267. /* try to open a file for reading - this could be a compressed file */
  268. open_file(fname,fp,format)
  269. char *fname;
  270. FILE **fp;
  271. int  *format;
  272. {
  273.    char cmd[MAXCHAR];
  274.    char *sprintf();
  275.  
  276.    /* try to open a file for reading */
  277.    if ((strlen(fname) > 2) && (!strcmp(fname + strlen(fname) - 2,".Z"))) {
  278. #ifdef OSK
  279.       sprintf(cmd,"compr -d %s >>>/nil",fname);
  280. #else
  281.       sprintf(cmd,"uncompress -c %s",fname);
  282. #endif
  283.       *fp = popen(cmd,"r");
  284.    } else {
  285.       *fp = fopen(fname,"r");
  286.    }
  287.  
  288.    if (*fp==NULL) {
  289.       fprintf(stderr,"cat : couldn't open file %s\n",fname);
  290.       exit(-1);
  291.    }
  292.  
  293.    /* try to determine IO format */
  294.    *format = CONV;
  295.    if ((strlen(fname) > 4) && (!strcmp(fname + strlen(fname) - 4,".pif"))) 
  296.       *format = PIF;
  297.    if ((strlen(fname) > 6) && (!strcmp(fname + strlen(fname) - 6,".pif.Z"))) 
  298.       *format = PIF;
  299. }
  300.  
  301.