🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.sys.amiga.tech
Article #10391

problems with forkv (lattice)

#10391
From: Miles Bader
Date: Sun, 27 Nov 1988 16:49
96 lines
2651 bytes
Despite many re-readings of the manual section, and talking to
lattice technical support, I STILL can't forkv to work as advertised.
At the end of this mesage is a short program illustrating my
problems.  I would be extremely grateful if anyone can point out any
reasons why it doesn't work...

Thanks, -Miles

/* fail.c
 *
 * This program illustrates the problems I'm having with forkv:
 *   1) It doesn't use the search path as the manual claims; you have
 *      to give an explicit path to the program you want to run, when
 *      cli can find the same program as long its in a directory in your
 *      path.
 *   2) The program guru's 100% of the time, both when USESTDIO is defined
 *      or not.  Examination of all the arguments to the forkv call at
 *      run time doesn't give any clues due to bad arguments.
 *
 * Compile with:
 *     lc -L fail.c
 * OR  lc -L -dUSESTDIO fail.c
 *
 * It seems to occur no matter which program you use.  The following 
 * gurus, for instance (avail is a 1.3 program that lists availabe memory):
 *      fail ram:output c:avail
 *
 * The behavior is the same under both versions 4.1 and 5.0 of Lattice-C.
 */

#include <stdio.h>
#include <dos.h>
#include <proto/dos.h>
#include <ios1.h>

main(argc,argv)
int argc;
char **argv;
{
#ifdef USESTDIO
    FILE *outfp;
    struct UFB *ufb;
#endif
    long outfh;
    static struct FORKENV env={0,0,0,0,0,NULL};
    struct ProcID child;
    int status;

    if(argc<3){
	fprintf(stderr,"Usage: %s outfp command arg ...\n",argv[0]);
	exit(-1);
    }
    argv++;

#ifdef USESTDIO
    outfp=fopen(*argv++,"w");
    if(outfp==NULL){
	poserr("fopen");
	exit(-1);
    }

    ufb=chkufb(fileno(outfp));
    if(ufb==NULL){
	fputs("ufb is NULL\n",stderr);
	fclose(outfp);
	exit(-1);
    }

    outfh=ufb->ufbfh;
#else /* USESTDIO */
    outfh=Open(*argv++,MODE_NEWFILE);

    if(outfh==0){
	fputs("Open failed\n",stderr);
	exit(-1);
    }
#endif

    env.std_out=outfh;

    status=forkv(argv[0],argv,&env,&child);
    if(status==-1)
	poserr("forkv");
    else
	status=wait(&child);

    printf("Exit status is %d\n",status);

#ifdef USESTDIO
    fclose(outfp);
#else
    Close(outfh);
#endif

    exit(status);
}
Technical Details
Message-ID: <wXY38Sy00Uka8=Ac5B@andrew.cmu.edu>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!rutgers!rochester!pt.cs.cmu.edu!andrew.cmu.edu!bader+

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!rutgers!rochester!pt.cs.cmu.edu!andrew.cmu.edu!bader+
From: bader+@andrew.cmu.edu (Miles Bader)
Newsgroups: comp.sys.amiga.tech
Subject: problems with forkv (lattice)
Message-ID: <wXY38Sy00Uka8=Ac5B@andrew.cmu.edu>
Date: 27 Nov 88 16:49:34 GMT
Organization: Carnegie Mellon
Lines: 96