[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