require '_h2ph_pre.ph';

no warnings qw(redefine misc);

unless(defined(&_SYS_EXEC_AOUT_H_)) {
    eval 'sub _SYS_EXEC_AOUT_H_ () {1;}' unless defined(&_SYS_EXEC_AOUT_H_);
    unless(defined(&N_PAGSIZ)) {
	eval 'sub N_PAGSIZ {
	    my($ex) = @_;
    	    eval q(( &AOUT_LDPGSZ));
	}' unless defined(&N_PAGSIZ);
    }
    eval 'sub OMAGIC () {0407;}' unless defined(&OMAGIC);
    eval 'sub NMAGIC () {0410;}' unless defined(&NMAGIC);
    eval 'sub ZMAGIC () {0413;}' unless defined(&ZMAGIC);
    eval 'sub QMAGIC () {0314;}' unless defined(&QMAGIC);
    require 'sys/aout_mids.ph';
    eval 'sub EX_DYNAMIC () {0x20;}' unless defined(&EX_DYNAMIC);
    eval 'sub EX_PIC () {0x10;}' unless defined(&EX_PIC);
    eval 'sub EX_DPMASK () {0x30;}' unless defined(&EX_DPMASK);
    eval 'sub N_GETMAGIC {
        my($ex) = @_;
	    eval q((((( &uint32_t)($ex). &a_midmag)&0xffff0000) ? ( &be32toh(( &uint32_t)(($ex). &a_midmag))&0xffff) : (($ex). &a_midmag)));
    }' unless defined(&N_GETMAGIC);
    eval 'sub N_GETMAGIC2 {
        my($ex) = @_;
	    eval q((((( &uint32_t)($ex). &a_midmag)&0xffff0000) ? ( &be32toh(( &uint32_t)(($ex). &a_midmag))&0xffff) : ((($ex). &a_midmag) | 0x10000)));
    }' unless defined(&N_GETMAGIC2);
    eval 'sub N_GETMID {
        my($ex) = @_;
	    eval q((((( &uint32_t)($ex). &a_midmag)&0xffff0000) ? (( &be32toh(( &uint32_t)(($ex). &a_midmag))>>16)&0x3ff) :  &MID_ZERO));
    }' unless defined(&N_GETMID);
    eval 'sub N_GETFLAG {
        my($ex) = @_;
	    eval q((((( &uint32_t)($ex). &a_midmag)&0xffff0000) ? (( &be32toh(( &uint32_t)(($ex). &a_midmag))>>26)&0x3f) : 0));
    }' unless defined(&N_GETFLAG);
    eval 'sub N_SETMAGIC {
        my($ex,$mag,$mid,$flag) = @_;
	    eval q((($ex). &a_midmag =  &htobe32(( &uint32_t) (((($flag)&0x3f)<<26)|((($mid)&0x3ff)<<16)|((($mag)&0xffff))))));
    }' unless defined(&N_SETMAGIC);
    eval 'sub N_ALIGN {
        my($ex,$x) = @_;
	    eval q(( &N_GETMAGIC($ex) ==  &ZMAGIC ||  &N_GETMAGIC($ex) ==  &QMAGIC ? (($x) +  &AOUT_LDPGSZ - 1) & ~( &AOUT_LDPGSZ - 1) : ($x)));
    }' unless defined(&N_ALIGN);
    eval 'sub N_BADMAG {
        my($ex) = @_;
	    eval q(( &N_GETMAGIC($ex) !=  &NMAGIC  &&  &N_GETMAGIC($ex) !=  &OMAGIC  &&  &N_GETMAGIC($ex) !=  &ZMAGIC  &&  &N_GETMAGIC($ex) !=  &QMAGIC));
    }' unless defined(&N_BADMAG);
    eval 'sub N_TXTADDR {
        my($ex) = @_;
	    eval q(( &N_GETMAGIC2($ex) == ( &ZMAGIC|0x10000) ? 0:  &AOUT_LDPGSZ));
    }' unless defined(&N_TXTADDR);
    eval 'sub N_DATADDR {
        my($ex) = @_;
	    eval q(( &N_GETMAGIC($ex) ==  &OMAGIC ?  &N_TXTADDR($ex) + ($ex). &a_text : ( &N_TXTADDR($ex) + ($ex). &a_text +  &AOUT_LDPGSZ - 1) & ~( &AOUT_LDPGSZ - 1)));
    }' unless defined(&N_DATADDR);
    eval 'sub N_BSSADDR {
        my($ex) = @_;
	    eval q(( &N_DATADDR($ex) + ($ex). &a_data));
    }' unless defined(&N_BSSADDR);
    eval 'sub N_TXTOFF {
        my($ex) = @_;
	    eval q((  &N_GETMAGIC2($ex)== &ZMAGIC ||  &N_GETMAGIC2($ex)==( &QMAGIC|0x10000) ? 0: ( &N_GETMAGIC2($ex)==( &ZMAGIC|0x10000) ?  &AOUT_LDPGSZ : $sizeof{\'struct exec\'}) ));
    }' unless defined(&N_TXTOFF);
    eval 'sub N_DATOFF {
        my($ex) = @_;
	    eval q( &N_ALIGN($ex,  &N_TXTOFF($ex) + ($ex). &a_text));
    }' unless defined(&N_DATOFF);
    eval 'sub N_TRELOFF {
        my($ex) = @_;
	    eval q(( &N_DATOFF($ex) + ($ex). &a_data));
    }' unless defined(&N_TRELOFF);
    eval 'sub N_DRELOFF {
        my($ex) = @_;
	    eval q(( &N_TRELOFF($ex) + ($ex). &a_trsize));
    }' unless defined(&N_DRELOFF);
    eval 'sub N_SYMOFF {
        my($ex) = @_;
	    eval q(( &N_DRELOFF($ex) + ($ex). &a_drsize));
    }' unless defined(&N_SYMOFF);
    eval 'sub N_STROFF {
        my($ex) = @_;
	    eval q(( &N_SYMOFF($ex) + ($ex). &a_syms));
    }' unless defined(&N_STROFF);
    require 'machine/aout_machdep.ph';
    if(defined(&_KERNEL)) {
	unless(defined(&cpu_exec_aout_makecmds)) {
	}
    }
}
1;
