
noclrex()
/*

	NOCLREX - Do not clear externals.

	11/15/82 - David A. Gewirtz

	This function is used to hack up version 1.5 of Leor's	

BDS C compiler. The C.CCC runtime package automatically clears 

the external data area before executing the compiled program.  

For most programs, this is fine, but for a program like CHDIR, 

which writes itself back out and counts on preinitialized 

externals, it is no good at all. So the noclrex() hack is used to 

cause C.CCC to bypass the 'clear externals' phase of the run-time 

initialization.  As C.CCC may be different for each version this 

routine should be checked.  The following code is part of the 

'init' subroutine of the C.CCC runtime package:

 0447 2A1B01    	LHLD	FRERAM	;CLEAR EXTERNALS
 044A EB        	XCHG
 044B 2A1501    	LHLD	EXTRNS
 044E CDFA02    	CALL 	CMH
 0451 19        	DAD	D	;HL NOW HOLDS SIZE OF EXTERNAL DATA AREA
 0452 7C        CLREX:	MOV 	A,H	;CLEAR ENTIRE EXTERNAL AREA
 0453 B5        	ORA	L
 0454 CA5E04    	JZ	CLREX2
 0457 1B        	DCX	D
 0458 2B        	DCX	H
 0459 AF        	XRA	A
 045A 12        	STAX	D
 045B C35204    	JMP	CLREX
                
 045E AF        CLREX2:	XRA	A

	This function puts a JMP CLREX2 at location 0x447,
	thereby effectively bypassing the clearing mechanisms
	for programs based on this image.

	For those who believe in the sanctity of the original 
program, as well as thos who really don't wish to see awful
and unglamorous hacks, I have not put this in the original programs.
	
	If you have a need for it, simply compile this function
and make a call of the form:

	noclrex();

and all will be well.

	Finally, please realize this this in no way affects the
currently running program, only the program created from the
current image.  

*/
{
	poke(0x447,0xc3);	/* The JMP instruction */
	poke(0x448,0x5e);	/* low order address */
	poke(0x449,0x04);	/* high order */

	/* That's it ... just remember to change this whenever
	   C.CCC is changed or a new version is used */
}

