home *** CD-ROM | disk | FTP | other *** search
/ Collection of Education / collectionofeducationcarat1997.iso / SCIENCE / STAGES12.ZIP / INPUTS.C < prev    next >
Text File  |  1991-02-25  |  34KB  |  1,258 lines

  1. #include <stdio.h>
  2. #if PC
  3.   #include <bios.h>
  4. #endif
  5. #include "main.h"
  6. #include "header.h"
  7. #include "pcwins.h"
  8.  
  9. /* files included:
  10.            getipfile
  11.         getstgdat
  12.                 getCyclelen
  13.         getseqdat
  14.         getusrstr
  15.         getusrstrlist
  16.         getusrcells
  17.         getusrdays
  18.         getfileip
  19.         parsecellstr
  20.         getcellstg
  21. */        
  22.  
  23. /********************************/
  24. /*     function: getipfile    */
  25. /********************************/
  26. /* takes user input as filename and if nonzero length, tries to
  27.    open a file of that name.  if fopen fails, asks the user to
  28.    specify another file to try, or to specify no file desired.
  29.    returns 0 if valid file
  30.           !0 if no file was opened */
  31. getipfile (ipfil, pfp, iptype, mandatoryq, ftype)
  32.   char *ipfil;        /* the name of the file finally opened    */
  33.   FILE **pfp;
  34.   char iptype;        /* filename supplied (F) or entered    */
  35.               /* interactively (I)            */
  36.   int mandatoryq;    /* if=1, then file must be specified    */
  37.   char ftype;        /* C=cycle stage dat
  38.                I=input file (batch mode)
  39.                S=cell sequence dat            */
  40. {
  41.   int i, go, help, len, quit;
  42.   char fname[MAXLEN], c;
  43. #if PC
  44.   int val;
  45. #endif
  46.  
  47.   if (iptype == 'F')
  48.     /* filename supplied in var ipfile */
  49.     strcpy(fname, ipfil);
  50.   else {
  51.     /* get a filename interactively;
  52.        user-friendly asking-message printed by calling function    */
  53. #if PC
  54.     val = getusrstr(fname);
  55.     if (HARDCOPY)
  56.       fprintf(stdprn, "%s\n", fname);
  57.     if (val) return(val);
  58. #else
  59.     getusrstr(fname);
  60. #endif
  61.     if (FILEq && FILECOPY)
  62.       fprintf(fpout, "%s\n", fname);
  63.   }
  64.  
  65.   /* strip input string of leading/trailing whitespace */
  66.   stripwhitesp(fname);
  67.  
  68.   go = 1;
  69.   while (go && ((*pfp = fopen(fname, "r"))==NULL)) {
  70.     /* maybe it wasn't a filename i/p but a char-accel */
  71.     if ((strcmp(fname, "q")==0) || (strcmp(fname, "Q")==0))
  72.       go = 0;
  73.     else {
  74.       if (fname[0]=='?') {
  75.     help = 1;
  76.     if ((ftype=='C') || (ftype=='S'))
  77.       helpipfil(ftype);
  78.     else
  79.       helpipfil1(ipfil);
  80.       } else
  81.     help = 0;
  82.  
  83. #if PC
  84.       msgwin();
  85.       gotoxy(1, 1);
  86.       clreol1(3);
  87.       gotoxy(1, 1);
  88.       if (! help) {
  89.     printf("%s%s: File ", tab, ERRSTR);
  90.     printf("<%s> does not exist.", fname);
  91.     gotoxy(1, 2);
  92.       }
  93.       cprintf("%sPlease enter a new filename", tab);
  94.       if (HARDCOPY) {
  95.     if (! help) {
  96.       fprintf(stdprn, "\n\t%s: File ", ERRSTR);
  97.       fprintf(stdprn, "<%s> does not exist.\n", fname);
  98.     }
  99.     fprintf(stdprn, "\tPlease enter a new filename");
  100.       }
  101. #else
  102.       if (! help) {
  103.     printf("\n\t%s: File ", ERRSTR);
  104.     printf("<%s> does not exist.\n", fname);
  105.       }
  106.       printf("\tPlease enter a new filename");
  107. #endif
  108.       if (FILEq && FILECOPY) {
  109.     if (! help) {
  110.       fprintf(fpout, "\n\t%s: File ", ERRSTR);
  111.       fprintf(fpout, "<%s> does not exist.\n", fname);
  112.     }
  113.     fprintf(fpout, "\tPlease enter a new filename");
  114.       }
  115.       
  116.       if (! mandatoryq) {
  117.     /* not mandatory that a file be entered: `no file' option ok */
  118. #if PC
  119.     cprintf(", or");
  120.     gotoxy(1, 3);
  121.     cprintf("%stype <return> if no file is desired.", tab);
  122.     if (HARDCOPY) {
  123.       fprintf(stdprn, ", or\n\ttype <return> ");
  124.       fprintf(stdprn, "if no file is desired.\n");
  125.     }
  126. #else
  127.     printf(", or\n\ttype <return> ");
  128.     printf("if no file is desired.\n");
  129. #endif
  130.     if (FILEq && FILECOPY) {
  131.       fprintf(fpout, ", or\n\ttype <return> ");
  132.       fprintf(fpout, "if no file is desired.\n");
  133.     }
  134.       } else {    /* mandatoryq */
  135.     /* must have a filename specified */
  136. #if PC
  137.     cprintf(".");
  138.     if (HARDCOPY)
  139.       fprintf(stdprn, ":\n");
  140. #else
  141.     printf(":\n");
  142. #endif
  143.     if (FILEq && FILECOPY)
  144.       fprintf(fpout, ":\n");
  145.       } /* if mandatoryq */
  146.     
  147. #if PC
  148.       clrscr1(2);
  149.       cprintf("%sNew filename:", tab);
  150.       gotoxy(1, 2);
  151.       highvideo();
  152.       cprintf("%s%c%c%c ", tab2, HBAR, HBAR, RTRI);
  153.       normvideo();
  154.       if (HARDCOPY)
  155.     fprintf(stdprn, "\t\t==> ");
  156. #else
  157.       printf("\t\t==> ");
  158. #endif
  159.       if (FILEq && FILECOPY)
  160.     fprintf(fpout, "\t\t==> ");
  161.     
  162.       /* get new filename */
  163. #if PC
  164.       val = getusrstr(fname);
  165.       if (HARDCOPY)
  166.     fprintf(stdprn, "%s\n", fname);
  167.       if (val) return(val);
  168. #else
  169.       getusrstr(fname);
  170.       if (FILEq && FILECOPY)
  171.     fprintf(fpout, "%s\n", fname);
  172. #endif
  173.  
  174.       len = strlen(fname);
  175.       if (!mandatoryq && !len)
  176.     go = 0;
  177.     } /* if ! Q */
  178.   } /* while */
  179.  
  180.   if (*pfp != NULL) {        /* good file opened */
  181. #if PC
  182.     /* not enough room in msgwin() with "file not found.." error msgs
  183.        to print out this message on the pc terminal.  oh well */
  184.     if (HARDCOPY)
  185.       fprintf(stdprn, "\n\tFile <%s> opened successfully.\n", fname);
  186. #else
  187.     printf("\n\tFile <%s> opened successfully.\n", fname);
  188. #endif
  189.     if (FILEq && FILECOPY)
  190.       fprintf(fpout, "\n\tFile <%s> opened successfully.\n", fname);
  191.     strcpy(ipfil, fname);
  192.     return(0);
  193.   } else {
  194.     /* only other way out of while loop was if go=0 */
  195.     switch (ftype) {
  196.  
  197.     case 'I':            /* no batch file necessary */
  198. #if PC
  199.       clrscr1(3);
  200.       cprintf("%sNo batch file opened; input must be entered interactively.", tab);
  201.       if (HARDCOPY)
  202.     fprintf(stdprn, "\n\tNo batch file opened; input must be entered interactively.\n");
  203. #else
  204.       printf("\n\tNo batch file opened; input must be entered interactively.\n");
  205. #endif
  206.       if (FILEq && FILECOPY)
  207.     fprintf(fpout, "\n\tNo batch file opened; input must be entered interactively.\n");
  208.       break;
  209.  
  210.     case 'C':        /* stage file mandatory but user defers */
  211. #if PC
  212.       clrscr1(3);
  213.       cprintf("%sNo animal stage length data file opened.", tab);
  214.       if (HARDCOPY)
  215.     fprintf(stdprn, "\tNo animal stage length data file opened.\n");
  216. #else
  217.       printf("\tNo animal stage length data file opened.\n");
  218. #endif
  219.       if (FILEq && FILECOPY)
  220.     fprintf(fpout, "\tNo animal stage length data file opened.\n");
  221.       break;
  222.  
  223.     case 'S':        /* sequence file mandatory but user defers */
  224. #if PC
  225.       cprintf("%sNo animal cell sequence data file opened.", tab);
  226.       if (HARDCOPY)
  227.     fprintf(stdprn, "\tNo animal cell sequence data file opened.\n");
  228. #else
  229.       printf("\tNo animal cell sequence data file opened.\n");
  230. #endif
  231.       if (FILEq && FILECOPY)
  232.     fprintf(fpout, "\tNo animal cell sequence data file opened.\n");
  233.       break;
  234.     } /* switch */
  235.     return(1);
  236.   } /* *pfp==NULL */
  237. } /* getipfile */
  238.  
  239. /********************************/
  240. /*     function: getstgdat    */
  241. /********************************/
  242. /* reads from the file xxx.stg to get the cycle stage data */
  243. getstgdat (stgfil, fpstg)
  244.   char *stgfil;
  245.   FILE *fpstg;
  246. {
  247.   int i, j;        /* char array indices            */
  248.   int diff;        /* tmp var                */
  249.   char c;        /* temp char var             */ 
  250.   
  251.   i = 0;
  252.   j = 0;
  253.   numrefs = 0;
  254.   while ((c=getc(fpstg)) != '*') {
  255.     if (j >= (MAXLEN-1)) {
  256. #if PC
  257.       clrscr1(3);
  258.       cprintf("%s%s:  Reference line too long in file ", tab, ERRSTR);
  259.       cprintf("<%s>: truncated", stgfil);
  260.       if (HARDCOPY) {
  261.     fprintf(stdprn, "\n\t%s:  Reference line too long ", ERRSTR);
  262.     fprintf(stdprn, "in file <%s>:", stgfil);
  263.     fprintf(stdprn, "\n\t%s   Line truncated.\n", NULLERRSTR);
  264.       }
  265. #else
  266.       printf("\t%s:  Reference line too long in file ", ERRSTR);
  267.       printf("<%s>:\n", stgfil);
  268.       printf("\t%s   Line truncated.\n\n", NULLERRSTR);
  269. #endif
  270.       if (FILEq && FILECOPY) {
  271.     fprintf(fpout, "\n\t%s:  Reference line too long ", ERRSTR);
  272.     fprintf(fpout, "in file <%s>:", stgfil);
  273.     fprintf(fpout, "\n\t%s   Line truncated.\n", NULLERRSTR);
  274.       }
  275.       while ((c=getc(fpstg)) != '\n');    /* get to end of line    */
  276.     } /* if j */
  277.  
  278.     if (c == '\n') {
  279.       ref[i][j] = '\0';        /* finish this ref line */
  280.       i++;            /* start new ref line     */
  281.       j = 0;            /* reset j for new line */
  282.       if (i <= MAXLINES)
  283.     numrefs++;        /* incr # ref lines     */
  284.     } else {
  285.       ref[i][j++] = c;        /* build ref info line    */
  286.     }
  287.   } /* while */
  288.  
  289.   if ((diff=(i - MAXLINES)) > 0) {
  290. #if PC
  291.     msgwin();
  292.     gotoxy(1, 2);
  293.     cprintf("%s%s:  Too many reference ", tab, ERRSTR);
  294.     cprintf("lines in file <%s>:", stgfil);
  295.     gotoxy(1, 3);
  296.     cprintf("%s%s   %d line"