@ -1,4 +1,4 @@
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					//  Creature  dump
 
					 
					 
					 
					//  Building  dump
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  <iostream> 
 
					 
					 
					 
					# include  <iostream> 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  <iomanip> 
 
					 
					 
					 
					# include  <iomanip> 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -11,32 +11,117 @@
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# define DFHACK_WANT_MISCUTILS 
 
					 
					 
					 
					# define DFHACK_WANT_MISCUTILS 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  <DFHack.h> 
 
					 
					 
					 
					# include  <DFHack.h> 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					int  main  ( int  argc , const  char *  argv [ ] ) 
 
					 
					 
					 
					void  doWordPerLine ( DFHack : : Context  * DF ,  DFHack : : VersionInfo  *  mem , 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                   DFHack : : Buildings  *  Bld ,  uint32_t  numBuildings , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                   const  char *  type ,  int  lines ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{ 
 
					 
					 
					 
					{ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    int  lines  =  16 ; 
 
					 
					 
					 
					    std : : cout  < <  numBuildings  < <  std : : endl ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    int  mode  =  0 ; 
 
					 
					 
					 
					    std : : vector  <  uint32_t  >  addresses ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    if ( argc  <  2  | |  argc  >  3  ) 
 
					 
					 
					 
					    for( uint32_t  i  =  0 ;  i  <  numBuildings ;  i + +  ) 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    { 
 
					 
					 
					 
					    { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        /*
 
 
					 
					 
					 
					        DFHack : : t_building  temp ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        cout  < <  " usage: "  < <  endl ; 
 
					 
					 
					 
					        Bld - > Read ( i ,  temp ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        cout  < <  argv [ 0 ]  < <  "  object_name [number of lines] "  < <  endl ; 
 
					 
					 
					 
					        if ( temp . type  ! =  0xFFFFFFFF )  // check if type isn't invalid
 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        # ifndef LINUX_BUILD 
 
					 
					 
					 
					        { 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					            cout  < <  " Done. Press any key to continue "  < <  endl ; 
 
					 
					 
					 
					            std : : string  typestr ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					            cin . ignore ( ) ; 
 
					 
					 
					 
					            mem - > resolveClassIDToClassname ( temp . type ,  typestr ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        # endif 
 
					 
					 
					 
					            std : : cout  < <  typestr  < <  std : : endl ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        return  0 ; 
 
					 
					 
					 
					            if ( typestr  = =  type ) 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        */ 
 
					 
					 
					 
					                addresses . push_back ( temp . origin ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            // couldn't translate type, print out the vtable
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            std : : cout  < <  " unknown vtable:  "  < <  temp . vtable  < <  std : : endl ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    else  if ( argc  = =  3 ) 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( addresses . empty ( ) ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    { 
 
					 
					 
					 
					    { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        std : : string  s  =  argv [ 2 ] ;  //blah. I don't care
 
 
					 
					 
					 
					        std : : cout  < <  " No buildings matching ' "  < <  type  < <  " ' "  < <  endl ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        std : : istringstream  ins ;  // Declare an input string stream.
 
 
					 
					 
					 
					        return ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        ins . str ( s ) ;         // Specify string to read.
 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ins  > >  lines ;      // Reads the integers from the string.
 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        mode  =  1 ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    interleave_hex ( DF , addresses , lines  /  4 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					void  doUnderCursor ( DFHack : : Context  * DF ,  DFHack : : VersionInfo  *  mem , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                   DFHack : : Buildings  *  Bld ,  uint32_t  numBuildings , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                   int32_t  x ,  int32_t  y ,  int32_t  z ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					{ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    std : : map  < uint32_t ,  std : : string >  custom_workshop_types ; 
 
					 
					 
					 
					    std : : map  < uint32_t ,  std : : string >  custom_workshop_types ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    Bld - > ReadCustomWorkshopTypes ( custom_workshop_types ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    uint32_t  num_under_cursor  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    for ( uint32_t  i  =  0 ;  i  <  numBuildings ;  i + + ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        DFHack : : t_building  temp ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        Bld - > Read ( i ,  temp ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        if (     ( uint32_t ) x  > =  temp . x1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					               & &  ( uint32_t ) x  < =  temp . x2 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					               & &  ( uint32_t ) y  > =  temp . y1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					               & &  ( uint32_t ) y  < =  temp . y2 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					               & &  ( uint32_t ) z  = =  temp . z 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					          ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            num_under_cursor + + ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            std : : string  typestr ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            mem - > resolveClassIDToClassname ( temp . type ,  typestr ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            printf ( " Address 0x%x, type %d (%s), %d/%d/%d \n " ,  temp . origin , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                   temp . type ,  typestr . c_str ( ) ,  temp . x1 ,  temp . y1 ,  temp . z ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            printf ( " Material %d %d \n " ,  temp . material . type , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                   temp . material . index ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            int32_t  custom ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            if ( ( custom  =  Bld - > GetCustomWorkshopType ( temp ) )  ! =  - 1 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                printf ( " Custom workshop type %s (%d) \n " , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                       custom_workshop_types [ custom ] . c_str ( ) ,  custom ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            hexdump ( DF ,  temp . origin ,  34 * 16 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( num_under_cursor  = =  0 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        std : : cout  < <  " No buildings present under cursor. "  < <  endl ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					void  doListAll ( DFHack : : VersionInfo  *  mem ,  DFHack : : Buildings  *  Bld , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					               uint32_t  numBuildings ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					{ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    std : : cout  < <  " Num buildings present:  "  < <  numBuildings  < <  std : : endl ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    for ( uint32_t  i  =  0 ;  i  <  numBuildings ;  i + + ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        DFHack : : t_building  temp ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        Bld - > Read ( i ,  temp ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        std : : string  typestr ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        mem - > resolveClassIDToClassname ( temp . type ,  typestr ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        printf ( " Address 0x%x, type %d (%s), Coord %d/%d/%d \n " ,  temp . origin , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					               temp . type ,  typestr . c_str ( ) ,  temp . x1 , temp . y1 , temp . z ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					void  doFinish ( DFHack : : Context  * DF ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					{ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    DF - > Detach ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # ifndef LINUX_BUILD 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        std : : cout  < <  " Done. Press any key to continue "  < <  std : : endl ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        cin . ignore ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # endif 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					int  main  ( int  argc , const  char *  argv [ ] ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					{ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    int  lines  =  16 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    bool  word_per_line  =  false ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( argc  = =  3 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        std : : string  num  =  argv [ 2 ] ;  //blah. I don't care
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        std : : istringstream  ins ;  // Declare an input string stream.
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        ins . str ( num ) ;         // Specify string to read.
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        ins  > >  lines ;      // Reads the integers from the string.
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        word_per_line  =  true ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    
 
					 
					 
					 
					    
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    DFHack : : ContextManager  DFMgr  ( " Memory.xml " ) ; 
 
					 
					 
					 
					    DFHack : : ContextManager  DFMgr  ( " Memory.xml " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    DFHack : : Context  * DF ; 
 
					 
					 
					 
					    DFHack : : Context  * DF ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -59,91 +144,36 @@ int main (int argc,const char* argv[])
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    DFHack : : Gui  *  Gui  =  DF - > getGui ( ) ; 
 
					 
					 
					 
					    DFHack : : Gui  *  Gui  =  DF - > getGui ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    
 
					 
					 
					 
					    
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    uint32_t  numBuildings ; 
 
					 
					 
					 
					    uint32_t  numBuildings ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if ( Bld - > Start ( numBuildings ) ) 
 
					 
					 
					 
					    if ( ! Bld - > Start ( numBuildings ) ) 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    { 
 
					 
					 
					 
					    { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        Bld - > ReadCustomWorkshopTypes ( custom_workshop_types ) ; 
 
					 
					 
					 
					        std : : cerr  < <  " buildings not supported for this DF version "  < <  std : : endl ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        if ( mode ) 
 
					 
					 
					 
					        doFinish ( DF ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        { 
 
					 
					 
					 
					        return  1 ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					            std : : cout  < <  numBuildings  < <  std : : endl ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            std : : vector  <  uint32_t  >  addresses ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            for ( uint32_t  i  =  0 ;  i  <  numBuildings ;  i + + ) 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                DFHack : : t_building  temp ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                Bld - > Read ( i ,  temp ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                if ( temp . type  ! =  0xFFFFFFFF )  // check if type isn't invalid
 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    std : : string  typestr ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    mem - > resolveClassIDToClassname ( temp . type ,  typestr ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    std : : cout  < <  typestr  < <  std : : endl ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    if ( typestr  = =  argv [ 1 ] ) 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        //cout << buildingtypes[temp.type] << " 0x" << hex << temp.origin << endl;
 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        //hexdump(DF, temp.origin, 256);
 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        addresses . push_back ( temp . origin ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    } 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                } 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                else 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    // couldn't translate type, print out the vtable
 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    std : : cout  < <  " unknown vtable:  "  < <  temp . vtable  < <  std : : endl ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                } 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            } 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            interleave_hex ( DF , addresses , lines  /  4 ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        } 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        else  // mode
 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            int32_t  x , y , z ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            Gui - > getCursorCoords ( x , y , z ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            if ( x  ! =  - 30000 ) 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                for ( uint32_t  i  =  0 ;  i  <  numBuildings ;  i + + ) 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    DFHack : : t_building  temp ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    Bld - > Read ( i ,  temp ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    if (     ( uint32_t ) x  > =  temp . x1 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        & &  ( uint32_t ) x  < =  temp . x2 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        & &  ( uint32_t ) y  > =  temp . y1 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        & &  ( uint32_t ) y  < =  temp . y2 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        & &  ( uint32_t ) z  = =  temp . z 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                      ) 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        std : : string  typestr ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        mem - > resolveClassIDToClassname ( temp . type ,  typestr ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        printf ( " Address 0x%x, type %d (%s), %d/%d/%d \n " , temp . origin ,  temp . type ,  typestr . c_str ( ) ,  temp . x1 , temp . y1 , temp . z ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        printf ( " Material %d %d \n " ,  temp . material . type ,  temp . material . index ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        int32_t  custom ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        if ( ( custom  =  Bld - > GetCustomWorkshopType ( temp ) )  ! =  - 1 ) 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                            printf ( " Custom workshop type %s (%d) \n " , custom_workshop_types [ custom ] . c_str ( ) , custom ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        } 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                        hexdump ( DF , temp . origin , 120 * 16 ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    } 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                } 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            } 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            else 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                std : : cout  < <  numBuildings  < <  std : : endl ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                for ( uint32_t  i  =  0 ;  i  <  numBuildings ;  i + + ) 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    DFHack : : t_building  temp ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    Bld - > Read ( i ,  temp ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    std : : string  typestr ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    mem - > resolveClassIDToClassname ( temp . type ,  typestr ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    printf ( " Address 0x%x, type %d (%s), %d/%d/%d \n " , temp . origin ,  temp . type ,  typestr . c_str ( ) ,  temp . x1 , temp . y1 , temp . z ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                } 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            } 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        } 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        Bld - > Finish ( ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( numBuildings  = =  0 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        cout  < <  " No buildings on site. "  < <  endl ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        doFinish ( DF ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        return  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( word_per_line ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        doWordPerLine ( DF ,  mem ,  Bld ,  numBuildings ,  argv [ 1 ] ,  lines ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    else 
 
					 
					 
					 
					    else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    { 
 
					 
					 
					 
					    { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        std : : cerr  < <  " buildings not supported for this DF version "  < <  std : : endl ; 
 
					 
					 
					 
					        int32_t  x , y , z ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        Gui - > getCursorCoords ( x , y , z ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        if ( x  ! =  - 30000 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            doUnderCursor ( DF ,  mem ,  Bld ,  numBuildings ,  x ,  y ,  z ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            doListAll ( mem ,  Bld ,  numBuildings ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    DF - > Detach ( ) ; 
 
					 
					 
					 
					    Bld - > Finish ( ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    # ifndef LINUX_BUILD 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        std : : cout  < <  " Done. Press any key to continue "  < <  std : : endl ; 
 
					 
					 
					 
					    doFinish ( DF ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        cin . ignore ( ) ; 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    # endif 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    return  0 ; 
 
					 
					 
					 
					    return  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					}