[comp.sys.atari.st] dLibs v1.1 and SETPATH program

dal@stag.UUCP (Dale Schumacher) (03/03/88)

  <wes@obie.UUCP (Barnacle Wes)> writes...
> software for $100.  Oh, yah, since their software is now MWC, it's not
> brain-dead, it's just that everyone who is very serious about C on the
> ST already HAS MWC, right?

WRONG!  I won't bother with "compiler wars", but there is quite a bit of
serious C programming going on in other dialects of C for the ST.  I use
Alcyon v4.14, which has it's problems, but the COMPILER is pretty good.
The major problem with Alcyon/DRI C was the standard libraries.  My solution
to that problem was to write my own, called dLibs.  These routines are not
only useful to Alcyon users, but to users of MWC, MM, Latice or any other
dialect because they implement many function which are not provided in those
libraries, and/or implement more robust or otherwise improved version.  The
libraries are public domain (not shareware, though I don't turn down donations)
and come with full source code.  If requested, I could post the binaries to
the net, but they're not small.  So far I've been distributing them on disk
for a fee of $3 to cover the disk and postage.  Send requests to:

	Dale Schumacher
	399 Beacon Ave.
	St. Paul  MN  55104
	United States of America

  <juancho@dgp.toronto.edu (John Buchanan)> writes...
> 	1)  I just finished porting a 12K line program from our unix 
> system to a 1040 using MWC 2.1.7.  The system() calls simply print
> no shell when the program is running under gulam.  I know that 
> setting the SHELL environment variable to GULAM will fix that.  The
> problem is that other mark william tools seem to be able to run
> shell commands with out the SHELL variable being set, and if the
> environment variable is set then a new copy of the shell is started up
> for each cc in a make.
...
> 	3) How reliable are the malloc() and free() functions
> provided with MWC.

The system() call in dLibs supports use of the _shell_p system variable for
accessing sub-shells (does Gulam set this?).  In addition, if the _shell_p
value is not good, it uses the environment variable SHELL to find the shell
somewhere on the PATH, and as a last resort it tries to find the program
specified by the first argument and passes the rest as a command tail.  This
should work with just about ANY shell (including the desktop).

As for malloc() and free(), I can't comment on MWC's reliability, but I'm
pretty sure that they allocate memory from the stack/heap area, which means
that your program must ALWAYS reserve the maxiumum amount of memory that you
ever will want to allocate.  The dLibs version allocates memory by requesting
heaps through the system Malloc() call (carefully avoiding the bugs therein)
and parcels out memory from those heaps with only 4-bytes overhead per call
to malloc() instead of the typical 12-16 bytes.

  <dsh3059@ritcv.UUCP (Denise Hinds)> writes...
> 	Could you please tell us how you set the gemdos path ?
  <preston@felix.UUCP (Preston Bannister)> writes...
> current directory.  If you set your PATH environment variable to:
> 
> 	PATH=c:\bin
> 
> GEM will look in c:\bin for the application and any .RSC files.  
> 
> The problems are:
> 
> 1.  GEM doesn't provide any way of setting the environment variables.
> 
>     I use GEMBOOT, which provides a means of setting the environment
>     variables _before_ the desktop comes up.
>
> 2.  The application may look for other required data files in the
>     current directory.
> 
>     I consider this bad design on the part of the application.  Does
>     anyone out there have a work around (not including copying the
>     application's data files into all directories :-) ?
> 
> 3.  The path seperator character expected by GEM is ';' (semi-colon).
> 
>     I use MWC's msh, Beckmeyer's Micro C-shell, and Gulam.  They all
>     use ',' (comma) as a seperator.  This caused two problems that
>     confused me for quite a while:
> 
>     1) GEM applications invoked from a shell didn't always work.
> 
>     The problem was that GEM didn't grok the PATH set up by the shell,
>     and the application couldn't find it's .RSC and other files.
> 
>     2) The shells couldn't handle the PATH set up for GEM.
> 
>     I used to set up PATH as: 
> 
> 	PATH=C:\APP;C:\BIN;C:\ETC;C:\
> 
>     which worked fine from the desktop, and GEM could find
>     application's and their .RSC files in any of the listed
>     directories.
> 
>     The problem was that seemed to confuse MWC's msh.  It couldn't
>     seem to find it's startup file "profile" no matter _where_ I put
>     it.  The symptom was some obscure message (like "End of file in '"), 
>     which didn't help in finding the problem.
> 
> There is an AES function: shel_find() that will search through the
> directories listed in PATH for the given file name, and returns the
> full path for the file if found.
> 
> Now, if shel_find() recognized ',' as a delimiter, or if all the
> shells used ';', all this would work together rather nicely...
> 

*WHEW*  Lots of stuff here...  Again in dLibs, there is a function called
pfindfile() which will use the PATH to find a specified file (with one of
a list of extension, if there is no extension).  It recognizes both ','
and ';' as separators in the PATH list.  There is also a popen() function
which works like fopen(), but uses pfindfile() to locate the file.  If
applications used these functions, most of the above problems would be
solved.  The one remaining problem is that the PATH is only set properly
by shell programs, so you have to be in a shell for this to work... OR
you need a way to change the DESKTOP's environment (after boot time) to
change the value of the SHELL environment variable.  The following is
a uuencoded ARChive containing executables and source for SETPATH which
will change the PATH variable in the PARENT process's environment.  To
use this propoerly, run it from the desktop (so the desktop is the parent).
Included in the source is a modified version of the getenv() and putenv()
calls in dLibs.  They handle environments in TOS format or MWC (MS-DOS)
format, or even mixed.

I hope I've answered a few questions... enjoy...

------------------------------CUT--HERE------------------------------
table
 !"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
begin 644 setpath.arc
M&@A31510051(+D,     N0@  &$0]E!+*9X/   ,+U0T4 !"!0@0<\K0@1.&a
M#IH$+4!,40C"81D04()000*BC!L[:>2\<=/&(QT0=L+(21-&#)N+9M[(J8CFa
MXI$B34"0*3-G#9TW<%P,+)@@P4$Q>4 0"?-2XA@T==J$>5IF)@@>9)@"F9/'a
M#9TR;%S4J3,&CH^A*EX,'#@BC9LQ;.KLO#J'#IDT;UR@.:N@[=NX<WF("9.0a
MX9DR>OD.+(/GJQPW"9ZJ3*#BBT<[<':L[;O3C-LR":@\F?)E"I4L3(HDB)$@a
M((@P9,B $#VE1=T\35.N;/ER3D&U"@;6;9AF# C),U5X=K/S(PK=*08FD%/Fa
M3)JZ58^C45E0MV8% =$F2.*$2A$I3H(P 6&DBI,A5)(\<>+B(!4TUT&8J?.6a
M#EXWOC7T51MPT.';3R"P\<88#5W$@VX^@."6>!9U]%%((Y7D57T@)&'&51!*a
MZ)L;;YP4$W]DL ""$U4PL5Y^U-%1QV-ED,&AAQ369"%((I%DDH@KMLB$BBRZa
M"&2,,[I1XXT?/JA2A/F=R!P+XH4! AQON.5816_0=)$8U;GEAEMG@/!&DR&Za
MY>6.&/KHU9$*);FD>$(\L1$(3=1&Q&@@!.$$$;/Q68035B0AQ7Q-#$H%>T](a
MT81&4_0I11%]#C'$$TT\081&11 A%$%I2;>'=-19A]U,R!64&:EAGBKAFR^Ya
M\9UT:9B! @IP@- #")9]!$<*NNY:)!/1*5 4DH^A,&P*WR40JZX(T2%'K,^Ia
MQ*QT=^#W$@HJ_"I= J,:FT"MM\*Q1:Q=! O""3V< *P))H 00EV/C4$@KBKJa
MIF*L*12; "0#(.L&KM>*FVT:VW:[P@HI%.5:&V_8<1&"2C;VFAQEAFHLP,TFa
MT >K,B:[;+,?!Z= JBH<]I5ST+%JZI8H>S=0>* F,)%*3^DG$XA/OKKF96UJa
M2 >3/,L!I6]2IOC:E5EZ516%7:9!QPF^I13713#&2:.-!PT+9\A*RE9KT4>#a
M0**);Z#X*5%7!($>>4?H8)^. M?(M);98:FE;UIV62'0/0K]&G/BM5%'76:7a
M" *8($!\EV<UAH 6<."Z?!W,VR4'AXHJQ-%LJ9=GIV6"'LUJ[+.[TDLM=,V2a
MF^NNRS5G1[5R]/MMN$7ENL*N*#R[ @@Q%%P4N=VJ>P(7,+CKL$&T[:BS'%*=a
MM',9!-*1E-5U7*3QOP/@#G <T,*Q0@S- DP\^#WL>GSR#;=F$/4%7L]4]B#\a
M[I%L9SJ_/20$"$QP^0,X6,+ !R\0< M\(5!?NVRW,0(LS'/2,9^M.M<P@+D&a
M?M9#R?RT1SG^^>]7  1+0KCGFN9=YGG1^TT$^Z>U@8DO>  L65%D^$'AE6P@a
MHX-#'58V.Y/((0_^0ID/\_ =FA$E"+&YRA CA*"_72AP)N$0#Y9XG#"X87$7a
ML6)2\E>AF+!!07<@DWAB KTYZ$ \">"!%=R6A" ((35\(4H:URB%-KZQ"#[Ha
M 1K5R$8WPK$'3KI:'%40&AUY1@Z((V,;0$ =B$G,-WRLHQ_QJ!^1+-*)/,I0a
M% ^BLLN@H%A$">,7&=G"(!EI; IZPQK(]#R:Y$<W+'$)8N9VD82,822R4>1Ka
M8C,'\432CG#DTL^>J$FOJ"B,#EF:&^HP2NS-$@2== ZP1,D&\0AL:7ISVDP0a
M9*7UG4 [*IG*EE#Y!E6RDHRNK)I*8OF2M1&R"5ID$Q3?M!WFO 21.AG)"4XRa
MASK  4MRX"=9T  "$= A#&6")6]X(@(5S>$-.2I#2$!P.*R-2''4N64;-+03a
MKLW&D&YA"@J!5"&((4ZC$',#E6IF1=G,(0QFX,E)$%11*=(1F)3,CUN&\T6[a
MH6!GU($#&Z92HVE*C: 6$8\S>2;(&_$3#6EC@VP8=S:[.:0AZ=0/?\;@GY%(a
MR$!@^5!^SB:>?OY3)E\1VQ6EXH:D< 4[;0@0<Q "569.]2(5E0TUJT@=8<*!a
M.A+SBG@B5A4S@)&5%9H#0\:0Q2\NJ$&YW!DF@Q;%R8G*<JY"V>8*$@?.T4%%a
M8_A<J\8)J])M)@%D1 $=>C#$'1C0.+M2 1W>%2\4&">!ZUJ@:Q<VVV\U2[;0a
M\F;K;/4Z:"K$DT/LU_)(Z<B+O$&J&DP.Y2HG+O1=J6,"+,,!%U;! ;@F=A;"a
MWX>>*QNKJ7!C ^A8KEK .]1%:UH>04%RA9> [** 7F^Y5PM:L-DA[LLCROVNa
M6UQZT("::;S0U<UYN8==;6F7@B0TR"WAD!3 %7.F84#8@@%F7X7]+K9QX.X*a
M.^;AX"+O!#N(<$72X%PS?,C";CK)]BA37!C@P0A&Z)@,R05;!2H/$@5PS4X/a
M.DHEW2&Z"Z9N[J#5*\PT&&$/_I6*P7N_ ^NO@P%T,+?$Q[ 1LV5L3;C"$$ISa
MFM1\"[B["NVWK-O:;W68R]#J''>7.^&D&-E"TDK*_M++EOO5ZLL?H@V945.$a
M-4.KS0;3<HE!/&?W'0<H=B[#D16\9Q+OM[CL0O&9%X;I$S\Y87!F-,/H#&FSa
M25J#5]LPG\6%YN-\9P1^-L.90[TN3ZO8/RU^,3%CG.3B[<K&.-8QR)*$ BI(a
MH0I%L.%FI.(6%*CD#&-0T;/MX*_1/5O-QD+9M+?0A2(*I&9!F$,_2T(3K#HDa
M/W]]PQGD$(9%Y@=,K&103W-IR37MI"<_"8IXJ- ER;CA,&O*R)W06:%[^P0Ha
M*LI#VAKWAL<E9;+SI,-@/U0AAE#G3>EFK+@-6'">'/Q7[J0<[E+%$(=L008Ua
ML$&W,;LE(01A"D7(R$T*(H95F6Q<MKJVO'8E W\I&;5_U9*MZK(3.<A!12(Xa
M'$++(#>84T'@'.$!2EN*D#+@C* EWPL7W" "^JKL*9_L&&.DAH(B8"$)5/B"a
M$8*0!"9485+TE:%B5^(5XC8$#4B'>@]*,(>&7NP,=MA"#+H@O)HS>3 ):8$/a
MX/ %BYLDQ18TB((8])4KJ<0D5%L<8<I@& Y*I\G%K;GB&7\9R'O7("J3YX7Oa
MILT%ZY"'N+J[LA4 &@A31510051(+E144   2A4  &$0"%'5K? @   ,8#0 a
M ,!!PL !U@! &B!-H0,53U"\ 4!@!+.!']"98 $ @356 !B,&(:1W48 $#X"a
MH# 2([R3&%1R: G@ ST30VA^P$=DD$H"EG@-% " !)^!'-204'!F( 42$M0Xa
MI3:(EE"4 -@,1$""QT ( &@-:C-0PPNO!"7\\)K 21 NC];^R[86 !.WU!:Ya
M$$*)T0L!+Q@(.5-7B=MO_!0.8!"$'0! $# @ ?0#P L$3G(-W,#B!Q"*2C[5a
MO1MDQ+>!( RX!3-0AFG4JINP!F#B-8#43IS,UC#B&FP7CE@\46(*AHN.(HXKa
M<"*$Q9=?^3#B<U/V+%(3==N^C<OCW[_1;E_D@.VDCA,K Y&<6ZR".@(4>5 +a
M ,' S%8A@&8C<=$H\T %5O@ P&PPP'!$-,PP %8/]A'DPR$O-!"8?P D8 (4a
MCR@!1(,(T#<;!;,)H 0'9O"C! 5F.(-?B*$Q\0T,@#CA17GGI;<>!^UUQ!^%a
M  JXHV8 !( ""D#0UQ0 2L!P@!1 ( %,-L"<V" /1S@6@!(3<.AA:[,1(,4Ba
M6!Z)  ,3 ,"@/&$.Q,"6*\VF 'U2Y+<5FR)^XB(.,<YH'GH J'< !R:XU^67a
M'DP@IB]>G2G$!"ZXTA&% 5BB0I$-'*D$"K(--6*)C3X*)(!>:6),B#X8\L)Qa
M"$S12(046HBAAF:HXV:(&G!3HI3T"-&!!D+]@ZB94ZH0WVT"S*II![=68 8]a
M* @Z5*TE;I"H%(T(40&MMO)CP2&Z\@K /W $P**=W^  C(PT6O%/G^<$0  #a
MU!&%P)$FN' 5!SA8!X 'I% X@2I8/$+A W+XP(MW%&Z "PC4*> "*A3IRX$7a
M+SA@P"7_+ 2 OV1@",*P&:F 1E$CM , 1\0"=W'& VP,I  4M/@-"!OK"<(0a
M(A AP@L4F< S K8(M5  9A@ 0@!R# @$' #(,D@9.A0=;M)@R$"' "@$@,Q5a
MWLE"B!D,"#(,# $($002001$C2#C+%*& TZ380\8"#A=!@& ""+)(.),(HXBa
M9LACPGMMU?'"SX=[>I 7'@>0[C_\""&$$HXBP(8!1%0NQ>2.,G!YYB%M;AP a
M"@#C#@ .M  $Y*,C8#KJ,AS'@#"G*P!-$-"X 7D/J_,#@@N0(T 4 &<(0$2>a
MY8$P$0$@(  +D#:1A3HT5P4 P"_ 4 >  7#\4]X(R$B'7WDP\$R DR* C \Ta
MB?!,(0$F!*SAD01,D@P(A=?([@<,J("J-E<ABC(.]@]_ $ 70"(1&=2$@O$0a
MQ Q=0D$!A'"$V8C"0-% 1@:CD1B"N$$)D ! @QQAKXP1H"Y(\,]"A$&%1W"$a
M&P0T(#-B" !>$$(K*^%%(7 H&#EE)8(%< $A4*C" ;#P$9/"H 8UV$$.N $$a
MC5#B!IOH"A 0 @5$R$8S4L '0"@&<DDP&0%2P 3(@8  40 $"@ A!) 00 @Ma
MH @(&C ;"4CA"+XX"@3(\@\MK$A3Y((!/-"U)QO]*4<(<('L4% %%E  ! > a
M B!X 8B)   #G#B$"8YP#6:@0).&.(%6"$ 1%2QB-@90@1LQ(!1 T$EFYB*Da
M_M3S 0XHLB,HX,$?6':)90C!"+/! 0R,L$$F(L4-*H#"'(\D@ME@0 44T,4Aa
MI,< 7=QP( :0H F:L 3'$("1]#$#.:1@!%[HL0W$ ,$"QG6G0>IIENLAP"T1a
MX NA#8  VD. 'Q#@)BT<PAD'6X@_7' ("A6 %9.:8X,P0-#WT2&A#>#0'R])a
M4%8!J0!@"!A$L>##.KD(!,C;$^M0!0RN_<,%,0*2 200(EGR23V+&5WI3,JSa
MUI5T(-YQ'Y 8@J'C-%2E$H#HD22 J2X)@0.0G,(AE  (,]ACCNQ\44CA&5/Wa
M%).#QTRF"JJPS(%08C8><$$%( F-1N0"& V"P I&*4<*1*,275(!$U! %N;5a
MAQN,U"(,K+I$$:#%B2"  08 (((&9"$0L A$@Y@  @K @I**:1 0]MJ18OKUa
MF"Z Q6#KDH0B'I&R"+AJ$]T@A!""5K1(<45ID13(J;[T1HA4Z%;"-1L]9*%:a
M%1R(&:1H3 ^B0)D,.!(4=L&,,@PD20?JZU^K*%@ 0(,1NP"&&+@T$ E@81&[a
M6,8".T+<Z9(.!4LP 174&2MKK8 *%$%!(QY$(0/0@[9?N6,>4=(&2P@!"%'%a
MDTM99]4FN@,!8!G D1S0.CF 8!;XQ6;K6OI.=?'CM/X%,  $,. "'SC!VUOPa
M4 B)G_*%1 3+4UY'9H&,,0S$ M$ QC2 T:4)@" *R(#<;! @ 6S V(SF2Y<Aa
M"8#(L *@ ;_TA;*V @,#S,8!Y%0"LMS1O:B"X%PV6YZ'G0>!!AD-,W50 @8"a
M-[Y"LHL][FE62'QP' C440E#[LA]9R,":DF!$5,XPI$4 ($*3 86%#B#..H\a
M&0E0  F!"&': .DB&+G41F#&91-.="00A.C-(&""$JJ,CQE[@ (8J(0&CC$%a
M1M GNF60Q^\Z$E5#-]A& >A?F#-U2094  !:T)X#7 V ($C/  IX-0BHA68Sa
MF..5@:R9CK^,HS!3AP%D1LDV0Z2D.,\/F] 2]3H)72[7HKK8N#SVLI^5+77Fa
M5]A>ABF/W4/!01U!R6;0AY*<;&UV!0#;[SFV;#LBK(%TP V#:@2:CV0!/@/"a
M!X"8$) 2P #Y-94<O;Z/#W&P;8KPN@+\]C? !3X0@AO\# B'^$#>V($1-,/>a
M3YSVA&$)[O- KE,*H*P#+O,#5-4%")[%$(,?QP^4GPIU+>_(RV/^B)F+E!\^a
M<)0#<HZ FRN@+D+@N<]-#G2A!(#H0C@%TI6^X5.SZP ,F&>.&,"#,F.JR#?]a
MUC]X]H(#4&@ OL 0]>QM8"!@ !I@IZEES+Y3QCWB.$HXA!F0(00*_*CB="@Ua
ME(<-TZRC:NN8RCL/,9"8%D#R>,<).DH"4W8*+< 2'J,CM4U-<\FO7#F@O8SEa
M^2'SJA/^'#^ MY@9$"B4^/@"70> !H10!!<L@D=6P$%(RM0"#GE@ VY2P@'Ha
M)P4BP,L[!!DP+JC# 4L:  ?'X0 OB(!# O"  #HP ">(,!LP*($Z*!H("I1@a
M!&8J@0A#%?Z1&)!U ,   !DX$@8L<)P,3 &8 R'!^>6O_O]8X !"< !=8@$;a
M, 7<MQ7T!W_WQQ\0,  "\!G?L3&4T$+D9P:><'YFH DP@%'4A@/XL%^T0$O8a
M!@%B1@&_Q!H!X VT5@+V$0"^0'M" #SVT %' 0+_@ \]P <LHP]"H#O\D(,La
MXP\T2#K_0 ]'X [_0 M"0 3E-A!"\ R)06<5\(#?X@U X TZ" W?!SESU@-'a
M4$!LI@1'L%#M9X/XT" .,(0P<(-@( RHY(7_H _44F=4^ \"X$4+\0]K1Q#Na
M  ) (&%$0PIT"($H" &J@H(DH ?BH@@=4 7_,#>$X ,<L(7\T(5?Z ]O^(7Za
MP!K_P 8Y&"0R]BUB@ ?B\BU<8#"D\P(+L'];\0(<@$HPP 6B!R0+0'H]-Q!Va
M,(0"4(1U-(0(P(M;,8004(00 #ST,!D3MXKHUXJOJ"8PP %AEU,N,Q"7AR&Ta
MA@=H:'NJV"JX$#"SP0'/.!D6P$8K$"1=8@)<$(./.(1F&'0%U')Q6(PW.!F5a
M(8_V0(\ \ ,%H(HWQP WAQE P@!@@!B*00'<@&&.AAK.Y"0@<!0 T &$( <0a
M  N8< 7)8$8C W/0X$S_.(C?4AD,$Q).$$)P04X/9Q_^$%A&UH'N='HMXP,.a
MY 'LISOK,B__,0.G@P #(9/K1FV/<6A7UQ'C 0D$X &5<F*H* !U(0!%Y PMa
M-!O()A1TIQC"<!PC< P[Z0 (,![6LR]'25B0Y!45^!60))'B@ J3I!B X!7,a
M<!3_X$R0=%-Y* ('  Z)( Q<\QB!X!5%%E4 ,'CAMA[[<AP)L)4*491?J02_a
M @+2HY7C,3Q&>20<  $'@(R4X15*Z14#T)3>.! 80)F661<%4!>;J1D+X0R=a
MN1*@^6^7.6&>U4*KZ9?M!E/3"  $,QD><!LQZ0"6.3#^$)L^Z5K!,Y2(R6])a
M61>.8YH#X)2WB#JHN ">Y21+]UH?,&YJ9@3SA@!K-A"RX -Q)  (<  =,6?Aa
M"0 +(";;"0"8H"3 <!0#(%$8A@A*0!8.<"1D4)X$0"\^T JH\P)Q=$(58'D&a
M !<:@D,*  !M0#,3IH/!A -QQ)O$H 1Q! '$1P@2"@ 14*&H& !G=#P\\P,!a
M2HM00*! 4'TZN )UI6;T>5\;\!D1,!DMBA)]26T@T)*!>0#6J0#>.6'E232Sa
M]98#X0\\P ,!$ 'L:02PP <!X*.D\W<H<3ID 18"P)Y\\'YBTF0# 0WM=Z )a
MT" ^H 3#X@$2T" T4)X"T" L, .)T95BRA]UT0 4$@%'Y!5"$*820'XXA !8a
M"@"*4)XV"0!2P)@= 0&.D@!2P)\(( 7T"0,/"@MDP0#&!0 R( 3TB:(4T1$\a
M$$?(9BK_":(""A>P4'X#X0 (JJ "L*<V,!LFL*$5<S&*D0">2HL#^@A)&B17a
M"J2H4XP54H=.!ICPE&J(M'IUY *,  $=@(]Q>D2]Q@XR\W[[57-7X0&2\(\4a
M(@'F$##VLI.24!?+ 21RVD+/JJL),!DBT# B$ 42  CE2CI2$ G3B6C6F4B.a
MX*H+ 0']J"\30 05 P670"$-H ,$N1#(YGX'T@Q"  $].7+D E+/JC*7H!CVa
M*COZ(J?4"B3_&K"+,9TG-Z\/*[#_.+'"H"_2ZJ\ FQ@"^ZY?1@"H^ *>-2G9a
M>AM'YQ4:\)J/D$A!\F-7:@%= @<7P#MCUCG_6!>YH9S"0*+HB6$$$"X^T@AUa
M,;-$VT()ZU$S,YOMHFK9%A)"< 46Y10((#] <"1J$&DBX) @H !R8 $PD U1a
M<)'\@  <L1 :UQ%P@&$&  -> 0P2P!$5( CP%P0 4 $,$$<Z$"0-(@'^!@@Ua
M" TZ^ FS 0&HF &>U9[?,AD9\!DLD %'83TMD)YZBJM2ZZP-!CE96[%<Z[7Ka
M!P(.! (D )4@@!;>@;+J\0#QFFQ<=QP.,+IP"B04T+49\K7'1:4   JU"@H<a
M @>;,!N,4)X&<"0FJ+6Y>V(Z$#"#ZTP/(@!7   #$"%UT0.>!1?3.Q T +Q@a
MP+RELK4 8 '1^PC?>TG5>[W9VP#;V[WJBR1%(#T:@)]#E911IX^6-Z*/L(%.a
M!@[/*GD(4!<^0+.P>PXXBDBTZZ9>$00T*Y:B2CKF] _?L%#M:YO:ZQ4\(+]\a
MN9(*^U&^2IW8Q@!B!@&]!(,'" !V8*R3,1M8@ B9.QMF(,,3I@A'@6%:8,,"a
M@,,H,1M.8,,#,!M&8,,$,!L^@ PZN ^S80,OZP%,(++] B36&C 3!0\+"0P-a
MN9,4( <&0)$6B9&7Y 1:J"R(<'UMB;UCB;4^Q&(#80+F1+C_X<,#<F)Q?*9Sa
M/,/8Y,,"D+7Z2+I_Z[\"DD?_T ]Y.E%XP%Y D@$:\&RD(\,ZR68&0TKMQ0<Fa
M4"3G^1]V:SVP>'T @ A_2$H!<"0&8,,0@ .'D -$,&$IL 04T<H=H4YS9K>Da
M9%1 D .?(1A:<;L< 0'-@:' UDY *6Z;8+"Y=3)*$@R)(0%^>%G[ @@%@@$"a
M(+GO^17)O,R3L@T=Y & <$?9.5\4T ;*T%4$P1_WBBH48@&.4'HA,6,3);4,a
M&[HUYR@00"$8H J.W$-@M1N=$K$A <CJS,Y,:77JX2ZQ]94$]IW47+RX2@1.a
M"@'_%4<+06%JX@+\20 4<@"P0*D3)@07S='(5@GI[ &.W+FV[&0E]UKBF6P(a
ML*$_< #6,3131[08PA&6! (N#=/=090S3948DIXQ8PA'N[.E&,*G,<(V\@"Va
M%*U@ "F60"1&TAI"4 BJ"@%_QIHB:P84@@#8$#"2^P#H4P#I$ B $ @J *B,a
M("78H )%$-4 X *H2  B"P;FZRJ]VR"/!#+H  (H4!2PP)_U.1"F('G^B"KZa
M @(XT"KT@"&4Q0#1D),':S#6\SY0<,GDI28&@S! HC!PO)-XH*1/G >'G=B?a
MX@<! ]7!-1 L,$Q7M0P@P CD],1\$'4\8MJ/@-IB$L= T ;6P-I+% V^%$(Sa
M8 P8P0\CL P8@8D#00B92A'#7=P^8 !W5 Y'H,@;5]E <-S)W2!1J=F;@0L/a
MXI_;LXU @@"FP-C$]-O!_=:3@'L )P570-FHS=V9[3V;C0LN, D41SHL$# Fa
M  C7!0)+ $(B9 RP), $K<!O!#*1 STIJ=<C@ XG(Q^$#<@98-L4I (.R<U@a
MY0,BO<B-[+L=@: Z.6%WI,V*(0'S50!MX TN "0@ !@.] '^\ ,SS@\4(@#@a
M !=9FS"X(#-/-LP*# !-" #A>P#*#  2L(?<[(<\T-=3:@#4S&_7K.1,#@@Ha
M9<^J(%]'$<[(0,!%I LR\Y>R] 9T  )EX 9O4 =G@ :,609M\ 9RD <-<*!3a
M0 =A, 9KH#QV4 9R8 9L\ 9W4.<#40=S$ 9G #4@, 5%0 50$ 14@ 2M.P9Oa
MT 9M$ 9N0 8@, =E$ 9R, 9N#@=A0 =HX ,'^NB1W@,E, <#83U$"1:0$ @!a
M  D)$ &04 "S;K@@  D/4%IO @D'0 208  $  F/-.Q(,.P(8.R[3@"N3@ Pa
M$ ,R, ,T4 ,V< ,XD -!( 1#0 1%8 0*D0 TLQ!GO1#EN! 2/0#'L1!8H!C3a
MM1 FMA +M!!IH!A:L1 3L1"LOA!UH!AXH! &T ".\6/V,! -T$$-4/ _)@^Ca
M:@&CR@6CB@2C*@JC:@(5/ZH*BF2C"@NCZET. /&HP_!$0>OG/@!AX.Z*D30+a
M00>*<0< ;P'0<&+$<&+8<&(<?[[@<&*X<&+HD 1LP 9E< 9AP 8@8 9I /2,a
M^09D4 8N<*!X$ 1R<"31/NW5?NW9ONW=_NV*@3^WD0 *@>L*\0#6,_(.@'PCa
M_P!$<?8MTS*0L"Z0T#P.L! TI@(\( $,L! 8H  80 $4X &FK@@<\$Q<8  &a
M@  *X !:R0 .@(T:  $*P )Z;P$T  $.8 ML$!DLX +(1@0HX  0<,H:8 .9a
MOZ08H $N0 $L0 (D( (R@  6( $^H )D8P5H8 0QPP%.P,R&BP (X 68I@$6a
M( (*H !B"@%NL"$F0 $,H !,P )(H $*8/A$H  TH  D0/C-HP JX $L  %*a
M8 ,$Y@(:P $:H+HF0 )T0/@4H 4:@ %^H $D@ (B8 -\[P,>( ,&H '9A  .a
MH/^O7_B$SP$=8@"(S_\.0 $*( '63_C\KP!K8@ +8?T<0&,!8 S%3H+%;@  a
# !H a
 a
end

                Dale Schumacher
                ..ihnp4!meccts!stag!syntel!dal
                (alias: Dalnefre')

dag@chinet.UUCP (Daniel A. Glasser) (03/04/88)

In article <350@stag.UUCP> syntel!dal@stag.UUCP (Dale Schumacher) writes:
[much omitted]
>> 	3) How reliable are the malloc() and free() functions
>> provided with MWC.
[more omitted]
>As for malloc() and free(), I can't comment on MWC's reliability, but I'm
>pretty sure that they allocate memory from the stack/heap area, which means
>that your program must ALWAYS reserve the maxiumum amount of memory that you
>ever will want to allocate.  The dLibs version allocates memory by requesting
>heaps through the system Malloc() call (carefully avoiding the bugs therein)
>and parcels out memory from those heaps with only 4-bytes overhead per call
>to malloc() instead of the typical 12-16 bytes.

The above is wrong.  MWC does not allocate from the stack/heap area.  If it
did, the system() call would not work.  The overhead per malloc is 4 bytes.
The malloc/calloc/realloc/sbrk (and l versions of the forementioned) use the
system Malloc() call, with a granularity to avoid the Gemdos Malloc bug.

[lots of stuff omitted]
>
>*WHEW*  Lots of stuff here...  Again in dLibs, there is a function called
>pfindfile() which will use the PATH to find a specified file (with one of
>a list of extension, if there is no extension).  It recognizes both ','
>and ';' as separators in the PATH list.  There is also a popen() function
>which works like fopen(), but uses pfindfile() to locate the file.  If
>applications used these functions, most of the above problems would be
>solved.
>
MWC provides the functions getenv() and path().  path() searches a selected
path (need not be PATH) for a particular file.  The "popen()" function
provided by dLib is useful, but its name conflicts with the popen() unix
function.  Some people may feel this is not a problem, but portability is
a major issue at MWC.  Rather than clutter up the documentation and
library with functions that are a simple combination of other functions
we let the user construct his/her own.

None of the above is to disparrage the work or comments of Dale Schumacher,
who has done the ST programming community a great service, and whos
contributions are appreciated by many, including myself.  I don't have
dLibs, I managed to miss it, but I find that his postings are usually
very useful.

MWC remains committed to providing a complete and robust library with
complete and accurate documentation.  The documentation does lag the
library, but we have only withdrawn one standard Unix library function,
crypt, from the library (it was never documented) since we first shipped,
and with each new release, the library becomes more populated.

>                Dale Schumacher
>                ..ihnp4!meccts!stag!syntel!dal
>                (alias: Dalnefre')

					Daniel A. Glasser
					M68000 product development
					Mark Williams Co.
					...{ihnp4 cbmvax}!mwc!dag

-- 
			   Daniel A. Glasser
...!ihnp4!chinet!dag || ...!ihnp4!mwc!dag || ...!ihnp4!mwc!gorgon!dag
    One of those things that goes "BUMP!!! (ouch!)" in the night.