Esempio n. 1
0
int GetDate(long *dd, long *mm, long *yyyy)
{
  long date;

  while(TRUE)
  {
    date = NO_RECORD;
    CPickDate dlg(NULL, &date);

    if(dlg.DoModal() != IDOK)
    {
      return(NO_RECORD);
    }

    GetYMD(date, yyyy, mm, dd);
  
    CTime spanDate(*yyyy, *mm, *dd, 0, 0, 0);

    if(spanDate.GetDayOfWeek() == 2)
    {
      return(TRUE);
    }
    
    MessageBox(NULL, "Please select a Monday", TMS, MB_OK);
  }
}
Esempio n. 2
0
sltime GetTime(char* time)
{
	if (g_year == 0)
		GetYMD();

	int hour;
	int min;
	int sec;

	char buf[4] = { 0 };
	memcpy(buf, time, 2);
	hour = atoi(buf);

	memcpy(buf, time +2, 2);
	min = atoi(buf);

	memcpy(buf, time + 4, 2);
	sec = atoi(buf);

	return sltime(g_year, g_month, g_day, hour, min, sec);	
}
Esempio n. 3
0
File: Tmsrpt13.c Progetto: ems/TMS
//
//  Unassigned drivers report
//
BOOL FAR TMSRPT13(TMSRPTPassedDataDef *pPassedData)
{
  HFILE hfOutputFile;
  BOOL  bKeepGoing = FALSE;
  char  szOutputString[128];
  long  year, month,day;
  int   rcode2;
  int   nI;

  pPassedData->nReportNumber = 12;
  pPassedData->numDataFiles = 1;
  for(nI = 0; nI < m_LastReport; nI++)
  {
    if(TMSRPT[nI].originalReportNumber == pPassedData->nReportNumber)
    {
      StatusBarStart(hWndMain, TMSRPT[nI].szReportName);
      break;
    }
  }
//
//  Open the output file
//
  StatusBarText("Cycling through roster...");
  strcpy(tempString, szReportsTempFolder);
  strcat(tempString, "\\tmsrpt13.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 drivers in seniority order
//
  rcode2 = btrieve(B_GETFIRST, TMS_DRIVERS, &DRIVERS, &DRIVERSKey2, 2);
  while(rcode2 == 0)
  {
    if(ConsideringThisDriverType(DRIVERS.DRIVERTYPESrecordID))
    {
      ROSTERKey2.DRIVERSrecordID = DRIVERS.recordID;
      rcode2 = btrieve(B_GETEQUAL, TMS_ROSTER, &ROSTER, &ROSTERKey2, 2);
      if(rcode2 != 0)
      {
        if(DRIVERS.DRIVERTYPESrecordID == NO_RECORD)
        {
          strcpy(tempString, "");
        }
        else
        {
          DRIVERTYPESKey0.recordID = DRIVERS.DRIVERTYPESrecordID;
          rcode2 = btrieve(B_GETEQUAL, TMS_DRIVERTYPES, &DRIVERTYPES, &DRIVERTYPESKey0, 0);
          if(rcode2 != 0)
          {
            strcpy(tempString, "");
          }
          else
          {
            strncpy(tempString, DRIVERTYPES.name, DRIVERTYPES_NAME_LENGTH);
            trim(tempString, DRIVERTYPES_NAME_LENGTH);
          }
        }
        strcpy(szOutputString, tempString);
        strcat(szOutputString, "\t");
        GetYMD(DRIVERS.seniorityDate, &year, &month, &day);
        sprintf(tempString, "%4ld/%02ld/%02ld - ", year, month, day);
        strcat(szOutputString, tempString);
        strncpy(tempString, DRIVERS.lastName, DRIVERS_LASTNAME_LENGTH);
        trim(tempString, DRIVERS_LASTNAME_LENGTH);
        strcat(szOutputString, tempString);
        strcat(szOutputString, ", ");
        strncpy(tempString, DRIVERS.firstName, DRIVERS_FIRSTNAME_LENGTH);
        trim(tempString, DRIVERS_FIRSTNAME_LENGTH);
        strcat(szOutputString, tempString);
        strncpy(tempString, DRIVERS.badgeNumber, DRIVERS_BADGENUMBER_LENGTH);
        trim(tempString, DRIVERS_BADGENUMBER_LENGTH);
        if(strcmp(tempString, "") != 0)
        {
          strcat(szOutputString, " (Badge ");
          strcat(szOutputString, tempString);
          strcat(szOutputString, ")");
        }
        strcat(szOutputString, "\r\n");
        _lwrite(hfOutputFile, szOutputString, strlen(szOutputString));
      }
    }
    rcode2 = btrieve(B_GETNEXT, TMS_DRIVERS, &DRIVERS, &DRIVERSKey2, 2);
  }

  bKeepGoing = TRUE;
//
//  Free allocated memory / close output file
//
  deallocate:
    _lclose(hfOutputFile);
    StatusBarEnd();
    if(!bKeepGoing)
      return(FALSE);
//
//  All done
//
  return(TRUE);
}
Esempio n. 4
0
File: Tmsrpt67.c Progetto: ems/TMS
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, &GTResults);
//
//  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, &GTResults);
//
//  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);
}
Esempio n. 5
0
BOOL CDailyOpsAB::OnInitDialog() 
{
	CDialog::OnInitDialog();

  HCURSOR hSaveCursor = SetCursor(hCursorWait);

//
//  Set up the pointers to the controls
//
  pListCtrlLIST = (CListCtrl *)GetDlgItem(DAILYOPSAB_LIST);
  pDTPickerDATE = (CDTPicker *)GetDlgItem(DAILYOPSAB_DATE);
  pButtonSHOWOFF = (CButton *)GetDlgItem(DAILYOPSAB_SHOWOFF);
//
//  Set today's date on the Date and Time picker
//
  COleVariant v;
  long year, month, day;

  if(m_Date == NO_RECORD)
  {
    CTime time = CTime::GetCurrentTime();
  
    day = time.GetDay();
    month = time.GetMonth();
    year = time.GetYear();
  }
  else
  {
    GetYMD(m_Date, &year, &month, &day);
  }

  v = year;
  pDTPickerDATE->SetYear(v);
  v = month;
  pDTPickerDATE->SetMonth(v);
  v = day;
  pDTPickerDATE->SetDay(v);
//
//  Set up the list controls
//
  DWORD dwExStyles = pListCtrlLIST->GetExtendedStyle();
  pListCtrlLIST->SetExtendedStyle(dwExStyles | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_INFOTIP);

  LVCOLUMN LVC;
  LVC.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;

  LVC.cx = 128;
  LVC.fmt = LVCFMT_LEFT;
  LVC.pszText = "Entry Date/Time";
  pListCtrlLIST->InsertColumn(0, &LVC);

  LVC.cx = 164;
  LVC.pszText = "Operator";
  pListCtrlLIST->InsertColumn(1, &LVC);
  
  LVC.cx = 100;
  LVC.fmt = LVCFMT_LEFT;
  LVC.pszText = "Reason";
  pListCtrlLIST->InsertColumn(2, &LVC);

  LVC.cx = 128;
  LVC.pszText = "From Date/Time";
  pListCtrlLIST->InsertColumn(3, &LVC);
 
  LVC.cx = 128;
  LVC.pszText = "To Date/Time";
  pListCtrlLIST->InsertColumn(4, &LVC);
//
//  Default to showing drivers with the day off
//
  pButtonSHOWOFF->SetCheck(TRUE);
//
//  Set the date to force a refresh
//
  OnChangeDate();

  SetCursor(hSaveCursor);
  m_bInitializing = FALSE;

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
Esempio n. 6
0
void CDailyOpsAB::OnChangeDate() 
{
//
//  Cycle through the entries for this operator
//
  LVITEM  LVI;
  CString s;
  CTime  time = CTime::GetCurrentTime();
  long   thisDate;
  long   startDate;
  long   year, month, day;
  char   lastName[DRIVERS_LASTNAME_LENGTH + 1];
  char   firstName[DRIVERS_FIRSTNAME_LENGTH + 1];
  char   badgeNumber[DRIVERS_BADGENUMBER_LENGTH + 1];
  int    iItem = 0;
  int    rcode2;

//
//  Clear the control
//
  pListCtrlLIST->DeleteAllItems();
//
//  Get the date
//
//  Date
//
  COleVariant v;

  v = pDTPickerDATE->GetYear();
  year = v.lVal;
  v = pDTPickerDATE->GetMonth();
  month = v.lVal;
  v = pDTPickerDATE->GetDay();
  day = v.lVal;

//
//  Database verify 11-Jan-07
//
  thisDate = year * 10000 + month * 100 + day;
  startDate = (year - 1) * 10000 + month * 100 + day;
  DAILYOPSKey1.recordTypeFlag = DAILYOPS_FLAG_ABSENCE;
  DAILYOPSKey1.pertainsToDate = startDate;
  DAILYOPSKey1.pertainsToTime = NO_TIME;
  DAILYOPSKey1.recordFlags = 0;
  rcode2 = btrieve(B_GETGREATER, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1);
  while(rcode2 == 0 &&
        (DAILYOPS.recordTypeFlag & DAILYOPS_FLAG_ABSENCE) &&
         DAILYOPS.pertainsToDate <= thisDate)
  {
    if(thisDate >= DAILYOPS.pertainsToDate &&
          thisDate <= DAILYOPS.DOPS.Absence.untilDate &&
          (DAILYOPS.recordFlags & DAILYOPS_FLAG_ABSENCEREGISTER))
    {
      if(!ANegatedRecord(DAILYOPS.recordID, 1))
      {
//
//  Date/time of entry
//
        LVI.mask = LVIF_TEXT | LVIF_PARAM;
        LVI.iItem = iItem;
        LVI.iSubItem = 0;
        sprintf(tempString, "%s", ctime(&DAILYOPS.entryDateAndTime));
        LVI.pszText = tempString;
        LVI.lParam = DAILYOPS.recordID;
        LVI.iItem = pListCtrlLIST->InsertItem(&LVI);
//
//  Operator
//
        LVI.mask = LVIF_TEXT;
        LVI.iItem = iItem;
        LVI.iSubItem = 1;
        DRIVERSKey0.recordID = DAILYOPS.DRIVERSrecordID;
        rcode2 = btrieve(B_GETEQUAL, TMS_DRIVERS, &DRIVERS, &DRIVERSKey0, 0);
        if(rcode2 != 0)
        {
          strcpy(tempString, "Driver not found");
        }
        else
        {
          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);
          strcpy(tempString, badgeNumber);
          strcat(tempString, " - ");
          strcat(tempString, lastName);
          strcat(tempString, ", ");
          strcat(tempString, firstName);
        }
        LVI.pszText = tempString;
        LVI.iItem = pListCtrlLIST->SetItem(&LVI);
//
//  Reason
//
        LVI.mask = LVIF_TEXT;
        LVI.iItem = iItem;
        LVI.iSubItem = 2;
        if(DAILYOPS.DOPS.Absence.reasonIndex == NO_RECORD)
        {
          strcpy(tempString, "Assignment cleared manually");
        }
        else
        {
          strcpy(tempString, m_AbsenceReasons[DAILYOPS.DOPS.Absence.reasonIndex].szText);
        }
        LVI.pszText = tempString;
        LVI.iItem = pListCtrlLIST->SetItem(&LVI);
//
//  From Date and time
//
        GetYMD(DAILYOPS.pertainsToDate, &year, &month, &day);
        LVI.mask = LVIF_TEXT;
        LVI.iItem = iItem;
        LVI.iSubItem = 3;
        sprintf(tempString, "%02ld-%s-%04ld at %s",
              day, szMonth[month - 1], year, Tchar(DAILYOPS.pertainsToTime));
        LVI.pszText = tempString;
        LVI.iItem = pListCtrlLIST->SetItem(&LVI);
//
//  To Date and time
//
        GetYMD(DAILYOPS.DOPS.Absence.untilDate, &year, &month, &day);
        LVI.mask = LVIF_TEXT;
        LVI.iItem = iItem;
        LVI.iSubItem = 4;
        sprintf(tempString, "%02ld-%s-%04ld at %s",
              day, szMonth[month - 1], year, Tchar(DAILYOPS.DOPS.Absence.untilTime));
        LVI.pszText = tempString;
        LVI.iItem = pListCtrlLIST->SetItem(&LVI);
//
//  Set up the next row
//
        iItem++;
      }
    }
    rcode2 = btrieve(B_GETNEXT, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1);
  }
//
//  Display operators with an off day?
//
  if(m_bAutomatic || !pButtonSHOWOFF->GetCheck())
  {
    return;
  }
  GetYMD(thisDate, &year, &month, &day);
//
//  Get the list of drivers and assume they're not working
//
  long DRIVERSrecordIDs[500];
  int  numDrivers = 0;

  rcode2 = btrieve(B_GETFIRST, TMS_DRIVERS, &DRIVERS, &DRIVERSKey2, 2);
  while(rcode2 == 0)
  {
    if(ConsideringThisDriverType(DRIVERS.DRIVERTYPESrecordID))
    {
      DRIVERSrecordIDs[numDrivers] = DRIVERS.recordID;
      numDrivers++;
    }
    rcode2 = btrieve(B_GETNEXT, TMS_DRIVERS, &DRIVERS, &DRIVERSKey2, 2);
  }
//
//  Eliminate those who are working sometime today
//
  CTime workDate(year, month, day, 0, 0, 0);
  int nI, nJ;
  int indexToRoster[7] = {6, 0, 1, 2, 3, 4, 5};
  int today = indexToRoster[workDate.GetDayOfWeek() - 1];

  ROSTERKey1.DIVISIONSrecordID = m_DailyOpsROSTERDivisionInEffect;
  ROSTERKey1.rosterNumber = NO_RECORD;
  rcode2 = btrieve(B_GETGREATER, TMS_ROSTER, &ROSTER, &ROSTERKey1, 1);
  while(rcode2 == 0 &&
        ROSTER.DIVISIONSrecordID == m_DailyOpsROSTERDivisionInEffect)
  {
    if(ROSTER.DRIVERSrecordID != NO_RECORD && ROSTER.WEEK[m_RosterWeek].RUNSrecordIDs[today] != NO_RECORD)
    {
      for(nI = 0; nI < numDrivers; nI++)
      {
        if(DRIVERSrecordIDs[nI] != NO_RECORD)
        {
          if(ROSTER.DRIVERSrecordID == DRIVERSrecordIDs[nI])
          {
            DRIVERSrecordIDs[nI] = NO_RECORD;
            break;
          }
        }
      }
    }
    rcode2 = btrieve(B_GETNEXT, TMS_ROSTER, &ROSTER, &ROSTERKey1, 1);
  }
//
//  Eliminate those that are already marked as absent
//
  int numItems = pListCtrlLIST->GetItemCount();

  for(nI = 0; nI < numItems; nI++)
  {
//
//  Determine the operator
//
    DAILYOPSKey0.recordID = pListCtrlLIST->GetItemData(nI);
    rcode2 = btrieve(B_GETEQUAL,TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey0, 0);
    if(rcode2 == 0)
    {
      for(nJ = 0; nJ < numDrivers; nJ++)
      {
        if(DRIVERSrecordIDs[nJ] != NO_RECORD)
        {
          if(DRIVERSrecordIDs[nJ] == DAILYOPS.DRIVERSrecordID)
          {
            DRIVERSrecordIDs[nJ] = NO_RECORD;
            break;
          }
        }
      }
    }
  }
//
//  Spit out those that remain on the list
//
  for(nI = 0; nI < numDrivers; nI++)
  {
    if(DRIVERSrecordIDs[nI] == NO_RECORD)
    {
      continue;
    }
//
//  Date/time of entry
//
    LVI.mask = LVIF_TEXT | LVIF_PARAM;
    LVI.iItem = iItem;
    LVI.iSubItem = 0;
    LVI.pszText = "";
    LVI.lParam = NO_RECORD;
    LVI.iItem = pListCtrlLIST->InsertItem(&LVI);
//
//  Operator
//
    LVI.mask = LVIF_TEXT;
    LVI.iItem = iItem;
    LVI.iSubItem = 1;
    DRIVERSKey0.recordID = DRIVERSrecordIDs[nI];
    rcode2 = btrieve(B_GETEQUAL, TMS_DRIVERS, &DRIVERS, &DRIVERSKey0, 0);
    if(rcode2 != 0)
    {
      strcpy(tempString, "Driver not found");
    }
    else
    {
      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);
      strcpy(tempString, badgeNumber);
      strcat(tempString, " - ");
      strcat(tempString, lastName);
      strcat(tempString, ", ");
      strcat(tempString, firstName);
    }
    LVI.pszText = tempString;
    LVI.iItem = pListCtrlLIST->SetItem(&LVI);
//
//  Reason
//
    LVI.mask = LVIF_TEXT;
    LVI.iItem = iItem;
    LVI.iSubItem = 2;
    strcpy(tempString, "Day Off");
    LVI.pszText = tempString;
    LVI.iItem = pListCtrlLIST->SetItem(&LVI);
//
//  Set up the next row
//
    iItem++;
  }
}
Esempio n. 7
0
void CDailyOpsHO::Display()
{
  LVITEM  LVI;
  BOOL   bFound;
  int    iItem = 0;
  int    rcode2;
  long   year, month, day;

  HCURSOR hSaveCursor = SetCursor(hCursorWait);

  pListCtrlLIST->DeleteAllItems();

  DAILYOPSKey1.recordTypeFlag = (char)DAILYOPS_FLAG_DATE;
  DAILYOPSKey1.pertainsToDate = *m_pDate - 10000;
  DAILYOPSKey1.pertainsToTime = NO_TIME;
  DAILYOPSKey1.recordFlags = 0;
  rcode2 = btrieve(B_GETGREATER, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1);
  while(rcode2 == 0 &&
        (DAILYOPS.recordTypeFlag & DAILYOPS_FLAG_DATE))
  {
    bFound = FALSE;
    if(DAILYOPS.recordFlags & DAILYOPS_FLAG_DATESET)
    {
      if(!ANegatedRecord(DAILYOPS.recordID, 1))
      {
//
//  Pertains to date
//
        GetYMD(DAILYOPS.pertainsToDate, &year, &month, &day);

        CTime   t(year, month, day, 0, 0, 0);
        CString x = t.Format(_T("%A, %B %d, %Y"));

        LVI.mask = LVIF_TEXT | LVIF_PARAM;
        LVI.iItem = iItem;
        LVI.iSubItem = 0;
        sprintf(tempString, "%s", x);
        LVI.pszText = tempString;
        LVI.lParam = DAILYOPS.recordID;
        LVI.iItem = pListCtrlLIST->InsertItem(&LVI);
//
//  Description
//
        strncpy(tempString, DAILYOPS.DOPS.Date.name, DAILYOPS_DATENAME_LENGTH);
        trim(tempString, DAILYOPS_DATENAME_LENGTH);
        LVI.mask = LVIF_TEXT;
        LVI.iItem = iItem;
        LVI.iSubItem = 1;
        LVI.pszText = tempString;
        LVI.iItem = pListCtrlLIST->SetItem(&LVI);
//
//  Service
//
        SERVICESKey0.recordID = DAILYOPS.DOPS.Date.SERVICESrecordID;
        rcode2 = btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0);
        if(rcode2 == 0)
        {
          strncpy(tempString, SERVICES.name, SERVICES_NAME_LENGTH);
          trim(tempString, SERVICES_NAME_LENGTH);
        }
        else
        {
          strcpy(tempString, "No Service");
        }
        LVI.mask = LVIF_TEXT;
        LVI.iItem = iItem;
        LVI.iSubItem = 2;
        LVI.pszText = tempString;
        LVI.iItem = pListCtrlLIST->SetItem(&LVI);
//
//  Set up the next row
//
        iItem++;
      }
    }
    rcode2 = btrieve(B_GETNEXT, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1);
  }
//
//  Disable Remove and Update 'till he picks something
//
  pButtonIDREMOVE->EnableWindow(FALSE);
  pButtonIDUPDATE->EnableWindow(FALSE);
}
Esempio n. 8
0
File: TMSRpt73.c Progetto: ems/TMS
BOOL FAR TMSRPT73(TMSRPTPassedDataDef *pPassedData)
{
  CombinedDef Combined[TMSRPT73_MAXROUTES];
  HFILE hfOutputFile;
  BOOL  bKeepGoing = FALSE;
  BOOL  bFound;
  char  outputString[512];
  long  tempLong;
  long  fromDate, toDate;
  long  year, month,day;
  int   nI;
  int   nJ;
  int   nK;
  int   rcode2;
  int   numCombined;

  pPassedData->nReportNumber = 72;
  pPassedData->numDataFiles = 1;
//
//  See what he wants
//
  if(!GetDateRange(&fromDate, &toDate))
  {
    return(FALSE);
  }
//
//  Open the output file
//
  strcpy(tempString, szReportsTempFolder);
  strcat(tempString, "\\TMSRPT73.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);
//
//  Go through the audit trail to get the ridership numbers
//
  StatusBarStart(hWndMain, "Unloading Ridership Data");
  for(tempLong = fromDate; tempLong <= toDate; tempLong++)
  {
    if(StatusBarAbort())
    {
      bKeepGoing = FALSE;
      goto deallocate;
    }
    for(nI = 0; nI < TMSRPT73_MAXROUTES; nI++)
    {
      Combined[nI].ROUTESrecordID = NO_RECORD;
      Combined[nI].RUNSrecordID = NO_RECORD;
      for(nJ = 0; nJ < 4; nJ++)
      {
        Combined[nI].numFares[nJ] = 0;
        Combined[nI].fareValue[nJ] = 0;
      }
      Combined[nI].mileageOut = 0.0;
      Combined[nI].mileageIn  = 0.0;
    }
    numCombined = 0;
    DAILYOPSKey1.recordTypeFlag = DAILYOPS_FLAG_RIDERSHIP;
    DAILYOPSKey1.pertainsToDate = tempLong;
    DAILYOPSKey1.pertainsToTime = 0;
    DAILYOPSKey1.recordFlags = 0;
    bFound = FALSE;
    rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1);
    while(rcode2 == 0 &&
          (DAILYOPS.recordTypeFlag & DAILYOPS_FLAG_RIDERSHIP) &&
           DAILYOPS.pertainsToDate == tempLong)
    {
      if(DAILYOPS.recordFlags & DAILYOPS_FLAG_SETRIDERSHIP)
      {
        if(!ANegatedRecord(DAILYOPS.recordID, 1))
        {
          TRIPSKey0.recordID = DAILYOPS.DOPS.Ridership.R.TRIPSrecordID;
          rcode2 = btrieve(B_GETEQUAL, TMS_TRIPS, &TRIPS, &TRIPSKey0, 0);
          for(nI = 0; nI < numCombined; nI++)
          {
            if(Combined[nI].ROUTESrecordID == TRIPS.ROUTESrecordID)
            {
              bFound = TRUE;
              break;
            }
          }
          if(!bFound)
          {
            nI = numCombined;
            Combined[nI].ROUTESrecordID = TRIPS.ROUTESrecordID;
            Combined[nI].RUNSrecordID = DAILYOPS.DOPS.Ridership.R.RUNSrecordID;
            numCombined++;
          }
          for(nJ = 0; nJ < 4; nJ++)
          {
            Combined[nI].numFares[nJ] += DAILYOPS.DOPS.Ridership.R.numFares[nJ];
          }
        }
      }
      rcode2 = btrieve(B_GETNEXT, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1);
    }
//
//  Get the fare values for each of the routes
//
    for(nI = 0; nI < numCombined; nI++)
    {
      for(bFound = FALSE, nJ = 0; nJ < m_numFareTypesByRoute; nJ++)
      {
        if(Combined[nI].ROUTESrecordID == m_FareTypesByRoute[nJ].ROUTESrecordID)
        {
          bFound = TRUE;
          break;
        }
      }
      if(bFound)
      {
        for(nK = 0; nK < 4; nK++)
        {
          Combined[nI].fareValue[nK] = m_FareTypesByRoute[nJ].fareValue[nK];
        }
      } 
    }
//
//  Get the mileage for this run
//
    DAILYOPSKey1.recordTypeFlag = DAILYOPS_FLAG_RIDERSHIP;
    DAILYOPSKey1.pertainsToDate = tempLong;
    DAILYOPSKey1.pertainsToTime = 0;
    DAILYOPSKey1.recordFlags = 0;
    bFound = FALSE;
    rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1);
    while(rcode2 == 0 &&
          (DAILYOPS.recordTypeFlag & DAILYOPS_FLAG_RIDERSHIP) &&
           DAILYOPS.pertainsToDate == tempLong)
    {
      if(DAILYOPS.recordFlags & DAILYOPS_FLAG_SETMILEAGE)
      {
        if(!ANegatedRecord(DAILYOPS.recordID, 1))
        {
          for(nI = 0; nI < numCombined; nI++)
          {
            if(Combined[nI].RUNSrecordID == DAILYOPS.DOPS.Ridership.M.RUNSrecordID)
            {
              bFound = TRUE;
              break;
            }
          }
          if(bFound)
          {
            Combined[nI].mileageOut = DAILYOPS.DOPS.Ridership.M.mileageOut;
            Combined[nI].mileageIn = DAILYOPS.DOPS.Ridership.M.mileageIn;
          }
        }
      }
      rcode2 = btrieve(B_GETNEXT, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1);
    }
//
//  Loop through Combined
//
    for(nI = 0; nI < numCombined; nI++)
    {
//
//  Route number
//
      ROUTESKey0.recordID = Combined[nI].ROUTESrecordID;
      rcode2 = btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0);
      strncpy(tempString, ROUTES.number, ROUTES_NUMBER_LENGTH);
      trim(tempString, ROUTES_NUMBER_LENGTH);
      strcpy(outputString, tempString);
      strcat(outputString, "\t");
//
//  Route name
//
      strncpy(tempString, ROUTES.name, ROUTES_NAME_LENGTH);
      trim(tempString, ROUTES_NAME_LENGTH);
      strcat(outputString, tempString);
      strcat(outputString, "\t");
//
//  Date
//
      GetYMD(tempLong, &year, &month, &day);
      sprintf(tempString, "%02ld/%02ld/%ld", month, day, year);
      strcat(outputString, tempString);
      strcat(outputString, "\t");
//
//  Cash received
//
      for(nJ = 0; nJ < 4; nJ++)
      {
        sprintf(tempString, "%6.02f", Combined[nI].numFares[nJ] * Combined[nI].fareValue[nJ]);
        strcat(outputString, tempString);
        strcat(outputString, "\t");
      }
//
//  Number of fares
//
      for(nJ = 0; nJ < 4; nJ++)
      {
        sprintf(tempString, "%d", Combined[nI].numFares[nJ]);
        strcat(outputString, tempString);
        strcat(outputString, "\t");
      }
//
//  Mileage
//
      sprintf(tempString, "%8.1f", Combined[nI].mileageOut);
      strcat(outputString, tempString);
      strcat(outputString, "\t");
      sprintf(tempString, "%8.1f", Combined[nI].mileageIn);
      strcat(outputString, tempString);
      strcat(outputString, "\r\n");
//
//  Write it out
//
      _lwrite(hfOutputFile, outputString, strlen(outputString));
    }
  } // tempLong

  bKeepGoing = TRUE;
//
//  Free allocated memory
//
  deallocate:
    _lclose(hfOutputFile);
    StatusBarEnd();
    if(!bKeepGoing)
    {
      return(FALSE);
    }
//
//  All done
//
  return(TRUE);
}
Esempio n. 9
0
File: Tmsrpt36.c Progetto: ems/TMS
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);
}
Esempio n. 10
0
File: TMSRPT60.c Progetto: ems/TMS
//
//  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);
}
Esempio n. 11
0
BOOL CCustomerComment::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
  pGroupBoxTRACKINGNUMBER = GetDlgItem(CC_TRACKINGNUMBER);
  pStaticRECEIVEDBY = (CStatic *)GetDlgItem(CC_RECEIVEDBY);
  pButtonIDUPDATECUSTOMER = (CButton *)GetDlgItem(IDUPDATECUSTOMER);
  pButtonIDFIND = (CButton *)GetDlgItem(IDFIND);
  pStaticNAME = (CStatic *)GetDlgItem(CC_NAME);
  pStaticADDRESS = (CStatic *)GetDlgItem(CC_ADDRESS);
  pStaticCITYSTATE = (CStatic *)GetDlgItem(CC_CITYSTATE);
  pStaticZIP = (CStatic *)GetDlgItem(CC_ZIP);
  pStaticDAYPHONE = (CStatic *)GetDlgItem(CC_DAYPHONE);
  pStaticNIGHTPHONE = (CStatic *)GetDlgItem(CC_NIGHTPHONE);
  pStaticFAX = (CStatic *)GetDlgItem(CC_FAX);
  pStaticEMAIL = (CStatic *)GetDlgItem(CC_EMAIL);
  pButtonHISTORYNO = (CButton *)GetDlgItem(CC_HISTORYNO);
  pButtonHISTORYYES = (CButton *)GetDlgItem(CC_HISTORYYES);
  pStaticHISTORYHOWMANYTIMES = (CStatic *)GetDlgItem(CC_HISTORYHOWMANYTIMES);
  pButtonHISTORYNOTSURE = (CButton *)GetDlgItem(CC_HISTORYNOTSURE);
  pButtonHISTORYTHISMANY = (CButton *)GetDlgItem(CC_HISTORYTHISMANY);
  pEditHISTORYTHISMANYNUMBER = (CEdit *)GetDlgItem(CC_HISTORYTHISMANYNUMBER);
  pDTPickerDETAILDATE = (CDTPicker *)GetDlgItem(CC_DETAILDATE);
  pDTPickerDETAILTIME = (CDTPicker *)GetDlgItem(CC_DETAILTIME);
  pEditVEHICLENUMBER = (CEdit *)GetDlgItem(CC_VEHICLENUMBER);
  pEditLOCATION = (CEdit *)GetDlgItem(CC_LOCATION);
  pComboBoxROUTE = (CComboBox *)GetDlgItem(CC_ROUTE);
  pStaticDIRECTION_TEXT = (CStatic *)GetDlgItem(CC_DIRECTION_TEXT);
  pButtonNADIRECTION = (CButton *)GetDlgItem(CC_NADIRECTION);
  pButtonOUTBOUND = (CButton *)GetDlgItem(CC_OUTBOUND);
  pButtonINBOUND = (CButton *)GetDlgItem(CC_INBOUND);
  pComboBoxWEATHER = (CComboBox *)GetDlgItem(CC_WEATHER);
  pButtonEMPLOYEEMALE = (CButton *)GetDlgItem(CC_EMPLOYEEMALE);
  pButtonEMPLOYEEFEMALE = (CButton *)GetDlgItem(CC_EMPLOYEEFEMALE);
  pButtonNAEMPLOYEE = (CButton *)GetDlgItem(CC_NAEMPLOYEE);
  pComboBoxEMPLOYEENAME = (CComboBox *)GetDlgItem(CC_EMPLOYEENAME);
  pEditEMPLOYEEDESCRIPTION = (CEdit *)GetDlgItem(CC_EMPLOYEEDESCRIPTION);
  pButtonNASPEEDING = (CButton *)GetDlgItem(CC_NASPEEDING);
  pButtonSPEEDINGNO = (CButton *)GetDlgItem(CC_SPEEDINGNO);
  pButtonSPEEDINGYES = (CButton *)GetDlgItem(CC_SPEEDINGYES);
  pEditSPEED = (CEdit *)GetDlgItem(CC_SPEED);
  pButtonNAATTENTION = (CButton *)GetDlgItem(CC_NAATTENTION);
  pButtonATTENTIONNO = (CButton *)GetDlgItem(CC_ATTENTIONNO);
  pButtonATTENTIONYES = (CButton *)GetDlgItem(CC_ATTENTIONYES);
  pButtonNATIMEDIFFERENCE = (CButton *)GetDlgItem(CC_NATIMEDIFFERENCE);
  pButtonLESSTHANTWO = (CButton *)GetDlgItem(CC_LESSTHANTWO);
  pButtonTWOTOFIVE = (CButton *)GetDlgItem(CC_TWOTOFIVE);
  pButtonMORETHANFIVE = (CButton *)GetDlgItem(CC_MORETHANFIVE);

  COleVariant v;
  char szDriver[DRIVERS_LASTNAME_LENGTH + 2 + DRIVERS_FIRSTNAME_LENGTH + 1];
  long flags;
  int  nI, nJ;
  int  numDrivers;
  int  numRoutes;
  int  rcode2;
  long day;
  long month;
  long year;
  long hours;
  long minutes;
  long seconds;

//
//  Set up the title bar
//
  GetWindowText(szFormatString, sizeof(szFormatString));
  strncpy(szarString, m_pCCFE->COMPLAINTS.referenceNumber, COMPLAINTS_REFERENCENUMBER_LENGTH);
  trim(szarString, COMPLAINTS_REFERENCENUMBER_LENGTH);
  sprintf(tempString, szFormatString, szarString);
  SetWindowText(tempString);
//
//  Put up the nature of the call
//
  if(m_pCCFE->flags & CCFE_FLAGS_NEW)
    flags = m_pCCFE->flags;
  else
  {
    COMPLAINTSKey0.recordID = m_pCCFE->COMPLAINTS.recordID;
    flags = m_pCCFE->COMPLAINTS.flags;
    GetYMD(m_pCCFE->COMPLAINTS.dateOfComplaint, &year, &month, &day);
    GetHMS(m_pCCFE->COMPLAINTS.timeOfComplaint, &hours, &minutes, &seconds);
    strncpy(tempString, m_pCCFE->COMPLAINTS.enteredBy, COMPLAINTS_ENTEREDBY_LENGTH);
    trim(tempString, COMPLAINTS_ENTEREDBY_LENGTH);
  }
//
//  Set up "received by"
//
  pStaticRECEIVEDBY->GetWindowText(szFormatString, sizeof(szFormatString));
  if(flags & CCFE_FLAGS_NEW)
  {
    if(flags & CCFE_FLAGS_COMPLAINT)
      nI = TEXT_156;
    else if(flags & CCFE_FLAGS_COMMENDATION)
      nI = TEXT_157;
    else if(flags & CCFE_FLAGS_SERVICEREQUEST)
      nI = TEXT_158;
    else if(flags & CCFE_FLAGS_MISCELLANEOUS)
      nI = TEXT_401;
  }
  else
  {
    if(m_pCCFE->COMPLAINTS.referenceNumber[0] == 'C')
      nI = TEXT_156;
    else if(m_pCCFE->COMPLAINTS.referenceNumber[0] == 'M')
      nI = TEXT_157;
    else if(m_pCCFE->COMPLAINTS.referenceNumber[0] == 'S')
      nI = TEXT_158;
    else if(m_pCCFE->COMPLAINTS.referenceNumber[0] == 'L')
      nI = TEXT_401;
  }
  
  CString s;
  s.LoadString(nI);
  if(m_pCCFE->flags & CCFE_FLAGS_NEW)
  {
    sprintf(szarString, szFormatString, s, m_pCCFE->szDateTime, m_pCCFE->szReceivedBy);
  }
  else
  {
    CTime time(year, month, day, hours, minutes, seconds);
    sprintf(szarString, szFormatString, s, 
          time.Format(_T("%A, %B %d, %Y at %I:%M:%S%p")), tempString);
  }
  pStaticRECEIVEDBY->SetWindowText(szarString);
//
//  If this is a new complaint or an anonymous complaintant, disable
//  button until he's selected one through the Find or New buttons
//
  if(m_pCCFE->COMPLAINTS.CUSTOMERSrecordID == NO_RECORD)
    pButtonIDUPDATECUSTOMER->EnableWindow(FALSE);
//
//  Load the drivers
//
//  Set the first driver to "Not known or N/A"
//
  s.LoadString(TEXT_238);
  numDrivers = pComboBoxEMPLOYEENAME->AddString(s);
  pComboBoxEMPLOYEENAME->SetItemData(numDrivers, NO_RECORD);
  rcode2 = btrieve(B_GETFIRST, TMS_DRIVERS, &DRIVERS, &DRIVERSKey1, 1);
  while(rcode2 == 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);
    numDrivers = pComboBoxEMPLOYEENAME->AddString(szDriver);
    if(numDrivers != CB_ERR)
      pComboBoxEMPLOYEENAME->SetItemData(numDrivers, DRIVERS.recordID);
    rcode2 = btrieve(B_GETNEXT, TMS_DRIVERS, &DRIVERS, &DRIVERSKey1, 1);
  }
  pComboBoxEMPLOYEENAME->SetCurSel(0);
//
//  Set up the route list
//
  numRoutes = SetUpRouteList(m_hWnd, CC_ROUTE, NO_RECORD);
  if(numRoutes == 0)
  {
    CDialog::OnCancel();
    return TRUE;
  }
//
//  Set the first route to "Not known or N/A"
//
  s.LoadString(TEXT_238);
  nI = pComboBoxROUTE->InsertString(0, s);
  pComboBoxROUTE->SetItemData(nI, NO_RECORD);
  pComboBoxROUTE->SetCurSel(0);
//
//  Set up the weather conditions
//
  if(m_numWeatherConditions == 0)
  {
    pComboBoxWEATHER->EnableWindow(FALSE);
  }
  else
  {
    for(nI = 0; nI < m_numWeatherConditions; nI++)
    {
      nJ = pComboBoxWEATHER->AddString(m_WeatherConditions[nI].szText);
      pComboBoxWEATHER->SetItemData(nJ, m_WeatherConditions[nI].number);
    }
  }
//
//  New complaints:
//
  if(m_pCCFE->flags & CCFE_FLAGS_NEW)
  {
//
//  And no customer yet
//
    m_customerRecordID = NO_RECORD;
//
//  Are there any customers
//
    rcode2 = btrieve(B_GETFIRST, TMS_CUSTOMERS, &CUSTOMERS, &CUSTOMERSKey0, 0);
    if(rcode2 != 0)
      pButtonIDFIND->EnableWindow(FALSE);
//
//  No route selected yet
//
    pStaticDIRECTION_TEXT->EnableWindow(FALSE);
    pButtonNADIRECTION->EnableWindow(FALSE);
    pButtonOUTBOUND->EnableWindow(FALSE);
    pButtonINBOUND->EnableWindow(FALSE);
//
//  Set today's date on the Date and Time picker
//
    CTime time = CTime::GetCurrentTime();
    day = time.GetDay();
    month = time.GetMonth();
    year = time.GetYear();

    v = year;
    pDTPickerDETAILDATE->SetYear(v);
    v = month;
    pDTPickerDETAILDATE->SetMonth(v);
    v = day;
    pDTPickerDETAILDATE->SetDay(v);
//
//  Default to "No History"
//
    pButtonHISTORYNO->SetCheck(TRUE);
    OnHistoryno();
//
//  Default weather conditions to "N/A"
//
    pComboBoxWEATHER->SetCurSel(0);
//
//  Default employee sex to "N/A or unknown"
//
    pButtonNAEMPLOYEE->SetCheck(TRUE);
//
//  Default "Driver speeding" to "N/A"
//
    pButtonNASPEEDING->SetCheck(TRUE);
    OnNaspeeding();
//
//  Default "Driver's attention" to "N/A"
//
    pButtonNAATTENTION->SetCheck(TRUE);
//
//  Default "Customer time difference" to "N/A"
//
    pButtonNATIMEDIFFERENCE->SetCheck(TRUE);
  }
//
//  Existing complaint - fill in the controls
//
  else
  {
    m_customerRecordID = m_pCCFE->COMPLAINTS.CUSTOMERSrecordID;
//
//  Customer data
//
    PopulateCustomerFields();
//
//  History
//
    if(!(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_FILEDPREVIOUS))
      pButtonHISTORYNO->SetCheck(TRUE);
    else
    {
      pButtonHISTORYYES->SetCheck(TRUE);
      if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_NOTSUREHOWMANY)
        pButtonHISTORYNOTSURE->SetCheck(TRUE);
      else
      {
        pButtonHISTORYTHISMANY->SetCheck(TRUE);
        ltoa(m_pCCFE->COMPLAINTS.numberOfPreviousComplaints, tempString, 10);
        pEditHISTORYTHISMANYNUMBER->SetWindowText(tempString);
      }
    }
//
//  Date and time of occurrence
//
//  Date
//
    if(m_pCCFE->COMPLAINTS.dateOfOccurrence == 0)
    {
      TMSError(this->m_hWnd, MB_ICONINFORMATION | MB_OK, TEXT_377, (HANDLE)NULL);
    }
    else
    {
      GetYMD(m_pCCFE->COMPLAINTS.dateOfOccurrence, &year, &month, &day);
      v = year;
      pDTPickerDETAILDATE->SetYear(v);
      v = month;
      pDTPickerDETAILDATE->SetMonth(v);
      v = day;
      pDTPickerDETAILDATE->SetDay(v);
//
//  Time
//
      GetHMS(m_pCCFE->COMPLAINTS.timeOfOccurrence, &hours, &minutes, &seconds);
      v = hours;
      pDTPickerDETAILTIME->SetHour(v);
      v = minutes;
      pDTPickerDETAILTIME->SetMinute(v);
      v = seconds;
      pDTPickerDETAILTIME->SetSecond(v);
    }
//
//  Vehicle number
//
    strncpy(tempString, m_pCCFE->COMPLAINTS.busNumber, COMPLAINTS_BUSNUMBER_LENGTH);
    trim(tempString, COMPLAINTS_BUSNUMBER_LENGTH);
    pEditVEHICLENUMBER->SetWindowText(tempString);
//
//  Location
//
    strncpy(tempString, m_pCCFE->COMPLAINTS.location, COMPLAINTS_LOCATION_LENGTH);
    trim(tempString, COMPLAINTS_LOCATION_LENGTH);
    pEditLOCATION->SetWindowText(tempString);
//
//  Route
//
    long ROUTESrecordID = NO_RECORD;

    for(nI = 0; nI < numRoutes + 1; nI++) // +1 'cause "N/A" is the first route
    {
      ROUTESrecordID = pComboBoxROUTE->GetItemData(nI);
      if(ROUTESrecordID == m_pCCFE->COMPLAINTS.ROUTESrecordID)
      {
        pComboBoxROUTE->SetCurSel(nI);
        OnSelchangeRoute();
        pButtonNADIRECTION->SetCheck(FALSE);
        break;
      }
    }
//
//  Direction
//
    if(m_pCCFE->COMPLAINTS.directionIndex == NO_RECORD)
      pButtonNADIRECTION->SetCheck(TRUE);
    else if(m_pCCFE->COMPLAINTS.directionIndex == 0)
      pButtonOUTBOUND->SetCheck(TRUE);
    else
      pButtonINBOUND->SetCheck(TRUE);
//
//  Weather index
//
    if(m_pCCFE->COMPLAINTS.weatherIndex != NO_RECORD)
      pComboBoxWEATHER->SetCurSel(m_pCCFE->COMPLAINTS.weatherIndex);
//
//  Driver sex
//
    if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_NOTSUREDRIVERSEX)
      pButtonNAEMPLOYEE->SetCheck(TRUE);
    else if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_DRIVERMALE)
      pButtonEMPLOYEEMALE->SetCheck(TRUE);
    else
      pButtonEMPLOYEEFEMALE->SetCheck(TRUE);
//
//  Driver name
//
    long DRIVERSrecordID = NO_RECORD;

    for(nI = 0; nI < numDrivers; nI++)
    {
      DRIVERSrecordID = pComboBoxEMPLOYEENAME->GetItemData(nI);
      if(m_pCCFE->COMPLAINTS.DRIVERSrecordID == DRIVERSrecordID)
      {
        pComboBoxEMPLOYEENAME->SetCurSel(nI);
        break;
      }
    }
//
//  Driver description
//
    strncpy(tempString,
          m_pCCFE->COMPLAINTS.driverDescription, COMPLAINTS_DRIVERDESCRIPTION_LENGTH);
    trim(tempString, COMPLAINTS_DRIVERDESCRIPTION_LENGTH);
    pEditEMPLOYEEDESCRIPTION->SetWindowText(tempString);
//
//  Speeding
//
    if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_NASPEEDING)
      pButtonNASPEEDING->SetCheck(TRUE);
    else if(!(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_DRIVERSPEEDINGYES))
      pButtonSPEEDINGNO->SetCheck(TRUE);
    else
    {
      pButtonSPEEDINGYES->SetCheck(TRUE);
      ltoa(m_pCCFE->COMPLAINTS.driverSpeed, tempString, 10);
      pEditSPEED->SetWindowText(tempString);
    }
//
//  Driver's attention
//
    if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_NAATTENTION)
      pButtonNAATTENTION->SetCheck(TRUE);
    else if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_ATTENTIONYES)
      pButtonATTENTIONYES->SetCheck(TRUE);
    else
      pButtonATTENTIONNO->SetCheck(TRUE);
//
//  Time difference
//
    if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_LESSTHANTWO)
      pButtonLESSTHANTWO->SetCheck(TRUE);
    else if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_TWOTOFIVE)
      pButtonTWOTOFIVE->SetCheck(TRUE);
    else if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_MORETHANFIVE)
      pButtonMORETHANFIVE->SetCheck(TRUE);
    else
      pButtonNATIMEDIFFERENCE->SetCheck(TRUE);
  }
//
//  Make sure there's no junk in any new text entry
//
  strcpy(m_newEntry, "");
//
//  All done
//
  return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
Esempio n. 12
0
BOOL CSuggestSuspension::OnInitDialog() 
{
	CDialog::OnInitDialog();
//
//  Set up pointers to the controls
//
  pListCtrlLIST = (CListCtrl *)GetDlgItem(SUGGESTSUSPENSION_LIST);
  
  DWORD dwExStyles = pListCtrlLIST->GetExtendedStyle();
  pListCtrlLIST->SetExtendedStyle(dwExStyles | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_INFOTIP);
//
//  Show the hourgalss
//
  HCURSOR hSaveCursor = SetCursor(hCursorWait);
//
//  Set up the columns on the list control
//
//
//  Set up the list controls
//
  LVCOLUMN LVC;
  LVC.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;

  LVC.cx = 120;
  LVC.fmt = LVCFMT_CENTER;
  LVC.pszText = "Date";
  pListCtrlLIST->InsertColumn(0, &LVC);

  LVC.cx = 60;
  LVC.pszText = "Run #";
  pListCtrlLIST->InsertColumn(1, &LVC);

  LVC.cx = 60;
  LVC.pszText = "On at";
  pListCtrlLIST->InsertColumn(2, &LVC);

  LVC.cx = 60;
  LVC.pszText = "Off at";
  pListCtrlLIST->InsertColumn(3, &LVC);
 
  LVC.cx = 60;
  LVC.pszText = "Pay";
  pListCtrlLIST->InsertColumn(4, &LVC);
//
//  Get his data from the roster
//
  typedef struct RosterPayStruct
  {
    int  num;
    long RUNSrecordIDs[10];
    long runNumber[10];
    long onTime[10];
    long offTime[10];
    long payTime[10];
    long flags[10];
  } RosterPayDef;

  RosterPayDef RD[7];

  int nI, nJ;

  for(nI = 0; nI < 7; nI++)
  {
    RD[nI].num = 0;
  }

  int rcode2;

  ROSTERKey1.DIVISIONSrecordID = m_DivisionRecordID;
  ROSTERKey1.rosterNumber = NO_RECORD;
  rcode2 = btrieve(B_GETGREATER, TMS_ROSTER, &ROSTER, &ROSTERKey1, 1);
  while(rcode2 == 0 &&
        ROSTER.DIVISIONSrecordID == m_DivisionRecordID)
  {
    if(ROSTER.DRIVERSrecordID == *m_pDRIVERSrecordID)
    {
      for(nI = 0; nI < 7; nI++)
      {
        if(ROSTER.WEEK[m_RosterWeek].RUNSrecordIDs[nI] == NO_RECORD)
        {
          continue;
        }
        nJ = RD[nI].num;
        RD[nI].RUNSrecordIDs[nJ] = ROSTER.WEEK[m_RosterWeek].RUNSrecordIDs[nI];
        RD[nI].flags[nJ] = ROSTER.WEEK[m_RosterWeek].flags;
        RD[nI].num++;
      }
    }
    rcode2 = btrieve(B_GETNEXT, TMS_ROSTER, &ROSTER, &ROSTERKey1, 1);
  }
//
//  Fill up the rest of the structure with run details
//
  PROPOSEDRUNDef PROPOSEDRUN;
  COSTDef COST;
  int     numPieces;

  for(nI = 0; nI < 7; nI++)
  {
    for(nJ = 0; nJ < RD[nI].num; nJ++)
    {
      RUNSKey0.recordID = RD[nI].RUNSrecordIDs[nJ];
      btrieve(B_GETEQUAL, TMS_RUNS, &RUNS, &RUNSKey0, 0);
      btrieve(B_GETPOSITION, TMS_RUNS, &RUNS, &RUNSKey0, 0);
      btrieve(B_GETDIRECT, TMS_RUNS, &RUNS, &RUNSKey1, 1);
      RD[nI].runNumber[nJ] = RUNS.runNumber;
      numPieces = GetRunElements(hWndMain, &RUNS, &PROPOSEDRUN, &COST, TRUE);
      RD[nI].onTime[nJ] = RUNSVIEW[0].runOnTime;
      RD[nI].offTime[nJ] = RUNSVIEW[numPieces - 1].runOffTime;
      RD[nI].payTime[nJ] = COST.TOTAL.payTime;
    }
  }
//
//  Start with today
//
  long yyyy, mm, dd;
  int indexToRoster[7] = {6, 0, 1, 2, 3, 4, 5};
  CTime firstDay = CTime::GetCurrentTime();
  long day = firstDay.GetDay();
  long month = firstDay.GetMonth();
  long year = firstDay.GetYear();
  long fDay = year * 10000 + month * 100 + day;
//
//  End with the "until date" on this pick
//
  GetYMD(untilDate, &yyyy, &mm, &dd);
  CTime lastDay(yyyy, mm, dd, 0, 0, 0);
//
//  Go through the assignments for each day
//
  CTime currentDate = firstDay;
  currentDate -= CTimeSpan(1, 0, 0, 0);
//
//  Display up until the untilDate
//
  LVITEM LVI;
  int    iItem;
  CString s;
  int today;

  for(;;)
  {
    currentDate += CTimeSpan(1, 0, 0, 0);
    day = currentDate.GetDay();
    month = currentDate.GetMonth();
    year = currentDate.GetYear();
    LVI.lParam = year * 10000 + month * 100 + day;
    if(LVI.lParam > untilDate)
    {
      break;
    }
    today = indexToRoster[currentDate.GetDayOfWeek() - 1];
 	  s = currentDate.Format(_T("%d-%b-%Y (%a)"));
//
//  Cycle through the number of Roster entries for today (typically 1)
//
    for(nI = 0; nI < RD[today].num; nI++)
    {
//
//  Output the date
//
      strcpy(tempString, s);
      if(IsHeAwayToday(LVI.lParam))
      {
        strcat(tempString, " *");
      }
      
      iItem = pListCtrlLIST->GetItemCount();

      LVI.mask = LVIF_TEXT | LVIF_PARAM;
      LVI.iItem = iItem;
      LVI.iSubItem = 0;
      LVI.pszText = tempString;
      LVI.iItem = pListCtrlLIST->InsertItem(&LVI);
//
//  Run number
//
      sprintf(tempString, "%ld", RD[today].runNumber[nI]);

      LVI.mask = LVIF_TEXT;
      LVI.iItem = iItem;
      LVI.iSubItem = 1;
      LVI.pszText = tempString;
      LVI.iItem = pListCtrlLIST->SetItem(&LVI);
//
//  On time
//
      strcpy(tempString, Tchar(RD[today].onTime[nI]));

      LVI.mask = LVIF_TEXT;
      LVI.iItem = iItem;
      LVI.iSubItem = 2;
      LVI.pszText = tempString;
      LVI.iItem = pListCtrlLIST->SetItem(&LVI);
//
//  Off time
//
      strcpy(tempString, Tchar(RD[today].offTime[nI]));

      LVI.mask = LVIF_TEXT;
      LVI.iItem = iItem;
      LVI.iSubItem = 3;
      LVI.pszText = tempString;
      LVI.iItem = pListCtrlLIST->SetItem(&LVI);
//
//  Pay time
//
      strcpy(tempString, chhmm(RD[today].payTime[nI]));

      LVI.mask = LVIF_TEXT;
      LVI.iItem = iItem;
      LVI.iSubItem = 4;
      LVI.pszText = tempString;
      LVI.iItem = pListCtrlLIST->SetItem(&LVI);
    }
  }
//
//  Restore the cursor
//
  SetCursor(hSaveCursor);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}