diff options
Diffstat (limited to 'app/bin/dcar.c')
-rw-r--r-- | app/bin/dcar.c | 3088 |
1 files changed, 1760 insertions, 1328 deletions
diff --git a/app/bin/dcar.c b/app/bin/dcar.c index 5607738..11a5a1e 100644 --- a/app/bin/dcar.c +++ b/app/bin/dcar.c @@ -17,7 +17,7 @@ * * 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 "cselect.h" @@ -36,7 +36,7 @@ static int log_carInvList; static int log_carDlgState; static int log_carDlgList; -static paramFloatRange_t r0_99999 = { 0, 99999, 80 }; +//static paramFloatRange_t r0_99999 = { 0, 99999, 80 }; static paramFloatRange_t r0d001_99999 = { 0.001, 99999, 80 }; static paramFloatRange_t r9999_9999 = {-99999, 99999, 80}; static paramIntegerRange_t i1_999999999 = { 1, 999999999, 80, PDO_NORANGECHECK_HIGH }; @@ -56,9 +56,9 @@ static void CarInvListUpdate( carItem_p item ); #define T_NUMBER (6) typedef struct { - char * name; - long value; - } nameLongMap_t; + char * name; + long value; +} nameLongMap_t; #define CAR_DESC_COUPLER_MODE_BODY (1L<<0) @@ -74,40 +74,40 @@ typedef struct { typedef struct carProto_t * carProto_p; typedef struct { - DIST_T carLength; - DIST_T carWidth; - DIST_T truckCenter; - DIST_T truckCenterOffset; - DIST_T coupledLength; - } carDim_t; + DIST_T carLength; + DIST_T carWidth; + DIST_T truckCenter; + DIST_T truckCenterOffset; + DIST_T coupledLength; +} carDim_t; typedef struct { - char * number; - FLOAT_T purchPrice; - FLOAT_T currPrice; - long condition; - long purchDate; - long serviceDate; - char * notes; - } carData_t; + char * number; + FLOAT_T purchPrice; + FLOAT_T currPrice; + long condition; + long purchDate; + long serviceDate; + char * notes; +} carData_t; struct carItem_t { - long index; - SCALEINX_T scaleInx; - char * contentsLabel; - char * title; - carProto_p proto; - DIST_T barScale; - wDrawColor color; - long options; - long type; - carDim_t dim; - carData_t data; - wIndex_t segCnt; - trkSeg_p segPtr; - track_p car; - coOrd pos; - ANGLE_T angle; - }; + long index; + SCALEINX_T scaleInx; + char * contentsLabel; + char * title; + carProto_p proto; + DIST_T barScale; + wDrawColor color; + long options; + long type; + carDim_t dim; + carData_t data; + wIndex_t segCnt; + trkSeg_p segPtr; + track_p car; + coOrd pos; + ANGLE_T angle; +}; /* @@ -117,23 +117,24 @@ struct carItem_t { typedef struct { - char * ptr; - int len; - } tabString_t, *tabString_p; + char * ptr; + int len; +} tabString_t, *tabString_p; static void TabStringExtract( - char * string, - int count, - tabString_t * tabs ) + char * string, + int count, + tabString_t * tabs ) { int inx; char * next = string; for ( inx=0; inx<count; inx++ ) { tabs[inx].ptr = string; - if ( next ) - next = strchr( string, '\t' ); + if ( next ) { + next = strchr( string, '\t' ); + } if ( next ) { tabs[inx].len = (int)(next-string); string = next+1; @@ -150,7 +151,7 @@ static void TabStringExtract( static char * TabStringDup( - tabString_t * tab ) + tabString_t * tab ) { char * ret; ret = MyMalloc( tab->len+1 ); @@ -161,8 +162,8 @@ static char * TabStringDup( static char * TabStringCpy( - char * dst, - tabString_t * tab ) + char * dst, + tabString_t * tab ) { memcpy( dst, tab->ptr, tab->len ); dst[tab->len] = '\0'; @@ -171,31 +172,34 @@ static char * TabStringCpy( static int TabStringCmp( - char * src, - tabString_t * tab ) + char * src, + tabString_t * tab ) { size_t srclen = strlen(src); size_t len = srclen; int rc; - if ( len > tab->len ) + if ( len > tab->len ) { len = tab->len; + } rc = strncasecmp( src, tab->ptr, len ); - if ( rc != 0 || srclen == tab->len ) + if ( rc != 0 || srclen == tab->len ) { return rc; - else if ( srclen > tab->len ) + } else if ( srclen > tab->len ) { return 1; - else + } else { return -1; + } } static long TabGetLong( - tabString_t * tab ) + tabString_t * tab ) { char old_c; long val; - if ( tab->len <= 0 ) + if ( tab->len <= 0 ) { return 0; + } old_c = tab->ptr[tab->len]; tab->ptr[tab->len] = '\0'; val = atol( tab->ptr ); @@ -205,12 +209,13 @@ static long TabGetLong( static FLOAT_T TabGetFloat( - tabString_t * tab ) + tabString_t * tab ) { char old_c; FLOAT_T val; - if ( tab->len <= 0 ) + if ( tab->len <= 0 ) { return 0.0; + } old_c = tab->ptr[tab->len]; tab->ptr[tab->len] = '\0'; val = atof( tab->ptr ); @@ -220,10 +225,10 @@ static FLOAT_T TabGetFloat( static void RotatePts( - int cnt, - coOrd * pts, - coOrd orig, - ANGLE_T angle ) + int cnt, + coOrd * pts, + coOrd orig, + ANGLE_T angle ) { int inx; for ( inx=0; inx<cnt; inx++ ) { @@ -233,10 +238,10 @@ static void RotatePts( static void RescalePts( - int cnt, - coOrd * pts, - FLOAT_T scale_x, - FLOAT_T scale_y ) + int cnt, + coOrd * pts, + FLOAT_T scale_x, + FLOAT_T scale_y ) { int inx; for ( inx=0; inx<cnt; inx++ ) { @@ -248,10 +253,10 @@ static void RescalePts( static int lookupListIndex; static void * LookupListElem( - dynArr_t * da, - void * key, - int (*cmpFunc)( void *, void * ), - int elem_size ) + dynArr_t * da, + void * key, + int (*cmpFunc)( void *, void * ), + int elem_size ) { int hi, lo, mid, rc; lo = 0; @@ -263,18 +268,20 @@ static void * LookupListElem( lookupListIndex = mid; return DYNARR_N(void*,*da,mid); } - if ( rc > 0 ) + if ( rc > 0 ) { lo = mid+1; - else + } else { hi = mid-1; + } } if ( elem_size == 0 ) { lookupListIndex = -1; return NULL; } DYNARR_APPEND( void*, *da, 10 ); - for ( mid=da->cnt-1; mid>lo; mid-- ) + for ( mid=da->cnt-1; mid>lo; mid-- ) { DYNARR_N(void*,*da,mid) = DYNARR_N(void*,*da,mid-1); + } DYNARR_N(void*,*da,lo) = MyMalloc(elem_size); memset( DYNARR_N(void*,*da,lo), 0, elem_size ); lookupListIndex = lo; @@ -282,17 +289,18 @@ static void * LookupListElem( } static void RemoveListElem( - dynArr_t * da, - void * elem ) + dynArr_t * da, + void * elem ) { int inx; for ( inx=0; inx<da->cnt; inx++ ) - if ( DYNARR_N(void*,*da,inx) == elem ) + if ( DYNARR_N(void*,*da,inx) == elem ) { break; - if ( inx>=da->cnt ) - AbortProg( "removeListElem" ); - for ( inx++; inx<da->cnt; inx++ ) + } + CHECK( inx<da->cnt ); + for ( inx++; inx<da->cnt; inx++ ) { DYNARR_N(void*,*da,inx-1) = DYNARR_N(void*,*da,inx); + } da->cnt--; } @@ -306,53 +314,55 @@ static void RemoveListElem( #define SI (30) #define SO (37) static coOrd truckOutline[] = { - { -TW, -SO }, - { TW, -SO }, - { TW, -SI }, - { BW, -SI }, - { BW, SI }, - { TW, SI }, - { TW, SO }, - { -TW, SO }, - { -TW, SI }, - { -BW, SI }, - { -BW, -SI }, - { -TW, -SI } }; + { -TW, -SO }, + { TW, -SO }, + { TW, -SI }, + { BW, -SI }, + { BW, SI }, + { TW, SI }, + { TW, SO }, + { -TW, SO }, + { -TW, SI }, + { -BW, SI }, + { -BW, -SI }, + { -TW, -SI } +}; #define WO ((56.6-2)/2) #define WI ((56.6-12)/2) #define Wd (36/2) #define AW (8/2) static coOrd wheelOutline[] = { - { -Wd, -WO }, + { -Wd, -WO }, - { -AW, -WO }, - { -AW, -SI }, - { AW, -SI }, - { AW, -WO }, + { -AW, -WO }, + { -AW, -SI }, + { AW, -SI }, + { AW, -WO }, - { Wd, -WO }, - { Wd, -WI }, - { AW, -WI }, - { AW, WI }, - { Wd, WI }, - { Wd, WO }, + { Wd, -WO }, + { Wd, -WI }, + { AW, -WI }, + { AW, WI }, + { Wd, WI }, + { Wd, WO }, - { AW, WO }, - { AW, SI }, - { -AW, SI }, - { -AW, WO }, + { AW, WO }, + { AW, SI }, + { -AW, SI }, + { -AW, WO }, - { -Wd, WO }, - { -Wd, WI }, - { -AW, WI }, - { -AW, -WI }, + { -Wd, WO }, + { -Wd, WI }, + { -AW, WI }, + { -AW, -WI }, - { -Wd, -WI } }; + { -Wd, -WI } +}; static void MovePts( - int cnt, - coOrd * pts, - coOrd orig ) + int cnt, + coOrd * pts, + coOrd orig ) { int inx; for ( inx=0; inx<cnt; inx++ ) { @@ -363,11 +373,11 @@ static void MovePts( static void CarProtoDrawTruck( - drawCmd_t * d, - DIST_T width, - FLOAT_T ratio, - coOrd pos, - ANGLE_T angle ) + drawCmd_t * d, + DIST_T width, + FLOAT_T ratio, + coOrd pos, + ANGLE_T angle ) { coOrd p[24], pp; wDrawColor color = wDrawColorBlack; @@ -399,38 +409,40 @@ static void CarProtoDrawTruck( static coOrd couplerOutline[] = { - { 0, 2.5 }, - { 0, -2.5 }, - { 0, -2.5 }, - { 3, -7 }, - { 14, -5 }, - { 14, 2 }, - { 12, 2 }, - { 12, -2 }, - { 9, -2 }, - { 9, 3 }, - { 13, 6 }, - { 13, 7 }, - { 6, 7 }, - { 0, 2.5 } }; + { 0, 2.5 }, + { 0, -2.5 }, + { 0, -2.5 }, + { 3, -7 }, + { 14, -5 }, + { 14, 2 }, + { 12, 2 }, + { 12, -2 }, + { 9, -2 }, + { 9, 3 }, + { 13, 6 }, + { 13, 7 }, + { 6, 7 }, + { 0, 2.5 } +}; static void CarProtoDrawCoupler( - drawCmd_t * d, - DIST_T length, - FLOAT_T ratio, - coOrd pos, - ANGLE_T angle ) + drawCmd_t * d, + DIST_T length, + FLOAT_T ratio, + coOrd pos, + ANGLE_T angle ) { coOrd p[24], pp; wDrawColor color = wDrawColorBlack; length /= ratio; - if ( length < 12.0 ) + if ( length < 12.0 ) { return; + } memcpy( p, couplerOutline, sizeof couplerOutline ); p[0].x = p[1].x = -(length-12.0); pp.x = length-12.0; pp.y = 0; -/* TODO - if length > 6 then draw Sills */ + /* TODO - if length > 6 then draw Sills */ MovePts( COUNT( couplerOutline ), p, pp ); RescalePts( COUNT( couplerOutline ), p, ratio, ratio ); RotatePts( COUNT( couplerOutline ), p, zero, angle-90.0 ); @@ -449,30 +461,31 @@ struct carProto_t; typedef struct carProto_t carProto_t; struct carProto_t { - char * contentsLabel; - wIndex_t paramFileIndex; - char * desc; - long options; - long type; - carDim_t dim; - int segCnt; - trkSeg_p segPtr; - coOrd size; - coOrd orig; - }; + char * contentsLabel; + wIndex_t paramFileIndex; + char * desc; + long options; + long type; + carDim_t dim; + int segCnt; + trkSeg_p segPtr; + coOrd size; + coOrd orig; +}; static dynArr_t carProto_da; #define carProto(N) DYNARR_N( carProto_t*, carProto_da, N ) #define N_TYPELISTMAP (7) static nameLongMap_t typeListMap[N_TYPELISTMAP] = { - { N_("Diesel Loco"), 10101 }, - { N_("Steam Loco"), 10201 }, - { N_("Elect Loco"), 10301 }, - { N_("Freight Car"), 30100 }, - { N_("Psngr Car"), 50100 }, - { N_("M-O-W"), 70100 }, - { N_("Other"), 90100 } }; + { N_("Diesel Loco"), 10101 }, + { N_("Steam Loco"), 10201 }, + { N_("Elect Loco"), 10301 }, + { N_("Freight Car"), 30100 }, + { N_("Psngr Car"), 50100 }, + { N_("M-O-W"), 70100 }, + { N_("Other"), 90100 } +}; static trkSeg_p carProtoSegPtr; static int carProtoSegCnt; @@ -481,12 +494,12 @@ static int carProtoSegCnt; static pts_t dummyOutlineSegPts[5]; static trkSeg_t dummyOutlineSegs; static void CarProtoDlgCreateDummyOutline( - int * segCntP, - trkSeg_p * segPtrP, - BOOL_T isLoco, - DIST_T length, - DIST_T width, - wDrawColor color ) + int * segCntP, + trkSeg_p * segPtrP, + BOOL_T isLoco, + DIST_T length, + DIST_T width, + wDrawColor color ) { trkSeg_p segPtr; pts_t * pts; @@ -497,7 +510,7 @@ static void CarProtoDlgCreateDummyOutline( segPtr->type = SEG_FILPOLY; segPtr->color = color; - segPtr->width = 0; + segPtr->lineWidth = 0; segPtr->u.p.cnt = isLoco?5:4; segPtr->u.p.pts = pts = dummyOutlineSegPts; segPtr->u.p.orig.x = 0; @@ -530,15 +543,16 @@ static void CarProtoDlgCreateDummyOutline( static int CarProtoFindTypeCode( - long code ) + long code ) { int inx; for ( inx=0; inx<N_TYPELISTMAP; inx++ ) { if ( typeListMap[inx].value > code ) { - if ( inx == 0 ) + if ( inx == 0 ) { return N_TYPELISTMAP-1; - else + } else { return inx-1; + } } } return N_TYPELISTMAP-1; @@ -546,8 +560,8 @@ static int CarProtoFindTypeCode( static int CmpCarProto( - void * key, - void * elem ) + void * key, + void * elem ) { char * key_val=key; carProto_p elem_val=elem; @@ -556,24 +570,26 @@ static int CmpCarProto( static carProto_p CarProtoFind( - char * desc ) + char * desc ) { return LookupListElem( &carProto_da, desc, CmpCarProto, 0 ); } static carProto_p CarProtoLookup( - char * desc, - BOOL_T createMissing, - BOOL_T isLoco, - DIST_T length, - DIST_T width ) + char * desc, + BOOL_T createMissing, + BOOL_T isLoco, + DIST_T length, + DIST_T width ) { carProto_p proto; trkSeg_p segPtr; - proto = LookupListElem( &carProto_da, desc, CmpCarProto, createMissing?sizeof *proto:0 ); - if ( proto == NULL ) + proto = LookupListElem( &carProto_da, desc, CmpCarProto, + createMissing?sizeof *proto:0 ); + if ( proto == NULL ) { return NULL; + } if ( proto->desc == NULL ) { proto->desc = MyStrdup(desc); proto->contentsLabel = "Car Prototype"; @@ -583,10 +599,13 @@ static carProto_p CarProtoLookup( proto->dim.carWidth = width; proto->dim.truckCenter = length - 2.0*59.0; proto->dim.coupledLength = length + 2.0*16.0; - CarProtoDlgCreateDummyOutline( &proto->segCnt, &segPtr, isLoco, length, width, drawColorBlue ); - proto->segPtr = (trkSeg_p)memdup( segPtr, (sizeof *(trkSeg_p)0) * proto->segCnt ); + CarProtoDlgCreateDummyOutline( &proto->segCnt, &segPtr, isLoco, length, width, + drawColorBlue ); + proto->segPtr = (trkSeg_p)memdup( segPtr, + (sizeof *(trkSeg_p)0) * proto->segCnt ); CloneFilledDraw( proto->segCnt, proto->segPtr, FALSE ); - GetSegBounds( zero, 0.0, proto->segCnt, proto->segPtr, &proto->orig, &proto->size ); + GetSegBounds( zero, 0.0, proto->segCnt, proto->segPtr, &proto->orig, + &proto->size ); carProtoListChanged = TRUE; // return proto; } @@ -594,17 +613,18 @@ static carProto_p CarProtoLookup( } enum paramFileState -GetCarProtoCompatibility(int paramFileIndex, SCALEINX_T scaleIndex) -{ +GetCarProtoCompatibility(int paramFileIndex, SCALEINX_T scaleIndex) { int i; enum paramFileState ret = PARAMFILE_NOTUSABLE; - DIST_T ratio = GetScaleRatio(scaleIndex); +// DIST_T ratio = GetScaleRatio(scaleIndex); - if (!IsParamValid(paramFileIndex)) { + if (!IsParamValid(paramFileIndex)) + { return(PARAMFILE_UNLOADED); } - for (i = 0; i < carProto_da.cnt; i++) { + for (i = 0; i < carProto_da.cnt; i++) + { carProto_t *carProto = carProto(i); if (carProto->paramFileIndex == paramFileIndex) { ret = PARAMFILE_FIT; @@ -615,21 +635,22 @@ GetCarProtoCompatibility(int paramFileIndex, SCALEINX_T scaleIndex) } static carProto_p CarProtoNew( - carProto_p proto, - int paramFileIndex, - char * desc, - long options, - long type, - carDim_t * dim, - wIndex_t segCnt, - trkSeg_p segPtr ) + carProto_p proto, + int paramFileIndex, + char * desc, + long options, + long type, + carDim_t * dim, + wIndex_t segCnt, + trkSeg_p segPtr ) { if ( proto == NULL ) { proto = LookupListElem( &carProto_da, desc, CmpCarProto, sizeof *proto ); if ( proto->desc != NULL ) { if ( proto->paramFileIndex == PARAM_CUSTOM && - paramFileIndex != PARAM_CUSTOM ) + paramFileIndex != PARAM_CUSTOM ) { return proto; + } } } if ( proto->desc != NULL ) { @@ -644,22 +665,26 @@ static carProto_p CarProtoNew( proto->segCnt = segCnt; //if (proto->segPtr) Can't do this because segPtr could be static // free(proto->segPtr); - proto->segPtr = (trkSeg_p)memdup( segPtr, (sizeof *(trkSeg_p)0) * proto->segCnt ); + proto->segPtr = (trkSeg_p)memdup( segPtr, + (sizeof *(trkSeg_p)0) * proto->segCnt ); CloneFilledDraw( proto->segCnt, proto->segPtr, FALSE ); - GetSegBounds( zero, 0.0, proto->segCnt, proto->segPtr, &proto->orig, &proto->size ); + GetSegBounds( zero, 0.0, proto->segCnt, proto->segPtr, &proto->orig, + &proto->size ); carProtoListChanged = TRUE; return proto; } static void CarProtoDelete( - carProto_p protoP ) + carProto_p protoP ) { - if ( protoP == NULL ) + if ( protoP == NULL ) { return; + } RemoveListElem( &carProto_da, protoP ); - if ( protoP->desc ) + if ( protoP->desc ) { MyFree( protoP->desc ); + } MyFree( protoP ); } @@ -685,7 +710,8 @@ DeleteCarProto(int fileIndex) } // delete them - for (; inx < carProto_da.cnt && carProto(inx)->paramFileIndex == fileIndex; inx++) { + for (; inx < carProto_da.cnt + && carProto(inx)->paramFileIndex == fileIndex; inx++) { carProto_t * cp = carProto(inx); if (cp->paramFileIndex == fileIndex) { CarProtoDelete(cp); @@ -704,7 +730,7 @@ DeleteCarProto(int fileIndex) } static BOOL_T CarProtoRead( - char * line ) + char * line ) { char * desc; long options; @@ -713,12 +739,16 @@ static BOOL_T CarProtoRead( long longCenterOffset; if ( !GetArgs( line+9, "qllff0lff", - &desc, &options, &type, &dim.carLength, &dim.carWidth, &longCenterOffset, &dim.truckCenter, &dim.coupledLength ) ) + &desc, &options, &type, &dim.carLength, &dim.carWidth, &longCenterOffset, + &dim.truckCenter, &dim.coupledLength ) ) { return FALSE; + } dim.truckCenterOffset = longCenterOffset/1000.0; - if ( !ReadSegs() ) + if ( !ReadSegs() ) { return FALSE; - CarProtoNew( NULL, curParamFileIndex, desc, options, type, &dim, tempSegs_da.cnt, &tempSegs(0) ); + } + CarProtoNew( NULL, curParamFileIndex, desc, options, type, &dim, + tempSegs_da.cnt, &tempSegs(0) ); FreeFilledDraw(tempSegs_da.cnt,&tempSegs(0)); MyFree(desc); return TRUE; @@ -726,8 +756,8 @@ static BOOL_T CarProtoRead( static BOOL_T CarProtoWrite( - FILE * f, - carProto_t * proto ) + FILE * f, + carProto_t * proto ) { BOOL_T rc = TRUE; @@ -736,7 +766,9 @@ static BOOL_T CarProtoWrite( long longCenterOffset = (long)(proto->dim.truckCenterOffset*1000); rc &= fprintf( f, "CARPROTO \"%s\" %ld %ld %0.3f %0.3f 0 %ld %0.3f %0.3f\n", - PutTitle(proto->desc), proto->options, proto->type, proto->dim.carLength, proto->dim.carWidth, longCenterOffset, proto->dim.truckCenter, proto->dim.coupledLength )>0; + PutTitle(proto->desc), proto->options, proto->type, proto->dim.carLength, + proto->dim.carWidth, longCenterOffset, proto->dim.truckCenter, + proto->dim.coupledLength )>0; rc &= WriteSegs( f, proto->segCnt, proto->segPtr ); SetUserLocale(); @@ -747,7 +779,7 @@ static BOOL_T CarProtoWrite( static BOOL_T CarProtoCustomSave( - FILE * f ) + FILE * f ) { int inx; carProto_t * proto; @@ -755,8 +787,9 @@ static BOOL_T CarProtoCustomSave( for ( inx=0; inx<carProto_da.cnt; inx++ ) { proto = carProto(inx); - if ( proto->paramFileIndex == PARAM_CUSTOM ) + if ( proto->paramFileIndex == PARAM_CUSTOM ) { rc &= CarProtoWrite( f, proto ); + } } return rc; } @@ -774,32 +807,32 @@ typedef struct carPartParent_t carPartParent_t; typedef carPartParent_t * carPartParent_p; typedef struct { - char * name; - int len; - } cmp_key_t; + char * name; + int len; +} cmp_key_t; typedef struct { - tabString_t manuf; - tabString_t proto; - SCALEINX_T scale; - } cmp_partparent_t; + tabString_t manuf; + tabString_t proto; + SCALEINX_T scale; +} cmp_partparent_t; struct carPartParent_t { - char * manuf; - char * proto; - SCALEINX_T scale; - dynArr_t parts_da; - }; + char * manuf; + char * proto; + SCALEINX_T scale; + dynArr_t parts_da; +}; struct carPart_t { - carPartParent_p parent; - wIndex_t paramFileIndex; - char * title; - long options; - long type; - carDim_t dim; - wDrawColor color; - char * partnoP; - int partnoL; - }; + carPartParent_p parent; + wIndex_t paramFileIndex; + char * title; + long options; + long type; + carDim_t dim; + wDrawColor color; + char * partnoP; + int partnoL; +}; static dynArr_t carPartParent_da; #define carPartParent(N) DYNARR_N(carPartParent_p, carPartParent_da, N) #define carPart(P,N) DYNARR_N(carPart_p, (P)->parts_da, N) @@ -807,19 +840,17 @@ struct roadnameMap_t; typedef struct roadnameMap_t roadnameMap_t; typedef roadnameMap_t * roadnameMap_p; struct roadnameMap_t { - char * roadname; - char * repmark; - }; + char * roadname; + char * repmark; +}; static dynArr_t roadnameMap_da; #define roadnameMap(N) DYNARR_N(roadnameMap_p, roadnameMap_da, N) static BOOL_T roadnameMapChanged; -static long carPartChangeLevel = 0; - static int Cmp_part( - void * key, - void * elem ) + void * key, + void * elem ) { carPart_p cmp_key=key; carPart_p part_elem=elem; @@ -828,85 +859,100 @@ static int Cmp_part( len = min( cmp_key->partnoL, part_elem->partnoL ); rc = strncasecmp( cmp_key->partnoP, part_elem->partnoP, len+1 ); - if ( rc != 0 ) + if ( rc != 0 ) { return rc; - if ( cmp_key->paramFileIndex == part_elem->paramFileIndex ) + } + if ( cmp_key->paramFileIndex == part_elem->paramFileIndex ) { return 0; - if ( cmp_key->paramFileIndex == PARAM_DEMO ) + } + if ( cmp_key->paramFileIndex == PARAM_DEMO ) { return -1; - if ( part_elem->paramFileIndex == PARAM_DEMO ) + } + if ( part_elem->paramFileIndex == PARAM_DEMO ) { return 1; - if ( cmp_key->paramFileIndex == PARAM_CUSTOM ) + } + if ( cmp_key->paramFileIndex == PARAM_CUSTOM ) { return -1; - if ( part_elem->paramFileIndex == PARAM_CUSTOM ) + } + if ( part_elem->paramFileIndex == PARAM_CUSTOM ) { return 1; - if ( cmp_key->paramFileIndex == PARAM_LAYOUT ) + } + if ( cmp_key->paramFileIndex == PARAM_LAYOUT ) { return 1; - if ( part_elem->paramFileIndex == PARAM_LAYOUT ) + } + if ( part_elem->paramFileIndex == PARAM_LAYOUT ) { return -1; - if ( cmp_key->paramFileIndex > part_elem->paramFileIndex ) + } + if ( cmp_key->paramFileIndex > part_elem->paramFileIndex ) { return -1; - else + } else { return 1; + } } static int Cmp_partparent( - void * key, - void * elem ) + void * key, + void * elem ) { cmp_partparent_t * cmp_key=key; carPartParent_p part_elem=elem; int rc; rc = - TabStringCmp( part_elem->manuf, &cmp_key->manuf ); - if ( rc != 0 ) + if ( rc != 0 ) { return rc; + } rc = cmp_key->scale - part_elem->scale; - if ( rc != 0 ) + if ( rc != 0 ) { return rc; + } rc = - TabStringCmp( part_elem->proto, &cmp_key->proto ); return rc; } static int Cmp_roadnameMap( - void * key, - void * elem ) + void * key, + void * elem ) { cmp_key_t * cmp_key=key; roadnameMap_p roadname_elem=elem; int rc; rc = strncasecmp( cmp_key->name, roadname_elem->roadname, cmp_key->len ); - if ( rc == 0 && roadname_elem->roadname[cmp_key->len] ) + if ( rc == 0 && roadname_elem->roadname[cmp_key->len] ) { return -1; + } return rc; } static roadnameMap_p LoadRoadnameList( - tabString_p roadnameTab, - tabString_p repmarkTab ) + tabString_p roadnameTab, + tabString_p repmarkTab ) { cmp_key_t cmp_key; roadnameMap_p roadnameMapP; lookupListIndex = -1; - if ( roadnameTab->len<=0 ) + if ( roadnameTab->len<=0 ) { return NULL; - if ( TabStringCmp( "undecorated", roadnameTab ) == 0 ) + } + if ( TabStringCmp( "undecorated", roadnameTab ) == 0 ) { return NULL; + } cmp_key.name = roadnameTab->ptr; cmp_key.len = roadnameTab->len; - roadnameMapP = LookupListElem( &roadnameMap_da, &cmp_key, Cmp_roadnameMap, sizeof (roadnameMap_t) ); + roadnameMapP = LookupListElem( &roadnameMap_da, &cmp_key, Cmp_roadnameMap, + sizeof (roadnameMap_t) ); if ( roadnameMapP->roadname == NULL ) { roadnameMapP->roadname = TabStringDup(roadnameTab); roadnameMapP->repmark = TabStringDup(repmarkTab); roadnameMapChanged = TRUE; } else if ( repmarkTab->len > 0 && - ( roadnameMapP->repmark == NULL || roadnameMapP->repmark[0] == '\0' ) ) { + ( roadnameMapP->repmark == NULL || roadnameMapP->repmark[0] == '\0' ) ) { roadnameMapP->repmark = TabStringDup(repmarkTab); roadnameMapChanged = TRUE; } @@ -915,11 +961,11 @@ static roadnameMap_p LoadRoadnameList( static carPart_p CarPartFind( - char * manufP, - int manufL, - char * partnoP, - int partnoL, - SCALEINX_T scale ) + char * manufP, + int manufL, + char * partnoP, + int partnoL, + SCALEINX_T scale ) { wIndex_t inx1, inx2; carPart_p partP; @@ -927,15 +973,15 @@ static carPart_p CarPartFind( for ( inx1=0; inx1<carPartParent_da.cnt; inx1++ ) { parentP = carPartParent(inx1); if ( manufL == (int)strlen(parentP->manuf) && - strncasecmp( manufP, parentP->manuf, manufL ) == 0 && - scale == parentP->scale ) { + strncasecmp( manufP, parentP->manuf, manufL ) == 0 && + scale == parentP->scale ) { for ( inx2=0; inx2<parentP->parts_da.cnt; inx2++ ) { partP = carPart( parentP, inx2 ); if ( partnoL == partP->partnoL && - strncasecmp( partnoP, partP->partnoP, partnoL ) == 0 ) { + strncasecmp( partnoP, partP->partnoP, partnoL ) == 0 ) { return partP; } - } + } } } return NULL; @@ -945,7 +991,7 @@ static carPart_p CarPartFind( static void CarPartParentDelete( - carPartParent_p parentP ) + carPartParent_p parentP ) { RemoveListElem( &carPartParent_da, parentP ); MyFree( parentP->manuf ); @@ -955,7 +1001,7 @@ static void CarPartParentDelete( static void CarPartUnlink( - carPart_p partP ) + carPart_p partP ) { carPartParent_p parentP = partP->parent; RemoveListElem( &parentP->parts_da, partP ); @@ -966,11 +1012,11 @@ static void CarPartUnlink( static carPartParent_p CarPartParentNew( - char * manufP, - int manufL, - char *protoP, - int protoL, - SCALEINX_T scale ) + char * manufP, + int manufL, + char *protoP, + int protoL, + SCALEINX_T scale ) { carPartParent_p parentP; cmp_partparent_t cmp_key; @@ -979,7 +1025,8 @@ static carPartParent_p CarPartParentNew( cmp_key.proto.ptr = protoP; cmp_key.proto.len = protoL; cmp_key.scale = scale; - parentP = (carPartParent_p)LookupListElem( &carPartParent_da, &cmp_key, Cmp_partparent, sizeof * parentP); + parentP = (carPartParent_p)LookupListElem( &carPartParent_da, &cmp_key, + Cmp_partparent, sizeof * parentP); if ( parentP->manuf == NULL ) { parentP->manuf = (char*)MyMalloc( manufL+1 ); memcpy( parentP->manuf, manufP, manufL ); @@ -994,14 +1041,14 @@ static carPartParent_p CarPartParentNew( static carPart_p CarPartNew( - carPart_p partP, - int paramFileIndex, - SCALEINX_T scaleInx, - char * title, - long options, - long type, - carDim_t *dim, - wDrawColor color) + carPart_p partP, + int paramFileIndex, + SCALEINX_T scaleInx, + char * title, + long options, + long type, + carDim_t *dim, + wDrawColor color) { carPartParent_p parentP; carPart_t cmp_key; @@ -1009,27 +1056,34 @@ static carPart_p CarPartNew( TabStringExtract(title, 7, tabs); if (TabStringCmp("Undecorated", &tabs[T_MANUF]) == 0 || - TabStringCmp("Custom", &tabs[T_MANUF]) == 0 || - tabs[T_PART].len == 0) + TabStringCmp("Custom", &tabs[T_MANUF]) == 0 || + tabs[T_PART].len == 0) { return NULL; - if (tabs[T_PROTO].len == 0) + } + if (tabs[T_PROTO].len == 0) { return NULL; + } if (partP == NULL) { - partP = CarPartFind(tabs[T_MANUF].ptr, tabs[T_MANUF].len, tabs[T_PART].ptr, tabs[T_PART].len, scaleInx); + partP = CarPartFind(tabs[T_MANUF].ptr, tabs[T_MANUF].len, tabs[T_PART].ptr, + tabs[T_PART].len, scaleInx); if (partP != NULL && - partP->paramFileIndex == PARAM_CUSTOM && - paramFileIndex != PARAM_CUSTOM) + partP->paramFileIndex == PARAM_CUSTOM && + paramFileIndex != PARAM_CUSTOM) { return partP; - LOG(log_carList, 2, ("new car part: %s (%d) at %d\n", title, paramFileIndex, lookupListIndex)) + } + LOG(log_carList, 2, ("new car part: %s (%d) at %d\n", title, paramFileIndex, + lookupListIndex)) } if (partP != NULL) { CarPartUnlink(partP); - if (partP->title != NULL) + if (partP->title != NULL) { MyFree(partP->title); + } LOG(log_carList, 2, ("upd car part: %s (%d)\n", title, paramFileIndex)) } LoadRoadnameList(&tabs[T_ROADNAME], &tabs[T_REPMARK]); - parentP = CarPartParentNew(tabs[T_MANUF].ptr, tabs[T_MANUF].len, tabs[T_PROTO].ptr, tabs[T_PROTO].len, scaleInx); + parentP = CarPartParentNew(tabs[T_MANUF].ptr, tabs[T_MANUF].len, + tabs[T_PROTO].ptr, tabs[T_PROTO].len, scaleInx); cmp_key.title = title; cmp_key.parent = parentP; cmp_key.paramFileIndex = paramFileIndex; @@ -1039,9 +1093,11 @@ static carPart_p CarPartNew( cmp_key.color = color; cmp_key.partnoP = tabs[T_PART].ptr; cmp_key.partnoL = tabs[T_PART].len; - partP = (carPart_p)LookupListElem(&parentP->parts_da, &cmp_key, Cmp_part, sizeof * partP); - if (partP->title != NULL) + partP = (carPart_p)LookupListElem(&parentP->parts_da, &cmp_key, Cmp_part, + sizeof * partP); + if (partP->title != NULL) { MyFree(partP->title); + } *partP = cmp_key; sprintf(message, "\t\t%s", tabs[2].ptr); partP->title = MyStrdup(message); @@ -1052,13 +1108,15 @@ static carPart_p CarPartNew( static void CarPartDelete( - carPart_p partP ) + carPart_p partP ) { - if ( partP == NULL ) + if ( partP == NULL ) { return; + } CarPartUnlink( partP ); - if ( partP->title ) + if ( partP->title ) { MyFree( partP->title ); + } MyFree( partP ); } @@ -1090,7 +1148,7 @@ DeleteCarPart(int fileIndex) } static BOOL_T CarPartRead( - char * line ) + char * line ) { char scale[10]; long options; @@ -1101,18 +1159,21 @@ static BOOL_T CarPartRead( long longCenterOffset; if ( !GetArgs( line+8, "sqllff0lffl", - scale, &title, &options, &type, &dim.carLength, &dim.carWidth, &longCenterOffset, &dim.truckCenter, &dim.coupledLength, &rgb ) ) + scale, &title, &options, &type, &dim.carLength, &dim.carWidth, + &longCenterOffset, &dim.truckCenter, &dim.coupledLength, &rgb ) ) { return FALSE; + } dim.truckCenterOffset = longCenterOffset/1000.0; - CarPartNew( NULL, curParamFileIndex, LookupScale(scale), title, options, type, &dim, wDrawFindColor(rgb) ); + CarPartNew( NULL, curParamFileIndex, LookupScale(scale), title, options, type, + &dim, wDrawFindColor(rgb) ); MyFree( title ); return TRUE; } static BOOL_T CarPartWrite( - FILE * f, - carPart_p partP ) + FILE * f, + carPart_p partP ) { BOOL_T rc = TRUE; carPartParent_p parentP=partP->parent; @@ -1122,15 +1183,17 @@ static BOOL_T CarPartWrite( TabStringExtract( partP->title, 7, tabs ); sprintf( message, "%s\t%s\t%.*s\t%.*s\t%.*s\t%.*s\t%.*s", - parentP->manuf, parentP->proto, - tabs[T_DESC].len, tabs[T_DESC].ptr, - tabs[T_PART].len, tabs[T_PART].ptr, - tabs[T_ROADNAME].len, tabs[T_ROADNAME].ptr, - tabs[T_REPMARK].len, tabs[T_REPMARK].ptr, - tabs[T_NUMBER].len, tabs[T_NUMBER].ptr ); - rc &= fprintf( f, "CARPART %s \"%s\"", GetScaleName(partP->parent->scale), PutTitle(message) )>0; + parentP->manuf, parentP->proto, + tabs[T_DESC].len, tabs[T_DESC].ptr, + tabs[T_PART].len, tabs[T_PART].ptr, + tabs[T_ROADNAME].len, tabs[T_ROADNAME].ptr, + tabs[T_REPMARK].len, tabs[T_REPMARK].ptr, + tabs[T_NUMBER].len, tabs[T_NUMBER].ptr ); + rc &= fprintf( f, "CARPART %s \"%s\"", GetScaleName(partP->parent->scale), + PutTitle(message) )>0; rc &= fprintf( f, " %ld %ld %0.3f %0.3f 0 0 %0.3f %0.3f %ld\n", - partP->options, partP->type, partP->dim.carLength, partP->dim.carWidth, partP->dim.truckCenter, partP->dim.coupledLength, wDrawGetRGB(partP->color) )>0; + partP->options, partP->type, partP->dim.carLength, partP->dim.carWidth, + partP->dim.truckCenter, partP->dim.coupledLength, wDrawGetRGB(partP->color) )>0; SetUserLocale(); @@ -1140,7 +1203,7 @@ static BOOL_T CarPartWrite( static BOOL_T CarDescCustomSave( - FILE * f ) + FILE * f ) { int parentX; carPartParent_p parentP; @@ -1152,8 +1215,9 @@ static BOOL_T CarDescCustomSave( parentP = carPartParent(parentX); for ( partX=0; partX<parentP->parts_da.cnt; partX++ ) { partP = carPart(parentP,partX); - if ( partP->paramFileIndex == PARAM_CUSTOM ) + if ( partP->paramFileIndex == PARAM_CUSTOM ) { rc &= CarPartWrite(f, partP ); + } } } return rc; @@ -1170,54 +1234,57 @@ static dynArr_t carItemInfo_da; #define N_CONDLISTMAP (6) static nameLongMap_t condListMap[N_CONDLISTMAP] = { - { N_("N/A"), 0 }, - { N_("Mint"), 100 }, - { N_("Excellent"), 80 }, - { N_("Good"), 60 }, - { N_("Fair"), 40 }, - { N_("Poor"), 20 } }; + { N_("N/A"), 0 }, + { N_("Mint"), 100 }, + { N_("Excellent"), 80 }, + { N_("Good"), 60 }, + { N_("Fair"), 40 }, + { N_("Poor"), 20 } +}; static wIndex_t MapCondition( - long conditionValue ) + long conditionValue ) { - if ( conditionValue < 10 ) - return 0; - else if ( conditionValue < 30 ) - return 5; - else if ( conditionValue < 50 ) - return 4; - else if ( conditionValue < 70 ) - return 3; - else if ( conditionValue < 90 ) - return 2; - else - return 1; + if ( conditionValue < 10 ) { + return 0; + } else if ( conditionValue < 30 ) { + return 5; + } else if ( conditionValue < 50 ) { + return 4; + } else if ( conditionValue < 70 ) { + return 3; + } else if ( conditionValue < 90 ) { + return 2; + } else { + return 1; + } } static carItem_p CarItemNew( - carItem_p item, - int paramFileIndex, - long itemIndex, - SCALEINX_T scale, - char * title, - long options, - long type, - carDim_t *dim, - wDrawColor color, - FLOAT_T purchPrice, - FLOAT_T currPrice, - long condition, - long purchDate, - long serviceDate ) + carItem_p item, + int paramFileIndex, + long itemIndex, + SCALEINX_T scale, + char * title, + long options, + long type, + carDim_t *dim, + wDrawColor color, + FLOAT_T purchPrice, + FLOAT_T currPrice, + long condition, + long purchDate, + long serviceDate ) { carPart_p partP; tabString_t tabs[7]; TabStringExtract( title, 7, tabs ); if ( paramFileIndex != PARAM_CUSTOM ) { - partP = CarPartFind( tabs[T_MANUF].ptr, tabs[T_MANUF].len, tabs[T_PART].ptr, tabs[T_PART].len, scale ); + partP = CarPartFind( tabs[T_MANUF].ptr, tabs[T_MANUF].len, tabs[T_PART].ptr, + tabs[T_PART].len, scale ); if ( partP == NULL ) { CarPartNew( NULL, PARAM_LAYOUT, scale, title, options, type, dim, color ); } @@ -1228,8 +1295,8 @@ static carItem_p CarItemNew( item = (carItem_t*)MyMalloc( sizeof * item ); carItemInfo(carItemInfo_da.cnt-1) = item; } else { - if ( item->title ) MyFree( item->title ); - if ( item->data.number ) MyFree( item->data.number ); + if ( item->title ) { MyFree( item->title ); } + if ( item->data.number ) { MyFree( item->data.number ); } } item->index = itemIndex; item->scaleInx = scale; @@ -1241,7 +1308,9 @@ static carItem_p CarItemNew( item->dim = *dim; item->color = color; if ( tabs[T_REPMARK].len>0 || tabs[T_NUMBER].len>0 ) { - sprintf( message, "%.*s%s%.*s", tabs[T_REPMARK].len, tabs[T_REPMARK].ptr, (tabs[T_REPMARK].len>0&&tabs[T_NUMBER].len>0)?" ":"", tabs[T_NUMBER].len, tabs[T_NUMBER].ptr ); + sprintf( message, "%.*s%s%.*s", tabs[T_REPMARK].len, tabs[T_REPMARK].ptr, + (tabs[T_REPMARK].len>0 + &&tabs[T_NUMBER].len>0)?" ":"", tabs[T_NUMBER].len, tabs[T_NUMBER].ptr ); } else { sprintf( message, "#%ld", item->index ); } @@ -1261,24 +1330,25 @@ static carItem_p CarItemNew( /** * Check the whether the parameter file has CARPARTS that are a fit or compatible * with the current state. - * + * * \param paramFileIndex IN the parameter file * \param scaleIndex IN the scale to check against * \return the compatibility state of the the */ -enum paramFileState -GetCarPartCompatibility(int paramFileIndex, SCALEINX_T scaleIndex) -{ +enum paramFileState +GetCarPartCompatibility(int paramFileIndex, SCALEINX_T scaleIndex) { int i; enum paramFileState ret = PARAMFILE_NOTUSABLE; - DIST_T ratio = GetScaleRatio(scaleIndex); - DIST_T gauge = GetScaleTrackGauge(scaleIndex); +// DIST_T ratio = GetScaleRatio(scaleIndex); +// DIST_T gauge = GetScaleTrackGauge(scaleIndex); - if (!IsParamValid(paramFileIndex)) { + if (!IsParamValid(paramFileIndex)) + { return(PARAMFILE_UNLOADED); } - for (i = 0; i < carPartParent_da.cnt && ret != PARAMFILE_FIT; i++) { + for (i = 0; i < carPartParent_da.cnt && ret != PARAMFILE_FIT; i++) + { carPartParent_t *carPartParent = carPartParent( i ); SCALE_FIT_T fit = CompatibleScale(FIT_CAR,carPartParent->scale,scaleIndex); if(fit == FIT_EXACT) { @@ -1298,7 +1368,7 @@ GetCarPartCompatibility(int paramFileIndex, SCALEINX_T scaleIndex) } EXPORT BOOL_T CarItemRead( - char * line ) + char * line ) { long itemIndex; char scale[10]; @@ -1322,31 +1392,38 @@ EXPORT BOOL_T CarItemRead( char * sNote = NULL; if ( !GetArgs( line+4, "lsqll" "ff0lffl" "fflll000000c", - &itemIndex, scale, &title, &options, &type, - &dim.carLength, &dim.carWidth, &longCenterOffset, &dim.truckCenter, &dim.coupledLength, &rgb, - &purchPrice, &currPrice, &condition, &purchDate, &serviceDate, &cp ) ) + &itemIndex, scale, &title, &options, &type, + &dim.carLength, &dim.carWidth, &longCenterOffset, &dim.truckCenter, + &dim.coupledLength, &rgb, + &purchPrice, &currPrice, &condition, &purchDate, &serviceDate, &cp ) ) { return FALSE; + } dim.truckCenterOffset = longCenterOffset/1000.0; if ( paramVersion < VERSION_INLINENOTE ) { if ( (options&CAR_ITEM_HASNOTES) ) { sNote = ReadMultilineText(); } } else { - if ( !GetArgs( cp, "qc", &sNote, &cp ) ) + if ( !GetArgs( cp, "qc", &sNote, &cp ) ) { return FALSE; + } } - item = CarItemNew( NULL, curParamFileIndex, itemIndex, LookupScale(scale), title, - options&(CAR_DESC_BITS|CAR_ITEM_BITS), type, &dim, wDrawFindColor(rgb), - purchPrice, currPrice, condition, purchDate, serviceDate ); - if ( (options&CAR_ITEM_HASNOTES) ) + item = CarItemNew( NULL, curParamFileIndex, itemIndex, LookupScale(scale), + title, + options&(CAR_DESC_BITS|CAR_ITEM_BITS), type, &dim, wDrawFindColor(rgb), + purchPrice, currPrice, condition, purchDate, serviceDate ); + if ( (options&CAR_ITEM_HASNOTES) ) { item->data.notes = sNote; + } MyFree(title); if ( (options&CAR_ITEM_ONLAYOUT) ) { if ( !GetArgs( cp, "dLpf", - &index, &layer, &pos, &angle ) ) + &index, &layer, &pos, &angle ) ) { return FALSE; - if ( !ReadSegs() ) + } + if ( !ReadSegs() ) { return FALSE; + } item->car = NewCar( index, item, pos, angle ); SetTrkLayer( item->car, layer ); SetEndPts( item->car, 2 ); @@ -1357,9 +1434,9 @@ EXPORT BOOL_T CarItemRead( static BOOL_T CarItemWrite( - FILE * f, - carItem_t * item, - BOOL_T layout ) + FILE * f, + carItem_t * item, + BOOL_T layout ) { long options = (item->options&CAR_DESC_BITS); coOrd pos; @@ -1369,15 +1446,20 @@ static BOOL_T CarItemWrite( SetCLocale(); - if ( item->data.notes && item->data.notes[0] ) + if ( item->data.notes && item->data.notes[0] ) { options |= CAR_ITEM_HASNOTES; - if ( layout && item->car && !IsTrackDeleted(item->car) ) + } + if ( layout && item->car && !IsTrackDeleted(item->car) ) { options |= CAR_ITEM_ONLAYOUT; - rc &= fprintf( f, "CAR %ld %s \"%s\" %ld %ld %0.3f %0.3f 0 %ld %0.3f %0.3f %ld %0.3f %0.3f %ld %ld %ld 0 0 0 0 0 0", - item->index, GetScaleName(item->scaleInx), PutTitle(item->title), - options, item->type, - item->dim.carLength, item->dim.carWidth, longCenterOffset, item->dim.truckCenter, item->dim.coupledLength, wDrawGetRGB(item->color), - item->data.purchPrice, item->data.currPrice, item->data.condition, item->data.purchDate, item->data.serviceDate )>0; + } + rc &= fprintf( f, + "CAR %ld %s \"%s\" %ld %ld %0.3f %0.3f 0 %ld %0.3f %0.3f %ld %0.3f %0.3f %ld %ld %ld 0 0 0 0 0 0", + item->index, GetScaleName(item->scaleInx), PutTitle(item->title), + options, item->type, + item->dim.carLength, item->dim.carWidth, longCenterOffset, + item->dim.truckCenter, item->dim.coupledLength, wDrawGetRGB(item->color), + item->data.purchPrice, item->data.currPrice, item->data.condition, + item->data.purchDate, item->data.serviceDate )>0; if ( (options&CAR_ITEM_HASNOTES) ) { char * sEscapedNote = ConvertToEscapedText( item->data.notes ); rc &= fprintf( f, " \"%s\"", sEscapedNote )>0; @@ -1388,7 +1470,7 @@ static BOOL_T CarItemWrite( if ( ( options&CAR_ITEM_ONLAYOUT) ) { CarGetPos( item->car, &pos, &angle ); rc &= fprintf( f, " %d %u %0.3f %0.3f %0.3f\n", - GetTrkIndex(item->car), GetTrkLayer(item->car), pos.x, pos.y, angle )>0; + GetTrkIndex(item->car), GetTrkLayer(item->car), pos.x, pos.y, angle )>0; rc &= WriteEndPt( f, item->car, 0 ); rc &= WriteEndPt( f, item->car, 1 ); rc &= fprintf( f, "\t%s\n", END_SEGS )>0; @@ -1404,29 +1486,31 @@ static BOOL_T CarItemWrite( EXPORT carItem_p CarItemFind( - long itemInx ) + long itemInx ) { - if ( itemInx >= 0 && itemInx < carItemInfo_da.cnt ) + if ( itemInx >= 0 && itemInx < carItemInfo_da.cnt ) { return carItemInfo(itemInx); - else + } else { return NULL; + } } EXPORT long CarItemFindIndex( - carItem_p item ) + carItem_p item ) { long inx; for ( inx=0; inx<carItemInfo_da.cnt; inx++ ) - if ( carItemInfo(inx) == item ) + if ( carItemInfo(inx) == item ) { return inx; - AbortProg( "carItemFindIndex" ); + } + CHECK( FALSE ); return -1; } EXPORT void CarItemGetSegs( - carItem_p item ) + carItem_p item ) { coOrd orig; carProto_p protoP; @@ -1442,7 +1526,9 @@ EXPORT void CarItemGetSegs( segPtr = protoP->segPtr; orig = protoP->orig; } else { - CarProtoDlgCreateDummyOutline( &item->segCnt, &segPtr, (item->options&CAR_DESC_IS_LOCO)!=0, item->dim.carLength, item->dim.carWidth, item->color ); + CarProtoDlgCreateDummyOutline( &item->segCnt, &segPtr, + (item->options&CAR_DESC_IS_LOCO)!=0, item->dim.carLength, item->dim.carWidth, + item->color ); orig = zero; } item->segPtr = (trkSeg_p)MyMalloc( item->segCnt * sizeof *(segPtr) ); @@ -1452,25 +1538,27 @@ EXPORT void CarItemGetSegs( orig.x = -orig.x; orig.y = -orig.y; MoveSegs( item->segCnt, item->segPtr, orig ); - RescaleSegs( item->segCnt, item->segPtr, item->dim.carLength/protoP->size.x, item->dim.carWidth/protoP->size.y, 1/ratio ); + RescaleSegs( item->segCnt, item->segPtr, item->dim.carLength/protoP->size.x, + item->dim.carWidth/protoP->size.y, 1/ratio ); RecolorSegs( item->segCnt, item->segPtr, item->color ); } } EXPORT BOOL_T WriteCars( - FILE * f ) + FILE * f ) { int inx; BOOL_T rc = TRUE; - for ( inx=0; inx<carItemInfo_da.cnt; inx++ ) + for ( inx=0; inx<carItemInfo_da.cnt; inx++ ) { rc &= CarItemWrite( f, carItemInfo(inx), TRUE ); + } return rc; } EXPORT BOOL_T CarCustomSave( - FILE * f ) + FILE * f ) { BOOL_T rc = TRUE; rc &= CarProtoCustomSave( f ); @@ -1489,7 +1577,8 @@ static long carHotbarModes[] = { 0x0002, 0x0012, 0x0312, 0x4312, 0x0021, 0x0321, static long carHotbarContents[] = { 0x0005, 0x0002, 0x0012, 0x0012, 0x0001, 0x0021, 0x0021 }; static long newCarInx; static paramData_t newCarPLs[] = { - { PD_DROPLIST, &newCarInx, "index", PDO_DLGWIDE, I2VP(400), N_("Item") } }; + { PD_DROPLIST, &newCarInx, "index", PDO_DLGWIDE, I2VP(400), N_("Item") } +}; static paramGroup_t newCarPG = { "train-newcar", 0, newCarPLs, COUNT( newCarPLs ) }; EXPORT wControl_p newCarControls[2]; static char newCarLabel1[STR_SIZE]; @@ -1500,8 +1589,8 @@ static dynArr_t carItemHotbar_da; static int Cmp_carHotbar( - const void * ptr1, - const void * ptr2 ) + const void * ptr1, + const void * ptr2 ) { carItem_p item1 = *(carItem_p*)ptr1; carItem_p item2 = *(carItem_p*)ptr2; @@ -1517,18 +1606,22 @@ static int Cmp_carHotbar( rc = (int)(item1->index-item2->index); break; case 1: - rc = strncasecmp( tabs1[T_MANUF].ptr, tabs2[T_MANUF].ptr, max(tabs1[T_MANUF].len,tabs2[T_MANUF].len) ); + rc = strncasecmp( tabs1[T_MANUF].ptr, tabs2[T_MANUF].ptr, + max(tabs1[T_MANUF].len,tabs2[T_MANUF].len) ); break; case 3: - rc = strncasecmp( tabs1[T_PART].ptr, tabs2[T_PART].ptr, max(tabs1[T_PART].len,tabs2[T_PART].len) ); + rc = strncasecmp( tabs1[T_PART].ptr, tabs2[T_PART].ptr, max(tabs1[T_PART].len, + tabs2[T_PART].len) ); break; case 2: - if ( item1->type < item2->type ) + if ( item1->type < item2->type ) { rc = -1; - else if ( item1->type > item2->type ) + } else if ( item1->type > item2->type ) { rc = 1; - else - rc = strncasecmp( tabs1[T_PROTO].ptr, tabs2[T_PROTO].ptr, max(tabs1[T_PROTO].len,tabs2[T_PROTO].len) ); + } else { + rc = strncasecmp( tabs1[T_PROTO].ptr, tabs2[T_PROTO].ptr, + max(tabs1[T_PROTO].len,tabs2[T_PROTO].len) ); + } break; } } @@ -1537,63 +1630,66 @@ static int Cmp_carHotbar( static void CarItemHotbarUpdate( - paramGroup_p pg, - int inx, - void * data ) + paramGroup_p pg, + int inx, + void * data ) { wIndex_t carItemInx; carItem_p item; if ( inx == 0 ) { carItemInx = (wIndex_t)*(long*)data; - if ( carItemInx < 0 ) + if ( carItemInx < 0 ) { return; - carItemInx = (wIndex_t)VP2L(wListGetItemContext( (wList_p)pg->paramPtr[inx].control, carItemInx )); + } + carItemInx = (wIndex_t)VP2L(wListGetItemContext( (wList_p) + pg->paramPtr[inx].control, carItemInx )); item = carItemHotbar(carItemInx); - if ( item != NULL ) + if ( item != NULL ) { currCarItemPtr = item; + } } } static char * FormatCarTitle( - carItem_p item, - long mode ) + carItem_p item, + long mode ) { tabString_t tabs[7]; char * cp; - TabStringExtract( item->title, 7, tabs ); - cp = message; - for ( ; mode!=0; mode>>=4 ) { - switch ( mode&0x000F ) { - case 1: - cp = TabStringCpy( cp, &tabs[T_MANUF] ); - break; - case 2: - cp = TabStringCpy( cp, &tabs[T_PROTO] ); - break; - case 3: - cp = TabStringCpy( cp, &tabs[T_PART] ); - break; - case 4: - sprintf( cp, "%ld ", item->index ); - cp += strlen(cp); - break; - case 5: - strcpy( cp, typeListMap[CarProtoFindTypeCode(item->type)].name ); - cp += strlen(cp); - break; - } - *cp++ = '/'; + TabStringExtract( item->title, 7, tabs ); + cp = message; + for ( ; mode!=0; mode>>=4 ) { + switch ( mode&0x000F ) { + case 1: + cp = TabStringCpy( cp, &tabs[T_MANUF] ); + break; + case 2: + cp = TabStringCpy( cp, &tabs[T_PROTO] ); + break; + case 3: + cp = TabStringCpy( cp, &tabs[T_PART] ); + break; + case 4: + sprintf( cp, "%ld ", item->index ); + cp += strlen(cp); + break; + case 5: + strcpy( cp, typeListMap[CarProtoFindTypeCode(item->type)].name ); + cp += strlen(cp); + break; } - *--cp = '\0'; - return message; + *cp++ = '/'; + } + *--cp = '\0'; + return message; } EXPORT char * CarItemDescribe( - carItem_p item, - long mode, - long * index ) + carItem_p item, + long mode, + long * index ) { tabString_t tabs[7]; char * cp; @@ -1605,15 +1701,18 @@ EXPORT char * CarItemDescribe( sprintf( cp, "%ld ", item->index ); cp = desc+strlen(cp); } - if ( (mode&0xF)!=1 && ((mode>>4)&0xF)!=1 && ((mode>>8)&0xF)!=1 && ((mode>>12)&0xF)!=1 ) { + if ( (mode&0xF)!=1 && ((mode>>4)&0xF)!=1 && ((mode>>8)&0xF)!=1 + && ((mode>>12)&0xF)!=1 ) { cp = TabStringCpy( cp, &tabs[T_MANUF] ); *cp++ = ' '; } - if ( (mode&0xF)!=3 && ((mode>>4)&0xF)!=3 && ((mode>>8)&0xF)!=3 && ((mode>>12)&0xF)!=3 ) { + if ( (mode&0xF)!=3 && ((mode>>4)&0xF)!=3 && ((mode>>8)&0xF)!=3 + && ((mode>>12)&0xF)!=3 ) { cp = TabStringCpy( cp, &tabs[T_PART] ); *cp++ = ' '; } - if ( (mode&0xF)!=2 && ((mode>>4)&0xF)!=2 && ((mode>>8)&0xF)!=2 && ((mode>>12)&0xF)!=2 ) { + if ( (mode&0xF)!=2 && ((mode>>4)&0xF)!=2 && ((mode>>8)&0xF)!=2 + && ((mode>>12)&0xF)!=2 ) { cp = TabStringCpy( cp, &tabs[T_PROTO] ); *cp++ = ' '; } @@ -1635,8 +1734,9 @@ EXPORT char * CarItemDescribe( } } *--cp = '\0'; - if ( index != NULL ) + if ( index != NULL ) { *index = item->index; + } return desc; } @@ -1649,12 +1749,14 @@ EXPORT void CarItemLoadList( void * unused ) wWinPix_t w, h; DYNARR_SET( carItem_t*, carItemHotbar_da, carItemInfo_da.cnt ); - memcpy( carItemHotbar_da.ptr, carItemInfo_da.ptr, carItemInfo_da.cnt * sizeof item ); + memcpy( &carItemHotbar(0), &carItemInfo(0), + carItemInfo_da.cnt * sizeof carItemHotbar(0) ); wListClear( (wList_p)newCarPLs[0].control ); for ( inx=0; inx<carItemHotbar_da.cnt; inx++ ) { item = carItemHotbar(inx); - if ( item->car && !IsTrackDeleted(item->car) ) + if ( item->car && !IsTrackDeleted(item->car) ) { continue; + } cp = CarItemDescribe( item, 0, NULL ); wListAddValue( (wList_p)newCarPLs[0].control, cp, NULL, I2VP(inx) ); } @@ -1665,16 +1767,18 @@ EXPORT void CarItemLoadList( void * unused ) InfoSubstituteControls( newCarControls, newCarLabels ); wWinGetSize( mainW, &w, &h ); w -= wControlGetPosX( newCarControls[0] ) + 4; - if ( w > 20 ) - wListSetSize( (wList_p)newCarControls[0], w, wControlGetHeight( newCarControls[0] ) ); + if ( w > 20 ) { + wListSetSize( (wList_p)newCarControls[0], w, + wControlGetHeight( newCarControls[0] ) ); + } } static char * CarItemHotbarProc( - hotBarProc_e op, - void * data, - drawCmd_p d, - coOrd * origP ) + hotBarProc_e op, + void * data, + drawCmd_p d, + coOrd * origP ) { wIndex_t carItemInx = (wIndex_t)VP2L(data); carItem_p item; @@ -1684,8 +1788,9 @@ static char * CarItemHotbarProc( wWinPix_t w, h; item = carItemHotbar(carItemInx); - if ( item == NULL ) + if ( item == NULL ) { return NULL; + } switch ( op ) { case HB_SELECT: currCarItemPtr = item; @@ -1693,11 +1798,13 @@ static char * CarItemHotbarProc( if ( (mode&0xF000) == 0 ) { wListClear( (wList_p)newCarPLs[0].control ); for ( inx=carItemInx; - inx<carItemHotbar_da.cnt && ( inx==carItemInx || Cmp_carHotbar(&carItemHotbar(carItemInx),&carItemHotbar(inx))==0 ); - inx++ ) { + inx<carItemHotbar_da.cnt && ( inx==carItemInx + || Cmp_carHotbar(&carItemHotbar(carItemInx),&carItemHotbar(inx))==0 ); + inx++ ) { item = carItemHotbar(inx); - if ( item->car && !IsTrackDeleted(item->car) ) + if ( item->car && !IsTrackDeleted(item->car) ) { continue; + } cp = CarItemDescribe( item, mode, NULL ); wListAddValue( (wList_p)newCarPLs[0].control, cp, NULL, I2VP(inx) ); } @@ -1711,8 +1818,10 @@ static char * CarItemHotbarProc( InfoSubstituteControls( newCarControls, newCarLabels ); wWinGetSize( mainW, &w, &h ); w -= wControlGetPosX( newCarControls[0] ) + 4; - if ( w > 20 ) - wListSetSize( (wList_p)newCarControls[0], w, wControlGetHeight( newCarControls[0] ) ); + if ( w > 20 ) { + wListSetSize( (wList_p)newCarControls[0], w, + wControlGetHeight( newCarControls[0] ) ); + } } else { InfoSubstituteControls( NULL, NULL ); cp = CarItemDescribe( item, 0, NULL ); @@ -1725,9 +1834,11 @@ static char * CarItemHotbarProc( case HB_FULLTITLE: return item->title; case HB_DRAW: - if ( item->segCnt == 0 ) + if ( item->segCnt == 0 ) { CarItemGetSegs( item ); - DrawSegs( d, *origP, 0.0, item->segPtr, item->segCnt, trackGauge, wDrawColorBlack ); + } + DrawSegs( d, *origP, 0.0, item->segPtr, item->segCnt, trackGauge, + wDrawColorBlack ); return NULL; } return NULL; @@ -1741,8 +1852,10 @@ EXPORT int CarAvailableCount( void ) carItem_t * item; for ( inx=0; inx < carItemHotbar_da.cnt; inx ++ ) { item = carItemHotbar(inx); - if (FIT_NONE == CompatibleScale( FIT_CAR, item->scaleInx, GetLayoutCurScale())) + if (FIT_NONE == CompatibleScale( FIT_CAR, item->scaleInx, + GetLayoutCurScale())) { continue; + } cnt++; } return cnt; @@ -1757,15 +1870,20 @@ EXPORT void AddHotBarCarDesc( void ) coOrd size; DYNARR_SET( carItem_t*, carItemHotbar_da, carItemInfo_da.cnt ); - memcpy( carItemHotbar_da.ptr, carItemInfo_da.ptr, carItemInfo_da.cnt * sizeof item0 ); - qsort( carItemHotbar_da.ptr, carItemHotbar_da.cnt, sizeof item0, Cmp_carHotbar ); + memcpy( &carItemHotbar(0), &carItemInfo(0), + carItemInfo_da.cnt * sizeof carItemHotbar(0) ); + qsort( &carItemHotbar(0), carItemHotbar_da.cnt, sizeof carItemHotbar(0), + Cmp_carHotbar ); for ( inx=0,item0=NULL; inx < carItemHotbar_da.cnt; inx ++ ) { item1 = carItemHotbar(inx); - if ( item1->car && !IsTrackDeleted(item1->car) ) + if ( item1->car && !IsTrackDeleted(item1->car) ) { continue; - if ( FIT_NONE == CompatibleScale(FIT_CAR,item1->scaleInx,GetLayoutCurScale())) + } + if ( FIT_NONE == CompatibleScale(FIT_CAR,item1->scaleInx,GetLayoutCurScale())) { continue; - if ( (carHotbarModes[carHotbarModeInx]&0xF000)!=0 || ( item0 == NULL || Cmp_carHotbar( &item0, &item1 ) != 0 ) ) { + } + if ( (carHotbarModes[carHotbarModeInx]&0xF000)!=0 || ( item0 == NULL + || Cmp_carHotbar( &item0, &item1 ) != 0 ) ) { #ifdef DESCFIX orig.x = - item->orig.x; orig.y = - item->orig.y; @@ -1773,7 +1891,9 @@ EXPORT void AddHotBarCarDesc( void ) orig = zero; size.x = item1->dim.carLength; size.y = item1->dim.carWidth; - AddHotBarElement( FormatCarTitle( item1, carHotbarContents[carHotbarModeInx] ), size, orig, FALSE, FALSE, (60.0*12.0/curScaleRatio), I2VP(inx), CarItemHotbarProc ); + AddHotBarElement( FormatCarTitle( item1, carHotbarContents[carHotbarModeInx] ), + size, orig, FALSE, FALSE, (60.0*12.0/curScaleRatio), I2VP(inx), + CarItemHotbarProc ); } item0 = item1; } @@ -1781,26 +1901,30 @@ EXPORT void AddHotBarCarDesc( void ) EXPORT void CarItemFindCouplerMountPoint( - carItem_p item, - traverseTrack_t trvTrk0, - coOrd pos[2] ) + carItem_p item, + traverseTrack_t trvTrk0, + coOrd pos[2] ) { // We assume the coupler pivot is 'couplerLength' before the end of the car DIST_T couplerLength = (item->dim.coupledLength - item->dim.carLength) / 2.0; if ( IsClose(item->dim.truckCenter) ) { // Single truck/bogie DIST_T d = item->dim.carLength/2.0 - couplerLength; - Translate( &pos[0], trvTrk0.pos, trvTrk0.angle, d + item->dim.truckCenterOffset ); + Translate( &pos[0], trvTrk0.pos, trvTrk0.angle, + d + item->dim.truckCenterOffset ); FlipTraverseTrack( &trvTrk0 ); - Translate( &pos[1], trvTrk0.pos, trvTrk0.angle, d - item->dim.truckCenterOffset ); + Translate( &pos[1], trvTrk0.pos, trvTrk0.angle, + d - item->dim.truckCenterOffset ); return; } // Find the pos of the 2 trucks // Note this is a slight simplification, we should use the car center, not the on-track position traverseTrack_t trvTrk1 = trvTrk0; - TraverseTrack2( &trvTrk0, item->dim.truckCenter/2.0 + item->dim.truckCenterOffset ); + TraverseTrack2( &trvTrk0, + item->dim.truckCenter/2.0 + item->dim.truckCenterOffset ); FlipTraverseTrack( & trvTrk1 ); - TraverseTrack2( &trvTrk1, item->dim.truckCenter/2.0 - item->dim.truckCenterOffset ); + TraverseTrack2( &trvTrk1, + item->dim.truckCenter/2.0 - item->dim.truckCenterOffset ); // Get the angle to translate from the truck ANGLE_T angle[2]; @@ -1818,111 +1942,143 @@ EXPORT void CarItemFindCouplerMountPoint( // Get the distance to translate DIST_T d[2]; - d[0] = item->dim.carLength/2.0 - couplerLength - ( item->dim.truckCenter/2.0 + item->dim.truckCenterOffset ); - d[1] = item->dim.carLength/2.0 - couplerLength - ( item->dim.truckCenter/2.0 - item->dim.truckCenterOffset ); + d[0] = item->dim.carLength/2.0 - couplerLength - ( item->dim.truckCenter/2.0 + + item->dim.truckCenterOffset ); + d[1] = item->dim.carLength/2.0 - couplerLength - ( item->dim.truckCenter/2.0 - + item->dim.truckCenterOffset ); // And translate Translate( &pos[0], trvTrk0.pos, angle[0], d[0] ); Translate( &pos[1], trvTrk1.pos, angle[1], d[1] ); - + #ifdef LATER if ( trvTrk.trk == NULL || (item->options&CAR_DESC_COUPLER_MODE_BODY)!=0 ) { couplerOffset = item->dim.coupledLength/2.0; Translate( &pos, trvTrk.pos, trvTrk.angle, couplerOffset ); } else { - if (dir) - TraverseTrack2( &trvTrk, item->dim.truckCenter/2.0-item->dim.truckCenterOffset ); - else - TraverseTrack2( &trvTrk, item->dim.truckCenter/2.0+item->dim.truckCenterOffset ); + if (dir) { + TraverseTrack2( &trvTrk, + item->dim.truckCenter/2.0-item->dim.truckCenterOffset ); + } else { + TraverseTrack2( &trvTrk, + item->dim.truckCenter/2.0+item->dim.truckCenterOffset ); + } /*Translate( &pos1, trvTrk.pos, trvTrk.angle, item->dim.truckCenter/2.0 );*/ couplerOffset = (item->dim.coupledLength-item->dim.truckCenter)/2.0; - if (dir) + if (dir) { couplerOffset = couplerOffset + item->dim.truckCenterOffset; - else + } else { couplerOffset = couplerOffset - item->dim.truckCenterOffset; + } Translate( &pos, trvTrk.pos, trvTrk.angle, couplerOffset ); } #endif } +EXPORT void CarItemPos( + carItem_p item, + coOrd * pos ) +{ + pos->x = item->pos.x; + pos->y = item->pos.y; +} + + EXPORT void CarItemSize( - carItem_p item, - coOrd * size ) + carItem_p item, + coOrd * size ) { size->x = item->dim.carLength; size->y = item->dim.carWidth; } +EXPORT void CarItemSetNumber(carItem_p item, char * number) +{ + if (item->data.number && number[0]) { + MyFree(item->data.number); + } + if (number[0]) { + item->data.number = MyStrdup(number); + } +} + EXPORT char * CarItemNumber( - carItem_p item ) + carItem_p item ) { return item->data.number; } + + static DIST_T CarItemTruckCenter( - carItem_p item ) + carItem_p item ) { return item->dim.truckCenter; } static DIST_T CarItemTruckOffset( - carItem_p item ) { - return item->dim.truckCenterOffset; + carItem_p item ) +{ + return item->dim.truckCenterOffset; } EXPORT DIST_T CarItemCoupledLength( - carItem_p item ) + carItem_p item ) { return item->dim.coupledLength; } EXPORT BOOL_T CarItemIsLoco( - carItem_p item ) + carItem_p item ) { return (item->options&CAR_DESC_IS_LOCO) == (CAR_DESC_IS_LOCO); } EXPORT BOOL_T CarItemIsLocoMaster( - carItem_p item ) + carItem_p item ) { - return (item->options&(CAR_DESC_IS_LOCO|CAR_DESC_IS_LOCO_MASTER)) == (CAR_DESC_IS_LOCO|CAR_DESC_IS_LOCO_MASTER); + return (item->options&(CAR_DESC_IS_LOCO|CAR_DESC_IS_LOCO_MASTER)) == + (CAR_DESC_IS_LOCO|CAR_DESC_IS_LOCO_MASTER); } EXPORT void CarItemSetLocoMaster( - carItem_p item, - BOOL_T locoIsMaster ) + carItem_p item, + BOOL_T locoIsMaster ) { - if ( locoIsMaster ) + if ( locoIsMaster ) { item->options |= CAR_DESC_IS_LOCO_MASTER; - else + } else { item->options &= ~CAR_DESC_IS_LOCO_MASTER; + } } EXPORT void CarItemSetTrack( - carItem_p item, - track_p trk ) + carItem_p item, + track_p trk ) { item->car = trk; - if ( trk != NULL ) + if ( trk != NULL ) { SetTrkScale( trk, item->scaleInx ); + } } static DIST_T CarItemCouplerLength( - carItem_p item, - int dir ) + carItem_p item, + int dir ) { return item->dim.coupledLength-item->dim.carLength; } -EXPORT BOOL_T StoreCarItem (carItem_p item, void **data,long *len) { +EXPORT BOOL_T StoreCarItem (carItem_p item, void **data,long *len) +{ *data = item; *len = sizeof (carItem_t); @@ -1930,7 +2086,8 @@ EXPORT BOOL_T StoreCarItem (carItem_p item, void **data,long *len) { } -EXPORT BOOL_T ReplayCarItem(carItem_p item, void *data,long len) { +EXPORT BOOL_T ReplayCarItem(carItem_p item, void *data,long len) +{ item->pos = ((carItem_t *)data)->pos; @@ -1940,54 +2097,39 @@ EXPORT BOOL_T ReplayCarItem(carItem_p item, void *data,long len) { } EXPORT void CarItemPlace( - carItem_p item, - traverseTrack_p trvTrk, - DIST_T * dists ) + carItem_p item, + traverseTrack_p trvTrk, + DIST_T * dists ) { DIST_T dist; DIST_T offset; traverseTrack_t trks[2]; dist = CarItemTruckCenter(item)/2.0; - offset = CarItemTruckOffset(item); //Offset is the amount the truck centers are displaced + offset = CarItemTruckOffset( + item); //Offset is the amount the truck centers are displaced trks[0] = trks[1] = *trvTrk; TraverseTrack2( &trks[0], dist+offset ); TraverseTrack2( &trks[1], -dist+offset ); item->angle = FindAngle( trks[1].pos, trks[0].pos ); item->pos.x = (trks[0].pos.x+trks[1].pos.x)/2.0; item->pos.y = (trks[0].pos.y+trks[1].pos.y)/2.0; - Translate(&item->pos,item->pos,item->angle, -offset); // Put truck center back along line by offset + Translate(&item->pos,item->pos,item->angle, + -offset); // Put truck center back along line by offset dists[0] = dists[1] = CarItemCoupledLength(item)/2.0; } -static dynArr_t clearance; - -static void ClearClearancePoints(void) { - //DYNARR_RESET(trkSeg_t,clearance); -} - -static void CreateClearancePoint(coOrd pos, int position) { - //DYNARR_APPEND(trkSeg_t,clearance,1); - -} - -static void DrawClearancePoints(void) { - //for (int i=0;i<clearance.cnt;i++) { - //DrawSegs(); - //} -} - static int drawCarTrucks = 0; EXPORT void CarItemDraw( - drawCmd_p d, - carItem_p item, - wDrawColor color, - int direction, - BOOL_T locoIsMaster, - vector_t *coupler, - BOOL_T pencils, - track_p traverse) + drawCmd_p d, + carItem_p item, + wDrawColor color, + int direction, + BOOL_T locoIsMaster, + vector_t *coupler, + BOOL_T pencils, + track_p traverse) { coOrd size, pos, pos2; DIST_T length; @@ -1996,12 +2138,11 @@ EXPORT void CarItemDraw( trkSeg_t simpleSegs[1]; pts_t simplePts[4]; int dir; - DIST_T rad; +// DIST_T rad; static int couplerLineWidth = 3; - DIST_T scale2rail; CarItemSize( item, &size ); - if ( d->scale >= ((d->options&DC_PRINT)?(twoRailScale*2+1):twoRailScale) ) { + if ( !DrawTwoRails( d, 1 ) ) { simplePts[0].pt.x = simplePts[3].pt.x = -size.x/2.0; simplePts[1].pt.x = simplePts[2].pt.x = size.x/2.0; simplePts[0].pt.y = simplePts[1].pt.y = -size.y/2.0; @@ -2012,52 +2153,23 @@ EXPORT void CarItemDraw( simplePts[3].pt_type = 0; simpleSegs[0].type = SEG_FILPOLY; simpleSegs[0].color = item->color; - simpleSegs[0].width = 0; + simpleSegs[0].lineWidth = 0; simpleSegs[0].u.p.cnt = 4; simpleSegs[0].u.p.pts = simplePts; simpleSegs[0].u.p.orig = zero; simpleSegs[0].u.p.angle = 0.0; DrawSegs( d, item->pos, item->angle-90.0, simpleSegs, 1, 0.0, color ); } else { - if ( item->segCnt == 0 ) + if ( item->segCnt == 0 ) { CarItemGetSegs( item ); + } Translate( &pos, item->pos, item->angle, -size.x/2.0 ); Translate( &pos, pos, item->angle-90, -size.y/2.0 ); DrawSegs( d, pos, item->angle-90.0, item->segPtr, item->segCnt, 0.0, color ); } if (pencils) { - ClearClearancePoints(); - coOrd posm1,posm2; - Translate( &posm1, item->pos, item->angle-90, -size.y/2.0 ); - Translate( &posm2, item->pos, item->angle+90, -size.y/2.0 ); - coOrd posm1a = posm1; - coOrd posm2a = posm2; - if (GetTrkDistance(traverse, &posm1a)>GetTrkDistance(traverse, &posm2a)) - CreateClearancePoint(posm1,1); - else - CreateClearancePoint(posm2,2); - - coOrd pose1,pose2; - Translate( &pose1, item->pos, item->angle, size.x/2.0 ); - Translate( &pose1, pose1, item->angle-90, -size.y/2.0 ); - Translate( &pose2, pose1, item->angle+90, -size.y ); - - traverseTrack_t traverseTrk; - traverseTrk.trk = traverse; - traverseTrk.pos = item->pos; - traverseTrk.angle = item->angle; - TraverseTrack2(&traverseTrk,size.x/2.0); - coOrd pose1a = pose1; - coOrd pose2a = pose2; - if (GetTrkDistance(traverseTrk.trk, &pose1a)>GetTrkDistance(traverseTrk.trk, &pose2a)) - CreateClearancePoint(pose1,3); - else - CreateClearancePoint(pose2,4); - - - DrawClearancePoints(); - +// No code for pencils } if ( drawCarTrucks ) { @@ -2066,36 +2178,41 @@ EXPORT void CarItemDraw( double offset = CarItemTruckOffset(item); Translate( &pos, item->pos, item->angle, length+(direction?offset:-offset) ); DrawArc( d, pos, trackGauge/2.0, 0.0, 360.0, FALSE, 0, color ); - Translate( &pos, item->pos, item->angle+180, length+(direction?-offset:offset) ); + Translate( &pos, item->pos, item->angle+180, + length+(direction?-offset:offset) ); DrawArc( d, pos, trackGauge/2.0, 0.0, 360.0, FALSE, 0, color ); } if ( (labelEnable&LABELENABLE_CARS) ) { fp = wStandardFont( F_HELV, FALSE, FALSE ); - DrawBoxedString( BOX_BACKGROUND, d, item->pos, item->data.number, fp, (wFontSize_t)descriptionFontSize, color, 0.0 ); + DrawBoxedString( BOX_BACKGROUND, d, item->pos, item->data.number, fp, + (wFontSize_t)descriptionFontSize, color, 0.0 ); } /* draw loco head light */ if ( (item->options&CAR_DESC_IS_LOCO)!=0 ) { - Translate( &pos, item->pos, item->angle+(direction?180.0:0.0), size.x/2.0-trackGauge/2.0 ); + Translate( &pos, item->pos, item->angle+(direction?180.0:0.0), + size.x/2.0-trackGauge/2.0 ); if ( locoIsMaster ) { - DrawFillCircle( d, pos, trackGauge/2.0, (color==wDrawColorBlack?drawColorGold:color) ); + DrawFillCircle( d, pos, trackGauge/2.0, + (color==wDrawColorBlack?drawColorGold:color) ); } else { width = (wDrawWidth)floor( trackGauge/8.0 * d->dpi / d->scale ); - DrawArc( d, pos, trackGauge/2.0, 0.0, 360.0, FALSE, width, (color==wDrawColorBlack?drawColorGold:color) ); + DrawArc( d, pos, trackGauge/2.0, 0.0, 360.0, FALSE, width, + (color==wDrawColorBlack?drawColorGold:color) ); } } /* draw coupler */ - scale2rail = ((d->options&DC_PRINT)?(twoRailScale*2+1):twoRailScale); - if ( d->scale >= scale2rail ) + if ( ! DrawTwoRails(d,0.5) ) { return; - scale2rail /= 2; - rad = trackGauge/8.0; + } +// rad = trackGauge/8.0; for ( dir=0; dir<2; dir++ ) { - Translate( &pos, coupler[dir].pos, coupler[dir].angle, CarItemCouplerLength(item,dir) ); + Translate( &pos, coupler[dir].pos, coupler[dir].angle, + CarItemCouplerLength(item,dir) ); DrawLine( d, coupler[dir].pos, pos, couplerLineWidth, color ); - if ( d->scale < scale2rail ) { + if ( DrawTwoRails(d,1) ) { /*DrawFillCircle( d, p0, rad, dir==0?color:selectedColor );*/ Translate( &pos2, pos, coupler[dir].angle+90.0, trackGauge/3 ); DrawLine( d, pos2, pos, couplerLineWidth, color ); @@ -2105,7 +2222,7 @@ EXPORT void CarItemDraw( EXPORT void CarItemUpdate( - carItem_p item ) + carItem_p item ) { DoChangeNotification( CHANGE_SCALE ); } @@ -2129,9 +2246,10 @@ static wIndex_t carDlgManufInx; static char carDlgManufStr[STR_SIZE]; static wIndex_t carDlgKindInx; static wIndex_t carDlgProtoInx; -static char carDlgProtoStr[STR_SIZE]; +static char carDlgProtoStr[STR_SIZE] = + "Prototype"; // Make sure we have something in ProtoStr static wIndex_t carDlgPartnoInx; -static char carDlgPartnoStr[STR_SIZE]; +static char carDlgPartnoStr[STR_SIZE] = "0"; // and in PartnoStr static char carDlgDescStr[STR_SIZE]; static long carDlgDispMode; @@ -2163,17 +2281,18 @@ static long carDlgMultiNum; static char *dispmodeLabels[] = { N_("Information"), N_("Customize"), NULL }; static drawCmd_t carDlgD = { - NULL, - &screenDrawFuncs, - 0, - 1.0, - 0.0, - { 0, 0 }, { 0, 0 }, - Pix2CoOrd, CoOrd2Pix }; + NULL, + &screenDrawFuncs, + 0, + 1.0, + 0.0, + { 0, 0 }, { 0, 0 }, + Pix2CoOrd, CoOrd2Pix +}; static void CarDlgRedraw( wDraw_p d, void * context, wWinPix_t x, wWinPix_t y ); -static paramDrawData_t carDlgDrawData = { 455, 100, CarDlgRedraw, NULL, &carDlgD }; -static paramTextData_t notesData = { 440, 100 }; +static paramDrawData_t carDlgDrawData = { 500, 120, CarDlgRedraw, NULL, &carDlgD }; +static paramTextData_t notesData = { 500, 156 }; static char *multinumLabels[] = { N_("Sequential"), N_("Repeated"), NULL }; static void CarDlgNewProto( void ); static void CarDlgUpdate( paramGroup_p, int, void * ); @@ -2254,7 +2373,7 @@ static paramData_t carDlgPLs[] = { #define I_CD_MLTNUM (C+7) { PD_RADIO, &carDlgMultiNum, "multinum", PDO_NOPREF|PDO_DLGWIDE|PDO_DLGHORZ, multinumLabels, N_("Numbers"), BC_HORZ|BC_NOBORDER }, #define I_CD_NOTES (C+8) - { PD_TEXT, NULL, "notes", PDO_NOPREF|PDO_DLGWIDE|PDO_DLGNOLABELALIGN|PDO_DLGRESETMARGIN, ¬esData, N_("Notes") }, + { PD_TEXT, NULL, "notes", PDO_NOPREF|PDO_DLGWIDE|PDO_DLGNOLABELALIGN|PDO_DLGRESETMARGIN|PDO_DLGRESIZE, ¬esData, N_("Notes") }, #define D (C+9) #define I_CD_MSG (D+0) @@ -2264,7 +2383,8 @@ static paramData_t carDlgPLs[] = { { PD_MENUITEM, CarDlgNewDesc, "new-part-mi", 0, NULL, N_("Car Part"), 0, I2VP(0) }, { PD_MENUITEM, CarDlgNewProto, "new-proto-mi", 0, NULL, N_("Car Prototype"), 0, I2VP(0) }, #define I_CD_NEWPROTO (D+4) - { PD_BUTTON, CarDlgNewProto, "new", PDO_DLGCMDBUTTON, NULL, N_("New"), 0, I2VP(0) } }; + { PD_BUTTON, CarDlgNewProto, "new", PDO_DLGCMDBUTTON, NULL, N_("New"), 0, I2VP(0) } +}; static paramGroup_t carDlgPG = { "carpart", 0, carDlgPLs, COUNT( carDlgPLs ) }; @@ -2274,151 +2394,163 @@ static dynArr_t carDlgSegs_da; typedef enum { - T_ItemSel, T_ItemEnter, T_ProtoSel, T_ProtoEnter, T_PartnoSel, T_PartnoEnter } carDlgTransistion_e; + T_ItemSel, T_ItemEnter, T_ProtoSel, T_ProtoEnter, T_PartnoSel, T_PartnoEnter +} carDlgTransistion_e; static char *carDlgTransistion_s[] = { - "ItemSel", "ItemEnter", "ProtoSel", "ProtoEnter", "PartnoSel", "PartnoEnter" }; + "ItemSel", "ItemEnter", "ProtoSel", "ProtoEnter", "PartnoSel", "PartnoEnter" +}; typedef enum { - S_Error, - S_ItemSel, S_ItemEnter, S_PartnoSel, S_PartnoEnter, S_ProtoSel } carDlgState_e; + S_Error, + S_ItemSel, S_ItemEnter, S_PartnoSel, S_PartnoEnter, S_ProtoSel +} carDlgState_e; static char *carDlgState_s[] = { - "Error", - "ItemSel", "ItemEnter", "PartnoSel", "PartnoEnter", "ProtoSel" }; + "Error", + "ItemSel", "ItemEnter", "PartnoSel", "PartnoEnter", "ProtoSel" +}; typedef enum { - A_Return, - A_SError, - A_Else, - A_SItemSel, - A_SItemEnter, - A_SPartnoSel, - A_SPartnoEnter, - A_SProtoSel, - A_IsCustom, - A_IsNewPart, - A_IsNewProto, - A_LoadDataFromPartList, - A_LoadDimsFromStack, - A_LoadManufListForScale, - A_LoadManufListAll, - A_LoadProtoListForManuf, - A_LoadProtoListAll, - A_LoadPartnoList, - A_LoadLists, - A_LoadDimsFromProtoList, - A_ConvertDimsToProto, - A_Redraw, - A_ClrManuf, - A_ClrPartnoStr, - A_ClrNumberStr, - A_LoadProtoStrFromList, - A_ShowPartnoList, - A_HidePartnoList, - A_PushDims, - A_PopDims, - A_PopTitleAndTypeinx, - A_PopCouplerLength, - A_ShowControls, - A_LoadInfoFromUpdateItem, - A_LoadDataFromUpdatePart, - A_InitProto, - A_RecallCouplerLength, - A_Last - } carDlgAction_e; + A_Return, + A_SError, + A_Else, + A_SItemSel, + A_SItemEnter, + A_SPartnoSel, + A_SPartnoEnter, + A_SProtoSel, + A_IsCustom, + A_IsNewPart, + A_IsNewProto, + A_LoadDataFromPartList, + A_LoadDimsFromStack, + A_LoadManufListForScale, + A_LoadManufListAll, + A_LoadProtoListForManuf, + A_LoadProtoListAll, + A_LoadPartnoList, + A_LoadLists, + A_LoadDimsFromProtoList, + A_ConvertDimsToProto, + A_Redraw, + A_ClrManuf, + A_ClrPartnoStr, + A_ClrNumberStr, + A_LoadProtoStrFromList, + A_ShowPartnoList, + A_HidePartnoList, + A_PushDims, + A_PopDims, + A_PopTitleAndTypeinx, + A_PopCouplerLength, + A_ShowControls, + A_LoadInfoFromUpdateItem, + A_LoadDataFromUpdatePart, + A_InitProto, + A_RecallCouplerLength, + A_Last +} carDlgAction_e; static char *carDlgAction_s[] = { - "Return", - "SError", - "Else", - "SItemSel", - "SItemEnter", - "SPartnoSel", - "SPartnoEnter", - "SProtoSel", - "IsCustom", - "IsNewPart", - "IsNewProto", - "LoadDataFromPartList", - "LoadDimsFromStack", - "LoadManufListForScale", - "LoadManufListAll", - "LoadProtoListForManuf", - "LoadProtoListAll", - "LoadPartnoList", - "LoadLists", - "LoadDimsFromProtoList", - "ConvertDimsToProto", - "Redraw", - "ClrManuf", - "ClrPartnoStr", - "ClrNumberStr", - "LoadProtoStrFromList", - "ShowPartnoList", - "HidePartnoList", - "PushDims", - "PopDims", - "PopTitleAndTypeinx", - "PopCouplerLength", - "ShowControls", - "LoadInfoFromUpdateItem", - "LoadDataFromUpdatePart", - "InitProto", - "RecallCouplerLength", - "Last" - }; + "Return", + "SError", + "Else", + "SItemSel", + "SItemEnter", + "SPartnoSel", + "SPartnoEnter", + "SProtoSel", + "IsCustom", + "IsNewPart", + "IsNewProto", + "LoadDataFromPartList", + "LoadDimsFromStack", + "LoadManufListForScale", + "LoadManufListAll", + "LoadProtoListForManuf", + "LoadProtoListAll", + "LoadPartnoList", + "LoadLists", + "LoadDimsFromProtoList", + "ConvertDimsToProto", + "Redraw", + "ClrManuf", + "ClrPartnoStr", + "ClrNumberStr", + "LoadProtoStrFromList", + "ShowPartnoList", + "HidePartnoList", + "PushDims", + "PopDims", + "PopTitleAndTypeinx", + "PopCouplerLength", + "ShowControls", + "LoadInfoFromUpdateItem", + "LoadDataFromUpdatePart", + "InitProto", + "RecallCouplerLength", + "Last" +}; static carDlgAction_e stateMachine[7][7][10] = { -/* A_SError */{ {A_SError}, {A_SError}, {A_SError}, {A_SError}, {A_SError}, {A_SError}, {A_SError} }, - -/*A_SItemSel*/{ -/*T_ItemSel*/ { A_LoadProtoListForManuf, A_LoadPartnoList, A_LoadDataFromPartList, A_Redraw }, -/*T_ItemEnter*/ { A_SItemEnter, A_LoadProtoListAll, A_ClrPartnoStr, A_ClrNumberStr, A_LoadDimsFromProtoList, A_Redraw, A_HidePartnoList }, -/*T_ProtoSel*/ { A_LoadPartnoList, A_LoadDataFromPartList, A_Redraw }, -/*T_ProtoEnter*/ { A_SError }, -/*T_PartnoSel*/ { A_LoadDataFromPartList, A_Redraw }, -/*T_PartnoEnter*/{ A_SItemEnter, A_LoadProtoListAll, A_HidePartnoList } }, - -/*A_SItemEnter*/{ -/*T_ItemSel*/ { A_SItemSel, A_LoadProtoListForManuf, A_LoadPartnoList, A_LoadDataFromPartList, A_Redraw, A_ShowPartnoList }, -/*T_ItemEnter*/ { A_Return }, -/*T_ProtoSel*/ { A_LoadDimsFromProtoList, A_Redraw }, -/*T_ProtoEnter*/ { A_SError }, -/*T_PartnoSel*/ { A_SError }, -/*T_PartnoEnter*/{ A_Return } }, - -/*A_SPartnoSel*/{ -/*T_ItemSel*/ { A_SPartnoSel }, -/*T_ItemEnter*/ { A_SPartnoSel }, -/*T_ProtoSel*/ { A_SPartnoSel, A_LoadDimsFromProtoList, A_Redraw }, -/*T_ProtoEnter*/ { A_SError }, -/*T_PartnoSel*/ { A_SError } }, - -/*A_SPartnoEnter*/{ -/*T_ItemSel*/ { A_SPartnoSel }, -/*T_ItemEnter*/ { A_SPartnoEnter }, -/*T_ProtoSel*/ { A_SPartnoEnter, A_LoadDimsFromProtoList, A_Redraw }, -/*T_ProtoEnter*/ { A_SError }, -/*T_PartnoSel*/ { A_SError }, -/*T_PartnoEnter*/{ A_SPartnoEnter } }, - -/*A_SProtoSel*/{ -/*T_ItemSel*/ { A_SError }, -/*T_ItemEnter*/ { A_SError }, -/*T_ProtoSel*/ { A_SError }, -/*T_ProtoEnter*/ { A_SProtoSel }, -/*T_PartnoSel*/ { A_SError }, -/*T_PartnoEnter*/{ A_SError } } }; + /* A_SError */{ {A_SError}, {A_SError}, {A_SError}, {A_SError}, {A_SError}, {A_SError}, {A_SError} }, + + /*A_SItemSel*/{ + /*T_ItemSel*/ { A_LoadProtoListForManuf, A_LoadPartnoList, A_LoadDataFromPartList, A_Redraw }, + /*T_ItemEnter*/ { A_SItemEnter, A_LoadProtoListAll, A_ClrPartnoStr, A_ClrNumberStr, A_LoadDimsFromProtoList, A_Redraw, A_HidePartnoList }, + /*T_ProtoSel*/ { A_LoadPartnoList, A_LoadDataFromPartList, A_Redraw }, + /*T_ProtoEnter*/ { A_SError }, + /*T_PartnoSel*/ { A_LoadDataFromPartList, A_Redraw }, + /*T_PartnoEnter*/{ A_SItemEnter, A_LoadProtoListAll, A_HidePartnoList } + }, + + /*A_SItemEnter*/{ + /*T_ItemSel*/ { A_SItemSel, A_LoadProtoListForManuf, A_LoadPartnoList, A_LoadDataFromPartList, A_Redraw, A_ShowPartnoList }, + /*T_ItemEnter*/ { A_Return }, + /*T_ProtoSel*/ { A_LoadDimsFromProtoList, A_Redraw }, + /*T_ProtoEnter*/ { A_SError }, + /*T_PartnoSel*/ { A_SError }, + /*T_PartnoEnter*/{ A_Return } + }, + + /*A_SPartnoSel*/{ + /*T_ItemSel*/ { A_SPartnoSel }, + /*T_ItemEnter*/ { A_SPartnoSel }, + /*T_ProtoSel*/ { A_SPartnoSel, A_LoadDimsFromProtoList, A_Redraw }, + /*T_ProtoEnter*/ { A_SError }, + /*T_PartnoSel*/ { A_SError } + }, + + /*A_SPartnoEnter*/{ + /*T_ItemSel*/ { A_SPartnoSel }, + /*T_ItemEnter*/ { A_SPartnoEnter }, + /*T_ProtoSel*/ { A_SPartnoEnter, A_LoadDimsFromProtoList, A_Redraw }, + /*T_ProtoEnter*/ { A_SError }, + /*T_PartnoSel*/ { A_SError }, + /*T_PartnoEnter*/{ A_SPartnoEnter } + }, + + /*A_SProtoSel*/{ + /*T_ItemSel*/ { A_SError }, + /*T_ItemEnter*/ { A_SError }, + /*T_ProtoSel*/ { A_SError }, + /*T_ProtoEnter*/ { A_SProtoSel }, + /*T_PartnoSel*/ { A_SError }, + /*T_PartnoEnter*/{ A_SError } + } +}; static carDlgAction_e itemNewActions[] = { - A_RecallCouplerLength, - A_LoadLists, - A_IsCustom, 2+3, - A_LoadDimsFromProtoList, A_ClrPartnoStr, A_ClrNumberStr, - A_Else, 1, - A_LoadDataFromPartList, - A_ShowControls, A_Return }; + A_RecallCouplerLength, + A_LoadLists, + A_IsCustom, 2+3, + A_LoadDimsFromProtoList, A_ClrPartnoStr, A_ClrNumberStr, + A_Else, 1, + A_LoadDataFromPartList, + A_ShowControls, A_Return +}; static carDlgAction_e itemUpdActions[] = { A_LoadInfoFromUpdateItem, /*A_LoadManufListForScale, A_IsCustom, 5, A_LoadProtoListAll, A_HidePartnoList, A_SItemEnter, A_Else, 5, A_LoadProtoListForManuf, A_LoadPartnoList, A_LoadDataFromPartList, A_ShowPartnoList, A_SItemSel,*/ - A_ShowControls, A_Return }; + A_ShowControls, A_Return + }; static carDlgAction_e partNewActions[] = { A_RecallCouplerLength, A_LoadManufListAll, A_LoadProtoListAll, A_ClrPartnoStr, A_ClrNumberStr, A_SPartnoSel, A_LoadDimsFromProtoList, A_ShowControls, A_Redraw, A_Return }; static carDlgAction_e partUpdActions[] = { A_LoadDataFromUpdatePart, A_SPartnoSel, A_ShowControls, A_Return }; @@ -2427,64 +2559,68 @@ static carDlgAction_e protoNewActions[] = { A_InitProto, A_SProtoSel, A_ShowCont static carDlgAction_e protoUpdActions[] = { A_InitProto, A_SProtoSel, A_ShowControls, A_Return }; static carDlgAction_e item2partActions[] = { - A_PushDims, A_LoadManufListAll, A_LoadProtoListAll, - A_IsCustom, 0+1, - A_ClrManuf, - A_SPartnoSel, - A_ShowControls, A_Return }; + A_PushDims, A_LoadManufListAll, A_LoadProtoListAll, + A_IsCustom, 0+1, + A_ClrManuf, + A_SPartnoSel, + A_ShowControls, A_Return +}; static carDlgAction_e part2itemActions[] = { - A_IsNewPart, 2+0, - A_Else, 1, - A_PopTitleAndTypeinx, - A_LoadLists, - A_IsCustom, 2+1, - A_LoadDimsFromProtoList, - A_Else, 1, - A_LoadDataFromPartList, + A_IsNewPart, 2+0, + A_Else, 1, + A_PopTitleAndTypeinx, + A_LoadLists, + A_IsCustom, 2+1, + A_LoadDimsFromProtoList, + A_Else, 1, + A_LoadDataFromPartList, #ifdef LATER - A_IsNewPart, 2+0, - A_Else, 1, - A_LoadDimsFromStack, + A_IsNewPart, 2+0, + A_Else, 1, + A_LoadDimsFromStack, #endif - A_ShowControls, - A_Return }; + A_ShowControls, + A_Return +}; static carDlgAction_e item2protoActions[] = { A_PushDims, A_ConvertDimsToProto, A_SProtoSel, A_ShowControls, A_Return }; static carDlgAction_e proto2itemActions[] = { - A_IsCustom, 2+2+3, - A_IsNewProto, 2+3, - A_LoadProtoListAll, - A_PopCouplerLength, - A_LoadDimsFromProtoList, - A_Else, 2, - A_LoadDimsFromStack, - A_LoadProtoStrFromList, - A_ShowControls, - A_Return }; + A_IsCustom, 2+2+3, + A_IsNewProto, 2+3, + A_LoadProtoListAll, + A_PopCouplerLength, + A_LoadDimsFromProtoList, + A_Else, 2, + A_LoadDimsFromStack, + A_LoadProtoStrFromList, + A_ShowControls, + A_Return +}; static carDlgAction_e part2protoActions[] = { A_PushDims, A_ConvertDimsToProto, A_SProtoSel, A_ShowControls, A_Return }; static carDlgAction_e proto2partActions[] = { - A_IsNewProto, 2+3, - A_LoadProtoListAll, - A_PopCouplerLength, - A_LoadDimsFromProtoList, - A_Else, 2, - A_LoadDimsFromStack, - A_LoadProtoStrFromList, - A_ShowControls, - A_Return }; + A_IsNewProto, 2+3, + A_LoadProtoListAll, + A_PopCouplerLength, + A_LoadDimsFromProtoList, + A_Else, 2, + A_LoadDimsFromStack, + A_LoadProtoStrFromList, + A_ShowControls, + A_Return +}; #define CARDLG_STK_SIZE (2) int carDlgStkPtr = 0; struct { - carDim_t dim; - DIST_T couplerLength; - carDlgState_e state; - int changed; - carPart_p partP; - wIndex_t typeInx; - } carDlgStk[CARDLG_STK_SIZE]; + carDim_t dim; + DIST_T couplerLength; + carDlgState_e state; + int changed; + carPart_p partP; + wIndex_t typeInx; +} carDlgStk[CARDLG_STK_SIZE]; static carDlgState_e currState = S_Error; #define S_ITEM (currState==S_ItemSel||currState==S_ItemEnter) @@ -2497,10 +2633,11 @@ static void CarDlgLoadDimsFromPart( carPart_p partP ) { tabString_t tabs[7]; - if ( partP == NULL ) return; + if ( partP == NULL ) { return; } carDlgDim = partP->dim; carDlgCouplerLength = (carDlgDim.coupledLength-carDlgDim.carLength)/2.0; - sprintf( message, "%s-%s", carDlgPLs[I_CD_CPLRLEN].nameStr, GetScaleName(carDlgScaleInx) ); + sprintf( message, "%s-%s", carDlgPLs[I_CD_CPLRLEN].nameStr, + GetScaleName(carDlgScaleInx) ); wPrefSetFloat( carDlgPG.nameStr, message, carDlgCouplerLength ); carDlgIsLoco = (partP->options&CAR_DESC_IS_LOCO)?1:0; carDlgBodyColor = partP->color; @@ -2508,7 +2645,8 @@ static void CarDlgLoadDimsFromPart( carPart_p partP ) ParamLoadControl( &carDlgPG, I_CD_CARWIDTH ); ParamLoadControl( &carDlgPG, I_CD_TRKCENTER ); ParamLoadControl( &carDlgPG, I_CD_CPLDLEN ); - wColorSelectButtonSetColor( (wButton_p)carDlgPLs[I_CD_BODYCOLOR].control, *(wDrawColor*)carDlgPLs[I_CD_BODYCOLOR].valueP ); + wColorSelectButtonSetColor( (wButton_p)carDlgPLs[I_CD_BODYCOLOR].control, + *(wDrawColor*)carDlgPLs[I_CD_BODYCOLOR].valueP ); TabStringExtract( partP->title, 7, tabs ); } @@ -2531,7 +2669,7 @@ static void CarDlgLoadDimsFromProto( carProto_p protoP ) static void CarDlgRedraw( - wDraw_p d, void * context, wWinPix_t x, wWinPix_t y ) + wDraw_p d, void * context, wWinPix_t x, wWinPix_t y ) { wWinPix_t w, h; DIST_T ww, hh; @@ -2542,33 +2680,37 @@ static void CarDlgRedraw( int segCnt; trkSeg_p segPtr; - if ( S_PROTO ) + if ( S_PROTO ) { ratio = 1; - else + } else { ratio = 1/GetScaleRatio(carDlgScaleInx); + } wDrawClear( carDlgD.d ); - if ( carDlgDim.carLength <= 0 || carDlgDim.carWidth <= 0 ) + if ( carDlgDim.carLength <= 0 || carDlgDim.carWidth <= 0 ) { return; + } FreeFilledDraw( carDlgSegs_da.cnt, &carDlgSegs(0) ); if ( !S_PROTO ) { if ( carDlgProtoInx < 0 || - (protoP = CarProtoLookup( carDlgProtoStr, FALSE, FALSE, 0.0, 0.0 )) == NULL || - protoP->segCnt == 0 ) { - CarProtoDlgCreateDummyOutline( &segCnt, &segPtr, (BOOL_T)carDlgIsLoco, carDlgDim.carLength, carDlgDim.carWidth, carDlgBodyColor ); + (protoP = CarProtoLookup( carDlgProtoStr, FALSE, FALSE, 0.0, 0.0 )) == NULL || + protoP->segCnt == 0 ) { + CarProtoDlgCreateDummyOutline( &segCnt, &segPtr, (BOOL_T)carDlgIsLoco, + carDlgDim.carLength, carDlgDim.carWidth, carDlgBodyColor ); } else { segCnt = protoP->segCnt; segPtr = protoP->segPtr; } } else { if ( carProtoSegCnt <= 0 ) { - CarProtoDlgCreateDummyOutline( &segCnt, &segPtr, (BOOL_T)carDlgIsLoco, carDlgDim.carLength, carDlgDim.carWidth, drawColorBlue ); + CarProtoDlgCreateDummyOutline( &segCnt, &segPtr, (BOOL_T)carDlgIsLoco, + carDlgDim.carLength, carDlgDim.carWidth, drawColorBlue ); } else { segCnt = carProtoSegCnt; segPtr = carProtoSegPtr; } } DYNARR_SET( trkSeg_t, carDlgSegs_da, segCnt ); - memcpy( &carDlgSegs(0), segPtr, segCnt * sizeof *(trkSeg_t*)0 ); + memcpy( &carDlgSegs(0), segPtr, segCnt * sizeof carDlgSegs(0) ); CloneFilledDraw( carDlgSegs_da.cnt, &carDlgSegs(0), TRUE ); GetSegBounds( zero, 0.0, carDlgSegs_da.cnt, &carDlgSegs(0), &orig, &size ); scale_w = carDlgDim.carLength/size.x; @@ -2589,26 +2731,32 @@ static void CarDlgRedraw( hh = h/carDlgD.dpi-0.5; scale_w = carDlgDim.carLength/ww; scale_h = carDlgDim.carWidth/hh; - if ( scale_w > scale_h ) + if ( scale_w > scale_h ) { carDlgD.scale = scale_w; - else + } else { carDlgD.scale = scale_h; + } orig.x = 0.50*carDlgD.scale; orig.y = 0.25*carDlgD.scale; - DrawSegs( &carDlgD, orig, 0.0, &carDlgSegs(0), carDlgSegs_da.cnt, 0.0, wDrawColorBlack ); + DrawSegsDA( &carDlgD, NULL, orig, 0.0, &carDlgSegs_da, 0.0, wDrawColorBlack, + 0 ); pos.y = orig.y+carDlgDim.carWidth/2.0; if ( carDlgDim.truckCenter > 0.0 ) { - pos.x = orig.x+(carDlgDim.carLength-carDlgDim.truckCenter)/2.0-carDlgDim.truckCenterOffset; + pos.x = orig.x+(carDlgDim.carLength-carDlgDim.truckCenter)/2.0 + -carDlgDim.truckCenterOffset; CarProtoDrawTruck( &carDlgD, trackGauge*curScaleRatio, ratio, pos, 0.0 ); - pos.x = orig.x+(carDlgDim.carLength+carDlgDim.truckCenter)/2.0-carDlgDim.truckCenterOffset; + pos.x = orig.x+(carDlgDim.carLength+carDlgDim.truckCenter)/2.0 + -carDlgDim.truckCenterOffset; CarProtoDrawTruck( &carDlgD, trackGauge*curScaleRatio, ratio, pos, 0.0 ); } if ( carDlgDim.coupledLength > carDlgDim.carLength ) { pos.x = orig.x; - CarProtoDrawCoupler( &carDlgD, (carDlgDim.coupledLength-carDlgDim.carLength)/2.0, ratio, pos, 270.0 ); + CarProtoDrawCoupler( &carDlgD, + (carDlgDim.coupledLength-carDlgDim.carLength)/2.0, ratio, pos, 270.0 ); pos.x = orig.x+carDlgDim.carLength; - CarProtoDrawCoupler( &carDlgD, (carDlgDim.coupledLength-carDlgDim.carLength)/2.0, ratio, pos, 90.0 ); + CarProtoDrawCoupler( &carDlgD, + (carDlgDim.coupledLength-carDlgDim.carLength)/2.0, ratio, pos, 90.0 ); } } @@ -2623,97 +2771,119 @@ static void CarDlgLoadRoadnameList( void ) wIndex_t inx; roadnameMap_p roadnameMapP; - if ( !roadnameMapChanged ) return; + if ( !roadnameMapChanged ) { return; } wListClear( (wList_p)carDlgPLs[I_CD_ROADNAME_LIST].control ); - wListAddValue( (wList_p)carDlgPLs[I_CD_ROADNAME_LIST].control, _("Undecorated"), NULL, NULL ); + wListAddValue( (wList_p)carDlgPLs[I_CD_ROADNAME_LIST].control, _("Undecorated"), + NULL, NULL ); for ( inx=0; inx<roadnameMap_da.cnt; inx++ ) { roadnameMapP = DYNARR_N(roadnameMap_p, roadnameMap_da, inx); - wListAddValue( (wList_p)carDlgPLs[I_CD_ROADNAME_LIST].control, roadnameMapP->roadname, NULL, roadnameMapP ); - if ( strcasecmp( carDlgRoadnameStr, roadnameMapP->roadname )==0 ) + wListAddValue( (wList_p)carDlgPLs[I_CD_ROADNAME_LIST].control, + roadnameMapP->roadname, NULL, roadnameMapP ); + if ( strcasecmp( carDlgRoadnameStr, roadnameMapP->roadname )==0 ) { carDlgRoadnameInx = inx+1; + } } roadnameMapChanged = FALSE; } static BOOL_T CheckAvail( - carPartParent_p parentP ) + carPartParent_p parentP ) { wIndex_t inx; carPart_p partP; for ( inx=0; inx<parentP->parts_da.cnt; inx++ ) { partP = carPart(parentP,inx); - if ( IsParamValid(partP->paramFileIndex) ) + if ( IsParamValid(partP->paramFileIndex) ) { return TRUE; + } } return FALSE; } static BOOL_T CarDlgLoadManufList( - BOOL_T bLoadAll, - BOOL_T bInclCustomUnknown, - SCALEINX_T scale ) + BOOL_T bLoadAll, + BOOL_T bInclCustomUnknown, + SCALEINX_T scale ) { carPartParent_p manufP, manufP1; wIndex_t inx, listInx=-1; BOOL_T found = TRUE; char * firstName = NULL; -LOG( log_carDlgList, 3, ( "CarDlgLoadManufList( %s, %s, %d )\n carDlgManufStr=\"%s\"\n", bLoadAll?"TRUE":"FALSE", bInclCustomUnknown?"TRUE":"FALSE", scale, carDlgManufStr ) ) + LOG( log_carDlgList, 3, + ( "CarDlgLoadManufList( %s, %s, %d )\n carDlgManufStr=\"%s\"\n", + bLoadAll?"TRUE":"FALSE", bInclCustomUnknown?"TRUE":"FALSE", scale, + carDlgManufStr ) ) carDlgManufInx = -1; manufP1 = NULL; wListClear( (wList_p)carDlgPLs[I_CD_MANUF_LIST].control ); - for ( inx=0; inx<carPartParent_da.cnt; inx++ ) { - manufP = carPartParent(inx); - if ( manufP1!=NULL && strcasecmp( manufP1->manuf, manufP->manuf ) == 0 ) - continue; - if ( bLoadAll==FALSE && manufP->scale != scale ) - continue; - if ( !CheckAvail(manufP) ) - continue; - listInx = wListAddValue( (wList_p)carDlgPLs[I_CD_MANUF_LIST].control, manufP->manuf, NULL, manufP ); - if ( carDlgManufInx < 0 && ( carDlgManufStr[0] == '\0' || strcasecmp( carDlgManufStr, manufP->manuf ) == 0 ) ) { -LOG( log_carDlgList, 4, ( " found manufStr (inx=%d, listInx=%d)\n", inx, listInx ) ) - carDlgManufInx = listInx; - if ( carDlgManufStr[0] == '\0' ) strcpy( carDlgManufStr, manufP->manuf ); - } - if ( firstName == NULL ) - firstName = manufP->manuf; - manufP1 = manufP; - } - if ( bInclCustomUnknown ) { - listInx = wListAddValue( (wList_p)carDlgPLs[I_CD_MANUF_LIST].control, _("Custom"), NULL, NULL ); - if ( carDlgManufInx < 0 && ( carDlgManufStr[0] == '\0' || strcasecmp( carDlgManufStr, "Custom" ) == 0 ) ) { -LOG( log_carDlgList, 4, ( " found Cus manufStr (inx=%d, listInx=%d)\n", inx, listInx ) ) - carDlgManufInx = listInx; - if ( carDlgManufStr[0] == '\0' ) strcpy( carDlgManufStr, _("Custom") ); - } - if ( firstName == NULL ) - firstName = "Custom"; - wListAddValue( (wList_p)carDlgPLs[I_CD_MANUF_LIST].control, _("Unknown"), NULL, NULL ); - if ( carDlgManufInx < 0 && ( carDlgManufStr[0] == '\0' || strcasecmp( carDlgManufStr, "Unknown" ) == 0 ) ) { -LOG( log_carDlgList, 4, ( " found Unk manufStr (inx=%d, listInx=%d)\n", inx, listInx ) ) - carDlgManufInx = listInx; - if ( carDlgManufStr[0] == '\0' ) strcpy( carDlgManufStr, _("Unknown") ); - } + for ( inx=0; inx<carPartParent_da.cnt; inx++ ) { + manufP = carPartParent(inx); + if ( manufP1!=NULL && strcasecmp( manufP1->manuf, manufP->manuf ) == 0 ) { + continue; } - if ( carDlgManufInx < 0 ) { - found = FALSE; - if ( firstName != NULL ) { -LOG( log_carDlgList, 4, ( " didn't find manufStr, using [0] = %s\n", firstName ) ) - carDlgManufInx = 0; - strcpy( carDlgManufStr, firstName ); - } + if ( bLoadAll==FALSE && manufP->scale != scale ) { + continue; + } + if ( !CheckAvail(manufP) ) { + continue; + } + listInx = wListAddValue( (wList_p)carDlgPLs[I_CD_MANUF_LIST].control, + manufP->manuf, NULL, manufP ); + if ( carDlgManufInx < 0 && ( carDlgManufStr[0] == '\0' + || strcasecmp( carDlgManufStr, manufP->manuf ) == 0 ) ) { + LOG( log_carDlgList, 4, ( " found manufStr (inx=%d, listInx=%d)\n", inx, + listInx ) ) + carDlgManufInx = listInx; + if ( carDlgManufStr[0] == '\0' ) { strcpy( carDlgManufStr, manufP->manuf ); } + } + if ( firstName == NULL ) { + firstName = manufP->manuf; + } + manufP1 = manufP; + } + if ( bInclCustomUnknown ) { + listInx = wListAddValue( (wList_p)carDlgPLs[I_CD_MANUF_LIST].control, + _("Custom"), NULL, NULL ); + if ( carDlgManufInx < 0 && ( carDlgManufStr[0] == '\0' + || strcasecmp( carDlgManufStr, "Custom" ) == 0 ) ) { + LOG( log_carDlgList, 4, ( " found Cus manufStr (inx=%d, listInx=%d)\n", inx, + listInx ) ) + carDlgManufInx = listInx; + if ( carDlgManufStr[0] == '\0' ) { strcpy( carDlgManufStr, _("Custom") ); } + } + if ( firstName == NULL ) { + firstName = "Custom"; + } + wListAddValue( (wList_p)carDlgPLs[I_CD_MANUF_LIST].control, _("Unknown"), NULL, + NULL ); + if ( carDlgManufInx < 0 && ( carDlgManufStr[0] == '\0' + || strcasecmp( carDlgManufStr, "Unknown" ) == 0 ) ) { + LOG( log_carDlgList, 4, ( " found Unk manufStr (inx=%d, listInx=%d)\n", inx, + listInx ) ) + carDlgManufInx = listInx; + if ( carDlgManufStr[0] == '\0' ) { strcpy( carDlgManufStr, _("Unknown") ); } } + } + if ( carDlgManufInx < 0 ) { + found = FALSE; + if ( firstName != NULL ) { + LOG( log_carDlgList, 4, ( " didn't find manufStr, using [0] = %s\n", + firstName ) ) + carDlgManufInx = 0; + strcpy( carDlgManufStr, firstName ); + } + } return found; } static BOOL_T CarDlgLoadProtoList( - char * manuf, - SCALEINX_T scale, - BOOL_T loadTypeList ) + char * manuf, + SCALEINX_T scale, + BOOL_T loadTypeList ) { carPartParent_p parentP; wIndex_t inx, listInx, inx1; @@ -2730,75 +2900,96 @@ static BOOL_T CarDlgLoadProtoList( wListClear( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control ); memset( typeCount, 0, N_TYPELISTMAP * sizeof typeCount[0] ); -LOG( log_carDlgList, 3, ( "CarDlgLoadProtoList( %s, %d, %s )\n carDlgProtoStr=\"%s\", carDlgTypeInx=%d\n", manuf?manuf:"NULL", scale, loadTypeList?"TRUE":"FALSE", carDlgProtoStr, carDlgTypeInx ) ) + LOG( log_carDlgList, 3, + ( "CarDlgLoadProtoList( %s, %d, %s )\n carDlgProtoStr=\"%s\", carDlgTypeInx=%d\n", + manuf?manuf:"NULL", scale, loadTypeList?"TRUE":"FALSE", carDlgProtoStr, + carDlgTypeInx ) ) if ( manuf==NULL ) { - if ( carProto_da.cnt <= 0 ) return FALSE; - if ( listTypeInx < 0 && carDlgProtoStr[0] && (protoP=CarProtoFind(carDlgProtoStr)) ) + if ( carProto_da.cnt <= 0 ) { return FALSE; } + if ( listTypeInx < 0 && carDlgProtoStr[0] + && (protoP=CarProtoFind(carDlgProtoStr)) ) { listTypeInx = CarProtoFindTypeCode(protoP->type); - if ( listTypeInx < 0 ) + } + if ( listTypeInx < 0 ) { listTypeInx = CarProtoFindTypeCode(carProto(0)->type); + } for ( inx=0; inx<carProto_da.cnt; inx++ ) { protoP = carProto(inx); currTypeInx = CarProtoFindTypeCode(protoP->type); typeCount[currTypeInx]++; if ( carDlgTypeInx >= 0 && - listTypeInx != carDlgTypeInx && - currTypeInx == carDlgTypeInx ) { -LOG( log_carDlgList, 4, ( " found typeinx, reset list (old=%d)\n", listTypeInx ) ) + listTypeInx != carDlgTypeInx && + currTypeInx == carDlgTypeInx ) { + LOG( log_carDlgList, 4, ( " found typeinx, reset list (old=%d)\n", + listTypeInx ) ) wListClear( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control ); listTypeInx = carDlgTypeInx; carDlgProtoInx = -1; firstName = NULL; } - if ( currTypeInx != listTypeInx ) continue; - listInx = wListAddValue( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control, protoP->desc, NULL, protoP ); - if ( carDlgProtoInx < 0 && carDlgProtoStr[0] && strcasecmp( carDlgProtoStr, protoP->desc ) == 0 ) { -LOG( log_carDlgList, 4, ( " found protoStr (inx=%d, listInx=%d)\n", inx, listInx ) ) + if ( currTypeInx != listTypeInx ) { continue; } + listInx = wListAddValue( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control, + protoP->desc, NULL, protoP ); + if ( carDlgProtoInx < 0 && carDlgProtoStr[0] + && strcasecmp( carDlgProtoStr, protoP->desc ) == 0 ) { + LOG( log_carDlgList, 4, ( " found protoStr (inx=%d, listInx=%d)\n", inx, + listInx ) ) carDlgProtoInx = listInx; - if ( carDlgProtoStr[0] == '\0' ) strcpy( carDlgProtoStr, protoP->desc ); + if ( carDlgProtoStr[0] == '\0' ) { strcpy( carDlgProtoStr, protoP->desc ); } } - if ( firstName == NULL ) + if ( firstName == NULL ) { firstName = protoP->desc; + } } } else { for ( inx=0; inx<carPartParent_da.cnt; inx++ ) { parentP = carPartParent(inx); if ( strcasecmp( manuf, parentP->manuf ) != 0 || - scale != parentP->scale ) + scale != parentP->scale ) { continue; - if ( !CheckAvail(parentP) ) + } + if ( !CheckAvail(parentP) ) { continue; + } found = FALSE; for ( inx1=0; inx1<parentP->parts_da.cnt; inx1++ ) { partP = carPart( parentP, inx1 ); currTypeInx = CarProtoFindTypeCode(partP->type); typeCount[currTypeInx]++; - if ( listTypeInx < 0 ) + if ( listTypeInx < 0 ) { listTypeInx = currTypeInx; + } if ( carDlgTypeInx >= 0 && - listTypeInx != carDlgTypeInx && - currTypeInx == carDlgTypeInx ) { -LOG( log_carDlgList, 4, ( " found typeinx, reset list (old=%d)\n", listTypeInx ) ) + listTypeInx != carDlgTypeInx && + currTypeInx == carDlgTypeInx ) { + LOG( log_carDlgList, 4, ( " found typeinx, reset list (old=%d)\n", + listTypeInx ) ) wListClear( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control ); listTypeInx = carDlgTypeInx; carDlgProtoInx = -1; firstName = NULL; } - if ( listTypeInx == currTypeInx ) + if ( listTypeInx == currTypeInx ) { found = TRUE; + } } - if ( !found ) + if ( !found ) { continue; - listInx = wListAddValue( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control, parentP->proto, NULL, parentP ); - if ( carDlgProtoInx < 0 && ( carDlgProtoStr[0] == '\0' || strcasecmp( carDlgProtoStr, parentP->proto ) == 0 ) ) { -LOG( log_carDlgList, 4, ( " found protoStr (inx=%d, listInx=%d)\n", inx, listInx ) ) + } + listInx = wListAddValue( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control, + parentP->proto, NULL, parentP ); + if ( carDlgProtoInx < 0 && ( carDlgProtoStr[0] == '\0' + || strcasecmp( carDlgProtoStr, parentP->proto ) == 0 ) ) { + LOG( log_carDlgList, 4, ( " found protoStr (inx=%d, listInx=%d)\n", inx, + listInx ) ) carDlgProtoInx = listInx; if ( carDlgProtoStr[0] == '\0' ) { strcpy( carDlgProtoStr, parentP->proto ); } } - if ( firstName == NULL ) + if ( firstName == NULL ) { firstName = parentP->proto; + } } } @@ -2806,60 +2997,63 @@ LOG( log_carDlgList, 4, ( " found protoStr (inx=%d, listInx=%d)\n", inx, list if ( carDlgProtoInx < 0 ) { found = FALSE; if ( firstName != NULL ) { -LOG( log_carDlgList, 4, ( " didn't find protoStr, using [0] = %s\n", firstName ) ) + LOG( log_carDlgList, 4, ( " didn't find protoStr, using [0] = %s\n", + firstName ) ) carDlgProtoInx = 0; strcpy( carDlgProtoStr, firstName ); } } - wListSetIndex( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control, carDlgProtoInx ); + wListSetIndex( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control, + carDlgProtoInx ); if ( loadTypeList ) { -LOG( log_carDlgList, 4, ( " loading typelist\n" ) ) - wListClear( (wList_p)carDlgPLs[I_CD_PROTOKIND_LIST].control ); - for ( currTypeInx=0; currTypeInx<N_TYPELISTMAP; currTypeInx++ ) { - if ( typeCount[currTypeInx] > 0 ) { - listInx = wListAddValue( (wList_p)carDlgPLs[I_CD_PROTOKIND_LIST].control, _(typeListMap[currTypeInx].name), NULL, I2VP(currTypeInx) ); - if ( currTypeInx == listTypeInx ) { -LOG( log_carDlgList, 4, ( " current = %d\n", listInx ) ) - carDlgKindInx = listInx; + LOG( log_carDlgList, 4, ( " loading typelist\n" ) ) + wListClear( (wList_p)carDlgPLs[I_CD_PROTOKIND_LIST].control ); + for ( currTypeInx=0; currTypeInx<N_TYPELISTMAP; currTypeInx++ ) { + if ( typeCount[currTypeInx] > 0 ) { + listInx = wListAddValue( (wList_p)carDlgPLs[I_CD_PROTOKIND_LIST].control, + _(typeListMap[currTypeInx].name), NULL, I2VP(currTypeInx) ); + if ( currTypeInx == listTypeInx ) { + LOG( log_carDlgList, 4, ( " current = %d\n", listInx ) ) + carDlgKindInx = listInx; + } } } } - } return found; } static void ConstructPartDesc( - tabString_t * tabs ) + tabString_t * tabs ) { char * cp; - cp = message; - *cp = '\0'; - if ( tabs[T_PART].len ) { - cp = TabStringCpy( cp, &tabs[T_PART] ); - *cp++ = ' '; - } - if ( tabs[T_DESC].len ) { - cp = TabStringCpy( cp, &tabs[T_DESC] ); - *cp++ = ' '; - } - if ( tabs[T_REPMARK].len ) { - cp = TabStringCpy( cp, &tabs[T_REPMARK] ); - *cp++ = ' '; - } else if ( tabs[T_ROADNAME].len ) { - cp = TabStringCpy( cp, &tabs[T_ROADNAME] ); - *cp++ = ' '; - } else { - strcpy( cp, _("Undecorated ") ); - cp += strlen( cp ); - } - if ( tabs[T_NUMBER].len ) { - cp = TabStringCpy( cp, &tabs[T_NUMBER] ); - *cp++ = ' '; - } - *cp = '\0'; + cp = message; + *cp = '\0'; + if ( tabs[T_PART].len ) { + cp = TabStringCpy( cp, &tabs[T_PART] ); + *cp++ = ' '; + } + if ( tabs[T_DESC].len ) { + cp = TabStringCpy( cp, &tabs[T_DESC] ); + *cp++ = ' '; + } + if ( tabs[T_REPMARK].len ) { + cp = TabStringCpy( cp, &tabs[T_REPMARK] ); + *cp++ = ' '; + } else if ( tabs[T_ROADNAME].len ) { + cp = TabStringCpy( cp, &tabs[T_ROADNAME] ); + *cp++ = ' '; + } else { + strcpy( cp, _("Undecorated ") ); + cp += strlen( cp ); + } + if ( tabs[T_NUMBER].len ) { + cp = TabStringCpy( cp, &tabs[T_NUMBER] ); + *cp++ = ' '; + } + *cp = '\0'; } @@ -2894,16 +3088,19 @@ static BOOL_T CarDlgLoadPartList( carPartParent_p parentP ) ConstructPartDesc( tabs ); lastPart.paramFileIndex = partP->paramFileIndex; if ( message[0] && IsParamValid(partP->paramFileIndex) && - ( lastPart.title == NULL || Cmp_part( &lastPart, partP ) != 0 ) ) { - listInx = wListAddValue( (wList_p)carDlgPLs[I_CD_PARTNO_LIST].control, message, NULL, partP ); + ( lastPart.title == NULL || Cmp_part( &lastPart, partP ) != 0 ) ) { + listInx = wListAddValue( (wList_p)carDlgPLs[I_CD_PARTNO_LIST].control, message, + NULL, partP ); if ( carDlgPartnoInx<0 && - (carDlgPartnoStr[0]?TabStringCmp( carDlgPartnoStr, &tabs[T_PART] ) == 0:TRUE) ) { + (carDlgPartnoStr[0]?TabStringCmp( carDlgPartnoStr, + &tabs[T_PART] ) == 0:TRUE) ) { carDlgPartnoInx = listInx; found = TRUE; selPartP = partP; } - if ( selPartP == NULL ) + if ( selPartP == NULL ) { selPartP = partP; + } lastPart = *partP; } } @@ -2911,8 +3108,9 @@ static BOOL_T CarDlgLoadPartList( carPartParent_p parentP ) carDlgPartnoStr[0] = '\0'; carDlgDescStr[0] = '\0'; } else { - if ( carDlgPartnoInx<0 ) + if ( carDlgPartnoInx<0 ) { carDlgPartnoInx = 0; + } TabStringExtract( selPartP->title, 7, tabs ); TabStringCpy( carDlgPartnoStr, &tabs[T_PART] ); TabStringCpy( carDlgDescStr, &tabs[T_DESC] ); @@ -2923,7 +3121,7 @@ static BOOL_T CarDlgLoadPartList( carPartParent_p parentP ) static void CarDlgLoadPart( - carPart_p partP ) + carPart_p partP ) { tabString_t tabs[7]; roadnameMap_p roadnameMapP; @@ -2951,9 +3149,9 @@ static void CarDlgLoadPart( static BOOL_T CarDlgLoadLists( - BOOL_T isItem, - tabString_t * tabs, - SCALEINX_T scale ) + BOOL_T isItem, + tabString_t * tabs, + SCALEINX_T scale ) { BOOL_T loadCustomUnknown = isItem; DIST_T ratio; @@ -2961,25 +3159,28 @@ static BOOL_T CarDlgLoadLists( static carProto_t protoTmp; static char protoTmpDesc[STR_SIZE]; - if ( tabs ) TabStringCpy( carDlgManufStr, &tabs[T_MANUF] ); + if ( tabs ) { TabStringCpy( carDlgManufStr, &tabs[T_MANUF] ); } if ( strcasecmp( carDlgManufStr, "unknown" ) == 0 || - strcasecmp( carDlgManufStr, "custom" ) == 0 ) { + strcasecmp( carDlgManufStr, "custom" ) == 0 ) { loadCustomUnknown = TRUE; /*isItem = FALSE;*/ } if ( (!CarDlgLoadManufList( !isItem, loadCustomUnknown, scale )) && tabs ) { TabStringCpy( carDlgManufStr, &tabs[T_MANUF] ); - carDlgManufInx = wListAddValue( (wList_p)carDlgPLs[I_CD_MANUF_LIST].control, carDlgManufStr, NULL, NULL ); + carDlgManufInx = wListAddValue( (wList_p)carDlgPLs[I_CD_MANUF_LIST].control, + carDlgManufStr, NULL, NULL ); isItem = FALSE; } if ( isItem ) { - parentP = (carPartParent_p)wListGetItemContext( (wList_p)carDlgPLs[I_CD_MANUF_LIST].control, carDlgManufInx ); + parentP = (carPartParent_p)wListGetItemContext( (wList_p) + carDlgPLs[I_CD_MANUF_LIST].control, carDlgManufInx ); if ( parentP ) { - if ( tabs ) TabStringCpy( carDlgProtoStr, &tabs[T_PROTO] ); + if ( tabs ) { TabStringCpy( carDlgProtoStr, &tabs[T_PROTO] ); } if ( CarDlgLoadProtoList( carDlgManufStr, scale, TRUE ) || !tabs ) { - parentP = (carPartParent_p)wListGetItemContext( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control, carDlgProtoInx ); + parentP = (carPartParent_p)wListGetItemContext( (wList_p) + carDlgPLs[I_CD_PROTOTYPE_LIST].control, carDlgProtoInx ); if ( parentP ) { - if ( tabs ) TabStringCpy( carDlgPartnoStr, &tabs[T_PART] ); + if ( tabs ) { TabStringCpy( carDlgPartnoStr, &tabs[T_PART] ); } if ( CarDlgLoadPartList( parentP ) || ( (!tabs) && carDlgPartnoInx>=0 ) ) { return TRUE; } @@ -2987,7 +3188,7 @@ static BOOL_T CarDlgLoadLists( } } } - if ( tabs ) TabStringCpy( carDlgProtoStr, &tabs[T_PROTO] ); + if ( tabs ) { TabStringCpy( carDlgProtoStr, &tabs[T_PROTO] ); } if ( !CarDlgLoadProtoList( NULL, 0, TRUE ) && tabs ) { /* create dummy proto */ ratio = GetScaleRatio( scale ); @@ -3002,12 +3203,16 @@ static BOOL_T CarDlgLoadLists( protoTmp.dim.coupledLength = carDlgDim.coupledLength*ratio; protoTmp.dim.truckCenter = carDlgDim.truckCenter*ratio; protoTmp.dim.truckCenterOffset = carDlgDim.truckCenterOffset*ratio; - CarProtoDlgCreateDummyOutline( &carProtoSegCnt, &carProtoSegPtr, (BOOL_T)carDlgIsLoco, protoTmp.dim.carLength, protoTmp.dim.carWidth, drawColorBlue ); + CarProtoDlgCreateDummyOutline( &carProtoSegCnt, &carProtoSegPtr, + (BOOL_T)carDlgIsLoco, protoTmp.dim.carLength, protoTmp.dim.carWidth, + drawColorBlue ); protoTmp.segCnt = carProtoSegCnt; protoTmp.segPtr = carProtoSegPtr; - GetSegBounds( zero, 0.0, carProtoSegCnt, carProtoSegPtr, &protoTmp.orig, &protoTmp.size ); + GetSegBounds( zero, 0.0, carProtoSegCnt, carProtoSegPtr, &protoTmp.orig, + &protoTmp.size ); TabStringCpy( carDlgProtoStr, &tabs[T_PROTO] ); - carDlgProtoInx = wListAddValue( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control, carDlgProtoStr, NULL, &protoTmp );/*??*/ + carDlgProtoInx = wListAddValue( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control, + carDlgProtoStr, NULL, &protoTmp );/*??*/ } carDlgPartnoInx = -1; if ( tabs ) { @@ -3034,30 +3239,45 @@ static void CarDlgShowControls( void ) ParamControlShow( &carDlgPG, I_CD_PURDAT, S_ITEM && carDlgDispMode==0 ); ParamControlShow( &carDlgPG, I_CD_SRVDAT, S_ITEM && carDlgDispMode==0 ); ParamControlShow( &carDlgPG, I_CD_NOTES, S_ITEM && carDlgDispMode==0 ); - ParamControlShow( &carDlgPG, I_CD_MLTNUM, S_ITEM && carDlgUpdateItemPtr==NULL && carDlgDispMode==0 ); - ParamControlShow( &carDlgPG, I_CD_QTY, S_ITEM && carDlgUpdateItemPtr==NULL && carDlgDispMode==0 ); - - ParamControlShow( &carDlgPG, I_CD_ROADNAME_LIST, S_PART || ( S_ITEM && carDlgDispMode==1 ) ); - ParamControlShow( &carDlgPG, I_CD_REPMARK, S_PART || ( S_ITEM && carDlgDispMode==1 ) ); - ParamControlShow( &carDlgPG, I_CD_NUMBER, S_PART || ( S_ITEM && carDlgDispMode==1 ) ); - ParamControlShow( &carDlgPG, I_CD_BODYCOLOR, S_PART || ( S_ITEM && carDlgDispMode==1 ) ); - ParamControlShow( &carDlgPG, I_CD_CARLENGTH, !( S_ITEM && carDlgDispMode==0 ) ); - ParamControlShow( &carDlgPG, I_CD_CARWIDTH, !( S_ITEM && carDlgDispMode==0 ) ); - ParamControlShow( &carDlgPG, I_CD_TRKCENTER, !( S_ITEM && carDlgDispMode==0 ) ); - ParamControlShow( &carDlgPG, I_CD_TRKOFFSET, !( S_ITEM && carDlgDispMode==0 ) ); + ParamControlShow( &carDlgPG, I_CD_MLTNUM, S_ITEM + && carDlgUpdateItemPtr==NULL && carDlgDispMode==0 ); + ParamControlShow( &carDlgPG, I_CD_QTY, S_ITEM && carDlgUpdateItemPtr==NULL + && carDlgDispMode==0 ); + + ParamControlShow( &carDlgPG, I_CD_ROADNAME_LIST, S_PART || ( S_ITEM + && carDlgDispMode==1 ) ); + ParamControlShow( &carDlgPG, I_CD_REPMARK, S_PART || ( S_ITEM + && carDlgDispMode==1 ) ); + ParamControlShow( &carDlgPG, I_CD_NUMBER, S_PART || ( S_ITEM + && carDlgDispMode==1 ) ); + ParamControlShow( &carDlgPG, I_CD_BODYCOLOR, S_PART || ( S_ITEM + && carDlgDispMode==1 ) ); + ParamControlShow( &carDlgPG, I_CD_CARLENGTH, !( S_ITEM + && carDlgDispMode==0 ) ); + ParamControlShow( &carDlgPG, I_CD_CARWIDTH, !( S_ITEM + && carDlgDispMode==0 ) ); + ParamControlShow( &carDlgPG, I_CD_TRKCENTER, !( S_ITEM + && carDlgDispMode==0 ) ); + ParamControlShow( &carDlgPG, I_CD_TRKOFFSET, !( S_ITEM + && carDlgDispMode==0 ) ); ParamControlShow( &carDlgPG, I_CD_CANVAS, !( S_ITEM && carDlgDispMode==0 ) ); - ParamControlShow( &carDlgPG, I_CD_CPLRLEN, S_PART || ( S_ITEM && carDlgDispMode==1 ) ); - ParamControlShow( &carDlgPG, I_CD_CPLDLEN, S_PART || ( S_ITEM && carDlgDispMode==1 ) ); - ParamControlShow( &carDlgPG, I_CD_CPLRMNT, S_PART || ( S_ITEM && carDlgDispMode==1 ) ); + ParamControlShow( &carDlgPG, I_CD_CPLRLEN, S_PART || ( S_ITEM + && carDlgDispMode==1 ) ); + ParamControlShow( &carDlgPG, I_CD_CPLDLEN, S_PART || ( S_ITEM + && carDlgDispMode==1 ) ); + ParamControlShow( &carDlgPG, I_CD_CPLRMNT, S_PART || ( S_ITEM + && carDlgDispMode==1 ) ); ParamControlShow( &carDlgPG, I_CD_DISPMODE, S_ITEM ); ParamControlShow( &carDlgPG, I_CD_TYPE_LIST, S_PROTO ); ParamControlShow( &carDlgPG, I_CD_FLIP, S_PROTO ); - ParamControlShow( &carDlgPG, I_CD_DESC_STR, S_PART || (currState==S_ItemEnter) ); + ParamControlShow( &carDlgPG, I_CD_DESC_STR, S_PART + || (currState==S_ItemEnter) ); ParamControlShow( &carDlgPG, I_CD_IMPORT, S_PROTO ); ParamControlShow( &carDlgPG, I_CD_RESET, S_PROTO ); - ParamControlShow( &carDlgPG, I_CD_PARTNO_STR, S_PART || (currState==S_ItemEnter) ); + ParamControlShow( &carDlgPG, I_CD_PARTNO_STR, S_PART + || (currState==S_ItemEnter) ); ParamControlShow( &carDlgPG, I_CD_PARTNO_LIST, (currState==S_ItemSel) ); ParamControlShow( &carDlgPG, I_CD_ISLOCO, S_PROTO ); ParamControlShow( &carDlgPG, I_CD_PROTOKIND_LIST, !S_PROTO ); @@ -3066,7 +3286,8 @@ static void CarDlgShowControls( void ) ParamControlShow( &carDlgPG, I_CD_MANUF_LIST, !S_PROTO ); /*ParamControlActive( &carDlgPG, I_CD_PROTOTYPE_STR, S_PROTO && carDlgUpdateProtoPtr==NULL );*/ - ParamControlActive( &carDlgPG, I_CD_ITEMINDEX, S_ITEM && carDlgUpdateItemPtr==NULL ); + ParamControlActive( &carDlgPG, I_CD_ITEMINDEX, S_ITEM + && carDlgUpdateItemPtr==NULL ); ParamControlActive( &carDlgPG, I_CD_MLTNUM, S_ITEM && carDlgQuantity>1 ); ParamControlActive( &carDlgPG, I_CD_IMPORT, selectedTrackCount > 0 ); @@ -3086,7 +3307,8 @@ static void CarDlgShowControls( void ) sprintf( message, _("New %s Scale Car Part"), GetScaleName( carDlgScaleInx ) ); wButtonSetLabel( carDlgPG.okB, _("Add") ); } else { - sprintf( message, _("Update %s Scale Car Part"), GetScaleName( carDlgScaleInx ) ); + sprintf( message, _("Update %s Scale Car Part"), + GetScaleName( carDlgScaleInx ) ); wButtonSetLabel( carDlgPG.okB, _("Update") ); } wWinSetTitle( carDlgPG.win, message ); @@ -3109,7 +3331,7 @@ static void CarDlgShowControls( void ) static void CarDlgDoActions( - carDlgAction_e * actions ) + carDlgAction_e * actions ) { carPart_p partP; carPartParent_p parentP; @@ -3136,12 +3358,13 @@ static void CarDlgDoActions( memset( reload, 0, sizeof reload ); while ( 1 ) { -LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) ) + LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) ) switch ( *actions++ ) { case A_Return: for ( inx=0; inx<COUNT( carDlgPLs ); inx++ ) - if ( reload[inx] ) + if ( reload[inx] ) { ParamLoadControl( &carDlgPG, inx ); + } return; case A_SError: currState = S_Error; @@ -3167,8 +3390,9 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) ) break; case A_IsCustom: offset = (int)*actions++; - if ( currState != S_ItemEnter ) + if ( currState != S_ItemEnter ) { actions += offset; + } break; case A_IsNewPart: offset = (int)*actions++; @@ -3190,8 +3414,9 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) ) } break; case A_LoadDataFromPartList: - partP = (carPart_p)wListGetItemContext( (wList_p)carDlgPLs[I_CD_PARTNO_LIST].control, carDlgPartnoInx ); - if ( partP != NULL ){ + partP = (carPart_p)wListGetItemContext( (wList_p) + carDlgPLs[I_CD_PARTNO_LIST].control, carDlgPartnoInx ); + if ( partP != NULL ) { CarDlgLoadPart(partP); RELOAD_PARTDATA; RELOAD_PARTDATA; @@ -3213,7 +3438,8 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) ) reload[I_CD_MANUF_LIST] = TRUE; break; case A_LoadProtoListForManuf: - parentP = (carPartParent_p)wListGetItemContext( (wList_p)carDlgPLs[I_CD_MANUF_LIST].control, carDlgManufInx ); + parentP = (carPartParent_p)wListGetItemContext( (wList_p) + carDlgPLs[I_CD_MANUF_LIST].control, carDlgManufInx ); CarDlgLoadProtoList( parentP->manuf, parentP->scale, TRUE ); reload[I_CD_PROTOKIND_LIST] = TRUE; reload[I_CD_PROTOTYPE_LIST] = TRUE; @@ -3224,18 +3450,21 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) ) reload[I_CD_PROTOTYPE_LIST] = TRUE; break; case A_LoadPartnoList: - parentP = (carPartParent_p)wListGetItemContext( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control, carDlgProtoInx ); + parentP = (carPartParent_p)wListGetItemContext( (wList_p) + carDlgPLs[I_CD_PROTOTYPE_LIST].control, carDlgProtoInx ); CarDlgLoadPartList( parentP ); reload[I_CD_PARTNO_LIST] = TRUE; break; case A_LoadLists: - if ( CarDlgLoadLists( TRUE, NULL, carDlgScaleInx ) ) + if ( CarDlgLoadLists( TRUE, NULL, carDlgScaleInx ) ) { currState = S_ItemSel; - else + } else { currState = S_ItemEnter; + } break; case A_LoadDimsFromProtoList: - protoP = (carProto_p)wListGetItemContext( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control, carDlgProtoInx ); + protoP = (carProto_p)wListGetItemContext( (wList_p) + carDlgPLs[I_CD_PROTOTYPE_LIST].control, carDlgProtoInx ); if ( protoP ) { CarDlgLoadDimsFromProto( protoP ); carDlgTypeInx = CarProtoFindTypeCode( protoP->type ); @@ -3281,9 +3510,11 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) ) reload[I_CD_NUMBER] = TRUE; break; case A_LoadProtoStrFromList: - wListGetValues( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control, carDlgProtoStr, sizeof carDlgProtoStr, NULL, NULL ); + wListGetValues( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control, carDlgProtoStr, + sizeof carDlgProtoStr, NULL, NULL ); #ifdef LATER - protoP = (carProto_p)wListGetItemContext( (wList_p)carDlgPLs[I_CD_PROTOTYPE_LIST].control, carDlgProtoInx ); + protoP = (carProto_p)wListGetItemContext( (wList_p) + carDlgPLs[I_CD_PROTOTYPE_LIST].control, carDlgProtoInx ); if ( protoP ) { carDlgTypeInx = CarProtoFindTypeCode( protoP->type ); carDlgIsLoco = (protoP->options&CAR_DESC_IS_LOCO)!=0; @@ -3303,17 +3534,18 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) ) ParamControlShow( &carDlgPG, I_CD_PARTNO_STR, TRUE ); break; case A_PushDims: - if ( carDlgStkPtr >= CARDLG_STK_SIZE ) - AbortProg( "carDlgNewDesc: CARDLG_STK_SIZE" ); + CHECK( carDlgStkPtr < CARDLG_STK_SIZE ); carDlgStk[carDlgStkPtr].dim = carDlgDim; carDlgStk[carDlgStkPtr].couplerLength = carDlgCouplerLength; carDlgStk[carDlgStkPtr].state = currState; carDlgStk[carDlgStkPtr].changed = carDlgChanged; carDlgStk[carDlgStkPtr].typeInx = carDlgTypeInx; - if ( currState == S_ItemSel && carDlgPartnoInx >= 0 ) - carDlgStk[carDlgStkPtr].partP = (carPart_p)wListGetItemContext( (wList_p)carDlgPLs[I_CD_PARTNO_LIST].control, carDlgPartnoInx ); - else + if ( currState == S_ItemSel && carDlgPartnoInx >= 0 ) { + carDlgStk[carDlgStkPtr].partP = (carPart_p)wListGetItemContext( ( + wList_p)carDlgPLs[I_CD_PARTNO_LIST].control, carDlgPartnoInx ); + } else { carDlgStk[carDlgStkPtr].partP = NULL; + } carDlgStkPtr++; break; case A_PopDims: @@ -3348,9 +3580,11 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) ) carDlgTypeInx = CarProtoFindTypeCode( carDlgUpdateItemPtr->type ); carDlgIsLoco = (carDlgUpdateItemPtr->type&1)!=0; carDlgCouplerLength = (carDlgDim.coupledLength-carDlgDim.carLength)/2.0; - sprintf( message, "%s-%s", carDlgPLs[I_CD_CPLRLEN].nameStr, GetScaleName(carDlgScaleInx) ); + sprintf( message, "%s-%s", carDlgPLs[I_CD_CPLRLEN].nameStr, + GetScaleName(carDlgScaleInx) ); wPrefSetFloat( carDlgPG.nameStr, message, carDlgCouplerLength ); - carDlgCouplerMount = (carDlgUpdateItemPtr->options&CAR_DESC_COUPLER_MODE_BODY)!=0; + carDlgCouplerMount = (carDlgUpdateItemPtr->options&CAR_DESC_COUPLER_MODE_BODY)!= + 0; carDlgIsLoco = (carDlgUpdateItemPtr->options&CAR_DESC_IS_LOCO)!=0; carDlgPurchPrice = carDlgUpdateItemPtr->data.purchPrice; sprintf( carDlgPurchPriceStr, "%0.2f", carDlgPurchPrice ); @@ -3359,21 +3593,24 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) ) carDlgCondition = carDlgUpdateItemPtr->data.condition; carDlgConditionInx = MapCondition( carDlgUpdateItemPtr->data.condition ); carDlgPurchDate = carDlgUpdateItemPtr->data.purchDate; - if ( carDlgPurchDate ) + if ( carDlgPurchDate ) { sprintf( carDlgPurchDateStr, "%ld", carDlgPurchDate ); - else + } else { carDlgPurchDateStr[0] = '\0'; + } carDlgServiceDate = carDlgUpdateItemPtr->data.serviceDate; - if ( carDlgServiceDate ) + if ( carDlgServiceDate ) { sprintf( carDlgServiceDateStr, "%ld", carDlgServiceDate ); - else + } else { carDlgServiceDateStr[0] = '\0'; + } wTextClear( (wText_p)carDlgPLs[I_CD_NOTES].control ); if ( carDlgUpdateItemPtr->data.notes ) { - strncpy( message, carDlgUpdateItemPtr->data.notes, sizeof message ); - message[sizeof message - 1] = '\0'; - for ( cp=message; *cp; cp++ ) - if ( *cp == '\n' ) *cp = ' '; + strncpy( message, carDlgUpdateItemPtr->data.notes, sizeof message ); + message[sizeof message - 1] = '\0'; + for ( cp=message; *cp; cp++ ) { + if ( *cp == '\n' ) { *cp = ' '; } + } wTextAppend( (wText_p)carDlgPLs[I_CD_NOTES].control, message ); } LoadRoadnameList( &tabs[T_ROADNAME], &tabs[T_REPMARK] ); @@ -3381,10 +3618,11 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) ) carDlgRoadnameInx = lookupListIndex+1; memset( reload, 1, sizeof reload ); - if ( CarDlgLoadLists( TRUE, tabs, carDlgScaleInx ) ) + if ( CarDlgLoadLists( TRUE, tabs, carDlgScaleInx ) ) { currState = S_ItemSel; - else + } else { currState = S_ItemEnter; + } break; case A_LoadDataFromUpdatePart: carDlgScaleInx = carDlgUpdatePartPtr->parent->scale; @@ -3410,7 +3648,7 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) ) carDlgDim.truckCenterOffset = 0; carDlgIsLoco = (typeListMap[carDlgTypeInx].value&1); } else { - strcpy( carDlgProtoStr , carDlgUpdateProtoPtr->desc ); + strcpy( carDlgProtoStr, carDlgUpdateProtoPtr->desc ); carDlgDim = carDlgUpdateProtoPtr->dim; carDlgCouplerLength = (carDlgDim.coupledLength-carDlgDim.carLength)/2.0; carDlgIsLoco = (carDlgUpdateProtoPtr->options&CAR_DESC_IS_LOCO)!=0; @@ -3422,12 +3660,14 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) ) RELOAD_DIMS; break; case A_RecallCouplerLength: - sprintf( message, "%s-%s", carDlgPLs[I_CD_CPLRLEN].nameStr, GetScaleName(carDlgScaleInx) ); + sprintf( message, "%s-%s", carDlgPLs[I_CD_CPLRLEN].nameStr, + GetScaleName(carDlgScaleInx) ); carDlgCouplerLength = 16.0/GetScaleRatio(carDlgScaleInx); - wPrefGetFloat( carDlgPG.nameStr, message, &carDlgCouplerLength, carDlgCouplerLength ); + wPrefGetFloat( carDlgPG.nameStr, message, &carDlgCouplerLength, + carDlgCouplerLength ); break; default: - AbortProg( "carDlgDoActions: bad action" ); + CHECKMSG( FALSE, ( "carDlgDoActions: bad action %d", (int)(actions[-1]) ) ); break; } } @@ -3435,16 +3675,17 @@ LOG( log_carDlgState, 2, ( "Action = %s\n", carDlgAction_s[*actions] ) ) static void CarDlgDoStateActions( - carDlgAction_e * actions ) + carDlgAction_e * actions ) { CarDlgDoActions( actions ); -LOG( log_carDlgState, 1, ( " ==> S_%s\n", carDlgState_s[currState] ) ) + LOG( log_carDlgState, 1, ( " ==> S_%s\n", carDlgState_s[currState] ) ) } static void CarDlgStateMachine( - carDlgTransistion_e transistion ) + carDlgTransistion_e transistion ) { -LOG( log_carDlgState, 1, ( "S_%s[T_%s]\n", carDlgState_s[currState], carDlgTransistion_s[transistion] ) ) + LOG( log_carDlgState, 1, ( "S_%s[T_%s]\n", carDlgState_s[currState], + carDlgTransistion_s[transistion] ) ) CarDlgDoStateActions( stateMachine[currState][transistion] ); } @@ -3473,9 +3714,9 @@ static BOOL_T CheckCarDlgItemIndex( long * index ) void CarDlgError( - wBool_t ok, - paramData_p p, - char * msg ) + wBool_t ok, + paramData_p p, + char * msg ) { p->bInvalid = !ok; ParamHilite( p->group->win, p->control, !ok ); @@ -3485,9 +3726,9 @@ void CarDlgError( static void CarDlgUpdate( - paramGroup_p pg, - int inx, - void * valueP ) + paramGroup_p pg, + int inx, + void * valueP ) { BOOL_T redraw = FALSE; roadnameMap_p roadnameMapP; @@ -3510,49 +3751,60 @@ static void CarDlgUpdate( ratio = (S_PROTO?1.0:GetScaleRatio(carDlgScaleInx)); -LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) + LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) switch ( inx ) { case -1: - if ( carDlgDim.truckCenter > 0 && carDlgDim.carLength > carDlgDim.truckCenter ) { - carDlgTruckOffsetL = (carDlgDim.carLength - carDlgDim.truckCenter)/2 - carDlgDim.truckCenterOffset; - carDlgTruckOffsetR = (carDlgDim.carLength - carDlgDim.truckCenter)/2 + carDlgDim.truckCenterOffset; - } - else { + if ( carDlgDim.truckCenter > 0 + && carDlgDim.carLength > carDlgDim.truckCenter ) { + carDlgTruckOffsetL = (carDlgDim.carLength - carDlgDim.truckCenter)/2 - + carDlgDim.truckCenterOffset; + carDlgTruckOffsetR = (carDlgDim.carLength - carDlgDim.truckCenter)/2 + + carDlgDim.truckCenterOffset; + } else { carDlgTruckOffsetL = 0; carDlgTruckOffsetR = 0; } - carDlgCarLengthClock = carDlgCoupledLengthClock = carDlgTruckCenterClock = carDlgCouplerLengthClock = carDlgClock = 0; + carDlgCarLengthClock = carDlgCoupledLengthClock = carDlgTruckCenterClock = + carDlgCouplerLengthClock = carDlgClock = 0; redraw = TRUE; break; case I_CD_MANUF_LIST: carDlgChanged++; - wListGetValues( (wList_p)pg->paramPtr[inx].control, carDlgManufStr, sizeof carDlgManufStr, NULL, NULL ); + wListGetValues( (wList_p)pg->paramPtr[inx].control, carDlgManufStr, + sizeof carDlgManufStr, NULL, NULL ); if ( carDlgManufInx < 0 || - wListGetItemContext( (wList_p)pg->paramPtr[inx].control, carDlgManufInx ) == NULL ) + wListGetItemContext( (wList_p)pg->paramPtr[inx].control, + carDlgManufInx ) == NULL ) { CarDlgStateMachine( T_ItemEnter ); + } #ifdef LATER else if ( strcasecmp( carDlgManufStr, "unknown" ) == 0 || - strcasecmp( carDlgManufStr, "custom" ) == 0 ) + strcasecmp( carDlgManufStr, "custom" ) == 0 ) { CarDlgStateMachine( T_ItemEnter ); + } #endif - else + else { CarDlgStateMachine( T_ItemSel ); + } /*ParamControlShow( &carDlgPG, I_CD_MANUF_LIST, TRUE );*/ break; case I_CD_PROTOKIND_LIST: carDlgChanged++; - carDlgTypeInx = (int)VP2L(wListGetItemContext( (wList_p)pg->paramPtr[inx].control, carDlgKindInx )); + carDlgTypeInx = (int)VP2L(wListGetItemContext( (wList_p) + pg->paramPtr[inx].control, carDlgKindInx )); if ( S_PART || (currState==S_ItemEnter) ) { CarDlgLoadProtoList( NULL, 0, FALSE ); } else { parentP = NULL; - if ( carDlgProtoInx >= 0 ) - parentP = (carPartParent_p)wListGetItemContext( (wList_p)pg->paramPtr[I_CD_PROTOTYPE_LIST].control, carDlgProtoInx ); + if ( carDlgProtoInx >= 0 ) { + parentP = (carPartParent_p)wListGetItemContext( (wList_p) + pg->paramPtr[I_CD_PROTOTYPE_LIST].control, carDlgProtoInx ); + } CarDlgLoadProtoList( carDlgManufStr, (parentP?parentP->scale:0), FALSE ); } CarDlgStateMachine( T_ProtoSel ); @@ -3560,13 +3812,15 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) case I_CD_PROTOTYPE_LIST: carDlgChanged++; - wListGetValues( (wList_p)pg->paramPtr[inx].control, carDlgProtoStr, sizeof carDlgProtoStr, NULL, NULL ); + wListGetValues( (wList_p)pg->paramPtr[inx].control, carDlgProtoStr, + sizeof carDlgProtoStr, NULL, NULL ); CarDlgStateMachine( T_ProtoSel ); break; case I_CD_PARTNO_LIST: carDlgChanged++; - wListGetValues( (wList_p)pg->paramPtr[inx].control, carDlgPartnoStr, sizeof carDlgPartnoStr, NULL, NULL ); + wListGetValues( (wList_p)pg->paramPtr[inx].control, carDlgPartnoStr, + sizeof carDlgPartnoStr, NULL, NULL ); if ( carDlgPartnoInx >= 0 ) { CarDlgStateMachine( T_PartnoSel ); } else { @@ -3582,10 +3836,12 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) ParamLoadControl( &carDlgPG, I_CD_DISPMODE ); break; } - for ( inx=B; inx<C; inx++ ) + for ( inx=B; inx<C; inx++ ) { ParamControlShow( &carDlgPG, inx, carDlgDispMode==1 ); - for ( inx=C; inx<D; inx++ ) + } + for ( inx=C; inx<D; inx++ ) { ParamControlShow( &carDlgPG, inx, carDlgDispMode==0 ); + } if ( carDlgDispMode == 0 && carDlgUpdateItemPtr != NULL ) { ParamControlShow( &carDlgPG, I_CD_QTY, FALSE ); ParamControlShow( &carDlgPG, I_CD_MLTNUM, FALSE ); @@ -3597,13 +3853,15 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) carDlgChanged++; roadnameMapP = NULL; if ( *(long*)valueP == 0 ) { - roadnameMapP = NULL; - carDlgRoadnameStr[0] = '\0'; + roadnameMapP = NULL; + carDlgRoadnameStr[0] = '\0'; } else if ( *(long*)valueP > 0 ) { - roadnameMapP = (roadnameMap_p)wListGetItemContext( (wList_p)pg->paramPtr[I_CD_ROADNAME_LIST].control, (wIndex_t)*(long*)valueP ); - strcpy( carDlgRoadnameStr, roadnameMapP->roadname ); + roadnameMapP = (roadnameMap_p)wListGetItemContext( (wList_p) + pg->paramPtr[I_CD_ROADNAME_LIST].control, (wIndex_t)*(long*)valueP ); + strcpy( carDlgRoadnameStr, roadnameMapP->roadname ); } else { - wListGetValues( (wList_p)pg->paramPtr[I_CD_ROADNAME_LIST].control, carDlgRoadnameStr, sizeof carDlgRoadnameStr, NULL, NULL ); + wListGetValues( (wList_p)pg->paramPtr[I_CD_ROADNAME_LIST].control, + carDlgRoadnameStr, sizeof carDlgRoadnameStr, NULL, NULL ); cmp_key.name = carDlgRoadnameStr; cmp_key.len = (int)strlen(carDlgRoadnameStr); roadnameMapP = LookupListElem( &roadnameMap_da, &cmp_key, Cmp_roadnameMap, 0 ); @@ -3619,23 +3877,26 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) case I_CD_CARLENGTH: carDlgChanged++; if ( carDlgDim.carLength == 0.0 ) { - carDlgCarLengthClock = 0; + carDlgCarLengthClock = 0; } else if ( carDlgDim.carLength < 100/ratio ) { return; - } else if ( carDlgCouplerLength != 0 && ( carDlgDim.coupledLength == 0 || carDlgCouplerLengthClock >= carDlgCoupledLengthClock ) ) { + } else if ( carDlgCouplerLength != 0 && ( carDlgDim.coupledLength == 0 + || carDlgCouplerLengthClock >= carDlgCoupledLengthClock ) ) { len = carDlgDim.carLength+carDlgCouplerLength*2.0; if ( len > 0 ) { carDlgDim.coupledLength = len; ParamLoadControl( &carDlgPG, I_CD_CPLDLEN ); } carDlgCarLengthClock = ++carDlgClock; - } else if ( carDlgDim.coupledLength != 0 && ( carDlgCouplerLength == 0 || carDlgCoupledLengthClock > carDlgCouplerLengthClock ) ) { + } else if ( carDlgDim.coupledLength != 0 && ( carDlgCouplerLength == 0 + || carDlgCoupledLengthClock > carDlgCouplerLengthClock ) ) { len = (carDlgDim.coupledLength-carDlgDim.carLength)/2.0; if ( len > 0 ) { carDlgCouplerLength = len; ParamLoadControl( &carDlgPG, I_CD_CPLRLEN ); if ( !S_PROTO ) { - sprintf( message, "%s-%s", carDlgPLs[I_CD_CPLRLEN].nameStr, GetScaleName(carDlgScaleInx) ); + sprintf( message, "%s-%s", carDlgPLs[I_CD_CPLRLEN].nameStr, + GetScaleName(carDlgScaleInx) ); wPrefSetFloat( carDlgPG.nameStr, message, carDlgCouplerLength ); } } @@ -3651,18 +3912,21 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) carDlgCoupledLengthClock = 0; } else if ( carDlgDim.coupledLength < 100/ratio ) { return; - } else if ( carDlgDim.carLength != 0 && ( carDlgCouplerLength == 0 || carDlgCarLengthClock > carDlgCouplerLengthClock ) ) { + } else if ( carDlgDim.carLength != 0 && ( carDlgCouplerLength == 0 + || carDlgCarLengthClock > carDlgCouplerLengthClock ) ) { len = (carDlgDim.coupledLength-carDlgDim.carLength)/2.0; if ( len > 0 ) { carDlgCouplerLength = len; ParamLoadControl( &carDlgPG, I_CD_CPLRLEN ); if ( !S_PROTO ) { - sprintf( message, "%s-%s", carDlgPLs[I_CD_CPLRLEN].nameStr, GetScaleName(carDlgScaleInx) ); + sprintf( message, "%s-%s", carDlgPLs[I_CD_CPLRLEN].nameStr, + GetScaleName(carDlgScaleInx) ); wPrefSetFloat( carDlgPG.nameStr, message, carDlgCouplerLength ); } } carDlgCoupledLengthClock = ++carDlgClock; - } else if ( carDlgCouplerLength != 0 && ( carDlgDim.carLength == 0 || carDlgCouplerLengthClock >= carDlgCarLengthClock ) ) { + } else if ( carDlgCouplerLength != 0 && ( carDlgDim.carLength == 0 + || carDlgCouplerLengthClock >= carDlgCarLengthClock ) ) { len = carDlgDim.coupledLength-carDlgCouplerLength*2.0; if ( len > 0 ) { carDlgDim.carLength = len; @@ -3682,14 +3946,16 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) break; } else if ( carDlgCouplerLength < 1/ratio ) { return; - } else if ( carDlgDim.carLength != 0 && ( carDlgDim.coupledLength == 0 || carDlgCarLengthClock >= carDlgCoupledLengthClock ) ) { + } else if ( carDlgDim.carLength != 0 && ( carDlgDim.coupledLength == 0 + || carDlgCarLengthClock >= carDlgCoupledLengthClock ) ) { len = carDlgDim.carLength+carDlgCouplerLength*2.0; if ( len > 0 ) { carDlgDim.coupledLength = len; ParamLoadControl( &carDlgPG, I_CD_CPLDLEN ); } carDlgCouplerLengthClock = ++carDlgClock; - } else if ( carDlgDim.coupledLength != 0 && ( carDlgDim.carLength == 0 || carDlgCoupledLengthClock > carDlgCarLengthClock ) ) { + } else if ( carDlgDim.coupledLength != 0 && ( carDlgDim.carLength == 0 + || carDlgCoupledLengthClock > carDlgCarLengthClock ) ) { len = carDlgDim.coupledLength-carDlgCouplerLength*2.0; if ( len > 0 ) { carDlgDim.carLength = len; @@ -3699,15 +3965,16 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) carDlgCouplerLengthClock = ++carDlgClock; } if ( !S_PROTO ) { - sprintf( message, "%s-%s", carDlgPLs[I_CD_CPLRLEN].nameStr, GetScaleName(carDlgScaleInx) ); - wPrefSetFloat( carDlgPG.nameStr, message, carDlgCouplerLength ); + sprintf( message, "%s-%s", carDlgPLs[I_CD_CPLRLEN].nameStr, + GetScaleName(carDlgScaleInx) ); + wPrefSetFloat( carDlgPG.nameStr, message, carDlgCouplerLength ); } redraw = TRUE; break; case I_CD_CARWIDTH: carDlgChanged++; - if ( carDlgDim.carLength < 30/ratio ) return; + if ( carDlgDim.carLength < 30/ratio ) { return; } redraw = TRUE; break; @@ -3727,16 +3994,19 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) if ( carDlgDim.truckCenterOffset == 0 ) { carDlgTruckOffsetL = carDlgDim.truckCenter/2; carDlgTruckOffsetR = carDlgTruckOffsetL; - } else if (carDlgDim.carLength - carDlgDim.truckCenter > 2*fabs(carDlgDim.truckCenterOffset)) { + } else if (carDlgDim.carLength - carDlgDim.truckCenter > 2*fabs( + carDlgDim.truckCenterOffset)) { carDlgTruckOffsetL = carDlgDim.truckCenter/2 - carDlgDim.truckCenterOffset; carDlgTruckOffsetR = carDlgDim.truckCenter/2 + carDlgDim.truckCenterOffset; } else { carDlgTruckOffsetL = 0; carDlgTruckOffsetR = 0; } - if ( 2*carDlgDim.truckCenterOffset > carDlgDim.carLength - carDlgDim.truckCenter) { + if ( 2*carDlgDim.truckCenterOffset > carDlgDim.carLength - + carDlgDim.truckCenter) { ok = FALSE; - CarDlgError( ok, &carDlgPLs[I_CD_TRKOFFSET], _("Truck Center Offset plus Truck Centers must be less than Car Length") ); + CarDlgError( ok, &carDlgPLs[I_CD_TRKOFFSET], + _("Truck Center Offset plus Truck Centers must be less than Car Length") ); } redraw = TRUE; break; @@ -3746,11 +4016,13 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) if ( carDlgDim.truckCenter == 0 ) { carDlgTruckOffsetL = 0; carDlgTruckOffsetR = 0; - } else if ( carDlgDim.truckCenter < 100/ratio /*&& carDlgDim.carLength == 0.0*/ ) { + } else if ( carDlgDim.truckCenter < + 100/ratio /*&& carDlgDim.carLength == 0.0*/ ) { carDlgTruckOffsetL = 0; carDlgTruckOffsetR = 0; return; - } else if ( carDlgDim.carLength - carDlgDim.truckCenter > 2*fabs(carDlgDim.truckCenterOffset) ) { + } else if ( carDlgDim.carLength - carDlgDim.truckCenter > 2*fabs( + carDlgDim.truckCenterOffset) ) { carDlgTruckOffsetL = carDlgDim.truckCenter/2-carDlgDim.truckCenterOffset; carDlgTruckOffsetR = carDlgDim.truckCenter/2+carDlgDim.truckCenterOffset; } else { @@ -3767,7 +4039,8 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) case I_CD_PURPRC: case I_CD_CURPRC: carDlgChanged++; - *(FLOAT_T*)(pg->paramPtr[inx].context) = strtod( (char*)pg->paramPtr[inx].valueP, &cp ); + *(FLOAT_T*)(pg->paramPtr[inx].context) = strtod( (char*) + pg->paramPtr[inx].valueP, &cp ); if ( cp==NULL || *cp!='\0' ) { *(FLOAT_T*)(pg->paramPtr[inx].context) = -1; ok = FALSE; @@ -3779,17 +4052,18 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) case I_CD_COND: carDlgChanged++; carDlgCondition = - (carDlgConditionInx==0)?0: - (carDlgConditionInx==1)?100: - (carDlgConditionInx==2)?80: - (carDlgConditionInx==3)?60: - (carDlgConditionInx==4)?40:20; + (carDlgConditionInx==0)?0: + (carDlgConditionInx==1)?100: + (carDlgConditionInx==2)?80: + (carDlgConditionInx==3)?60: + (carDlgConditionInx==4)?40:20; break; case I_CD_PURDAT: case I_CD_SRVDAT: carDlgChanged++; - for ( cp = (char*)pg->paramPtr[inx].valueP; *cp && isspace(*(unsigned char*)cp); cp++ ); + for ( cp = (char*)pg->paramPtr[inx].valueP; *cp + && isspace(*(unsigned char*)cp); cp++ ); if ( *cp ) { valL = strtol( cp, &cq, 10 ); if ( cq==NULL || *cq !='\0' ) { @@ -3824,10 +4098,11 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) valL = 0; } CarDlgError( ok, &pg->paramPtr[inx], cp ); - if (inx == I_CD_PURDAT) + if (inx == I_CD_PURDAT) { carDlgPurchDate = valL; - else + } else { carDlgServiceDate = valL; + } break; case I_CD_TYPE_LIST: @@ -3841,12 +4116,12 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) carDlgChanged++; WriteSelectedTracksToTempSegs(); carProtoSegCnt = tempSegs_da.cnt; - carProtoSegPtr = (trkSeg_t*)tempSegs_da.ptr; + carProtoSegPtr = &tempSegs(0); CloneFilledDraw( carProtoSegCnt, carProtoSegPtr, TRUE ); GetSegBounds( zero, 0.0, carProtoSegCnt, carProtoSegPtr, &orig, &size ); if ( size.x <= 0.0 || - size.y <= 0.0 || - size.x < size.y ) { + size.y <= 0.0 || + size.x < size.y ) { NoticeMessage( MSG_CARPROTO_BADSEGS, _("Ok"), NULL ); return; } @@ -3855,7 +4130,8 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) MoveSegs( carProtoSegCnt, carProtoSegPtr, orig ); size2.x = floor(size.x*curScaleRatio+0.5); size2.y = floor(size.y*curScaleRatio+0.5); - RescaleSegs( carProtoSegCnt, carProtoSegPtr, size2.x/size.x, size2.y/size.y, curScaleRatio ); + RescaleSegs( carProtoSegCnt, carProtoSegPtr, size2.x/size.x, size2.y/size.y, + curScaleRatio ); carDlgDim.carLength = size2.x; carDlgDim.carWidth = size2.y; carDlgDim.coupledLength = carDlgDim.carLength + 32; @@ -3893,7 +4169,8 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) if ( checkTruckCenter && carDlgDim.carLength > 0 ) { if ( carDlgTruckOffsetL > 0 || carDlgTruckOffsetR > 0 ) { - carDlgDim.truckCenter = carDlgTruckOffsetL + carDlgTruckOffsetR; + carDlgDim.truckCenter = carDlgDim.carLength - ( carDlgTruckOffsetL + + carDlgTruckOffsetR ); carDlgDim.truckCenterOffset = (carDlgTruckOffsetR - carDlgTruckOffsetL)/2; } else { carDlgDim.truckCenter = carDlgDim.carLength * 0.75; @@ -3903,11 +4180,12 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) ParamLoadControl( &carDlgPG, I_CD_TRKOFFSET ); } - if ( S_PART && carDlgManufStr[0] == '\0' ) + if ( S_PART && carDlgManufStr[0] == '\0' ) { ParamLoadMessage( &carDlgPG, I_CD_MSG, _("Select or Enter a Manufacturer") ); - else if ( S_ITEM && carDlgUpdateItemPtr==NULL && - ( valL = carDlgItemIndex , !CheckCarDlgItemIndex(&carDlgItemIndex) ) ) { - sprintf( message, _("Item Index %ld duplicated an existing item: updated to new value"), valL ); + } else if ( S_ITEM && carDlgUpdateItemPtr==NULL && + ( valL = carDlgItemIndex, !CheckCarDlgItemIndex(&carDlgItemIndex) ) ) { + sprintf( message, + _("Item Index %ld duplicated an existing item: updated to new value"), valL ); ParamLoadControl( &carDlgPG, I_CD_ITEMINDEX ); ParamLoadMessage( &carDlgPG, I_CD_MSG, message ); ok = TRUE; @@ -3916,8 +4194,9 @@ LOG( log_carDlgState, 3, ( "CarDlgUpdate( %d )\n", inx ) ) ok = TRUE; } - if ( redraw ) + if ( redraw ) { CarDlgRedraw( carDlgD.d, NULL, 0, 0 ); + } ParamDialogOkActive( pg, ok ); } @@ -3948,10 +4227,11 @@ static void CarDlgNewProto( void ) } carDlgUpdateProtoPtr = NULL; carDlgNewProtoPtr = NULL; - if ( S_ITEM ) + if ( S_ITEM ) { CarDlgDoStateActions( item2protoActions ); - else + } else { CarDlgDoStateActions( part2protoActions ); + } carDlgChanged = 0; } @@ -3962,8 +4242,9 @@ static void CarDlgClose( wWin_p win ) if ( carDlgChanged ) { if ( !inPlayback ) { - if ( NoticeMessage( MSG_CARDESC_CHANGED, _("Yes"), _("No") ) <= 0 ) + if ( NoticeMessage( MSG_CARDESC_CHANGED, _("Yes"), _("No") ) <= 0 ) { return; + } } else { PlaybackMessage( "Car Desc Changed\n" ); } @@ -3974,12 +4255,13 @@ static void CarDlgClose( wWin_p win ) currState = carDlgStk[carDlgStkPtr].state; carDlgChanged = carDlgStk[carDlgStkPtr].changed; if ( oldState == S_ProtoSel ) - if ( S_PART ) + if ( S_PART ) { CarDlgDoStateActions( proto2partActions ); - else + } else { CarDlgDoStateActions( proto2itemActions ); - else - CarDlgDoStateActions( part2itemActions ); + } else { + CarDlgDoStateActions( part2itemActions ); + } } else { wTextClear( (wText_p)carDlgPLs[I_CD_NOTES].control ); wHide( carDlgPG.win ); @@ -3996,27 +4278,27 @@ static void CarDlgOk( void * unused ) char * cp; long count; tabString_t tabs[7]; - char title[STR_LONG_SIZE]; + char title[STR_LONG_SIZE*2]; carItem_p itemP=NULL; carPart_p partP=NULL; carProto_p protoP; BOOL_T reloadRoadnameList = FALSE; -LOG( log_carDlgState, 3, ( "CarDlgOk()\n" ) ) + LOG( log_carDlgState, 3, ( "CarDlgOk()\n" ) ) ParamUpdate(&carDlgPG); /*ParamUpdate( &carDlgPG );*/ if ( carDlgDim.carLength <= 0.0 || - carDlgDim.carWidth <= 0.0 || - carDlgDim.truckCenter <= 0.0 || - carDlgDim.truckCenterOffset < 0.0 || - carDlgDim.coupledLength <= 0.0 ) { + carDlgDim.carWidth <= 0.0 || + carDlgDim.truckCenter <= 0.0 || + carDlgDim.truckCenterOffset < 0.0 || + carDlgDim.coupledLength <= 0.0 ) { NoticeMessage( MSG_CARDESC_VALUE_ZERO, _("Ok"), NULL ); return; } if ( carDlgDim.carLength <= carDlgDim.carWidth || - carDlgDim.truckCenter >= carDlgDim.carLength ) { + carDlgDim.truckCenter >= carDlgDim.carLength ) { NoticeMessage( MSG_CARDESC_BAD_DIM_VALUE, _("Ok"), NULL ); return; } @@ -4025,35 +4307,44 @@ LOG( log_carDlgState, 3, ( "CarDlgOk()\n" ) ) return; } - if ( S_ITEM && carDlgUpdateItemPtr==NULL && !CheckCarDlgItemIndex(&carDlgItemIndex) ) { + if ( S_ITEM && carDlgUpdateItemPtr==NULL + && !CheckCarDlgItemIndex(&carDlgItemIndex) ) { NoticeMessage( MSG_CARITEM_BAD_INDEX, _("Ok"), NULL ); ParamLoadControl( &carDlgPG, I_CD_ITEMINDEX ); return; } - if ( S_ITEM && (carDlgPurchDate<0 || carDlgServiceDate<0 || carDlgPurchPrice <0 || carDlgCurrPrice<0)) return; + if ( S_ITEM && (carDlgPurchDate<0 || carDlgServiceDate<0 || carDlgPurchPrice <0 + || carDlgCurrPrice<0)) { return; } - if ( S_PROTO && carDlgProtoStr[0] == '\0' ) return; + if ( S_PROTO && carDlgProtoStr[0] == '\0' ) { return; } - if ( S_PART && (carDlgManufStr[0] == '\0' || carDlgPartnoStr[0] == '\0')) return; + if ( S_PART && (carDlgManufStr[0] == '\0' || carDlgPartnoStr[0] == '\0')) { return; } - if ( S_ITEM && carDlgItemIndex <= 0 ) return; + if ( S_ITEM && carDlgItemIndex <= 0 ) { return; } - if ( (!S_PROTO) && carDlgCouplerMount != 0 ) + if ( (!S_PROTO) && carDlgCouplerMount != 0 ) { options |= CAR_DESC_COUPLER_MODE_BODY; - if ( carDlgIsLoco == 1 ) + } + if ( carDlgIsLoco == 1 ) { options |= CAR_DESC_IS_LOCO; + } if ( S_ITEM ) { len = wTextGetSize( (wText_p)carDlgPLs[I_CD_NOTES].control ); - sprintf( title, "%s\t%s\t%s\t%s\t%s\t%s\t%s", carDlgManufStr, carDlgProtoStr, carDlgDescStr, carDlgPartnoStr, carDlgRoadnameStr, carDlgRepmarkStr, carDlgNumberStr ); + sprintf( title, "%s\t%s\t%s\t%s\t%s\t%s\t%s", carDlgManufStr, carDlgProtoStr, + carDlgDescStr, carDlgPartnoStr, carDlgRoadnameStr, carDlgRepmarkStr, + carDlgNumberStr ); partP = NULL; if ( ( carDlgManufInx < 0 || carDlgPartnoInx < 0 ) && carDlgPartnoStr[0] ) { - partP = CarPartFind( carDlgManufStr, (int)strlen(carDlgManufStr), carDlgPartnoStr, (int)strlen(carDlgPartnoStr), carDlgScaleInx ); + partP = CarPartFind( carDlgManufStr, (int)strlen(carDlgManufStr), + carDlgPartnoStr, (int)strlen(carDlgPartnoStr), carDlgScaleInx ); if ( partP != NULL && - NoticeMessage( MSG_CARPART_DUPNAME, _("Yes"), _("No") ) <= 0 ) + NoticeMessage( MSG_CARPART_DUPNAME, _("Yes"), _("No") ) <= 0 ) { return; - partP = CarPartNew( NULL, PARAM_CUSTOM, carDlgScaleInx, title, options, typeListMap[carDlgTypeInx].value, &carDlgDim, carDlgBodyColor ); + } + partP = CarPartNew( NULL, PARAM_CUSTOM, carDlgScaleInx, title, options, + typeListMap[carDlgTypeInx].value, &carDlgDim, carDlgBodyColor ); if ( partP != NULL ) { if ( ( f = OpenCustom("a") ) ) { SetCLocale(); @@ -4068,11 +4359,11 @@ LOG( log_carDlgState, 3, ( "CarDlgOk()\n" ) ) } for ( count=0; count<carDlgQuantity; count++ ) { itemP = CarItemNew( carDlgUpdateItemPtr, - PARAM_CUSTOM, carDlgItemIndex, - carDlgScaleInx, title, options, typeListMap[carDlgTypeInx].value, - &carDlgDim, carDlgBodyColor, - carDlgPurchPrice, carDlgCurrPrice, carDlgCondition, - carDlgPurchDate, carDlgServiceDate ); + PARAM_CUSTOM, carDlgItemIndex, + carDlgScaleInx, title, options, typeListMap[carDlgTypeInx].value, + &carDlgDim, carDlgBodyColor, + carDlgPurchPrice, carDlgCurrPrice, carDlgCondition, + carDlgPurchDate, carDlgServiceDate ); if ( carDlgUpdateItemPtr==NULL ) { wPrefSetInteger( "misc", "last-car-item-index", carDlgItemIndex ); carDlgItemIndex++; @@ -4082,15 +4373,18 @@ LOG( log_carDlgState, 3, ( "CarDlgOk()\n" ) ) number = strtol( carDlgNumberStr, &cp, 10 ); if ( cp && *cp == 0 && number > 0 ) { sprintf( carDlgNumberStr, "%ld", number+1 ); - sprintf( title, "%s\t%s\t%s\t%s\t%s\t%s\t%s", carDlgManufStr, carDlgProtoStr, carDlgDescStr, carDlgPartnoStr, carDlgRoadnameStr, carDlgRepmarkStr, carDlgNumberStr ); + sprintf( title, "%s\t%s\t%s\t%s\t%s\t%s\t%s", carDlgManufStr, carDlgProtoStr, + carDlgDescStr, carDlgPartnoStr, carDlgRoadnameStr, carDlgRepmarkStr, + carDlgNumberStr ); } } } if ( len > 0 ) { - if ( itemP->data.notes ) + if ( itemP->data.notes ) { itemP->data.notes = MyRealloc( itemP->data.notes, (len+2) * sizeof(wchar_t) ); - else + } else { itemP->data.notes = MyMalloc( (len+2) * sizeof(wchar_t) ); + } // itemP->data.notes = (char*)MyMalloc( (len+2) * sizeof(wchar_t) ); wTextGetText( (wText_p)carDlgPLs[I_CD_NOTES].control, itemP->data.notes, len ); if ( itemP->data.notes[len-1] != '\n' ) { @@ -4104,10 +4398,11 @@ LOG( log_carDlgState, 3, ( "CarDlgOk()\n" ) ) itemP->data.notes = NULL; } } - if ( carDlgUpdateItemPtr==NULL ) + if ( carDlgUpdateItemPtr==NULL ) { CarInvListAdd( itemP ); - else + } else { CarInvListUpdate( itemP ); + } SetFileChanged(); reloadRoadnameList = TRUE; if ( carDlgUpdateItemPtr==NULL ) { @@ -4120,9 +4415,9 @@ LOG( log_carDlgState, 3, ( "CarDlgOk()\n" ) ) strcpy( message, _("Updated Car") ); } sprintf( message+strlen(message), "%s: %s %s %s %s %s %s", - (partP?_(" and Part"):""), - carDlgManufStr, carDlgPartnoStr, carDlgProtoStr, carDlgDescStr, - (carDlgRepmarkStr[ 0 ]?carDlgRepmarkStr:carDlgRoadnameStr), carDlgNumberStr ); + (partP?_(" and Part"):""), + carDlgManufStr, carDlgPartnoStr, carDlgProtoStr, carDlgDescStr, + (carDlgRepmarkStr[ 0 ]?carDlgRepmarkStr:carDlgRoadnameStr), carDlgNumberStr ); carDlgQuantity = 1; ParamLoadControl( &carDlgPG, I_CD_QTY ); @@ -4132,14 +4427,19 @@ LOG( log_carDlgState, 3, ( "CarDlgOk()\n" ) ) carDlgRepmarkStr[0] = '\0'; } if ( carDlgUpdatePartPtr==NULL ) { - partP = CarPartFind( carDlgManufStr, (int)strlen(carDlgManufStr), carDlgPartnoStr, (int)strlen(carDlgPartnoStr), carDlgScaleInx ); + partP = CarPartFind( carDlgManufStr, (int)strlen(carDlgManufStr), + carDlgPartnoStr, (int)strlen(carDlgPartnoStr), carDlgScaleInx ); if ( partP != NULL && - NoticeMessage( MSG_CARPART_DUPNAME, _("Yes"), _("No") ) <= 0 ) + NoticeMessage( MSG_CARPART_DUPNAME, _("Yes"), _("No") ) <= 0 ) { return; + } } - sprintf( message, "%s\t%s\t%s\t%s\t%s\t%s\t%s", carDlgManufStr, carDlgProtoStr, carDlgDescStr, carDlgPartnoStr, carDlgRoadnameStr, carDlgRepmarkStr, carDlgNumberStr ); - carDlgNewPartPtr = CarPartNew( carDlgUpdatePartPtr, PARAM_CUSTOM, carDlgScaleInx, message, options, typeListMap[carDlgTypeInx].value, - &carDlgDim, carDlgBodyColor ); + sprintf( message, "%s\t%s\t%s\t%s\t%s\t%s\t%s", carDlgManufStr, carDlgProtoStr, + carDlgDescStr, carDlgPartnoStr, carDlgRoadnameStr, carDlgRepmarkStr, + carDlgNumberStr ); + carDlgNewPartPtr = CarPartNew( carDlgUpdatePartPtr, PARAM_CUSTOM, + carDlgScaleInx, message, options, typeListMap[carDlgTypeInx].value, + &carDlgDim, carDlgBodyColor ); if ( carDlgNewPartPtr != NULL && ( f = OpenCustom("a") ) ) { SetCLocale(); CarPartWrite( f, carDlgNewPartPtr ); @@ -4147,16 +4447,22 @@ LOG( log_carDlgState, 3, ( "CarDlgOk()\n" ) ) SetUserLocale(); } reloadRoadnameList = TRUE; - sprintf( message, _("%s Part: %s %s %s %s %s %s"), carDlgUpdatePartPtr==NULL?_("Added new"):_("Updated"), carDlgManufStr, carDlgPartnoStr, carDlgProtoStr, carDlgDescStr, carDlgRepmarkStr[ 0 ]?carDlgRepmarkStr:carDlgRoadnameStr, carDlgNumberStr ); + sprintf( message, _("%s Part: %s %s %s %s %s %s"), + carDlgUpdatePartPtr==NULL?_("Added new"):_("Updated"), carDlgManufStr, + carDlgPartnoStr, carDlgProtoStr, carDlgDescStr, + carDlgRepmarkStr[ 0 ]?carDlgRepmarkStr:carDlgRoadnameStr, carDlgNumberStr ); } else if ( S_PROTO ) { if ( carDlgUpdateProtoPtr==NULL ) { protoP = CarProtoFind( carDlgProtoStr ); if ( protoP != NULL && - NoticeMessage( MSG_CARPROTO_DUPNAME, _("Yes"), _("No") ) <= 0 ) + NoticeMessage( MSG_CARPROTO_DUPNAME, _("Yes"), _("No") ) <= 0 ) { return; + } } - carDlgNewProtoPtr = CarProtoNew( carDlgUpdateProtoPtr, PARAM_CUSTOM, carDlgProtoStr, options, typeListMap[carDlgTypeInx].value, &carDlgDim, carDlgSegs_da.cnt, &carDlgSegs(0) ); + carDlgNewProtoPtr = CarProtoNew( carDlgUpdateProtoPtr, PARAM_CUSTOM, + carDlgProtoStr, options, typeListMap[carDlgTypeInx].value, &carDlgDim, + carDlgSegs_da.cnt, &carDlgSegs(0) ); if ( (f = OpenCustom("a") ) ) { SetCLocale(); CarProtoWrite( f, carDlgNewProtoPtr ); @@ -4164,8 +4470,8 @@ LOG( log_carDlgState, 3, ( "CarDlgOk()\n" ) ) SetUserLocale(); } sprintf( message, _("%s Prototype: %s%s."), - carDlgUpdateProtoPtr==NULL?_("Added new"):_("Updated"), carDlgProtoStr, - carDlgUpdateProtoPtr==NULL?_(". Enter new values or press Close"):"" ); + carDlgUpdateProtoPtr==NULL?_("Added new"):_("Updated"), carDlgProtoStr, + carDlgUpdateProtoPtr==NULL?_(". Enter new values or press Close"):"" ); } if ( reloadRoadnameList ) { @@ -4187,10 +4493,11 @@ LOG( log_carDlgState, 3, ( "CarDlgOk()\n" ) ) if ( carDlgUpdateItemPtr==NULL ) { if ( partP ) { TabStringExtract( title, 7, tabs ); - if ( CarDlgLoadLists( TRUE, tabs, GetLayoutCurScale()) ) + if ( CarDlgLoadLists( TRUE, tabs, GetLayoutCurScale()) ) { currState = S_ItemSel; - else + } else { currState = S_ItemEnter; + } ParamLoadControl( &carDlgPG, I_CD_MANUF_LIST ); ParamLoadControl( &carDlgPG, I_CD_PROTOKIND_LIST ); ParamLoadControl( &carDlgPG, I_CD_PROTOTYPE_LIST ); @@ -4208,10 +4515,11 @@ LOG( log_carDlgState, 3, ( "CarDlgOk()\n" ) ) } else if ( S_PART ) { if ( carDlgUpdatePartPtr==NULL ) { number = strtol( carDlgPartnoStr, &cp, 10 ); - if ( cp && *cp == 0 && number > 0 ) + if ( cp && *cp == 0 && number > 0 ) { sprintf( carDlgPartnoStr, "%ld", number+1 ); - else + } else { carDlgPartnoStr[0] = '\0'; + } carDlgNumberStr[0] = '\0'; ParamLoadControl( &carDlgPG, I_CD_PARTNO_STR ); ParamLoadControl( &carDlgPG, I_CD_NUMBER ); @@ -4230,11 +4538,11 @@ LOG( log_carDlgState, 3, ( "CarDlgOk()\n" ) ) static void CarDlgLayout( - paramData_t * pd, - int inx, - wWinPix_t currX, - wWinPix_t *xx, - wWinPix_t *yy ) + paramData_t * pd, + int inx, + wWinPix_t currX, + wWinPix_t *xx, + wWinPix_t *yy ) { static wWinPix_t col2pos = 0; wWinPix_t y0, y1; @@ -4252,8 +4560,9 @@ static void CarDlgLayout( break; case I_CD_CPLRLEN: case I_CD_CARWIDTH: - if ( col2pos == 0 ) + if ( col2pos == 0 ) { col2pos = wLabelWidth( _("Coupler Length") )+20; + } *xx = wControlBeside(carDlgPLs[inx-1].control) + col2pos; break; case I_CD_DESC_STR: @@ -4286,27 +4595,37 @@ static void DoCarPartDlg( carDlgAction_e *actions ) int inx; if ( carDlgPG.win == NULL ) { - ParamCreateDialog( &carDlgPG, MakeWindowTitle(_("New Car Part")), _("Add"), CarDlgOk, CarDlgClose, TRUE, CarDlgLayout, F_BLOCK|F_RESIZE|F_RECALLSIZE|PD_F_ALT_CANCELLABEL, CarDlgUpdate ); + ParamCreateDialog( &carDlgPG, MakeWindowTitle(_("New Car Part")), _("Add"), + CarDlgOk, CarDlgClose, TRUE, CarDlgLayout, + F_BLOCK|F_RESIZE|F_RECALLSIZE|PD_F_ALT_CANCELLABEL, CarDlgUpdate ); - if ( carDlgDim.carWidth==0 ) + if ( carDlgDim.carWidth==0 ) { carDlgDim.carWidth = 12.0*10.0/curScaleRatio; + } for ( pd=carDlgPG.paramPtr; pd<&carDlgPG.paramPtr[carDlgPG.paramCnt]; pd++ ) { - if ( pd->type == PD_FLOAT && pd->valueP ) { + if ( pd->type == PD_FLOAT && pd->valueP ) { sprintf( message, "%s-%s", pd->nameStr, curScaleName ); - wPrefGetFloat( carDlgPG.nameStr, message, (FLOAT_T*)pd->valueP, *(FLOAT_T*)pd->valueP ); + wPrefGetFloat( carDlgPG.nameStr, message, (FLOAT_T*)pd->valueP, + *(FLOAT_T*)pd->valueP ); } } roadnameMapChanged = TRUE; - for ( inx=0; inx<N_CONDLISTMAP; inx++ ) - wListAddValue( (wList_p)carDlgPLs[I_CD_COND].control, _(condListMap[inx].name), NULL, I2VP(condListMap[inx].value) ); + for ( inx=0; inx<N_CONDLISTMAP; inx++ ) { + wListAddValue( (wList_p)carDlgPLs[I_CD_COND].control, _(condListMap[inx].name), + NULL, I2VP(condListMap[inx].value) ); + } - for ( inx=0; inx<N_TYPELISTMAP; inx++ ) - wListAddValue( (wList_p)carDlgPLs[I_CD_TYPE_LIST].control, _(typeListMap[inx].name), NULL, I2VP(typeListMap[inx].value) ); + for ( inx=0; inx<N_TYPELISTMAP; inx++ ) { + wListAddValue( (wList_p)carDlgPLs[I_CD_TYPE_LIST].control, + _(typeListMap[inx].name), NULL, I2VP(typeListMap[inx].value) ); + } - for ( inx=0; inx<N_TYPELISTMAP; inx++ ) - wListAddValue( (wList_p)carDlgPLs[I_CD_PROTOKIND_LIST].control, _(typeListMap[inx].name), NULL, I2VP(typeListMap[inx].value) ); + for ( inx=0; inx<N_TYPELISTMAP; inx++ ) { + wListAddValue( (wList_p)carDlgPLs[I_CD_PROTOKIND_LIST].control, + _(typeListMap[inx].name), NULL, I2VP(typeListMap[inx].value) ); + } wTextSetReadonly( (wText_p)carDlgPLs[I_CD_NOTES].control, FALSE ); } @@ -4319,8 +4638,9 @@ static void DoCarPartDlg( carDlgAction_e *actions ) carDlgScaleInx = GetLayoutCurScale(); carDlgFlipToggle = FALSE; carDlgChanged = 0; - for ( paramData_p p=carDlgPLs; p < carDlgPLs + COUNT( carDlgPLs ); p++ ) + for ( paramData_p p=carDlgPLs; p < carDlgPLs + COUNT( carDlgPLs ); p++ ) { p->bInvalid = FALSE; + } CarDlgDoStateActions( actions ); @@ -4360,24 +4680,27 @@ static wIndex_t carInvSort[] = { 0, 1, 2, 3 }; static void CarInvDlgAdd( void ); static void CarInvDlgEdit( void ); -static void CarInvDlgDelete( void ); +static void CarInvDlgDeleteShelve( void ); static void CarInvDlgImportCsv( void ); static void CarInvDlgExportCsv( void ); static void CarInvDlgSaveText( void ); static void CarInvListLoad( void ); static wWinPix_t carInvColumnWidths[] = { - -40, 30, 100, -50, 50, 130, 120, 100, - -50, -50, 60, 55, 55, 40, 200 }; + -40, 30, 100, -50, 50, 130, 120, 100, + -50, -50, 60, 55, 55, 40, 200 + }; static const char * carInvColumnTitles[] = { N_("Index"), N_("Scale"), N_("Manufacturer"), N_("Part No"), N_("Type"), N_("Description"), N_("Roadname"), N_("Rep Marks"), N_("Purc Price"), N_("Curr Price"), N_("Condition"), N_("Purc Date"), N_("Srvc Date"), - N_("Locat'n"), N_("Notes") }; + N_("Locat'n"), N_("Notes") +}; static char * sortOrders[] = { N_("Index"), N_("Scale"), N_("Manufacturer"), N_("Part No"), N_("Type"), N_("Description"), N_("Roadname"), N_("RepMarks"), N_("Purch Price"), - N_("Curr Price"), N_("Condition"), N_("Purch Date"), N_("Service Date") }; + N_("Curr Price"), N_("Condition"), N_("Purch Date"), N_("Service Date") +}; #define S_INDEX (0) #define S_SCALE (1) #define S_MANUF (2) @@ -4406,27 +4729,31 @@ static paramData_t carInvPLs[] = { #define I_CI_ADD (S+2) { PD_BUTTON, CarInvDlgAdd, "add", 0, NULL, N_("Add"), 0, 0 }, #define I_CI_DELETE (S+3) - { PD_BUTTON, CarInvDlgDelete, "delete", PDO_DLGWIDE, NULL, N_("Delete") }, + { PD_BUTTON, CarInvDlgDeleteShelve, "delete", PDO_DLGWIDE, NULL, N_("Delete") }, #define I_CI_IMPORT_CSV (S+4) { PD_BUTTON, CarInvDlgImportCsv, "import", PDO_DLGWIDE, NULL, N_("Import") }, #define I_CI_EXPORT_CSV (S+5) { PD_BUTTON, CarInvDlgExportCsv, "export", 0, NULL, N_("Export") }, #define I_CI_PRINT (S+6) - { PD_BUTTON, CarInvDlgSaveText, "savetext", 0, NULL, N_("List") } }; + { PD_BUTTON, CarInvDlgSaveText, "savetext", 0, NULL, N_("List") } +}; static paramGroup_t carInvPG = { "carinv", 0, carInvPLs, COUNT( carInvPLs ) }; static carItem_p CarInvDlgFindCurrentItem( void ) { - wIndex_t selcnt = wListGetSelectedCount( (wList_p)carInvPLs[I_CI_LIST].control ); + wIndex_t selcnt = wListGetSelectedCount( (wList_p) + carInvPLs[I_CI_LIST].control ); wIndex_t inx, cnt; - if ( selcnt != 1 ) return NULL; + if ( selcnt != 1 ) { return NULL; } cnt = wListGetCount( (wList_p)carInvPLs[I_CI_LIST].control ); for ( inx=0; inx<cnt; inx++ ) - if ( wListGetItemSelected( (wList_p)carInvPLs[I_CI_LIST].control, inx ) ) + if ( wListGetItemSelected( (wList_p)carInvPLs[I_CI_LIST].control, inx ) ) { break; - if ( inx>=cnt ) return NULL; - return (carItem_p)wListGetItemContext( (wList_p)carInvPLs[I_CI_LIST].control, inx ); + } + if ( inx>=cnt ) { return NULL; } + return (carItem_p)wListGetItemContext( (wList_p)carInvPLs[I_CI_LIST].control, + inx ); } @@ -4435,11 +4762,12 @@ static void CarInvDlgFind( void * unused ) carItem_p item = CarInvDlgFindCurrentItem(); coOrd pos; ANGLE_T angle; - if ( item == NULL || item->car == NULL || IsTrackDeleted(item->car) ) return; + if ( item == NULL || item->car == NULL || IsTrackDeleted(item->car) ) { return; } CarGetPos( item->car, &pos, &angle ); CarSetVisible( item->car ); panCenter = pos; - LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) ); + LOG( log_pan, 2, ( "PanCenter:%d %0.3f %0.3f\n", __LINE__, panCenter.x, + panCenter.y ) ); PanHere( I2VP(0) ); // CarInvDlgFind } @@ -4458,55 +4786,96 @@ static void CarInvDlgAdd( void ) static void CarInvDlgEdit( void ) { carDlgUpdateItemPtr = CarInvDlgFindCurrentItem(); - if ( carDlgUpdateItemPtr == NULL ) + if ( carDlgUpdateItemPtr == NULL ) { return; + } DoCarPartDlg( itemUpdActions ); } +/** + * Move a CarItem from the layout to the Shelf + * + * \item car item to be moved + */ +EXPORT void CarItemShelve( + carItem_p item ) +{ + if ( item->car == NULL || IsTrackDeleted( item->car ) ) { return; } + DeleteTrack( item->car, FALSE ); + if (CarItemIsLoco(item)) { + LocoListChangeEntry(item->car, NULL); + } + CarItemUpdate(item); + HotBarCancel(); + InfoSubstituteControls(NULL, NULL); +} + -static void CarInvDlgDelete( void ) +static void CarInvDlgDeleteShelve( void ) { carItem_p item; wIndex_t inx, inx1, cnt, selcnt; + wBool_t bShowMsg = FALSE; + wBool_t bNeedReload = FALSE; selcnt = wListGetSelectedCount( (wList_p)carInvPLs[I_CI_LIST].control ); - if ( selcnt == 0 ) - return; - if ( NoticeMessage( MSG_CARINV_DELETE_CONFIRM, _("Yes"), _("No"), selcnt ) <= 0 ) + if ( selcnt == 0 ) { return; + } cnt = wListGetCount( (wList_p)carInvPLs[I_CI_LIST].control ); for ( inx=0; inx<cnt; inx++ ) { - if ( !wListGetItemSelected( (wList_p)carInvPLs[I_CI_LIST].control, inx ) ) + if ( !wListGetItemSelected( (wList_p)carInvPLs[I_CI_LIST].control, inx ) ) { continue; - item = (carItem_p)wListGetItemContext( (wList_p)carInvPLs[I_CI_LIST].control, inx ); - if ( item == NULL ) - continue; - if ( item->car && !IsTrackDeleted(item->car) ) + } + item = (carItem_p)wListGetItemContext( (wList_p)carInvPLs[I_CI_LIST].control, + inx ); + if ( item == NULL ) { continue; - wListDelete( (wList_p)carInvPLs[I_CI_LIST].control, inx ); - if ( item->title ) MyFree( item->title ); - if ( item->data.number ) MyFree( item->data.number ); - MyFree( item ); - for ( inx1=inx; inx1<carItemInfo_da.cnt-1; inx1++ ) - carItemInfo(inx1) = carItemInfo(inx1+1); - carItemInfo_da.cnt -= 1; - inx--; - cnt--; + } + if ( item->car && !IsTrackDeleted(item->car) ) { + // Shelve car from Layout + CarItemShelve( item ); + bNeedReload = TRUE; + } else { + // Delete car from Inventory + if ( ! bShowMsg ) { + if ( NoticeMessage( MSG_CARINV_DELETE_CONFIRM, + _("Yes"), _("No"), selcnt ) <= 0 ) { + return; + } + bShowMsg = TRUE; + } + wListDelete( (wList_p)carInvPLs[I_CI_LIST].control, inx ); + if ( item->title ) { MyFree( item->title ); } + if ( item->data.number ) { MyFree( item->data.number ); } + MyFree( item ); + for ( inx1=inx; inx1<carItemInfo_da.cnt-1; inx1++ ) { + carItemInfo(inx1) = carItemInfo(inx1+1); + } + carItemInfo_da.cnt -= 1; + inx--; + cnt--; + } + } + if ( bNeedReload ) { + CarInvListLoad(); + MainRedraw(); // Shelve Car from layout } SetFileChanged(); carInvInx = -1; ParamLoadControl( &carInvPG, I_CI_LIST ); ParamControlActive( &carInvPG, I_CI_EDIT, FALSE ); ParamControlActive( &carInvPG, I_CI_DELETE, FALSE ); + wButtonSetLabel( (wButton_p)(carInvPLs[I_CI_DELETE].control), "" ); ParamControlActive( &carInvPG, I_CI_EXPORT_CSV, carItemInfo_da.cnt > 0 ); ParamDialogOkActive( &carInvPG, FALSE ); } static int CarInvSaveText( - int files, - char ** fileName, - void * data ) + int files, + char ** fileName, + void * data ) { FILE * f; carItem_p item; @@ -4516,13 +4885,14 @@ static int CarInvSaveText( char * cp0, * cp1; int len; - assert( fileName != NULL ); - assert( files == 1 ); + CHECK( fileName != NULL ); + CHECK( files == 1 ); SetCurrentPath( CARSPATHKEY, fileName[0] ); f = fopen( fileName[0], "w" ); if ( f == NULL ) { - NoticeMessage( MSG_OPEN_FAIL, _("Continue"), NULL, _("Car Inventory"), fileName[0], strerror(errno) ); + NoticeMessage( MSG_OPEN_FAIL, _("Continue"), NULL, _("Car Inventory"), + fileName[0], strerror(errno) ); return FALSE; } @@ -4532,35 +4902,40 @@ static int CarInvSaveText( TabStringExtract( item->title, 7, tabs ); sprintf( message, "%ld", item->index ); width = (int)strlen( message ); - if ( width > widths[0] ) widths[0] = width; - width = (int)strlen(GetScaleName(item->scaleInx)) + 1 + tabs[T_MANUF].len + 1 + tabs[T_PART].len; - if ( width > widths[1] ) widths[1] = width; - if ( tabs[T_PROTO].len > widths[2] ) widths[2] = tabs[T_PROTO].len; + if ( width > widths[0] ) { widths[0] = width; } + width = (int)strlen(GetScaleName(item->scaleInx)) + 1 + tabs[T_MANUF].len + 1 + + tabs[T_PART].len; + if ( width > widths[1] ) { widths[1] = width; } + if ( tabs[T_PROTO].len > widths[2] ) { widths[2] = tabs[T_PROTO].len; } width = tabs[T_REPMARK].len + tabs[T_NUMBER].len; - if ( tabs[T_REPMARK].len > 0 && tabs[T_NUMBER].len > 0 ) + if ( tabs[T_REPMARK].len > 0 && tabs[T_NUMBER].len > 0 ) { width += 1; - if ( width > widths[3] ) widths[3] = width; - if ( item->data.purchDate > 0 ) widths[4] = 8; + } + if ( width > widths[3] ) { widths[3] = width; } + if ( item->data.purchDate > 0 ) { widths[4] = 8; } if ( item->data.purchPrice > 0 ) { sprintf( message, "%0.2f", item->data.purchPrice ); width = (int)strlen(message); - if ( width > widths[5] ) widths[5] = width; + if ( width > widths[5] ) { widths[5] = width; } } - if ( item->data.condition != 0 ) + if ( item->data.condition != 0 ) { widths[6] = 5; + } if ( item->data.currPrice > 0 ) { sprintf( message, "%0.2f", item->data.currPrice ); width = (int)strlen(message); - if ( width > widths[7] ) widths[7] = width; + if ( width > widths[7] ) { widths[7] = width; } } - if ( item->data.serviceDate > 0 ) widths[8] = 8; + if ( item->data.serviceDate > 0 ) { widths[8] = 8; } } - fprintf( f, "%-*.*s %-*.*s %-*.*s %-*.*s", widths[0], widths[0], "#", widths[1], widths[1], "Part", widths[2], widths[2], "Description", widths[3], widths[3], "Rep Mark" ); - if ( widths[4] ) fprintf( f, " %-*.*s", widths[4], widths[4], "PurDate" ); - if ( widths[5] ) fprintf( f, " %-*.*s", widths[5], widths[5], "PurPrice" ); - if ( widths[6] ) fprintf( f, " %-*.*s", widths[6], widths[6], "Cond" ); - if ( widths[7] ) fprintf( f, " %-*.*s", widths[7], widths[7], "CurPrice" ); - if ( widths[8] ) fprintf( f, " %-*.*s", widths[8], widths[8], "SrvDate" ); + fprintf( f, "%-*.*s %-*.*s %-*.*s %-*.*s", widths[0], widths[0], "#", widths[1], + widths[1], "Part", widths[2], widths[2], "Description", widths[3], widths[3], + "Rep Mark" ); + if ( widths[4] ) { fprintf( f, " %-*.*s", widths[4], widths[4], "PurDate" ); } + if ( widths[5] ) { fprintf( f, " %-*.*s", widths[5], widths[5], "PurPrice" ); } + if ( widths[6] ) { fprintf( f, " %-*.*s", widths[6], widths[6], "Cond" ); } + if ( widths[7] ) { fprintf( f, " %-*.*s", widths[7], widths[7], "CurPrice" ); } + if ( widths[8] ) { fprintf( f, " %-*.*s", widths[8], widths[8], "SrvDate" ); } fprintf( f, "\n" ); for ( inx=0; inx<carItemInfo_da.cnt; inx++ ) { @@ -4569,11 +4944,14 @@ static int CarInvSaveText( sprintf( message, "%ld", item->index ); fprintf( f, "%.*s", widths[0], message ); width = tabs[T_MANUF].len + 1 + tabs[T_PART].len; - sprintf( message, "%s %.*s %.*s", GetScaleName(item->scaleInx), tabs[T_MANUF].len, tabs[T_MANUF].ptr, tabs[T_PART].len, tabs[T_PART].ptr ); + sprintf( message, "%s %.*s %.*s", GetScaleName(item->scaleInx), + tabs[T_MANUF].len, tabs[T_MANUF].ptr, tabs[T_PART].len, tabs[T_PART].ptr ); fprintf( f, " %-*s", widths[1], message ); fprintf( f, " %-*.*s", widths[2], tabs[T_PROTO].len, tabs[T_PROTO].ptr ); width = tabs[T_REPMARK].len + tabs[T_NUMBER].len; - sprintf( message, "%.*s%s%.*s", tabs[T_REPMARK].len, tabs[T_REPMARK].ptr, (tabs[T_REPMARK].len > 0 && tabs[T_NUMBER].len > 0)?" ":"", tabs[T_NUMBER].len, tabs[T_NUMBER].ptr ); + sprintf( message, "%.*s%s%.*s", tabs[T_REPMARK].len, tabs[T_REPMARK].ptr, + (tabs[T_REPMARK].len > 0 + && tabs[T_NUMBER].len > 0)?" ":"", tabs[T_NUMBER].len, tabs[T_NUMBER].ptr ); fprintf( f, " %-*s", widths[3], message ); if ( widths[4] > 0 ) { if ( item->data.purchDate > 0 ) { @@ -4593,7 +4971,8 @@ static int CarInvSaveText( } if ( widths[6] > 0 ) { if ( item->data.condition != 0 ) { - fprintf( f, " %-*.*s", widths[6], widths[6], condListMap[MapCondition(item->data.condition)].name ); + fprintf( f, " %-*.*s", widths[6], widths[6], + condListMap[MapCondition(item->data.condition)].name ); } else { fprintf( f, " %*s", widths[6], " " ); } @@ -4623,12 +5002,14 @@ static int CarInvSaveText( len = (int)(cp1-cp0); } else { len = (int)strlen( cp0 ); - if ( len == 0 ) + if ( len == 0 ) { break; + } } fprintf( f, "%*.*s %*.*s\n", widths[0], widths[0], " ", len, len, cp0 ); - if ( cp1 == NULL ) + if ( cp1 == NULL ) { break; + } cp0 = cp1+1; } } @@ -4643,16 +5024,17 @@ static void CarInvDlgSaveText( void ) { if ( carInvSaveText_fs == NULL ) carInvSaveText_fs = wFilSelCreate( mainW, FS_SAVE, 0, _("List Cars"), - "Text (*.txt)|*.txt", CarInvSaveText, NULL ); + "Text (*.txt)|*.txt", CarInvSaveText, NULL ); wFilSelect( carInvSaveText_fs, GetCurrentPath(CARSPATHKEY)); } static char *carCsvColumnTitles[] = { - "Index", "Scale", "Manufacturer", "Type", "Partno", "Prototype", - "Description", "Roadname", "Repmark", "Number", "Options", "CarLength", - "CarWidth", "CoupledLength", "TruckOffset", "TruckCenter", "Color", "PurchPrice", - "CurrPrice", "Condition", "PurchDate", "ServiceDate", "Notes" }; + "Index", "Scale", "Manufacturer", "Type", "Partno", "Prototype", + "Description", "Roadname", "Repmark", "Number", "Options", "CarLength", + "CarWidth", "CoupledLength", "TruckOffset", "TruckCenter", "Color", "PurchPrice", + "CurrPrice", "Condition", "PurchDate", "ServiceDate", "Notes" +}; #define M_INDEX (0) #define M_SCALE (1) #define M_MANUF (2) @@ -4680,10 +5062,10 @@ static char *carCsvColumnTitles[] = { static int ParseCsvLine( - char * line, - int max_elem, - tabString_t * tabs, - int * map ) + char * line, + int max_elem, + tabString_t * tabs, + int * map ) { int elem = 0; char * cp, * cq, * ptr; @@ -4698,7 +5080,7 @@ static int ParseCsvLine( } elem = 0; while ( *cp && elem < max_elem ) { - while ( *cp == ' ' ) cp++; + while ( *cp == ' ' ) { cp++; } if ( *cp == ',' ) { ptr = ""; len = 0; @@ -4714,7 +5096,7 @@ static int ParseCsvLine( *cq++ = *cp++; } cp++; - if ( *cp!='"' ) break; + if ( *cp!='"' ) { break; } *cq++ = *cp++; } if ( *cp && *cp != ',' ) { @@ -4728,10 +5110,10 @@ static int ParseCsvLine( len = (int)(cp-ptr); } if ( map[elem] >= 0 ) { - tabs[map[elem]].ptr = ptr; - tabs[map[elem]].len = len; + tabs[map[elem]].ptr = ptr; + tabs[map[elem]].len = len; } - if ( *cp ) cp++; + if ( *cp ) { cp++; } elem++; } return elem; @@ -4739,9 +5121,9 @@ static int ParseCsvLine( static int CarInvImportCsv( - int files, - char **fileName, - void * data ) + int files, + char **fileName, + void * data ) { FILE * f; carItem_p item; @@ -4759,13 +5141,14 @@ static int CarInvImportCsv( carPart_p partP; int requiredCols; - assert( fileName != NULL ); - assert( files == 1 ); + CHECK( fileName != NULL ); + CHECK( files == 1 ); SetCurrentPath( CARSPATHKEY, fileName[0] ); f = fopen( fileName[0], "r" ); if ( f == NULL ) { - NoticeMessage( MSG_OPEN_FAIL, _("Continue"), NULL, _("Import Cars"), fileName[0], strerror(errno) ); + NoticeMessage( MSG_OPEN_FAIL, _("Continue"), NULL, _("Import Cars"), + fileName[0], strerror(errno) ); return FALSE; } @@ -4777,28 +5160,30 @@ static int CarInvImportCsv( SetUserLocale(); return FALSE; } - for ( j=0; j<40; j++ ) map[j] = j; + for ( j=0; j<40; j++ ) { map[j] = j; } numCol = ParseCsvLine( message, 40, tabs, map ); if ( numCol <= 0 ) { fclose( f ); SetUserLocale(); return FALSE; } - for ( j=0; j<40; j++ ) map[j] = -1; + for ( j=0; j<40; j++ ) { map[j] = -1; } requiredCols = 0; for ( i=0; i<numCol; i++ ) { for ( j=0; j<COUNT( carCsvColumnTitles ); j++ ) { if ( TabStringCmp( carCsvColumnTitles[j], &tabs[i] ) == 0 ) { if ( map[i] >= 0 ) { - NoticeMessage( MSG_CARIMP_DUP_COLUMNS, _("Continue"), NULL, carCsvColumnTitles[j] ); + NoticeMessage( MSG_CARIMP_DUP_COLUMNS, _("Continue"), NULL, + carCsvColumnTitles[j] ); fclose( f ); SetUserLocale(); return FALSE; } map[i] = j; /*j = COUNT( carCsvColumnTitles );*/ - if ( j == M_SCALE || j == M_PROTO || j == M_MANUF || j == M_PARTNO ) + if ( j == M_SCALE || j == M_PROTO || j == M_MANUF || j == M_PARTNO ) { requiredCols++; + } } } if ( map[i] == -1 ) { @@ -4815,7 +5200,7 @@ static int CarInvImportCsv( } while ( fgets( message, sizeof message, f ) != NULL ) { cnt = ParseCsvLine( message, 40, tabs, map ); - if ( cnt > numCol ) cnt = numCol; + if ( cnt > numCol ) { cnt = numCol; } tabs[M_SCALE].ptr[tabs[M_SCALE].len] = '\0'; scale = LookupScale( tabs[M_SCALE].ptr ); tabs[M_SCALE].ptr[tabs[M_SCALE].len] = ','; @@ -4835,9 +5220,10 @@ static int CarInvImportCsv( } #ifdef OBSOLETE if ( TabStringCmp( "Unknown", &tabs[M_MANUF] ) != 0 && - TabStringCmp( "Custom", &tabs[M_MANUF] ) != 0 ) { + TabStringCmp( "Custom", &tabs[M_MANUF] ) != 0 ) { if ( tabs[M_PARTNO].len == 0 ) { - rc = NoticeMessage( MSG_CARIMP_MISSING_PARTNO, _("Continue"), _("Stop"), tabs[M_MANUF].ptr ); + rc = NoticeMessage( MSG_CARIMP_MISSING_PARTNO, _("Continue"), _("Stop"), + tabs[M_MANUF].ptr ); if ( rc <= 0 ) { fclose( f ); SetUserLocale(); @@ -4853,8 +5239,10 @@ static int CarInvImportCsv( dim.truckCenter = TabGetFloat( &tabs[M_TRKCENTER] ); dim.truckCenterOffset = TabGetFloat( &tabs[M_TRKOFFSET] ); partP = NULL; - if ( tabs[M_MANUF].len > 0 && tabs[M_PARTNO].len > 0 ) - partP = CarPartFind( tabs[M_MANUF].ptr, tabs[M_MANUF].len, tabs[M_PARTNO].ptr, tabs[M_PARTNO].len, scale ); + if ( tabs[M_MANUF].len > 0 && tabs[M_PARTNO].len > 0 ) { + partP = CarPartFind( tabs[M_MANUF].ptr, tabs[M_MANUF].len, tabs[M_PARTNO].ptr, + tabs[M_PARTNO].len, scale ); + } if ( partP ) { TabStringExtract( partP->title, 7, partTabs ); if ( tabs[M_PROTO].len == 0 && partTabs[T_PROTO].len > 0 ) { tabs[M_PROTO].ptr = partTabs[T_PROTO].ptr; tabs[M_PROTO].len = partTabs[T_PROTO].len; } @@ -4862,13 +5250,13 @@ static int CarInvImportCsv( if ( tabs[M_ROADNAME].len == 0 && partTabs[T_ROADNAME].len > 0 ) { tabs[M_ROADNAME].ptr = partTabs[T_ROADNAME].ptr; tabs[M_ROADNAME].len = partTabs[T_ROADNAME].len; } if ( tabs[M_REPMARK].len == 0 && partTabs[T_REPMARK].len > 0 ) { tabs[M_REPMARK].ptr = partTabs[T_REPMARK].ptr; tabs[M_REPMARK].len = partTabs[T_REPMARK].len; } if ( tabs[M_NUMBER].len == 0 && partTabs[T_NUMBER].len > 0 ) { tabs[M_NUMBER].ptr = partTabs[T_NUMBER].ptr; tabs[M_NUMBER].len = partTabs[T_NUMBER].len; } - if ( dim.carLength <= 0 ) dim.carLength = partP->dim.carLength; - if ( dim.carWidth <= 0 ) dim.carWidth = partP->dim.carWidth; - if ( dim.coupledLength <= 0 ) dim.coupledLength = partP->dim.coupledLength; - if ( dim.truckCenter <= 0 ) dim.truckCenter = partP->dim.truckCenter; - if ( dim.truckCenterOffset < 0 ) dim.truckCenterOffset = partP->dim.truckCenterOffset; + if ( dim.carLength <= 0 ) { dim.carLength = partP->dim.carLength; } + if ( dim.carWidth <= 0 ) { dim.carWidth = partP->dim.carWidth; } + if ( dim.coupledLength <= 0 ) { dim.coupledLength = partP->dim.coupledLength; } + if ( dim.truckCenter <= 0 ) { dim.truckCenter = partP->dim.truckCenter; } + if ( dim.truckCenterOffset < 0 ) { dim.truckCenterOffset = partP->dim.truckCenterOffset; } } - if (dim.truckCenterOffset <0) dim.truckCenterOffset = 0; + if (dim.truckCenterOffset <0) { dim.truckCenterOffset = 0; } cp = TabStringCpy( title, &tabs[M_MANUF] ); *cp++ = '\t'; cp = TabStringCpy( cp, &tabs[M_PROTO] ); @@ -4891,7 +5279,8 @@ static int CarInvImportCsv( condition = TabGetLong( &tabs[M_CONDITION] ); purchDate = TabGetLong( &tabs[M_PURCHDATE] ); srvcDate = TabGetLong( &tabs[M_SRVDATE] ); - if ( dim.carLength <= 0 || dim.carWidth <= 0 || dim.coupledLength <= 0 || dim.truckCenter <= 0 ) { + if ( dim.carLength <= 0 || dim.carWidth <= 0 || dim.coupledLength <= 0 + || dim.truckCenter <= 0 ) { rc = NoticeMessage( MSG_CARIMP_MISSING_DIMS, _("Yes"), _("No"), message ); if ( rc <= 0 ) { fclose( f ); @@ -4901,8 +5290,8 @@ static int CarInvImportCsv( continue; } item = CarItemNew( NULL, PARAM_CUSTOM, index, scale, title, options, type, - &dim, wDrawFindColor(color), - purchPrice, currPrice, condition, purchDate, srvcDate ); + &dim, wDrawFindColor(color), + purchPrice, currPrice, condition, purchDate, srvcDate ); if ( tabs[M_NOTES].len > 0 ) { item->data.notes = cp = MyMalloc( (tabs[M_NOTES].len+2) ); for ( cq=tabs[M_NOTES].ptr,len=tabs[M_NOTES].len; *cq&&len; ) { @@ -4931,24 +5320,25 @@ static void CarInvDlgImportCsv( void ) { if ( carInvImportCsv_fs == NULL ) carInvImportCsv_fs = wFilSelCreate( mainW, FS_LOAD, 0, _("Import Cars"), - _("Comma-Separated-Values (*.csv)|*.csv"), CarInvImportCsv, NULL ); + _("Comma-Separated-Values (*.csv)|*.csv"), CarInvImportCsv, NULL ); wFilSelect( carInvImportCsv_fs, GetCurrentPath(CARSPATHKEY)); } static void CsvFormatString( - FILE * f, - char * str, - int len, - char * sep ) + FILE * f, + char * str, + int len, + char * sep ) { - while ( str && len>0 && str[len-1]=='\n' ) len--; + while ( str && len>0 && str[len-1]=='\n' ) { len--; } if ( *str && len ) { fputc( '"', f ); for ( ; *str && len; str++,len-- ) { if ( !iscntrl((unsigned char) *str ) ) { - if ( *str == '"' ) + if ( *str == '"' ) { fputc( '"', f ); + } fputc( *str, f ); } else if ( *str == '\n' && str[1] && len > 1 ) { fprintf( f, "<NL>" ); @@ -4961,32 +5351,34 @@ static void CsvFormatString( static void CsvFormatLong( - FILE * f, - long val, - char * sep ) + FILE * f, + long val, + char * sep ) { - if ( val != 0 ) + if ( val != 0 ) { fprintf( f, "%ld", val ); + } fprintf( f, "%s", sep ); } static void CsvFormatFloat( - FILE * f, - FLOAT_T val, - int digits, - char * sep ) + FILE * f, + FLOAT_T val, + int digits, + char * sep ) { - if ( val != 0.0 ) + if ( val != 0.0 ) { fprintf( f, "%0.*f", digits, val ); + } fprintf( f, "%s", sep ); } static int CarInvExportCsv( - int files, - char ** fileName, - void * data ) + int files, + char ** fileName, + void * data ) { FILE * f; carItem_p item; @@ -4994,20 +5386,23 @@ static int CarInvExportCsv( tabString_t tabs[7]; char * sp; - assert( fileName != NULL ); - assert( files == 1 ); + CHECK( fileName != NULL ); + CHECK( files == 1 ); SetCurrentPath( CARSPATHKEY, fileName[0] ); f = fopen( fileName[0], "w" ); if ( f == NULL ) { - NoticeMessage( MSG_OPEN_FAIL, _("Continue"), NULL, _("Export Cars"), fileName[0], strerror(errno) ); + NoticeMessage( MSG_OPEN_FAIL, _("Continue"), NULL, _("Export Cars"), + fileName[0], strerror(errno) ); return FALSE; } SetCLocale(); for ( inx=0; inx<COUNT( carCsvColumnTitles ); inx++ ) { - CsvFormatString( f, carCsvColumnTitles[inx], (int)strlen(carCsvColumnTitles[inx]), inx<(COUNT( carCsvColumnTitles ))-1?",":"\n" ); + CsvFormatString( f, carCsvColumnTitles[inx], + (int)strlen(carCsvColumnTitles[inx]), + inx<(COUNT( carCsvColumnTitles ))-1?",":"\n" ); } for ( inx=0; inx<carItemInfo_da.cnt; inx++ ) { item = carItemInfo( inx ); @@ -5035,10 +5430,11 @@ static int CarInvExportCsv( CsvFormatLong( f, item->data.condition, "," ); CsvFormatLong( f, item->data.purchDate, "," ); CsvFormatLong( f, item->data.serviceDate, "," ); - if ( item->data.notes ) + if ( item->data.notes ) { CsvFormatString( f, item->data.notes, (int)strlen(item->data.notes), "\n" ); - else + } else { CsvFormatString( f, "", (int)strlen(""), "\n" ); + } } fclose( f ); SetUserLocale(); @@ -5049,20 +5445,21 @@ static int CarInvExportCsv( static struct wFilSel_t * carInvExportCsv_fs; static void CarInvDlgExportCsv( void ) { - if ( carItemInfo_da.cnt <= 0 ) + if ( carItemInfo_da.cnt <= 0 ) { return; + } if ( carInvExportCsv_fs == NULL ) carInvExportCsv_fs = wFilSelCreate( mainW, FS_SAVE, 0, _("Export Cars"), - _("Comma-Separated-Values (*.csv)|*.csv"), CarInvExportCsv, NULL ); + _("Comma-Separated-Values (*.csv)|*.csv"), CarInvExportCsv, NULL ); wFilSelect( carInvExportCsv_fs, GetCurrentPath(CARSPATHKEY)); } static void CarInvLoadItem( - carItem_p item ) + carItem_p item ) { -/* "Index", "Scale", "Manufacturer", "Type", "Part No", "Description", "Roadname", "RepMarks", - "Purch Price", "Curr Price", "Condition", "Purch Date", "Service Date", "Location", "Notes" */ + /* "Index", "Scale", "Manufacturer", "Type", "Part No", "Description", "Roadname", "RepMarks", + "Purch Price", "Curr Price", "Condition", "Purch Date", "Service Date", "Location", "Notes" */ char *condition; char *location; char *manuf; @@ -5078,42 +5475,51 @@ static void CarInvLoadItem( notes[0] = '\0'; } condition = - (item->data.condition < 10) ? N_("N/A"): - (item->data.condition < 30) ? N_("Poor"): - (item->data.condition < 50) ? N_("Fair"): - (item->data.condition < 70) ? N_("Good"): - (item->data.condition < 90) ? N_("Excellent"): - N_("Mint"); - - if ( item->car && !IsTrackDeleted(item->car) ) - location = N_("Layout"); - else + (item->data.condition < 10) ? N_("N/A"): + (item->data.condition < 30) ? N_("Poor"): + (item->data.condition < 50) ? N_("Fair"): + (item->data.condition < 70) ? N_("Good"): + (item->data.condition < 90) ? N_("Excellent"): + N_("Mint"); + + char carLocation[30]; + if ( item->car && !IsTrackDeleted(item->car) ) { + coOrd hi, lo; + GetBoundingBox( item->car, &hi, &lo ); + snprintf( carLocation, sizeof carLocation, "%0.0fx%0.0f", + PutDim((lo.x+hi.x)/2.0), + PutDim((lo.y+hi.y)/2.0) ); + location = carLocation; + } else { location = N_("Shelf"); + } manuf = TabStringDup(&tabs[T_MANUF]); road = TabStringDup(&tabs[T_ROADNAME]); - sprintf( message, "%ld\t%s\t%s\t%.*s\t%s\t%.*s%s%.*s\t%s\t%.*s%s%.*s\t%0.2f\t%0.2f\t%s\t%ld\t%ld\t%s\t%s", - item->index, GetScaleName(item->scaleInx), - _(manuf), - tabs[T_PART].len, tabs[T_PART].ptr, - _(typeListMap[CarProtoFindTypeCode(item->type)].name), - tabs[T_PROTO].len, tabs[T_PROTO].ptr, - (tabs[T_PROTO].len>0 && tabs[T_DESC].len)?"/":"", - tabs[T_DESC].len, tabs[T_DESC].ptr, - _(road), - tabs[T_REPMARK].len, tabs[T_REPMARK].ptr, - (tabs[T_REPMARK].len>0&&tabs[T_NUMBER].len>0)?" ":"", - tabs[T_NUMBER].len, tabs[T_NUMBER].ptr, - item->data.purchPrice, item->data.currPrice, _(condition), item->data.purchDate, item->data.serviceDate, _(location), notes ); - if (manuf) MyFree(manuf); - if (road) MyFree(road); + sprintf( message, + "%ld\t%s\t%s\t%.*s\t%s\t%.*s%s%.*s\t%s\t%.*s%s%.*s\t%0.2f\t%0.2f\t%s\t%ld\t%ld\t%s\t%s", + item->index, GetScaleName(item->scaleInx), + _(manuf), + tabs[T_PART].len, tabs[T_PART].ptr, + _(typeListMap[CarProtoFindTypeCode(item->type)].name), + tabs[T_PROTO].len, tabs[T_PROTO].ptr, + (tabs[T_PROTO].len>0 && tabs[T_DESC].len)?"/":"", + tabs[T_DESC].len, tabs[T_DESC].ptr, + _(road), + tabs[T_REPMARK].len, tabs[T_REPMARK].ptr, + (tabs[T_REPMARK].len>0&&tabs[T_NUMBER].len>0)?" ":"", + tabs[T_NUMBER].len, tabs[T_NUMBER].ptr, + item->data.purchPrice, item->data.currPrice, _(condition), item->data.purchDate, + item->data.serviceDate, _(location), notes ); + if (manuf) { MyFree(manuf); } + if (road) { MyFree(road); } wListAddValue( (wList_p)carInvPLs[I_CI_LIST].control, message, NULL, item ); } static int Cmp_carInvItem( - const void * ptr1, - const void * ptr2 ) + const void * ptr1, + const void * ptr2 ) { carItem_p item1 = *(carItem_p*)ptr1; carItem_p item2 = *(carItem_p*)ptr2; @@ -5131,25 +5537,32 @@ static int Cmp_carInvItem( case S_SCALE: rc = (int)(item1->scaleInx-item2->scaleInx); case S_MANUF: - rc = strncasecmp( tabs1[T_MANUF].ptr, tabs2[T_MANUF].ptr, max(tabs1[T_MANUF].len,tabs2[T_MANUF].len) ); + rc = strncasecmp( tabs1[T_MANUF].ptr, tabs2[T_MANUF].ptr, + max(tabs1[T_MANUF].len,tabs2[T_MANUF].len) ); break; case S_TYPE: rc = (int)(item1->type-item2->type); break; case S_PARTNO: - rc = strncasecmp( tabs1[T_PART].ptr, tabs2[T_PART].ptr, max(tabs1[T_PART].len,tabs2[T_PART].len) ); + rc = strncasecmp( tabs1[T_PART].ptr, tabs2[T_PART].ptr, max(tabs1[T_PART].len, + tabs2[T_PART].len) ); break; case S_DESC: - rc = strncasecmp( tabs1[T_PROTO].ptr, tabs2[T_PROTO].ptr, max(tabs1[T_PROTO].len,tabs2[T_PROTO].len) ); - if ( rc != 0 ) + rc = strncasecmp( tabs1[T_PROTO].ptr, tabs2[T_PROTO].ptr, + max(tabs1[T_PROTO].len,tabs2[T_PROTO].len) ); + if ( rc != 0 ) { break; - rc = strncasecmp( tabs1[T_DESC].ptr, tabs2[T_DESC].ptr, max(tabs1[T_DESC].len,tabs2[T_DESC].len) ); + } + rc = strncasecmp( tabs1[T_DESC].ptr, tabs2[T_DESC].ptr, max(tabs1[T_DESC].len, + tabs2[T_DESC].len) ); break; case S_ROADNAME: - rc = strncasecmp( tabs1[T_ROADNAME].ptr, tabs2[T_ROADNAME].ptr, max(tabs1[T_ROADNAME].len,tabs2[T_ROADNAME].len) ); + rc = strncasecmp( tabs1[T_ROADNAME].ptr, tabs2[T_ROADNAME].ptr, + max(tabs1[T_ROADNAME].len,tabs2[T_ROADNAME].len) ); break; case S_REPMARKS: - rc = strncasecmp( tabs1[T_REPMARK].ptr, tabs2[T_REPMARK].ptr, max(tabs1[T_REPMARK].len,tabs2[T_REPMARK].len) ); + rc = strncasecmp( tabs1[T_REPMARK].ptr, tabs2[T_REPMARK].ptr, + max(tabs1[T_REPMARK].len,tabs2[T_REPMARK].len) ); break; case S_PURCHPRICE: rc = (int)(item1->data.purchPrice-item2->data.purchPrice); @@ -5178,7 +5591,8 @@ static void CarInvListLoad( void ) int inx; carItem_p item; - qsort( carItemInfo_da.ptr, carItemInfo_da.cnt, sizeof item, Cmp_carInvItem ); + qsort( &carItemInfo(0), carItemInfo_da.cnt, sizeof carItemInfo(0), + Cmp_carInvItem ); ParamControlShow( &carInvPG, I_CI_LIST, FALSE ); wListClear( (wList_p)carInvPLs[I_CI_LIST].control ); for ( inx=0; inx<carItemInfo_da.cnt; inx++ ) { @@ -5188,51 +5602,63 @@ static void CarInvListLoad( void ) ParamControlShow( &carInvPG, I_CI_LIST, TRUE ); ParamControlActive( &carInvPG, I_CI_EDIT, FALSE ); ParamControlActive( &carInvPG, I_CI_DELETE, FALSE ); + wButtonSetLabel( (wButton_p)(carInvPLs[I_CI_DELETE].control), "" ); ParamControlActive( &carInvPG, I_CI_EXPORT_CSV, carItemInfo_da.cnt > 0 ); ParamDialogOkActive( &carInvPG, FALSE ); } static void CarInvDlgUpdate( - paramGroup_p pg, - int inx, - void * valueP ) + paramGroup_p pg, + int inx, + void * valueP ) { carItem_p item = NULL; wIndex_t cnt, selinx, selcnt; - wBool_t enableDelete; if ( inx >= I_CI_SORT && inx < I_CI_SORT+N_SORT ) { item = CarInvDlgFindCurrentItem(); CarInvListLoad(); if ( item ) { carInvInx = (wIndex_t)CarItemFindIndex( item ); - if ( carInvInx >= 0 ) + if ( carInvInx >= 0 ) { ParamLoadControl( &carInvPG, I_CI_LIST ); + } } } else if ( inx == I_CI_LIST ) { cnt = wListGetCount( (wList_p)carInvPLs[I_CI_LIST].control ); - enableDelete = TRUE; + wIndex_t nOnShelf = 0; + wIndex_t nOnLayout = 0; for ( selinx=selcnt=0; selinx<cnt; selinx++ ) { if ( wListGetItemSelected( (wList_p)carInvPLs[I_CI_LIST].control, selinx ) ) { selcnt++; - item = (carItem_p)wListGetItemContext( (wList_p)carInvPLs[I_CI_LIST].control, selinx ); - if ( item && item->car && !IsTrackDeleted( item->car ) ) { - enableDelete = FALSE; - break; + item = (carItem_p)wListGetItemContext( (wList_p)carInvPLs[I_CI_LIST].control, + selinx ); + if ( ! item ) { continue; } + if ( item->car && !IsTrackDeleted( item->car ) ) { + nOnLayout++; + } else { + nOnShelf++; } } } - item = CarInvDlgFindCurrentItem(); - ParamDialogOkActive( pg, selcnt==1 && item && item->car && !IsTrackDeleted(item->car) ); - ParamControlActive( &carInvPG, I_CI_EDIT, selcnt==1 && item && (item->car==NULL || IsTrackDeleted(item->car)) ); - ParamControlActive( &carInvPG, I_CI_DELETE, selcnt>0 && enableDelete ); + // Enable Find if 1 selected car is on Layout + ParamDialogOkActive( pg, nOnLayout == 1 && nOnShelf == 0 ); + // Enable Edit if 1 selected car is on Shelf + ParamControlActive( &carInvPG, I_CI_EDIT, nOnLayout == 0 && nOnShelf == 1 ); + wBool_t bEnableDelete = nOnLayout+nOnShelf > 0 && + ( nOnLayout == 0 || nOnShelf == 0 ); + wButtonSetLabel( (wButton_p)(carInvPLs[I_CI_DELETE].control), + bEnableDelete == FALSE ? "" : + nOnLayout > 0 ? _("Shelve") : + _("Delete") ); + ParamControlActive( &carInvPG, I_CI_DELETE, bEnableDelete ); } } static void CarInvListAdd( - carItem_p item ) + carItem_p item ) { CarInvListLoad(); carInvInx = (wIndex_t)CarItemFindIndex( item ); @@ -5243,7 +5669,7 @@ static void CarInvListAdd( static void CarInvListUpdate( - carItem_p item ) + carItem_p item ) { CarInvListLoad(); carInvInx = (wIndex_t)CarItemFindIndex( item ); @@ -5257,10 +5683,13 @@ EXPORT void DoCarDlg( void * unused ) { int inx, inx2; if ( carInvPG.win == NULL ) { - ParamCreateDialog( &carInvPG, MakeWindowTitle(_("Car Inventory")), _("Find"), CarInvDlgFind, wHide, TRUE, NULL, F_BLOCK|F_RESIZE|F_RECALLSIZE|PD_F_ALT_CANCELLABEL, CarInvDlgUpdate ); + ParamCreateDialog( &carInvPG, MakeWindowTitle(_("Car Inventory")), _("Find"), + CarInvDlgFind, wHide, TRUE, NULL, + F_BLOCK|F_RESIZE|F_RECALLSIZE|PD_F_ALT_CANCELLABEL, CarInvDlgUpdate ); for ( inx=I_CI_SORT; inx<I_CI_SORT+N_SORT; inx++ ) { for ( inx2=0; inx2<COUNT( sortOrders ); inx2++ ) { - wListAddValue( (wList_p)carInvPLs[inx].control, _(sortOrders[inx2]), NULL, NULL ); + wListAddValue( (wList_p)carInvPLs[inx].control, _(sortOrders[inx2]), NULL, + NULL ); ParamLoadControl( &carInvPG, inx ); } } @@ -5274,7 +5703,6 @@ EXPORT void DoCarDlg( void * unused ) static void CarDlgChange( long changes ) { if ( (changes&CHANGE_SCALE) ) { - carPartChangeLevel = 0; carDlgCouplerLength = 0.0; } } @@ -5283,29 +5711,25 @@ static void CarDlgChange( long changes ) EXPORT void ClearCars( void ) { int inx; - for ( inx=0; inx<carItemInfo_da.cnt; inx++ ) + for ( inx=0; inx<carItemInfo_da.cnt; inx++ ) { MyFree( carItemInfo(inx) ); - carItemInfo_da.cnt = 0; - carItemInfo_da.max = 0; - if ( carItemInfo_da.ptr ) - MyFree( carItemInfo_da.ptr ); - carItemInfo_da.ptr = NULL; + } + DYNARR_FREE( carItem_t*, carItemInfo_da ); } static struct { - dynArr_t carProto_da; - dynArr_t carPartParent_da; - dynArr_t carItemInfo_da; - } savedCarState; + dynArr_t carProto_da; + dynArr_t carPartParent_da; + dynArr_t carItemInfo_da; +} savedCarState; EXPORT void SaveCarState( void ) { savedCarState.carProto_da = carProto_da; savedCarState.carPartParent_da = carPartParent_da; savedCarState.carItemInfo_da = carItemInfo_da; - carItemInfo_da.cnt = carItemInfo_da.max = 0; - carItemInfo_da.ptr = NULL; + DYNARR_INIT( carItem_t*, carItemInfo_da ); } @@ -5344,8 +5768,8 @@ EXPORT void InitCarDlg( void ) */ static int CarPartCustMgmProc( - int cmd, - void * data ) + int cmd, + void * data ) { tabString_t tabs[7]; int rd_inx; @@ -5357,8 +5781,9 @@ static int CarPartCustMgmProc( case CUSTMGM_CAN_EDIT: return TRUE; case CUSTMGM_DO_EDIT: - if ( partP == NULL ) + if ( partP == NULL ) { return FALSE; + } carDlgUpdatePartPtr = partP; DoCarPartDlg( partUpdActions ); return TRUE; @@ -5370,16 +5795,17 @@ static int CarPartCustMgmProc( case CUSTMGM_GET_TITLE: TabStringExtract( partP->title, 7, tabs ); rd_inx = T_REPMARK; - if ( tabs[T_REPMARK].len == 0 ) + if ( tabs[T_REPMARK].len == 0 ) { rd_inx = T_ROADNAME; + } sprintf( message, "\t%s\t%s\t%.*s\t%s%s%.*s%s%.*s%s%.*s", - partP->parent->manuf, - GetScaleName(partP->parent->scale), - tabs[T_PART].len, tabs[T_PART].ptr, - partP->parent->proto, - tabs[T_DESC].len?", ":"", tabs[T_DESC].len, tabs[T_DESC].ptr, - tabs[rd_inx].len?", ":"", tabs[rd_inx].len, tabs[rd_inx].ptr, - tabs[T_NUMBER].len?" ":"", tabs[T_NUMBER].len, tabs[T_NUMBER].ptr ); + partP->parent->manuf, + GetScaleName(partP->parent->scale), + tabs[T_PART].len, tabs[T_PART].ptr, + partP->parent->proto, + tabs[T_DESC].len?", ":"", tabs[T_DESC].len, tabs[T_DESC].ptr, + tabs[rd_inx].len?", ":"", tabs[rd_inx].len, tabs[rd_inx].ptr, + tabs[T_NUMBER].len?" ":"", tabs[T_NUMBER].len, tabs[T_NUMBER].ptr ); return TRUE; } return FALSE; @@ -5387,8 +5813,8 @@ static int CarPartCustMgmProc( static int CarProtoCustMgmProc( - int cmd, - void * data ) + int cmd, + void * data ) { carProto_p protoP = (carProto_p)data; switch ( cmd ) { @@ -5397,8 +5823,9 @@ static int CarProtoCustMgmProc( case CUSTMGM_CAN_EDIT: return TRUE; case CUSTMGM_DO_EDIT: - if ( protoP == NULL ) + if ( protoP == NULL ) { return FALSE; + } carDlgUpdateProtoPtr = protoP; DoCarPartDlg( protoUpdActions ); return TRUE; @@ -5408,7 +5835,8 @@ static int CarProtoCustMgmProc( CarProtoDelete( protoP ); return TRUE; case CUSTMGM_GET_TITLE: - sprintf( message, "\t%s\t\t%s\t%s", _("Prototype"), _(typeListMap[CarProtoFindTypeCode(protoP->type)].name), protoP->desc ); + sprintf( message, "\t%s\t\t%s\t%s", _("Prototype"), + _(typeListMap[CarProtoFindTypeCode(protoP->type)].name), protoP->desc ); return TRUE; } return FALSE; @@ -5427,25 +5855,29 @@ EXPORT void CarCustMgmLoad( void ) static wIcon_p carpartI = NULL; static wIcon_p carprotoI = NULL; - if ( carpartI == NULL ) + if ( carpartI == NULL ) { carpartI = wIconCreatePixMap( carpart_xpm ); - if ( carprotoI == NULL ) + } + if ( carprotoI == NULL ) { carprotoI = wIconCreatePixMap( carproto_xpm ); + } for ( parentX=0; parentX<carPartParent_da.cnt; parentX++ ) { parentP = carPartParent(parentX); for ( partX=0; partX<parentP->parts_da.cnt; partX++ ) { partP = carPart(parentP,partX); - if ( partP->paramFileIndex != PARAM_CUSTOM ) + if ( partP->paramFileIndex != PARAM_CUSTOM ) { continue; + } CustMgmLoad( carpartI, CarPartCustMgmProc, partP ); } } for ( protoX=0; protoX<carProto_da.cnt; protoX++ ) { carProtoP = carProto(protoX); - if ( carProtoP->paramFileIndex != PARAM_CUSTOM ) + if ( carProtoP->paramFileIndex != PARAM_CUSTOM ) { continue; + } if (carProtoP->paramFileIndex == PARAM_CUSTOM) { CustMgmLoad( carprotoI, CarProtoCustMgmProc, carProtoP ); } |