/*! \file lib/gis/parser_script.c \brief GIS Library - Argument parsing functions (script) (C) 2001-2009, 2011 by the GRASS Development Team This program is free software under the GNU General Public License (>=v2). Read the file COPYING that comes with GRASS for details. \author Original author CERL \author Soeren Gebbert added Dec. 2009 WPS process_description document */ #include #include #include "parser_local_proto.h" /*! \brief Generate Python script-like output */ void G__script(void) { FILE *fp = stdout; char *type; fprintf(fp, "#!/usr/bin/env python3\n"); fprintf(fp, "############################################################################\n"); fprintf(fp, "#\n"); fprintf(fp, "# MODULE: %s_wrapper\n", G_program_name()); fprintf(fp, "# AUTHOR(S): %s\n", G_whoami()); fprintf(fp, "# PURPOSE: Wrapper for %s\n", G_program_name()); fprintf(fp, "# COPYRIGHT: (C) %s by %s, and the GRASS Development Team\n", GRASS_VERSION_DATE, G_whoami()); fprintf(fp, "#\n"); fprintf(fp, "# This program is free software; you can redistribute it and/or modify\n"); fprintf(fp, "# it under the terms of the GNU General Public License as published by\n"); fprintf(fp, "# the Free Software Foundation; either version 2 of the License, or\n"); fprintf(fp, "# (at your option) any later version.\n"); fprintf(fp, "#\n"); fprintf(fp, "# This program is distributed in the hope that it will be useful,\n"); fprintf(fp, "# but WITHOUT ANY WARRANTY; without even the implied warranty of\n"); fprintf(fp, "# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"); fprintf(fp, "# GNU General Public License for more details.\n"); fprintf(fp, "#\n"); fprintf(fp, "############################################################################\n\n"); fprintf(fp, "# %%module\n"); if (st->module_info.label) fprintf(fp, "# %% label: %s\n", st->module_info.label); if (st->module_info.description) fprintf(fp, "# %% description: %s\n", st->module_info.description); if (st->module_info.keywords) { int i; for(i = 0; i < st->n_keys; i++) { fprintf(fp, "# %% keyword: %s\n", st->module_info.keywords[i]); } } fprintf(fp, "# %%end\n"); if (st->n_flags) { struct Flag *flag; for (flag = &st->first_flag; flag; flag = flag->next_flag) { fprintf(fp, "# %%flag\n"); fprintf(fp, "# %% key: %c\n", flag->key); if (flag->suppress_required) fprintf(fp, "# %% suppress_required: yes\n"); if (flag->label) fprintf(fp, "# %% label: %s\n", flag->label); if (flag->description) fprintf(fp, "# %% description: %s\n", flag->description); if (flag->guisection) fprintf(fp, "# %% guisection: %s\n", flag->guisection); fprintf(fp, "# %%end\n"); } } if (st->n_opts) { struct Option *opt; for (opt = &st->first_option; opt; opt = opt->next_opt) { switch (opt->type) { case TYPE_INTEGER: type = "integer"; break; case TYPE_DOUBLE: type = "double"; break; case TYPE_STRING: type = "string"; break; default: type = "string"; break; } fprintf(fp, "# %%option\n"); fprintf(fp, "# %% key: %s\n", opt->key); fprintf(fp, "# %% type: %s\n", type); fprintf(fp, "# %% required: %s\n", opt->required ? "yes" : "no"); fprintf(fp, "# %% multiple: %s\n", opt->multiple ? "yes" : "no"); if (opt->options) fprintf(fp, "# %% options: %s\n", opt->options); if (opt->key_desc) fprintf(fp, "# %% key_desc: %s\n", opt->key_desc); if (opt->label) fprintf(fp, "# %% label: %s\n", opt->label); if (opt->description) fprintf(fp, "# %% description: %s\n", opt->description); if (opt->descriptions) fprintf(fp, "# %% descriptions: %s\n", opt->descriptions); if (opt->answer) fprintf(fp, "# %% answer: %s\n", opt->answer); if (opt->gisprompt) fprintf(fp, "# %% gisprompt: %s\n", opt->gisprompt); if (opt->guisection) fprintf(fp, "# %% guisection: %s\n", opt->guisection); if (opt->guidependency) fprintf(fp, "# %% guidependency: %s\n", opt->guidependency); fprintf(fp, "# %%end\n"); } } fprintf(fp, "\nimport sys\n"); fprintf(fp, "\nimport grass.script as gs\n"); fprintf(fp, "\ndef main():"); fprintf(fp, "\n # put code here\n"); fprintf(fp, "\n return 0\n"); fprintf(fp, "\nif __name__ == \"__main__\":"); fprintf(fp, "\n options, flags = gs.parser()"); fprintf(fp, "\n sys.exit(main())\n"); }