Take a look at this example that is working
#include "Fileio.ch
IF (nHandle := FCREATE(VERSION_FILE, FC_NORMAL)) == -1
? VERSION_FILE + " cannot be created:", FERROR()
BREAK
ELSE
cString := "// " + cBm_now + CRLF
cString += "func BM_Versio()" + CRLF
cString += " return " + DOUBLE_QUOTE + cBm_now + DOUBLE_QUOTE + CRLF
FWRITE(nHandle, cString)
FCLOSE(nHandle)
? "Wrote to: " + VERSION_FILE
ENDIF
On Wed, Mar 10, 2010 at 12:03 PM, CarozoDeQuilmes <[email protected]
> wrote:
> Hi, in an old project, I have a little C ansi program (found in Internet or
> in the MiniGUI, I don't remmeber) that execute and executable file and
> redirect the standard output to file.
>
> The C program run fine and trap Standard Output from another C program that
> made:
>
> fprintf( stdout , 'hello' );
>
> but I can't redirect (or trap) the "?" (or QOUT) command from a Harbour
> program.
>
> Is this true or I'm wrong ???
>
> Thanks in advance and sorry by my bad english
>
> CdQ
>
> Program C:
>
> */* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */*
> */* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */*
> */**
> *
> *
> * Redir 2.0 Copyright (C) 1995-1998 DJ Delorie ([email protected])*
> * Modified 1999 by Mumit Khan <[email protected]>*
> *
> *
> * Redir is free software; you can redistribute it and/or modify it*
> * under the terms of the GNU General Public License as published by*
> * the Free Software Foundation; either version 2, or (at your option)*
> * any later version.*
> *
> *
> * Redir is distributed in the hope that it will be useful, but*
> * WITHOUT ANY WARRANTY; without even the implied warranty of*
> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU*
> * General Public License for more details.*
> *
> *
> **/*
> *
> *
> *#include <ctype.h>*
> *#include <errno.h>*
> *#include <fcntl.h>*
> *#include <process.h>*
> *#include <stdio.h>*
> *#include <stdlib.h>*
> *#include <string.h>*
> *#include "US_Log.h"*
> *
> *
> */* Here's the deal. We need to pass the command-line arguments to the*
> * child program *exactly* as we got them. This means we cannot allow*
> * any wildcard expansion, we need to retain any quote characters, and*
> * we need to disable response files processing. That's why we must*
> * link with CRT_noglob.o! */*
> *
> *
> *void xmalloc_failed(size_t size)*
> *{*
> * fprintf(stderr, "Out of memory allocating %lu bytes\n", (unsigned long)
> size);*
> * exit(1);*
> *}*
> *
> *
> *void *xmalloc (size_t size)*
> *{*
> * void *newmem;*
> *
> *
> * if (size == 0)*
> * size = 1;*
> * newmem = malloc (size);*
> * if (!newmem)*
> * xmalloc_failed (size);*
> *
> *
> * return (newmem);*
> *}*
> *
> *
> *void *xrealloc(void *oldmem, size_t size)*
> *{*
> * void *newmem;*
> *
> *
> * if (size == 0)*
> * size = 1;*
> * if (!oldmem)*
> * newmem = malloc (size);*
> * else*
> * newmem = realloc (oldmem, size);*
> * if (!newmem)*
> * xmalloc_failed (size);*
> *
> *
> * return (newmem);*
> *}*
> *
> *
> *int display_exit_code=0;*
> *int std_err_fid;*
> *FILE *std_err;*
> *int rv;*
> *
> *
> *static void*
> *usage(void)*
> *{*
> * /*
> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
> */*
> * fprintf(stderr, "Redir 2.0 Copyright (C) 1995 - 1998 DJ Delorie (
> [email protected])\n");*
> * fprintf(stderr, "Modified 1999 for Mingw32 by Mumit Khan <
> [email protected]>\n");*
> * fprintf(stderr, "Distribute freely. There is NO WARRANTY.\n");*
> * fprintf(stderr, "This program is protected by the GNU General Public
> License.\n\n");*
> * fprintf(stderr, "Usage: redir [-i file] [-o file] [-oa file] [-e file]
> [-ea file]\n");*
> * fprintf(stderr, " [-eo] [-oe] [-x] command [args . .
> .]\n\n");*
> * fprintf(stderr, " -i file redirect stdandard input from file\n");*
> * fprintf(stderr, " -o file redirect standard output to file\n");*
> * fprintf(stderr, " -oa file append standard output to file\n");*
> * fprintf(stderr, " -e file redirect standard error to file\n");*
> * fprintf(stderr, " -ea file append standard error to file\n");*
> * fprintf(stderr, " -eo redirect standard error to standard
> output\n");*
> * fprintf(stderr, " -oe redirect standard output to standard
> error\n");*
> * fprintf(stderr, " -x print exit code\n");*
> * fprintf(stderr, " command the program you want to run, with
> arguments\n\n");*
> * fprintf(stderr, "Options are processed in the order they are
> encountered.\n\n");*
> * exit(1);*
> *}*
> *
> *
> *static void*
> *fatal(const char *msg, const char *fn)*
> *{*
> * fprintf(std_err, msg, fn);*
> * fprintf(std_err, "\nThe error was: %s\n", strerror(errno));*
> * exit(1);*
> *}*
> *
> *
> *static void*
> *unquote(const char *src, char *dst)*
> *{*
> * int quote=0;*
> *
> *
> * while ((quote || !isspace(*src)) && *src)*
> * {*
> * if (quote && *src == quote)*
> * {*
> * quote = 0;*
> * src++;*
> * }*
> * else if (!quote && (*src == '\'' || *src == '"'))*
> * {*
> * quote = *src;*
> * src++;*
> * }*
> * else if (*src == '\\' && strchr("'\"", src[1]) && src[1])*
> * {*
> * src++;*
> * *dst++ = *src++;*
> * }*
> * else*
> * {*
> * *dst++ = *src++;*
> * }*
> * }*
> * *dst = '\0';*
> *}*
> *
> *
> *static char **
> *unquoted_argv(int argc, char *argv[], char *reuse)*
> *{*
> * char *new_arg;*
> *
> *
> * if (reuse)*
> * new_arg = (char *)xrealloc(reuse, strlen(argv[argc]) + 1);*
> * else*
> * new_arg = (char *)xmalloc(strlen(argv[argc]) + 1);*
> * unquote(argv[argc], new_arg);*
> * return new_arg;*
> *}*
> *
> *
> *static int*
> *run_program(int argc, char *argv[])*
> *{*
> * return spawnvp (P_WAIT, argv[1], argv+1);*
> *}*
> *
> *
> *int*
> *main(int argc, char **argv)*
> *{*
> * char *arg1 = NULL, *arg2 = NULL;*
> *
> *
> * if (argc < 2)*
> * usage();*
> *
> *
> * std_err_fid = dup(1);*
> * std_err = fdopen(std_err_fid, "w");*
> *
> *
> * /* US_log( "US_Redir by CdQ" ); */*
> *
> *
> * /* We requested that the startup code retains any quote characters*
> * in the argv[] elements. So we need to unquote those that we*
> * process as we go. */*
> * while (argc > 1 && (arg1 = unquoted_argv(1, argv, arg2))[0] == '-')*
> * {*
> * int temp;*
> * if (strcmp(arg1, "-i")==0 && argc > 2)*
> * {*
> * if ((temp = open(arg2 = unquoted_argv(2, argv, arg1),*
> * O_RDONLY, 0666)) < 0*
> * || dup2(temp, 0) == -1)*
> * fatal("redir: attempt to redirect stdin from %s failed", arg2);*
> * close(temp);*
> * argc--;*
> * argv++;*
> * }*
> * else if (strcmp(arg1, "-o")==0 && argc > 2)*
> * {*
> * if ((temp = open(arg2 = unquoted_argv(2, argv, arg1),*
> * O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0*
> * || dup2(temp, 1) == -1)*
> * fatal("redir: attempt to redirect stdout to %s failed", arg2);*
> * close(temp);*
> * argc--;*
> * argv++;*
> * }*
> * else if (strcmp(arg1, "-oa")==0 && argc > 2)*
> * {*
> * if ((temp = open(arg2 = unquoted_argv(2, argv, arg1),*
> * O_WRONLY|O_APPEND|O_CREAT, 0666)) < 0*
> * || dup2(temp, 1) == -1)*
> * fatal("redir: attempt to append stdout to %s failed", arg2);*
> * close(temp);*
> * argc--;*
> * argv++;*
> * }*
> * else if (strcmp(arg1, "-e")==0 && argc > 2)*
> * {*
> * if ((temp = open(arg2 = unquoted_argv(2, argv, arg1),*
> * O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0*
> * || dup2(temp, 2) == -1)*
> * fatal("redir: attempt to redirect stderr to %s failed", arg2);*
> * close(temp);*
> * argc--;*
> * argv++;*
> * }*
> * else if (strcmp(arg1, "-ea")==0 && argc > 2)*
> * {*
> * if ((temp = open(arg2 = unquoted_argv(2, argv, arg1),*
> * O_WRONLY|O_APPEND|O_CREAT, 0666)) < 0*
> * || dup2(temp, 2) == -1)*
> * fatal("redir: attempt to append stderr to %s failed", arg2);*
> * close(temp);*
> * argc--;*
> * argv++;*
> * }*
> * else if (strcmp(arg1, "-eo")==0)*
> * {*
> * if (dup2(1,2) == -1)*
> * fatal("redir: attempt to redirect stderr to stdout failed", 0);*
> * }*
> * else if (strcmp(arg1, "-oe")==0)*
> * {*
> * if (dup2(2,1) == -1)*
> * fatal("redir: attempt to redirect stdout to stderr failed", 0);*
> * }*
> * else if (strcmp(arg1, "-x")==0)*
> * {*
> * display_exit_code = 1;*
> * }*
> * else*
> * usage();*
> * argc--;*
> * argv++;*
> * }*
> *
> *
> * if (argc <= 1)*
> * {*
> * errno = EINVAL;*
> * fatal("Missing program name; aborting", "");*
> * }*
> *
> *
> * rv = run_program(argc, argv);*
> *
> *
> * if (rv < 0)*
> * fatal("Error attempting to run program %s", argv[1]);*
> *
> *
> * if (display_exit_code)*
> * {*
> * fprintf(std_err, "Exit code: %d\n", rv);*
> * }*
> *
> *
> * return rv;*
> *}*
>
>
> ==============================================================
> END PROGRAM
>
> _______________________________________________
> Harbour mailing list (attachment size limit: 40KB)
> [email protected]
> http://lists.harbour-project.org/mailman/listinfo/harbour
>
>
--
smu johnson <[email protected]>
_______________________________________________
Harbour mailing list (attachment size limit: 40KB)
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour