mhampson@wpi.wpi.edu (Mark A. Hampson) (11/17/89)
I am wondering if anyone has tripped across a way to set an MS-DOS
environment variable from within a program that is still in the
environment table when the program terminates.
The commands in Turbo * will allow you to alter the environment
variable table, but when they only operate on a copy of the table
which is created when you execute the program and therefore are lost
on termination.
I am trying to store the current directory path name in an environment
variable. I am willing to approach this two ways:
1) have a program return the value in such a way that a .BAT file
can set it and have it stay in the table
2) or to have a program set it (the prefered method).
If anyone has any great ideas on this could you please EMAIL them to me
as I do not read this newsgroup regularly.
Thanks,
--
/----------------------------------------------------------------------------\
| We are not in an energy crisis, we are having an entropy crisis... |
\----------------------------------------------------------------------------/
Mark A. Hampson -- mhampson@wpi.wpi.eduts@uwasa.fi (Timo Salmi LASK) (11/21/89)
In article <5679@wpi.wpi.edu> mhampson@wpi.wpi.edu (Mark A. Hampson) writes: >I am wondering if anyone has tripped across a way to set an MS-DOS >environment variable from within a program that is still in the >environment table when the program terminates. > >I am trying to store the current directory path name in an environment >variable. I am willing to approach this two ways: I have solved this very problem in my non-resident pushdir / popdir batches. You can obtain them by anonymous ftp from our site. They are part of my /pc/ts/tsbat12.arc package. >If anyone has any great ideas on this could you please EMAIL them to me >as I do not read this newsgroup regularly. Sorry, no. I prefer to post, since there always may be others who might be interested in the same problem. (No offence meant, but I have often wondered about these offhand postings, where the person doing the posting is not interested enough to follow things trough.) ................................................................... Prof. Timo Salmi (Site 128.214.12.3) School of Business Studies, University of Vaasa, SF-65101, Finland Internet: ts@chyde.uwasa.fi Funet: vakk::salmi Bitnet: salmi@finfun
thorp@spudge.UUCP (Don Thorp) (11/21/89)
The following code will set an environment variable in the highest
environment. I compiled it with tasm and zortech cpp. But there should
be no changes required for MSC or TurboC. The transient portion of
command.com will be loaded. If there is not enough memory to load
command.com, your system will crash. That is one of the side effects of
using interrupt 2Eh.
Don Thorp
USENET ...!texbell!letni!rwsys!spudge!thorp
<------------------------------Cut Here----------------------------------->
/**********************************************************************
* setenv.h
*
**********************************************************************/
#if !defined(__SETENV_H__)
#define __SETENV_H__
#if defined(__cplusplus)
extern "C" {
#endif
void int2e(char *cmd);
void setenv(const char *p);
#if defined(__cplusplus)
}
#endif
#endif
<------------------------------Cut Here----------------------------------->
/*************************************************************************
* setenv.c - Set the root environment
*
************************************************************************/
#include <stdlib.h>
#include <string.h>
#include "setenv.h"
void setenv(const char *p) {
char *cmd = malloc(strlen(p) + 3);
cmd[0]=strlen(p);
strcpy(cmd+1,p);
strcat(cmd+1,"\r");
int2e(cmd);
free(cmd);
}
<------------------------------Cut Here----------------------------------->
; Interrupt 2Eh Call for C int2e.asm
;
; void _int2e(char *cmd)
;
Public _int2e
_TEXT Segment Byte Public 'CODE'
Assume CS:_TEXT
Stack dw ?,?
_INT2E proc near
push bp
mov bp,sp
push si ;Save registers
push di
push ds
mov cs:[Stack], sp ;Save the stack pointer
mov cs:[Stack+2], ss
mov si, ss:[bp+4] ;Get parameter
int 2eh ;do interrupt
mov ss, cs:[Stack + 2] ;restore stack
mov sp, cs:[Stack]
pop ds
pop di
pop si
pop bp
ret
_INT2E endp
_TEXT ends
endlas) (11/22/89)
In article <5679@wpi.wpi.edu> mhampson@wpi.wpi.edu (Mark A. Hampson) writes: >I am wondering if anyone has tripped across a way to set an MS-DOS >environment variable from within a program that is still in the >environment table when the program terminates. Watch for my forthcoming post of my "bios-only" version of STEVIE in comp.binaries.ibm.pc (assuming Rahul accepts it). In it will be included a SETENV program (with Turbo C source) which can do this. SETENV is based on an earlier posting to cbip by Alan J. Myrvold. regards, Larry -- Signed: Larry A. Shurr (cbema!las@att.ATT.COM or att!cbema!las) Clever signature, Wonderful wit, Outdo the others, Be a big hit! - Burma Shave (With apologies to the real thing. The above represents my views only.) (Please note my mailing address. Mail sent directly to cbnews doesn't make it.)
tim@stiatl.UUCP (Tim Porter) (11/23/89)
In article <1989Nov20.212803.5326@uwasa.fi> ts@chyde.uwasa.fi (Timo Salmi LASK) writes: >I have solved this very problem in my non-resident pushdir / popdir >batches. You can obtain them by anonymous ftp from our site. They >are part of my /pc/ts/tsbat12.arc package. > This sounds just like what I've been looking for! But, I unfortunately do not have anonymous ftp access. Could anyone who does be so kind as to email me a copy? I would be forever grateful.
tim@stiatl.UUCP (Tim Porter) (11/30/89)
In article <6551@spudge.UUCP> thorp@spudge.UUCP (Don Thorp) writes: >The following code will set an environment variable in the highest >environment. I compiled it with tasm and zortech cpp. But there should >be no changes required for MSC or TurboC. The transient portion of >command.com will be loaded. If there is not enough memory to load >command.com, your system will crash. That is one of the side effects of >using interrupt 2Eh. > > Thanks a million. This IS exactly what I needed and it's working wonderfully! But I do have one question. Do you know if the use of this interrupt (2EH) is portable across different versions of DOS? If it is, this could be even better news than what I had initially hoped for. Tim "THE GREATful" Porter -- ******************************************************************************* | Tim Porter gatech!stiatl!tim | | Sales Technologies, Inc Atlanta, GA (404) 841-4000 | *******************************************************************************