+#define ENDSOURCE( S ) ( S.start + ( S.to - S.from ) )
+
+/**
+ * Dump the current fragmentation to stdout.
+ */
+static int dump_fragments() {
+ int oly = 0;
+ int src = 0;
+ size_t pos = 0;
+ while ( src < sources.count ) {
+ size_t x = ( oly < overlay.count )?
+ overlay.table[ oly ].beg : sources.size;
+ for ( ; src < sources.count &&
+ ENDSOURCE( sources.array[ src ] ) <= x; src++ ) {
+ // Dump sources.array[src] in full
+ fprintf( stdout, "%s/%ld:%ld\n",
+ sources.array[ src ].filename,
+ pos - sources.array[ src ].start,
+ sources.array[ src ].to );
+ pos = ENDSOURCE( sources.array[ src ] );
+ }
+ if ( sources.array[ src ].start < x ) {
+ // Dump sources.array[src] up to x;
+ fprintf( stdout, "%s/%ld:%ld\n",
+ sources.array[ src ].filename,
+ pos - sources.array[ src ].start,
+ x - sources.array[ src ].start );
+ pos = ENDSOURCE( sources.array[ src ] );
+ }
+ if ( oly < overlay.count ) {
+ fprintf( stdout, "%s/%ld:%ld\n",
+ overlay.source.filename,
+ overlay.table[ oly ].beg,
+ overlay.table[ oly ].end );
+ pos = overlay.table[ oly++ ].end;
+ }
+ for ( ; src < sources.count &&
+ ENDSOURCE( sources.array[ src ] ) <= pos; src++ ) {
+ // Just skip these fragments.
+ }
+ }
+ return( 0 );
+}
+