#
#include "em_abs.h"
/*
 * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
 *
 *          This product is part of the Amsterdam Compiler Kit.
 *
 * Permission to use, sell, duplicate or disclose this software must be
 * obtained in writing. Requests for such permissions may be sent to
 *
 *      Dr. Andrew S. Tanenbaum
 *      Wiskundig Seminarium
 *      Vrije Universiteit
 *      Postbox 7161
 *      1007 MC Amsterdam
 *      The Netherlands
 *
 */

 mes 2,_EM_WSIZE,_EM_PSIZE

 exa environ
 exa _end
 exa _penvp
_penvp
 bss _EM_PSIZE,0,0

 exp $_m_a_i_n
 pro $_m_a_i_n,0
 loc 1336	; EIOVFL | EIUND | ECONV | EFOVFL | EFUNFL
 sim            ; ignored
 lal _EM_WSIZE+_EM_PSIZE
 loi _EM_PSIZE
 lae _penvp
 sti _EM_PSIZE
/* Now test if environ is our own environ, or some user defined environ.
 * First test if environ < _end.  This is done for separate I&D systems.
 */
 lae environ
 lae _end
 cmp
 zge *1
/* Now environ < end, which means that we can derefence it without trouble
 * on separate I&D systems.
 */
 lae environ
 loi 2
 loc 2
 loc _EM_WSIZE
 cii
 loc 21331	/*  == 0x5353 */
 bne *1
/* environ contains the magic value. Assume it's our own environ */
 lae _penvp
 loi _EM_PSIZE
 lae environ
 sti _EM_PSIZE
1
#if __unix && ! (__em22 || __em24 || __em44)
 lpi $_ctch_
 sig
 asp _EM_PSIZE
#endif
 lal _EM_WSIZE+_EM_PSIZE
 loi _EM_PSIZE
 lal _EM_WSIZE
 loi _EM_PSIZE
 lal 0
 loi _EM_WSIZE
 cal $main
 asp _EM_WSIZE+_EM_PSIZE+_EM_PSIZE
 lfr _EM_WSIZE
 cal $exit
 end

#if __unix && ! (__em22 || __em24 || __em44)
 exp $_ctch_
 pro $_ctch_,0
 lol 0
 loc EIDIVZ
 beq *1
 lol 0
 loc EFDIVZ
 beq *1
 lol 0
 trp
 bra *3
1
 loc 8
 cal $_getpid
 lfr _EM_WSIZE
 cal $_kill
 asp 2*_EM_WSIZE
3
 lpi $_ctch_
 sig
 asp _EM_PSIZE
 rtt
 end 0
#endif
