Newsgroups: comp.os.msdos.programmer Path: utzoo!utgpu!news-server.csri.toronto.edu!torsqnt!lethe!druid!darcy From: darcy@druid.uucp (D'Arcy J.M. Cain) Subject: Re: Where's the executable located? Message-ID: <1991Jun24.133431.10280@druid.uucp> Organization: D'Arcy Cain Consulting, West Hill, Ontario References: Distribution: comp Date: Mon, 24 Jun 91 13:34:31 GMT In melling@cs.psu.edu (Michael D Mellinger) writes: >If my program is in someone's path, how can I tell where it's located >so that I can get the supporting files that are needed with it? This is real easy in DOS. argv[0] is the full pathname of the invoking process. I often do something like this: char config[64], *p; strcpy(config, argv[0]); if ((p = strchr(config, '.')) != NULL) *p = 0; strcat(config, ".CFG"); Now I can have a program act differently just by copying it to another name and creating a new config file. Now if only DOS used file links like Unix I wouldn't waste disk space doing so. BTW this only works because COMMAND.COM puts it there. If you call your program from another program this may not work. In fact argv[0] may have total garbage in it. It is up to the program calling the exec function to fill in that field. So today's tip is: If you are writing a program that uses one of the exec calls make sure the full path name of the called process is in the second argument. This usually simply means that you repeat the first argument verbatim unless you use one of the "p" versions of the call. -- D'Arcy J.M. Cain (darcy@druid) | D'Arcy Cain Consulting | There's no government Toronto, Ontario, Canada | like no government! +1 416 424 2871 |