static int init(void) { Rast__init_window(); /* no histograms */ R__.want_histogram = 0; /* set the write type for floating maps */ R__.fp_type = getenv("GRASS_FP_DOUBLE") ? DCELL_TYPE : FCELL_TYPE; /* Set masking flag unknown */ R__.auto_mask = -1; R__.mask_fd = -1; R__.nbytes = sizeof(CELL); R__.compression_type = getenv("GRASS_INT_ZLIB") ? 2 : 1; G_add_error_handler(Rast__error_handler, NULL); initialized = 1; return 0; }
void execute(expr_list * ee) { int verbose = isatty(2); expr_list *l; int count, n; setup_region(); exprs = ee; G_add_error_handler(error_handler, NULL); for (l = ee; l; l = l->next) { expression *e = l->exp; const char *var; if (e->type != expr_type_binding && e->type != expr_type_function) G_fatal_error("internal error: execute: invalid type: %d", e->type); if (e->type != expr_type_binding) continue; var = e->data.bind.var; if (!overwrite_flag && check_output_map(var)) G_fatal_error(_("output map <%s> exists. To overwrite, use the --overwrite flag"), var); } for (l = ee; l; l = l->next) { expression *e = l->exp; const char *var; expression *val; initialize(e); if (e->type != expr_type_binding) continue; var = e->data.bind.var; val = e->data.bind.val; e->data.bind.fd = open_output_map(var, val->res_type); } setup_maps(); count = rows * depths; n = 0; G_init_workers(); for (current_depth = 0; current_depth < depths; current_depth++) for (current_row = 0; current_row < rows; current_row++) { if (verbose) G_percent(n, count, 2); for (l = ee; l; l = l->next) { expression *e = l->exp; int fd; evaluate(e); if (e->type != expr_type_binding) continue; fd = e->data.bind.fd; put_map_row(fd, e->buf, e->res_type); } n++; } G_finish_workers(); if (verbose) G_percent(n, count, 2); for (l = ee; l; l = l->next) { expression *e = l->exp; const char *var; expression *val; int fd; if (e->type != expr_type_binding) continue; var = e->data.bind.var; val = e->data.bind.val; fd = e->data.bind.fd; close_output_map(fd); e->data.bind.fd = -1; if (val->type == expr_type_map) { if (val->data.map.mod == 'M') { copy_cats(var, val->data.map.idx); copy_colors(var, val->data.map.idx); } copy_history(var, val->data.map.idx); } else create_history(var, val); } G_unset_error_routine(); }
int main(int argc, char **argv) { dbString stmt; dbDriver *driver; dbHandle handle; int ret; FILE *fd; int error; error = 0; parse_command_line(argc, argv); /* read from file or stdin ? */ if (parms.input && strcmp(parms.input, "-") != 0) { fd = fopen(parms.input, "r"); if (fd == NULL) { G_fatal_error(_("Unable to open file <%s>: %s"), parms.input, strerror(errno)); } } else { fd = stdin; } /* open DB connection */ db_init_string(&stmt); driver = db_start_driver(parms.driver); if (driver == NULL) { G_fatal_error(_("Unable to start driver <%s>"), parms.driver); } db_init_handle(&handle); db_set_handle(&handle, parms.database, parms.schema); if (db_open_database(driver, &handle) != DB_OK) G_fatal_error(_("Unable to open database <%s>"), parms.database); G_add_error_handler(error_handler, driver); if (parms.sql) { /* parms.sql */ db_set_string(&stmt, parms.sql); ret = db_execute_immediate(driver, &stmt); } else { /* parms.input */ while (get_stmt(fd, &stmt)) { if (stmt_is_empty(&stmt)) continue; G_debug(3, "sql: %s", db_get_string(&stmt)); ret = db_execute_immediate(driver, &stmt); if (ret != DB_OK) { if (parms.i) { /* ignore SQL errors */ G_warning(_("Error while executing: '%s'"), db_get_string(&stmt)); error++; } else { G_fatal_error(_("Error while executing: '%s'"), db_get_string(&stmt)); } } } } db_close_database(driver); db_shutdown_driver(driver); exit(error ? EXIT_FAILURE : EXIT_SUCCESS); }