diff options
Diffstat (limited to 'app/bin/cswitchmotor.c')
-rw-r--r-- | app/bin/cswitchmotor.c | 62 |
1 files changed, 46 insertions, 16 deletions
diff --git a/app/bin/cswitchmotor.c b/app/bin/cswitchmotor.c index 259e105..09e6709 100644 --- a/app/bin/cswitchmotor.c +++ b/app/bin/cswitchmotor.c @@ -61,6 +61,7 @@ #include "track.h" #include "trackx.h" #include "utility.h" +#include "messages.h" EXPORT TRKTYP_T T_SWITCHMOTOR = -1; @@ -83,10 +84,10 @@ static char switchmotorPointSense[STR_LONG_SIZE]; static track_p switchmotorTurnout; static paramData_t switchmotorPLs[] = { -/*0*/ { PD_STRING, switchmotorName, "name", PDO_NOPREF|PDO_STRINGLIMITLENGTH, (void*)200, N_("Name"), 0, (void *)sizeof(switchmotorName) }, -/*1*/ { PD_STRING, switchmotorNormal, "normal", PDO_NOPREF|PDO_STRINGLIMITLENGTH, (void*)350, N_("Normal"), 0, (void *)sizeof(switchmotorNormal) }, -/*2*/ { PD_STRING, switchmotorReverse, "reverse", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Reverse"), 0, (void *)sizeof(switchmotorReverse) }, -/*3*/ { PD_STRING, switchmotorPointSense, "pointSense", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Point Sense"), 0, (void *)sizeof(switchmotorPointSense) } +/*0*/ { PD_STRING, switchmotorName, "name", PDO_NOPREF|PDO_STRINGLIMITLENGTH, (void*)200, N_("Name"), 0, 0, sizeof(switchmotorName)}, +/*1*/ { PD_STRING, switchmotorNormal, "normal", PDO_NOPREF|PDO_STRINGLIMITLENGTH, (void*)350, N_("Normal"), 0, 0, sizeof(switchmotorNormal)}, +/*2*/ { PD_STRING, switchmotorReverse, "reverse", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Reverse"), 0, 0, sizeof(switchmotorReverse)}, +/*3*/ { PD_STRING, switchmotorPointSense, "pointSense", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Point Sense"), 0, 0, sizeof(switchmotorPointSense)} }; static paramGroup_t switchmotorPG = { "switchmotor", 0, switchmotorPLs, sizeof switchmotorPLs/sizeof switchmotorPLs[0] }; @@ -102,10 +103,10 @@ static track_p switchmotorEditTrack; static paramIntegerRange_t r0_999999 = { 0, 999999 }; static paramData_t switchmotorEditPLs[] = { -/*0*/ { PD_STRING, switchmotorEditName, "name", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)200, N_("Name"), 0, (void *)sizeof(switchmotorEditName) }, -/*1*/ { PD_STRING, switchmotorEditNormal, "normal", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Normal"), 0, (void *)sizeof(switchmotorEditNormal) }, -/*2*/ { PD_STRING, switchmotorEditReverse, "reverse", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Reverse"), 0, (void *)sizeof(switchmotorEditReverse) }, -/*3*/ { PD_STRING, switchmotorEditPointSense, "pointSense", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Point Sense"), 0, (void *)sizeof(switchmotorEditPointSense) }, + /*0*/ { PD_STRING, switchmotorEditName, "name", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)200, N_("Name"), 0, 0, sizeof(switchmotorEditName)}, +/*1*/ { PD_STRING, switchmotorEditNormal, "normal", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Normal"), 0, 0, sizeof(switchmotorEditNormal)}, +/*2*/ { PD_STRING, switchmotorEditReverse, "reverse", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Reverse"), 0, 0, sizeof(switchmotorEditReverse)}, +/*3*/ { PD_STRING, switchmotorEditPointSense, "pointSense", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Point Sense"), 0, 0, sizeof(switchmotorEditPointSense)}, /*4*/ { PD_LONG, &switchmotorEditTonum, "turnoutNumber", PDO_NOPREF, &r0_999999, N_("Turnout Number"), BO_READONLY }, }; @@ -213,10 +214,10 @@ static struct { typedef enum { NM, NOR, REV, PS, TO } switchmotorDesc_e; static descData_t switchmotorDesc[] = { -/*NM */ { DESC_STRING, N_("Name"), &switchmotorData.name }, -/*NOR*/ { DESC_STRING, N_("Normal"), &switchmotorData.normal }, -/*REV*/ { DESC_STRING, N_("Reverse"), &switchmotorData.reverse }, -/*PS */ { DESC_STRING, N_("Point Sense"), &switchmotorData.pointsense }, +/*NM */ { DESC_STRING, N_("Name"), &switchmotorData.name, sizeof(switchmotorData.name) }, +/*NOR*/ { DESC_STRING, N_("Normal"), &switchmotorData.normal, sizeof(switchmotorData.normal) }, +/*REV*/ { DESC_STRING, N_("Reverse"), &switchmotorData.reverse, sizeof(switchmotorData.reverse) }, +/*PS */ { DESC_STRING, N_("Point Sense"), &switchmotorData.pointsense, sizeof(switchmotorData.pointsense) }, /*TO */ { DESC_LONG, N_("Turnout"), &switchmotorData.turnout }, { DESC_NULL } }; @@ -225,6 +226,7 @@ static void UpdateSwitchMotor (track_p trk, int inx, descData_p descUpd, BOOL_T switchmotorData_p xx = GetswitchmotorData(trk); const char * thename, *thenormal, *thereverse, *thepointsense; char *newName, *newNormal, *newReverse, *newPointSense; + unsigned int max_str; BOOL_T changed, nChanged, norChanged, revChanged, psChanged; LOG( log_switchmotor, 1, ("*** UpdateSwitchMotor(): needUndoStart = %d\n",needUndoStart)) @@ -233,23 +235,51 @@ static void UpdateSwitchMotor (track_p trk, int inx, descData_p descUpd, BOOL_T thename = wStringGetValue( (wString_p)switchmotorDesc[NM].control0 ); if ( strcmp( thename, xx->name ) != 0 ) { nChanged = changed = TRUE; - newName = MyStrdup(thename); + max_str = switchmotorDesc[NM].max_string; + if (max_str && strlen(thename)>max_str-1) { + newName = MyMalloc(max_str); + newName[max_str-1] = '\0'; + strncat(newName,thename,max_str-1); + NoticeMessage2(0, MSG_ENTERED_STRING_TRUNCATED, _("Ok"), NULL, max_str-1); + } else newName = MyStrdup(thename); } + thenormal = wStringGetValue( (wString_p)switchmotorDesc[NOR].control0 ); if ( strcmp( thenormal, xx->normal ) != 0 ) { norChanged = changed = TRUE; - newNormal = MyStrdup(thenormal); + max_str = switchmotorDesc[NOR].max_string; + if (max_str && strlen(thenormal)>max_str) { + newNormal = MyMalloc(max_str); + newNormal[max_str-1] = '\0'; + strncat(newNormal,thenormal, max_str-1); + NoticeMessage2(0, MSG_ENTERED_STRING_TRUNCATED, _("Ok"), NULL, max_str-1); + } else newNormal = MyStrdup(thenormal); } + thereverse = wStringGetValue( (wString_p)switchmotorDesc[REV].control0 ); if ( strcmp( thereverse, xx->reverse ) != 0 ) { revChanged = changed = TRUE; - newReverse = MyStrdup(thereverse); + max_str = switchmotorDesc[REV].max_string; + if (max_str && strlen(thereverse)>max_str) { + newReverse = MyMalloc(max_str); + newReverse[max_str-1] = '\0'; + strncat(newReverse,thereverse,max_str-1); + NoticeMessage2(0, MSG_ENTERED_STRING_TRUNCATED, _("Ok"), NULL, max_str-1); + } else newReverse = MyStrdup(thereverse); } + thepointsense = wStringGetValue( (wString_p)switchmotorDesc[PS].control0 ); if ( strcmp( thepointsense, xx->pointsense ) != 0 ) { psChanged = changed = TRUE; - newPointSense = MyStrdup(thepointsense); + max_str = switchmotorDesc[PS].max_string; + if (max_str && strlen(thepointsense)>max_str-1) { + newPointSense = MyMalloc(max_str); + newPointSense[max_str-1] = '\0'; + strncat(newPointSense,thepointsense, max_str-1); + NoticeMessage2(0, MSG_ENTERED_STRING_TRUNCATED, _("Ok"), NULL, max_str-1); + } else newPointSense = MyStrdup(thepointsense); } + if ( ! changed ) return; if ( needUndoStart ) UndoStart( _("Change Switch Motor"), "Change Switch Motor" ); |