From b623f5953691b2a0614e6f1f4def86bdbb9a4113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sat, 8 Aug 2020 11:53:00 +0200 Subject: New upstream version 5.2.0Beta2.1 --- app/bin/csignal.c | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) (limited to 'app/bin/csignal.c') diff --git a/app/bin/csignal.c b/app/bin/csignal.c index fb9bee8..0fc09e6 100644 --- a/app/bin/csignal.c +++ b/app/bin/csignal.c @@ -59,6 +59,9 @@ static const char rcsid[] = "@(#) : $Id$"; #include "param.h" #include "track.h" #include "trackx.h" +#ifdef WINDOWS +#include "include/utf8convert.h" +#endif // WINDOWS #include "utility.h" #include "messages.h" @@ -308,7 +311,7 @@ static void DescribeSignal (track_p trk, char * str, CSIZE_T len ) *str = tolower((unsigned char)*str); str++; } - sprintf( str, _("(%d [%s]): Layer=%d, %d heads at %0.3f,%0.3f A%0.3f"), + sprintf( str, _("(%d [%s]): Layer=%u, %d heads at %0.3f,%0.3f A%0.3f"), GetTrkIndex(trk), xx->name,GetTrkLayer(trk)+1, xx->numHeads, xx->orig.x, xx->orig.y,xx->angle ); @@ -338,20 +341,28 @@ static BOOL_T WriteSignal ( track_p t, FILE * f ) BOOL_T rc = TRUE; wIndex_t ia; signalData_p xx = GetsignalData(t); - rc &= fprintf(f, "SIGNAL %d %d %s %d %0.6f %0.6f %0.6f %d \"%s\"\n", + char *signalName = MyStrdup(xx->name); + +#ifdef WINDOWS + signalName = Convert2UTF8(signalName); +#endif // WINDOWS + + rc &= fprintf(f, "SIGNAL %d %u %s %d %0.6f %0.6f %0.6f %d \"%s\"\n", GetTrkIndex(t), GetTrkLayer(t), GetTrkScaleName(t), GetTrkVisible(t), xx->orig.x, xx->orig.y, xx->angle, - xx->numHeads, xx->name)>0; + xx->numHeads, signalName)>0; for (ia = 0; ia < xx->numAspects; ia++) { rc &= fprintf(f, "\tASPECT \"%s\" \"%s\"\n", (&(xx->aspectList))[ia].aspectName, (&(xx->aspectList))[ia].aspectScript)>0; } - rc &= fprintf( f, "\tEND\n" )>0; + rc &= fprintf( f, "\t%s\n",END_SIGNAL )>0; + + MyFree(signalName); return rc; } -static void ReadSignal ( char * line ) +static BOOL_T ReadSignal ( char * line ) { /*TRKINX_T trkindex;*/ wIndex_t index; @@ -369,19 +380,24 @@ static void ReadSignal ( char * line ) signalData_p xx; if (!GetArgs(line+6,"dLsdpfdq",&index,&layer,scale, &visible, &orig, &angle, &numHeads,&name)) { - return; + return FALSE; } + +#ifdef WINDOWS + ConvertUTF8ToSystem(name); +#endif // WINDOWS + DYNARR_RESET( signalAspect_p, signalAspect_da ); while ( (cp = GetNextLine()) != NULL ) { - while (isspace((unsigned char)*cp)) cp++; - if ( strncmp( cp, "END", 3 ) == 0 ) { + if ( IsEND( END_SIGNAL) ) { break; } + while (isspace((unsigned char)*cp)) cp++; if ( *cp == '\n' || *cp == '#' ) { continue; } if ( strncmp( cp, "ASPECT", 6 ) == 0 ) { - if (!GetArgs(cp+4,"qq",&aspname,&aspscript)) return; + if (!GetArgs(cp+4,"qq",&aspname,&aspscript)) return FALSE; DYNARR_APPEND( signalAspect_p *, signalAspect_da, 10 ); signalAspect(signalAspect_da.cnt-1).aspectName = aspname; signalAspect(signalAspect_da.cnt-1).aspectScript = aspscript; @@ -402,6 +418,7 @@ static void ReadSignal ( char * line ) (&(xx->aspectList))[ia].aspectScript = signalAspect(ia).aspectScript; } ComputeSignalBoundingBox(trk); + return TRUE; } static void MoveSignal (track_p trk, coOrd orig ) @@ -772,20 +789,21 @@ static ANGLE_T orient; static STATUS_T CmdSignal ( wAction_t action, coOrd pos ) { - + static BOOL_T create; switch (action) { case C_START: InfoMessage(_("Place base of signal")); + create = FALSE; return C_CONTINUE; case C_DOWN: SnapPos(&pos); pos0 = pos; + create = TRUE; InfoMessage(_("Drag to orient signal")); return C_CONTINUE; case C_MOVE: SnapPos(&pos); orient = FindAngle(pos0,pos); - DDrawSignal( &tempD, pos0, orient, 1, GetScaleRatio(GetLayoutCurScale()), wDrawColorBlack ); return C_CONTINUE; case C_UP: SnapPos(&pos); @@ -793,8 +811,11 @@ static STATUS_T CmdSignal ( wAction_t action, coOrd pos ) CreateNewSignal(pos0,orient); return C_TERMINATE; case C_REDRAW: + if (create) + DDrawSignal( &tempD, pos0, orient, 1, GetScaleRatio(GetLayoutCurScale()), wDrawColorBlack ); + return C_CONTINUE; case C_CANCEL: - DDrawSignal( &tempD, pos0, orient, 1, GetScaleRatio(GetLayoutCurScale()), wDrawColorBlack ); + create = FALSE; return C_CONTINUE; default: return C_CONTINUE; @@ -812,7 +833,7 @@ static void DrawSignalTrackHilite( void ) w = (wPos_t)((sighiliteSize.x/mainD.scale)*mainD.dpi+0.5); h = (wPos_t)((sighiliteSize.y/mainD.scale)*mainD.dpi+0.5); mainD.CoOrd2Pix(&mainD,sighiliteOrig,&x,&y); - wDrawFilledRectangle( mainD.d, x, y, w, h, sighiliteColor, wDrawOptTemp ); + wDrawFilledRectangle( tempD.d, x, y, w, h, sighiliteColor, wDrawOptTemp|wDrawOptTransparent ); } static int SignalMgmProc ( int cmd, void * data ) -- cgit v1.2.3