marty@io.ATT.COM (59462[dls]-j.m.borden) (03/28/88)
Several people have asked about how to set an environmental variable equal to the current working directory. Below is source putcwd.c and a uuencoded, arc'd putcwd.exe that work for me. To set a varible, e.g., PWD, equal to the current directory, type "putcwd pwd". If an error occurs, a message is sent to stderr and DOS errorlevel is set to 1. I don't know how to locate the primary environment other than searching for it, so the code is probably inefficient in this way. It starts at segment 0x60 and looks at the beginning of segments up to the psp in an attempt to find it. This is my first posting; hope it is ok. Marty Borden uucp: {inhp4,mtune}!arrow!marty internet: marty@garage.nj.att.com /* putcwd.c set environmental variable xxx to the current working directory via putcwd xxx sets DOS errorlevel to 1 if unsuccessful compile with turbo C 1.0 as: tcc -ml -G -Z putcwd.c */ #include <stdio.h> #include <stdlib.h> #include <dos.h> #include <string.h> #include <dir.h> #define lerror( str ) { fputs( str, stderr ); _exit(1); } main( int argc, char * argv[], char * envp[] ) { static char cwd[256]; /* hold env. string for current working dir */ register char far * env_prim; /* point to primary environment */ register unsigned seg = 0x5f; /* starting seg for search for envir. */ register char *env_curr; /* point to char in current environment */ register int i = 0; /* index to item in current environment */ if ( argc != 2 ) lerror( "usage: putcwd env_var\n" ); strcat( strcpy( cwd, strupr( argv[1] )), "=" ); /* allow 24 chars */ if ( getcwd( cwd + strlen(cwd), 230 ) == NULL ) /* for var, 230 */ lerror( "putcwd: can't get directory\n" ); /* for dir name */ if ( putenv( cwd ) != 0 ) lerror( "putcwd: assignment failed\n" ); /* the var is set in the CURRENT environment. must find the PRIMARY */ do { env_prim = (char far * ) MK_FP( ++seg, 0x0 ); while ( *env_prim != *envp[0] ) { env_prim = MK_FP( ++seg, 0x0 ); if ( _psp <= seg ) lerror( "putcwd: primary environment not found\n" ); } } while ( strcmp( env_prim, envp[0] ) != 0 ); /* now overwrite the primary environ. with the current environ. */ /* env_prim points at char of environment being overwritten */ while ( ( env_curr = environ[i++] ) != NULL ) while ( (*env_prim++ = *env_curr++) != '\0' ) ; *env_prim = '\0'; _exit(0); } begin 644 putcwd.arc M&@A0551#5T0N15A%`"4E.Q,``'L09H5NVB(:```,3;2(`.``P!8`(`"$`/#OI MWZ8`@`!`.C`0`(```/9!D*,&HT5O%@&,"]G`XP2/3SPR"B`#@`^6`$K`S`!3; M&X"6SFX"P*63E4Y0.A7IW*-3C4XP.J/HU*'3A4X%`H($,!`U@("J+9T`\`=`R M:;JN`*R!-04V$E@B8,\`&`.@@X`U`/0%@*ML+H!@=F79=6)WB%UL`.`B"PS`[ M%6%)A.40MD)X".$+A%$-D$IJ<@`%`1P!H`5`\PD`H@!D``U``H!2`$J270>`1 M;+'6`+K`A@%`%X`LM1$"&&Q:65L`RP"`"2`-`.;B[``4%Z9<HL7B;)HC:8YX, M7F[K6P18+'$Q`#[M`"(,L!@.P(``S<P'J*2>Z'D?`"H$^"P?0_P`"T%8#6`BE M`#``_=T`8``I`(!#`$H=N`(`/6`$B1RZ2.5"(A9T$0`M,#03PB(N:+>(!RQTR MILTH<0#`B`%O`)"(!W`EXD(@`!QC0!T,_>/(,#,`D\L_?RR"SR+8F!!(#SC<< M4$<'5T0!!2P]R./*.!&8H$@!)'SSSXP`\)!%'01<22,667SAY#A?#&$"#@74H M(0T@S0!R3S:).)`&`(,,<T`@X_#S3S3C\+EB&P!XP%,-&JYXT(FR\52"`Q_H> M$@5Z(7S@P#\6.$#`(CXP0,`N%^VPSQT"++(/(]+$0L`T[QPQS3I#K*#.#N_<A MD<`AW\!ZQP#K_`$)`(M\,X`V*^:AH@=]`!!*BBM@XP@PM"BAX33G+'*.)NMX, MI(DZX.7H@B,&6/B+!`3D(DD!*SPSCRK_V*!6NF4P9`-;Z8;A[A<`:%)02U!H` M0@``6BE:C`4':;BM!Q9.:@$$E[*CB!$$T,*$AK0`L8MV`UNHX3"Y>."<+CT`* M@$XZ_^`R7K[R691+0;OJ\H+'UORS#FLQ8FG1,@LDTT<#]TQS3S1U!C!(-`"L* MT\*N`PPS!P&!,`>!(NF8*DTY`M2C"#K3H#,`-(H44\(#P-7<!P,Y[]SSST%3X MLX+12*L#P-+Y.'V.#-NL,,W455^=]=;`13&UJ75C78PBXZR:Q0#+*,(-WGARN MO4,T=0BPPS#!08*`"X\8,$X`E!M0#N:,>'!.`/QPFZ(O$>4(Y"+0+(*,":PL; MXL\D)B`2P!"'9(-.!0#<<8`<0:!3T!WY\``"'03PD$`=[,@`S#KH+``,'0<(Y MH8H"P-0QNR'@*)_/.!BPG@0+(M`1`0$B\,!%'0F8``@/(M0Q@/<+V#.,.B]9& MQ$@QB]@PYR#&")`+1@`!,.<@Q@B0"T8`@'S$`3!`S@-'!M8`6.0OUA]YKL9Q' M`Q3OSY!$'KX`&+(HV`!A`[:%+!``0`E__P9@6\1O!;X5XPYU6\0ND8DP`!A95 M&),3FB-@B?SD-")@4#$"CCPH3#*/E`Q@JAQM.Z3,5R``XR($'5KT*"L%4,'IH MH]-N!E`C`!(1=9'T7``7_UR,"X!0X8Q_!O[9:`-`4P$`R@`,(B9@$;8#H\JD_ MM7`&@`='VA8(JU-`G8^2`,SF^O<OT0]&1XH.(P#1!(X"=>(E.I`H](=E5JY4, MH3F('0)?&N\.\J-``)T.'G#)$``E."$`4#0=`"!*,#$$N$HFKX"9")'@FY`3E M\\+`Q+\[!KS?(>`7`(@`@PE(*8Y+`H'D`P!P0/]\O28&`*@/AFX.>7#WR>'G: M`7T$%.`>(]K85Y(NSAFP`#1U`"<<<<%U@IQRS#D'G72:4`<``-;]]YXF`@`P; MCW,$+`#,;\$-QQZ#R2W7W'[17>@AB$08L8@U9B5BA3YJX;,=/B8H<L!V$)A`G MS`<FZ'``'3'HR"-0/P89RAL`[&#,'1*Z&%PU%\JH88W354?$.KX@*9X`WMWPK MCQWZO(F/)@H`D`%]"*A8QR6+''-$-.``2HP'BJEDPB)7L+D(:U;XHQ8_#]*A# MP7;\_&,$/T4>Z04^EA*)R`%@T2'`.NBL@\R0)ABSG%EE?FC=(N5T\847R\S&( MSB`^\&,>936NP\$B5B"PB!$&+.*!KM&,DVPBEU!00"*'2%``7KJ:U<4RM=(4Y MBJ[_.*"KBG0X8"RRRH[SSR?2KG/./QX`(`"[!+SK`0+OVF%`AYAE<6ULMBYB6 MAP)&K&`#EHL84\`/`.1B``#3H+,(/#O8P(!O+4QCSB(^7%7P``9@N<,Q]BYR> MC\!86J$7EO<!$$``L"Z"SR"<U4%!(A(+L!T"C!C01UH>[`%`KQ1<2=`Q,TBS( M"#0]6G#5*']D!HRL7@A#``#]!CMLL0[DL9`'=_05#&9RB`"LL,0NXH#&'C2M, MR=<?WM'`FPB\:0`Z5/RC9P&X<+:.`-9F>ZMMBUBP<R@^+^*$L%[<:P9F/@)IX M!#YF:VULUVN#S0*P^@P+^=E;J\TV`'=<,*C/C!CAJ!>5PBDG.O+XH^<!NG"VL MB##K%-OHL/S`NJ^M-Q]Z!`0[#%/'%R8,@C`?'A3_Q\)U7&'",<L!<.@5"OB.I M@`F)7.$`]D<PL`X0O2\"G@D#W&"$"2G<8,7TU2]RQ/79;]\:`^L5>00!F"0W0 MM0DLEZ-EN+T+Q!,$`(&?Z8UO3Z.5K6HC+*L1:S/_V$6E-+&X#S4N2(,RQ0!*+ M=SI^K`,+AO/'(E`7A2E0:GKA<1\!MI"%RK7M!9C37`A'R`\7@FX+ALO<IDIXC M0D2E\'XLM.$=?G!"8GR!`!Q,!.IB^+@9HLZ&=JA$#D>(#QZB#H6^6V$+/W>'E M`:3##O]`U2(&>*@/,'%.%01`#Y^0PB/:L`X^$&.B#J4I3!F1`.0[@`DFD"A4+ M98]-JRGB$;&H0C]>(3RM(<`Z+-##0V;1D(B\WQH59<;;78J"F)GBIM[(@T8J_ M2E-$&H`>^6BS*_X1>Z`DI"1-Z<A$E@Y(FUI'!,YXPNQ%D@!B).,B*IFYQV'R0 M0X99A#)*R*KD``,`40!`%K(0Q,_5P82;2B+JUM$`02+1=$KD1R-_2`!-SLF9% MVY`C-VO9RON]*4YVF-/.DKE,2N4,%0/`B`9UY[?:,&!L5RL``@0CC;0$2RT&\ M.,D_`B$.SO@(`0#-X`:-`$LBW;%T]E`B/;9#C^E]<@?!FH,7'0&`.B!@!\32! M:#J.0U&+TM%PB#/`((:!@$%$(TO1N(,'ZD"`X-T!`R7UX2,WA;UR*I*(7J@HH MHCZY`F)M(%@]!:0>QTA)8-EC6/3XI3\C:@1ZX)-8)3UE(*-I`'C*<P#K"(-35 MH;H#"\"S#@;8@0$T2`=&!O652G3H$2$JT73@@#-VB)N]-'%,=F;!1XZZU"#B^ M5(<%]"!F!BC:[-;Q`7<:(:)!O2HBY[B:L5:U`%.CIZW@)C?.[E5``5@F%-[$& M@#<I0!.8"$`_P86W`_9MLWF5&XD`H!!Z\HLV[,"E%ZZWB!LPQ`3W"`T0`$"'3 M;AIC'27HG1$9(,W<&<,)X'H`I2R%*4#\0`%U:,<1UJ&./NEN5E*C&DT\>Z\ZX M\016K,W;/]8!A]TX(`!U2&[BBH<P/_S*"O<T@@+6`[<IH`,0_\@$"U>`C0THH M(Q%.8(`2%;"=\`3B#`+X@C^>%SWV6:^G\NO>FQQ`6M/:#W_)^0LR%E*.P?ZC4 M#@HX[(E;NUX$7FN!N24OG0#`DV6""W:RH]T08!$`*!2SP1_.7WE&O!_`/@K(S MQ@.`'RS`W[SZUQO^R$0PE8$%+:Q@&!N(1NV`)<)+V58VN+T.(WR"#5IDH!DAT M:(0=>,$0`@0!$00X!A$"H`,N#,(8`Z#%$60@#31_8`X(2,Z'A@&`=1AAS#\1V MV5,@R`^(W",:.W""`W`A`M"M@!B\800P%G",.F`@"N4)S%_UZS(?,<`1PG@0- M+O9)!P5X`-'8:,H'J#F*.0#@&$;`SZWU"TS\#DL!WZ75;=GA+P4LP!Y\B,`@\ M_(&%.XR`9JH8@"((P8H!8,(2U+R'-Y8M@CM`X!@&B+;LC%%K`ZZW`+ZX0J&QF M`35EE,A6N`#1"`V`YG@#0`X$B(8XH@&-%].$%D)01*[G;3A@!PO-<AC5`00-D M`$)GPM_$)E;1[/,ACG[95AX`5GZ![00(C-`!-IR#`?K1JP'PPRS%^!>FQ>4$7 M"8#+``.(AQ,&D(\GW.,8)2EN5DB1A!7`PR712,<\2C&'`@P`'@/`!RGX\0&H! M^6W#Y.WPOQR`#DO\HV4.-`#$>_>/!P`W-)#X$!V\>**O"Z!$=?`B.M2X6Q,(. ML$0!4-["Z(`#^A)7`J:=PHS/6PYP02`=R3!W[U9P!$0>P+0R1H%J29R.60C&4 M!PJ86AV>@`L0"`!!($5`'8K0.T7<3\@/`(`QE*FG!`00PO\@N;N@T+M"A(8.Q M>"O1WEA53,3G=<8#Z%\ZQ/`/0/C!`-A54MN#*X#AUF$#9`J.`=X3Y``!``?]R MZT%)ZA`<Z5B@$<1B?=L]#^*401]6TB>N`P(XP`*J=QT%$+@!:`&`K;?]'P?H\ M0Q#4[YWN*>D+#%B""3[E>^#3P0#]UP!UT%C#%QJL1@%YMW<DEEYZ8P'JQW[KX M\`"VIU<&0'4,H5DT$1R6-UKV0G64<'6Q`AO]8@<,8`2]0WRL]@%.0`==,(';T MP6%&L#W_<`-4=P8@J&)T,`3K$`XK&$?O%W\<\(*6LCU&PG7VMUSZ]RD06`$N. MZ`4P*(,TB`X(($+EH&)U\`L%TP5>H`QU,FQ,P`2,X`7^0`S_P@C!L`#.0`=DZ M4"0D`$%!8`*LP`,]0`<,P`,@0`<(P`/$10`\D`#9-0Y)4`R$DA.1,0UT0$0_X ML%)(E&K70`<Y4"0%$"HRH`/@4`?J$`4>D'(*,`^F\`%94`??`(E'((=X:(?%! MU8=U\`R_UAJYDVNMX0_K@`;G5P:.((8K,(@[X`%\(0<]L%(0H'=_$1@XA`T+( MH`UTX`UFPQ>9:`.*@6HN$W1#]P&'P!@`<`@&H!CVL3"E@"+&PA>#8`!\`0'$3 MX`.*\6LF<`A!@"F)P#*Y=HY!,&&)$`0"L`+`4(M4Z'2V0@M*,$((X`C$@G`LE MM@X(,`4,1VA8L"]@1FQV0`&+X`<2L!WM\SO!,W;I8`V"\0\"X`=>Y`P`$`@HB M\0=VX$7%\'B1UU$14'F7IPW!XU'@%GDEL0X7@"L(('D0@`L.D)(@A5T&`&XS2 M61(0:7=T,`%D4GLDJ'?)9`HD]I/$-S5TX'7?43W?@0":H(U)Z075\V`",`__A M\#R%UVOW-`P%\!<]53VM`3_:PST,`#.^$0;'9@==`&YG)WW@YBY_,2P.L`!&0 M``%U$`)6$&K*Y",0H!9W"0UTL``_^793@W[GIP+`XG$Q^)/Q@Y9CR3WP`QXPE M`U\.-D#[9"VS\G0D:%HI,R"P`@0<2(&A&5I9@%+SIA(E)'6GM4_+0&*2A9"VI MP@\>L'**!@P0Y&C1P!":R(F*0`1;J0)%\`^8T'2=.6RVB9OWL&B<P9N,,`Q2K M@6F;2`J5M'%.-VS4"0L)PQF-Y@H=<0_0@`3XB%NZ90#-!9,G9"1"]B$D$%HG: M]"G4=4+6U5'@(%FV-8+"8@SL9QCV<`C_```(0`<)4##L5P#@L%[&Q7Y:"!L)` M&0CL8'%Y"00]4")%9Q;IL``L8Y7)<@^'$)(```AT<`%O`@%0]YG_XGUXD@[G: MP';,90AZT!F>@`=79P<0P`C3X`C#T`B>X`?_P`B&0`<R*@=V8P]IEPX[XP3$: M,*.<80@TFBF(8`AWT'OX@%T,L*1$FBH'\#:&0*2*(*5AY`E9*I]=>G5ER@C11 MP*,^>F4]``@`P`>XL`AGFJ8]^@]7YC)7<'V&X*,<>%KX`7U%9@A\\`\?<Z1]W M8#?`(`<_,"P0L`)X)JAV>@SK4`1R2J1HJJ9V.@PNTR<J8@<ND*>-L*?_T*<J8 M&JB#^C%T0`$J4G3G)RYY.0"0N@*2.@",&FQ^,V\=^J'Q,:`1``O$093W(F(DR MY@&T``0$EV#%<'`A\`$&`06X.@Z!\`@@"@%84#L%V7XB:)Z^4")AZ`^XQ@\W4 MN0X;<$+$%Q^%^2;^H'?FI4Q9X`2#<"DN9Z3AH#NT`@"0<`!44`=R(`9OT`)#$ M``(M``)#\`9PD`=RD`9G@`9T``(H,`8I``(QD`,X<`,@(`1O(`=L$`9N0`8@< MD`1N0`=LX`(@D@9VD`9D4`8@4`9R(`<7VP`*$`1BX`87VP9AP`8@``<L>P9RM M$`9M<(<JVP9IX`9A0`=I\`9NX++VF@)U,`=A<`9EH`,W6P=T,`9WP+%EX`9V= M\`5V$`9R4"<]``!P(+542P90.P8:>P(+Z[0+2P9I(`=E,`9T<+%Y4"=A.[551 M"[5A,`=S@+!NT`97N[!F$`9IP`9E0`9T*[9W>[,'2[-RD`<IB[5M:[1^^[$@$ M(+.`^P9UL+%U\B'F`0D)$`*@"[H@``D2$`!```D/(`"0H`"G>P`4``G+!PD4? M<+H&@`&PBP"R"P2Z"P0@8*^!$!].0!``$+S`R[D?D@`E`@D,<),?TALE`0D+S M8'D?<G;)NP##8;P!"KU$4"*<F[T+8`7<^R'>BP;A"P#>JP?EZ[V,D+[VN@">W MP+[0ZZO8V[["`+\+0`WV:P[VBP_VJP#QT;WMRP'_*[[MZP(#;+[M"P0'[+U2O ML,#M2P:Y9WD23``2_`^0T"Z<ZPD#$`0!H,$<S+D3<'8%8@`(4,(44`$%,`'_; M8`$%8`'O`@D-$)86#`$2B)%=QQF<H<(8*0`%D+HXK,*HJ\(`T`#V:@`0\`4!V $@,0:`,0:, `` end size 4954