home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / OBJASM.ZIP / ORLIDATA.C < prev    next >
C/C++ Source or Header  |  1990-09-15  |  1KB  |  40 lines

  1. #include <stdio.h>
  2. #include "o.h"
  3.  
  4. extern int data_seg_idx;
  5. extern unsigned long data_offset;
  6.  
  7. void lidata( length, extension )
  8.     unsigned int    length;
  9.     int             extension;
  10. {
  11.     SEG_T           seg_search;
  12.     SEG_T           *seg;
  13.     unsigned long   offset;
  14.     long            position;
  15.  
  16.     position = o_position + length;     /* Position assumed at end of rec */
  17.  
  18.     length -= get_index( &seg_search.index );
  19.     seg = (SEG_T *)find( (char *)&seg_search, segment_tree, seg_compare, NULL );
  20.     if ( seg == NULL ) fmt_error("Undefined segment" );
  21.  
  22.     if ( extension == REGULAR ) {
  23.         offset = (unsigned long)get_word(); /* Spot to begin within segment */
  24.         length -= 2;
  25.     } else {
  26.         offset = get_long();
  27.         length -= 4;
  28.     }
  29.  
  30.     data_seg_idx = seg_search.index;    /* Needed by FIXUPPs */
  31.     data_offset  = offset;              /* Ditto */
  32.  
  33.     position -= length;                 /* Move back remainder of bytes */
  34.     --length;                           /* Ignore checksum in length */
  35.  
  36.     dat_insert( seg_search.index, offset, position, length, 
  37.                                                     extension, ITERATED );
  38. }
  39.  
  40.