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

Reply via email to