[Coco] Can I pass command line parameters to a cmoc program fromos9 ?

gene heskett gheskett at shentel.net
Sat Jul 22 15:29:52 EDT 2023


On 7/22/23 14:31, coco--- via Coco wrote:
> All
> 
> Wanted to know how to pass a parameter from the OS9
> command line into a CMOC generated program. Found no
> usefull examples in the CMOC manual so I found a program
> source example on the internet and replaced <stdio.h>
> and <stdlib.h> with <stdarg.h> and <coco.h> that gives me
> this program. between the ========== cut lines.
> ========================================
> #include <stdarg.h>
> #include <coco.h>
> #include <getopt.h>
> 
> /* Flag set by `--verbose'. */
> static int verbose_flag;
> 
> int
> main (int argc, char *argv[])
> {
>    while (1)
>      {
>        static struct option long_options[] =
>      {
>        /* This option set a flag. */
>        {"verbose", no_argument,       &verbose_flag, 1},
>        /* These options don't set a flag.
>           We distinguish them by their indices. */
>        {"blip",    no_argument,       0, 'b'},
>        {"slip",    no_argument,       0, 's'},
>        {0,         0,                 0,  0}
>      };
>        /* getopt_long stores the option index here. */
>        int option_index = 0;
> 
>        int c = getopt_long (argc, argv, "bs",
>                 long_options, &option_index);
> 
>        /* Detect the end of the options. */
>        if (c == -1)
>      break;
> 
>        switch (c)
>      {
>      case 0:
>        /* If this option set a flag, do nothing else now. */
>        if (long_options[option_index].flag != 0)
>          break;
>        printf ("option %s", long_options[option_index].name);
>        if (optarg)
>          printf (" with arg %s", optarg);
>        printf ("\n");
>        break;
>      case 'b':
>        puts ("option -b\n");
>        break;
>      case 's':
>        puts ("option -s\n");
>        break;
>      case '?':
>        /* getopt_long already printed an error message. */
>        break;
> 
>      default:
>        abort ();
>      }
>      }
> 
>    if (verbose_flag)
>      puts ("verbose flag is set");
> 
>    /* Print any remaining command line arguments (not options). */
>    if (optind < argc)
>      {
>        printf ("non-option ARGV-elements: ");
>        while (optind < argc)
>      printf ("%s ", argv[optind++]);
>        putchar ('\n');
>      }
> 
>    return 0;
> }
> ========================================
The cmoc manual must be violating the basic premise of the C language if 
it does not tell you how to pass arguments on the command line. That is 
bsic to the C syntax.

Given a command line that looks like this:

nameofprogram argument-1 argunent-2 argument-3 (etc4 etc5)

That should decode to argv(0)=name of program, argv(1)=argument-1 from 
the command line, argv(2)=argument_2, on to the actual size of the 
program specified input buffer size in bytes.

Its been yonks since I last wrote anything in C so its possible the () 
above might be [], And since its a basic function, these arguments 
should be available for your programs interpretation on a global basis 
anyplace in the program.

> 
> Attempting to compile this program gives me the error.
> 
> cmoc --os9 cc.c
> cc.c:4:10: fatal error: getopt.h: No such file or directory
>      4 | #include <getopt.h>
did you put getopt.h in the /include directory? If not, you must use the 
full /path/to/it.
>        |          ^~~~~~~~~~
> compilation terminated.
> cmoc: fatal error: preprocessor failed.
> 
> Which I assume means that there is no <getopt.h> as part
> of CMOC does that mean that there is no way to pass parameters to
> a cmoc program from os9 ?

You certainly can in C, but I've never used CMOC.

Cheers, Gene Heskett.
-- 
"There are four boxes to be used in defense of liberty:
  soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author, 1940)
If we desire respect for the law, we must first make the law respectable.
  - Louis D. Brandeis
Genes Web page <http://geneslinuxbox.net:6309/>



More information about the Coco mailing list