summaryrefslogtreecommitdiff
path: root/app/bin/ctrain.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/bin/ctrain.c')
-rw-r--r--app/bin/ctrain.c346
1 files changed, 177 insertions, 169 deletions
diff --git a/app/bin/ctrain.c b/app/bin/ctrain.c
index b15cb91..f113ee5 100644
--- a/app/bin/ctrain.c
+++ b/app/bin/ctrain.c
@@ -20,27 +20,17 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#ifndef WINDOWS
-#include <errno.h>
-#endif
-#include <ctype.h>
-#include <math.h>
-#include <string.h>
-
-#define PRIVATE_EXTRADATA
-
#include "compound.h"
+#include "cselect.h"
#include "ctrain.h"
#include "cundo.h"
#include "custom.h"
#include "fileio.h"
-#include "i18n.h"
#include "layout.h"
-#include "messages.h"
#include "param.h"
#include "track.h"
#include "trackx.h"
-#include "utility.h"
+#include "common-ui.h"
long programMode;
long maxCouplingSpeed = 100;
@@ -53,7 +43,8 @@ static TRKTYP_T T_CAR = -1;
typedef enum { ST_NotOnTrack, ST_StopManual, ST_EndOfTrack, ST_OpenTurnout, ST_NoRoom, ST_Crashed } trainStatus_e;
-struct extraData {
+typedef struct extraDataCar_t {
+ extraDataBase_t base;
traverseTrack_t trvTrk;
long state;
carItem_p item;
@@ -65,7 +56,7 @@ struct extraData {
DIST_T distance;
coOrd couplerPos[2];
unsigned int trkLayer;
-};
+} extraDataCar_t;
#define NOTALAYER (127)
#define CAR_STATE_IGNORED (1L<<17)
@@ -88,6 +79,15 @@ struct extraData {
#define SetProcessed( XX ) (XX)->state |= CAR_STATE_PROCESSED
#define ClrProcessed( XX ) (XX)->state &= ~CAR_STATE_PROCESSED
+// Scroll the window before the train hits the edge
+#define OFF_F( ORIG, SIZE, LO, HI ) \
+ ( ( (HI).x < (ORIG).x+((SIZE).x)*0.2 && (ORIG).x > 0.0 ) || \
+ ( (LO).x > (ORIG).x+((SIZE).x)*0.8 && (ORIG).x+(SIZE).x < mapD.size.x ) || \
+ ( (HI).y < (ORIG).y+((SIZE).y)*0.2 && (ORIG).y > 0.0 ) || \
+ ( (LO).y > (ORIG).y+((SIZE).y)*0.8 && (ORIG).y+(SIZE).y < mapD.size.y ) )
+#define OFF_FOLLOW( LO, HI ) \
+ OFF_F( mainD.orig, mainD.size, LO, HI )
+
static wButton_p newcarB;
static void ControllerDialogSyncAll(void);
@@ -99,6 +99,7 @@ static coOrd followCenter;
static BOOL_T trainsTimeoutPending;
static enum { TRAINS_STOP, TRAINS_RUN, TRAINS_IDLE, TRAINS_PAUSE } trainsState;
static wIcon_p stopI, goI;
+static wIcon_p stopB, goB;
static void RestartTrains(void);
static void DrawAllCars(void);
static void UncoupleCars(track_p, track_p);
@@ -113,7 +114,7 @@ static void PlaceCar(track_p);
#define WALK_CARS_START( CAR, XX, DIR ) \
while (1) { \
- (XX) = GetTrkExtraData(CAR);\
+ (XX) = GET_EXTRA_DATA(CAR, T_CAR, extraDataCar_t);\
{ \
#define WALK_CARS_END( CAR, XX, DIR ) \
@@ -136,7 +137,7 @@ void CarGetPos(
coOrd * posR,
ANGLE_T * angleR)
{
- struct extraData * xx = GetTrkExtraData(car);
+ struct extraDataCar_t * xx = GET_EXTRA_DATA(car, T_CAR, extraDataCar_t);
if (GetTrkType(car) != T_CAR) {
AbortProg("getCarPos");
@@ -149,7 +150,7 @@ void CarGetPos(
void CarSetVisible(
track_p car)
{
- struct extraData * xx;
+ struct extraDataCar_t * xx;
int dir;
dir = 0;
WALK_CARS_START(car, xx, dir)
@@ -243,7 +244,7 @@ static void DescribeCar(
char * str,
CSIZE_T len)
{
- struct extraData *xx = GetTrkExtraData(trk);
+ struct extraDataCar_t *xx = GET_EXTRA_DATA(trk, T_CAR, extraDataCar_t);
char * cp;
coOrd size;
CarItemSize(xx->item, &size);
@@ -320,7 +321,7 @@ EXPORT void CheckCarTraverse(track_p track) {
track_p car;
for (car=NULL; TrackIterate(&car);) {
if (GetTrkType(car) == T_CAR) {
- struct extraData * xx = GetTrkExtraData(car);
+ struct extraDataCar_t * xx = GET_EXTRA_DATA(car, T_CAR, extraDataCar_t);
if (xx->trvTrk.trk == track) {
xx->trvTrk.trk=NULL;
xx->status = ST_NotOnTrack;
@@ -340,10 +341,10 @@ static void DrawCar(
drawCmd_p d,
wDrawColor color)
{
- struct extraData * xx = GetTrkExtraData(car);
+ struct extraDataCar_t * xx = GET_EXTRA_DATA(car, T_CAR, extraDataCar_t);
int dir;
vector_t coupler[2];
- struct extraData * xx1;
+ struct extraDataCar_t * xx1;
int dir1;
if (drawCarEnable == FALSE) {
@@ -369,7 +370,7 @@ static void DrawCar(
coupler[dir].pos = xx->couplerPos[dir];
if ((car1 = GetTrkEndTrk(car,dir))) {
- xx1 = GetTrkExtraData(car1);
+ xx1 = GET_EXTRA_DATA(car1, T_CAR, extraDataCar_t);
dir1 = (GetTrkEndTrk(car1,0)==car)?0:1;
coupler[dir].angle = FindAngle(xx->couplerPos[dir], xx1->couplerPos[dir1]);
} else {
@@ -387,13 +388,13 @@ static DIST_T DistanceCar(
track_p trk,
coOrd * pos)
{
- struct extraData * xx = GetTrkExtraData(trk);
+ struct extraDataCar_t * xx = GET_EXTRA_DATA(trk, T_CAR, extraDataCar_t);
DIST_T dist;
coOrd pos1;
coOrd size;
if (IsIgnored(xx)) {
- return 10000.0;
+ return DIST_INF;
}
CarItemSize(xx->item,
@@ -420,7 +421,7 @@ static DIST_T DistanceCar(
static void SetCarBoundingBox(
track_p car)
{
- struct extraData * xx = GetTrkExtraData(car);
+ struct extraDataCar_t * xx = GET_EXTRA_DATA(car, T_CAR, extraDataCar_t);
coOrd lo, hi, p[4];
int inx;
coOrd size;
@@ -464,10 +465,10 @@ track_p NewCar(
ANGLE_T angle)
{
track_p trk;
- struct extraData * xx;
+ struct extraDataCar_t * xx;
trk = NewTrack(index, T_CAR, 2, sizeof(*xx));
/*SetEndPts( trk, 0 );*/
- xx = GetTrkExtraData(trk);
+ xx = GET_EXTRA_DATA(trk, T_CAR, extraDataCar_t);
/*SetTrkVisible( trk, IsVisible(xx) );*/
xx->item = item;
xx->trvTrk.pos = pos;
@@ -483,7 +484,7 @@ track_p NewCar(
static void DeleteCar(
track_p trk)
{
- struct extraData * xx = GetTrkExtraData(trk);
+ struct extraDataCar_t * xx = GET_EXTRA_DATA(trk, T_CAR, extraDataCar_t);
CarItemSetTrack(xx->item, NULL);
}
@@ -508,7 +509,7 @@ static void MoveCar(
track_p car,
coOrd pos)
{
- struct extraData *xx = GetTrkExtraData(car);
+ struct extraDataCar_t *xx = GET_EXTRA_DATA(car, T_CAR, extraDataCar_t);
xx->trvTrk.pos.x += pos.x;
xx->trvTrk.pos.y += pos.y;
xx->trvTrk.trk = NULL;
@@ -522,7 +523,7 @@ static void RotateCar(
coOrd pos,
ANGLE_T angle)
{
- struct extraData *xx = GetTrkExtraData(car);
+ struct extraDataCar_t *xx = GET_EXTRA_DATA(car, T_CAR, extraDataCar_t);
Rotate(&xx->trvTrk.pos, pos, angle);
xx->trvTrk.angle = NormalizeAngle(xx->trvTrk.angle + angle);
xx->trvTrk.trk = NULL;
@@ -536,6 +537,8 @@ static BOOL_T QueryCar(track_p trk, int query)
switch (query) {
case Q_NODRAWENDPT:
return TRUE;
+ case Q_ISTRAIN:
+ return TRUE;
default:
return FALSE;
@@ -547,14 +550,14 @@ static BOOL_T StoreCar(
void **data,
long * len) {
- struct extraData *xx = GetTrkExtraData(car);
+ struct extraDataCar_t *xx = GET_EXTRA_DATA(car, T_CAR, extraDataCar_t);
return StoreCarItem(xx->item,data,len);
}
static BOOL_T ReplayCar (track_p car, void *data,long len) {
- struct extraData *xx = GetTrkExtraData(car);
+ struct extraDataCar_t *xx = GET_EXTRA_DATA(car, T_CAR, extraDataCar_t);
return ReplayCarItem(xx->item,data,len);
}
@@ -633,10 +636,10 @@ typedef struct {
static trainControlDlg_t * curTrainDlg;
-static void SpeedRedraw(wDraw_p, void *, wPos_t, wPos_t);
+static void SpeedRedraw(wDraw_p, void *, wWinPix_t, wWinPix_t);
static void SpeedAction(wAction_t, coOrd);
static void LocoListChangeEntry(track_p, track_p);
-static void CmdTrainExit(void *);
+static void CmdTrainExit(void * unused);
drawCmd_t speedD = {
NULL,
@@ -658,18 +661,18 @@ static char * trainAutoReverseLabels[] = { N_("Auto Reverse"), NULL };
static paramData_t trainPLs[] = {
#define I_LIST (0)
#ifdef WINDOWS
- /*0*/ { PD_DROPLIST, NULL, "list", PDO_NOPREF|PDO_NOPSHUPD, (void*)120, NULL, 0 },
+ /*0*/ { PD_DROPLIST, NULL, "list", PDO_NOPREF|PDO_NOPSHUPD, I2VP(120), NULL, 0 },
#else
/*0*/ { PD_LIST, NULL, "list", PDO_NOPREF|PDO_NOPSHUPD, &listData, NULL, 0 },
#endif
#define I_STATUS (1)
- { PD_MESSAGE, NULL, NULL, 0, (void*)120 },
+ { PD_MESSAGE, NULL, NULL, 0, I2VP(120) },
#define I_POS (2)
- { PD_MESSAGE, NULL, NULL, 0, (void*)120 },
+ { PD_MESSAGE, NULL, NULL, 0, I2VP(120) },
#define I_SLIDER (3)
{ PD_DRAW, NULL, "speed", PDO_NOPSHUPD|PDO_DLGSETY, &speedParamData },
#define I_DIST (4)
- { PD_STRING, NULL, "distance", PDO_DLGNEWCOLUMN, (void*)(100-SLIDER_WIDTH), NULL, BO_READONLY },
+ { PD_STRING, NULL, "distance", PDO_DLGNEWCOLUMN, I2VP(100-SLIDER_WIDTH), NULL, BO_READONLY },
#define I_ZERO (5)
{ PD_BUTTON, NULL, "zeroDistance", PDO_NOPSHUPD|PDO_NOPREF|PDO_DLGHORZ, NULL, NULL, BO_ICON },
#define I_GOTO (6)
@@ -683,10 +686,10 @@ static paramData_t trainPLs[] = {
#define I_STOP (10)
{ PD_BUTTON, NULL, "stop", PDO_DLGWIDE, NULL, N_("Stop") },
#define I_SPEED (11)
- { PD_MESSAGE, NULL, NULL, PDO_DLGIGNOREX, (void *)120 }
+ { PD_MESSAGE, NULL, NULL, PDO_DLGIGNOREX, I2VP(120) }
};
-static paramGroup_t trainPG = { "train", 0, trainPLs, sizeof trainPLs/sizeof trainPLs[0] };
+static paramGroup_t trainPG = { "train", 0, trainPLs, COUNT( trainPLs ) };
typedef struct {
@@ -723,12 +726,12 @@ static wIndex_t FindLoco(
static void SpeedRedraw(
wDraw_p d,
void * context,
- wPos_t w,
- wPos_t h)
+ wWinPix_t w,
+ wWinPix_t h)
{
- wPos_t y, pts[4][2];
+ wDrawPix_t y;
trainControlDlg_p dlg = (trainControlDlg_p)context;
- struct extraData * xx;
+ struct extraDataCar_t * xx;
wDrawColor drawColor;
wDrawClear(d);
@@ -736,7 +739,7 @@ static void SpeedRedraw(
return;
}
- xx = GetTrkExtraData(dlg->train);
+ xx = GET_EXTRA_DATA(dlg->train, T_CAR, extraDataCar_t);
if (xx->speed > MAX_SPEED) {
xx->speed = MAX_SPEED;
@@ -746,25 +749,23 @@ static void SpeedRedraw(
xx->speed = 0;
}
- y = (wPos_t)(xx->speed/MAX_SPEED*((SLIDER_HEIGHT-SLIDER_THICKNESS))
+ y = (xx->speed/MAX_SPEED*((SLIDER_HEIGHT-SLIDER_THICKNESS))
+SLIDER_THICKNESS/2);
drawColor = wDrawFindColor(wRGB(160, 160, 160));
- pts[0][1] = pts[1][1] = y-SLIDER_THICKNESS/2;
- pts[2][1] = pts[3][1] = y+SLIDER_THICKNESS/2;
- pts[0][0] = pts[3][0] = 0;
- pts[1][0] = pts[2][0] = SLIDER_WIDTH;
- wDrawPolygon(d, pts, NULL, 4, drawColor, 0, 0, 0, 1, 0);
- drawColor = wDrawFindColor(wRGB(220, 220, 220));
- pts[0][1] = pts[1][1] = y+SLIDER_THICKNESS/2;
- pts[2][1] = pts[3][1] = y;
- pts[0][0] = pts[3][0] = 0;
- pts[1][0] = pts[2][0] = SLIDER_WIDTH;
- wDrawPolygon(d, pts, NULL, 4, drawColor, 0, 0, 0, 1, 0);
- wDrawLine(d, 0, y, SLIDER_WIDTH, y, 1, wDrawLineSolid, drawColorRed, 0);
- wDrawLine(d, 0, y+SLIDER_THICKNESS/2, SLIDER_WIDTH, y+SLIDER_THICKNESS/2, 1,
- wDrawLineSolid, drawColorBlack, 0);
- wDrawLine(d, 0, y-SLIDER_THICKNESS/2, SLIDER_WIDTH, y-SLIDER_THICKNESS/2, 1,
- wDrawLineSolid, drawColorBlack, 0);
+ coOrd pos0, pos1, siz;
+ y /= speedD.dpi;
+ siz.x = SLIDER_WIDTH/speedD.dpi;
+ siz.y = SLIDER_THICKNESS/speedD.dpi;
+ pos0.x = 0.0;
+ pos0.y = y - siz.y/2.0;
+ DrawRectangle( &speedD, pos0, siz, drawColor, DRAW_FILL );
+ pos1.x = siz.x;
+ pos1.y = pos0.y;
+ DrawLine( &speedD, pos0, pos1, 1, drawColorBlack );
+ pos0.y = pos1.y = y;
+ DrawLine( &speedD, pos0, pos1, 3, drawColorRed );
+ pos0.y = pos1.y = y + siz.y/2.0;
+ DrawLine( &speedD, pos0, pos1, 1, drawColorBlack );
sprintf(dlg->speedS, "%3d %s",
(int)(units==UNITS_ENGLISH?xx->speed:xx->speed*1.6),
(units==UNITS_ENGLISH?"mph":"km/h"));
@@ -778,7 +779,7 @@ static void SpeedAction(
coOrd pos)
{
trainControlDlg_p dlg = curTrainDlg;
- struct extraData * xx;
+ struct extraDataCar_t * xx;
FLOAT_T speed;
BOOL_T startStop;
@@ -786,7 +787,7 @@ static void SpeedAction(
return;
}
- xx = GetTrkExtraData(dlg->train);
+ xx = GET_EXTRA_DATA(dlg->train, T_CAR, extraDataCar_t);
switch (action) {
case C_DOWN:
@@ -841,7 +842,7 @@ static void SpeedAction(
static void ControllerDialogSync(
trainControlDlg_p dlg)
{
- struct extraData * xx=NULL;
+ struct extraDataCar_t * xx=NULL;
wIndex_t inx;
BOOL_T dir;
BOOL_T followMe;
@@ -870,7 +871,7 @@ static void ControllerDialogSync(
if (dlg->train) {
char * statusMsg;
DIST_T speed;
- xx = GetTrkExtraData(dlg->train);
+ xx = GET_EXTRA_DATA(dlg->train, T_CAR, extraDataCar_t);
dir = xx->direction==0?0:1;
speed = xx->speed;
pos = xx->trvTrk.pos;
@@ -996,7 +997,7 @@ static void LocoListChangeEntry(
track_p newLoco)
{
wIndex_t inx = -1;
- struct extraData * xx;
+ struct extraDataCar_t * xx;
if (curTrainDlg == NULL) {
return;
@@ -1005,7 +1006,7 @@ static void LocoListChangeEntry(
if (oldLoco && (inx=FindLoco(oldLoco))>=0) {
if (newLoco) {
locoList(inx).loco = newLoco;
- xx = GetTrkExtraData(newLoco);
+ xx = GET_EXTRA_DATA(newLoco, T_CAR, extraDataCar_t);
locoList(inx).running = IsOnTrack(xx) && xx->speed > 0;
wListSetValues((wList_p)curTrainDlg->trainPGp->paramPtr[I_LIST].control, inx,
CarItemNumber(xx->item), locoList(inx).running?goI:stopI, newLoco);
@@ -1026,7 +1027,7 @@ static void LocoListChangeEntry(
inx = locoList_da.cnt;
DYNARR_APPEND(locoList_t, locoList_da, 10);
locoList(inx).loco = newLoco;
- xx = GetTrkExtraData(newLoco);
+ xx = GET_EXTRA_DATA(newLoco, T_CAR, extraDataCar_t);
locoList(inx).running = IsOnTrack(xx) && xx->speed > 0;
wListAddValue((wList_p)curTrainDlg->trainPGp->paramPtr[I_LIST].control,
CarItemNumber(xx->item), locoList(inx).running?goI:stopI, newLoco);
@@ -1048,7 +1049,7 @@ static void LocoListChangeEntry(
static void LocoListInit(void)
{
track_p train;
- struct extraData * xx;
+ struct extraDataCar_t * xx;
locoList_da.cnt = 0;
for (train=NULL; TrackIterate(&train);) {
@@ -1056,7 +1057,7 @@ static void LocoListInit(void)
continue;
}
- xx = GetTrkExtraData(train);
+ xx = GET_EXTRA_DATA(train, T_CAR, extraDataCar_t);
if (!CarItemIsLoco(xx->item)) {
continue;
@@ -1083,13 +1084,13 @@ static void StopTrain(
track_p train,
trainStatus_e status)
{
- struct extraData * xx;
+ struct extraDataCar_t * xx;
if (train == NULL) {
return;
}
- xx = GetTrkExtraData(train);
+ xx = GET_EXTRA_DATA(train, T_CAR, extraDataCar_t);
xx->speed = 0;
xx->status = status;
LocoListChangeEntry(train, train);
@@ -1133,7 +1134,7 @@ static void MoveMainWindow(
static void SetTrainDirection(
track_p train)
{
- struct extraData *xx, *xx0=GetTrkExtraData(train);
+ struct extraDataCar_t *xx, *xx0=GET_EXTRA_DATA(train, T_CAR, extraDataCar_t);
int dir0;
track_p car;
car = train;
@@ -1161,7 +1162,7 @@ static void ControllerDialogUpdate(
{
trainControlDlg_p dlg = curTrainDlg;
track_p train;
- struct extraData * xx;
+ struct extraDataCar_t * xx;
if (dlg == NULL) {
return;
@@ -1188,7 +1189,7 @@ static void ControllerDialogUpdate(
}
TrainTimeEndPause();
- xx = GetTrkExtraData(dlg->train);
+ xx = GET_EXTRA_DATA(dlg->train, T_CAR, extraDataCar_t);
xx->distance = 0.0;
ParamLoadMessage(dlg->trainPGp, I_DIST, FormatDistance(xx->distance));
ParamLoadControl(curTrainDlg->trainPGp, I_DIST);
@@ -1201,7 +1202,7 @@ static void ControllerDialogUpdate(
}
TrainTimeEndPause();
- xx = GetTrkExtraData(dlg->train);
+ xx = GET_EXTRA_DATA(dlg->train, T_CAR, extraDataCar_t);
followTrain = NULL;
dlg->followMe = FALSE;
ParamLoadControl(curTrainDlg->trainPGp, I_FOLLOW);
@@ -1217,7 +1218,7 @@ static void ControllerDialogUpdate(
if (*(long*)valueP) {
followTrain = dlg->train;
- xx = GetTrkExtraData(dlg->train);
+ xx = GET_EXTRA_DATA(dlg->train, T_CAR, extraDataCar_t);
if (OFF_MAIND(xx->trvTrk.pos, xx->trvTrk.pos)) {
MoveMainWindow(xx->trvTrk.pos, xx->trvTrk.angle);
@@ -1235,7 +1236,7 @@ static void ControllerDialogUpdate(
return;
}
- xx = GetTrkExtraData(dlg->train);
+ xx = GET_EXTRA_DATA(dlg->train, T_CAR, extraDataCar_t);
xx->autoReverse = *(long*)valueP!=0;
break;
@@ -1244,7 +1245,7 @@ static void ControllerDialogUpdate(
return;
}
- xx = GetTrkExtraData(dlg->train);
+ xx = GET_EXTRA_DATA(dlg->train, T_CAR, extraDataCar_t);
dlg->direction = xx->direction = !xx->direction;
wButtonSetLabel((wButton_p)pg->paramPtr[I_DIR].control,
(dlg->direction?_("Reverse"):_("Forward")));
@@ -1303,6 +1304,8 @@ static trainControlDlg_p CreateTrainControlDlg(void)
dlg->trainPGp = &trainPG;
dlg->win = ParamCreateDialog(dlg->trainPGp, _("Train Control"), NULL, NULL,
NULL, FALSE, NULL, 0, ControllerDialogUpdate);
+ speedD.size.x = SLIDER_WIDTH/speedD.dpi;
+ speedD.size.y = SLIDER_HEIGHT/speedD.dpi;
return dlg;
}
@@ -1323,7 +1326,7 @@ static track_p followTrain = NULL;
static void DrawAllCars(void)
{
track_p car;
- struct extraData * xx;
+ struct extraDataCar_t * xx;
coOrd size, lo, hi;
BOOL_T drawCarEnable1 = drawCarEnable;
drawCarEnable = TRUE;
@@ -1333,7 +1336,7 @@ static void DrawAllCars(void)
for (car=NULL; TrackIterate(&car);) {
if (GetTrkType(car) == T_CAR) {
- xx = GetTrkExtraData(car);
+ xx = GET_EXTRA_DATA(car, T_CAR, extraDataCar_t);
CarItemSize(xx->item,
&size); /* TODO assumes xx->trvTrk.pos is the car center */
lo.x = xx->trvTrk.pos.x - size.x/2.0;
@@ -1357,7 +1360,7 @@ static DIST_T GetTrainLength2(
BOOL_T * dir)
{
DIST_T length = 0, carLength;
- struct extraData * xx;
+ struct extraDataCar_t * xx;
WALK_CARS_START(*car0, xx, *dir)
carLength = CarItemCoupledLength(xx->item);
@@ -1383,7 +1386,7 @@ static DIST_T GetTrainLength(
static void PlaceCar(
track_p car)
{
- struct extraData *xx = GetTrkExtraData(car);
+ struct extraDataCar_t *xx = GET_EXTRA_DATA(car, T_CAR, extraDataCar_t);
DIST_T dists[2];
CarItemPlace(xx->item, &xx->trvTrk, dists);
@@ -1414,13 +1417,13 @@ static track_p FindCar(
{
coOrd pos0, pos1;
track_p trk, trk1;
- DIST_T dist1 = 100000, dist;
- struct extraData * xx;
+ DIST_T dist1 = DIST_INF, dist;
+ struct extraDataCar_t * xx;
trk1 = NULL;
for (trk=NULL; TrackIterate(&trk);) {
if (GetTrkType(trk) == T_CAR) {
- xx = GetTrkExtraData(trk);
+ xx = GET_EXTRA_DATA(trk, T_CAR, extraDataCar_t);
if (IsIgnored(xx)) {
continue;
@@ -1450,7 +1453,7 @@ static track_p FindMasterLoco(
track_p train,
int * dirR)
{
- struct extraData *xx0;
+ struct extraDataCar_t *xx0;
int dir;
for (dir = 0; dir<2; dir++) {
@@ -1480,7 +1483,7 @@ static track_p PickMasterLoco(
int dir)
{
track_p loco=NULL;
- struct extraData *xx;
+ struct extraDataCar_t *xx;
WALK_CARS_START(car, xx, dir)
if (CarItemIsLoco(xx->item)) {
@@ -1499,7 +1502,7 @@ static track_p PickMasterLoco(
return NULL;
}
- xx = GetTrkExtraData(loco);
+ xx = GET_EXTRA_DATA(loco, T_CAR, extraDataCar_t);
SetLocoMaster(xx);
xx->speed = 0;
LOG(log_trainMove, 1, ("%s becomes master\n", CarItemNumber(xx->item)))
@@ -1558,12 +1561,12 @@ static void CoupleCars(
track_p car2,
int dir2)
{
- struct extraData * xx1, * xx2;
+ struct extraDataCar_t * xx1, * xx2;
track_p loco1, loco2;
track_p car;
int dir;
- xx1 = GetTrkExtraData(car1);
- xx2 = GetTrkExtraData(car2);
+ xx1 = GET_EXTRA_DATA(car1, T_CAR, extraDataCar_t);
+ xx2 = GET_EXTRA_DATA(car2, T_CAR, extraDataCar_t);
if (GetTrkEndTrk(car1,dir1) != NULL || GetTrkEndTrk(car2,dir2) != NULL) {
LOG(log_trainMove, 1, ("coupleCars - already coupled\n"))
@@ -1604,8 +1607,8 @@ static void CoupleCars(
}
if ((loco1 != NULL && loco2 != NULL)) {
- xx1 = GetTrkExtraData(loco1);
- xx2 = GetTrkExtraData(loco2);
+ xx1 = GET_EXTRA_DATA(loco1, T_CAR, extraDataCar_t);
+ xx2 = GET_EXTRA_DATA(loco2, T_CAR, extraDataCar_t);
if (xx1->speed == 0) {
ClrLocoMaster(xx1);
@@ -1651,7 +1654,7 @@ static void PlaceCars(
long crashSpeed,
BOOL_T crashFlip)
{
- struct extraData *xx0 = GetTrkExtraData(car0), *xx;
+ struct extraDataCar_t *xx0 = GET_EXTRA_DATA(car0, T_CAR, extraDataCar_t), *xx;
int dir;
traverseTrack_t trvTrk;
DIST_T length;
@@ -1715,14 +1718,14 @@ static void CrashTrain(
BOOL_T flip)
{
track_p loco;
- struct extraData *xx;
+ struct extraDataCar_t *xx;
loco = FindMasterLoco(car,NULL);
if (loco != NULL) {
StopTrain(loco, ST_Crashed);
}
- xx = GetTrkExtraData(car);
+ xx = GET_EXTRA_DATA(car, T_CAR, extraDataCar_t);
xx->trvTrk = *trvTrkP;
if (dir) {
@@ -1751,13 +1754,13 @@ static BOOL_T CheckCoupling(
BOOL_T doCheckCrash)
{
track_p car1;
- struct extraData *xx0, *xx1;
+ struct extraDataCar_t *xx0, *xx1;
coOrd pos1;
- DIST_T dist0, distc, dist=100000.0;
+ DIST_T dist0, distc, dist=DIST_INF;
int dir0, dir1, dirl;
ANGLE_T angle;
traverseTrack_t trvTrk0, trvTrk1;
- xx0 = xx1 = GetTrkExtraData(car0);
+ xx0 = xx1 = GET_EXTRA_DATA(car0, T_CAR, extraDataCar_t);
/* find length of train from loco to start and end */
dir0 = dir00;
dist0 = GetTrainLength2(&car0, &dir0);
@@ -1775,7 +1778,7 @@ static BOOL_T CheckCoupling(
return TRUE;
}
- xx1 = GetTrkExtraData(car1);
+ xx1 = GET_EXTRA_DATA(car1, T_CAR, extraDataCar_t);
if (!IsOnTrack(xx1)) {
return TRUE;
@@ -1866,7 +1869,7 @@ static BOOL_T CheckCoupling(
xx1 = NULL;
if (loco1) {
- xx1 = GetTrkExtraData(loco1);
+ xx1 = GET_EXTRA_DATA(loco1, T_CAR, extraDataCar_t);
speed1 = (long)xx1->speed;
if (car1 == loco1) {
@@ -1908,9 +1911,9 @@ static void PlaceTrain(
BOOL_T doCheckCoupling)
{
track_p car_curr;
- struct extraData *xx0;
+ struct extraDataCar_t *xx0;
int dir0;
- xx0 = GetTrkExtraData(car0);
+ xx0 = GET_EXTRA_DATA(car0, T_CAR, extraDataCar_t);
LOG(log_trainMove, 2, (" placeTrain: %s [%0.3f %0.3f] A%0.3f",
CarItemNumber(xx0->item), xx0->trvTrk.pos.x, xx0->trvTrk.pos.y,
xx0->trvTrk.angle))
@@ -1918,7 +1921,7 @@ static void PlaceTrain(
for (dir0=0; dir0<2; dir0++) {
int dir;
- struct extraData *xx;
+ struct extraDataCar_t *xx;
car_curr = car0;
dir = dir0;
xx = xx0;
@@ -1955,7 +1958,7 @@ static void PlaceTrainInit(
ANGLE_T angle0,
BOOL_T doCheckCoupling)
{
- struct extraData * xx = GetTrkExtraData(car0);
+ struct extraDataCar_t * xx = GET_EXTRA_DATA(car0, T_CAR, extraDataCar_t);
xx->trvTrk.trk = trk0;
xx->trvTrk.dist = xx->trvTrk.length = -1;
xx->trvTrk.pos = pos0;
@@ -1968,7 +1971,7 @@ static void FlipTrain(
track_p train)
{
DIST_T d0, d1;
- struct extraData * xx;
+ struct extraDataCar_t * xx;
if (train == NULL) {
return;
@@ -1976,7 +1979,7 @@ static void FlipTrain(
d0 = GetTrainLength(train, 0);
d1 = GetTrainLength(train, 1);
- xx = GetTrkExtraData(train);
+ xx = GET_EXTRA_DATA(train, T_CAR, extraDataCar_t);
TraverseTrack2(&xx->trvTrk, d0-d1);
FlipTraverseTrack(&xx->trvTrk);
xx->trvTrk.length = -1;
@@ -1989,7 +1992,7 @@ static BOOL_T MoveTrain(
long timeD)
{
DIST_T ips, dist0, dist1;
- struct extraData *xx, *xx1;
+ struct extraDataCar_t *xx, *xx1;
traverseTrack_t trvTrk;
DIST_T length;
track_p car1;
@@ -2000,7 +2003,7 @@ static BOOL_T MoveTrain(
return FALSE;
}
- xx = GetTrkExtraData(train);
+ xx = GET_EXTRA_DATA(train, T_CAR, extraDataCar_t);
if (xx->speed <= 0) {
return FALSE;
@@ -2086,7 +2089,7 @@ static BOOL_T MoveTrain(
}
followTrain = NULL;
- } else if (OFF_MAIND(xx->trvTrk.pos, xx->trvTrk.pos)) {
+ } else if (OFF_FOLLOW(xx->trvTrk.pos, xx->trvTrk.pos)) {
MoveMainWindow(xx->trvTrk.pos,
NormalizeAngle(xx->trvTrk.angle+(xx->direction?180.0:0.0)));
followCenter = mainCenter;
@@ -2102,14 +2105,14 @@ static BOOL_T MoveTrains(long timeD)
{
BOOL_T trains_moved = FALSE;
track_p train;
- struct extraData * xx;
+ struct extraDataCar_t * xx;
for (train=NULL; TrackIterate(&train);) {
if (GetTrkType(train) != T_CAR) {
continue;
}
- xx = GetTrkExtraData(train);
+ xx = GET_EXTRA_DATA(train, T_CAR, extraDataCar_t);
if (!CarItemIsLoco(xx->item)) {
continue;
@@ -2298,7 +2301,7 @@ void AttachTrains(void)
{
track_p car;
track_p loco;
- struct extraData * xx;
+ struct extraDataCar_t * xx;
coOrd pos;
track_p trk;
ANGLE_T angle;
@@ -2312,7 +2315,7 @@ void AttachTrains(void)
continue;
}
- xx = GetTrkExtraData(car);
+ xx = GET_EXTRA_DATA(car, T_CAR, extraDataCar_t);
ClrProcessed(xx);
}
@@ -2321,7 +2324,7 @@ void AttachTrains(void)
continue;
}
- xx = GetTrkExtraData(car);
+ xx = GET_EXTRA_DATA(car, T_CAR, extraDataCar_t);
if (IsProcessed(xx)) {
continue;
@@ -2330,7 +2333,7 @@ void AttachTrains(void)
loco = FindMasterLoco(car, NULL);
if (loco != NULL) {
- xx = GetTrkExtraData(loco);
+ xx = GET_EXTRA_DATA(loco, T_CAR, extraDataCar_t);
} else {
loco = car;
}
@@ -2390,7 +2393,7 @@ void AttachTrains(void)
continue;
}
- xx = GetTrkExtraData(car);
+ xx = GET_EXTRA_DATA(car, T_CAR, extraDataCar_t);
ClrProcessed(xx);
}
}
@@ -2399,7 +2402,7 @@ void AttachTrains(void)
static void UpdateTrainAttachment(void)
{
track_p trk;
- struct extraData * xx;
+ struct extraDataCar_t * xx;
for (trk=NULL; TrackIterate(&trk);) {
ClrTrkBits(trk, TB_CARATTACHED);
@@ -2407,7 +2410,7 @@ static void UpdateTrainAttachment(void)
for (trk=NULL; TrackIterate(&trk);) {
if (GetTrkType(trk) == T_CAR) {
- xx = GetTrkExtraData(trk);
+ xx = GET_EXTRA_DATA(trk, T_CAR, extraDataCar_t);
if (xx->trvTrk.trk != NULL) {
SetTrkBits(xx->trvTrk.trk, TB_CARATTACHED);
@@ -2422,7 +2425,7 @@ static BOOL_T TrainOnMovableTrack(
track_p *trainR)
{
track_p train;
- struct extraData * xx;
+ struct extraDataCar_t * xx;
int dir;
for (train=NULL; TrackIterate(&train);) {
@@ -2430,7 +2433,7 @@ static BOOL_T TrainOnMovableTrack(
continue;
}
- xx = GetTrkExtraData(train);
+ xx = GET_EXTRA_DATA(train, T_CAR, extraDataCar_t);
if (IsOnTrack(xx)) {
if (xx->trvTrk.trk == trk) {
@@ -2493,8 +2496,8 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
ANGLE_T angle1;
EPINX_T ep0, ep1;
int dir;
- struct extraData * xx=NULL;
- wPos_t w, h;
+ struct extraDataCar_t * xx=NULL;
+ wWinPix_t w, h;
switch (action) {
case C_START:
@@ -2507,11 +2510,11 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
if (CarAvailableCount() <= 0) {
if (NoticeMessage(MSG_NO_CARS, _("Yes"), _("No")) > 0) {
- DoCarDlg();
+ DoCarDlg(NULL);
DoChangeNotification(CHANGE_PARAMS);
}
}
-
+ SetAllTrackSelect( FALSE );
EnableCommands();
if (curTrainDlg == NULL) {
@@ -2525,7 +2528,7 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
tempSegs_da.cnt = 0;
DYNARR_SET(trkSeg_t, tempSegs_da, 8);
RestartTrains();
- wButtonSetLabel(trainPauseB, (char*)goI);
+ wButtonSetLabel(trainPauseB, (char*)goB);
trainTime0 = 0;
AttachTrains();
curTrainDlg->train = NULL;
@@ -2534,7 +2537,7 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
LocoListInit();
ControllerDialogSync(curTrainDlg);
wShow(curTrainDlg->win);
- wControlShow((wControl_p)newcarB, (toolbarSet&(1<<BG_HOTBAR)) == 0);
+ wControlShow((wControl_p)newcarB, (toolbarSet&(1<<BG_TRAIN)));
currCarItemPtr = NULL;
TempRedraw(); // CmdTrain C_START
return C_CONTINUE;
@@ -2568,7 +2571,7 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
return C_CONTINUE;
}
- xx = GetTrkExtraData(currCar);
+ xx = GET_EXTRA_DATA(currCar, T_CAR, extraDataCar_t);
xx->pencils = FALSE;
dist = CarItemCoupledLength(xx->item)/2.0;
Translate(&pos, xx->trvTrk.pos, xx->trvTrk.angle, dist);
@@ -2605,13 +2608,13 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
if (logTable(log_trainMove).level >= 1) {
if (currCar) {
- xx = GetTrkExtraData(currCar);
+ xx = GET_EXTRA_DATA(currCar, T_CAR, extraDataCar_t);
LogPrintf("selected %s\n", CarItemNumber(xx->item));
for (dir=0; dir<2; dir++) {
int dir1 = dir;
track_p car1 = currCar;
- struct extraData * xx1 = GetTrkExtraData(car1);
+ struct extraDataCar_t * xx1 = GET_EXTRA_DATA(car1, T_CAR, extraDataCar_t);
LogPrintf("dir=%d\n", dir1);
WALK_CARS_START(car1, xx1, dir1)
LogPrintf(" %s [%0.3f,%d]\n", CarItemNumber(xx1->item), xx1->trvTrk.angle,
@@ -2642,7 +2645,7 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
pos.x += delta.x;
pos.y += delta.y;
pos0 = pos;
- xx = GetTrkExtraData(currCar);
+ xx = GET_EXTRA_DATA(currCar, T_CAR, extraDataCar_t);
trk0 = OnTrack(&pos0, FALSE, TRUE);
if (/*currCarItemPtr != NULL &&*/ trk0) {
@@ -2672,7 +2675,7 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
trk0 = FindMasterLoco(currCar, NULL);
if (trk0) {
- xx = GetTrkExtraData(trk0);
+ xx = GET_EXTRA_DATA(trk0, T_CAR, extraDataCar_t);
if (!IsOnTrack(xx) || xx->speed <= 0) {
StopTrain(trk0, ST_StopManual);
@@ -2703,7 +2706,7 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
QueryTrack(trk0, Q_CAN_NEXT_POSITION) &&
TrainOnMovableTrack(trk0, &trk1)) {
if (trk1) {
- xx = GetTrkExtraData(trk1);
+ xx = GET_EXTRA_DATA(trk1, T_CAR, extraDataCar_t);
pos1 = xx->trvTrk.pos;
angle1 = xx->trvTrk.angle;
} else {
@@ -2750,7 +2753,7 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
return C_CONTINUE;
}
- xx = GetTrkExtraData(trainFuncCar);
+ xx = GET_EXTRA_DATA(trainFuncCar, T_CAR, extraDataCar_t);
if (xx->pencils) {
wMenuPushEnable(trainPopupMI[DO_PENCILS_OFF], TRUE);
wMenuPushEnable(trainPopupMI[DO_PENCILS_ON], FALSE);
@@ -2768,7 +2771,7 @@ static STATUS_T CmdTrain(wAction_t action, coOrd pos)
!IsLocoMaster(xx));
if (trk0) {
- xx = GetTrkExtraData(trk0);
+ xx = GET_EXTRA_DATA(trk0, T_CAR, extraDataCar_t);
}
wMenuPushEnable(trainPopupMI[DO_CHANGEDIR], trk0!=NULL);
@@ -2853,22 +2856,24 @@ STATUS_T CmdCarDescAction(
#include "bitmaps/train.xpm"
#include "bitmaps/exit.xpm"
-#include "bitmaps/newcar.xpm"
+#include "bitmaps/new-car.xpm"
#include "bitmaps/zero.xpm"
-#include "bitmaps/ballgreen.xpm"
-#include "bitmaps/ballred.xpm"
+#include "bitmaps/go.xpm"
+#include "bitmaps/stop.xpm"
+#include "bitmaps/greendot.xpm"
+#include "bitmaps/reddot.xpm"
-static void CmdTrainStopGo(void * junk)
+static void CmdTrainStopGo(void * unused)
{
wIcon_p icon;
if (trainsState == TRAINS_STOP) {
- icon = goI;
+ icon = goB;
RestartTrains();
} else {
trainsState = TRAINS_STOP;
- icon = stopI;
+ icon = stopB;
TrainTimeEndPause();
}
@@ -2894,7 +2899,7 @@ static BOOL_T TrainStopGoPlayback(char * line)
}
-static void CmdTrainExit(void * junk)
+static void CmdTrainExit(void * unused)
{
Reset();
InfoSubstituteControls(NULL, NULL);
@@ -2904,7 +2909,7 @@ static void CmdTrainExit(void * junk)
static void TrainFunc(
void * action)
{
- struct extraData * xx, *xx1;
+ struct extraDataCar_t * xx, *xx1;
ANGLE_T angle;
int dir;
track_p loco;
@@ -2918,12 +2923,12 @@ static void TrainFunc(
return;
}
- xx = GetTrkExtraData(trainFuncCar);
+ xx = GET_EXTRA_DATA(trainFuncCar, T_CAR, extraDataCar_t);
angle = FindAngle(xx->trvTrk.pos, trainFuncPos);
angle = NormalizeAngle(angle-xx->trvTrk.angle);
dir = (angle>90&&angle<270);
- switch ((int)(long)action) {
+ switch (VP2L(action)) {
case DO_UNCOUPLE:
if (GetTrkEndTrk(trainFuncCar,dir)) {
UncoupleCars(trainFuncCar, GetTrkEndTrk(trainFuncCar,dir));
@@ -3010,7 +3015,7 @@ static void TrainFunc(
WALK_CARS_START(trainFuncCar, xx, dir)
if (temp0) {
- xx1 = GetTrkExtraData(temp0);
+ xx1 = GET_EXTRA_DATA(temp0, T_CAR, extraDataCar_t);
temp0->deleted = TRUE;
/*DeleteTrack( temp0, FALSE );*/
CarItemUpdate(xx1->item);
@@ -3020,7 +3025,7 @@ static void TrainFunc(
WALK_CARS_END(trainFuncCar, xx, dir)
if (temp0) {
- xx1 = GetTrkExtraData(temp0);
+ xx1 = GET_EXTRA_DATA(temp0, T_CAR, extraDataCar_t);
temp0->deleted = TRUE;
/*DeleteTrack( temp0, FALSE );*/
CarItemUpdate(xx1->item);
@@ -3043,7 +3048,7 @@ static void TrainFunc(
LOG(log_trainMove, 1, ("%s gets master\n", CarItemNumber(xx->item)))
if (loco) {
- xx1 = GetTrkExtraData(loco);
+ xx1 = GET_EXTRA_DATA(loco, T_CAR, extraDataCar_t);
ClrLocoMaster(xx1);
LOG(log_trainMove, 1, ("%s looses master\n", CarItemNumber(xx1->item)))
xx->speed = xx1->speed;
@@ -3060,7 +3065,7 @@ static void TrainFunc(
loco = FindMasterLoco(trainFuncCar, NULL);
if (loco) {
- xx = GetTrkExtraData(loco);
+ xx = GET_EXTRA_DATA(loco, T_CAR, extraDataCar_t);
xx->direction = !xx->direction;
SetTrainDirection(loco);
ControllerDialogSync(curTrainDlg);
@@ -3095,40 +3100,43 @@ void InitCmdTrain(wMenu_p menu)
log_trainPlayback = LogFindIndex("trainPlayback");
trainPLs[I_ZERO].winLabel = (char*)wIconCreatePixMap(zero_xpm);
ParamRegister(&trainPG);
- trainCmdInx = AddMenuButton(menu, CmdTrain, "cmdTrain", _("Train"),
- wIconCreatePixMap(train_xpm), LEVEL0_50, IC_POPUP3|IC_LCLICK|IC_RCLICK, 0,
+ trainCmdInx = AddMenuButton(menu, CmdTrain, "cmdTrain", _("Run Trains"),
+ wIconCreatePixMap(train_xpm[iconSize]), LEVEL0_50, IC_POPUP3|IC_LCLICK|IC_RCLICK, 0,
NULL);
- stopI = wIconCreatePixMap(ballred);
- goI = wIconCreatePixMap(ballgreen);
- trainPauseB = AddToolbarButton("cmdTrainPause", stopI, IC_MODETRAIN_ONLY,
+ stopI = wIconCreatePixMap(reddot);
+ goI = wIconCreatePixMap(greendot);
+ stopB = wIconCreatePixMap(stop_xpm[iconSize]);
+ goB = wIconCreatePixMap(go_xpm[iconSize]);
+ trainPauseB = AddToolbarButton("cmdTrainPause", stopB, IC_MODETRAIN_ONLY,
CmdTrainStopGo, NULL);
- AddToolbarButton("cmdTrainExit", wIconCreatePixMap(exit_xpm), IC_MODETRAIN_ONLY,
+ AddToolbarButton("cmdTrainExit", wIconCreatePixMap(exit_xpm[iconSize]), IC_MODETRAIN_ONLY,
CmdTrainExit, NULL);
- newcarB = AddToolbarButton("cmdTrainNewCar", wIconCreatePixMap(newcar_xpm),
+ newcarB = AddToolbarButton("cmdTrainNewCar", wIconCreatePixMap(new_car_xpm[iconSize]),
IC_MODETRAIN_ONLY, CarItemLoadList, NULL);
T_CAR = InitObject(&carCmds);
- trainPopupM = MenuRegister("Train Commands");
+
+ trainPopupM = MenuRegister("Train Commands");
trainPopupMI[DO_UNCOUPLE] = wMenuPushCreate(trainPopupM, "", _("Uncouple"), 0,
- TrainFunc, (void*)DO_UNCOUPLE);
+ TrainFunc, I2VP(DO_UNCOUPLE));
trainPopupMI[DO_FLIPCAR] = wMenuPushCreate(trainPopupM, "", _("Flip Car"), 0,
- TrainFunc, (void*)DO_FLIPCAR);
+ TrainFunc, I2VP(DO_FLIPCAR));
trainPopupMI[DO_PENCILS_ON] = wMenuPushCreate(trainPopupM, "", _("Clearance Lines On"), 0,
- TrainFunc, (void*)DO_PENCILS_ON);
+ TrainFunc, I2VP(DO_PENCILS_ON));
trainPopupMI[DO_PENCILS_OFF] = wMenuPushCreate(trainPopupM, "", _("Clearance Lines Off"), 0,
- TrainFunc, (void*)DO_PENCILS_OFF);
+ TrainFunc, I2VP(DO_PENCILS_OFF));
trainPopupMI[DO_FLIPTRAIN] = wMenuPushCreate(trainPopupM, "", _("Flip Train"),
- 0, TrainFunc, (void*)DO_FLIPTRAIN);
+ 0, TrainFunc, I2VP(DO_FLIPTRAIN));
trainPopupMI[DO_MUMASTER] = wMenuPushCreate(trainPopupM, "", _("MU Master"),
- 0, TrainFunc, (void*)DO_MUMASTER);
+ 0, TrainFunc, I2VP(DO_MUMASTER));
trainPopupMI[DO_CHANGEDIR] = wMenuPushCreate(trainPopupM, "",
- _("Change Direction"), 0, TrainFunc, (void*)DO_CHANGEDIR);
+ _("Change Direction"), 0, TrainFunc, I2VP(DO_CHANGEDIR));
trainPopupMI[DO_STOP] = wMenuPushCreate(trainPopupM, "", _("Stop"), 0,
- TrainFunc, (void*)DO_STOP);
+ TrainFunc, I2VP(DO_STOP));
wMenuSeparatorCreate(trainPopupM);
trainPopupMI[DO_DELCAR] = wMenuPushCreate(trainPopupM, "", _("Remove Car"),
- 0, TrainFunc, (void*)DO_DELCAR);
+ 0, TrainFunc, I2VP(DO_DELCAR));
trainPopupMI[DO_DELTRAIN] = wMenuPushCreate(trainPopupM, "",
- _("Remove Train"), 0, TrainFunc, (void*)DO_DELTRAIN);
+ _("Remove Train"), 0, TrainFunc, I2VP(DO_DELTRAIN));
AddPlaybackProc("TRAINSTOPGO", (playbackProc_p)TrainStopGoPlayback, NULL);
AddPlaybackProc("TRAINPAUSE", (playbackProc_p)TrainTimeDoPause, NULL);
AddPlaybackProc("TRAINMOVIE", (playbackProc_p)TrainDoMovie, NULL);