diff options
Diffstat (limited to 'app/bin/dcmpnd.c')
-rw-r--r-- | app/bin/dcmpnd.c | 342 |
1 files changed, 194 insertions, 148 deletions
diff --git a/app/bin/dcmpnd.c b/app/bin/dcmpnd.c index 93e73ac..9b7dfcc 100644 --- a/app/bin/dcmpnd.c +++ b/app/bin/dcmpnd.c @@ -17,23 +17,19 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include <ctype.h> -#include <string.h> - #include "compound.h" #include "cundo.h" #include "custom.h" #include "fileio.h" -#include "i18n.h" -#include "messages.h" #include "param.h" #include "include/paramfile.h" #include "shrtpath.h" #include "track.h" -#include "utility.h" +#include "trkendpt.h" +#include "common-ui.h" /***************************************************************************** * @@ -47,11 +43,11 @@ static updateType_e updateListType; static BOOL_T updateWVisible; static BOOL_T updateWStale; typedef struct { - updateType_e type; - SCALEINX_T scale; - char * old; - char * new; - } updateTitleElement; + updateType_e type; + SCALEINX_T scale; + char * old; + char * new; +} updateTitleElement; static dynArr_t updateTitles_da; #define updateTitles(N) DYNARR_N( updateTitleElement, updateTitles_da, N ) @@ -68,30 +64,35 @@ static paramData_t updateTitlePLs[] = { { PD_MESSAGE, "You can use the List Labels control on the Preferences dialog to" }, { PD_MESSAGE, "control the format of the list entries" }, #define I_UPDATESTR (9) - { PD_STRING, NULL, "old", PDO_NOPREF, (void*)400, NULL, BO_READONLY }, + { PD_STRING, NULL, "old", PDO_NOPREF, I2VP(400), NULL, BO_READONLY }, #define I_UPDATELIST (10) #define updateTitleL ((wList_p)updateTitlePLs[I_UPDATELIST].control) - { PD_DROPLIST, NULL, "sel", PDO_NOPREF, (void*)400 }, - { PD_BUTTON, (void*)UpdateTitleIgnore, "ignore", PDO_DLGCMDBUTTON, NULL, N_("Ignore") }, + { PD_DROPLIST, NULL, "sel", PDO_NOPREF, I2VP(400) }, + { PD_BUTTON, UpdateTitleIgnore, "ignore", PDO_DLGCMDBUTTON, NULL, N_("Ignore") }, #define I_UPDATELOAD (12) - { PD_BUTTON, NULL, "load", 0, NULL, N_("Load") } }; -static paramGroup_t updateTitlePG = { "updatetitle", 0, updateTitlePLs, sizeof updateTitlePLs/sizeof updateTitlePLs[0] }; + { PD_BUTTON, NULL, "load", 0, NULL, N_("Load") } +}; +static paramGroup_t updateTitlePG = { "updatetitle", 0, updateTitlePLs, COUNT( updateTitlePLs ) }; static void UpdateTitleChange( long changes ) { - if ( (changes & (CHANGE_SCALE|CHANGE_PARAMS)) == 0 ) + if ( (changes & (CHANGE_SCALE|CHANGE_PARAMS)) == 0 ) { return; + } if (!updateWVisible) { updateWStale = TRUE; return; } wControlShow( (wControl_p)updateTitleL, FALSE ); wListClear( updateTitleL ); - if (updateTitles(updateTitleInx).type == updateTurnout) - TurnoutAdd( listLabels, updateTitles(updateTitleInx).scale, updateTitleL, NULL, -1 ); - else - StructAdd( listLabels, updateTitles(updateTitleInx).scale, updateTitleL, NULL ); + if (updateTitles(updateTitleInx).type == updateTurnout) { + TurnoutAdd( listLabels, updateTitles(updateTitleInx).scale, updateTitleL, NULL, + -1 ); + } else { + StructAdd( listLabels, updateTitles(updateTitleInx).scale, updateTitleL, + NULL ); + } wControlShow( (wControl_p)updateTitleL, TRUE ); updateListType = updateTitles(updateTitleInx).type; } @@ -102,7 +103,7 @@ static void UpdateTitleNext( void ) wIndex_t inx; wIndex_t cnt; track_p trk; - struct extraData *xx; + struct extraDataCompound_t *xx; updateTitleInx++; if (updateTitleInx >= updateTitles_da.cnt) { wHide( updateTitleW ); @@ -112,11 +113,12 @@ static void UpdateTitleNext( void ) trk = NULL; while (TrackIterate( &trk ) ) { InfoCount(cnt++); - if (GetTrkType(trk) == T_TURNOUT || GetTrkType(trk) == T_STRUCTURE) { - xx = GetTrkExtraData(trk); + TRKTYP_T trkType = GetTrkType(trk); + if (trkType == T_TURNOUT || trkType == T_STRUCTURE) { + xx = GET_EXTRA_DATA(trk, trkType, extraDataCompound_t); for (inx=0; inx<updateTitles_da.cnt; inx++) { if ( updateTitles(inx).old && - strcmp( xx->title, updateTitles(inx).old ) == 0 ) { + strcmp( xx->title, updateTitles(inx).old ) == 0 ) { xx->title = MyStrdup( updateTitles(inx).new ); break; } @@ -126,14 +128,15 @@ static void UpdateTitleNext( void ) DYNARR_RESET( updateTitleElement, updateTitles_da ); InfoMessage(""); InfoCount( trackCount ); - changed++; - SetWindowTitle(); + SetFileChanged(); DoChangeNotification( CHANGE_MAIN ); return; } - ParamLoadMessage( &updateTitlePG, I_UPDATESTR, updateTitles(updateTitleInx).old ); - if (updateWStale || updateTitles(updateTitleInx).type != updateListType) + ParamLoadMessage( &updateTitlePG, I_UPDATESTR, + updateTitles(updateTitleInx).old ); + if (updateWStale || updateTitles(updateTitleInx).type != updateListType) { UpdateTitleChange( CHANGE_SCALE|CHANGE_PARAMS ); + } } @@ -165,12 +168,15 @@ static void UpdateTitleCancel( wWin_p junk ) void DoUpdateTitles( void ) { - if (updateTitles_da.cnt <= 0) + if (updateTitles_da.cnt <= 0) { return; + } if (updateTitleW == NULL) { ParamRegister( &updateTitlePG ); - updateTitlePLs[I_UPDATELOAD].valueP = (void*)ParamFilesInit(); - updateTitleW = ParamCreateDialog( &updateTitlePG, MakeWindowTitle(_("Update Title")), _("Update"), UpdateTitleUpdate, UpdateTitleCancel, TRUE, NULL, 0, NULL ); + updateTitlePLs[I_UPDATELOAD].valueP = ParamFilesInit(); + updateTitleW = ParamCreateDialog( &updateTitlePG, + MakeWindowTitle(_("Update Title")), _("Update"), UpdateTitleUpdate, + UpdateTitleCancel, TRUE, NULL, 0, NULL ); RegisterChangeNotification( UpdateTitleChange ); } updateTitleInx = -1; @@ -181,13 +187,14 @@ void DoUpdateTitles( void ) } EXPORT void UpdateTitleMark( - char * title, - SCALEINX_T scale ) + char * title, + SCALEINX_T scale ) { int inx; updateTitleElement * ut; - if ( inPlayback ) + if ( inPlayback ) { return; + } for (inx=0; inx<updateTitles_da.cnt; inx++) { if (strcmp(title,updateTitles(inx).old) == 0) { return; @@ -195,10 +202,11 @@ EXPORT void UpdateTitleMark( } DYNARR_APPEND( updateTitleElement, updateTitles_da, 10 ); ut = &updateTitles(updateTitles_da.cnt-1); - if ( tempEndPts_da.cnt > 0) + if ( TempEndPtsCount() > 0) { ut->type = updateTurnout; - else + } else { ut->type = updateStructure; + } ut->scale = scale; ut->old = MyStrdup(title); ut->new = NULL; @@ -211,14 +219,15 @@ EXPORT void UpdateTitleMark( */ static BOOL_T CheckCompoundEndPoint( - track_p trk, - EPINX_T trkEp, - turnoutInfo_t * to, - EPINX_T toEp, - BOOL_T flip ) + track_p trk, + EPINX_T trkEp, + turnoutInfo_t * to, + EPINX_T toEp, + BOOL_T flip ) { - - struct extraData *xx = GetTrkExtraData(trk); + + struct extraDataCompound_t *xx = GET_EXTRA_DATA(trk, T_TURNOUT, + extraDataCompound_t); coOrd pos; DIST_T d; ANGLE_T a, a2; @@ -226,20 +235,24 @@ static BOOL_T CheckCompoundEndPoint( Rotate( &pos, xx->orig, -xx->angle ); pos.x -= xx->orig.x; pos.y -= xx->orig.y; - if ( flip ) + if ( flip ) { pos.y = - pos.y; - d = FindDistance( pos, to->endPt[toEp].pos ); + } + d = FindDistance( pos, GetEndPtPos(EndPtIndex(to->endPt,toEp))); if ( d > connectDistance ) { - sprintf( message, _("End-Point #%d of the selected and actual turnouts are not close"), toEp ); + sprintf( message, + _("End-Point #%d of the selected and actual turnouts are not close"), toEp ); return FALSE; } a = GetTrkEndAngle( trk, trkEp ); - a2 = to->endPt[toEp].angle; - if ( flip ) + a2 = GetEndPtAngle(EndPtIndex(to->endPt,toEp)); + if ( flip ) { a2 = 180.0 - a2; + } a = NormalizeAngle( a - xx->angle - a2 + connectAngle/2.0 ); if ( a > connectAngle ) { - sprintf( message, _("End-Point #%d of the selected and actual turnouts are not aligned"), toEp ); + sprintf( message, + _("End-Point #%d of the selected and actual turnouts are not aligned"), toEp ); return FALSE; } return TRUE; @@ -248,17 +261,17 @@ static BOOL_T CheckCompoundEndPoint( int refreshCompoundCnt; static BOOL_T RefreshCompound1( - track_p trk, - turnoutInfo_t * to ) + track_p trk, + turnoutInfo_t * to ) { - struct extraData *xx = GetTrkExtraData(trk); EPINX_T ep, epCnt; BOOL_T ok; BOOL_T flip = FALSE; epCnt = GetTrkEndPtCnt(trk); if ( epCnt != to->endCnt ) { - strcpy( message, _("The selected Turnout had a differing number of End-Points") ); + strcpy( message, + _("The selected Turnout had a differing number of End-Points") ); return FALSE; } ok = TRUE; @@ -269,35 +282,36 @@ static BOOL_T RefreshCompound1( } if ( !ok ) { if ( ep > 0 && epCnt == 2 && - CheckCompoundEndPoint( trk, 1, to, 1, TRUE ) ) { + CheckCompoundEndPoint( trk, 1, to, 1, TRUE ) ) { flip = TRUE; ok = TRUE; } else if ( ep > 0 && epCnt == 3 && - CheckCompoundEndPoint( trk, 1, to, 2, FALSE ) && - CheckCompoundEndPoint( trk, 2, to, 1, FALSE ) ) { + CheckCompoundEndPoint( trk, 1, to, 2, FALSE ) && + CheckCompoundEndPoint( trk, 2, to, 1, FALSE ) ) { ok = TRUE; } else if ( ep > 0 && epCnt == 4 && - CheckCompoundEndPoint( trk, 1, to, 3, FALSE ) && - CheckCompoundEndPoint( trk, 2, to, 2, FALSE ) && - CheckCompoundEndPoint( trk, 3, to, 1, FALSE ) ) { + CheckCompoundEndPoint( trk, 1, to, 3, FALSE ) && + CheckCompoundEndPoint( trk, 2, to, 2, FALSE ) && + CheckCompoundEndPoint( trk, 3, to, 1, FALSE ) ) { ok = TRUE; } else { return FALSE; } } UndoModify( trk ); + struct extraDataCompound_t *xx = GET_EXTRA_DATA(trk, T_NOTRACK, + extraDataCompound_t); FreeFilledDraw( xx->segCnt, xx->segs ); MyFree( xx->segs ); xx->segCnt = to->segCnt; xx->segs = (trkSeg_p)MyMalloc( xx->segCnt * sizeof *(trkSeg_p)0 ); memcpy( xx->segs, to->segs, xx->segCnt * sizeof *(trkSeg_p)0 ); - MyFree( xx->paths); - xx->paths = (signed char*)MyMalloc( to->pathLen * sizeof *xx->paths ); - memcpy( xx->paths, to->paths, to->pathLen * sizeof *xx->paths ); - xx->pathLen = to->pathLen; - xx->pathCurr = xx->paths; - if ( flip ) + xx->pathOverRide = to->pathOverRide; + xx->pathNoCombine = to->pathNoCombine; + SetPaths( trk, GetParamPaths(to) ); + if ( flip ) { FlipSegs( xx->segCnt, xx->segs, zero, 90.0 ); + } ClrTrkBits( trk, TB_SELECTED ); refreshCompoundCnt++; CloneFilledDraw( xx->segCnt, xx->segs, FALSE ); @@ -306,51 +320,52 @@ static BOOL_T RefreshCompound1( typedef struct { - char * name; - turnoutInfo_t * to; - } refreshSpecial_t; + char * name; + turnoutInfo_t * to; +} refreshSpecial_t; static dynArr_t refreshSpecial_da; #define refreshSpecial(N) DYNARR_N( refreshSpecial_t, refreshSpecial_da, N ) static wIndex_t refreshSpecialInx; static BOOL_T refreshReturnVal; -static void RefreshSkip( void * ); +static void RefreshSkip( void * junk ); static paramListData_t refreshSpecialListData = { 30, 600, 0, NULL, NULL }; static paramData_t refreshSpecialPLs[] = { #define REFRESH_M1 (0) - { PD_MESSAGE, NULL, NULL, 0/*PDO_DLGRESIZEW*/, (void*)380 }, + { PD_MESSAGE, NULL, NULL, 0/*PDO_DLGRESIZEW*/, I2VP(380) }, #define REFRESH_M2 (1) - { PD_MESSAGE, NULL, NULL, 0/*PDO_DLGRESIZEW*/, (void*)380 }, + { PD_MESSAGE, NULL, NULL, 0/*PDO_DLGRESIZEW*/, I2VP(380) }, #define REFRESH_S (2) - { PD_MESSAGE, NULL, NULL, 0/*PDO_DLGRESIZEW*/, (void*)380 }, + { PD_MESSAGE, NULL, NULL, 0/*PDO_DLGRESIZEW*/, I2VP(380) }, #define REFRESH_L (3) - { PD_LIST, &refreshSpecialInx, "list", PDO_LISTINDEX|PDO_NOPREF|PDO_DLGRESIZE, &refreshSpecialListData, NULL, BO_READONLY }, - { PD_BUTTON, (void*)RefreshSkip, "skip", PDO_DLGCMDBUTTON, NULL, N_("Skip") } }; -static paramGroup_t refreshSpecialPG = { "refreshSpecial", 0, refreshSpecialPLs, sizeof refreshSpecialPLs/sizeof refreshSpecialPLs[0] }; + { PD_LIST, &refreshSpecialInx, "list", PDO_LISTINDEX|PDO_NOPREF|PDO_DLGRESIZE, &refreshSpecialListData, NULL, BO_READONLY }, + { PD_BUTTON, RefreshSkip, "skip", PDO_DLGCMDBUTTON, NULL, N_("Skip") } +}; +static paramGroup_t refreshSpecialPG = { "refreshSpecial", 0, refreshSpecialPLs, COUNT( refreshSpecialPLs ) }; static void RefreshSpecialOk( - void * junk ) + void * junk ) { wHide( refreshSpecialPG.win ); } static void RefreshSpecialCancel( - wWin_p win ) + wWin_p win ) { refreshSpecialInx = -1; refreshReturnVal = FALSE; wHide( refreshSpecialPG.win ); } static void RefreshSkip( - void * junk ) + void * junk ) { refreshSpecialInx = -1; wHide( refreshSpecialPG.win ); } EXPORT BOOL_T RefreshCompound( - track_p trk, - BOOL_T junk ) + track_p trk, + BOOL_T junk ) { TRKTYP_T trkType; - struct extraData *xx; + struct extraDataCompound_t *xx; int inx; turnoutInfo_t *to; SCALEINX_T scale; @@ -360,27 +375,29 @@ EXPORT BOOL_T RefreshCompound( refreshCompoundCnt = 0; for ( inx=0; inx<refreshSpecial_da.cnt; inx++ ) if ( refreshSpecial(inx).name != NULL && - refreshSpecial(inx).to == NULL ) + refreshSpecial(inx).to == NULL ) { refreshSpecial(inx).name = NULL; + } return FALSE; } trkType = GetTrkType(trk); - xx = GetTrkExtraData(trk); scale = GetTrkScale(trk); if ( trkType != T_TURNOUT && trkType != T_STRUCTURE ) { ClrTrkBits( trk, TB_SELECTED ); return TRUE; } + xx = GET_EXTRA_DATA(trk, trkType, extraDataCompound_t); refreshReturnVal = TRUE; for ( inx=0; inx<refreshSpecial_da.cnt; inx++ ) { if ( refreshSpecial(inx).name != NULL && - strcasecmp( xx->title, refreshSpecial(inx).name ) == 0 ) { + strcasecmp( xx->title, refreshSpecial(inx).name ) == 0 ) { to = refreshSpecial(inx).to; - if ( to == NULL ) + if ( to == NULL ) { return TRUE; + } if ( IsParamValid(to->paramFileIndex) && - to->segCnt > 0 && - CompatibleScale( GetTrkEndPtCnt(trk)>0, to->scaleInx, scale ) ) { + to->segCnt > 0 && + (FIT_NONE != CompatibleScale( GetTrkEndPtCnt(trk)>0, to->scaleInx, scale ) )) { if ( RefreshCompound1( trk, refreshSpecial(inx).to ) ) { if ( strcasecmp( xx->title, to->title ) != 0 ) { MyFree( xx->title ); @@ -391,24 +408,32 @@ EXPORT BOOL_T RefreshCompound( } } } - if ( ( to = FindCompound( FIND_TURNOUT|FIND_STRUCT, NULL, xx->title ) ) != NULL && - RefreshCompound1( trk, to ) ) + if ( ( to = FindCompound( FIND_TURNOUT|FIND_STRUCT, NULL, xx->title ) ) != NULL + && + RefreshCompound1( trk, to ) ) { return TRUE; + } if ( refreshSpecialPG.win == NULL ) { ParamRegister( &refreshSpecialPG ); - ParamCreateDialog( &refreshSpecialPG, MakeWindowTitle(_("Refresh Turnout/Structure")), _("Ok"), RefreshSpecialOk, RefreshSpecialCancel, TRUE, NULL, F_BLOCK|F_RESIZE|F_RECALLSIZE, NULL ); + ParamCreateDialog( &refreshSpecialPG, + MakeWindowTitle(_("Refresh Turnout/Structure")), _("Ok"), RefreshSpecialOk, + RefreshSpecialCancel, TRUE, NULL, F_BLOCK|F_RESIZE|F_RECALLSIZE, NULL ); } - ParamLoadMessage( &refreshSpecialPG, REFRESH_M1, _("Choose a Turnout/Structure to replace:") ); + ParamLoadMessage( &refreshSpecialPG, REFRESH_M1, + _("Choose a Turnout/Structure to replace:") ); ParamLoadMessage( &refreshSpecialPG, REFRESH_M2, "" ); refreshSpecialInx = -1; wListClear( (wList_p)refreshSpecialPLs[REFRESH_L].control ); - if ( GetTrkEndPtCnt(trk) > 0 ) - to = TurnoutAdd( listLabels, scale, (wList_p)refreshSpecialPLs[REFRESH_L].control, NULL, GetTrkEndPtCnt(trk) ); - else - to = StructAdd( listLabels, scale, (wList_p)refreshSpecialPLs[REFRESH_L].control, NULL ); + if ( GetTrkEndPtCnt(trk) > 0 ) { + to = TurnoutAdd( listLabels, scale, + (wList_p)refreshSpecialPLs[REFRESH_L].control, NULL, GetTrkEndPtCnt(trk) ); + } else { + to = StructAdd( listLabels, scale, + (wList_p)refreshSpecialPLs[REFRESH_L].control, NULL ); + } if ( to == NULL ) { NoticeMessage( MSG_NO_TURNOUTS_AVAILABLE, _("Ok"), NULL, - GetTrkEndPtCnt(trk)>0 ? _("Turnouts") : _("Structures") ); + GetTrkEndPtCnt(trk)>0 ? _("Turnouts") : _("Structures") ); return FALSE; } FormatCompoundTitle( listLabels, xx->title ); @@ -424,9 +449,10 @@ EXPORT BOOL_T RefreshCompound( } return refreshReturnVal; } - to = (turnoutInfo_t*)wListGetItemContext( (wList_p)refreshSpecialPLs[REFRESH_L].control, refreshSpecialInx ); + to = (turnoutInfo_t*)wListGetItemContext( (wList_p) + refreshSpecialPLs[REFRESH_L].control, refreshSpecialInx ); if ( to != NULL && - RefreshCompound1( trk, to ) ) { + RefreshCompound1( trk, to ) ) { DYNARR_APPEND( refreshSpecial_t, refreshSpecial_da, 10 ); refreshSpecial(refreshSpecial_da.cnt-1).to = to; refreshSpecial(refreshSpecial_da.cnt-1).name = MyStrdup( xx->title ); @@ -437,7 +463,8 @@ EXPORT BOOL_T RefreshCompound( return TRUE; } ParamLoadMessage( &refreshSpecialPG, REFRESH_M1, message ); - ParamLoadMessage( &refreshSpecialPG, REFRESH_M2, _("Choose another Turnout/Structure to replace:") ); + ParamLoadMessage( &refreshSpecialPG, REFRESH_M2, + _("Choose another Turnout/Structure to replace:") ); } } @@ -453,14 +480,15 @@ static char renamePartno[STR_SIZE]; static turnoutInfo_t * renameTo; static paramData_t renamePLs[] = { -/*0*/ { PD_STRING, renameManuf, "manuf", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Manufacturer"), 0, 0, sizeof(renameManuf)}, -/*1*/ { PD_STRING, renameDesc, "desc", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)230, N_("Description"), 0, 0, sizeof(renameDesc)}, -/*2*/ { PD_STRING, renamePartno, "partno", PDO_NOPREF|PDO_DLGHORZ|PDO_DLGIGNORELABELWIDTH | PDO_STRINGLIMITLENGTH, (void*)100, N_("#"), 0, 0, sizeof(renamePartno)} }; -static paramGroup_t renamePG = { "rename", 0, renamePLs, sizeof renamePLs/sizeof renamePLs[0] }; + /*0*/ { PD_STRING, renameManuf, "manuf", PDO_NOPREF | PDO_NOTBLANK, I2VP(350), N_("Manufacturer"), 0, 0, sizeof(renameManuf)}, + /*1*/ { PD_STRING, renameDesc, "desc", PDO_NOPREF | PDO_NOTBLANK, I2VP(230), N_("Description"), 0, 0, sizeof(renameDesc)}, + /*2*/ { PD_STRING, renamePartno, "partno", PDO_NOPREF|PDO_DLGHORZ|PDO_DLGIGNORELABELWIDTH | PDO_NOTBLANK, I2VP(100), N_("#"), 0, 0, sizeof(renamePartno)} +}; +static paramGroup_t renamePG = { "rename", 0, renamePLs, COUNT( renamePLs ) }; EXPORT BOOL_T CompoundCustomSave( - FILE * f ) + FILE * f ) { int inx; turnoutInfo_t * to; @@ -469,19 +497,24 @@ EXPORT BOOL_T CompoundCustomSave( for ( inx=0; inx<turnoutInfo_da.cnt; inx++ ) { to = turnoutInfo(inx); if (to->paramFileIndex == PARAM_CUSTOM && to->segCnt > 0) { - rc &= fprintf( f, "TURNOUT %s \"%s\"\n", GetScaleName(to->scaleInx), PutTitle(to->title) )>0; - if ( to->customInfo ) + rc &= fprintf( f, "TURNOUT %s \"%s\"\n", GetScaleName(to->scaleInx), + PutTitle(to->title) )>0; + if ( to->customInfo ) { rc &= fprintf( f, "\tU %s\n",to->customInfo )>0; - rc &= WriteCompoundPathsEndPtsSegs( f, to->paths, to->segCnt, to->segs, - to->endCnt, to->endPt ); + } + rc &= WriteCompoundPathsEndPtsSegs( f, GetParamPaths( to ), to->segCnt, + to->segs, + to->endCnt, to->endPt ); } } for ( inx=0; inx<structureInfo_da.cnt; inx++ ) { to = structureInfo(inx); if (to->paramFileIndex == PARAM_CUSTOM && to->segCnt > 0) { - rc &= fprintf( f, "STRUCTURE %s \"%s\"\n", GetScaleName(to->scaleInx), PutTitle(to->title) )>0; - if ( to->customInfo ) + rc &= fprintf( f, "STRUCTURE %s \"%s\"\n", GetScaleName(to->scaleInx), + PutTitle(to->title) )>0; + if ( to->customInfo ) { rc &= fprintf( f, "\tU %s\n",to->customInfo )>0; + } rc &= WriteSegs( f, to->segCnt, to->segs ); } } @@ -492,8 +525,9 @@ EXPORT BOOL_T CompoundCustomSave( static void RenameOk( void * junk ) { sprintf( message, "%s\t%s\t%s", renameManuf, renameDesc, renamePartno ); - if ( renameTo->title ) + if ( renameTo->title ) { MyFree( renameTo->title ); + } renameTo->title = MyStrdup( message ); wHide( renamePG.win ); DoChangeNotification( CHANGE_PARAMS ); @@ -501,8 +535,8 @@ static void RenameOk( void * junk ) static int CompoundCustMgmProc( - int cmd, - void * data ) + int cmd, + void * data ) { turnoutInfo_t * to = (turnoutInfo_t*)data; turnoutInfo_t * to2=NULL; @@ -513,18 +547,24 @@ static int CompoundCustMgmProc( switch ( cmd ) { case CUSTMGM_DO_COPYTO: - if ( to->segCnt <= 0 ) + if ( to->segCnt <= 0 ) { return TRUE; + } if ( to->endCnt ) { - rc &= fprintf( customMgmF, "TURNOUT %s \"%s\"\n", GetScaleName(to->scaleInx), PutTitle(to->title) )>0; - if ( to->customInfo ) + rc &= fprintf( customMgmF, "TURNOUT %s \"%s\"\n", GetScaleName(to->scaleInx), + PutTitle(to->title) )>0; + if ( to->customInfo ) { rc &= fprintf( customMgmF, "\tU %s\n",to->customInfo )>0; - rc &= WriteCompoundPathsEndPtsSegs( customMgmF, to->paths, to->segCnt, to->segs, - to->endCnt, to->endPt ); + } + rc &= WriteCompoundPathsEndPtsSegs( customMgmF, + GetParamPaths( to ), to->segCnt, to->segs, + to->endCnt, to->endPt ); } else { - rc &= fprintf( customMgmF, "STRUCTURE %s \"%s\"\n", GetScaleName(to->scaleInx), PutTitle(to->title) )>0; - if ( to->customInfo ) + rc &= fprintf( customMgmF, "STRUCTURE %s \"%s\"\n", GetScaleName(to->scaleInx), + PutTitle(to->title) )>0; + if ( to->customInfo ) { rc &= fprintf( customMgmF, "\tU %s\n",to->customInfo )>0; + } rc &= WriteSegs( customMgmF, to->segCnt, to->segs ); } return rc; @@ -539,23 +579,24 @@ static int CompoundCustMgmProc( strncpy( renamePartno, nP, nL ); renamePartno[nL] = 0; if ( !renamePG.win ) { ParamRegister( &renamePG ); - ParamCreateDialog( &renamePG, MakeWindowTitle(_("Rename Object")), _("Ok"), RenameOk, wHide, TRUE, NULL, F_BLOCK, NULL ); + ParamCreateDialog( &renamePG, MakeWindowTitle(_("Rename Object")), _("Ok"), + RenameOk, wHide, TRUE, NULL, F_BLOCK, NULL ); } ParamLoadControls( &renamePG ); wShow( renamePG.win ); } else { - for (inx=0; inx<turnoutInfo_da.cnt && to!=turnoutInfo(inx); inx++); - if ( inx > 0 && - turnoutInfo(inx-1)->customInfo && - strcmp( to->customInfo, turnoutInfo(inx-1)->customInfo ) == 0 ) { - to2 = to; - to = turnoutInfo(inx-1); - } else if ( inx < turnoutInfo_da.cnt-1 && - turnoutInfo(inx+1)->customInfo && - strcmp( to->customInfo, turnoutInfo(inx+1)->customInfo ) == 0 ) { - to2 = turnoutInfo(inx+1); - } - EditCustomTurnout( to, to2 ); + for (inx=0; inx<turnoutInfo_da.cnt && to!=turnoutInfo(inx); inx++); + if ( inx > 0 && + turnoutInfo(inx-1)->customInfo && + strcmp( to->customInfo, turnoutInfo(inx-1)->customInfo ) == 0 ) { + to2 = to; + to = turnoutInfo(inx-1); + } else if ( inx < turnoutInfo_da.cnt-1 && + turnoutInfo(inx+1)->customInfo && + strcmp( to->customInfo, turnoutInfo(inx+1)->customInfo ) == 0 ) { + to2 = turnoutInfo(inx+1); + } + EditCustomTurnout( to, to2 ); } return TRUE; case CUSTMGM_CAN_DELETE: @@ -565,15 +606,16 @@ static int CompoundCustMgmProc( return TRUE; case CUSTMGM_GET_TITLE: ParseCompoundTitle( to->title, &mP, &mL, &pP, &pL, &nP, &nL ); - sprintf( message, "\t%.*s\t%s\t%.*s\t%.*s", mL, mP, GetScaleName(to->scaleInx), nL, nP, pL, pP ); + sprintf( message, "\t%.*s\t%s\t%.*s\t%.*s", mL, mP, GetScaleName(to->scaleInx), + nL, nP, pL, pP ); return TRUE; } return FALSE; } -#include "bitmaps/turnout.xpm" -#include "bitmaps/struct.xpm" +#include "bitmaps/turnout.xpm3" +#include "bitmaps/building.xpm3" EXPORT void CompoundCustMgmLoad( void ) { @@ -582,21 +624,23 @@ EXPORT void CompoundCustMgmLoad( void ) static wIcon_p turnoutI = NULL; static wIcon_p structI = NULL; - if ( turnoutI == NULL ) - turnoutI = wIconCreatePixMap( turnout_xpm ); - if ( structI == NULL ) - structI = wIconCreatePixMap( struct_xpm ); + if ( turnoutI == NULL ) { + turnoutI = wIconCreatePixMap( turnout_xpm3[0] ); + } + if ( structI == NULL ) { + structI = wIconCreatePixMap( building_xpm3[0] ); + } for ( inx=0; inx<turnoutInfo_da.cnt; inx++ ) { to = turnoutInfo(inx); if (to->paramFileIndex == PARAM_CUSTOM && to->segCnt > 0) { - CustMgmLoad( turnoutI, CompoundCustMgmProc, (void*)to ); + CustMgmLoad( turnoutI, CompoundCustMgmProc, to ); } } for ( inx=0; inx<structureInfo_da.cnt; inx++ ) { to = structureInfo(inx); if (to->paramFileIndex == PARAM_CUSTOM && to->segCnt > 0) { - CustMgmLoad( structI, CompoundCustMgmProc, (void*)to ); + CustMgmLoad( structI, CompoundCustMgmProc, to ); } } } @@ -608,13 +652,15 @@ EXPORT void CompoundCustMgmLoad( void ) */ wIndex_t FindListItemByContext( - wList_p listP, - void * context ) + wList_p listP, + void * context ) { - if ( listP == NULL ) + if ( listP == NULL ) { return -1; - if ( context == NULL ) + } + if ( context == NULL ) { return -1; + } for ( wIndex_t inx = 0; inx < wListGetCount( listP ); ++inx ) { void * itemContext = wListGetItemContext( listP, inx ); if ( itemContext != NULL ) { |