static void alignInSegment( // PUT OUT ALIGNMENT WITHIN A SEGMENT target_size_t adjust, // - adjustment fe_seg_id segid ) // - segment id { if( adjust > 0 ) { if( segid == SEG_BSS ) { DgUninitBytes( adjust ); } else { DgInitBytes( adjust, 0 ); } } }
// This routine must be called to correspond to the AlignPad... macros in // RTEXCEPT.H and CPPLIB.H // void DgAlignPad( // INSERT PADDING IN A STRUCTURE unsigned total ) // - number of bytes emitted so far { unsigned left; #if ( _CPU == 8086 ) #define ALIGN 2 #else #define ALIGN 4 #endif left = ( ( total + ALIGN - 1 ) & ( - ALIGN ) ) - total; if( left > 0 ) { DgUninitBytes( left ); } #undef ALIGN }
void DgSymbolDefInit( // DATA GENERATE SYMBOL (DEFAULT DATA) SYMBOL sym ) // - the symbol { segment_id old_seg; // - old segment segment_id seg_id; // - symbol segment target_size_t size; // - size of symbol seg_id = FESegID( sym ); old_seg = BESetSeg( seg_id ); DgAlignSegment( seg_id, SegmentAlignment( sym->sym_type ) ); CgBackGenLabel( sym ); size = CgMemorySize( sym->sym_type ); if( sym->segid == SEG_BSS ) { DgUninitBytes( size ); } else { DgInitBytes( size, 0 ); } BESetSeg( old_seg ); }