c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * CDDL HEADER START
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * The contents of this file are subject to the terms of the
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Common Development and Distribution License (the "License").
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * You may not use this file except in compliance with the License.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * See the License for the specific language governing permissions
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * and limitations under the License.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * When distributing Covered Code, include this CDDL HEADER in each
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * If applicable, add the following below this CDDL HEADER, with the
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * fields enclosed by brackets "[]" replaced with your own identifying
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * information: Portions Copyright [yyyy] [name of copyright owner]
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * CDDL HEADER END
4edd44c51fec55142bfb7fb1ee7aaa13a910a80fjp * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Use is subject to license terms.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#pragma ident "%Z%%M% %I% %E% SMI"
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* The maximal line length. Longer lines may not be parsed OK. */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* LINTED E_STATIC_UNUSED */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* Array for arguments of the actuall command */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* Allocated size for my_argv */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* Actuall length of my_argv */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* Array for subcommands */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* my_comc length */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* Input filename specified by the -f flag */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Batch mode means reading file, stdin or libtecla input. Shell input is
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * a non-batch mode.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* Array of all possible flags */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* getopt variables */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwextern char *optarg;
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* Fill the flags array: */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwoptions_parse(int argc, char *argv[], const char *options)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw switch (c) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (-1);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* This is relevant only if options starts with ':': */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (-1);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* Unset all flags */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwstatic void
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) memset(flags, 0, FLAG_ALPHABET_SIZE * sizeof (flag_t));
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* determine which subcommand is argv[0] and execute its handler */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if (argc == 0) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (0);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (-1);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw for (i = 0; i < my_comc; i++) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* We found it. Now execute the handler. */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if (optind < 0) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (-1);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (rc);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (-1);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Read another parameter from "from", up to a space char (unless it
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * is quoted). Duplicate it to "to". Remove quotation, if any.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw size_t buf_size = 20; /* initial length of the buffer. */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (0);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (-1);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Split a string to a parameter array and append it to the specified position
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * of the array
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw for (cur = line; len = get_param(¶m, cur); cur += len) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw my_argv_size * sizeof (char *));
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* quotation not closed */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (-1);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (0);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* Clean all aruments from my_argv. Don't deallocate my_argv itself. */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwstatic void
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw for (i = 0; i < my_argc; i++) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* This is libtecla tab completion. */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * WordCompletion *cpl; const char *line; int word_end are
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * passed from the CPL_MATCH_FN macro.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* We go on even if quotation is not closed */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Beginning of the line: */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if (my_argc == 0) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw for (i = 0; i < my_comc; i++)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Is there something to complete? */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Subcommand name: */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw for (i = 0; i < my_comc; i++)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Long options: */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw for (i = 0; i < my_comc; i++)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* No such subcommand, or not enough memory: */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Short option or thesis must precede, so this is safe: */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* "--" is a valid completion */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (0);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* libtecla subshell: */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (-1);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) gl_customize_completion(gl_h, NULL, command_complete);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw for (;;) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if (my_argc == 0) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (rc);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* Interpretation of a source file given by "name" */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if (f == NULL) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (-1);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* We do not wan't "\n" as the last parameter */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if (my_argc != 0 && strcmp(my_argv[my_argc-1], "\n") == 0) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) fprintf(stderr, gettext("Line continuation missing\n"));
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) fclose(f);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (rc);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Initialize the engine.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * comc, comv is the array of subcommands and its length,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * argc, argv are arguments to main to be scanned for -f filename and
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * the length og the array,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * is_batch_mode passes to the caller the information if the
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * batch mode is on.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Return values:
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * 0: ... OK
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * IDMAP_ENG_ERROR: error and message printed already
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * IDMAP_ENG_ERROR_SILENT: error and message needs to be printed
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwengine_init(int comc, cmd_ops_t *comv, int argc, char **argv,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw my_argv = (char **)calloc(my_argv_size, sizeof (char *));
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw switch (c) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (0);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* finitialize the engine */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (0);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Interpret the subcommands defined by the arguments, unless
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * my_batch_mode was set on in egnine_init.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (rc);