Hi Viktor, many thanks, it work fine !!!

Regards
CdQ

On Sat, Mar 13, 2010 at 10:12 AM, Viktor Szakáts <harbour...@syenar.hu>wrote:

> Hi,
>
> This has been asked and answered a few days ago:
>
> http://lists.harbour-project.org/pipermail/harbour/2010-March/033534.html
>
> Anyway it belongs to user's list.
>
> Brgds,
> Viktor
>
> On 2010 Mar 13, at 14:02, CarozoDeQuilmes wrote:
>
> > Hi smu, many thanks for your help but it don't respond my question.  I
> will make a pure Harbour sample and I will send my question again.
> >
> > Thanks and regards
> > CdQ
> >
> > On Wed, Mar 10, 2010 at 5:07 PM, smu johnson <smujohn...@gmail.com>
> wrote:
> > 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 <
> carozodequil...@gmail.com> 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 (d...@delorie.com)
> >    Modified 1999 by Mumit Khan <k...@xraylith.wisc.edu>
> >
> >    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 (
> d...@delorie.com)\n");
> >   fprintf(stderr, "Modified 1999 for Mingw32 by Mumit Khan <
> k...@xraylith.wisc.edu>\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)
> > Harbour@harbour-project.org
> > http://lists.harbour-project.org/mailman/listinfo/harbour
> >
> >
> >
> >
> > --
> > smu johnson <smujohn...@gmail.com>
> >
> >
> > _______________________________________________
> > Harbour mailing list (attachment size limit: 40KB)
> > Harbour@harbour-project.org
> > http://lists.harbour-project.org/mailman/listinfo/harbour
> >
> >
> > _______________________________________________
> > Harbour mailing list (attachment size limit: 40KB)
> > Harbour@harbour-project.org
> > http://lists.harbour-project.org/mailman/listinfo/harbour
>
> _______________________________________________
> Harbour mailing list (attachment size limit: 40KB)
> Harbour@harbour-project.org
> http://lists.harbour-project.org/mailman/listinfo/harbour
>
_______________________________________________
Harbour mailing list (attachment size limit: 40KB)
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to