home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / m / morpho.zip / morpho / src / vgdiskse / vgdiskse.c < prev    next >
C/C++ Source or Header  |  1992-08-18  |  11KB  |  424 lines

  1.  /*
  2.   * Khoros: $Id$
  3.   */
  4.  
  5. #if !defined(lint) && !defined(SABER)
  6. static char rcsid[] = "Khoros: $Id$";
  7. #endif
  8.  
  9.  /*
  10.   * $Log$
  11.   */
  12.  
  13. /*
  14.  *----------------------------------------------------------------------
  15.  *
  16.  * Copyright 1992, University of New Mexico.  All rights reserved.
  17.  * Permission to copy and modify this software and its documen-
  18.  * tation only for internal use in your organization is hereby
  19.  * granted, provided that this notice is retained thereon and
  20.  * on all copies.  UNM makes no representations as to the sui-
  21.  * tability and operability of this software for any purpose.
  22.  * It is provided "as is" without express or implied warranty.
  23.  * 
  24.  * UNM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  25.  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
  26.  * NESS.  IN NO EVENT SHALL UNM BE LIABLE FOR ANY SPECIAL,
  27.  * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY OTHER DAMAGES WHAT-
  28.  * SOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
  29.  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
  30.  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER-
  31.  * FORMANCE OF THIS SOFTWARE.
  32.  * 
  33.  * No other rights, including, for example, the right to redis-
  34.  * tribute this software and its documentation or the right to
  35.  * prepare derivative works, are granted unless specifically
  36.  * provided in a separate license agreement.
  37.  *---------------------------------------------------------------------
  38.  */
  39.  
  40. #include "unmcopyright.h"        /* Copyright 1992 by UNM */
  41.  
  42. /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  43.  >>>>
  44.  >>>>         File Name: vgdiskse.c
  45.  >>>>
  46.  >>>>      Program Name: vgdiskse
  47.  >>>>
  48.  >>>>      Program Desc: 
  49.  >>>>    
  50.  >>>>    Creates a image of a disk with the origin at the center
  51.  >>>>    
  52.  >>>>    
  53.  
  54.  >>>>            Author: Greg Donohoe
  55.  >>>>
  56.  >>>> Date Last Updated: Tue Aug 18 09:19:37 1992
  57.  >>>>
  58.  >>>>          Routines: main- the main program for vgdiskse
  59.  >>>>          gw_usage - gives usage of the program
  60.  >>>>          gw_args  - gets arguments of program from command line
  61.  >>>>
  62.  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
  63.  
  64.  
  65. #include "vgdiskse.h"
  66.  
  67.  
  68. /****************************************************************
  69.  *
  70.  * Routine Name:  main program for vgdiskse
  71.  *
  72.  *       Input:  
  73.  *          -o  output image 
  74.  *          -origin  origin at center 
  75.  *          -t  Selects data type of output image
  76.  *        'integer' (choose Integer data storage type),
  77.  *         or 'byte' (choose Byte data storage type)
  78.  *         
  79.  *
  80.  *
  81.  *          [-trigger] trigger input
  82.  *          [-d] Diameter of circle (in pixels)  (value >= 0.0)
  83.  *          [-x] X coordinate of origin 
  84.  *          [-y] Y coordinate of origin 
  85.  *          [-b] Background level 
  86.  *          [-f] Foreground level 
  87.  *
  88.  *
  89.  *
  90.  ****************************************************************/
  91.  
  92.  
  93. main(argc, argv)
  94. int argc;
  95. char *argv[];
  96. {
  97.  
  98. /* -main_variable_list */
  99. struct xvimage *image;
  100. int type;
  101. /* -main_variable_list_end */
  102.  
  103.     program = VStrcpy(argv[0]);
  104.     ac = argc;
  105.     av = argv;
  106.  
  107.     khoros_init();
  108.  
  109.     gw_get_args();
  110.  
  111. /* -main_before_lib_call */
  112. if(check_args())exit(1);
  113.  
  114. if(!vget_type(&type, vgdiskse->t_toggle)){
  115.    fprintf(stderr,"vgdiskse:  Invalid data type specified\n");
  116.    exit(1);
  117. }
  118.  
  119. if(type!=VFF_TYP_1_BYTE && type!=VFF_TYP_4_BYTE){
  120.    fprintf(stderr,"%s:  Illegal image data type specified.\n",program);
  121.    exit(1);
  122. }
  123.  
  124. /* -main_before_lib_call_end */
  125.  
  126. /* -main_library_call */
  127. if(! lvgdiskse( &image,type, vgdiskse->b_float, vgdiskse->f_float,
  128. vgdiskse->origin_logic, vgdiskse->x_float,vgdiskse->y_float, vgdiskse->d_float))
  129.   {
  130.       (void) fprintf(stderr, "lvgdiskse Failed\n");
  131.       exit(1);
  132.   }
  133. /* -main_library_call_end */
  134.  
  135. /* -main_after_lib_call */
  136. writeimage(vgdiskse->o_file,image);
  137. /* -main_after_lib_call_end */
  138.  
  139.  
  140.     khoros_close();
  141. }
  142.  
  143.  
  144. /****************************************************************
  145. *
  146. * Routine Name:  gw_usage 
  147. *
  148. *
  149. * Purpose:  prints out the usage for vgdiskse 
  150. *
  151. * Input:  none 
  152. *
  153. * Output:  none 
  154. *
  155. * Written By:  automatically generated by ghostwriter
  156. *
  157. ****************************************************************/
  158.  
  159.  
  160. gw_usage()
  161. {
  162.     fprintf(stderr, "vgdiskse :\n");
  163.     fprintf(stderr, "\t\n");
  164.     fprintf(stderr, "\tCreates a image of a disk with the origin at the center\n");
  165.     fprintf(stderr, "\t\n");
  166.     fprintf(stderr, "\t\n");
  167.  
  168. /* -usage_additions */
  169. /* -usage_additions_end */
  170.  
  171.     fprintf(stderr,"\t-o  output image  (outfile)\n");
  172.     fprintf(stderr,"\t-origin  origin at center  (boolean)\n");
  173.     fprintf(stderr, "\t-t  ");
  174.     fprintf(stderr, "Selects data type of output image\n  ");
  175.     fprintf(stderr, "\t\t'integer'  (choose Integer data storage type),\n");
  176.     fprintf(stderr, "\t\t or 'byte'  (choose Byte data storage type)\n");
  177.     fprintf(stderr, "\n");
  178.     fprintf(stderr, "\n");
  179.     fprintf(stderr, "\n");
  180.     fprintf(stderr,"\t[-trigger]  trigger input (infile) [null]\n");
  181.     fprintf(stderr,"\t[-d]  Diameter of circle (in pixels) (float, >= 0.0) [15]\n");
  182.     fprintf(stderr,"\t[-x]  X coordinate of origin (float) [8]\n");
  183.     fprintf(stderr,"\t[-y]  Y coordinate of origin (float) [8]\n");
  184.     fprintf(stderr,"\t[-b]  Background level (float) [-1]\n");
  185.     fprintf(stderr,"\t[-f]  Foreground level (float) [0]\n");
  186.     fprintf(stderr, " \n");
  187.     fprintf(stderr, "\n");
  188.     fprintf(stderr, "\t[-V] Gives the version for vgdiskse\n");
  189.     fprintf(stderr, "\t[-U] Gives the usage for vgdiskse\n");
  190.     fprintf(stderr, "\t[-P] Prompts for command line options\n");
  191.     fprintf(stderr, "\t[-A [file1]] Creates the answer file called vgdiskse.ans or file1 \n");
  192.     fprintf(stderr, "\t[-a [file1]] Uses vgdiskse.ans or file1 as the answer file \n\n\n");
  193.  
  194. }
  195.  
  196.  
  197. /****************************************************************
  198. *
  199. * Routine Name:  gw_getargs 
  200. *
  201. *
  202. * Purpose:  gets arguments off command line for vgdiskse
  203. *
  204. * Input:  none 
  205. *
  206. * Output:  none 
  207. *
  208. * Written By:  automatically generated by ghostwriter
  209. *
  210. ****************************************************************/
  211.  
  212.  
  213. gw_get_args()
  214. {
  215.  
  216. char    *o_pstr = 
  217.     "\nEnter: (o) output image \n        {outfile}: "; 
  218. char    *origin_pstr = 
  219.     "\nEnter: (origin) origin at center \n        {boolean, (y/n) }: "; 
  220. char    *t_pstr = "\nEnter: (t) Selects data type of output image -- \n      \t\t'integer' (choose Integer data storage type)\n\t\tor 'byte' (choose Byte data storage type)\n     : "; 
  221. char    *trigger_pstr = 
  222.     "\nEnter: (trigger) trigger input \n        {infile}: "; 
  223. char    *d_pstr = 
  224.     "\nEnter: (d) Diameter of circle (in pixels) \n        {float, >= 0.0 [15.000000] }: "; 
  225. char    *x_pstr = 
  226.     "\nEnter: (x) X coordinate of origin \n        {float [8.000000] }: "; 
  227. char    *y_pstr = 
  228.     "\nEnter: (y) Y coordinate of origin \n        {float [8.000000] }: "; 
  229. char    *b_pstr = 
  230.     "\nEnter: (b) Background level \n        {float [-1.000000] }: "; 
  231. char    *f_pstr = 
  232.     "\nEnter: (f) Foreground level \n        {float [0.000000] }: "; 
  233. char  answer_file[512], temp[512];
  234.  
  235.  
  236.  
  237. int    fid = -1,
  238.     error, query, ok, count;
  239.     int prompt_flag = FALSE;
  240.  
  241.     /*
  242.      * print version if necessary
  243.      */
  244.     vgparml(fid, "-V", "noprompt", &query, 0, 0, &error);
  245.     if (error == 0)
  246.     {
  247.         printf ("\n%s: %s: Version %d.%d\n\n",
  248.         "vgdiskse", RELEASE_NAME, RELEASE_MAJOR, RELEASE_MINOR);
  249.         exit(1);
  250.     }
  251.  
  252.     /*
  253.      * print usage if necessary
  254.      */
  255.     vgparml(fid, "-U", "noprompt", &query, 0, 0, &error);
  256.     if (error == 0)
  257.     {
  258.         gw_usage();
  259.         exit(1);
  260.     }
  261.  
  262.     /*
  263.      * see if interactive prompting is desired
  264.      */
  265.     vgparml(fid, "-P", "noprompt", &query, 0, 0, &error);
  266.     if (error == 0)
  267.         prompt_flag = TRUE;
  268.  
  269.     /*
  270.      * see if answer file is to be used
  271.      */
  272.     vgparms(fid, "-a", "noprompt", answer_file, 0, 0, &error);
  273.     if (error == 0)
  274.     {
  275.          if (VStrlen(answer_file) == 0)
  276.         sprintf(answer_file, "vgdiskse.ans");
  277.          while (fid < 0)
  278.          {
  279.         if ((fid = open(answer_file, O_RDONLY, 0666))== -1)
  280.         {
  281.             fprintf(stderr, "vgdiskse: can't open answer file \"%s\"",
  282.                 answer_file); 
  283.             fprintf(stderr, "please re-enter: ");
  284.             (void) gets(answer_file);
  285.             if (VStrlen(answer_file) == 0)
  286.             sprintf(answer_file, "vgdiskse.ans");
  287.         }
  288.  
  289.          }
  290.  
  291.     }
  292.  
  293.     /*
  294.      * allocate the vgdiskse structure
  295.      */
  296.     vgdiskse = (vgdiskse_struct *) 
  297.            calloc((unsigned)1, (unsigned) sizeof (vgdiskse_struct));
  298.  
  299.     /*
  300.      * get required arguments for vgdiskse
  301.      */
  302.     if (prompt_flag == TRUE)
  303.         fprintf(stderr,"\nRequired Arguments:\n\n");
  304.  
  305.     if (!(vgdiskse->o_flag = vget_outfile(fid, prompt_flag,
  306.             "-o", o_pstr, &(vgdiskse->o_file))
  307. ))
  308.     {
  309.         if (prompt_flag == TRUE)
  310.         {
  311.         while(!(vgdiskse->o_flag))
  312.         {
  313.             fprintf(stderr, "\t\to is required, please re-enter: \n");
  314.             vgdiskse->o_flag = vget_outfile(fid, prompt_flag,
  315.             "-o", o_pstr, &(vgdiskse->o_file))
  316. ;
  317.  
  318.         }
  319.         }
  320.         else
  321.         {
  322.         fprintf(stderr, "Error: '-o' is a required argument\n");
  323.         gw_usage();
  324.         exit(1);
  325.         }
  326.     }
  327.  
  328.     if (!(vgdiskse->origin_flag = vget_logic(fid, prompt_flag,
  329.             "-origin", origin_pstr, &(vgdiskse->origin_logic), 0)))
  330.     {
  331.         if (prompt_flag == TRUE)
  332.         {
  333.         while(!(vgdiskse->origin_flag))
  334.         {
  335.             fprintf(stderr, "\t\torigin is required, please re-enter: \n");
  336.             vgdiskse->origin_flag = vget_logic(fid, prompt_flag,
  337.             "-origin", origin_pstr, &(vgdiskse->origin_logic), 0);
  338.  
  339.         }
  340.         }
  341.         else
  342.         {
  343.         fprintf(stderr, "Error: '-origin' is a required argument\n");
  344.         gw_usage();
  345.         exit(1);
  346.         }
  347.     }
  348.  
  349.  
  350.     /*
  351.      * get required toggles for vgdiskse
  352.      */
  353.     if (prompt_flag == TRUE)
  354.     {
  355.         ok = FALSE;
  356.         while(!ok)
  357.         {
  358.         vgdiskse->t_flag = vget_string(fid, prompt_flag,
  359.         "-t", t_pstr, &(vgdiskse->t_toggle),
  360.         "integer");
  361.  
  362.         if ((((strcmp(vgdiskse->t_toggle, "integer") == 0)) || 
  363.              ((strcmp(vgdiskse->t_toggle, "byte") == 0))) &&
  364.              (vgdiskse->t_flag))
  365.               ok = TRUE;
  366.         else
  367.         {
  368.             fprintf(stderr, "\nt is a required argument.\n");
  369.         }
  370.         }
  371.     }
  372.     else
  373.     {
  374.         vgdiskse->t_flag = vget_string(fid, prompt_flag,
  375.         "-t", t_pstr, &(vgdiskse->t_toggle),
  376.         "integer");
  377.  
  378.         if ((((strcmp(vgdiskse->t_toggle, "integer") != 0)) && 
  379.              ((strcmp(vgdiskse->t_toggle, "byte") != 0))) ||
  380.              (!(vgdiskse->t_flag)))
  381.         {
  382.             fprintf(stderr, "t is a required argument.\n");
  383.             fprintf(stderr, "\n");
  384.             gw_usage();
  385.             exit(0);
  386.         }
  387.     }
  388.  
  389.     /*
  390.      * get optional arguments for vgdiskse
  391.      */
  392.     if (prompt_flag == TRUE)
  393.        fprintf(stderr,"\nOptional Arguments:\n\n");
  394.  
  395.     vgdiskse->trigger_flag = vget_infile(fid, prompt_flag,
  396.     "-trigger", trigger_pstr, &(vgdiskse->trigger_file))
  397. ;
  398.  
  399.     vgdiskse->d_flag = vget_float(fid, prompt_flag,
  400.     "-d", d_pstr, &(vgdiskse->d_float),
  401.     15.000000, 1.000000, 1.000000);
  402.  
  403.     vgdiskse->x_flag = vget_float(fid, prompt_flag,
  404.     "-x", x_pstr, &(vgdiskse->x_float),
  405.     8.000000, 0.000000, 0.000000);
  406.  
  407.     vgdiskse->y_flag = vget_float(fid, prompt_flag,
  408.     "-y", y_pstr, &(vgdiskse->y_float),
  409.     8.000000, 0.000000, 0.000000);
  410.  
  411.     vgdiskse->b_flag = vget_float(fid, prompt_flag,
  412.     "-b", b_pstr, &(vgdiskse->b_float),
  413.     -1.000000, 0.000000, 0.000000);
  414.  
  415.     vgdiskse->f_flag = vget_float(fid, prompt_flag,
  416.     "-f", f_pstr, &(vgdiskse->f_float),
  417.     0.000000, 0.000000, 0.000000);
  418.  
  419.  
  420. }
  421.  
  422.  
  423.  
  424.