From 3193e3c83580dfee05939584ba9e00842958431b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Wed, 17 Feb 2010 20:00:55 +0100 Subject: [PATCH] Fixed segfault in veinlook and cleaned it up. Updated precompiled SHM for Linux. --- examples/veinlook.cpp | 185 +----------------------------------- precompiled/libdfconnect.so | Bin 12403 -> 12403 bytes 2 files changed, 5 insertions(+), 180 deletions(-) diff --git a/examples/veinlook.cpp b/examples/veinlook.cpp index 8e3ec3527..a77f284c1 100644 --- a/examples/veinlook.cpp +++ b/examples/veinlook.cpp @@ -1,171 +1,3 @@ -// produces a list of vein materials available on the map. can be run with '-a' modifier to show even unrevealed minerals deep underground -// with -b modifier, it will show base layer materials too - -// TODO: use material colors to make the output prettier -// TODO: needs the tiletype filter! -// TODO: tile override materials -// TODO: material types, trees, ice, constructions -// TODO: GUI -/* - -int main (int argc, const char* argv[]) -{ - - bool showhidden = false; - bool showbaselayers = false; - for(int i = 0; i < argc; i++) - { - string test = argv[i]; - if(test == "-a") - { - showhidden = true; - } - else if(test == "-b") - { - showbaselayers = true; - } - else if(test == "-ab" || test == "-ba") - { - showhidden = true; - showbaselayers = true; - } - } - // let's be more useful when double-clicked on windows - #ifndef LINUX_BUILD - showhidden = true; - #endif - uint32_t x_max,y_max,z_max; - uint16_t tiletypes[16][16]; - DFHack::t_designation designations[16][16]; - uint8_t regionoffsets[16]; - map materials; - materials.clear(); - vector stonetypes; - vector< vector > layerassign; - - // init the API - DFHack::API DF("Memory.xml"); - - // attach - if(!DF.Attach()) - { - cerr << "DF not found" << endl; - return 1; - } - - // init the map - DF.InitMap(); - DF.getSize(x_max,y_max,z_max); - - // get stone matgloss mapping - if(!DF.ReadStoneMatgloss(stonetypes)) - { - //DF.DestroyMap(); - cerr << "Can't get the materials." << endl; - return 1; - } - - // get region geology - if(!DF.ReadGeology( layerassign )) - { - cerr << "Can't get region geology." << endl; - return 1; - } - - int16_t tempvein [16][16]; - vector veins; - // walk the map! - for(uint32_t x = 0; x< x_max;x++) - { - for(uint32_t y = 0; y< y_max;y++) - { - for(uint32_t z = 0; z< z_max;z++) - { - if(!DF.isValidBlock(x,y,z)) - continue; - - // read data - DF.ReadTileTypes(x,y,z, (uint16_t *) tiletypes); - DF.ReadDesignations(x,y,z, (uint32_t *) designations); - - memset(tempvein, -1, sizeof(tempvein)); - veins.clear(); - DF.ReadVeins(x,y,z,veins); - - if(showbaselayers) - { - DF.ReadRegionOffsets(x,y,z, regionoffsets); - // get the layer materials - for(uint32_t xx = 0;xx<16;xx++) - { - for (uint32_t yy = 0; yy< 16;yy++) - { - tempvein[xx][yy] = - layerassign - [regionoffsets[designations[xx][yy].bits.biome]] - [designations[xx][yy].bits.geolayer_index]; - } - } - } - - // for each vein - for(int i = 0; i < (int)veins.size();i++) - { - //iterate through vein rows - for(uint32_t j = 0;j<16;j++) - { - //iterate through the bits - for (uint32_t k = 0; k< 16;k++) - { - // and the bit array with a one-bit mask, check if the bit is set - bool set = !!(((1 << k) & veins[i].assignment[j]) >> k); - if(set) - { - // store matgloss - tempvein[k][j] = veins[i].type; - } - } - } - } - // count the material types - for(uint32_t xi = 0 ; xi< 16 ; xi++) - { - for(uint32_t yi = 0 ; yi< 16 ; yi++) - { - // hidden tiles are ignored unless '-a' is provided on the command line - // non-wall tiles are ignored - if( (designations[xi][yi].bits.hidden && !showhidden) || !DFHack::isWallTerrain(tiletypes[xi][yi])) - continue; - if(tempvein[xi][yi] < 0) - continue; - - if(materials.count(tempvein[xi][yi])) - { - materials[tempvein[xi][yi]] += 1; - } - else - { - materials[tempvein[xi][yi]] = 1; - } - } - } - } - } - } - // print report - map::iterator p; - for(p = materials.begin(); p != materials.end(); p++) - { - cout << stonetypes[p->first].id << " : " << p->second << endl; - } - DF.Detach(); - #ifndef LINUX_BUILD - cout << "Done. Press any key to continue" << endl; - cin.ignore(); - #endif - return 0; -} -*/ #include #include // for memset #include @@ -272,7 +104,6 @@ int puttile(int x, int y, int tiletype, int color) znak= '*'; break; } -// wechochar(stdscr,znak); attron(COLOR_PAIR(color)); mvwaddch(stdscr, y, x, znak); attroff(COLOR_PAIR(color)); @@ -293,7 +124,6 @@ void clrscr() wclear(stdscr); } - /* enum TileMaterial { @@ -442,18 +272,14 @@ main(int argc, char *argv[]) finish(0); } - - - //int16_t base [16][16]; - //int16_t vein [16][16]; int cursorX = x_max/2 - 1; int cursorY = y_max/2 - 1; int cursorZ = z_max/2 - 1; + + // FIXME: could fail on small forts + int vein = 0; - //int16_t tempvein [16][16]; // walk the map! - - for (;;) { int c = getch(); /* refresh, accept single keystroke of input */ @@ -538,7 +364,7 @@ main(int argc, char *argv[]) cprintf("X %d/%d, Y %d/%d, Z %d/%d. Vein %d of %d",cursorX + 1,x_max,cursorY + 1,y_max,cursorZ + 1,z_max,vein+1,veinVector.size()); if(!veinVector.empty()) { - if(vein != -1) + if(vein != -1 && vein < veinVector.size()) { string str = getGCCClassName(p, veinVector[vein].vtable); if(str == "34block_square_event_frozen_liquidst") @@ -557,7 +383,6 @@ main(int argc, char *argv[]) attron(A_STANDOUT); puttile(i+16,j+16,tile, color); attroff(A_STANDOUT); - } } } @@ -585,7 +410,7 @@ main(int argc, char *argv[]) DF.Resume(); wrefresh(stdscr); } - finish(0); /* we're done */ + finish(0); } static void finish(int sig) diff --git a/precompiled/libdfconnect.so b/precompiled/libdfconnect.so index d2ddba257939d59b6dff7cca3daa750645fadc63..fa88bc0a78bee4f85b434d3922f9b74c85364960 100755 GIT binary patch delta 1228 zcmeyI@Ht_E3#*AZ1B1y#&wS1uq6`dRJn>+%$X$kP_bb2emGE9RYULHOcp-Irdi`b# zMhRxY1bzmFAO;2oAqE}>F$M;P6O$8J{232S-pG>dYX=n%V_;y&FkoO{VPIeoWRPIE z&A`CGz|X)C2bGs+WMKFpz`)SY2sMY1fuTWwfgu?x?+)T`PGsd~VN}?h%jwO;^x^U3 zUEG$8Hk-e2+c7b!Pd4V8;2Hd4-=F{g8xLzMGB7m1Dd}}x(&?hYaok0Pg^7WIp}YCZ z|NsBH89G^1UMT$PP_~$^ZEkgcN`M|KHvG18%V5ugQi2ikk0!{{P?YdZ+b3 z>Emv;<1Q*3Ape3K0-`|WPbT{bOEFqco+cpA{_hva-0aDF1WcrlJo*10 z1^ds*+=9~Vy@Z!T{UXksS4MfjO zz9|x3&%h|nY#qSBz`)7Cz;NU1|NjLby+8i{pTNMt!143{|1}H@3?4uK|3AUNz_8-y z|Nl=w;=lg?XJBMtIPvTMe+5Pc28-YS|J#80fByfEVPs&C0EICF0|R4KKoA3C4F}t7 zGbsiJX&x4q4n`RU1_lKN28M*M|NnC`Pv#RBn>;~`#WLW>|NpWeZH{~#POVJ5tUk@m zAY)<}7#Ko+{QnQiMhs|j6$}gv6_YQDiL*{&U|`rY`K_2Z+Xj#sKPPjEOL1OcU|?AA z^Z)|34^y!42|lW@%%FxR-~Kfgxpcs(3p4Ik}AiU z3_%(|u3={21yNuvAOoj5_g59|Sfh=?Jm_ E0E}k7^#A|> delta 1280 zcmeyI@Ht_E3u}!y14GS3&wS25q6`dRJn>+%Nc%ZsZr<|}vy_u{uD2dyUv~JM{QF)>C`~UxL*Eb+3Mg|6kP8St{ZnjPr6`tPa3zH8D2+KGB`v1SV_6-yN zlmpFg8lvN34^If~d>Z`14{X8i$vphpjFOWr_;uOe{RUYXJvoP8n{nsl8T|SjJz$Za z@{`Z=D+qo3`Tu`+^AC{C3?Q37{+!Gxps2AABIl$#Z`E|Nr9pkIA{UN6?6U(|3?l)_{~tD}4X||0VnX|Nr5N-#`_oP0kjQsz3Jw z>_}M#hUPaS$5~YVgOoOZ0;zFPVR<3*{r`WcXlHW+0|P^EGb_X^EH4<4d*(|>O|Np{xvYoIv;{%WY-~X>*GeGhE z;_@k-|9=ew1B1!W|NqZ` z|Njmk{-6K<6Brp7BtYTLz`(#*6%fS0 zSi`|K`;#OCgES8dO9!J20|SEs0|SH1*Z==HnHeUVi%Bx_Ob!$i)&8;|!=4pmUd>4`>rrBFmz0QC??MOfq{YH&g8#h(yRiE3=BS-WyRCkC!diE zVEnOJRz8}ANrQ88m9iY`4`EPYFjrZbQ$&P;0fb*nKB+9v3NBM7zg1S|3=m^r0AZcY zk}AiU3_%(|mNPT(f+(;S5QCY44@7|rBM^g`fgeOM1Z);mw`XLmm>j4f&v;;Sp@uvY z