void CSkinManager::RefreshAllSkins(bool bReload) { Combo()->Refresh(); MainFrame()->Refresh(); FavorBar()->Refresh(); MenuBar()->Refresh(); Tab()->Refresh(); Category()->Refresh(); Toolbar()->Refresh(); HelpButton()->Refresh(); LoadButton()->Refresh(); LoginButton()->Refresh(); SepButton()->Refresh(); SettingButton()->Refresh(); BigButton()->Refresh(); SSLLockButton()->Refresh(); StatusBar()->Refresh(); Tooltip()->Refresh(); MenuButton()->Refresh(); LogoButton()->Refresh(); Common()->Refresh(bReload); BackButton()->Refresh(); ForwardButton()->Refresh(); RefreshButton()->Refresh(); CoolMenuSkin()->Refresh(); }
void ActivateHuman (void) { if (ichangecolorh == 1) { sprintf (wplayername, "%s", gtk_entry_get_text (GTK_ENTRY (humentry))); wiscomputer = 0; } else { sprintf (bplayername, "%s", gtk_entry_get_text (GTK_ENTRY (humentry))); biscomputer = 0; } gtk_widget_destroy (humwindow); iyesno = 0; StatusBar (); }
void CAppWnd::OnCreate(const CRect& rcClient) { // // Create and attach the components. // m_Accel.LoadRsc(IDR_APPACCEL); Accel(&m_Accel); m_Menu.LoadRsc(IDR_APPMENU); Menu(&m_Menu); m_StatusBar.Create(*this, IDC_STATUS_BAR, rcClient); StatusBar(&m_StatusBar); m_AppDlg.RunModeless(*this); // Call base class. CDlgFrame::OnCreate(rcClient); }
void Explorerplusplus::OnTreeViewRightClick(WPARAM wParam,LPARAM lParam) { LPITEMIDLIST pidl = NULL; POINT *ppt = NULL; HTREEITEM hItem; HTREEITEM hPrevItem; IShellFolder *pShellParentFolder = NULL; LPITEMIDLIST pidlRelative = NULL; HRESULT hr; hItem = (HTREEITEM)wParam; ppt = (POINT *)lParam; m_bTreeViewRightClick = TRUE; hPrevItem = TreeView_GetSelection(m_hTreeView); TreeView_SelectItem(m_hTreeView,hItem); pidl = m_pMyTreeView->BuildPath(hItem); hr = SHBindToParent(pidl, IID_PPV_ARGS(&pShellParentFolder), (LPCITEMIDLIST *)&pidlRelative); if(SUCCEEDED(hr)) { HTREEITEM hParent; LPITEMIDLIST pidlParent = NULL; hParent = TreeView_GetParent(m_hTreeView,hItem); /* If we right-click on the "Desktop" item in the treeview, there is no parent. In such case, use "Desktop" as parent item as well, to allow the context menu to be shown. */ if(hParent == NULL) { hParent = hItem; } if(hParent != NULL) { pidlParent = m_pMyTreeView->BuildPath(hParent); if(pidlParent != NULL) { m_bTreeViewOpenInNewTab = FALSE; std::list<LPITEMIDLIST> pidlList; pidlList.push_back(pidlRelative); CFileContextMenuManager fcmm(m_hContainer,pidlParent, pidlList); FileContextMenuInfo_t fcmi; fcmi.uFrom = FROM_TREEVIEW; CStatusBar StatusBar(m_hStatusBar); fcmm.ShowMenu(this,MIN_SHELL_MENU_ID,MAX_SHELL_MENU_ID,ppt,&StatusBar, reinterpret_cast<DWORD_PTR>(&fcmi),TRUE,GetKeyState(VK_SHIFT) & 0x80); CoTaskMemFree(pidlParent); } } pShellParentFolder->Release(); } /* Don't switch back to the previous folder if the folder that was right-clicked was opened in a new tab (i.e. can just keep the selection the same). */ if(!m_bTreeViewOpenInNewTab) TreeView_SelectItem(m_hTreeView,hPrevItem); m_bTreeViewRightClick = FALSE; CoTaskMemFree(pidl); }
BOOL FAR TMSRPT04(TMSRPTPassedDataDef *pPassedData) { GenerateTripDef GTResults; REPORTPARMSDef REPORTPARMS; HFILE hfOutputFile; BOOL bKeepGoing = FALSE; BOOL bRC; char routeNumber[ROUTES_NUMBER_LENGTH + 1]; char serviceName[SERVICES_NAME_LENGTH + 1]; char outputString[512]; long statbarTotal; int nI; int nJ; int nK; int nL; int rcode2; pPassedData->nReportNumber = 3; pPassedData->numDataFiles = 1; // // See what he wants // REPORTPARMS.nReportNumber = pPassedData->nReportNumber; REPORTPARMS.ROUTESrecordID = m_RouteRecordID; REPORTPARMS.SERVICESrecordID = m_ServiceRecordID; REPORTPARMS.COMMENTSrecordID = NO_RECORD; REPORTPARMS.pRouteList = NULL; REPORTPARMS.pServiceList = NULL; REPORTPARMS.flags = RPFLAG_ROUTES | RPFLAG_SERVICES | RPFLAG_COMMENTS; bRC = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_RPTPARMS), hWndMain, (DLGPROC)RPTPARMSMsgProc, (LPARAM)&REPORTPARMS); if(!bRC) { return(FALSE); } // // Check the list of routes and services // if(REPORTPARMS.numRoutes == 0 || REPORTPARMS.numServices == 0) { goto deallocate; } // // Open the output file // strcpy(tempString, szReportsTempFolder); strcat(tempString, "\\tmsrpt04.txt"); hfOutputFile = _lcreat(tempString, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_202, szFormatString, sizeof(szFormatString)); sprintf(szarString, szFormatString, tempString); MessageBeep(MB_ICONSTOP); MessageBox((HWND)NULL, szarString, TMS, MB_ICONSTOP); goto deallocate; } strcpy(pPassedData->szReportDataFile[0], tempString); // // Loop through the routes // LoadString(hInst, TEXT_117, tempString, TEMPSTRING_LENGTH); StatusBarStart(hWndMain, tempString); statbarTotal = REPORTPARMS.numRoutes * REPORTPARMS.numServices; for(nI = 0; nI < REPORTPARMS.numRoutes; nI++) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } ROUTESKey0.recordID = REPORTPARMS.pRouteList[nI]; rcode2 = btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0); if(rcode2 != 0) { continue; } strncpy(routeNumber, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(routeNumber, ROUTES_NUMBER_LENGTH); // // Loop through the services // for(nJ = 0; nJ < REPORTPARMS.numServices; nJ++) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } SERVICESKey0.recordID = REPORTPARMS.pServiceList[nJ]; rcode2 = btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); if(rcode2 != 0) { continue; } strncpy(serviceName, SERVICES.name, SERVICES_NAME_LENGTH); trim(serviceName, SERVICES_NAME_LENGTH); LoadString(hInst, TEXT_118, szarString, sizeof(szarString)); sprintf(tempString, szarString, routeNumber, serviceName); StatusBarText(tempString); StatusBar((long)(nI * REPORTPARMS.numServices + nJ), (long)statbarTotal); if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } // // Loop through the directions // for(nK = 0; nK < 2; nK++) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } if(ROUTES.DIRECTIONSrecordID[nK] == NO_RECORD) { continue; } DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[nK]; rcode2 = btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); if(rcode2 != 0) { continue; } m_bEstablishRUNTIMES = TRUE; // // Get all the trips // TRIPSKey1.ROUTESrecordID = REPORTPARMS.pRouteList[nI]; TRIPSKey1.SERVICESrecordID = REPORTPARMS.pServiceList[nJ]; TRIPSKey1.directionIndex = nK; TRIPSKey1.tripSequence = NO_TIME; rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_TRIPS, &TRIPS, &TRIPSKey1, 1); while(rcode2 == 0 && TRIPS.ROUTESrecordID == REPORTPARMS.pRouteList[nI] && TRIPS.SERVICESrecordID == REPORTPARMS.pServiceList[nJ] && TRIPS.directionIndex == nK) { // // Generate the trip // GenerateTrip(TRIPS.ROUTESrecordID, TRIPS.SERVICESrecordID, TRIPS.directionIndex, TRIPS.PATTERNNAMESrecordID, TRIPS.timeAtMLP, GENERATETRIP_FLAG_DISPLAYERRORS, >Results); // // Set up the output string // strcpy(outputString, ""); for(nL = 0; nL < NUMCOLS; nL++) { switch(nL) { // // Route number // case 0: strncpy(tempString, ROUTES.number, ROUTES_NUMBER_LENGTH); tempString[ROUTES_NUMBER_LENGTH] = '\0'; sprintf(szarString, "\"%s\"", tempString); break; // // Route name // case 1: strncpy(tempString, ROUTES.name, ROUTES_NAME_LENGTH); tempString[ROUTES_NAME_LENGTH] = '\0'; sprintf(szarString, "\"%s\"", tempString); break; // // Service Name // case 2: strncpy(tempString, SERVICES.name, SERVICES_NAME_LENGTH); tempString[SERVICES_NAME_LENGTH] = '\0'; sprintf(szarString, "\"%s\"", tempString); break; // // Direction // case 3: strncpy(tempString, DIRECTIONS.longName, DIRECTIONS_LONGNAME_LENGTH); tempString[DIRECTIONS_LONGNAME_LENGTH] = '\0'; sprintf(szarString, "\"%s\"", tempString); break; // // Trip time (in minutes) // case 4: sprintf(szarString, "%ld", GTResults.lastNodeTime - GTResults.firstNodeTime); break; // // Distance // case 5: sprintf(szarString, "%7.2f", GTResults.tripDistance); break; } // End of switch strcat(outputString, szarString); strcat(outputString, nL == NUMCOLS - 1 ? "\r\n" : "\t"); } // nL _lwrite(hfOutputFile, outputString, strlen(outputString)); rcode2 = btrieve(B_GETNEXT, TMS_TRIPS, &TRIPS, &TRIPSKey1, 1); } // while } // nK } // nJ } // nI bKeepGoing = TRUE; // // Free allocated memory // deallocate: TMSHeapFree(REPORTPARMS.pRouteList); TMSHeapFree(REPORTPARMS.pServiceList); _lclose(hfOutputFile); StatusBarEnd(); if(!bKeepGoing) { return(FALSE); } // // All done // return(TRUE); }
BOOL FAR TMSRPT67(TMSRPTPassedDataDef *pPassedData) { NodesAndStopsDef NodesAndStops[TMSRPT67_MAXNODESANDSTOPS]; GetConnectionTimeDef GCTData; GenerateTripDef GTResults; BLOCKSDef *pTRIPSChunk; double prevLat, prevLon; HFILE hfOutputFile; HFILE hfErrorLog; float distanceToHere; float tripDistances[100]; float distance; struct tm tmED, tmUD, today; time_t EDmktime; time_t UDmktime; time_t now; BOOL bFound; BOOL bGotError; BOOL bFinishedOK; BOOL bBikeRack; BOOL bFirst; long SERVICESinEffect[TMSRPT66_MAXSERVICES]; long year, month, day; long serviceRecordID; long previousPattern; long timeAtStop; long absRecID; long stopFlags; long stopNumber; long assignedToNODESrecordID; long blockNumber; long fromNODESrecordID; long toNODESrecordID; long toTime; long fromTime; long dhd; long number; char outputString[1024]; char outputStringSave[1024]; char out2[1024]; char *ptr; char *pszReportName; char outputFileName[64]; char szServiceCode[SERVICES_NAME_LENGTH + 1]; char szTripCode[16]; int nI; int rcode2; int dayOfWeek; int numServices; int tripIndex; int numNodes; int seq; bFinishedOK = FALSE; // // Maintain the distance measure // distanceMeasureSave = distanceMeasure; distanceMeasure = PREFERENCES_MILES; // // Set up the trip planner // if(bUseDynamicTravels) { if(bUseCISPlan) { CISfree(); if(!CISbuild(FALSE, TRUE)) { goto done; } } else { rcode2 = btrieve(B_GETFIRST, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); while(rcode2 == 0) { serviceRecordID = SERVICES.recordID; InitTravelMatrix(serviceRecordID, TRUE); SERVICESKey0.recordID = serviceRecordID; btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); btrieve(B_GETPOSITION, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); btrieve(B_GETDIRECT, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); rcode2 = btrieve(B_GETNEXT, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); } } } // // Create the sub-folder for the output files and chdir into it // nI = (_mkdir(OUTPUT_FOLDER_NAME) == 0) ? TEXT_333 : TEXT_334; LoadString(hInst, nI, szFormatString, SZFORMATSTRING_LENGTH); sprintf(tempString, szFormatString, OUTPUT_FOLDER_NAME); MessageBeep(MB_ICONINFORMATION); MessageBox(NULL, tempString, TMS, MB_OK); chdir(OUTPUT_FOLDER_NAME); // // Open the error log and fire up the status bar // hfErrorLog = _lcreat("error.log", 0); if(hfErrorLog == HFILE_ERROR) { TMSError((HWND)NULL, MB_ICONSTOP, ERROR_226, (HANDLE)NULL); goto done; } bGotError = FALSE; pPassedData->nReportNumber = 66; for(nI = 0; nI < m_LastReport; nI++) { if(TMSRPT[nI].originalReportNumber == pPassedData->nReportNumber) { pszReportName = TMSRPT[nI].szReportName; StatusBarStart(hWndMain, TMSRPT[nI].szReportName); break; } } // // Get today's date // time(&now); today = *localtime(&now); // // ============================== // Service File - oci_service.csv // ============================== // if(StatusBarAbort()) { goto done; } strcpy(outputFileName, "oci_service.csv"); hfOutputFile = _lcreat(outputFileName, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_320, szFormatString, SZFORMATSTRING_LENGTH); sprintf(szarString, szFormatString, outputFileName); MessageBeep(MB_ICONSTOP); MessageBox(NULL, szarString, TMS, MB_OK | MB_ICONSTOP); goto done; } StatusBarText(outputFileName); // // Write out the header // strcpy(outputString, "\"ServiceCode\",\"Date\"\r\n"); _lwrite(hfOutputFile, outputString, strlen(outputString)); numServices = 0; // // Dump out the service day based on calendar days // // Effective date // GetYMD(effectiveDate, &year, &month, &day); memset(&tmED, 0x00, sizeof(tmED)); tmED.tm_mday = day; tmED.tm_mon = month - 1; tmED.tm_year = year - 1900; // // Until date // GetYMD(untilDate, &year, &month, &day); memset(&tmUD, 0x00, sizeof(tmUD)); tmUD.tm_mday = day; tmUD.tm_mon = month - 1; tmUD.tm_year = year - 1900; // // Start at the effective date and go to the until date // EDmktime = mktime(&tmED); if(EDmktime == (time_t)(-1)) { LoadString(hInst, ERROR_328, szFormatString, SZFORMATSTRING_LENGTH); sprintf(outputString, szFormatString, 1); _lwrite(hfErrorLog, outputString, strlen(outputString)); bGotError = TRUE; } else { UDmktime = mktime(&tmUD); while(EDmktime <= UDmktime) { if(StatusBarAbort()) { goto done; } dayOfWeek = (tmED.tm_wday == 0 ? 6 : tmED.tm_wday - 1); for(bFound = FALSE, nI = 0; nI < numServices; nI++) { if(ROSTERPARMS.serviceDays[dayOfWeek] == SERVICESinEffect[nI]) { bFound = TRUE; break; } } if(!bFound) { SERVICESinEffect[numServices] = ROSTERPARMS.serviceDays[dayOfWeek]; numServices++; } // // ServiceCode (SERVICES.recordID) // SERVICESKey0.recordID = ROSTERPARMS.serviceDays[dayOfWeek]; btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); strncpy(tempString, SERVICES.name, SERVICES_NAME_LENGTH); trim(tempString, SERVICES_NAME_LENGTH); sprintf(szarString, "\"%s\",", tempString); strcpy(outputString, szarString); // // Date // sprintf(szarString, "\"%4ld%02ld%02ld\"\r\n", tmED.tm_year + 1900, tmED.tm_mon + 1, tmED.tm_mday); strcat(outputString, szarString); // // Write out the record // _lwrite(hfOutputFile, outputString, strlen(outputString)); // // Figure out the next day // tmED.tm_mday++; EDmktime = mktime(&tmED); if(EDmktime == (time_t)(-1)) { LoadString(hInst, ERROR_328, szFormatString, SZFORMATSTRING_LENGTH); sprintf(outputString, szFormatString, 1); _lwrite(hfErrorLog, outputString, strlen(outputString)); bGotError = TRUE; } } } // // Close the file // _lclose(hfOutputFile); // // ============================ // Routes File - oci_routes.csv // ============================ // if(StatusBarAbort()) { goto done; } strcpy(outputFileName, "oci_routes.csv"); hfOutputFile = _lcreat(outputFileName, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_320, szFormatString, SZFORMATSTRING_LENGTH); sprintf(szarString, szFormatString, outputFileName); MessageBeep(MB_ICONSTOP); MessageBox(NULL, szarString, TMS, MB_OK | MB_ICONSTOP); goto done; } StatusBarText(outputFileName); // // Write out the header // strcpy(outputString, "\"RouteCode\",\"RouteName\",\"DirectionCode\",\"DirectionName\",\"PatternCode\",\"PatternName\"\r\n"); _lwrite(hfOutputFile, outputString, strlen(outputString)); // // Traverse the Routes Table // rcode2 = btrieve(B_GETFIRST, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); while(rcode2 == 0) { if(StatusBarAbort()) { goto done; } // // Go through the directions // for(nI = 0; nI < 2; nI++) { if(ROUTES.DIRECTIONSrecordID[nI] == NO_RECORD) { continue; } // // RouteCode (ROUTES.number) // strncpy(tempString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(tempString, ROUTES_NUMBER_LENGTH); ptr = tempString; while(ptr && *ptr == ' ') { ptr++; } sprintf(szarString, "\"%s\",", ptr); strcpy(outputString, szarString); // // RouteName (ROUTES.name) // strncpy(tempString, ROUTES.name, ROUTES_NAME_LENGTH); trim(tempString, ROUTES_NAME_LENGTH); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // DirectionCode (DIRECTIONS.abbrName) // DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[nI]; btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); strncpy(tempString, DIRECTIONS.abbrName, DIRECTIONS_ABBRNAME_LENGTH); trim(tempString, DIRECTIONS_ABBRNAME_LENGTH); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // DirectionName (DIRECTIONS.longName) // DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[nI]; btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); strncpy(tempString, DIRECTIONS.longName, DIRECTIONS_LONGNAME_LENGTH); trim(tempString, DIRECTIONS_LONGNAME_LENGTH); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Cycle through the patterns for route/service/direction // strcpy(outputStringSave, outputString); rcode2 = btrieve(B_GETFIRST, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); while(rcode2 == 0) { PATTERNSKey2.ROUTESrecordID = ROUTES.recordID; PATTERNSKey2.SERVICESrecordID = SERVICES.recordID; PATTERNSKey2.PATTERNNAMESrecordID = basePatternRecordID; PATTERNSKey2.directionIndex = nI; PATTERNSKey2.nodeSequence = NO_RECORD; previousPattern = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); while(rcode2 == 0 && PATTERNS.ROUTESrecordID == ROUTES.recordID && PATTERNS.SERVICESrecordID == SERVICES.recordID && PATTERNS.directionIndex == nI) { if(PATTERNS.PATTERNNAMESrecordID != previousPattern) { // // PatternCode (SERVICES.recordID-PATTERNNAMES.recordID) // sprintf(szarString, "\"%ld-%ld\",", SERVICES.recordID, PATTERNS.PATTERNNAMESrecordID); strcat(outputString, szarString); // // PatternName (PATTERNNAMES.name) // PATTERNNAMESKey0.recordID = PATTERNS.PATTERNNAMESrecordID; btrieve(B_GETEQUAL, TMS_PATTERNNAMES, &PATTERNNAMES, &PATTERNNAMESKey0, 0); strncpy(tempString, PATTERNNAMES.name, PATTERNNAMES_NAME_LENGTH); trim(tempString, PATTERNNAMES_NAME_LENGTH); sprintf(szarString, "\"%s\"\r\n", tempString); strcat(outputString, szarString); // // Write out the record and get the next pattern // _lwrite(hfOutputFile, outputString, strlen(outputString)); strcpy(outputString, outputStringSave); previousPattern = PATTERNS.PATTERNNAMESrecordID; } rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } rcode2 = btrieve(B_GETNEXT, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); } } // nI // // Get the next route // rcode2 = btrieve(B_GETNEXT, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); } // // Close the file // _lclose(hfOutputFile); // // ============================== // Bus Stops File - oci_stops.csv // ============================== // if(StatusBarAbort()) { goto done; } strcpy(outputFileName, "oci_stops.csv"); hfOutputFile = _lcreat(outputFileName, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_320, szFormatString, SZFORMATSTRING_LENGTH); sprintf(szarString, szFormatString, outputFileName); MessageBeep(MB_ICONSTOP); MessageBox(NULL, szarString, TMS, MB_OK | MB_ICONSTOP); goto done; } // // Write out the header // strcpy(outputString, "\"StopCode\",\"StopName\",\"Latitude\",\"Longitude\",\"Shelter\",\"Bench\",\"Accessible\",\"TimingPoint\"\r\n"); _lwrite(hfOutputFile, outputString, strlen(outputString)); StatusBarText(outputFileName); // // Get the list of nodes // // // Cycle through the Nodes Table to get associated stop numbers // rcode2 = btrieve(B_GETFIRST, TMS_NODES, &NODES, &NODESKey0, 0); numNodes = 0; while(rcode2 == 0) { if(!(NODES.flags & NODES_FLAG_STOP)) { NodesAndStops[numNodes].NODESrecordID = NODES.recordID; NodesAndStops[numNodes].StopNumber = NODES.number; NodesAndStops[numNodes].OutboundStopNumber = NODES.OBStopNumber; NodesAndStops[numNodes].InboundStopNumber = NODES.IBStopNumber; numNodes++; if(numNodes >= TMSRPT67_MAXNODESANDSTOPS) { MessageBeep(MB_ICONSTOP); MessageBox(NULL, "TMSRPT67_MAXNODESANDSTOPS Exceeded.\n\nPlease contact Schedule Masters, Inc. for help", TMS, MB_OK | MB_ICONSTOP); goto done; } } rcode2 = btrieve(B_GETNEXT, TMS_NODES, &NODES, &NODESKey0, 0); } // // Cycle through the Nodes Table // rcode2 = btrieve(B_GETFIRST, TMS_NODES, &NODES, &NODESKey0, 0); while(rcode2 == 0) { // // StopCode (NODES.number or NODES.abbrName) // if(NODES.flags & NODES_FLAG_STOP) { sprintf(szarString, "\"%04ld\",", NODES.number); } else { // strncpy(tempString, NODES.abbrName, NODES_ABBRNAME_LENGTH); // trim(tempString, NODES_ABBRNAME_LENGTH); // sprintf(szarString, "\"%s\",", tempString); if(nI == 0) { number = (NODES.OBStopNumber <= 0 ? NODES.number : NODES.OBStopNumber); } else { number = (NODES.IBStopNumber <= 0 ? NODES.number : NODES.IBStopNumber); } sprintf(szarString, "\"%04ld\",", number); } strcpy(outputString, szarString); // // StopName (NODES.intersection) // strncpy(tempString, NODES.intersection, NODES_INTERSECTION_LENGTH); trim(tempString, NODES_INTERSECTION_LENGTH); ptr = strstr(tempString, "&&"); if(ptr) { *ptr = 'a'; *(ptr + 1) = 't'; } sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Latitude (NODES.latitude) // sprintf(tempString, "%12.6f", NODES.latitude); ptr = tempString; while(ptr && *ptr == ' ') { ptr++; } sprintf(szarString, "\"%s\",", ptr); strcat(outputString, szarString); // // Longitude (NODES.longitude) // sprintf(tempString, "%12.6f", NODES.longitude); ptr = tempString; while(ptr && *ptr == ' ') { ptr++; } sprintf(szarString, "\"%s\",", ptr); strcat(outputString, szarString); // // If this isn't a stop, look to see if we can find the stop in the Nodes Table // if(NODES.flags & NODES_FLAG_STOP) { stopFlags = NODES.stopFlags; } else { stopFlags = 0; stopNumber = NO_RECORD; if(NODES.number > 0) { stopNumber = NODES.number; } if(stopNumber == NO_RECORD && NODES.OBStopNumber > 0) { stopNumber = NODES.OBStopNumber; } if(stopNumber == NO_RECORD && NODES.IBStopNumber > 0) { stopNumber = NODES.IBStopNumber; } if(stopNumber != NO_RECORD) { btrieve(B_GETPOSITION, TMS_NODES, &absRecID, &NODESKey0, 0); rcode2 = btrieve(B_GETFIRST, TMS_NODES, &NODES, &NODESKey0, 0); while(rcode2 == 0) { if(NODES.flags & NODES_FLAG_STOP) { if(NODES.number == stopNumber) { stopFlags = NODES.stopFlags; break; } } rcode2 = btrieve(B_GETNEXT, TMS_NODES, &NODES, &NODESKey0, 0); } NODES.recordID = absRecID; btrieve(B_GETDIRECT, TMS_NODES, &NODES, &NODESKey0, 0); } } // // Shelter (item 12 from "Stop Flags.txt") // sprintf(tempString, (stopFlags & (1 << 12) ? "True" : "False")); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Bench (item 5 from "Stop Flags.txt") // sprintf(tempString, (stopFlags & (1 << 5) ? "True" : "False")); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Accessible (item 16 from "Stop Flags.txt") // sprintf(tempString, (stopFlags & (1 << 6) ? "True" : "False")); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Timing point? // if(!(NODES.flags & NODES_FLAG_STOP)) { bFound = TRUE; } else { bFound = FALSE; for(nI = 0; nI < numNodes; nI++) { if(NodesAndStops[nI].StopNumber == NODES.number || NodesAndStops[nI].OutboundStopNumber == NODES.number || NodesAndStops[nI].InboundStopNumber == NODES.number) { bFound = TRUE; break; } } } sprintf(tempString, (bFound ? "True" : "False")); sprintf(szarString, "\"%s\"\r\n", tempString); strcat(outputString, szarString); // // Write it out and get the next node // _lwrite(hfOutputFile, outputString, strlen(outputString)); rcode2 = btrieve(B_GETNEXT, TMS_NODES, &NODES, &NODESKey0, 0); } // // Close the file // _lclose(hfOutputFile); // // ==================================== // Bus Patterns File - oci_patterns.csv // ==================================== // if(StatusBarAbort()) { goto done; } strcpy(outputFileName, "oci_patterns.csv"); hfOutputFile = _lcreat(outputFileName, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_320, szFormatString, SZFORMATSTRING_LENGTH); sprintf(szarString, szFormatString, outputFileName); MessageBeep(MB_ICONSTOP); MessageBox(NULL, szarString, TMS, MB_OK | MB_ICONSTOP); goto done; } // // Write out the header // strcpy(outputString, "\"RouteCode\",\"DirectionCode\",\"PatternCode\",\"StopCode\",\"Sequence\"\r\n"); _lwrite(hfOutputFile, outputString, strlen(outputString)); StatusBarText(outputFileName); // // Traverse the Routes Table // rcode2 = btrieve(B_GETFIRST, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); while(rcode2 == 0) { if(StatusBarAbort()) { goto done; } for(nI = 0; nI < 2; nI++) { if(ROUTES.DIRECTIONSrecordID[nI] == NO_RECORD) { continue; } // // RouteCode (ROUTES.number) // strncpy(tempString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(tempString, ROUTES_NUMBER_LENGTH); ptr = tempString; while(ptr && *ptr == ' ') { ptr++; } sprintf(szarString, "\"%s\",", ptr); strcpy(outputString, szarString); // // DirectionCode (DIRECTIONS.abbrName) // DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[nI]; btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); strncpy(tempString, DIRECTIONS.abbrName, DIRECTIONS_ABBRNAME_LENGTH); trim(tempString, DIRECTIONS_ABBRNAME_LENGTH); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Go through all the services // strcpy(outputStringSave, outputString); rcode2 = btrieve(B_GETFIRST, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); while(rcode2 == 0) { // // Go through all the patterns // PATTERNSKey2.ROUTESrecordID = ROUTES.recordID; PATTERNSKey2.SERVICESrecordID = SERVICES.recordID; PATTERNSKey2.PATTERNNAMESrecordID = basePatternRecordID; PATTERNSKey2.directionIndex = nI; PATTERNSKey2.nodeSequence = -1; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); previousPattern = NO_RECORD; while(rcode2 == 0 && PATTERNS.ROUTESrecordID == ROUTES.recordID && PATTERNS.SERVICESrecordID == SERVICES.recordID && PATTERNS.directionIndex == nI) { if(previousPattern != PATTERNS.PATTERNNAMESrecordID) { previousPattern = PATTERNS.PATTERNNAMESrecordID; seq = 1; } // // PatternCode (SERVICES.recordID-PATTERNS.PATTERNNAMESrecordID) // sprintf(szarString, "\"%ld-%ld\",", SERVICES.recordID, PATTERNS.PATTERNNAMESrecordID); strcat(outputString, szarString); // // StopCode (NODES.number or NODES.abbrName) // NODESKey0.recordID = PATTERNS.NODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); if(!(NODES.flags & NODES_FLAG_STOP)) { if(nI == 0) { number = (NODES.OBStopNumber <= 0 ? NODES.number : NODES.OBStopNumber); } else { number = (NODES.IBStopNumber <= 0 ? NODES.number : NODES.IBStopNumber); } sprintf(tempString, "%04ld", number); // strncpy(tempString, NODES.abbrName, NODES_ABBRNAME_LENGTH); // trim(tempString, NODES_ABBRNAME_LENGTH); } else { sprintf(tempString, "%04ld", NODES.number); } sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Sequence // sprintf(tempString, "\"%d\"\r\n", seq++); strcat(outputString, tempString); // // Write it out and get the next node on the pattern // _lwrite(hfOutputFile, outputString, strlen(outputString)); strcpy(outputString, outputStringSave); rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } // while on patterns rcode2 = btrieve(B_GETNEXT, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); } } // nI // // Get the next route // rcode2 = btrieve(B_GETNEXT, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); } // // Close the file // _lclose(hfOutputFile); // // ========================================== // Bus Trips File - oci_trips_{RouteCode}.dat // ========================================== // // // Traverse the Routes Table // rcode2 = btrieve(B_GETFIRST, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); while(rcode2 == 0) { if(StatusBarAbort()) { goto done; } strncpy(tempString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(tempString, ROUTES_NUMBER_LENGTH); ptr = tempString; while(ptr && *ptr == ' ') { ptr++; } sprintf(outputFileName, "oci_trips_%s.csv", ptr); hfOutputFile = _lcreat(outputFileName, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_320, szFormatString, SZFORMATSTRING_LENGTH); sprintf(szarString, szFormatString, outputFileName); MessageBeep(MB_ICONSTOP); MessageBox(NULL, szarString, TMS, MB_OK | MB_ICONSTOP); goto done; } // // Write out the header // strcpy(outputString, "\"RouteCode\",\"DirectionCode\",\"PatternCode\",\"TripCode\",\"StopCode\",\"Sequence\",\"ArrivalTime\",\"DepartureTime\",\"TimingPoint\",\"Bicycles\",\"ServiceCode\"\r\n"); _lwrite(hfOutputFile, outputString, strlen(outputString)); StatusBarText(outputFileName); // // Go through the services // rcode2 = btrieve(B_GETFIRST, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); while(rcode2 == 0) { if(StatusBarAbort()) { goto done; } strncpy(szServiceCode, SERVICES.name, SERVICES_NAME_LENGTH); trim(szServiceCode, SERVICES_NAME_LENGTH); // // Loop through the directions // for(nI = 0; nI < 2; nI++) { if(ROUTES.DIRECTIONSrecordID[nI] == NO_RECORD) { continue; } // // RouteCode (ROUTES.number) // strncpy(tempString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(tempString, ROUTES_NUMBER_LENGTH); ptr = tempString; while(ptr && *ptr == ' ') { ptr++; } sprintf(szarString, "\"%s\",", ptr); strcpy(outputString, szarString); // // DirectionCode (DIRECTIONS.abbrName) // DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[nI]; btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); strncpy(tempString, DIRECTIONS.abbrName, DIRECTIONS_ABBRNAME_LENGTH); trim(tempString, DIRECTIONS_ABBRNAME_LENGTH); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); strcpy(out2, outputString); // // Get the trips for this route/ser/dir // TRIPSKey1.ROUTESrecordID = ROUTES.recordID; TRIPSKey1.SERVICESrecordID = SERVICES.recordID; TRIPSKey1.directionIndex = nI; TRIPSKey1.tripSequence = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_TRIPS, &TRIPS, &TRIPSKey1, 1); while(rcode2 == 0 && TRIPS.ROUTESrecordID == ROUTES.recordID && TRIPS.SERVICESrecordID == SERVICES.recordID && TRIPS.directionIndex == nI) { strcpy(outputString, out2); // // PatternCode (SERVICES.recordID-PATTERNNAMES.recordID) // sprintf(szarString, "\"%ld-%ld\",", TRIPS.SERVICESrecordID, TRIPS.PATTERNNAMESrecordID); strcat(outputString, szarString); // // TripCode (TRIPS.tripNumber) // sprintf(szarString, "\"%ld\",", TRIPS.tripNumber); strcat(outputString, szarString); // // Does this vehicle have a bike rack? // bBikeRack = FALSE; if(TRIPS.BUSTYPESrecordID != NO_RECORD) { BUSTYPESKey0.recordID = TRIPS.BUSTYPESrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_BUSTYPES, &BUSTYPES, &BUSTYPESKey0, 0); if(rcode2 == 0) { if(BUSTYPES.flags & BUSTYPES_FLAG_CARRIER) { bBikeRack = TRUE; } } } // // Generate the trip // GenerateTrip(TRIPS.ROUTESrecordID, TRIPS.SERVICESrecordID, TRIPS.directionIndex, TRIPS.PATTERNNAMESrecordID, TRIPS.timeAtMLP, GENERATETRIP_FLAG_DISPLAYERRORS, >Results); // // Go through the pattern twice // // Pass 1 - Determine distances at each timepoint // if(GTResults.tripDistance != 0.0) { PATTERNSKey2.ROUTESrecordID = ROUTES.recordID; PATTERNSKey2.SERVICESrecordID = SERVICES.recordID; PATTERNSKey2.directionIndex = nI; PATTERNSKey2.PATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; PATTERNSKey2.nodeSequence = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); tripIndex = 0; distanceToHere = 0.0; while(rcode2 == 0 && PATTERNS.ROUTESrecordID == ROUTES.recordID && PATTERNS.SERVICESrecordID == SERVICES.recordID && PATTERNS.directionIndex == nI && PATTERNS.PATTERNNAMESrecordID == TRIPS.PATTERNNAMESrecordID) { NODESKey0.recordID = PATTERNS.NODESrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); if(PATTERNS.flags & PATTERNS_FLAG_BUSSTOP) { distanceToHere += (float)GreatCircleDistance(prevLon, prevLat, NODES.longitude, NODES.latitude); } else { tripDistances[tripIndex] = distanceToHere; tripIndex++; } prevLat = NODES.latitude; prevLon = NODES.longitude; rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } } // // Save outputString to this point // strcpy(outputStringSave, outputString); // // Pass 2 - Determine time interpolations and output the records // PATTERNSKey2.ROUTESrecordID = ROUTES.recordID; PATTERNSKey2.SERVICESrecordID = SERVICES.recordID; PATTERNSKey2.directionIndex = nI; PATTERNSKey2.PATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; PATTERNSKey2.nodeSequence = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); tripIndex = 0; seq = 1; distanceToHere = 0.0; while(rcode2 == 0 && PATTERNS.ROUTESrecordID == ROUTES.recordID && PATTERNS.SERVICESrecordID == SERVICES.recordID && PATTERNS.directionIndex == nI && PATTERNS.PATTERNNAMESrecordID == TRIPS.PATTERNNAMESrecordID) { NODESKey0.recordID = PATTERNS.NODESrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); if(PATTERNS.flags & PATTERNS_FLAG_BUSSTOP) { if(GTResults.tripDistance == 0) { timeAtStop = GTResults.tripTimes[tripIndex - 1]; } else { distanceToHere += (float)GreatCircleDistance(prevLon, prevLat, NODES.longitude, NODES.latitude); timeAtStop = (long)((GTResults.tripTimes[tripIndex] - GTResults.tripTimes[tripIndex - 1]) * (distanceToHere / (tripDistances[tripIndex] - tripDistances[tripIndex - 1]))); timeAtStop += (GTResults.tripTimes[tripIndex - 1]); } } else { timeAtStop = GTResults.tripTimes[tripIndex]; distanceToHere = 0.0; tripIndex++; } // // StopCode (NODES.number or NODES.abbrName) // /* if(NODES.flags & NODES_FLAG_STOP) { sprintf(szarString, "\"%04ld\",", NODES.number); } else { strncpy(tempString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(tempString, NODES_ABBRNAME_LENGTH); sprintf(szarString, "\"%s\",", tempString); } */ if(!(NODES.flags & NODES_FLAG_STOP)) { if(nI == 0) { number = (NODES.OBStopNumber <= 0 ? NODES.number : NODES.OBStopNumber); } else { number = (NODES.IBStopNumber <= 0 ? NODES.number : NODES.IBStopNumber); } sprintf(szarString, "\"%04ld\",", number); } else { sprintf(szarString, "\"%04ld\",", NODES.number); } strcat(outputString, szarString); // // Sequence // sprintf(szarString, "\"%d\",", seq++); strcat(outputString, szarString); // // ArrivalTime (Time at the stop, in seconds) // // Now time is in HHMM (11-Aug-08) // // sprintf(szarString, "\"%ld\",", timeAtStop); sprintf(szarString, "\"%s\",", TcharNAP(timeAtStop, FALSE)); strcat(outputString, szarString); // // DepartureTime (Time at the stop, in seconds) // // Now time is in HHMM (11-Aug-08) // // sprintf(szarString, "\"%ld\",", timeAtStop); sprintf(szarString, "\"%s\",", TcharNAP(timeAtStop, FALSE)); strcat(outputString, szarString); // // Timepoint? // sprintf(tempString, "%s", (NODES.flags & NODES_FLAG_STOP ? "False" : "True")); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Bicycles? // sprintf(tempString, "%s", (bBikeRack ? "True" : "False")); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // ServiceCode // sprintf(szarString, "\"%s\"\r\n", szServiceCode); strcat(outputString, szarString); // // Write it out and go back // _lwrite(hfOutputFile, outputString, strlen(outputString)); strcpy(outputString, outputStringSave); prevLat = NODES.latitude; prevLon = NODES.longitude; rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } // while on pattern // // Get the next trip // rcode2 = btrieve(B_GETNEXT, TMS_TRIPS, &TRIPS, &TRIPSKey1, 1); } // while on trips } // nI (directions on the route) // // Get the next service // rcode2 = btrieve(B_GETNEXT, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); } // // Close the file // _lclose(hfOutputFile); // // Get the next route // rcode2 = btrieve(B_GETNEXT, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); } // // Blocks // // // ============================ // Blocks File - oci_blocks.dat // ============================ // pTRIPSChunk = &TRIPS.standard; sprintf(outputFileName, "oci_blocks.csv", ptr); hfOutputFile = _lcreat(outputFileName, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_320, szFormatString, SZFORMATSTRING_LENGTH); sprintf(szarString, szFormatString, outputFileName); MessageBeep(MB_ICONSTOP); MessageBox(NULL, szarString, TMS, MB_OK | MB_ICONSTOP); goto done; } // // Write out the header // strcpy(outputString, "\"BlockCode\",\"ServiceCode\",\"TripCode\",\"Sequence\",\"StartStopCode\",\"EndStopCode\",\"InService\"\r\n"); _lwrite(hfOutputFile, outputString, strlen(outputString)); StatusBarText(outputFileName); // // Traverse the Routes Table // rcode2 = btrieve(B_GETFIRST, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); while(rcode2 == 0) { if(StatusBarAbort()) { goto done; } // // Go through the services // rcode2 = btrieve(B_GETFIRST, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); while(rcode2 == 0) { if(StatusBarAbort()) { goto done; } strncpy(szServiceCode, SERVICES.name, SERVICES_NAME_LENGTH); trim(szServiceCode, SERVICES_NAME_LENGTH); // // Get all the blocks on this route group // NODESKey1.flags = NODES_FLAG_GARAGE; memset(NODESKey1.abbrName, 0x00, NODES_ABBRNAME_LENGTH); rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_NODES, &NODES, &NODESKey1, 1); bFirst = TRUE; while(rcode2 == 0 && NODES.flags & NODES_FLAG_GARAGE) { // // Cycle through the blocks // assignedToNODESrecordID = bFirst ? NO_RECORD : NODES.recordID; TRIPSKey2.assignedToNODESrecordID = assignedToNODESrecordID; TRIPSKey2.RGRPROUTESrecordID = ROUTES.recordID; TRIPSKey2.SGRPSERVICESrecordID = SERVICES.recordID; TRIPSKey2.blockNumber = 1; TRIPSKey2.blockSequence = NO_TIME; rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_TRIPS, &TRIPS, &TRIPSKey2, 2); blockNumber = NO_RECORD; // // Get the first trip on the block // while(rcode2 == 0 && pTRIPSChunk->assignedToNODESrecordID == assignedToNODESrecordID && pTRIPSChunk->RGRPROUTESrecordID == ROUTES.recordID && pTRIPSChunk->SGRPSERVICESrecordID == SERVICES.recordID) { if(StatusBarAbort()) { goto done; } if(pTRIPSChunk->blockNumber != blockNumber) { seq = 1; blockNumber = pTRIPSChunk->blockNumber; } // // Gen the whole trip // GenerateTrip(TRIPS.ROUTESrecordID, TRIPS.SERVICESrecordID, TRIPS.directionIndex, TRIPS.PATTERNNAMESrecordID, TRIPS.timeAtMLP, GENERATETRIP_FLAG_DISPLAYERRORS, >Results); // // Pullout? // if(pTRIPSChunk->POGNODESrecordID == NO_RECORD) { fromNODESrecordID = GTResults.firstNODESrecordID; fromTime = GTResults.firstNodeTime; } else { GCTData.fromPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.toPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.fromROUTESrecordID = pTRIPSChunk->RGRPROUTESrecordID; GCTData.fromSERVICESrecordID = pTRIPSChunk->SGRPSERVICESrecordID; GCTData.toROUTESrecordID = pTRIPSChunk->RGRPROUTESrecordID; GCTData.toSERVICESrecordID = pTRIPSChunk->SGRPSERVICESrecordID; GCTData.fromNODESrecordID = pTRIPSChunk->POGNODESrecordID; GCTData.toNODESrecordID = GTResults.firstNODESrecordID; GCTData.timeOfDay = GTResults.firstNodeTime; dhd = GetConnectionTime(GCT_FLAG_DEADHEADTIME, &GCTData, &distance); distance = (float)fabs((double)distance); if(dhd == NO_TIME) { dhd = 0; } fromNODESrecordID = pTRIPSChunk->POGNODESrecordID; fromTime = GTResults.firstNodeTime - dhd; // // Output the pull-out deadhead record // // Start and End Stop codes // NODESKey0.recordID = pTRIPSChunk->POGNODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(tempString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(tempString, NODES_ABBRNAME_LENGTH); NODESKey0.recordID = GTResults.firstNODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(szarString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(szarString, NODES_ABBRNAME_LENGTH); // // Write it // sprintf(outputString, "\"%ld\",\"%s\",\"\",\"%d\",\"%s\",\"%s\",\"False\"\r\n", pTRIPSChunk->blockNumber, szServiceCode, seq, tempString, szarString); _lwrite(hfOutputFile, outputString, strlen(outputString)); seq++; } // // Start/end trip details // sprintf(szTripCode, "%ld", TRIPS.tripNumber); // // Start and End Stop codes // NODESKey0.recordID = GTResults.firstNODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(tempString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(tempString, NODES_ABBRNAME_LENGTH); NODESKey0.recordID = GTResults.lastNODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(szarString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(szarString, NODES_ABBRNAME_LENGTH); // // Write it // sprintf(outputString, "\"%ld\",\"%s\",\"%s\",\"%d\",\"%s\",\"%s\",\"True\"\r\n", pTRIPSChunk->blockNumber, szServiceCode, szTripCode, seq, tempString, szarString); _lwrite(hfOutputFile, outputString, strlen(outputString)); seq++; // // Pullin // if(pTRIPSChunk->PIGNODESrecordID == NO_RECORD) { toNODESrecordID = GTResults.lastNODESrecordID; toTime = GTResults.lastNodeTime; } else { GCTData.fromPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.toPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.fromROUTESrecordID = pTRIPSChunk->RGRPROUTESrecordID; GCTData.fromSERVICESrecordID = pTRIPSChunk->SGRPSERVICESrecordID; GCTData.toROUTESrecordID = pTRIPSChunk->RGRPROUTESrecordID; GCTData.toSERVICESrecordID = pTRIPSChunk->SGRPSERVICESrecordID; GCTData.fromNODESrecordID = GTResults.lastNODESrecordID; GCTData.toNODESrecordID = pTRIPSChunk->PIGNODESrecordID; GCTData.timeOfDay = GTResults.lastNodeTime; dhd = GetConnectionTime(GCT_FLAG_DEADHEADTIME, &GCTData, &distance); distance = (float)fabs((double)distance); if(dhd == NO_TIME) { dhd = 0; } toNODESrecordID = pTRIPSChunk->PIGNODESrecordID; toTime = GTResults.lastNodeTime + dhd; // // Output the pull-in deadhead record // // Start and End Stop codes // NODESKey0.recordID = GTResults.lastNODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(tempString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(tempString, NODES_ABBRNAME_LENGTH); NODESKey0.recordID = pTRIPSChunk->PIGNODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(szarString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(szarString, NODES_ABBRNAME_LENGTH); // // Write it // sprintf(outputString, "\"%ld\",\"%s\",\"\",\"%d\",\"%s\",\"%s\",\"False\"\r\n", pTRIPSChunk->blockNumber, szServiceCode, seq, tempString, szarString); _lwrite(hfOutputFile, outputString, strlen(outputString)); seq++; } rcode2 = btrieve(B_GETNEXT, TMS_TRIPS, &TRIPS, &TRIPSKey2, 2); } // while blocks on this garage node // // Get the next garage node // if(bFirst) { bFirst = FALSE; } else { rcode2 = btrieve(B_GETNEXT, TMS_NODES, &NODES, &NODESKey1, 1); } } // while cycling through garage nodes // // Get the next service // rcode2 = btrieve(B_GETNEXT, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); } // // Get the next route // rcode2 = btrieve(B_GETNEXT, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); } // // Close the file // _lclose(hfOutputFile); // // All done // StatusBar(-1L, -1L); bFinishedOK = TRUE; done: chdir(".."); // Back to where we started from StatusBarEnd(); if(!bFinishedOK) { TMSError((HWND)NULL, MB_ICONINFORMATION, ERROR_227, (HANDLE)NULL); } if(bGotError) { TMSError((HWND)NULL, MB_ICONINFORMATION, ERROR_350, (HANDLE)NULL); } _lclose(hfErrorLog); distanceMeasure = distanceMeasureSave; recordLength[TMS_COMMENTS] = COMMENTS_FIXED_LENGTH; return(bFinishedOK); }
BOOL FAR TMSRPT51(TMSRPTPassedDataDef *pPassedData) { REPORTPARMSDef REPORTPARMS; PROPOSEDRUNDef PROPOSEDRUN; COSTDef COST; HFILE hfOutputFile; BOOL bKeepGoing = FALSE; BOOL bRC; BOOL bCoach; char outputString[512]; char szDate[16]; char szEmployee[16]; char szRunNumber[7]; char *ptr; long numPieces; long time; long platformTime; long reportTime; long turninTime; long travelTime; long dd, mm, yyyy; int nI; int nJ; int nK; int rcode2; int seq; int numRosters; pPassedData->nReportNumber = 48; pPassedData->numDataFiles = 1; // // See what he wants // REPORTPARMS.nReportNumber = pPassedData->nReportNumber; REPORTPARMS.DIVISIONSrecordID = m_DivisionRecordID; REPORTPARMS.pDivisionList = NULL; REPORTPARMS.flags = RPFLAG_DIVISIONS; bRC = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_RPTPARMS), hWndMain, (DLGPROC)RPTPARMSMsgProc, (LPARAM)&REPORTPARMS); if(!bRC) return(FALSE); // // Check the list of routes, services, and divisions // if(REPORTPARMS.numDivisions == 0) goto deallocate; // // Open the output file // strcpy(tempString, szDatabaseFileName); if((ptr = strrchr(tempString, '\\')) != NULL) *ptr = '\0'; strcat(tempString, "\\Fleet-Net Payroll.txt"); hfOutputFile = _lcreat(tempString, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_202, szFormatString, sizeof(szFormatString)); sprintf(szarString, szFormatString, tempString); MessageBeep(MB_ICONSTOP); MessageBox((HWND)NULL, szarString, TMS, MB_ICONSTOP); goto deallocate; } // // Fire up the status bar // LoadString(hInst, TEXT_117, tempString, TEMPSTRING_LENGTH); StatusBarStart(hWndMain, tempString); // // Determine the extent of the status bar // rcode2 = btrieve(B_STAT, TMS_ROSTER, &BSTAT, outputString, 0); if(rcode2 != 0 || BSTAT.numRecords == 0) { TMSError((HWND)NULL, MB_ICONSTOP, ERROR_319, (HANDLE)NULL); goto deallocate; } numRosters = BSTAT.numRecords; // // Get today's date // if(CalendarDate(&dd, &mm, &yyyy) == NO_RECORD) { goto deallocate; } // // Loop through all the divisions // bKeepGoing = TRUE; seq = 0; for(nI = 0; nI < REPORTPARMS.numDivisions; nI++) { if(StatusBarAbort()) { goto deallocate; } DIVISIONSKey0.recordID = REPORTPARMS.pDivisionList[nI]; btrieve(B_GETEQUAL, TMS_DIVISIONS, &DIVISIONS, &DIVISIONSKey0, 0); strncpy(tempString, DIVISIONS.name, DIVISIONS_NAME_LENGTH); trim(tempString, DIVISIONS_NAME_LENGTH); bCoach = (strstr(tempString, "Coach") > 0); // // Cycle through the roster // ROSTERKey1.DIVISIONSrecordID = DIVISIONS.recordID; ROSTERKey1.rosterNumber = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_ROSTER, &ROSTER, &ROSTERKey1, 1); while(rcode2 == 0 && ROSTER.DIVISIONSrecordID == DIVISIONS.recordID) { if(StatusBarAbort()) { goto deallocate; } // // Get the employee - must be assigned // StatusBar((long)(seq + 1), (long)numRosters); if(ROSTER.DRIVERSrecordID != NO_RECORD) { DRIVERSKey0.recordID = ROSTER.DRIVERSrecordID; btrieve(B_GETEQUAL, TMS_DRIVERS, &DRIVERS, &DRIVERSKey0, 0); strncpy(szEmployee, DRIVERS.badgeNumber, TMSRPT51_MAX_EMPLOYEENUMBERLENGTH); szEmployee[TMSRPT51_MAX_EMPLOYEENUMBERLENGTH] = '\0'; // // Loop through the runs // for(nJ = 0; nJ < ROSTER_MAX_DAYS; nJ++) { if(StatusBarAbort()) { goto deallocate; } if(ROSTER.WEEK[m_RosterWeek].RUNSrecordIDs[nJ] == NO_RECORD) { continue; } // // Establish "today's" date // strcpy(szDate, CalendarDateWithOffset(dd, mm, yyyy, nJ)); // // Get the characteristics of the run // RUNSKey0.recordID = ROSTER.WEEK[m_RosterWeek].RUNSrecordIDs[nJ]; rcode2 = btrieve(B_GETEQUAL, TMS_RUNS, &RUNS, &RUNSKey0, 0); if(rcode2 != 0) { continue; } sprintf(szRunNumber, "%6ld", RUNS.runNumber); numPieces = GetRunElements(NULL, &RUNS, &PROPOSEDRUN, &COST, TRUE); platformTime = 0; reportTime = 0; turninTime = 0; travelTime = 0; for(nK = 0; nK < numPieces; nK++) { platformTime += RUNSVIEW[nK].platformTime; reportTime += RUNSVIEW[nK].reportTime; turninTime += RUNSVIEW[nK].turninTime; travelTime += RUNSVIEW[nK].travelTime; } // // Spit out the various components // for(nK = 0; nK < TMSRPT51_NUMCOMPONENTS; nK++) { // // Set up the output record // strcpy(outputString, szDate); strcat(outputString, "\t"); strcat(outputString, szEmployee); strcat(outputString, "\t"); switch(nK) { // // Platform time // case TMSRPT51_PLATFORMTIME: strcat(outputString, (bCoach ? "PLT" : "PLV")); time = platformTime; break; // // Makeup time // case TMSRPT51_MAKEUPTIME: strcat(outputString, (bCoach ? "GCS" : "GUV")); time = RUNSVIEW[numPieces - 1].makeUpTime; break; // // Report time // case TMSRPT51_REPORTTIME: strcat(outputString, (bCoach ? "REC" : "RPV")); time = reportTime; break; // // Turnin time // case TMSRPT51_TURNINTIME: strcat(outputString, (bCoach ? "CHT" : "CHV")); time = turninTime; break; // // Travel time // case TMSRPT51_TRAVELTIME: strcat(outputString, (bCoach ? "TRT" : "TRV")); time = travelTime; break; // // Overtime // case TMSRPT51_OVERTIME: strcat(outputString, (bCoach ? "OCS" : "OVS")); time = (long)(RUNSVIEW[numPieces - 1].overTime / 1.5); break; } // // Fill in the rest of the record // // Time // sprintf(tempString, "\t%5ld\t", time); strcat(outputString, tempString); // // Run number // strcat(outputString, szRunNumber); strcat(outputString, "\r\n"); // // Write the record // _lwrite(hfOutputFile, outputString, strlen(outputString)); } } } // // Get the next roster record // seq++; rcode2 = btrieve(B_GETNEXT, TMS_ROSTER, &ROSTER, &ROSTERKey1, 1); } } // nI loop on divisions bKeepGoing = TRUE; // // Free allocated memory // deallocate: TMSHeapFree(REPORTPARMS.pDivisionList); StatusBarEnd(); _lclose(hfOutputFile); SetCursor(hCursorArrow); if(!bKeepGoing) return(FALSE); // // Let him know // strcpy(tempString, "Fleet-Net Payroll.txt was written to:\n"); strcpy(szarString, szDatabaseFileName); if((ptr = strrchr(szarString, '\\')) != NULL) *ptr = '\0'; strcat(tempString, szarString); MessageBox(hWndMain, tempString, TMS, MB_OK); // // All done // return(TRUE); }
BOOL FAR TMSRPT30(TMSRPTPassedDataDef *pPassedData) { DISPATCHSHEETPassedDataDef RParamData; DISPATCHSHEETRosterDataDef RData[MAXRUNSINRUNLIST]; PROPOSEDRUNDef PROPOSEDRUN; COSTDef COST; HFILE hfOutputFile; BOOL bFound; char lastName[DRIVERS_LASTNAME_LENGTH + 1]; char firstName[DRIVERS_FIRSTNAME_LENGTH + 1]; char badgeNumber[DRIVERS_BADGENUMBER_LENGTH + 1]; char abbrName[NODES_ABBRNAME_LENGTH + 1]; char outputString[TEMPSTRING_LENGTH]; char *pszReportName; long onTime; long offTime; long seq; long time; long flatPay; long makeUpTime; long pieceNumber; long runNumber; long cutAsRuntype; long startTime; long onNode; long offNode; int numRuns; int nI; int nJ; int numPieces; int rcode2; // // See what he wants to unload // RParamData.flags = 0; RParamData.nReportNumber = 29; if(DispatchSheet(&RParamData) != IDOK) return(FALSE); if(ROSTERPARMS.serviceDays[RParamData.dayOfWeek] == NO_RECORD) { TMSError(hWndMain, MB_ICONSTOP, ERROR_318, (HANDLE)NULL); return(FALSE); } // // Back ok - set up the status bar // pPassedData->nReportNumber = 29; pPassedData->numDataFiles = 1; for(nI = 0; nI < m_LastReport; nI++) { if(TMSRPT[nI].originalReportNumber == pPassedData->nReportNumber) { pszReportName = TMSRPT[nI].szReportName; StatusBarStart(hWndMain, TMSRPT[nI].szReportName); break; } } // // Open the output file // StatusBarText("Opening output file..."); strcpy(tempString, szReportsTempFolder); strcat(tempString, "\\tmsrpt30.txt"); hfOutputFile = _lcreat(tempString, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_202, szFormatString, sizeof(szFormatString)); sprintf(szarString, szFormatString, tempString); MessageBeep(MB_ICONSTOP); MessageBox((HWND)NULL, szarString, TMS, MB_ICONSTOP); goto deallocate; } strcpy(pPassedData->szReportDataFile[0], tempString); StatusBar(-1L, -1L); // // Loop through the roster to set up drivers, their associated // runs, and the start time of each run. There's a data integrity // check here to ensure that the run pointed to by the roster actually exists. // StatusBarText("Examining the roster..."); numRuns = 0; ROSTERKey1.DIVISIONSrecordID = RParamData.DIVISIONSrecordID; ROSTERKey1.rosterNumber = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_ROSTER, &ROSTER, &ROSTERKey1, 1); while(rcode2 == 0 && ROSTER.DIVISIONSrecordID == RParamData.DIVISIONSrecordID) { if(StatusBarAbort()) { goto deallocate; } if(ROSTER.WEEK[m_RosterWeek].RUNSrecordIDs[RParamData.dayOfWeek] != NO_RECORD) { if(ROSTER.WEEK[m_RosterWeek].flags & (1 << RParamData.dayOfWeek)) // Crew-only run { CREWONLYKey0.recordID = ROSTER.WEEK[m_RosterWeek].RUNSrecordIDs[RParamData.dayOfWeek]; rcode2 = btrieve(B_GETEQUAL, TMS_CREWONLY, &CREWONLY, &CREWONLYKey0, 0); if(rcode2 == 0) { RData[numRuns].flags = RDATA_FLAG_CREWONLY; RData[numRuns].DRIVERSrecordID = ROSTER.DRIVERSrecordID; RData[numRuns].RUNSrecordID = ROSTER.WEEK[m_RosterWeek].RUNSrecordIDs[RParamData.dayOfWeek]; RData[numRuns].startTime = CREWONLY.startTime; RData[numRuns].runNumber = CREWONLY.runNumber; RData[numRuns].replacementDRIVERSrecordID = NO_RECORD; RData[numRuns].rosterNumber = NO_RECORD; RData[numRuns].BUSESrecordID = NO_RECORD; RData[numRuns].blockNumber = NO_RECORD; RData[numRuns].TRIPSrecordID = NO_RECORD; RData[numRuns].RGRPROUTESrecordID = NO_RECORD; RData[numRuns].SGRPSERVICESrecordID = NO_RECORD; numRuns++; } } else { RUNSKey0.recordID = ROSTER.WEEK[m_RosterWeek].RUNSrecordIDs[RParamData.dayOfWeek]; rcode2 = btrieve(B_GETEQUAL, TMS_RUNS, &RUNS, &RUNSKey0, 0); if(rcode2 == 0) { RData[numRuns].flags = 0; RData[numRuns].DRIVERSrecordID = ROSTER.DRIVERSrecordID; RData[numRuns].RUNSrecordID = ROSTER.WEEK[m_RosterWeek].RUNSrecordIDs[RParamData.dayOfWeek]; RunStartAndEnd(RUNS.start.TRIPSrecordID, RUNS.start.NODESrecordID, NO_RECORD, NO_RECORD, &onTime, &offTime); RData[numRuns].startTime = onTime; RData[numRuns].runNumber = RUNS.runNumber; RData[numRuns].replacementDRIVERSrecordID = NO_RECORD; RData[numRuns].rosterNumber = NO_RECORD; RData[numRuns].BUSESrecordID = NO_RECORD; RData[numRuns].blockNumber = NO_RECORD; RData[numRuns].TRIPSrecordID = RUNS.start.TRIPSrecordID; RData[numRuns].RGRPROUTESrecordID = NO_RECORD; RData[numRuns].SGRPSERVICESrecordID = NO_RECORD; numRuns++; } } } rcode2 = btrieve(B_GETNEXT, TMS_ROSTER, &ROSTER, &ROSTERKey1, 1); } // // Now go through the runs to add any unassigned runs to RData // StatusBarText("Setting up unassigned runs..."); RUNSKey1.DIVISIONSrecordID = RParamData.DIVISIONSrecordID; RUNSKey1.SERVICESrecordID = ROSTERPARMS.serviceDays[RParamData.dayOfWeek]; RUNSKey1.runNumber = NO_RECORD; RUNSKey1.pieceNumber = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_RUNS, &RUNS, &RUNSKey1, 1); while(rcode2 == 0 && RUNS.DIVISIONSrecordID == RParamData.DIVISIONSrecordID && RUNS.SERVICESrecordID == ROSTERPARMS.serviceDays[RParamData.dayOfWeek]) { if(StatusBarAbort()) { goto deallocate; } if(RUNS.pieceNumber == 1) { for(bFound = FALSE, nI = 0; nI < numRuns; nI++) { if(RUNS.recordID == RData[nI].RUNSrecordID && !(RData[nI].flags & RDATA_FLAG_CREWONLY)) { bFound = TRUE; break; } } if(!bFound) { RData[numRuns].DRIVERSrecordID = NO_RECORD; RData[numRuns].RUNSrecordID = RUNS.recordID; RunStartAndEnd(RUNS.start.TRIPSrecordID, RUNS.start.NODESrecordID, NO_RECORD, NO_RECORD, &onTime, &offTime); RData[numRuns].startTime = onTime; RData[numRuns].runNumber = RUNS.runNumber; RData[numRuns].replacementDRIVERSrecordID = NO_RECORD; RData[numRuns].rosterNumber = NO_RECORD; RData[numRuns].BUSESrecordID = NO_RECORD; RData[numRuns].blockNumber = NO_RECORD; RData[numRuns].TRIPSrecordID = RUNS.start.TRIPSrecordID; RData[numRuns].RGRPROUTESrecordID = NO_RECORD; RData[numRuns].SGRPSERVICESrecordID = NO_RECORD; RData[numRuns].flags = 0; numRuns++; } } rcode2 = btrieve(B_GETNEXT, TMS_RUNS, &RUNS, &RUNSKey1, 1); } // // Now go through the runs to add any unassigned crew-only runs to RData // CREWONLYKey1.DIVISIONSrecordID = RParamData.DIVISIONSrecordID; CREWONLYKey1.SERVICESrecordID = ROSTERPARMS.serviceDays[RParamData.dayOfWeek]; CREWONLYKey1.runNumber = NO_RECORD; CREWONLYKey1.pieceNumber = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_CREWONLY, &CREWONLY, &CREWONLYKey1, 1); while(rcode2 == 0 && CREWONLY.DIVISIONSrecordID == RParamData.DIVISIONSrecordID && CREWONLY.SERVICESrecordID == ROSTERPARMS.serviceDays[RParamData.dayOfWeek]) { if(StatusBarAbort()) { goto deallocate; } if(CREWONLY.pieceNumber == 1) { for(bFound = FALSE, nI = 0; nI < numRuns; nI++) { if(CREWONLY.recordID == RData[nI].RUNSrecordID && (RData[nI].flags & RDATA_FLAG_CREWONLY)) { bFound = TRUE; break; } } if(!bFound) { RData[numRuns].flags = RDATA_FLAG_CREWONLY; RData[numRuns].DRIVERSrecordID = NO_RECORD; RData[numRuns].RUNSrecordID = CREWONLY.recordID; RData[numRuns].startTime = CREWONLY.startTime; RData[numRuns].runNumber = CREWONLY.runNumber; RData[numRuns].replacementDRIVERSrecordID = NO_RECORD; RData[numRuns].rosterNumber = NO_RECORD; RData[numRuns].BUSESrecordID = NO_RECORD; RData[numRuns].blockNumber = NO_RECORD; RData[numRuns].TRIPSrecordID = NO_RECORD; RData[numRuns].RGRPROUTESrecordID = NO_RECORD; RData[numRuns].SGRPSERVICESrecordID = NO_RECORD; numRuns++; } } rcode2 = btrieve(B_GETNEXT, TMS_CREWONLY, &CREWONLY, &CREWONLYKey1, 1); } // // Check for changes made via Daily Ops // AdjustDispatchSheetRosterData(&RData[0], RParamData.todaysDate, RParamData.date, numRuns, TRUE, FALSE); // // Sort by run number // qsort((void *)RData, numRuns, sizeof(DISPATCHSHEETRosterDataDef), sort_TMSRPT30); // // Generate the run details, and print them // out along with any associated driver data. // StatusBarText("Generating run details..."); seq = 0; // // Initialize the travel matrix // StatusBarEnd(); if(bUseDynamicTravels) { SERVICESKey0.recordID = ROSTERPARMS.serviceDays[RParamData.dayOfWeek]; btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); LoadString(hInst, bUseCISPlan ? TEXT_154 : TEXT_135, tempString, TEMPSTRING_LENGTH); StatusBarText(tempString); if(bUseCISPlan) { CISfree(); if(!CISbuildService(FALSE, TRUE, SERVICES.recordID)) goto deallocate; } else { InitTravelMatrix(SERVICES.recordID, FALSE); } } // // Cycle through the runs // StatusBarStart(hWndMain, pszReportName); StatusBarText("Cycling through the runs..."); for(nI = 0; nI < numRuns; nI++) { StatusBar((long)(nI + 1), (long)numRuns); if(StatusBarAbort()) { goto deallocate; } // // Run data // if(RData[nI].flags & RDATA_FLAG_CREWONLY) { CREWONLYKey0.recordID = RData[nI].RUNSrecordID; btrieve(B_GETEQUAL, TMS_CREWONLY, &CREWONLY, &CREWONLYKey0, 0); } else { RUNSKey0.recordID = RData[nI].RUNSrecordID; btrieve(B_GETEQUAL, TMS_RUNS, &RUNS, &RUNSKey0, 0); } // // Set up the output string // // Sequence # and Service // sprintf(outputString, "%d\t%s\t", seq++, RParamData.szDate); // // Driver // if(RData[nI].replacementDRIVERSrecordID != NO_RECORD) { DRIVERSKey0.recordID = RData[nI].replacementDRIVERSrecordID; } else if(RData[nI].DRIVERSrecordID != NO_RECORD) { DRIVERSKey0.recordID = RData[nI].DRIVERSrecordID; } else { DRIVERSKey0.recordID = NO_RECORD; } if(DRIVERSKey0.recordID != NO_RECORD) { btrieve(B_GETEQUAL, TMS_DRIVERS, &DRIVERS, &DRIVERSKey0, 0); strncpy(badgeNumber, DRIVERS.badgeNumber, DRIVERS_BADGENUMBER_LENGTH); trim(badgeNumber, DRIVERS_BADGENUMBER_LENGTH); strncpy(lastName, DRIVERS.lastName, DRIVERS_LASTNAME_LENGTH); trim(lastName, DRIVERS_LASTNAME_LENGTH); strncpy(firstName, DRIVERS.firstName, DRIVERS_FIRSTNAME_LENGTH); trim(firstName, DRIVERS_FIRSTNAME_LENGTH); strcat(outputString, badgeNumber); strcat(outputString, " - "); strcat(outputString, lastName); strcat(outputString, ", "); strcat(outputString, firstName); } strcat(outputString, "\t"); // // Run number // sprintf(tempString, "%ld\t", RData[nI].runNumber); strcat(outputString, tempString); // // Run details // makeUpTime = 0; // // Crew only // if(RData[nI].flags & RDATA_FLAG_CREWONLY) { btrieve(B_GETPOSITION, TMS_CREWONLY, &CREWONLY, &CREWONLYKey0, 0); rcode2 = btrieve(B_GETDIRECT, TMS_CREWONLY, &CREWONLY, &CREWONLYKey1, 1); pieceNumber = 0; runNumber = CREWONLY.runNumber; while(rcode2 == 0 && CREWONLY.runNumber == runNumber) { onTime = CREWONLY.startTime; offTime = CREWONLY.endTime; if(CREWONLY.pieceNumber == 1) { cutAsRuntype = CREWONLY.cutAsRuntype; startTime = onTime; onNode = CREWONLY.startNODESrecordID; } PROPOSEDRUN.piece[pieceNumber].fromTime = onTime; PROPOSEDRUN.piece[pieceNumber].fromNODESrecordID = CREWONLY.startNODESrecordID; PROPOSEDRUN.piece[pieceNumber].fromTRIPSrecordID = NO_RECORD; PROPOSEDRUN.piece[pieceNumber].toTime = offTime; PROPOSEDRUN.piece[pieceNumber].toNODESrecordID = CREWONLY.endNODESrecordID; PROPOSEDRUN.piece[pieceNumber].toTRIPSrecordID = NO_RECORD; PROPOSEDRUN.piece[pieceNumber].prior.startTime = NO_TIME; PROPOSEDRUN.piece[pieceNumber].prior.endTime = NO_TIME; PROPOSEDRUN.piece[pieceNumber].after.startTime = NO_TIME; PROPOSEDRUN.piece[pieceNumber++].after.endTime = NO_TIME; offNode = CREWONLY.endNODESrecordID; rcode2 = btrieve(B_GETNEXT, TMS_CREWONLY, &CREWONLY, &CREWONLYKey1, 1); } PROPOSEDRUN.numPieces = pieceNumber; RunCoster(&PROPOSEDRUN, cutAsRuntype, &COST); numPieces = PROPOSEDRUN.numPieces; for(nJ = 0; nJ < numPieces; nJ++) { RUNSVIEW[nJ].platformTime = COST.PIECECOST[nJ].platformTime; RUNSVIEW[nJ].makeUpTime = COST.PIECECOST[nJ].makeUpTime; RUNSVIEW[nJ].reportTime = COST.PIECECOST[nJ].reportTime; RUNSVIEW[nJ].turninTime = COST.PIECECOST[nJ].turninTime; RUNSVIEW[nJ].travelTime = COST.TRAVEL[nJ].startTravelTime + COST.TRAVEL[nJ].endTravelTime; RUNSVIEW[nJ].paidBreaks = COST.PIECECOST[nJ].paidBreak; RUNSVIEW[nJ].blockNumber = NO_RECORD; RUNSVIEW[nJ].runOnNODESrecordID = PROPOSEDRUN.piece[nJ].fromNODESrecordID; RUNSVIEW[nJ].runOnTime = PROPOSEDRUN.piece[nJ].fromTime; RUNSVIEW[nJ].runOffTime = PROPOSEDRUN.piece[nJ].toTime; RUNSVIEW[nJ].runOffNODESrecordID = PROPOSEDRUN.piece[nJ].toNODESrecordID; } } // // Regular run // else { numPieces = GetRunElements(hWndMain, &RUNS, &PROPOSEDRUN, &COST, TRUE); } // // Cycle through the pieces // for(nJ = 0; nJ < numPieces; nJ++) { if(nJ != 0) { sprintf(outputString, "%d\t%s\t\t%ld\t", seq++, RParamData.szDate, RData[nI].runNumber); } // // Block number // if(RUNSVIEW[nJ].blockNumber != NO_RECORD) { sprintf(tempString, "%ld\t", RUNSVIEW[nJ].blockNumber); } else { strcpy(tempString, "STBY\t"); } strcat(outputString, tempString); // // Location of origin // NODESKey0.recordID = RUNSVIEW[nJ].runOnNODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(abbrName, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(abbrName, NODES_ABBRNAME_LENGTH); strcat(outputString, abbrName); strcat(outputString, "\t"); // // Time of report // time = RUNSVIEW[nJ].runOnTime - RUNSVIEW[nJ].reportTime; if(RParamData.flags & DISPATCHSHEET_FLAG_INCLUDESTARTOFPIECETRAVEL) time -= RUNSVIEW[nJ].startOfPieceTravel; if(RUNSVIEW[nJ].startOfPieceExtraboardStart != NO_TIME) time = RUNSVIEW[nJ].startOfPieceExtraboardStart; strcat(outputString, Tchar(time)); strcat(outputString, "\t"); // // On time // strcat(outputString, Tchar(RUNSVIEW[nJ].runOnTime)); strcat(outputString, "\t"); // // Off time // strcat(outputString, Tchar(RUNSVIEW[nJ].runOffTime)); strcat(outputString, "\t"); // // Location of destination // NODESKey0.recordID = RUNSVIEW[nJ].runOffNODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(abbrName, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(abbrName, NODES_ABBRNAME_LENGTH); strcat(outputString, abbrName); strcat(outputString, "\t"); // // Platform time // strcat(outputString, Tdec(RUNSVIEW[nJ].platformTime)); strcat(outputString, "\t"); // // Report time // if(RUNSVIEW[nJ].reportTime > 0) strcat(outputString, Tdec(RUNSVIEW[nJ].reportTime)); strcat(outputString, "\t"); // // Pad time // if(RUNSVIEW[nJ].makeUpTime > 0) makeUpTime += RUNSVIEW[nJ].makeUpTime; if(RUNSVIEW[nJ].paidBreaks > 0) makeUpTime += RUNSVIEW[nJ].paidBreaks; if(makeUpTime > 0) strcat(outputString, Tdec(makeUpTime)); strcat(outputString, "\t"); // // Spread time // strcat(outputString, "\t"); // // Travel and Dwell Time // if(RUNSVIEW[nJ].travelTime > 0) strcat(outputString, Tdec(RUNSVIEW[nJ].travelTime)); strcat(outputString, "\t\r\n"); // // Write it out // _lwrite(hfOutputFile, outputString, strlen(outputString)); } // // Write out the summary record // sprintf(outputString, "%d\t%s\t\t%ld\t\t\t\t\t\tTotals\t", seq++, RParamData.szDate, RData[nI].runNumber); // // Sum the platform, report, makeup, travel, and intervening times // // Change all NO_TIMEs to 0 // for(nJ = 0; nJ < numPieces; nJ++) { if(RUNSVIEW[nJ].platformTime == NO_TIME) RUNSVIEW[nJ].platformTime = 0; if(RUNSVIEW[nJ].makeUpTime == NO_TIME) RUNSVIEW[nJ].makeUpTime = 0; if(RUNSVIEW[nJ].reportTime == NO_TIME) RUNSVIEW[nJ].reportTime = 0; if(RUNSVIEW[nJ].travelTime == NO_TIME) RUNSVIEW[nJ].travelTime = 0; if(RUNSVIEW[nJ].paidBreaks == NO_TIME) RUNSVIEW[nJ].paidBreaks = 0; if(RUNSVIEW[nJ].turninTime == NO_TIME) RUNSVIEW[nJ].turninTime = 0; } // // Generate the sums // for(nJ = 1; nJ < numPieces; nJ++) { RUNSVIEW[0].platformTime += RUNSVIEW[nJ].platformTime; RUNSVIEW[0].makeUpTime += RUNSVIEW[nJ].makeUpTime; RUNSVIEW[0].reportTime += RUNSVIEW[nJ].reportTime; RUNSVIEW[0].turninTime += RUNSVIEW[nJ].turninTime; RUNSVIEW[0].travelTime += RUNSVIEW[nJ].travelTime; RUNSVIEW[0].paidBreaks += RUNSVIEW[nJ].paidBreaks; } // // And write them out // // Platform time // strcat(outputString, Tdec(RUNSVIEW[0].platformTime)); strcat(outputString, "\t"); flatPay = RUNSVIEW[0].platformTime; // // Report and turnin time // if(RUNSVIEW[0].reportTime > 0 || RUNSVIEW[0].turninTime > 0) { strcat(outputString, Tdec(RUNSVIEW[0].reportTime + RUNSVIEW[0].turninTime)); flatPay += RUNSVIEW[0].reportTime + RUNSVIEW[0].turninTime; } strcat(outputString, "\t"); // // Pad time // makeUpTime = 0; if(RUNSVIEW[0].makeUpTime > 0) makeUpTime += RUNSVIEW[0].makeUpTime; if(RUNSVIEW[0].paidBreaks > 0) makeUpTime += RUNSVIEW[0].paidBreaks; if(makeUpTime > 0) { strcat(outputString, Tdec(makeUpTime)); flatPay += makeUpTime; } strcat(outputString, "\t"); // // Spread overtime // if(RUNSVIEW[numPieces - 1].spreadOT > 0) { strcat(outputString, Tdec(RUNSVIEW[numPieces - 1].spreadOT)); flatPay += RUNSVIEW[numPieces - 1].spreadOT; } strcat(outputString, "\t"); // // Travel and Dwell Time // if(RUNSVIEW[0].travelTime > 0) { strcat(outputString, Tdec(RUNSVIEW[0].travelTime)); flatPay += RUNSVIEW[0].travelTime; } strcat(outputString, "\t"); // // Flat Pay time // strcat(outputString, Tdec(flatPay)); strcat(outputString, "\t"); // // School? // strcat(outputString, "\r\n"); // // Write it out // _lwrite(hfOutputFile, outputString, strlen(outputString)); } // // All done // deallocate: StatusBarEnd(); _lclose(hfOutputFile); return(TRUE); }
void ReallyReStart (GtkWidget *rrw, GtkFileSelection *rrfs) { gfloat pvalue = 0; if ((ihistory > 0) && (isave == 1)) { JudgeBoard ('w'); Save (); } if (isavemes == 1) { Message (ssavemes, 2, 1); } x = 0; y = 0; iCapturedW = 0; iCapturedB = 0; ilimit = 0; ijustundo = 0; ifilestuff = 0; iduh = 0; iother = 0; isave = 1; iquit = 0; isavemes = 0; iiamblack = 0; ihistory = 0; imoves = 0; ilastmoveb = 1000; ilastmovew = 1000; StatusBar (); for (iPlace = 1; iPlace <= 361; iPlace++) { sprintf (Board[iPlace], "%s", "mme"); } sprintf (Board[1], "%s", "lte"); for (iPlace = 2; iPlace <= 18; iPlace++) { sprintf (Board[iPlace], "%s", "mte"); } sprintf (Board[19], "%s", "rte"); sprintf (Board[20], "%s", "lme"); sprintf (Board[38], "%s", "rme"); sprintf (Board[39], "%s", "lme"); sprintf (Board[57], "%s", "rme"); sprintf (Board[58], "%s", "lme"); sprintf (Board[61], "%s", "mms"); sprintf (Board[67], "%s", "mms"); sprintf (Board[73], "%s", "mms"); sprintf (Board[76], "%s", "rme"); sprintf (Board[77], "%s", "lme"); sprintf (Board[95], "%s", "rme"); sprintf (Board[96], "%s", "lme"); sprintf (Board[114], "%s", "rme"); sprintf (Board[115], "%s", "lme"); sprintf (Board[133], "%s", "rme"); sprintf (Board[134], "%s", "lme"); sprintf (Board[152], "%s", "rme"); sprintf (Board[153], "%s", "lme"); sprintf (Board[171], "%s", "rme"); sprintf (Board[172], "%s", "lme"); sprintf (Board[175], "%s", "mms"); sprintf (Board[181], "%s", "mms"); sprintf (Board[187], "%s", "mms"); sprintf (Board[190], "%s", "rme"); sprintf (Board[191], "%s", "lme"); sprintf (Board[209], "%s", "rme"); sprintf (Board[210], "%s", "lme"); sprintf (Board[228], "%s", "rme"); sprintf (Board[229], "%s", "lme"); sprintf (Board[247], "%s", "rme"); sprintf (Board[248], "%s", "lme"); sprintf (Board[266], "%s", "rme"); sprintf (Board[267], "%s", "lme"); sprintf (Board[285], "%s", "rme"); sprintf (Board[286], "%s", "lme"); sprintf (Board[289], "%s", "mms"); sprintf (Board[295], "%s", "mms"); sprintf (Board[301], "%s", "mms"); sprintf (Board[304], "%s", "rme"); sprintf (Board[305], "%s", "lme"); sprintf (Board[323], "%s", "rme"); sprintf (Board[324], "%s", "lme"); sprintf (Board[342], "%s", "rme"); sprintf (Board[343], "%s", "lue"); for (iPlace = 344; iPlace <= 360; iPlace++) { sprintf (Board[iPlace], "%s", "mue"); } sprintf (Board[361], "%s", "rue"); DoHandicap (); for (ibuttonrr = 1; ibuttonrr <= 361; ibuttonrr++) { sprintf (History[ihistory][ibuttonrr], "%s", Board[ibuttonrr]); } gtk_widget_hide (window1); loadingw = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_position (GTK_WINDOW (loadingw), GTK_WIN_POS_CENTER); gtk_window_set_title (GTK_WINDOW (loadingw), "loading..."); gtk_signal_connect (GTK_OBJECT (loadingw), "delete_event", GTK_SIGNAL_FUNC (Quit), NULL); gtk_window_set_policy (GTK_WINDOW (loadingw), 0, 0, 1); gtk_container_border_width (GTK_CONTAINER (loadingw), 0); gtk_widget_realize (loadingw); lbox1 = gtk_vbox_new (FALSE, 0); gtk_container_border_width (GTK_CONTAINER (lbox1), 0); gtk_container_add (GTK_CONTAINER (loadingw), lbox1); gtk_widget_show (lbox1); lbox2 = gtk_hbox_new (FALSE, 0); gtk_container_border_width (GTK_CONTAINER (lbox2), 0); gtk_box_pack_start (GTK_BOX (lbox1), lbox2, FALSE, FALSE, 0); gtk_widget_show (lbox2); ltable1 = gtk_table_new (1, 2, FALSE); gtk_box_pack_start (GTK_BOX (lbox2), ltable1, TRUE, TRUE, 0); gtk_widget_show (ltable1); #ifdef USE_GNOME im9 = gdk_imlib_load_image (PKGDATADIR"pix/gologog.png"); #else im9 = gdk_imlib_load_image (PKGDATADIR"pix/gologo.png"); #endif w9 = im9->rgb_width; h9 = im9->rgb_height; gdk_imlib_render (im9, w9, h9); lpixmap = gdk_imlib_move_image (im9); lpixmapwid = gtk_pixmap_new (lpixmap, NULL); gtk_table_attach (GTK_TABLE (ltable1), lpixmapwid, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (lpixmapwid); gdk_flush (); lbar = gtk_progress_bar_new (); gtk_table_attach (GTK_TABLE (ltable1), lbar, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (lbar); gtk_widget_show (loadingw); while (gtk_events_pending ()) { gtk_main_iteration (); } for (ibuttonrr = 1; ibuttonrr <= 361; ibuttonrr++) { PixmapOnButton (ibuttonrr); pvalue = lprogress (pvalue); } gtk_widget_destroy (loadingw); if (itooltips == 0) { itooltips = 1; Tooltips (); } gtk_widget_show (window1); }
void InitTravelMatrix(long SERVICESrecordID, BOOL bDisplayStatus) { typedef struct PATHStruct { long NODESrecordID; long ROUTESrecordID; long directionIndex; long PATTERNNAMESrecordID; long nodeSequence; } PATHDef; typedef struct COMBINEDStruct { long fromNODESrecordID; long toNODESrecordID; long ROUTESrecordID; long directionIndex; long PATTERNNAMESrecordID; int fromNodePos; int toNodePos; } COMBINEDDef; typedef struct BESTStruct { long fromNODESrecordID; long toNODESrecordID; long TRIPSrecordID; long cushionTime; long dwellTime; long tripTime[2]; } BESTDef; PATHDef from[UPPERLIMIT]; PATHDef to[UPPERLIMIT]; COMBINEDDef fromTo[UPPERLIMIT]; GenerateTripDef GTResults; GetConnectionTimeDef GCTData; float distance; long fromEquiv[UPPERLIMIT]; long toEquiv[UPPERLIMIT]; long NODESrecordID; long nodeList[50]; long fromNODESrecordID; long toNODESrecordID; long deadheadTime; BOOL bFound; int rcode2; int numNodes; int nI; int nJ; int nK; int nL; int nM; int pos; int numFromEquiv; int numToEquiv; int numFromTo; int numFrom; int numTo; int serviceIndex; // // Set up the service index // SERVICESKey0.recordID = SERVICESrecordID; btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); serviceIndex = SERVICES.number - 1; if(serviceIndex < 0 || serviceIndex > NODES_RELIEFLABELS_LENGTH - 1) { serviceIndex = 0; } strncpy(szarString, SERVICES.name, SERVICES_NAME_LENGTH); trim(szarString, SERVICES_NAME_LENGTH); // // Show the status bar // if(bDisplayStatus) { sprintf(tempString, "Status for service %s", szarString); StatusBarStart(NULL, tempString); LoadString(hInst, TEXT_135, tempString, TEMPSTRING_LENGTH); StatusBarText(tempString); } // // Set up the node equivalences // rcode2 = btrieve(B_GETFIRST, TMS_CONNECTIONS, &CONNECTIONS, &CONNECTIONSKey0, 0); numNodeEquiv = 0; while(rcode2 == 0 && numNodeEquiv < MAXNODEEQUIV) { if(CONNECTIONS.flags & CONNECTIONS_FLAG_EQUIVALENT) { NODEEQUIV[numNodeEquiv].fromNODESrecordID = CONNECTIONS.fromNODESrecordID; NODEEQUIV[numNodeEquiv].toNODESrecordID = CONNECTIONS.toNODESrecordID; numNodeEquiv++; } rcode2 = btrieve(B_GETNEXT, TMS_CONNECTIONS, &CONNECTIONS, &CONNECTIONSKey0, 0); } // // Set up, along with all garages, all relief points // rcode2 = btrieve(B_GETFIRST, TMS_NODES, &NODES, &NODESKey0, 0); numNodes = 0; while(rcode2 == 0) { if(NODES.flags & NODES_FLAG_GARAGE || (NODES.reliefLabels[serviceIndex] != ' ' && NODES.reliefLabels[serviceIndex] != '-')) { nodeList[numNodes] = NODES.recordID; numNodes++; } rcode2 = btrieve(B_GETNEXT, TMS_NODES, &NODES, &NODESKey0, 0); } // // Free any previous incarnation of the travel matrix // for(nI = 0; nI < numInTM[serviceIndex]; nI++) { TMSHeapFree(TRAVELMATRIX[serviceIndex][nI].pTrips); } // // Build the matrix // numInTM[serviceIndex] = 0; for(nI = 0; nI < numNodes - 1; nI++) { if(bDisplayStatus) { StatusBar((long)nI, (long)numNodes); } for(nJ = 1; nJ < numNodes; nJ++) { for(nK = 0; nK < 2; nK++) { fromNODESrecordID = nK == 0 ? nodeList[nI] : nodeList[nJ]; toNODESrecordID = nK == 0 ? nodeList[nJ] : nodeList[nI]; // // Get the node equivalences from the NODEEQUIV structure // numFromEquiv = 0; numToEquiv = 0; for(nL = 0; nL < numNodeEquiv; nL++) { if(NODEEQUIV[nL].fromNODESrecordID == fromNODESrecordID) { fromEquiv[numFromEquiv++] = NODEEQUIV[nL].toNODESrecordID; } else if(NODEEQUIV[nL].toNODESrecordID == fromNODESrecordID) { fromEquiv[numFromEquiv++] = NODEEQUIV[nL].fromNODESrecordID; } else if(NODEEQUIV[nL].fromNODESrecordID == toNODESrecordID) { toEquiv[numToEquiv++] = NODEEQUIV[nL].toNODESrecordID; } else if(NODEEQUIV[nL].toNODESrecordID == toNODESrecordID) { toEquiv[numToEquiv++] = NODEEQUIV[nL].fromNODESrecordID; } } // // Ok, we know where we are (fromNODESrecordID) and where we have to go to (toNODESrecordID). // // The algorithm is find the route required to get us from a to b in the shortest time, // placing instructions in "travelInstructions". // // First, get a list of patterns that fromNODESrecordID (or one of its equivalences) reside in. // Note that we keep PATTERNS.NODESrecordID, as it may actually be the substituted, equivalent, node. // numFrom = 0; for(nL = 0; nL < numFromEquiv + 1; nL++) { NODESrecordID = nL == 0 ? fromNODESrecordID : fromEquiv[nL - 1]; PATTERNSKey1.NODESrecordID = NODESrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_PATTERNS, &PATTERNS, &PATTERNSKey1, 1); while(rcode2 == 0 && PATTERNS.NODESrecordID == NODESrecordID) { if(PATTERNS.SERVICESrecordID == SERVICESrecordID) { from[numFrom].NODESrecordID = PATTERNS.NODESrecordID; from[numFrom].ROUTESrecordID = PATTERNS.ROUTESrecordID; from[numFrom].directionIndex = PATTERNS.directionIndex; from[numFrom].PATTERNNAMESrecordID = PATTERNS.PATTERNNAMESrecordID; from[numFrom].nodeSequence = PATTERNS.nodeSequence; numFrom++; } rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey1, 1); } } // // If there weren't any, cycle through // if(numFrom == 0) { continue; } // // Now, get a list of patterns that toNODESrecordID are in. // numTo = 0; for(nL = 0; nL < numToEquiv + 1; nL++) { NODESrecordID = nL == 0 ? toNODESrecordID : toEquiv[nL - 1]; PATTERNSKey1.NODESrecordID = NODESrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_PATTERNS, &PATTERNS, &PATTERNSKey1, 1); while(rcode2 == 0 && PATTERNS.NODESrecordID == NODESrecordID) { if(PATTERNS.SERVICESrecordID == SERVICESrecordID) { to[numTo].NODESrecordID = PATTERNS.NODESrecordID; to[numTo].ROUTESrecordID = PATTERNS.ROUTESrecordID; to[numTo].directionIndex = PATTERNS.directionIndex; to[numTo].PATTERNNAMESrecordID = PATTERNS.PATTERNNAMESrecordID; to[numTo].nodeSequence = PATTERNS.nodeSequence; numTo++; } rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey1, 1); } } // // If there weren't any, cycle through // if(numTo == 0) continue; // // Develop a list of patterns that have both the from and to nodes // on them, and that have the "to" node following the "from" node. // // First, "merge" the lists // numFromTo = 0; for(nL = 0; nL < numFrom; nL++) { for(nM = 0; nM < numTo; nM++) { if(from[nL].ROUTESrecordID == to[nM].ROUTESrecordID && from[nL].directionIndex == to[nM].directionIndex && from[nL].PATTERNNAMESrecordID == to[nM].PATTERNNAMESrecordID && from[nL].nodeSequence < to[nM].nodeSequence) { fromTo[numFromTo].fromNODESrecordID = from[nL].NODESrecordID; fromTo[numFromTo].toNODESrecordID = to[nM].NODESrecordID; fromTo[numFromTo].ROUTESrecordID = from[nL].ROUTESrecordID; fromTo[numFromTo].directionIndex = from[nL].directionIndex; fromTo[numFromTo].PATTERNNAMESrecordID = from[nL].PATTERNNAMESrecordID; fromTo[numFromTo].fromNodePos = NO_RECORD; fromTo[numFromTo].toNodePos = NO_RECORD; numFromTo++; } } } // // Did we get any? // if(numFromTo == 0) continue; // // Second, establish fromNodePos and toNodePos so we // know where to look on the tripTimes array later on // for(nL = 0; nL < numFromTo; nL++) { PATTERNSKey2.ROUTESrecordID = fromTo[nL].ROUTESrecordID; PATTERNSKey2.SERVICESrecordID = SERVICESrecordID; PATTERNSKey2.directionIndex = fromTo[nL].directionIndex; PATTERNSKey2.PATTERNNAMESrecordID = fromTo[nL].PATTERNNAMESrecordID; PATTERNSKey2.nodeSequence = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); pos = 0; while(rcode2 == 0 && PATTERNS.ROUTESrecordID == fromTo[nL].ROUTESrecordID && PATTERNS.SERVICESrecordID == SERVICESrecordID && PATTERNS.directionIndex == fromTo[nL].directionIndex && PATTERNSKey2.PATTERNNAMESrecordID == fromTo[nL].PATTERNNAMESrecordID) { if(!(PATTERNS.flags & PATTERNS_FLAG_BUSSTOP)) { if(PATTERNS.NODESrecordID == fromTo[nL].fromNODESrecordID && fromTo[nL].fromNodePos == NO_RECORD) { fromTo[nL].fromNodePos = pos; } else if(PATTERNS.NODESrecordID == fromTo[nL].toNODESrecordID && fromTo[nL].toNodePos == NO_RECORD) { fromTo[nL].toNodePos = pos; break; } pos++; } rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } } // // Build the matrix // TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].fromNODESrecordID = fromNODESrecordID; // nodeList[nI]; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].toNODESrecordID = toNODESrecordID; // nodeList[nJ]; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips = (TMTRIPSDef *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(TMTRIPSDef) * 50); if(TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips == NULL) { AllocationError(__FILE__, __LINE__, FALSE); return; } TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].currentAlloc = 50; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].numTrips = 0; for(nL = 0; nL < numFromTo; nL++) { TRIPSKey1.ROUTESrecordID = fromTo[nL].ROUTESrecordID; TRIPSKey1.SERVICESrecordID = SERVICESrecordID; TRIPSKey1.directionIndex = fromTo[nL].directionIndex; TRIPSKey1.tripSequence = NO_RECORD; rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_TRIPS, &TRIPS, &TRIPSKey1, 1); while(rcode2 == 0 && TRIPS.ROUTESrecordID == fromTo[nL].ROUTESrecordID && TRIPS.SERVICESrecordID == SERVICESrecordID && TRIPS.directionIndex == fromTo[nL].directionIndex) { if(TRIPS.PATTERNNAMESrecordID == fromTo[nL].PATTERNNAMESrecordID) { GenerateTrip(TRIPS.ROUTESrecordID, TRIPS.SERVICESrecordID, TRIPS.directionIndex, TRIPS.PATTERNNAMESrecordID, TRIPS.timeAtMLP, GENERATETRIP_FLAG_DISPLAYERRORS, >Results); nM = TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].numTrips; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips[nM].TRIPSrecordID = TRIPS.recordID; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips[nM].tripTime[0] = GTResults.tripTimes[fromTo[nL].fromNodePos]; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips[nM].tripTime[1] = GTResults.tripTimes[fromTo[nL].toNodePos]; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].numTrips++; if(TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].numTrips >= TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].currentAlloc) { TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].currentAlloc += 50; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips = (TMTRIPSDef *)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips, sizeof(TMTRIPSDef) * TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].currentAlloc); if(TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips == NULL) { AllocationError(__FILE__, __LINE__, TRUE); return; } } } rcode2 = btrieve(B_GETNEXT, TMS_TRIPS, &TRIPS, &TRIPSKey1, 1); } // // Pass 2 - check on pullouts and pullins // rcode2 = btrieve(B_GETFIRST, TMS_TRIPS, &TRIPS, &TRIPSKey2, 2); while(rcode2 == 0) { // // Pullout // if(TRIPS.SERVICESrecordID == SERVICESrecordID && TRIPS.standard.POGNODESrecordID == fromNODESrecordID) { PATTERNSKey1.NODESrecordID = toNODESrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_PATTERNS, &PATTERNS, &PATTERNSKey1, 1); bFound = FALSE; while(rcode2 == 0 && PATTERNS.NODESrecordID == toNODESrecordID) { if(PATTERNS.ROUTESrecordID == TRIPS.ROUTESrecordID && PATTERNS.SERVICESrecordID == TRIPS.SERVICESrecordID && PATTERNS.directionIndex == TRIPS.directionIndex && PATTERNS.PATTERNNAMESrecordID == TRIPS.PATTERNNAMESrecordID) { bFound = TRUE; break; } rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey1, 1); } if(bFound) { PATTERNSKey2.ROUTESrecordID = TRIPS.ROUTESrecordID; PATTERNSKey2.SERVICESrecordID = TRIPS.SERVICESrecordID; PATTERNSKey2.directionIndex = TRIPS.directionIndex; PATTERNSKey2.PATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; PATTERNSKey2.nodeSequence = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); pos = 0; while(rcode2 == 0 && PATTERNS.ROUTESrecordID == TRIPS.ROUTESrecordID && PATTERNS.SERVICESrecordID == TRIPS.SERVICESrecordID && PATTERNS.directionIndex == TRIPS.directionIndex && PATTERNSKey2.PATTERNNAMESrecordID == TRIPS.PATTERNNAMESrecordID) { if(!(PATTERNS.flags & PATTERNS_FLAG_BUSSTOP)) { if(PATTERNS.NODESrecordID == toNODESrecordID) break; pos++; } rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } GenerateTrip(TRIPS.ROUTESrecordID, TRIPS.SERVICESrecordID, TRIPS.directionIndex, TRIPS.PATTERNNAMESrecordID, TRIPS.timeAtMLP, GENERATETRIP_FLAG_DISPLAYERRORS, >Results); GCTData.fromPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.toPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.fromROUTESrecordID = TRIPS.ROUTESrecordID; GCTData.fromSERVICESrecordID = TRIPS.SERVICESrecordID; GCTData.toROUTESrecordID = TRIPS.ROUTESrecordID; GCTData.toSERVICESrecordID = TRIPS.SERVICESrecordID; GCTData.fromNODESrecordID = TRIPS.standard.POGNODESrecordID; GCTData.toNODESrecordID = GTResults.firstNODESrecordID; GCTData.timeOfDay = GTResults.firstNodeTime; deadheadTime = GetConnectionTime(GCT_FLAG_DEADHEADTIME, &GCTData, &distance); distance = (float)fabs((double)distance); if(deadheadTime != NO_RECORD) { nM = TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].numTrips; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips[nM].TRIPSrecordID = TRIPS.recordID; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips[nM].tripTime[0] = GTResults.firstNodeTime - deadheadTime; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips[nM].tripTime[1] = GTResults.tripTimes[pos]; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].numTrips++; if(TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].numTrips >= TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].currentAlloc) { TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].currentAlloc += 50; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips = (TMTRIPSDef *)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips, sizeof(TMTRIPSDef) * TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].currentAlloc); if(TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips == NULL) { AllocationError(__FILE__, __LINE__, FALSE); return; } } } } } // // Pullin // if(TRIPS.SERVICESrecordID == SERVICESrecordID && TRIPS.standard.PIGNODESrecordID == toNODESrecordID) { PATTERNSKey1.NODESrecordID = fromNODESrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_PATTERNS, &PATTERNS, &PATTERNSKey1, 1); bFound = FALSE; while(rcode2 == 0 && PATTERNS.NODESrecordID == fromNODESrecordID) { if(PATTERNS.ROUTESrecordID == TRIPS.ROUTESrecordID && PATTERNS.SERVICESrecordID == TRIPS.SERVICESrecordID && PATTERNS.directionIndex == TRIPS.directionIndex && PATTERNS.PATTERNNAMESrecordID == TRIPS.PATTERNNAMESrecordID) { bFound = TRUE; break; } rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey1, 1); } if(bFound) { PATTERNSKey2.ROUTESrecordID = TRIPS.ROUTESrecordID; PATTERNSKey2.SERVICESrecordID = TRIPS.SERVICESrecordID; PATTERNSKey2.directionIndex = TRIPS.directionIndex; PATTERNSKey2.PATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; PATTERNSKey2.nodeSequence = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); pos = 0; while(rcode2 == 0 && PATTERNS.ROUTESrecordID == TRIPS.ROUTESrecordID && PATTERNS.SERVICESrecordID == TRIPS.SERVICESrecordID && PATTERNS.directionIndex == TRIPS.directionIndex && PATTERNSKey2.PATTERNNAMESrecordID == TRIPS.PATTERNNAMESrecordID) { if(!(PATTERNS.flags & PATTERNS_FLAG_BUSSTOP)) { if(PATTERNS.NODESrecordID == fromNODESrecordID) break; pos++; } rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } GenerateTrip(TRIPS.ROUTESrecordID, TRIPS.SERVICESrecordID, TRIPS.directionIndex, TRIPS.PATTERNNAMESrecordID, TRIPS.timeAtMLP, GENERATETRIP_FLAG_DISPLAYERRORS, >Results); GCTData.fromPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.toPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.fromROUTESrecordID = TRIPS.ROUTESrecordID; GCTData.fromSERVICESrecordID = TRIPS.SERVICESrecordID; GCTData.toROUTESrecordID = TRIPS.ROUTESrecordID; GCTData.toSERVICESrecordID = TRIPS.SERVICESrecordID; GCTData.fromNODESrecordID = GTResults.lastNODESrecordID; GCTData.toNODESrecordID = TRIPS.standard.PIGNODESrecordID; GCTData.timeOfDay = GTResults.lastNodeTime; deadheadTime = GetConnectionTime(GCT_FLAG_DEADHEADTIME, &GCTData, &distance); distance = (float)fabs((double)distance); if(deadheadTime != NO_RECORD) { nM = TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].numTrips; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips[nM].TRIPSrecordID = TRIPS.recordID; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips[nM].tripTime[0] = GTResults.tripTimes[pos]; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips[nM].tripTime[1] = GTResults.lastNodeTime + deadheadTime; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].numTrips++; if(TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].numTrips >= TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].currentAlloc) { TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].currentAlloc += 50; TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips = (TMTRIPSDef *)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips, sizeof(TMTRIPSDef) * TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].currentAlloc); if(TRAVELMATRIX[serviceIndex][numInTM[serviceIndex]].pTrips == NULL) { AllocationError(__FILE__, __LINE__, FALSE); return; } } } } } rcode2 = btrieve(B_GETNEXT, TMS_TRIPS, &TRIPS, &TRIPSKey2, 2); } }// nL numInTM[serviceIndex]++; } // nK } // nJ } // nI if(bDisplayStatus) { StatusBar((long)numNodes, (long)numNodes); StatusBarEnd(); } }
BOOL FAR TMSRPT63(TMSRPTPassedDataDef *pPassedData) { REPORTPARMSDef REPORTPARMS; HFILE hfOutputFile; BOOL bKeepGoing = FALSE; BOOL bRC; BOOL bIncludeRouteDescriptions; char outputString[512]; char routeNumberAndName[ROUTES_NUMBER_LENGTH + 3 + ROUTES_NAME_LENGTH + 1]; char serviceName[SERVICES_NAME_LENGTH + 1]; char directionName[DIRECTIONS_LONGNAME_LENGTH + 1]; char patternName[PATTERNNAMES_NAME_LENGTH + 1]; char *tempString2; long statbarTotal; long patternInUse; int nI; int nJ; int nK; int rcode2; int seq; pPassedData->nReportNumber = 62; pPassedData->numDataFiles = 1; // // See what he wants // REPORTPARMS.nReportNumber = pPassedData->nReportNumber; REPORTPARMS.ROUTESrecordID = m_RouteRecordID; REPORTPARMS.SERVICESrecordID = m_ServiceRecordID; REPORTPARMS.COMMENTSrecordID = NO_RECORD; REPORTPARMS.pRouteList = NULL; REPORTPARMS.pServiceList = NULL; REPORTPARMS.flags = RPFLAG_ROUTES | RPFLAG_SERVICES | RPFLAG_PATTERNNAMES | RPFLAG_COMMENTS; bRC = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_RPTPARMS), hWndMain, (DLGPROC)RPTPARMSMsgProc, (LPARAM)&REPORTPARMS); if(!bRC) { return(FALSE); } // // Check the list of routes and services // if(REPORTPARMS.numRoutes == 0 || REPORTPARMS.numServices == 0) { goto deallocate; } // // Open the output file // strcpy(tempString, szReportsTempFolder); strcat(tempString, "\\TMSRPT63.txt"); hfOutputFile = _lcreat(tempString, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_202, szFormatString, sizeof(szFormatString)); sprintf(szarString, szFormatString, tempString); MessageBeep(MB_ICONSTOP); MessageBox((HWND)NULL, szarString, TMS, MB_ICONSTOP); goto deallocate; } strcpy(pPassedData->szReportDataFile[0], tempString); // // See if he wants to include route descriptions // LoadString(hInst, TEXT_378, tempString, TEMPSTRING_LENGTH); MessageBeep(MB_ICONQUESTION); bIncludeRouteDescriptions = (MessageBox(NULL, tempString, TMS, MB_ICONQUESTION | MB_YESNO) == IDYES); // // Loop through the routes // LoadString(hInst, TEXT_117, tempString, TEMPSTRING_LENGTH); StatusBarStart(hWndMain, tempString); statbarTotal = REPORTPARMS.numRoutes * REPORTPARMS.numServices; seq = 0; for(nI = 0; nI < REPORTPARMS.numRoutes; nI++) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } ROUTESKey0.recordID = REPORTPARMS.pRouteList[nI]; rcode2 = btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0); if(rcode2 != 0) { continue; } strncpy(routeNumberAndName, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(routeNumberAndName, ROUTES_NUMBER_LENGTH); strcat(routeNumberAndName, " - "); strncpy(tempString, ROUTES.name, ROUTES_NAME_LENGTH); trim(tempString, ROUTES_NAME_LENGTH); strcat(routeNumberAndName, tempString); // // Loop through the services // for(nJ = 0; nJ < REPORTPARMS.numServices; nJ++) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } SERVICESKey0.recordID = REPORTPARMS.pServiceList[nJ]; rcode2 = btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); if(rcode2 != 0) { continue; } strncpy(serviceName, SERVICES.name, SERVICES_NAME_LENGTH); trim(serviceName, SERVICES_NAME_LENGTH); LoadString(hInst, TEXT_118, szarString, sizeof(szarString)); sprintf(tempString, szarString, routeNumberAndName, serviceName); StatusBarText(tempString); StatusBar((long)(nI * REPORTPARMS.numServices + nJ), (long)statbarTotal); if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } // // Loop through the directions // for(nK = 0; nK < 2; nK++) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } if(ROUTES.DIRECTIONSrecordID[nK] == NO_RECORD) { continue; } DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[nK]; rcode2 = btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); if(rcode2 != 0) { continue; } strncpy(directionName, DIRECTIONS.longName, DIRECTIONS_LONGNAME_LENGTH); trim(directionName, DIRECTIONS_LONGNAME_LENGTH); // // See if this pattern exists on this route/ser/dir. // If not, use the BASE pattern instead. // PATTERNSKey2.ROUTESrecordID = ROUTES.recordID; PATTERNSKey2.SERVICESrecordID = SERVICES.recordID; PATTERNSKey2.directionIndex = nK; PATTERNSKey2.PATTERNNAMESrecordID = REPORTPARMS.PATTERNNAMESrecordID; PATTERNSKey2.nodeSequence = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); if(rcode2 == 0 && PATTERNS.ROUTESrecordID == ROUTES.recordID && PATTERNS.SERVICESrecordID == SERVICES.recordID && PATTERNS.directionIndex == nK && PATTERNSKey2.PATTERNNAMESrecordID == REPORTPARMS.PATTERNNAMESrecordID) { patternInUse = REPORTPARMS.PATTERNNAMESrecordID; } else { patternInUse = basePatternRecordID; } PATTERNNAMESKey0.recordID = patternInUse; btrieve(B_GETEQUAL, TMS_PATTERNNAMES, &PATTERNNAMES, &PATTERNNAMESKey0, 0); strncpy(patternName, PATTERNNAMES.name, PATTERNNAMES_NAME_LENGTH); trim(patternName, PATTERNNAMES_NAME_LENGTH); // // Get the pattern nodes // PATTERNSKey2.ROUTESrecordID = ROUTES.recordID; PATTERNSKey2.SERVICESrecordID = SERVICES.recordID; PATTERNSKey2.directionIndex = nK; PATTERNSKey2.PATTERNNAMESrecordID = patternInUse; PATTERNSKey2.nodeSequence = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); while(rcode2 == 0 && PATTERNS.ROUTESrecordID == ROUTES.recordID && PATTERNS.SERVICESrecordID == SERVICES.recordID && PATTERNS.directionIndex == nK && PATTERNSKey2.PATTERNNAMESrecordID == patternInUse) { NODESKey0.recordID = PATTERNS.NODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); // // Build the output string // // Sequence, service, route, direction // sprintf(outputString, "%d\t%s\t%s\t%s\t", seq++, serviceName, routeNumberAndName, directionName); // // Jurisdiction // if(NODES.JURISDICTIONSrecordID == NO_RECORD) { strcpy(tempString, ""); } else { JURISDICTIONSKey0.recordID = NODES.JURISDICTIONSrecordID; btrieve(B_GETEQUAL, TMS_JURISDICTIONS, &JURISDICTIONS, &JURISDICTIONSKey0, 0); strncpy(tempString, JURISDICTIONS.name, JURISDICTIONS_NAME_LENGTH); trim(tempString, JURISDICTIONS_NAME_LENGTH); } strcat(outputString, tempString); strcat(outputString, "\t"); // // Comment code // if(NODES.COMMENTSrecordID == NO_RECORD) { strcpy(tempString, ""); } else { COMMENTSKey0.recordID = NODES.COMMENTSrecordID; btrieve(B_GETEQUAL, TMS_COMMENTS, &COMMENTS, &COMMENTSKey0, 0); strncpy(tempString, COMMENTS.code, COMMENTS_CODE_LENGTH); trim(tempString, COMMENTS_CODE_LENGTH); } strcat(outputString, tempString); strcat(outputString, "\t"); // // Node abbreviation // strncpy(tempString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(tempString, NODES_ABBRNAME_LENGTH); strcat(outputString, tempString); strcat(outputString, "\t"); // // Node long name // strncpy(tempString, NODES.longName, NODES_LONGNAME_LENGTH); trim(tempString, NODES_LONGNAME_LENGTH); strcat(outputString, tempString); strcat(outputString, "\t"); // // Node intersection // strncpy(tempString, NODES.intersection, NODES_INTERSECTION_LENGTH); trim(tempString, NODES_INTERSECTION_LENGTH); strcat(outputString, tempString); strcat(outputString, "\t"); // // Latitude // sprintf(tempString, "%12.6f", NODES.latitude); strcat(outputString, tempString); strcat(outputString, "\t"); // // Longitude // sprintf(tempString, "%12.6f", NODES.longitude); strcat(outputString, tempString); strcat(outputString, "\t"); // // Node description // strncpy(tempString, NODES.description, NODES_DESCRIPTION_LENGTH); trim(tempString, NODES_DESCRIPTION_LENGTH); strcat(outputString, tempString); strcat(outputString, "\t"); // // Pattern name // strcat(outputString, patternName); strcat(outputString, "\r\n"); // // Write it out // _lwrite(hfOutputFile, outputString, strlen(outputString)); // // Get the next node in the BASE pattern // rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } // while // // Spit out the comments // if(bIncludeRouteDescriptions && ROUTES.COMMENTSrecordID != NO_RECORD) { sprintf(outputString, "%d\t%s\t%s\t%s\r\n", seq++, serviceName, routeNumberAndName, directionName); _lwrite(hfOutputFile, outputString, strlen(outputString)); recordLength[TMS_COMMENTS] = COMMENTS_TOTAL_LENGTH; COMMENTSKey0.recordID = ROUTES.COMMENTSrecordID; btrieve(B_GETEQUAL, TMS_COMMENTS, pCommentText, &COMMENTSKey0, 0); recordLength[TMS_COMMENTS] = COMMENTS_FIXED_LENGTH; for( tempString2 = strtok(&pCommentText[COMMENTS_FIXED_LENGTH], "\r\n"); tempString2; tempString2 = strtok(NULL, "\r\n") ) { sprintf(outputString, "%d\t%s\t%s\t%s\t\t\t\t\"%s\"\r\n", seq++, serviceName, routeNumberAndName, directionName, tempString2); _lwrite(hfOutputFile, outputString, strlen(outputString)); } } } // nK } // nJ } // nI bKeepGoing = TRUE; // // Free allocated memory // deallocate: TMSHeapFree(REPORTPARMS.pRouteList); TMSHeapFree(REPORTPARMS.pServiceList); _lclose(hfOutputFile); StatusBarEnd(); if(!bKeepGoing) { return(FALSE); } // // All done // return(TRUE); }
BOOL FAR TMSRPT86(TMSRPTPassedDataDef *pPassedData) { GenerateTripDef GTResults; HFILE hfOutputFile; BOOL bKeepGoing = FALSE; BOOL bFound; char dummy[256]; char outputString[512]; long statbarTotal; long saveTimeFormat; long lastTripNumber; long maxTrips; long patternNodes[MAXTRIPTIMES]; long tempLong; int nI; int nJ; int currentRoute; int currentService; int numRoutes; int numServices; int rcode2; int numNodes; saveTimeFormat = timeFormat; timeFormat = PREFERENCES_MILITARY; // // Create the sub-folder for the output files and chdir into it // nI = (_mkdir(OUTPUT_FOLDER_NAME) == 0) ? TEXT_333 : TEXT_334; LoadString(hInst, nI, szFormatString, SZFORMATSTRING_LENGTH); sprintf(tempString, szFormatString, OUTPUT_FOLDER_NAME); MessageBeep(MB_ICONINFORMATION); MessageBox(NULL, tempString, TMS, MB_OK); chdir(OUTPUT_FOLDER_NAME); // // Open the output file // hfOutputFile = _lcreat("tripschedule.csv", 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_202, szFormatString, sizeof(szFormatString)); sprintf(szarString, szFormatString, tempString); MessageBeep(MB_ICONSTOP); MessageBox((HWND)NULL, szarString, TMS, MB_ICONSTOP); goto deallocate; } // // Get the number of routes and services // for the benefit of the status bar // rcode2 = btrieve(B_STAT, TMS_ROUTES, &BSTAT, dummy, 0); if(rcode2 != 0 || BSTAT.numRecords == 0) { TMSError(NULL, MB_ICONSTOP, ERROR_008, (HANDLE)NULL); goto deallocate; } numRoutes = BSTAT.numRecords; rcode2 = btrieve(B_STAT, TMS_SERVICES, &BSTAT, dummy, 0); if(rcode2 != 0 || BSTAT.numRecords == 0) { TMSError(NULL, MB_ICONSTOP, ERROR_007, (HANDLE)NULL); goto deallocate; } numServices = BSTAT.numRecords; // // maxTrips // rcode2 = btrieve(B_STAT, TMS_TRIPS, &BSTAT, dummy, 0); maxTrips = rcode2 == 0 ? BSTAT.numRecords : 0; // // Verify that all trips in the system are numbered // StatusBarText("Checking if all trips are numbered"); rcode2 = btrieve(B_GETFIRST, TMS_TRIPS, &TRIPS, &TRIPSKey0, 0); nI = 0; bFound = FALSE; lastTripNumber = NO_RECORD; while(rcode2 == 0) { if(StatusBarAbort()) { goto deallocate; } StatusBar((long)nI, (long)maxTrips); if(TRIPS.tripNumber <= 0) { MessageBeep(MB_ICONQUESTION); LoadString(hInst, ERROR_344, tempString, TEMPSTRING_LENGTH); if(MessageBox(NULL, tempString, TMS, MB_ICONQUESTION | MB_OK) != IDOK) { goto deallocate; } bFound = TRUE; break; } if(TRIPS.tripNumber > lastTripNumber) { lastTripNumber = TRIPS.tripNumber; } nI++; rcode2 = btrieve(B_GETNEXT, TMS_TRIPS, &TRIPS, &TRIPSKey0, 0); } if(bFound) { StatusBarText("Renumbering Trips"); rcode2 = btrieve(B_GETFIRST, TMS_TRIPS, &TRIPS, &TRIPSKey0, 0); nI = 1; while(rcode2 == 0) { if(StatusBarAbort()) { goto deallocate; } StatusBar((long)nI, (long)maxTrips); TRIPS.tripNumber = (long)nI; nI++; rcode2 = btrieve(B_UPDATE, TMS_TRIPS, &TRIPS, &TRIPSKey0, 0); rcode2 = btrieve(B_GETNEXT, TMS_TRIPS, &TRIPS, &TRIPSKey0, 0); } lastTripNumber = nI; } // // Loop through the routes // LoadString(hInst, TEXT_117, tempString, TEMPSTRING_LENGTH); StatusBarStart(hWndMain, tempString); statbarTotal = numRoutes * numServices; currentRoute = 0; rcode2 = btrieve(B_GETFIRST, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); while(rcode2 == 0) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } // // Do not process employee shuttles // if(!(ROUTES.flags & ROUTES_FLAG_EMPSHUTTLE)) { // // Loop through the services // currentService = 1; rcode2 = btrieve(B_GETFIRST, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); while(rcode2 == 0) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } // // Loop through all the trips on this route/service/direction // for(nI = 0; nI < 2; nI++) { if(ROUTES.DIRECTIONSrecordID[nI] == NO_RECORD) { continue; } // // Get the trips // TRIPSKey1.ROUTESrecordID = ROUTES.recordID; TRIPSKey1.SERVICESrecordID = SERVICES.recordID; TRIPSKey1.directionIndex = nI; TRIPSKey1.tripSequence = NO_TIME; rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_TRIPS, &TRIPS, &TRIPSKey1, 1); while(rcode2 == 0 && TRIPS.ROUTESrecordID == ROUTES.recordID && TRIPS.SERVICESrecordID == SERVICES.recordID && TRIPS.directionIndex == nI) { DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[nI]; btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); // // Display where we are in the status bar // strncpy(tempString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(tempString, ROUTES_NUMBER_LENGTH); strcat(tempString, " - "); strncpy(szarString, ROUTES.name, ROUTES_NAME_LENGTH); trim(szarString, ROUTES_NAME_LENGTH); strcat(tempString, szarString); strcat(tempString, "\n"); strncpy(szarString, SERVICES.name, SERVICES_NAME_LENGTH); trim(szarString, SERVICES_NAME_LENGTH); strcat(tempString, szarString); strcat(tempString, " - "); strncpy(szarString, DIRECTIONS.longName, DIRECTIONS_LONGNAME_LENGTH); trim(szarString, DIRECTIONS_LONGNAME_LENGTH); strcat(tempString, szarString); StatusBarText(tempString); StatusBar((long)(currentRoute * (numServices - 1) + currentService), (long)statbarTotal); if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } // // Build up the output string // // Company Id // sprintf(outputString, "%s,", COMPANY_ID); // // Service name // strncpy(tempString, SERVICES.name, SERVICES_NAME_LENGTH); trim(tempString, SERVICES_NAME_LENGTH); strcat(outputString, tempString); strcat(outputString, ","); // // Trip number // sprintf(tempString, "%ld,", TRIPS.tripNumber); strcat(outputString, tempString); // // Block number // sprintf(tempString, "%ld,", TRIPS.standard.blockNumber); strcat(outputString, tempString); // // Duty number (currently unused) // strcat(outputString, ","); // // Pattern name // PATTERNNAMESKey0.recordID = TRIPS.PATTERNNAMESrecordID; btrieve(B_GETEQUAL, TMS_PATTERNNAMES, &PATTERNNAMES, &PATTERNNAMESKey0, 0); strncpy(tempString, PATTERNNAMES.name, PATTERNNAMES_NAME_LENGTH); trim(tempString, PATTERNNAMES_NAME_LENGTH); strcat(outputString, tempString); strcat(outputString, ","); // // Sign code // SIGNCODESKey0.recordID = TRIPS.SIGNCODESrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_SIGNCODES, &SIGNCODES, &SIGNCODESKey0, 0); if(rcode2 != 0) { strcpy(tempString, ""); } else { strncpy(tempString, SIGNCODES.code, SIGNCODES_CODE_LENGTH); trim(tempString, SIGNCODES_CODE_LENGTH); } strcat(outputString, tempString); strcat(outputString, ","); // // Nodes times // // Generate the trip // GenerateTrip(TRIPS.ROUTESrecordID, TRIPS.SERVICESrecordID, TRIPS.directionIndex, TRIPS.PATTERNNAMESrecordID, TRIPS.timeAtMLP, GENERATETRIP_FLAG_DISPLAYERRORS, >Results); // // Get the pattern nodes // PATTERNSKey2.ROUTESrecordID = TRIPS.ROUTESrecordID; PATTERNSKey2.SERVICESrecordID = TRIPS.SERVICESrecordID; PATTERNSKey2.PATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; PATTERNSKey2.directionIndex = TRIPS.directionIndex; PATTERNSKey2.nodeSequence = NO_RECORD; numNodes = 0; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); while(rcode2 == 0 && PATTERNS.ROUTESrecordID == TRIPS.ROUTESrecordID && PATTERNS.SERVICESrecordID == TRIPS.SERVICESrecordID && PATTERNS.PATTERNNAMESrecordID == TRIPS.PATTERNNAMESrecordID && PATTERNS.directionIndex == TRIPS.directionIndex) { if(!(PATTERNS.flags & PATTERNS_FLAG_BUSSTOP)) { patternNodes[numNodes] = PATTERNS.NODESrecordID; numNodes++; } rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } // // tripTimes[] contains the times at the timepoints in this pattern // // We're only interested in departure times, so if we // run into an arrive/leave, skip over the arrive time // for(nJ = 0; nJ < numNodes; nJ++) { if(nJ < numNodes - 1) { if(NodesEquivalent(patternNodes[nJ], patternNodes[nJ + 1], &tempLong)) { continue; } } strcat(outputString, Tchar(GTResults.tripTimes[nJ])); strcat(outputString, " "); } // // End of record // strcat(outputString, "\r\n"); // // Write it out // _lwrite(hfOutputFile, outputString, strlen(outputString)); // // Next trip // rcode2 = btrieve(B_GETNEXT, TMS_TRIPS, &TRIPS, &TRIPSKey1, 1); } // // Next direction // } // nI // // Next service // currentService++; rcode2 = btrieve(B_GETNEXT, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); } // // Not a shuttle // } // // Next route // currentRoute++; rcode2 = btrieve(B_GETNEXT, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); } bKeepGoing = TRUE; // // Free allocated memory // deallocate: timeFormat = saveTimeFormat; _lclose(hfOutputFile); StatusBarEnd(); chdir(".."); // // Let him know // strcpy(tempString, "Download of tripschedule.csv complete\n"); MessageBox(hWndMain, tempString, TMS, MB_OK); if(!bKeepGoing) { return(FALSE); } // // All done // return(TRUE); }
void InternetGo (void) { if ((ifilestuff == 0) && (inet == 0)) { shost = gtk_entry_get_text (GTK_ENTRY (connectentry1)); theaddress = atoaddr (shost); iport = atoi (gtk_entry_get_text (GTK_ENTRY (connectentry2))); gtk_widget_destroy (connectwindow); iyesno = 0; bzero ((char *) &host_addr, sizeof (host_addr)); host_addr.sin_family = AF_INET; host_addr.sin_addr.s_addr = inet_addr (inet_ntoa (*theaddress)); host_addr.sin_port = htons (iport); if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) < 0) { Message ("Unable to open socket.", 3, 0); } itheerror = connect (sockfd, (struct sockaddr *) &host_addr, sizeof (host_addr)); if (itheerror < 0) { sprintf (serrortemp, "Unable to connect to host (%s).", strerror (errno)); Message (serrortemp, 3, 0); } else { fcntl (sockfd, F_SETFL, O_NONBLOCK); biscomputer = 0; sprintf (bplayername, "%s", "unknown"); wiscomputer = 0; sprintf (wplayername, "%s", "unknown"); StatusBar (); if (ichangestuff == 0) { Play ("open.mp3", 0); } internetwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (internetwindow), "Internet window"); gtk_signal_connect (GTK_OBJECT (internetwindow), "delete_event", GTK_SIGNAL_FUNC (CloseSocket), NULL); gtk_window_set_policy (GTK_WINDOW (internetwindow), 0, 0, 1); gtk_container_border_width (GTK_CONTAINER (internetwindow), 0); gtk_widget_realize (internetwindow); internetbox1 = gtk_vbox_new (FALSE, 0); gtk_container_border_width (GTK_CONTAINER (internetbox1), 0); gtk_container_add (GTK_CONTAINER (internetwindow), internetbox1); gtk_widget_show (internetbox1); internetbox2 = gtk_hbox_new (FALSE, 0); gtk_container_border_width (GTK_CONTAINER (internetbox2), 0); gtk_box_pack_start (GTK_BOX (internetbox1), internetbox2, TRUE, TRUE, 5); gtk_widget_show (internetbox2); internetbox3 = gtk_vbox_new (FALSE, 0); gtk_container_border_width (GTK_CONTAINER (internetbox3), 0); gtk_box_pack_start (GTK_BOX (internetbox2), internetbox3, TRUE, TRUE, 0); gtk_widget_show (internetbox3); internettable1 = gtk_table_new (2, 1, FALSE); gtk_widget_show (internettable1); gtk_box_pack_start (GTK_BOX (internetbox3), internettable1, TRUE, TRUE, 0); internettable2 = gtk_table_new (2, 3, FALSE); gtk_widget_show (internettable2); gtk_box_pack_start (GTK_BOX (internetbox3), internettable2, TRUE, TRUE, 0); text = gtk_text_new (NULL, NULL); gtk_widget_set_usize (text, 535, 266); gtk_text_set_editable (GTK_TEXT (text), FALSE); gtk_table_attach (GTK_TABLE (internettable1), text, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 5, 0); gtk_widget_show (text); vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj); adj = (GTK_TEXT (text))->vadj; gtk_table_attach (GTK_TABLE (internettable1), vscrollbar, 1, 2, 0, 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 5, 0); gtk_widget_show (vscrollbar); cmap = gdk_colormap_get_system (); color.red = 0xffff; color.green = 0; color.blue = 0; if (!gdk_color_alloc (cmap, &color)) { Message ("Could not allocate color.", 3, 0); } gtk_widget_realize (text); wrapcheck = gtk_check_button_new_with_label ("wrap"); gtk_table_attach (GTK_TABLE (internettable2), wrapcheck, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 10); gtk_signal_connect (GTK_OBJECT (wrapcheck), "toggled", GTK_SIGNAL_FUNC (ToggleWrap), text); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wrapcheck), FALSE); gtk_widget_show (wrapcheck); internetentry = gtk_entry_new_with_max_length (50); gtk_signal_connect (GTK_OBJECT (internetentry), "activate", GTK_SIGNAL_FUNC (SendData), NULL); gtk_table_attach (GTK_TABLE (internettable2), internetentry, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 5, 10); gtk_widget_grab_focus (internetentry); gtk_widget_show (internetentry); inetsep = gtk_hseparator_new (); gtk_table_attach (GTK_TABLE (internettable2), inetsep, 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (inetsep); inetbutton = gtk_button_new_with_label ("Disconnect"); gtk_signal_connect (GTK_OBJECT (inetbutton), "clicked", GTK_SIGNAL_FUNC (CloseSocket), NULL); GTK_WIDGET_SET_FLAGS (inetbutton, GTK_CAN_DEFAULT); gtk_window_set_default (GTK_WINDOW (internetwindow), inetbutton); gtk_table_attach (GTK_TABLE (internettable2), inetbutton, 0, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 2, 2); gtk_widget_show (inetbutton); gtk_widget_show (internetwindow); inet = 1; ReceiveData (); } } }
BOOL CALLBACK ADDBLOCKMsgProc(HWND hWndDlg, UINT Message, WPARAM wParam, LPARAM lParam) { typedef struct STATSStruct { float dhdDist; long dhdTime; long layTime; float revDist; long revTime; } STATSDef; typedef struct PARMSStruct { BOOL bStandard; BOOL bDropback; BOOL bInterlining; BOOL bServiceWrap; BOOL bDeadheading; BOOL bDeadheadAll; long maxDeadheadTime; } PARMSDef; static PDISPLAYINFO pDI; static HANDLE hCtlALLROUTES; static HANDLE hCtlCC; static HANDLE hCtlCOMMENTCODE; static HANDLE hCtlORROUTE; static HANDLE hCtlFROMROUTE; static HANDLE hCtlFROMSERVICE; static HANDLE hCtlLISTBOXTITLE; static HANDLE hCtlTRIPS; static HANDLE hCtlMIN; static HANDLE hCtlMINVEHICLES; static HANDLE hCtlMAX; static HANDLE hCtlMAXVEHICLES; static HANDLE hCtlILYES; static HANDLE hCtlILNO; static HANDLE hCtlSWYES; static HANDLE hCtlSWNO; static HANDLE hCtlDHYES; static HANDLE hCtlDHNO; static HANDLE hCtlDEADHEADALL; static HANDLE hCtlDEADHEADTHOSE; static HANDLE hCtlDEADHEADMINS; static HANDLE hCtlTEXT_MINUTES; static HANDLE hCtlIDREMOVE; static HANDLE hCtlIDPREVIEW; static HANDLE hCtlIDOPTIMAL; static HANDLE hCtlIDMANUAL; static HANDLE hCtlSTANDARD; static HANDLE hCtlDROPBACK; static HANDLE hCtlDEADHEADSTOUSE; static int tabPos[TABSET] = {32}; GenerateTripDef GTResults; GetConnectionTimeDef GCTData; PARMSDef PARMS; BLOCKSDef *pTRIPSChunk; LAYOVERDef *pLayover; float distance; short int wmId; short int wmEvent; BOOL bFound; BOOL bEnable; BOOL bAbort; char routeName[ROUTES_NAME_LENGTH + 1]; char routeNumber[ROUTES_NUMBER_LENGTH + 1]; char serviceName[SERVICES_NAME_LENGTH + 1]; long fromRouteRecordID; long fromServiceRecordID; long lastBlock; long minutes; long percent; long tempLong; long minVehicles; long maxVehicles; long commentRecordID; long position; long flags; long dhd; WORD DlgWidthUnits; int adjustedTabPos[TABSET]; int nI; int nJ; int nK; int nRc; int rcode2; int numRoutes; int numTrips; int maxTrips; int numComments; int numSelected; int fromRoutePosition; int fromServicePosition; int blockingType; int layoverType; long *pTRIPSrecordIDs = NULL; int *pSelected = NULL; switch(Message) { // // WM_INITDIALOG - Initialize the dialog // case WM_INITDIALOG: pDI = (PDISPLAYINFO)lParam; if(pDI == NULL) { SendMessage(hWndDlg, WM_COMMAND, MAKEWPARAM(IDCANCEL, 0), (LPARAM)0); break; } m_numConnectionAlerts = 0; // // Set up some control handles for later use // hCtlALLROUTES = GetDlgItem(hWndDlg, ADDBLOCK_ALLROUTES); hCtlCC = GetDlgItem(hWndDlg, ADDBLOCK_CC); hCtlCOMMENTCODE = GetDlgItem(hWndDlg, ADDBLOCK_COMMENTCODE); hCtlORROUTE = GetDlgItem(hWndDlg, ADDBLOCK_ORROUTE); hCtlFROMROUTE = GetDlgItem(hWndDlg, ADDBLOCK_FROMROUTE); hCtlFROMSERVICE = GetDlgItem(hWndDlg, ADDBLOCK_FROMSERVICE); hCtlLISTBOXTITLE = GetDlgItem(hWndDlg, ADDBLOCK_LISTBOXTITLE); hCtlTRIPS = GetDlgItem(hWndDlg, ADDBLOCK_TRIPS); hCtlMIN = GetDlgItem(hWndDlg, ADDBLOCK_MIN); hCtlMINVEHICLES = GetDlgItem(hWndDlg, ADDBLOCK_MINVEHICLES); hCtlMAX = GetDlgItem(hWndDlg, ADDBLOCK_MAX); hCtlMAXVEHICLES = GetDlgItem(hWndDlg, ADDBLOCK_MAXVEHICLES); hCtlILYES = GetDlgItem(hWndDlg, ADDBLOCK_ILYES); hCtlILNO = GetDlgItem(hWndDlg, ADDBLOCK_ILNO); hCtlSWYES = GetDlgItem(hWndDlg, ADDBLOCK_SWYES); hCtlSWNO = GetDlgItem(hWndDlg, ADDBLOCK_SWNO); hCtlDHYES = GetDlgItem(hWndDlg, ADDBLOCK_DHYES); hCtlDHNO = GetDlgItem(hWndDlg, ADDBLOCK_DHNO); hCtlDEADHEADALL = GetDlgItem(hWndDlg, ADDBLOCK_DEADHEADALL); hCtlDEADHEADTHOSE = GetDlgItem(hWndDlg, ADDBLOCK_DEADHEADTHOSE); hCtlDEADHEADMINS = GetDlgItem(hWndDlg, ADDBLOCK_DEADHEADMINS); hCtlTEXT_MINUTES = GetDlgItem(hWndDlg, ADDBLOCK_TEXT_MINUTES); hCtlIDREMOVE = GetDlgItem(hWndDlg, IDREMOVE); hCtlIDPREVIEW = GetDlgItem(hWndDlg, IDPREVIEW); hCtlIDOPTIMAL = GetDlgItem(hWndDlg, IDOPTIMAL); hCtlIDMANUAL = GetDlgItem(hWndDlg, IDMANUAL); hCtlSTANDARD = GetDlgItem(hWndDlg, ADDBLOCK_STANDARD); hCtlDROPBACK = GetDlgItem(hWndDlg, ADDBLOCK_DROPBACK); hCtlDEADHEADSTOUSE = GetDlgItem(hWndDlg, ADDBLOCK_DEADHEADSTOUSE); // // Set up the tab stops for ADDBLOCK_LISTBOXTITLE and ADDBLOCK_TRIPS // DlgWidthUnits = LOWORD(GetDialogBaseUnits()) / 4; for(nJ = 0; nJ < TABSET; nJ++) { adjustedTabPos[nJ] = (DlgWidthUnits * tabPos[nJ] * 2); } SendMessage(hCtlLISTBOXTITLE, LB_SETTABSTOPS, (WPARAM)TABSET, (LPARAM)adjustedTabPos); LoadString(hInst, TEXT_019, tempString, TEMPSTRING_LENGTH); SendMessage(hCtlLISTBOXTITLE, LB_ADDSTRING, 0, (LONG)(LPSTR)tempString); SendMessage(hCtlTRIPS, LB_SETTABSTOPS, (WPARAM)TABSET, (LPARAM)adjustedTabPos); // // Default to all routes and this service // SendMessage(hCtlALLROUTES, BM_SETCHECK, (WPARAM)TRUE, (LPARAM)0); if(SetUpServiceList(hWndDlg, ADDBLOCK_FROMSERVICE, pDI->fileInfo.serviceRecordID) == 0) { SendMessage(hWndDlg, WM_COMMAND, MAKEWPARAM(IDCANCEL, 0), (LPARAM)0); break; } // // Set up the route listbox // numRoutes = 0; SendMessage(hCtlFROMROUTE, LB_RESETCONTENT, (WPARAM)(WPARAM)0, (LPARAM)0); rcode2 = btrieve(B_GETFIRST, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); while(rcode2 == 0) { strncpy(tempString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(tempString, ROUTES_NUMBER_LENGTH); strncpy(szarString, ROUTES.name, ROUTES_NAME_LENGTH); trim(szarString, ROUTES_NAME_LENGTH); strcat(tempString, " - "); strcat(tempString, szarString); nI = (int)SendMessage(hCtlFROMROUTE, LB_ADDSTRING, (WPARAM)0, (LONG)(LPSTR)tempString); SendMessage(hCtlFROMROUTE, LB_SETITEMDATA, (WPARAM)nI, ROUTES.recordID); numRoutes++; rcode2 = btrieve(B_GETNEXT, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); } if(numRoutes == 0) { TMSError(hWndDlg, MB_ICONSTOP, ERROR_008, (HANDLE)NULL); SendMessage(hWndDlg, WM_COMMAND, MAKEWPARAM(IDCANCEL,0), (LPARAM)0); break; } // // Comment codes combo box // numComments = SetUpCommentList(hWndDlg, ADDBLOCK_COMMENTCODE); if(numComments == 0) { EnableWindow(hCtlCC, FALSE); EnableWindow(hCtlCOMMENTCODE, FALSE); } // // Default to "Min" vechicle requirements, but with a blank field // SendMessage(hCtlMIN, BM_SETCHECK, (WPARAM)TRUE, (LPARAM)0); SendMessage(hCtlMINVEHICLES, WM_SETTEXT, (WPARAM)0, (LONG)(LPSTR)""); // // Default to allowing deadheading, service wraps, and interlining // SendMessage(hCtlILYES, BM_SETCHECK, (WPARAM)TRUE, (LPARAM)0); SendMessage(hCtlSWYES, BM_SETCHECK, (WPARAM)TRUE, (LPARAM)0); SendMessage(hCtlDHYES, BM_SETCHECK, (WPARAM)TRUE, (LPARAM)0); SendMessage(hCtlDEADHEADALL, BM_SETCHECK, (WPARAM)TRUE, (LPARAM)0); // // Clear out edit controls associated with a spin control // SendMessage(hCtlDEADHEADMINS, WM_SETTEXT, (WPARAM)0, (LONG)(LPSTR)""); // // Default to this table's blocking technique // if(pDI->fileInfo.fileNumber == TMS_STANDARDBLOCKS) { SendMessage(hCtlSTANDARD, BM_SETCHECK, (WPARAM)TRUE, (LPARAM)0); EnableWindow(hCtlDROPBACK, FALSE); } else { SendMessage(hCtlDROPBACK, BM_SETCHECK, (WPARAM)TRUE, (LPARAM)0); EnableWindow(hCtlSTANDARD, FALSE); } // // Set up the m_pPICKEDTRIPS structure // if(m_pPICKEDTRIPS == NULL) { m_pPICKEDTRIPS = (PICKEDTRIPSDef *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(PICKEDTRIPSDef) * m_maxPICKEDTRIPS); if(m_pPICKEDTRIPS == NULL) { AllocationError(__FILE__, __LINE__, FALSE); goto OptimalBlockCleanup; } } // // Set up the "destination" // flags = PLACEMENT_ROUTE | PLACEMENT_SERVICE; DisplayPlacement(hWndDlg, ADDBLOCK_DESTINATION, pDI, flags); break; // // WM_CLOSE // case WM_CLOSE: SendMessage(hWndDlg, WM_COMMAND, MAKEWPARAM(IDCANCEL, 0), (LPARAM)0); break; // // WM_COMMAND // // Note: The outbound and inbound direction buttons get // disabled when the route is set to "All routes" // case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch(wmId) { // // ADDBLOCK_ALLROUTES radio button // case ADDBLOCK_ALLROUTES: SendMessage(hCtlFROMROUTE, LB_SETSEL, (WPARAM)(FALSE), (LPARAM)(-1)); SendMessage(hCtlCOMMENTCODE, CB_SETCURSEL, (WPARAM)(-1), (LPARAM)0); break; // // ADDBLOCK_CC radio button // case ADDBLOCK_CC: SendMessage(hCtlCOMMENTCODE, CB_SETCURSEL, (WPARAM)0, (LPARAM)0); break; // // ADDBLOCK_ORROUTE radio button // case ADDBLOCK_ORROUTE: SendMessage(hCtlCOMMENTCODE, CB_SETCURSEL, (WPARAM)(-1), (LPARAM)0); nI = (int)SendMessage(hCtlFROMROUTE, LB_GETCURSEL, (WPARAM)0, (LPARAM)0); if(nI == CB_ERR) { nJ = (int)SendMessage(hCtlFROMROUTE, LB_GETCOUNT, (WPARAM)0, (LPARAM)0); if(nJ == 0) break; for(nI = 0; nI < nJ; nI++) { tempLong = SendMessage(hCtlFROMROUTE, LB_GETITEMDATA, (WPARAM)nI, (LPARAM)0); if(tempLong == pDI->fileInfo.routeRecordID) { SendMessage(hCtlFROMROUTE, LB_SETCURSEL, (WPARAM)nI, (LPARAM)0); break; } } } // // ADDBLOCK_FROMROUTE listbox // case ADDBLOCK_FROMROUTE: switch(wmEvent) { case LBN_SELCHANGE: if(SendMessage(hCtlALLROUTES, BM_GETCHECK, (WPARAM)0, (LPARAM)0)) { SendMessage(hCtlALLROUTES, BM_SETCHECK, (WPARAM)FALSE, (LPARAM)0); SendMessage(hCtlORROUTE, BM_SETCHECK, (WPARAM)TRUE, (LPARAM)0); } break; } break; // // ADDBLOCK_LISTBOXTITLE // case ADDBLOCK_LISTBOXTITLE: // Title string SendMessage(hCtlLISTBOXTITLE, LB_SETSEL, (WPARAM)FALSE, (LPARAM)(-1)); break; // // ADDBLOCK_TRIPS // case ADDBLOCK_TRIPS: // List box switch(wmEvent) { case LBN_SELCHANGE: case LBN_SELCANCEL: bEnable = SendMessage(hCtlTRIPS, LB_GETSELCOUNT, (WPARAM)0, (LPARAM)0) > 0; EnableWindow(hCtlIDREMOVE, bEnable); EnableWindow(hCtlIDPREVIEW, bEnable); break; case LBN_DBLCLK: SendMessage(hWndDlg, WM_COMMAND, MAKEWPARAM(IDPREVIEW, 0), (LPARAM)0); EnableWindow(hCtlIDPREVIEW, TRUE); break; } break; // // ADDBLOCK_MIN // case ADDBLOCK_MIN: EnableWindow(hCtlMINVEHICLES, TRUE); EnableWindow(hCtlMAXVEHICLES, FALSE); break; // // ADDBLOCK_MAX // case ADDBLOCK_MAX: EnableWindow(hCtlMINVEHICLES, FALSE); EnableWindow(hCtlMAXVEHICLES, TRUE); break; // // ADDBLOCK_DHYES / ADDBLOCK_DHNO // case ADDBLOCK_DHYES: case ADDBLOCK_DHNO: bEnable = SendMessage(hCtlDHYES, BM_GETCHECK, (WPARAM)0, (LPARAM)0); EnableWindow(hCtlDEADHEADALL, bEnable); EnableWindow(hCtlDEADHEADSTOUSE, bEnable); EnableWindow(hCtlDEADHEADTHOSE, bEnable); EnableWindow(hCtlDEADHEADMINS, bEnable); EnableWindow(hCtlTEXT_MINUTES, bEnable); break; // // IDPREVIEW // case IDPREVIEW: // Button text: "Preview" nI = SendMessage(hCtlTRIPS, LB_GETSELCOUNT, (WPARAM)0, (LPARAM)0); if(nI == 0 || nI == LB_ERR) { break; } pSelected = (int *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(int) * nI); if(pSelected == NULL) { AllocationError(__FILE__, __LINE__, FALSE); break; } numSelected = (int)SendMessage(hCtlTRIPS, LB_GETSELITEMS, (WPARAM)nI, (LPARAM)pSelected); if(numSelected >= m_maxPICKEDTRIPS) { m_maxPICKEDTRIPS += (numSelected + 1); m_pPICKEDTRIPS = (PICKEDTRIPSDef *)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, m_pPICKEDTRIPS, sizeof(PICKEDTRIPSDef) * m_maxPICKEDTRIPS); if(m_pPICKEDTRIPS == NULL) { AllocationError(__FILE__, __LINE__, TRUE); break; } } for(nI = 0; nI < numSelected; nI++) { position = SendMessage(hCtlTRIPS, LB_GETITEMDATA, (WPARAM)pSelected[nI], (LPARAM)0); fromRoutePosition = LOWORD(position); fromServicePosition = HIWORD(position); m_pPICKEDTRIPS[nI].ROUTESrecordID = SendMessage(hCtlFROMROUTE, LB_GETITEMDATA, (WPARAM)fromRoutePosition, (LPARAM)0); m_pPICKEDTRIPS[nI].SERVICESrecordID = SendMessage(hCtlFROMSERVICE, CB_GETITEMDATA, (WPARAM)fromServicePosition, (LPARAM)0); } DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_PREVIEWT), hWndDlg, (DLGPROC)PREVIEWTMsgProc, (LPARAM)numSelected); TMSHeapFree(pSelected); break; // // IDADD // case IDADD: // Button text: "&Add Trip(s)" // // Get the service // fromServicePosition = (int)SendMessage(hCtlFROMSERVICE, CB_GETCURSEL, (WPARAM)0, (LPARAM)0); if(fromServicePosition == CB_ERR) { break; } fromServiceRecordID = SendMessage(hCtlFROMSERVICE, CB_GETITEMDATA, (WPARAM)fromServicePosition, (LPARAM)0); SERVICESKey0.recordID = fromServiceRecordID; btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); strncpy(serviceName, SERVICES.name, SERVICES_NAME_LENGTH); trim(serviceName, SERVICES_NAME_LENGTH); // // Get the route(s) // // All // if(SendMessage(hCtlALLROUTES, BM_GETCHECK, (WPARAM)0, (LPARAM)0)) { SendMessage(hCtlFROMROUTE, LB_SETSEL, (WPARAM)(TRUE), (LPARAM)(-1)); } // // Those labelled... // else if(SendMessage(hCtlCC, BM_GETCHECK, (WPARAM)0, (LPARAM)0)) { nK = (int)SendMessage(hCtlCOMMENTCODE, CB_GETCURSEL, (WPARAM)0, (LPARAM)0); commentRecordID = (nK == CB_ERR ? NO_RECORD : SendMessage(hCtlCOMMENTCODE, CB_GETITEMDATA, (WPARAM)nK, (LPARAM)0)); if(commentRecordID == NO_RECORD) { break; } nJ = (int)SendMessage(hCtlFROMROUTE, LB_GETCOUNT, (WPARAM)0, (LPARAM)0); for(nI = 0; nI < nJ; nI++) { ROUTESKey0.recordID = SendMessage(hCtlFROMROUTE, LB_GETITEMDATA, (WPARAM)nI, (LPARAM)0); rcode2 = btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0); if(ROUTES.COMMENTSrecordID == commentRecordID) { SendMessage(hCtlFROMROUTE, LB_SETSEL, (WPARAM)TRUE, (LPARAM)nI); } } } // // Got the selections - continue // nI = (int)SendMessage(hCtlFROMROUTE, LB_GETSELCOUNT, (WPARAM)0, (LPARAM)0); if(nI == 0 || nI == LB_ERR) { break; } pSelected = (int *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(int) * nI); if(pSelected == NULL) { AllocationError(__FILE__, __LINE__, FALSE); break; } numSelected = (int)SendMessage(hCtlFROMROUTE, LB_GETSELITEMS, (WPARAM)nI, (LPARAM)pSelected); // // Add the results to the "to be blocked" list box // for(nI = 0; nI < numSelected; nI++) { fromRoutePosition = pSelected[nI]; fromRouteRecordID = SendMessage(hCtlFROMROUTE, LB_GETITEMDATA, (WPARAM)fromRoutePosition, (LPARAM)0); // // Before we go any further, let's see if we've got this one already // position = MAKELONG(fromRoutePosition, fromServicePosition); nJ = SendMessage(hCtlTRIPS, LB_GETCOUNT, (WPARAM)0, (LPARAM)0); for(bFound = FALSE, nK = 0; nK < nJ; nK++) { tempLong = SendMessage(hCtlTRIPS, LB_GETITEMDATA, (WPARAM)nK, (LPARAM)0); if(tempLong == position) { bFound = TRUE; break; } } if(bFound) { continue; } // // Not found // EnableWindow(hCtlIDOPTIMAL, TRUE); EnableWindow(hCtlIDMANUAL, TRUE); // // Display it // ROUTESKey0.recordID = fromRouteRecordID; btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0); strncpy(routeNumber, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(routeNumber, ROUTES_NUMBER_LENGTH); strncpy(routeName, ROUTES.name, ROUTES_NAME_LENGTH); trim(routeName, ROUTES_NAME_LENGTH); strcpy(tempString, routeNumber); strcat(tempString, " - "); strcat(tempString, routeName); tempString[tabPos[0]] = '\0'; strcat(tempString, "\t"); strcat(tempString, serviceName); nK = (int)SendMessage(hCtlTRIPS, LB_ADDSTRING, (WPARAM)0, (LONG)(LPSTR)tempString); SendMessage(hCtlTRIPS, LB_SETITEMDATA, (WPARAM)nK, (LPARAM)position); } SendMessage(hCtlFROMROUTE, LB_SETSEL, (WPARAM)FALSE, (LPARAM)(-1)); TMSHeapFree(pSelected); break; // // IDREMOVE // case IDREMOVE: // Button text: "Remove" nI = (int)SendMessage(hCtlTRIPS, LB_GETSELCOUNT, (WPARAM)0, (LPARAM)0); if(nI == 0 || nI == LB_ERR) { break; } pSelected = (int *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(int) * nI); if(pSelected == NULL) { AllocationError(__FILE__, __LINE__, FALSE); break; } numSelected = (int)SendMessage(hCtlTRIPS, LB_GETSELITEMS, (WPARAM)nI, (LPARAM)pSelected); // // Process the list from the back to the front // for(nI = numSelected - 1; nI >= 0; nI--) { SendMessage(hCtlTRIPS, LB_DELETESTRING, (WPARAM)pSelected[nI], (LPARAM)0); } if(SendMessage(hCtlTRIPS, LB_GETCOUNT, (WPARAM)0, (LPARAM)0) == 0) { EnableWindow(hCtlIDOPTIMAL, FALSE); EnableWindow(hCtlIDMANUAL, FALSE); } EnableWindow(hCtlIDREMOVE, FALSE); EnableWindow(hCtlIDPREVIEW, FALSE); TMSHeapFree(pSelected); break; // // IDCANCEL // case IDCANCEL: EndDialog(hWndDlg, FALSE); break; // // IDHELP // case IDHELP: WinHelp(hWndDlg, szarHelpFile, HELP_CONTEXT, The_Standard_Blocks_Table); break; // // IDMANUAL and IDOPTIMAL // case IDMANUAL: case IDOPTIMAL: m_bNetworkMode = FALSE; // // Get the parameters // PARMS.bStandard = SendMessage(hCtlSTANDARD, BM_GETCHECK, (WPARAM)0, (LPARAM)0); PARMS.bDropback = SendMessage(hCtlDROPBACK, BM_GETCHECK, (WPARAM)0, (LPARAM)0); // // Standard and Dropback are mutually exclusive on a manual block // if(wmId == IDMANUAL) { if(PARMS.bStandard && PARMS.bDropback) { TMSError(hWndDlg, MB_ICONSTOP, ERROR_134, hCtlSTANDARD); break; } } // // At least one of Standard or Dropback must be chosen prior to pressing Optimal // else { if(!PARMS.bStandard && !PARMS.bDropback) { TMSError(hWndDlg, MB_ICONSTOP, ERROR_135, hCtlSTANDARD); break; } } // // Get the rest of the parameters // PARMS.bInterlining = SendMessage(hCtlILYES, BM_GETCHECK, (WPARAM)0, (LPARAM)0); PARMS.bServiceWrap = SendMessage(hCtlSWYES, BM_GETCHECK, (WPARAM)0, (LPARAM)0); PARMS.bDeadheading = SendMessage(hCtlDHYES, BM_GETCHECK, (WPARAM)0, (LPARAM)0); if(!PARMS.bDeadheading) { PARMS.bDeadheadAll = FALSE; PARMS.maxDeadheadTime = NO_TIME; } else { SendMessage(hCtlDEADHEADMINS, WM_GETTEXT, (WPARAM)TEMPSTRING_LENGTH, (LONG)(LPSTR)tempString); if(strcmp(tempString, "") == 0) { PARMS.bDeadheadAll = TRUE; PARMS.maxDeadheadTime = NO_TIME; } else { PARMS.bDeadheadAll = FALSE; PARMS.maxDeadheadTime = atol(tempString) * 60; } } // // Build the list of selected trips // m_numPICKEDTRIPS = SendMessage(hCtlTRIPS, LB_GETCOUNT, (WPARAM)0, (LPARAM)0); if(m_numPICKEDTRIPS >= m_maxPICKEDTRIPS) { m_maxPICKEDTRIPS += (m_numPICKEDTRIPS + 1); m_pPICKEDTRIPS = (PICKEDTRIPSDef *)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, m_pPICKEDTRIPS, sizeof(PICKEDTRIPSDef) * m_maxPICKEDTRIPS); if(m_pPICKEDTRIPS == NULL) { AllocationError(__FILE__, __LINE__, TRUE); break; } } for(nI = 0; nI < m_numPICKEDTRIPS; nI++) { position = SendMessage(hCtlTRIPS, LB_GETITEMDATA, (WPARAM)nI, (LPARAM)0); fromRoutePosition = LOWORD(position); fromServicePosition = HIWORD(position); m_pPICKEDTRIPS[nI].ROUTESrecordID = SendMessage(hCtlFROMROUTE, LB_GETITEMDATA, (WPARAM)fromRoutePosition, (LPARAM)0); m_pPICKEDTRIPS[nI].SERVICESrecordID = SendMessage(hCtlFROMSERVICE, CB_GETITEMDATA, (WPARAM)fromServicePosition, (LPARAM)0); } // // Dropback blocking isn't permitted unless it's been "standard" blocked already // if(PARMS.bDropback) { bAbort = FALSE; for(nI = 0; nI < m_numPICKEDTRIPS; nI++) { if(bAbort) break; for(nJ = 0; nJ < 2; nJ++) { if(bAbort) break; ROUTESKey0.recordID = m_pPICKEDTRIPS[nI].ROUTESrecordID; btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0); if(ROUTES.DIRECTIONSrecordID[nJ] == NO_RECORD) continue; TRIPSKey1.ROUTESrecordID = m_pPICKEDTRIPS[nI].ROUTESrecordID; TRIPSKey1.SERVICESrecordID = m_pPICKEDTRIPS[nI].SERVICESrecordID; TRIPSKey1.directionIndex = nJ; TRIPSKey1.tripSequence = NO_TIME; rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_TRIPS, &TRIPS, &TRIPSKey1, 1); while(rcode2 == 0 && TRIPS.ROUTESrecordID == m_pPICKEDTRIPS[nI].ROUTESrecordID && TRIPS.SERVICESrecordID == m_pPICKEDTRIPS[nI].SERVICESrecordID && TRIPS.directionIndex == nJ) { if(TRIPS.standard.blockNumber == 0) { LoadString(hInst, TEXT_245, szFormatString, sizeof(szFormatString)); strncpy(routeNumber, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(routeNumber, ROUTES_NUMBER_LENGTH); strncpy(routeName, ROUTES.name, ROUTES_NAME_LENGTH); trim(routeName, ROUTES_NAME_LENGTH); SERVICESKey0.recordID = m_pPICKEDTRIPS[nI].SERVICESrecordID; btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); strncpy(serviceName, SERVICES.name, SERVICES_NAME_LENGTH); trim(serviceName, SERVICES_NAME_LENGTH); sprintf(tempString, szFormatString, serviceName, routeNumber, routeName); MessageBeep(MB_ICONSTOP); MessageBox(hWndDlg, tempString, TMS, MB_OK); bAbort = TRUE; break; } rcode2 = btrieve(B_GETNEXT, TMS_TRIPS, &TRIPS, &TRIPSKey1, 1); } } } if(bAbort) break; } // // IDMANUAL - Go into MANBLOCK // if(wmId == IDMANUAL) { pDI->otherData = (long)(&PARMS); nRc = BlockDialog(pDI); if(nRc) { EndDialog(hWndDlg, TRUE); } break; } // // IDOPTIMAL // for(blockingType = 0; blockingType < 2; blockingType++) { if(blockingType == 0) { if(!PARMS.bStandard) { continue; } StatusBarStart(hWndDlg, "Optimal Standard Blocking Status"); pTRIPSChunk = &TRIPS.standard; pLayover = &StandardLayover; layoverType = TMS_STANDARDBLOCKS; } else { if(!PARMS.bDropback) { continue; } StatusBarStart(hWndDlg, "Optimal Dropback Blocking Status"); pTRIPSChunk = &TRIPS.dropback; pLayover = &DropbackLayover; layoverType = TMS_DROPBACKBLOCKS; } StatusBar(-1L, -1L); StatusBarText("Initializing..."); // // Initialize the interlining option // BLSetOptions(SendMessage(hCtlILYES, BM_GETCHECK, (WPARAM)0, (LPARAM)0)); // // Loop through numPICKEDTRIPS to determine what we're dealing with // StatusBarText("Examining selected trips..."); m_numConnectionAlerts = 0; maxTrips = 512; pTRIPSrecordIDs = (long *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(long) * maxTrips); if(pTRIPSrecordIDs == NULL) { AllocationError(__FILE__, __LINE__, FALSE); goto OptimalBlockCleanup; } for(numTrips = 0, nI = 0; nI < m_numPICKEDTRIPS; nI++) { StatusBar((long)nI, (long)m_numPICKEDTRIPS); if(StatusBarAbort()) { goto OptimalBlockCleanup; } m_bEstablishRUNTIMES = TRUE; TRIPSKey1.ROUTESrecordID = m_pPICKEDTRIPS[nI].ROUTESrecordID; TRIPSKey1.SERVICESrecordID = m_pPICKEDTRIPS[nI].SERVICESrecordID; TRIPSKey1.directionIndex = NO_RECORD; TRIPSKey1.tripSequence = NO_RECORD; rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_TRIPS, &TRIPS, &TRIPSKey1, 1); while(rcode2 == 0 && (m_pPICKEDTRIPS[nI].ROUTESrecordID == NO_RECORD || TRIPS.ROUTESrecordID == m_pPICKEDTRIPS[nI].ROUTESrecordID) && (m_pPICKEDTRIPS[nI].SERVICESrecordID == NO_RECORD || TRIPS.SERVICESrecordID == m_pPICKEDTRIPS[nI].SERVICESrecordID)) { if(pTRIPSChunk->blockNumber == 0) { if(numTrips >= maxTrips) { maxTrips += 512; pTRIPSrecordIDs = (long *)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, pTRIPSrecordIDs, sizeof(long) * maxTrips); if(pTRIPSrecordIDs == NULL) { AllocationError(__FILE__, __LINE__, TRUE); goto OptimalBlockCleanup; } } pTRIPSrecordIDs[numTrips++] = TRIPS.recordID; } rcode2 = btrieve(B_GETNEXT, TMS_TRIPS, &TRIPS, &TRIPSKey1, 1); } } if((m_numTripsForBlocker = numTrips) == 0) { TMSError(hWndDlg, MB_ICONSTOP, ERROR_102, (HANDLE)NULL); goto OptimalBlockCleanup; } // // If m_numConnectionAlerts is non-zero, blow him off // if(m_numConnectionAlerts != 0) { TMSError(hWndDlg, MB_ICONSTOP, ERROR_173, (HANDLE)NULL); goto OptimalBlockCleanup; } // // Make sure that we're not going in with bad values for min & max layover // if(pLayover->minimum.type == NO_RECORD || pLayover->maximum.type == NO_RECORD || (pLayover->maximum.type == 0 && pLayover->maximum.minutes == 0)) { MessageBeep(MB_ICONSTOP); LoadString(hInst, ERROR_030, szarString, sizeof(szarString)); MessageBox(hWndDlg, szarString, TMS, MB_ICONSTOP); nRc = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_LAYOVER), hWndDlg, (DLGPROC)LAYOVERMsgProc, (LPARAM)layoverType); if(!nRc) goto OptimalBlockCleanup; } // // Generate trip data into TRIPINFO // StatusBarText("Building trip data..."); StatusBar(0L, 0L); BLInitNetwork(); for(nI = 0; nI < numTrips; nI++) { StatusBar((long)nI, (long)numTrips); if(StatusBarAbort()) goto OptimalBlockCleanup; TRIPSKey0.recordID = pTRIPSrecordIDs[nI]; btrieve(B_GETEQUAL, TMS_TRIPS, &TRIPS, &TRIPSKey0, 0); nJ = GenerateTrip(TRIPS.ROUTESrecordID, TRIPS.SERVICESrecordID, TRIPS.directionIndex, TRIPS.PATTERNNAMESrecordID, TRIPS.timeAtMLP, GENERATETRIP_FLAG_DISPLAYERRORS, >Results); // // If we've got a one-node trip, fool the blocker // if(GTResults.firstNODESrecordID == GTResults.lastNODESrecordID && GTResults.firstNodeTime == GTResults.lastNodeTime) { GTResults.lastNodeTime++; } if(nJ != 0) { TRIPINFODef TRIPINFOrec; TRIPINFOrec.TRIPSrecordID = TRIPS.recordID; TRIPINFOrec.BUSTYPESrecordID = TRIPS.BUSTYPESrecordID; TRIPINFOrec.ROUTESrecordID = TRIPS.ROUTESrecordID; // // If we're doing a dropback, and the standard block pulls out or in, // then replace the start/end node/time with the pullout/in gar/time. // // Check pullouts // if(PARMS.bStandard || TRIPS.standard.POGNODESrecordID == NO_RECORD) { TRIPINFOrec.startNODESrecordID = GTResults.firstNODESrecordID; TRIPINFOrec.startTime = GTResults.firstNodeTime; } else { GCTData.fromPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.toPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.fromROUTESrecordID = TRIPS.ROUTESrecordID; GCTData.fromSERVICESrecordID = TRIPS.SERVICESrecordID; GCTData.toROUTESrecordID = TRIPS.ROUTESrecordID; GCTData.toSERVICESrecordID = TRIPS.SERVICESrecordID; GCTData.fromNODESrecordID = TRIPS.standard.POGNODESrecordID; GCTData.toNODESrecordID = GTResults.firstNODESrecordID; GCTData.timeOfDay = GTResults.firstNodeTime; dhd = GetConnectionTime(GCT_FLAG_DEADHEADTIME, &GCTData, &distance); distance = (float)fabs((double)distance); if(dhd == NO_TIME) dhd = 0; TRIPINFOrec.startNODESrecordID = TRIPS.standard.POGNODESrecordID; TRIPINFOrec.startTime = GTResults.firstNodeTime - dhd; } // // Check pullins // if(PARMS.bStandard || TRIPS.standard.PIGNODESrecordID == NO_RECORD) { TRIPINFOrec.endNODESrecordID = GTResults.lastNODESrecordID; TRIPINFOrec.endTime = GTResults.lastNodeTime; } else { GCTData.fromPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.toPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.fromROUTESrecordID = TRIPS.ROUTESrecordID; GCTData.fromSERVICESrecordID = TRIPS.SERVICESrecordID; GCTData.toROUTESrecordID = TRIPS.ROUTESrecordID; GCTData.toSERVICESrecordID = TRIPS.SERVICESrecordID; GCTData.fromNODESrecordID = GTResults.lastNODESrecordID; GCTData.toNODESrecordID = TRIPS.standard.PIGNODESrecordID; GCTData.timeOfDay = GTResults.lastNodeTime; dhd = GetConnectionTime(GCT_FLAG_DEADHEADTIME, &GCTData, &distance); distance = (float)fabs((double)distance); if(dhd == NO_TIME) dhd = 0; TRIPINFOrec.endNODESrecordID = TRIPS.standard.PIGNODESrecordID; TRIPINFOrec.endTime = GTResults.lastNodeTime + dhd; } // // Figure out the minimum layover // if(pTRIPSChunk->layoverMin != NO_TIME) TRIPINFOrec.layoverMin = pTRIPSChunk->layoverMin; else { minutes = pLayover->minimum.minutes * 60; percent = (GTResults.lastNodeTime - GTResults.firstNodeTime) * pLayover->minimum.percent / 100; if(pLayover->minimum.type == 0) TRIPINFOrec.layoverMin = minutes; else if(pLayover->minimum.type == 1) TRIPINFOrec.layoverMin = percent; else if(pLayover->minimum.type == 2) TRIPINFOrec.layoverMin = pLayover->minimum.lower ? min(minutes, percent) : max(minutes, percent); } // // Figure out the maximum layover // if(pTRIPSChunk->layoverMax != NO_TIME) TRIPINFOrec.layoverMax = pTRIPSChunk->layoverMax; else { minutes = pLayover->maximum.minutes * 60; percent = (GTResults.lastNodeTime - GTResults.firstNodeTime) * pLayover->maximum.percent / 100; if(pLayover->maximum.type == 0) TRIPINFOrec.layoverMax = minutes; else if(pLayover->maximum.type == 1) TRIPINFOrec.layoverMax = percent; else if(pLayover->maximum.type == 2) TRIPINFOrec.layoverMax = pLayover->maximum.lower ? min(minutes, percent) : max(minutes, percent); } // // And generate the trip arc // BLGenerateTripArc( &TRIPINFOrec ); } } // // If m_numConnectionAlerts is non-zero, blow him off // if(m_numConnectionAlerts != 0) { TMSError(hWndDlg, MB_ICONSTOP, ERROR_173, (HANDLE)NULL); goto OptimalBlockCleanup; } // // Generate the wait arcs between the trips // StatusBarText("Generating wait arcs..."); StatusBar(-1L, -1L); BLGenerateWaitArcs(FALSE); // // Generate deadhead and equivalence data into DEADHEADINFO // rcode2 = btrieve(B_GETFIRST, TMS_CONNECTIONS, &CONNECTIONS, &CONNECTIONSKey0, 0); numDeadheadsForBlocker = 0; while(rcode2 == 0) { if(StatusBarAbort()) goto OptimalBlockCleanup; if(PARMS.bDeadheading) { if((CONNECTIONS.flags & CONNECTIONS_FLAG_DEADHEADTIME) && (PARMS.bDeadheadAll || CONNECTIONS.connectionTime <= PARMS.maxDeadheadTime)) { DEADHEADINFODef DEADHEADINFOrec; DEADHEADINFOrec.fromTimeOfDay = CONNECTIONS.fromTimeOfDay; DEADHEADINFOrec.toTimeOfDay = CONNECTIONS.toTimeOfDay; DEADHEADINFOrec.fromNODESrecordID = CONNECTIONS.fromNODESrecordID; DEADHEADINFOrec.toNODESrecordID = CONNECTIONS.toNODESrecordID; DEADHEADINFOrec.flags = CONNECTIONS.flags; DEADHEADINFOrec.deadheadTime = CONNECTIONS.connectionTime; BLGenerateDeadheadArcs( &DEADHEADINFOrec ); numDeadheadsForBlocker++; } } if(CONNECTIONS.flags & CONNECTIONS_FLAG_EQUIVALENT) { DEADHEADINFODef DEADHEADINFOrec; DEADHEADINFOrec.fromTimeOfDay = CONNECTIONS.fromTimeOfDay; DEADHEADINFOrec.toTimeOfDay = CONNECTIONS.toTimeOfDay; DEADHEADINFOrec.fromNODESrecordID = CONNECTIONS.fromNODESrecordID; DEADHEADINFOrec.toNODESrecordID = CONNECTIONS.toNODESrecordID; DEADHEADINFOrec.flags = CONNECTIONS.flags; DEADHEADINFOrec.deadheadTime = 0; BLGenerateDeadheadArcs( &DEADHEADINFOrec ); numDeadheadsForBlocker++; } rcode2 = btrieve(B_GETNEXT, TMS_CONNECTIONS, &CONNECTIONS, &CONNECTIONSKey0, 0); } if(StatusBarAbort()) goto OptimalBlockCleanup; // // Get the minimum and maximum number of vehicles parameters. // This only applies to Optimal, so it's done here rather than above. // if(SendMessage(hCtlMIN, BM_GETCHECK, (WPARAM)0, (LPARAM)0)) { maxVehicles = NO_TIME; SendMessage(hCtlMINVEHICLES, WM_GETTEXT, (WPARAM)TEMPSTRING_LENGTH, (LONG)(LPSTR)tempString); if(strcmp(tempString, "") == 0) minVehicles = NO_TIME; else minVehicles = atol(tempString); } else { minVehicles = NO_TIME; SendMessage(hCtlMAXVEHICLES, WM_GETTEXT, (WPARAM)TEMPSTRING_LENGTH, (LONG)(LPSTR)tempString); if(strcmp(tempString, "") == 0) maxVehicles = NO_TIME; else maxVehicles = atol(tempString); } // // Call the blocker // m_pBLOCKSDATA = (BLOCKSDATADef *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BLOCKSDATADef) * m_numTripsForBlocker); if(m_pBLOCKSDATA == NULL) { AllocationError(__FILE__, __LINE__, FALSE); goto OptimalBlockCleanup; } StatusBarText("Optimal blocking in progress..."); sblock(minVehicles, maxVehicles); if(StatusBarAbort()) { goto OptimalBlockCleanup; } // // Update the file with the results // lastBlock = GetNewBlockNumber(pDI); StatusBarText("Blocking complete - writing results..."); StatusBarEnableCancel(FALSE); for(nJ = 0; nJ < numTrips; nJ++) { StatusBar((long)nJ, (long)numTrips); TRIPSKey0.recordID = m_pBLOCKSDATA[nJ].TRIPSrecordID; if((rcode2 = btrieve(B_GETEQUAL, TMS_TRIPS, &TRIPS, &TRIPSKey0, 0)) != 0) { MessageBeep(MB_ICONSTOP); LoadString(hInst, ERROR_015, szarString, sizeof(szarString)); SetFocus(hCtlFROMROUTE); MessageBox(hWndDlg, szarString, TMS, MB_ICONSTOP); goto OptimalBlockCleanup; } GenerateTrip(TRIPS.ROUTESrecordID, TRIPS.SERVICESrecordID, TRIPS.directionIndex, TRIPS.PATTERNNAMESrecordID, TRIPS.timeAtMLP, GENERATETRIP_FLAG_DISPLAYERRORS, >Results); pTRIPSChunk->blockNumber = m_pBLOCKSDATA[nJ].blockNumber + lastBlock; pTRIPSChunk->RGRPROUTESrecordID = pDI->fileInfo.routeRecordID; pTRIPSChunk->SGRPSERVICESrecordID = pDI->fileInfo.serviceRecordID; pTRIPSChunk->blockSequence = GTResults.firstNodeTime; btrieve(B_UPDATE, TMS_TRIPS, &TRIPS, &TRIPSKey0, 0); } OptimalBlockCleanup: BLCleanup(); TMSHeapFree(m_pBLOCKSDATA); TMSHeapFree(pTRIPSrecordIDs); m_numTripsForBlocker = 0; StatusBarEnd(); } // blockingType EndDialog(hWndDlg, TRUE); break; } break; // End of WM_COMMAND default: return FALSE; } return TRUE; } // End of ADDBLOCKMsgProc
BOOL FAR TMSRPT36(TMSRPTPassedDataDef *pPassedData) { TMSRPT36PassedDataDef TMSRPT36PassedData; HANDLE hOutputFile; DWORD dwBytesWritten; BOOL bRC; BOOL bKeepGoing; char *daysOfTheWeek[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; char outString[512]; char dummy[256]; long numTimechecks; long timechecksRead; long timeOfDay; long index; int year, month, day; int dayOfWeek; int rcode2; pPassedData->nReportNumber = 35; pPassedData->numDataFiles = 1; bRC = TMSRPT36Filter(&TMSRPT36PassedData); if(!bRC) return(FALSE); // // Open the output file // strcpy(tempString, szReportsTempFolder); strcat(tempString, "\\TMSRPT36.TXT"); hOutputFile = CreateFile(tempString, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hOutputFile == INVALID_HANDLE_VALUE) { LoadString(hInst, ERROR_202, szFormatString, sizeof(szFormatString)); sprintf(szarString, szFormatString, tempString); MessageBeep(MB_ICONSTOP); MessageBox((HWND)NULL, szarString, TMS, MB_ICONSTOP); goto deallocate; } strcpy(pPassedData->szReportDataFile[0], tempString); // // Get the number of records in the TIMECHECKS file // rcode2 = btrieve(B_STAT, TMS_TIMECHECKS, &BSTAT, dummy, 0); if(rcode2 != 0 || BSTAT.numRecords == 0) { TMSError(NULL, MB_ICONSTOP, ERROR_313, (HANDLE)NULL); SendMessage(NULL, WM_COMMAND, MAKEWPARAM(IDCANCEL, 0), (LPARAM)0); goto deallocate; } numTimechecks = BSTAT.numRecords; // // Start the status bar // LoadString(hInst, TEXT_117, tempString, TEMPSTRING_LENGTH); StatusBarStart(hWndMain, tempString); // // Loop through the records // bKeepGoing = TRUE; TIMECHECKSKey1.checkDate = TMSRPT36PassedData.fromDate; timechecksRead = 0; rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_TIMECHECKS, &TIMECHECKS, &TIMECHECKSKey1, 1); while(rcode2 == 0 && TIMECHECKS.checkDate >= TMSRPT36PassedData.fromDate && TIMECHECKS.checkDate <= TMSRPT36PassedData.toDate) { if(StatusBarAbort()) { bKeepGoing = FALSE; break; } StatusBar(timechecksRead, numTimechecks); // // Service // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLSERVICES || TMSRPT36PassedData.SERVICESrecordID == TIMECHECKS.SERVICESrecordID)) goto NextRecord; // // Route // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLROUTES || TMSRPT36PassedData.ROUTESrecordID == TIMECHECKS.ROUTESrecordID)) goto NextRecord; // // Direction // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_BOTHDIRECTIONS || TMSRPT36PassedData.directionIndex == TIMECHECKS.directionIndex)) goto NextRecord; // // Timepoint // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLTIMEPOINTS || TMSRPT36PassedData.NODESrecordID == TIMECHECKS.NODESrecordID)) goto NextRecord; // // Drivers // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLDRIVERS || TMSRPT36PassedData.DRIVERSrecordID == TIMECHECKS.actualDRIVERSrecordID)) goto NextRecord; // // Exclusions // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_DONOTEXCLUDE || TMSRPT36PassedData.excludedDRIVERSrecordID != TIMECHECKS.actualDRIVERSrecordID)) goto NextRecord; // // Bustypes // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLBUSTYPES || TMSRPT36PassedData.BUSTYPESrecordID == TIMECHECKS.actualBUSTYPESrecordID)) goto NextRecord; // // Passenger Load // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLPASSENGERLOADS || TMSRPT36PassedData.passengerLoadIndex == TIMECHECKS.passengerLoadIndex)) goto NextRecord; // // Road Supervisors // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLROADSUPERVISORS || TMSRPT36PassedData.roadSupervisorIndex == TIMECHECKS.supervisorIndex)) goto NextRecord; // // Day of the week - moved here 'cause other, easier, conditions earlier. // dayOfWeek = GetDayFromDate(TIMECHECKS.checkDate); if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLSERVICEDAYS || TMSRPT36PassedData.dayNumber == dayOfWeek)) goto NextRecord; // // Time of day - moved here 'cause other, easier, conditions earlier. // If he passes this test, he's Jake. // timeOfDay = GetTimeAtNode(TIMECHECKS.TRIPSrecordID, TIMECHECKS.NODESrecordID, TIMECHECKS.nodePositionInTrip, (TRIPSDef *)NULL); if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLDAY)) { timeOfDay = GetTimeAtNode(TIMECHECKS.TRIPSrecordID, TIMECHECKS.NODESrecordID, TIMECHECKS.nodePositionInTrip, (TRIPSDef *)NULL); if(timeOfDay < TMSRPT36PassedData.timeOfDayFrom || timeOfDay > TMSRPT36PassedData.timeOfDayTo) goto NextRecord; } // // Passed the tests - construct the output record // // Date // GetYMD(TIMECHECKS.checkDate, &year, &month, &day); sprintf(outString, "%04d/%02d/%02d\t", year, month, day); // // Service // SERVICESKey0.recordID = TIMECHECKS.SERVICESrecordID; btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); strncpy(szarString, SERVICES.name, SERVICES_NAME_LENGTH); trim(szarString, SERVICES_NAME_LENGTH); strcat(outString, szarString); strcat(outString, "\t"); // // Day of week // if(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLSERVICEDAYS) dayOfWeek = GetDayFromDate(TIMECHECKS.checkDate); else dayOfWeek = TMSRPT36PassedData.dayNumber; strcat(outString, daysOfTheWeek[dayOfWeek - 1]); strcat(outString, "\t"); // // Scheduled time // sprintf(szarString, "%ld\t", timeOfDay); strcat(outString, szarString); // // Actual time // sprintf(szarString, "%ld\t", TIMECHECKS.actualTime); strcat(outString, szarString); // // Route // ROUTESKey0.recordID = TIMECHECKS.ROUTESrecordID; btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0); strncpy(szarString, ROUTES.name, ROUTES_NAME_LENGTH); trim(szarString, ROUTES_NAME_LENGTH); strcat(outString, szarString); strcat(outString, "\t"); // // Timepoint // NODESKey0.recordID = TIMECHECKS.NODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(szarString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(szarString, NODES_ABBRNAME_LENGTH); strcat(outString, szarString); strcat(outString, "\t"); // // Direction // DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[TIMECHECKS.directionIndex]; btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); strncpy(szarString, DIRECTIONS.abbrName, DIRECTIONS_ABBRNAME_LENGTH); trim(szarString, DIRECTIONS_ABBRNAME_LENGTH); strcat(outString, szarString); strcat(outString, "\t"); // // Road Supervisor // if(TIMECHECKS.supervisorIndex >= 0 && TIMECHECKS.supervisorIndex < MAXROADSUPERVISORS) { strcat(outString, m_RoadSupervisors[TIMECHECKS.supervisorIndex].szText); } strcat(outString, "\t"); // // Driver // if(TIMECHECKS.actualDRIVERSrecordID != NO_RECORD) { DRIVERSKey0.recordID = TIMECHECKS.actualDRIVERSrecordID; btrieve(B_GETEQUAL, TMS_DRIVERS, &DRIVERS, &DRIVERSKey0, 0); strncpy(szarString, DRIVERS.lastName, DRIVERS_LASTNAME_LENGTH); trim(szarString, DRIVERS_LASTNAME_LENGTH); strcat(outString, szarString); strcat(outString, ", "); strncpy(szarString, DRIVERS.firstName, DRIVERS_FIRSTNAME_LENGTH); trim(szarString, DRIVERS_FIRSTNAME_LENGTH); strcat(outString, szarString); } strcat(outString, "\t"); // // Bustype // if(TIMECHECKS.actualBUSTYPESrecordID != NO_RECORD) { BUSTYPESKey0.recordID = TIMECHECKS.actualBUSTYPESrecordID; btrieve(B_GETEQUAL, TMS_BUSTYPES, &BUSTYPES, &BUSTYPESKey0, 0); strncpy(szarString, BUSTYPES.name, BUSTYPES_NAME_LENGTH); trim(szarString, BUSTYPES_NAME_LENGTH); strcat(outString,szarString); } strcat(outString, "\t"); // // Passenger Load // if(TIMECHECKS.passengerLoadIndex >= 0 && TIMECHECKS.passengerLoadIndex < MAXPASSENGERLOADS) { strcat(outString, m_PassengerLoads[TIMECHECKS.passengerLoadIndex].szText); } strcat(outString, "\t"); // // Weather // index = (long)LOWORD(TIMECHECKS.weatherIndex); if(index >= 0 && index < MAXWEATHERCONDITIONS) { strcat(outString, m_WeatherConditions[index].szText); } strcat(outString, "\t"); // // Traffic // index = (long)HIWORD(TIMECHECKS.weatherIndex); if(index >= 0 && index < MAXTRAFFICCONDITIONS) { strcat(outString, m_TrafficConditions[index].szText); } strcat(outString, "\t"); // // Other Comments // if(TIMECHECKS.otherCommentsIndex >= 0 && TIMECHECKS.otherCommentsIndex < MAXOTHERCOMMENTS) { strcat(outString, m_OtherComments[TIMECHECKS.otherCommentsIndex].szText); } strcat(outString, "\r\n"); // // Write it out // WriteFile(hOutputFile, (LPCVOID *)outString, strlen(outString), &dwBytesWritten, NULL); // // Get the next TIMECHECKS record // NextRecord: rcode2 = btrieve(B_GETNEXT, TMS_TIMECHECKS, &TIMECHECKS, &TIMECHECKSKey1, 1); timechecksRead++; } // while (through TIMECHECKS) // // Free allocated memory // deallocate: StatusBarEnd(); CloseHandle(hOutputFile); SetCursor(hCursorArrow); if(!bKeepGoing) return(FALSE); // // All done // return(TRUE); }
void CSkinManager::RefreshProgressSkin() { StatusBar()->Refresh(); }
BOOL FAR TMSRPT40(TMSRPTPassedDataDef *pPassedData) { REPORTPARMSDef REPORTPARMS; TMSRPT40NODESDef NODESrecordIDs[TMSRPT40_MAXNODES]; TMSRPT40TRIPSDef TRIPData[TMSRPT40_MAXNODES]; HANDLE hOutputFile; HANDLE hOutputFileRaw; DWORD dwBytesWritten; double distance; BOOL bKeepGoing = FALSE; char outputString[512]; char outputStringRaw[512]; long fromNODESrecordID; long toNODESrecordID; long arrivalTime; float longitude[2]; float latitude[2]; BOOL bRC; BOOL bFound; BOOL bDoneTitle; char fromNodeName[NODES_ABBRNAME_LENGTH * 2 + 1]; char toNodeName[NODES_ABBRNAME_LENGTH * 2 + 1]; long previousPATTERNNAMESrecordID; long previousNODESrecordID; long currentNodePositionInTrip; long actualTime; int nI; int nJ; int nK; int nL; int rcode2; int seqNum; int numConnections; int numEntries; // // Ok - let's go // pPassedData->nReportNumber = 39; pPassedData->numDataFiles = 1; // // See what he wants // REPORTPARMS.nReportNumber = pPassedData->nReportNumber; REPORTPARMS.ROUTESrecordID = m_RouteRecordID; REPORTPARMS.SERVICESrecordID = m_ServiceRecordID; REPORTPARMS.COMMENTSrecordID = NO_RECORD; REPORTPARMS.pRouteList = NULL; REPORTPARMS.pServiceList = NULL; REPORTPARMS.flags = RPFLAG_ROUTES | RPFLAG_SERVICES | RPFLAG_COMMENTS; bRC = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_RPTPARMS), hWndMain, (DLGPROC)RPTPARMSMsgProc, (LPARAM)&REPORTPARMS); if(!bRC) { return(FALSE); } // // Check the list of routes and services // if(REPORTPARMS.numRoutes == 0 || REPORTPARMS.numServices == 0) { goto deallocate; } // // Open the regular output file // strcpy(tempString, szReportsTempFolder); strcat(tempString, "\\TMSRPT40.txt"); hOutputFile = CreateFile(tempString, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hOutputFile == INVALID_HANDLE_VALUE) { LoadString(hInst, ERROR_202, szFormatString, sizeof(szFormatString)); sprintf(szarString, szFormatString, tempString); MessageBeep(MB_ICONSTOP); MessageBox((HWND)NULL, szarString, TMS, MB_ICONSTOP); goto deallocate; } strcpy(pPassedData->szReportDataFile[0], tempString); // // Open the raw output file // strcpy(tempString, szReportsTempFolder); strcat(tempString, "\\TMSRPT40RAW.txt"); hOutputFileRaw = CreateFile(tempString, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hOutputFileRaw == INVALID_HANDLE_VALUE) { LoadString(hInst, ERROR_202, szFormatString, sizeof(szFormatString)); sprintf(szarString, szFormatString, tempString); MessageBeep(MB_ICONSTOP); MessageBox((HWND)NULL, szarString, TMS, MB_ICONSTOP); goto deallocate; } // // Fire up the status bar // LoadString(hInst, TEXT_117, tempString, TEMPSTRING_LENGTH); StatusBarStart(hWndMain, tempString); // // Build the list of node pairs (more or less nick'd from PICKCONN // numConnections = 0; for(nI = 0; nI < REPORTPARMS.numRoutes; nI++) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } ROUTESKey0.recordID = REPORTPARMS.pRouteList[nI]; btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0); for(nJ = 0; nJ < REPORTPARMS.numServices; nJ++) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } for(nK = 0; nK < 2; nK++) { if(ROUTES.DIRECTIONSrecordID[nK] == NO_RECORD) continue; PATTERNSKey2.ROUTESrecordID = REPORTPARMS.pRouteList[nI]; PATTERNSKey2.SERVICESrecordID = REPORTPARMS.pServiceList[nJ]; PATTERNSKey2.directionIndex = nK; PATTERNSKey2.PATTERNNAMESrecordID = basePatternRecordID; PATTERNSKey2.nodeSequence = 0; rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); // // Set up unique from/to node combinations. This section of code // assumes that ADDPATTERN has done its job and not permitted a // bus stop to be the first or last node in a pattern. // if(rcode2 == 0 && PATTERNS.ROUTESrecordID == REPORTPARMS.pRouteList[nI] && PATTERNS.SERVICESrecordID == REPORTPARMS.pServiceList[nJ] && PATTERNS.directionIndex == nK) { fromNODESrecordID = PATTERNS.NODESrecordID; rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); while(rcode2 == 0 && PATTERNS.ROUTESrecordID == REPORTPARMS.pRouteList[nI] && PATTERNS.SERVICESrecordID == REPORTPARMS.pServiceList[nJ] && PATTERNS.directionIndex == nK) { if(!(PATTERNS.flags & PATTERNS_FLAG_BUSSTOP)) { toNODESrecordID = PATTERNS.NODESrecordID; for(bFound = FALSE, nL = 0; nL < numConnections; nL++) { if(fromNODESrecordID == NODESrecordIDs[nL].from && toNODESrecordID == NODESrecordIDs[nL].to) { bFound = TRUE; break; } } if(!bFound) { NODESrecordIDs[numConnections].from = fromNODESrecordID; NODESrecordIDs[numConnections++].to = toNODESrecordID; if(numConnections >= TMSRPT40_MAXNODES) break; } fromNODESrecordID = toNODESrecordID; } previousPATTERNNAMESrecordID = PATTERNS.PATTERNNAMESrecordID; rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); if(PATTERNS.PATTERNNAMESrecordID != previousPATTERNNAMESrecordID) { fromNODESrecordID = PATTERNS.NODESrecordID; rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } } } } } } // // Sort the connection pairs // qsort((void *)NODESrecordIDs, numConnections, sizeof(TMSRPT40NODESDef), TMSRPT40sort_nodes); // // Cycle through all the connection pairs // seqNum = 1; for(nI = 0; nI < numConnections; nI++) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } // // From node // NODESKey0.recordID = NODESrecordIDs[nI].from; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(fromNodeName, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(fromNodeName, NODES_ABBRNAME_LENGTH); longitude[0] = NODES.longitude; latitude[0] = NODES.latitude; // // To node // NODESKey0.recordID = NODESrecordIDs[nI].to; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(toNodeName, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(toNodeName, NODES_ABBRNAME_LENGTH); longitude[1] = NODES.longitude; latitude[1] = NODES.latitude; // // Display it // sprintf(tempString, "%4s - %4s", fromNodeName, toNodeName); StatusBarText(tempString); StatusBar((long)(nI + 1), (long)numConnections); // // First, dump out the connections table entries for this pair under // the following rules: a) the entry must be a running time, and b) // B->A connections will only be listed if the 2-way flag is in effect. // // // Possibly From-To and To-From // bDoneTitle = FALSE; for(nJ = 0; nJ < 2; nJ++) { if(nJ == 0) { fromNODESrecordID = NODESrecordIDs[nI].from; toNODESrecordID = NODESrecordIDs[nI].to; } else { fromNODESrecordID = NODESrecordIDs[nI].to; toNODESrecordID = NODESrecordIDs[nI].from; } CONNECTIONSKey1.fromNODESrecordID = NODESrecordIDs[nI].from; CONNECTIONSKey1.toNODESrecordID = NODESrecordIDs[nI].to; CONNECTIONSKey1.fromTimeOfDay = NO_TIME; rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_CONNECTIONS, &CONNECTIONS, &CONNECTIONSKey1, 1); while(rcode2 == 0 && CONNECTIONS.fromNODESrecordID == fromNODESrecordID && CONNECTIONS.toNODESrecordID == toNODESrecordID) { if((nJ == 0 || (CONNECTIONS.flags & CONNECTIONS_FLAG_TWOWAY)) && (CONNECTIONS.flags & CONNECTIONS_FLAG_RUNNINGTIME)) { // // Sequence + Title String // if(!bDoneTitle) { sprintf(outputString, "%d\t%s\t%s\t\"", seqNum++, fromNodeName, toNodeName); strcat(outputString, "Data from the Connections Table:\"\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); sprintf(outputString, "%d\t%s\t%s\t\"", seqNum++, fromNodeName, toNodeName); strcat(outputString, " From To Route Service Pattern Route Service Pattern Min U/M Dist Spd/Hr"); strcat(outputString, "\"\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); bDoneTitle = TRUE; } // // Sequence // sprintf(outputString, "%d\t%s\t%s\t\"", seqNum++, fromNodeName, toNodeName); // // From and to node names // if(nJ == 0) sprintf(tempString, " %4s %4s ", fromNodeName, toNodeName); else sprintf(tempString, " %4s %4s ", toNodeName, fromNodeName); strcat(outputString, tempString); // // From Route // if(CONNECTIONS.fromROUTESrecordID == NO_RECORD) strcpy(szarString, ""); else { ROUTESKey0.recordID = CONNECTIONS.fromROUTESrecordID; btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0); strncpy(szarString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(szarString, 8); } sprintf(tempString, "%8s ", szarString); strcat(outputString, tempString); // // From Service // if(CONNECTIONS.fromSERVICESrecordID == NO_RECORD) strcpy(szarString, ""); else { SERVICESKey0.recordID = CONNECTIONS.fromSERVICESrecordID; btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); strncpy(szarString, SERVICES.name, SERVICES_NAME_LENGTH); trim(szarString, 8); } sprintf(tempString, "%8s ", szarString); strcat(outputString, tempString); // // From Pattern // if(CONNECTIONS.fromPATTERNNAMESrecordID == NO_RECORD) strcpy(szarString, ""); else { PATTERNNAMESKey0.recordID = CONNECTIONS.fromPATTERNNAMESrecordID; btrieve(B_GETEQUAL, TMS_PATTERNNAMES, &PATTERNNAMES, &PATTERNNAMESKey0, 0); strncpy(szarString, PATTERNNAMES.name, PATTERNNAMES_NAME_LENGTH); trim(szarString, 8); } sprintf(tempString, "%8s ", szarString); strcat(outputString, tempString); // // To Route // if(CONNECTIONS.toROUTESrecordID == NO_RECORD) strcpy(szarString, ""); else { ROUTESKey0.recordID = CONNECTIONS.toROUTESrecordID; btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0); strncpy(szarString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(szarString, 8); } sprintf(tempString, "%8s ", szarString); strcat(outputString, tempString); // // To Service // if(CONNECTIONS.toSERVICESrecordID == NO_RECORD) strcpy(szarString, ""); else { SERVICESKey0.recordID = CONNECTIONS.toSERVICESrecordID; btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); strncpy(szarString, SERVICES.name, SERVICES_NAME_LENGTH); trim(szarString, 8); } sprintf(tempString, "%8s ", szarString); strcat(outputString, tempString); // // To Pattern // if(CONNECTIONS.toPATTERNNAMESrecordID == NO_RECORD) strcpy(szarString, ""); else { PATTERNNAMESKey0.recordID = CONNECTIONS.toPATTERNNAMESrecordID; btrieve(B_GETEQUAL, TMS_PATTERNNAMES, &PATTERNNAMES, &PATTERNNAMESKey0, 0); strncpy(szarString, PATTERNNAMES.name, PATTERNNAMES_NAME_LENGTH); trim(szarString, 8); } sprintf(tempString, "%8s ", szarString); strcat(outputString, tempString); // // Time // sprintf(tempString, "%3d ", CONNECTIONS.connectionTime / 60); strcat(outputString, tempString); // // Btwn // if(CONNECTIONS.fromTimeOfDay == NO_TIME) { strcpy(tempString, " "); } else { sprintf(tempString, "%s ", Tchar(CONNECTIONS.fromTimeOfDay)); } strcat(outputString, tempString); // // And // if(CONNECTIONS.toTimeOfDay == NO_TIME) { strcpy(tempString, " "); } else { sprintf(tempString, "%s ", Tchar(CONNECTIONS.toTimeOfDay)); } strcat(outputString, tempString); // // Distance type and distance // if(CONNECTIONS.distance == NO_RECORD || CONNECTIONS.distance == 0.0) { strcpy(szarString, "Map "); distance = GreatCircleDistance(longitude[0], latitude[0], longitude[1], latitude[1]); } else { strcpy(szarString, "User"); distance = CONNECTIONS.distance; } sprintf(tempString, "%s %7.2f ", szarString, distance); strcat(outputString, tempString); // // Speed per hour // if(CONNECTIONS.connectionTime == 0) strcpy(tempString, "-------"); else sprintf(tempString, "%7.2f", distance / ((double)CONNECTIONS.connectionTime / 3600)); strcat(outputString, tempString); // // Write it out // strcat(outputString, "\"\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); } // if connection type == requested type to display rcode2 = btrieve(B_GETNEXT, TMS_CONNECTIONS, &CONNECTIONS, &CONNECTIONSKey1, 1); } // while } // nJ // // If we didn't output a title, there wasn't anything // if(!bDoneTitle) continue; // // Now get the stuff from the timechecks table // // Sequence + Title String // sprintf(outputString, "%d\t%s\t%s\t\"\"\r\n", seqNum++, fromNodeName, toNodeName); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); sprintf(outputString, "%d\t%s\t%s\t\"", seqNum++, fromNodeName, toNodeName); strcat(outputString, "Data from the Timechecks Table:\"\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); // // Look up the "to node" on the timechecks table // numEntries = 0; TIMECHECKSKey4.NODESrecordID = NODESrecordIDs[nI].to; rcode2 = btrieve(B_GETEQUAL, TMS_TIMECHECKS, &TIMECHECKS, &TIMECHECKSKey4, 4); while(rcode2 == 0 && TIMECHECKS.NODESrecordID == NODESrecordIDs[nI].to) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } // // Get the trip // TRIPSKey0.recordID = TIMECHECKS.TRIPSrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_TRIPS, &TRIPS, &TRIPSKey0, 0); if(rcode2 == 0) { // // Get the pattern of the trip and find the "to node". // previousNODESrecordID = NO_RECORD; PATTERNSKey2.ROUTESrecordID = TRIPS.ROUTESrecordID; PATTERNSKey2.SERVICESrecordID = TRIPS.SERVICESrecordID; PATTERNSKey2.directionIndex = TRIPS.directionIndex; PATTERNSKey2.PATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; PATTERNSKey2.nodeSequence = NO_RECORD; currentNodePositionInTrip = 0; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); while(rcode2 == 0 && PATTERNS.ROUTESrecordID == TRIPS.ROUTESrecordID && PATTERNS.SERVICESrecordID == TRIPS.SERVICESrecordID && PATTERNS.directionIndex == TRIPS.directionIndex && PATTERNS.PATTERNNAMESrecordID == TRIPS.PATTERNNAMESrecordID) { if(!(PATTERNS.flags & PATTERNS_FLAG_BUSSTOP)) { if(PATTERNS.NODESrecordID == TIMECHECKS.NODESrecordID) { if(currentNodePositionInTrip == TIMECHECKS.nodePositionInTrip) break; currentNodePositionInTrip++; } previousNODESrecordID = PATTERNS.NODESrecordID; } rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } // // If we have a "from node" and "to node", save the trip and the actual time // if(previousNODESrecordID == NODESrecordIDs[nI].from) { TRIPData[numEntries].TRIPSrecordID = TRIPS.recordID; TRIPData[numEntries].actualTimeOfDay = TIMECHECKS.actualTime; TRIPData[numEntries].nodePositionInTrip = TIMECHECKS.nodePositionInTrip; numEntries++; if(numEntries >= TMSRPT40_MAXNODES) break; } } rcode2 = btrieve(B_GETNEXT, TMS_TIMECHECKS, &TIMECHECKS, &TIMECHECKSKey4, 4); } // // Sort TRIPData based on actualTime and print out the title // if(numEntries > 0) { qsort((void *)TRIPData, numEntries, sizeof(TMSRPT40TRIPSDef), TMSRPT40sort_trips); sprintf(outputString, "%d\t%s\t%s\t\"", seqNum++, fromNodeName, toNodeName); strcat(outputString, " Trip# Route Service Pattern At Act Dist Spd/Hr\"\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); } // // Cycle through the saved entries // for(nJ = 0; nJ < numEntries; nJ++) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } // // Get the trip and generate it // TRIPSKey0.recordID = TRIPData[nJ].TRIPSrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_TRIPS, &TRIPS, &TRIPSKey0, 0); if(rcode2 != 0) continue; sprintf(outputString, "%d\t%s\t%s\t\"", seqNum++, fromNodeName, toNodeName); sprintf(outputStringRaw, "%s\t%s\t", fromNodeName, toNodeName); // // Trip number // sprintf(tempString, " %5ld ", TRIPS.tripNumber); strcat(outputString, tempString); // // Route // ROUTESKey0.recordID = TRIPS.ROUTESrecordID; btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0); strncpy(szarString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(szarString, 8); sprintf(tempString, "%8s ", szarString); strcat(outputString, tempString); strncpy(szarString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(szarString, ROUTES_NUMBER_LENGTH); strcat(outputStringRaw, szarString); strcat(outputStringRaw, "\t"); DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[TRIPS.directionIndex]; btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); strncpy(szarString, DIRECTIONS.abbrName, DIRECTIONS_ABBRNAME_LENGTH); trim(szarString, DIRECTIONS_ABBRNAME_LENGTH); strcat(outputStringRaw, szarString); strcat(outputStringRaw, "\t"); // // Service // SERVICESKey0.recordID = TRIPS.SERVICESrecordID; btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); strncpy(szarString, SERVICES.name, SERVICES_NAME_LENGTH); trim(szarString, 8); sprintf(tempString, "%8s ", szarString); strcat(outputString, tempString); strncpy(szarString, SERVICES.name, SERVICES_NAME_LENGTH); trim(szarString, SERVICES_NAME_LENGTH); strcat(outputStringRaw, szarString); strcat(outputStringRaw, "\t"); // // Pattern // PATTERNNAMESKey0.recordID = TRIPS.PATTERNNAMESrecordID; btrieve(B_GETEQUAL, TMS_PATTERNNAMES, &PATTERNNAMES, &PATTERNNAMESKey0, 0); strncpy(szarString, PATTERNNAMES.name, PATTERNNAMES_NAME_LENGTH); trim(szarString, 8); sprintf(tempString, "%8s ", szarString); strcat(outputString, tempString); strncpy(szarString, PATTERNNAMES.name, PATTERNNAMES_NAME_LENGTH); trim(szarString, PATTERNNAMES_NAME_LENGTH); strcat(outputStringRaw, szarString); strcat(outputStringRaw, "\t"); // // At time // sprintf(tempString, "%s ", Tchar(TRIPData[nJ].actualTimeOfDay)); strcat(outputString, tempString); sprintf(tempString, "%ld\t", TRIPData[nJ].actualTimeOfDay); strcat(outputStringRaw, tempString); // // Actual running time // // Pass 1 - find the companion normally (nodeposition = 0) or if a pair repeats // actualTime = NO_TIME; TIMECHECKSKey5.TRIPSrecordID = TRIPS.recordID; rcode2 = btrieve(B_GETEQUAL, TMS_TIMECHECKS, &TIMECHECKS, &TIMECHECKSKey5, 5); while(rcode2 == 0) { if(TIMECHECKS.NODESrecordID == NODESrecordIDs[nI].from && TIMECHECKS.nodePositionInTrip == TRIPData[nJ].nodePositionInTrip) { actualTime = TRIPData[nJ].actualTimeOfDay - TIMECHECKS.actualTime; break; } rcode2 = btrieve(B_GETNEXT, TMS_TIMECHECKS, &TIMECHECKS, &TIMECHECKSKey5, 5); if(TIMECHECKS.TRIPSrecordID != TRIPS.recordID) break; } // // Pass 2 - find the companion when you have the same start and end node // if(actualTime == NO_TIME) { TIMECHECKSKey5.TRIPSrecordID = TRIPS.recordID; rcode2 = btrieve(B_GETEQUAL, TMS_TIMECHECKS, &TIMECHECKS, &TIMECHECKSKey5, 5); while(rcode2 == 0) { if(TIMECHECKS.NODESrecordID == NODESrecordIDs[nI].from) { actualTime = TRIPData[nJ].actualTimeOfDay - TIMECHECKS.actualTime; break; } rcode2 = btrieve(B_GETNEXT, TMS_TIMECHECKS, &TIMECHECKS, &TIMECHECKSKey5, 5); if(TIMECHECKS.TRIPSrecordID != TRIPS.recordID) break; } } if(actualTime == NO_TIME) { strcpy(tempString, " "); actualTime = 0; } else { sprintf(tempString, "%3d ", actualTime / 60); } strcat(outputString, tempString); arrivalTime = TRIPData[nJ].actualTimeOfDay + actualTime; sprintf(tempString, "%ld\r\n", arrivalTime); strcat(outputStringRaw, tempString); // // Distance // distance = GreatCircleDistance(longitude[0], latitude[0], longitude[1], latitude[1]); sprintf(tempString, "%7.2f ", distance); strcat(outputString, tempString); // // Speed per hour // if(actualTime == 0 || actualTime == NO_TIME) strcpy(tempString, "-------"); else sprintf(tempString, "%7.2f", distance / ((double)actualTime / 3600)); strcat(outputString, tempString); // // Write it out // strcat(outputString, "\"\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); WriteFile(hOutputFileRaw, (LPCVOID *)outputStringRaw, strlen(outputStringRaw), &dwBytesWritten, NULL); } sprintf(outputString, "%d\t%s\t%s\t\" Total entries: %d\"\r\n", seqNum++, fromNodeName, toNodeName, numEntries); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); } // nI bKeepGoing = TRUE; // // Free allocated memory // deallocate: TMSHeapFree(REPORTPARMS.pRouteList); TMSHeapFree(REPORTPARMS.pServiceList); CloseHandle(hOutputFile); CloseHandle(hOutputFileRaw); StatusBarEnd(); if(!bKeepGoing) { return(FALSE); } // // All done // return(TRUE); }
BOOL FAR TMSRPT31(TMSRPTPassedDataDef *pPassedData) { REPORTPARMSDef REPORTPARMS; HANDLE hOutputFile; double distance; double longitude; double prevLongitude; double latitude; double prevLatitude; BOOL bKeepGoing = FALSE; BOOL bRC; char routeNumber[ROUTES_NUMBER_LENGTH + 1]; char routeName[ROUTES_NAME_LENGTH + 1]; char serviceName[SERVICES_NAME_LENGTH + 1]; char directionName[DIRECTIONS_LONGNAME_LENGTH + 1]; char patternName[PATTERNNAMES_NAME_LENGTH + 1]; char nodeName[NODES_ABBRNAME_LENGTH + 1]; char intersection[NODES_INTERSECTION_LENGTH + 1]; char *ptr; BYTE recordBody[512]; long statbarTotal; long prevPattern; long prevNode; int nI; int nJ; int nK; int rcode2; int recordBodyLength; short int sequenceNumber; short int rowNumber; short int colNumber; short int previousRow; pPassedData->nReportNumber = 30; pPassedData->numDataFiles = 1; // // See what he wants // REPORTPARMS.nReportNumber = pPassedData->nReportNumber; REPORTPARMS.ROUTESrecordID = m_RouteRecordID; REPORTPARMS.SERVICESrecordID = m_ServiceRecordID; REPORTPARMS.COMMENTSrecordID = NO_RECORD; REPORTPARMS.pRouteList = NULL; REPORTPARMS.pServiceList = NULL; REPORTPARMS.flags = RPFLAG_ROUTES | RPFLAG_SERVICES | RPFLAG_COMMENTS; bRC = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_RPTPARMS), hWndMain, (DLGPROC)RPTPARMSMsgProc, (LPARAM)&REPORTPARMS); if(!bRC) return(FALSE); // // Check the list of routes and services // if(REPORTPARMS.numRoutes == 0 || REPORTPARMS.numServices == 0) goto deallocate; // // Open the output file // strcpy(tempString, szDatabaseFileName); if((ptr = strrchr(tempString, '\\')) != NULL) *ptr = '\0'; strcat(tempString, "\\TMSRPT31.XLS"); hOutputFile = CreateFile(tempString, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hOutputFile == INVALID_HANDLE_VALUE) { LoadString(hInst, ERROR_202, szFormatString, sizeof(szFormatString)); sprintf(szarString, szFormatString, tempString); MessageBeep(MB_ICONSTOP); MessageBox((HWND)NULL, szarString, TMS, MB_ICONSTOP); goto deallocate; } strcpy(pPassedData->szReportDataFile[0], tempString); // // Write out the header for the Excel file // recordBody[0] = 0x02; recordBody[1] = 0x00; recordBody[2] = 0x10; recordBody[3] = 0x00; WriteExcel(EXCEL_BOF, hOutputFile, recordBody, 4); // // Loop through the routes // LoadString(hInst, TEXT_117, tempString, TEMPSTRING_LENGTH); StatusBarStart(hWndMain, tempString); statbarTotal = REPORTPARMS.numRoutes * REPORTPARMS.numServices; rowNumber = 0; for(nI = 0; nI < REPORTPARMS.numRoutes; nI++) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } ROUTESKey0.recordID = REPORTPARMS.pRouteList[nI]; rcode2 = btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0); if(rcode2 != 0) continue; strncpy(routeNumber, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(routeNumber, ROUTES_NUMBER_LENGTH); strncpy(routeName, ROUTES.name, ROUTES_NAME_LENGTH); trim(routeName, ROUTES_NAME_LENGTH); // // Loop through the services // for(nJ = 0; nJ < REPORTPARMS.numServices; nJ++) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } SERVICESKey0.recordID = REPORTPARMS.pServiceList[nJ]; rcode2 = btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); if(rcode2 != 0) continue; strncpy(serviceName, SERVICES.name, SERVICES_NAME_LENGTH); trim(serviceName, SERVICES_NAME_LENGTH); LoadString(hInst, TEXT_118, szFormatString, sizeof(szFormatString)); strcpy(szarString, routeNumber); strcat(szarString, " - "); strcat(szarString, routeName); sprintf(tempString, szFormatString, szarString, serviceName); StatusBarText(tempString); StatusBar((long)(nI * REPORTPARMS.numServices + nJ), (long)statbarTotal); if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } // // Loop through the directions // for(nK = 0; nK < 2; nK++) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } if(ROUTES.DIRECTIONSrecordID[nK] == NO_RECORD) continue; DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[nK]; rcode2 = btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); if(rcode2 != 0) continue; strncpy(directionName, DIRECTIONS.longName, DIRECTIONS_LONGNAME_LENGTH); trim(directionName, DIRECTIONS_LONGNAME_LENGTH); // // Get the base pattern nodes // PATTERNSKey2.ROUTESrecordID = ROUTES.recordID; PATTERNSKey2.SERVICESrecordID = SERVICES.recordID; PATTERNSKey2.directionIndex = nK; PATTERNSKey2.PATTERNNAMESrecordID = basePatternRecordID; PATTERNSKey2.nodeSequence = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); prevPattern = NO_RECORD; while(rcode2 == 0 && PATTERNS.ROUTESrecordID == ROUTES.recordID && PATTERNS.SERVICESrecordID == SERVICES.recordID && PATTERNS.directionIndex == nK) { // // Determine a change in pattern // if(PATTERNS.PATTERNNAMESrecordID != prevPattern) { prevNode = NO_RECORD; prevPattern = PATTERNS.PATTERNNAMESrecordID; sequenceNumber = 1; } // // Start outputting the data // // Route number // colNumber = 0; recordBodyLength = SetRecordBodyForString(&rowNumber, &colNumber, routeNumber, recordBody); WriteExcel(EXCEL_LABEL, hOutputFile, recordBody, recordBodyLength); // // Route name // colNumber = 1; recordBodyLength = SetRecordBodyForString(&rowNumber, &colNumber, routeName, recordBody); WriteExcel(EXCEL_LABEL, hOutputFile, recordBody, recordBodyLength); // // Service name // colNumber = 2; recordBodyLength = SetRecordBodyForString(&rowNumber, &colNumber, serviceName, recordBody); WriteExcel(EXCEL_LABEL, hOutputFile, recordBody, recordBodyLength); // Direction name // colNumber = 3; recordBodyLength = SetRecordBodyForString(&rowNumber, &colNumber, directionName, recordBody); WriteExcel(EXCEL_LABEL, hOutputFile, recordBody, recordBodyLength); // // Pattern name // PATTERNNAMESKey0.recordID = PATTERNS.PATTERNNAMESrecordID; btrieve(B_GETEQUAL, TMS_PATTERNNAMES, &PATTERNNAMES, &PATTERNNAMESKey0, 0); strncpy(patternName, PATTERNNAMES.name, PATTERNNAMES_NAME_LENGTH); trim(patternName, PATTERNNAMES_NAME_LENGTH); colNumber = 4; recordBodyLength = SetRecordBodyForString(&rowNumber, &colNumber, patternName, recordBody); WriteExcel(EXCEL_LABEL, hOutputFile, recordBody, recordBodyLength); // // Sequence number // colNumber = 5; recordBodyLength = SetRecordBodyForShortInteger(&rowNumber, &colNumber, &sequenceNumber, recordBody); WriteExcel(EXCEL_INTEGER, hOutputFile, recordBody, recordBodyLength); sequenceNumber++; // // Node abbreviation // NODESKey0.recordID = PATTERNS.NODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(nodeName, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(nodeName, NODES_ABBRNAME_LENGTH); colNumber = 6; recordBodyLength = SetRecordBodyForString(&rowNumber, &colNumber, nodeName, recordBody); WriteExcel(EXCEL_LABEL, hOutputFile, recordBody, recordBodyLength); // // Node intersection // strncpy(intersection, NODES.intersection, NODES_INTERSECTION_LENGTH); trim(intersection, NODES_INTERSECTION_LENGTH); colNumber = 7; recordBodyLength = SetRecordBodyForString(&rowNumber, &colNumber, intersection, recordBody); WriteExcel(EXCEL_LABEL, hOutputFile, recordBody, recordBodyLength); // // Latitude // latitude = NODES.latitude; colNumber = 8; recordBodyLength = SetRecordBodyForDouble(&rowNumber, &colNumber, &latitude, recordBody); WriteExcel(EXCEL_NUMBER, hOutputFile, recordBody, recordBodyLength); // // Longitude // longitude = NODES.longitude; colNumber = 9; recordBodyLength = SetRecordBodyForDouble(&rowNumber, &colNumber, &longitude, recordBody); WriteExcel(EXCEL_NUMBER, hOutputFile, recordBody, recordBodyLength); // // Distance to next node // if(prevNode != NO_RECORD) { distance = GreatCircleDistance(prevLongitude, prevLatitude, longitude, latitude); colNumber = 10; previousRow = rowNumber - 1; recordBodyLength = SetRecordBodyForDouble(&previousRow, &colNumber, &distance, recordBody); WriteExcel(EXCEL_NUMBER, hOutputFile, recordBody, recordBodyLength); } prevNode = NODES.recordID; prevLatitude = latitude; prevLongitude = longitude; // // Bump up the row and get the next node in the BASE pattern // rowNumber++; rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } // while } // nK } // nJ } // nI // // Write out the EOF marker for the Excel file // WriteExcel(EXCEL_EOF, hOutputFile, NULL, NO_RECORD); bKeepGoing = TRUE; // // Free allocated memory // deallocate: TMSHeapFree(REPORTPARMS.pRouteList); TMSHeapFree(REPORTPARMS.pServiceList); CloseHandle(hOutputFile); StatusBarEnd(); if(!bKeepGoing) { return(FALSE); } // // All done // // Let him know // strcpy(tempString, "TMSRPT31.xls was written to:\n"); strcpy(szarString, szDatabaseFileName); if((ptr = strrchr(szarString, '\\')) != NULL) { *ptr = '\0'; } strcat(tempString, szarString); MessageBox(hWndMain, tempString, TMS, MB_OK); return(TRUE); }
// // Discipline Report // // From QETXT.INI: // // [TMSRPT60] // FILE=TMSRPT60.txt // FLN=0 // TT=Tab // Charset=ANSI // DS=. // FIELD1=Date,VARCHAR,32,0,32,0, // FIELD2=Time,VARCHAR,32,0,32,0, // FIELD3=Sequence,NUMERIC,8,0,8,0, // FIELD4=Operator,VARCHAR,32,0,32,0, // FIELD5=Text,VARCHAR,256,0,256,0, // BOOL FAR TMSRPT60(TMSRPTPassedDataDef *pPassedData) { DISCIPLINEFILTERSELECTIONSDef DisciplineSelections; HANDLE hOutputFile = NULL; DWORD dwBytesWritten; BOOL bKeepGoing = FALSE; BOOL bRC; char outputString[512]; char szDriver[DRIVERS_LASTNAME_LENGTH + 2 + DRIVERS_FIRSTNAME_LENGTH + 1]; long year, month, day; long DRIVERSrecordID; long seq; long category; long type; long action; int rcode2; int nI; pPassedData->nReportNumber = 59; pPassedData->numDataFiles = 1; DRIVERSrecordID = pPassedData->DRIVERSrecordID; // // See what's to be filtered // bRC = DisciplineFilter(&DisciplineSelections); if(bRC != IDOK) { goto deallocate; } // // Open the output file // strcpy(tempString, szReportsTempFolder); strcat(tempString, "\\TMSRPT60.txt"); hOutputFile = CreateFile(tempString, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hOutputFile == INVALID_HANDLE_VALUE) { LoadString(hInst, ERROR_202, szFormatString, sizeof(szFormatString)); sprintf(szarString, szFormatString, tempString); MessageBeep(MB_ICONSTOP); MessageBox((HWND)NULL, szarString, TMS, MB_ICONSTOP); goto deallocate; } StatusBarStart(hWndMain, "Processing selections..."); StatusBar(-1L, -1L); bKeepGoing = TRUE; // // Set up the driver // DRIVERSKey0.recordID = DRIVERSrecordID; btrieve(B_GETEQUAL, TMS_DRIVERS, &DRIVERS, &DRIVERSKey0, 0); strncpy(tempString, DRIVERS.lastName, DRIVERS_LASTNAME_LENGTH); trim(tempString, DRIVERS_LASTNAME_LENGTH); strcpy(szDriver, tempString); strcat(szDriver, ", "); strncpy(tempString, DRIVERS.firstName, DRIVERS_FIRSTNAME_LENGTH); trim(tempString, DRIVERS_FIRSTNAME_LENGTH); strcat(szDriver, tempString); // // Set up the flags for retrieval // DISCIPLINEKey1.DRIVERSrecordID = DRIVERSrecordID; DISCIPLINEKey1.dateOfOffense = DisciplineSelections.fromDate; DISCIPLINEKey1.timeOfOffense = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_DISCIPLINE, &DISCIPLINE, &DISCIPLINEKey1, 1); seq = 0; while(rcode2 == 0 && DISCIPLINE.DRIVERSrecordID == DRIVERSrecordID) { if(DISCIPLINE.dateOfOffense > DisciplineSelections.toDate) { break; } category = DISCIPLINE.violationCategory; type = DISCIPLINE.violationType; action = DISCIPLINE.actionTaken; // // Category // if(category != NO_RECORD) { GetYMD(DISCIPLINE.dateOfOffense, &year, &month, &day); sprintf(outputString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, Tchar(DISCIPLINE.timeOfOffense)); strcat(outputString, "\t"); sprintf(tempString, "%ld\t", seq++); strcat(outputString, tempString); strcat(outputString, szDriver); strcat(outputString, "\tCategory: "); strcat(outputString, m_ViolationCategories[category]); strcat(outputString, "\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); } // // Type // if(category != NO_RECORD && type != NO_RECORD) { GetYMD(DISCIPLINE.dateOfOffense, &year, &month, &day); sprintf(outputString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, Tchar(DISCIPLINE.timeOfOffense)); strcat(outputString, "\t"); sprintf(tempString, "%ld\t", seq++); strcat(outputString, tempString); strcat(outputString, szDriver); strcat(outputString, "\t Type: "); strcat(outputString, m_Violations[category][type].text); strcat(outputString, "\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); // // Action // sprintf(outputString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, Tchar(DISCIPLINE.timeOfOffense)); strcat(outputString, "\t"); sprintf(tempString, "%ld\t", seq++); strcat(outputString, tempString); strcat(outputString, szDriver); strcat(outputString, "\t Action: "); if(action == NO_RECORD) { strcat(outputString, " None taken."); } else { strcat(outputString, m_ViolationActions[action]); } strcat(outputString, "\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); } // // Comments // GetYMD(DISCIPLINE.dateOfOffense, &year, &month, &day); sprintf(outputString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, Tchar(DISCIPLINE.timeOfOffense)); strcat(outputString, "\t"); sprintf(tempString, "%ld\t", seq++); strcat(outputString, tempString); strcat(outputString, szDriver); strcat(outputString, "\t Notes: "); strncpy(tempString, DISCIPLINE.comments, DISCIPLINE_COMMENTS_LENGTH); trim(tempString, DISCIPLINE_COMMENTS_LENGTH); for(nI = 0; nI < (int)strlen(tempString); nI++) { if(tempString[nI] == 13) { tempString[nI ] = ' '; tempString[nI + 1] = ' '; break; } } strcat(outputString, tempString); strcat(outputString, "\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); // // Suspended // if(DISCIPLINE.suspensionDate > 0) { // // Date, time, sequence, driver // GetYMD(DISCIPLINE.dateOfOffense, &year, &month, &day); sprintf(outputString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, Tchar(DISCIPLINE.timeOfOffense)); strcat(outputString, "\t"); sprintf(tempString, "%ld\t", seq++); strcat(outputString, tempString); strcat(outputString, szDriver); strcat(outputString, "\t"); GetYMD(DISCIPLINE.suspensionDate, &year, &month, &day); sprintf(tempString, "Suspension date: %02ld-%s-%04ld", day, szMonth[month - 1], year); strcat(outputString, tempString); strcat(outputString, "\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); sprintf(tempString, "Suspension duration: %5.2f", DISCIPLINE.suspensionDuration); GetYMD(DISCIPLINE.dateOfOffense, &year, &month, &day); sprintf(outputString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, Tchar(DISCIPLINE.timeOfOffense)); strcat(outputString, "\t"); sprintf(tempString, "%ld\t", seq++); strcat(outputString, tempString); strcat(outputString, szDriver); strcat(outputString, "\t"); sprintf(tempString, "Suspension duration: %5.2f\r\n", DISCIPLINE.suspensionDuration); strcat(outputString, tempString); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); } // // Dropoff date // GetYMD(DISCIPLINE.dateOfOffense, &year, &month, &day); sprintf(outputString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, Tchar(DISCIPLINE.timeOfOffense)); strcat(outputString, "\t"); sprintf(tempString, "%ld\t", seq++); strcat(outputString, tempString); strcat(outputString, szDriver); strcat(outputString, "\t Dropoff: "); GetYMD(DISCIPLINE.dropoffDate, &year, &month, &day); sprintf(tempString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, tempString); strcat(outputString, "\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); // // Get the next record // rcode2 = btrieve(B_GETNEXT, TMS_DISCIPLINE, &DISCIPLINE, &DISCIPLINEKey1, 1); } // // Free allocated memory // deallocate: StatusBarEnd(); if(hOutputFile != NULL) { CloseHandle(hOutputFile); } SetCursor(hCursorArrow); return(bKeepGoing); }