[Trainsched-commit] trainsched Makefile, 1.7.2.1, 1.7.2.2 selectform.c, 1.2, 1.2.2.1 selectform.h,
Brought to you by:
philm
|
From: Steve M. <sma...@us...> - 2009-05-02 16:21:16
|
Update of /cvsroot/trainsched/trainsched In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv18942 Modified Files: Tag: PDB_VER2 Makefile selectform.c selectform.h timetable.c timetable.h trainsched.c trainsched.h trainsched.rcp Log Message: First Beta of updates for PDB Version 2 files (PDB Version 1 files are still supported). Index: selectform.h =================================================================== RCS file: /cvsroot/trainsched/trainsched/selectform.h,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** selectform.h 26 Apr 2009 08:06:50 -0000 1.2 --- selectform.h 2 May 2009 16:21:08 -0000 1.2.2.1 *************** *** 23,28 **** --- 23,32 ---- LocalID pdbid; UInt16 CardNo; + UInt16 Version; } dbrowType; + // Table columns + #define SELECTCOL 0 + // Function Prototypes. Boolean selectFormEventHandler(EventPtr event); Index: Makefile =================================================================== RCS file: /cvsroot/trainsched/trainsched/Makefile,v retrieving revision 1.7.2.1 retrieving revision 1.7.2.2 diff -C2 -d -r1.7.2.1 -r1.7.2.2 *** Makefile 26 Apr 2009 08:14:56 -0000 1.7.2.1 --- Makefile 2 May 2009 16:21:08 -0000 1.7.2.2 *************** *** 2,6 **** # Macros ! VERS=0.4 PROGRAM=trainsched --- 2,6 ---- # Macros ! VERS=0.5pre2 PROGRAM=trainsched *************** *** 11,19 **** BUILDPRC=build-prc APID=TRSC ! CFLAGS=-palmos5r4 -Wall -g LFLAGS=-g ! SOURCES=selectform.c timetable.c trainsched.c ! OBJS=selectform.o timetable.o trainsched.o PRC=$(PROGRAM).prc RESOURCES=$(PROGRAM).rcp --- 11,19 ---- BUILDPRC=build-prc APID=TRSC ! CFLAGS=-palmos5r4 -Wall -O0 -g LFLAGS=-g ! SOURCES=selectform.c abbrevform.c notesform.ctimetable.c trainsched.c ! OBJS=selectform.o abbrevform.o notesform.o timetable.o trainsched.o PRC=$(PROGRAM).prc RESOURCES=$(PROGRAM).rcp Index: selectform.c =================================================================== RCS file: /cvsroot/trainsched/trainsched/selectform.c,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** selectform.c 26 Apr 2009 08:06:50 -0000 1.2 --- selectform.c 2 May 2009 16:21:08 -0000 1.2.2.1 *************** *** 33,36 **** --- 33,37 ---- extern LocalID pdbid; extern UInt16 CardNo; + extern UInt16 dbVersion; extern char DBName[dmDBNameLength]; *************** *** 84,87 **** --- 85,89 ---- pdbid = data->pdbid; CardNo = data->CardNo; + dbVersion = data->Version; MemMove (DBName,data->DBName,dmDBNameLength); } *************** *** 253,257 **** Boolean newSearch = true; DmSearchStateType searchState; ! UInt16 CardNo; LocalID dbID; char name[dmDBNameLength]; --- 255,259 ---- Boolean newSearch = true; DmSearchStateType searchState; ! UInt16 CardNo, version; LocalID dbID; char name[dmDBNameLength]; *************** *** 279,283 **** if (selpdbcount > 0) { pdbarrayH = MemHandleNew(selpdbcount * sizeof(dbrowType)); ! pdbarrayP=MemHandleLock(pdbarrayH); newSearch = true; --- 281,285 ---- if (selpdbcount > 0) { pdbarrayH = MemHandleNew(selpdbcount * sizeof(dbrowType)); ! pdbarrayP = MemHandleLock(pdbarrayH); newSearch = true; *************** *** 288,292 **** newSearch=false; ! DmDatabaseInfo(CardNo, dbID, name, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); --- 290,294 ---- newSearch=false; ! DmDatabaseInfo(CardNo, dbID, name, NULL, &version, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); *************** *** 294,298 **** pdbarrayP[selpdbcount].CardNo = CardNo; pdbarrayP[selpdbcount].pdbid = dbID; ! selpdbcount++; } --- 296,300 ---- pdbarrayP[selpdbcount].CardNo = CardNo; pdbarrayP[selpdbcount].pdbid = dbID; ! pdbarrayP[selpdbcount].Version = version; selpdbcount++; } *************** *** 334,338 **** oldscrollvalue, /* current value */ 0, /* min */ ! selpdbcount >= numRows ? selpdbcount-numRows+1 : 0, /*max*/ numRows-1 ); /* page size */ --- 336,340 ---- oldscrollvalue, /* current value */ 0, /* min */ ! selpdbcount >= numRows ? selpdbcount-numRows : 0, /*max*/ numRows-1 ); /* page size */ Index: trainsched.h =================================================================== RCS file: /cvsroot/trainsched/trainsched/trainsched.h,v retrieving revision 1.11 retrieving revision 1.11.2.1 diff -C2 -d -r1.11 -r1.11.2.1 *** trainsched.h 26 Apr 2009 08:06:50 -0000 1.11 --- trainsched.h 2 May 2009 16:21:08 -0000 1.11.2.1 *************** *** 34,37 **** --- 34,38 ---- #define resReverseBtn 1009 #define resTimeTable3c 1010 + #define resNotesBtn 1011 /* Menu */ *************** *** 46,50 **** #define aboutBitmap 1102 ! /* Database selection dialog */ #define selectForm 1200 #define selectFrmTable 1201 --- 47,51 ---- #define aboutBitmap 1102 ! /* Timetable selection dialog */ #define selectForm 1200 #define selectFrmTable 1201 *************** *** 55,61 **** #define selectFrmCancel 1206 /* Alert Dialog */ #define alertDialog1 1300 - #define alertAbbreviations 1306 #define NO_PDB 1301 #define NO_SELECTION 1302 --- 56,73 ---- #define selectFrmCancel 1206 + /* Abbreviations dialog */ + #define abbrevForm 1400 + #define abbrevFrmTable 1401 + #define abbrevFrmTableScrollBar 1402 + #define abbrevFrmOKButton 1403 + + /* Abbreviations dialog */ + #define notesForm 1500 + #define notesField 1501 + #define notesFieldScrollBar 1502 + #define notesFrmOKButton 1503 + /* Alert Dialog */ #define alertDialog1 1300 #define NO_PDB 1301 #define NO_SELECTION 1302 *************** *** 69,73 **** #define TOCOL 1 #define INFOCOL 2 - #define SELECTCOL 0 #define PREFAPPVERSION 2 --- 81,84 ---- Index: timetable.h =================================================================== RCS file: /cvsroot/trainsched/trainsched/timetable.h,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** timetable.h 26 Apr 2009 08:06:50 -0000 1.2 --- timetable.h 2 May 2009 16:21:08 -0000 1.2.2.1 *************** *** 20,30 **** #define DAYRECORD 1 #define OFFSETRECORD 2 #define STATIONMAXNUM 30 #define STATIONMAXLENGTH 20 #define DAYMAXLENGTH 9 #define MAX_ABBREVIATIONS 40 ! #define ABBR_PDB 'ABBR' // Function prototypes --- 20,40 ---- #define DAYRECORD 1 #define OFFSETRECORD 2 + // The next three records are only in version 0.2 PDB onwards. + #define ABBREVRECORD 3 // Shorthand abbreviations / symbols. + #define ABDEFRECORD 4 // Expanded abbreviation definitions. + #define NOTESRECORD 5 // Notes specific to this timetable. #define STATIONMAXNUM 30 #define STATIONMAXLENGTH 20 #define DAYMAXLENGTH 9 + #define ABBREVLENGTH 6 + #define ABDEFLENGTH 24 #define MAX_ABBREVIATIONS 40 + #define NOTESLENGTH 512 ! #define ABBR_PDB 'ABBR' // Only relevant to version 0.1 of PDB. ! ! #define VERSION_1_0 0x0100 // Original PDB Version. ! #define VERSION_2_0 0x0200 // Updated PDB Version that may include abbreviations. // Function prototypes *************** *** 32,38 **** Boolean getAbbreviationsDefined(); UInt16 getNumberOfRecords(); ! void getAbbreviations(); Int16 getDays(DmOpenRef pdbfd); Int16 getOffsets(DmOpenRef pdbfd); Int16 getTime(DmOpenRef pdbfd, UInt16 recNum, Int8 station); ! Int16 getAbbrev(DmOpenRef pdbfd, UInt16 recNum); --- 42,49 ---- Boolean getAbbreviationsDefined(); UInt16 getNumberOfRecords(); ! void getAbbreviations(DmOpenRef pdbfd); Int16 getDays(DmOpenRef pdbfd); Int16 getOffsets(DmOpenRef pdbfd); Int16 getTime(DmOpenRef pdbfd, UInt16 recNum, Int8 station); ! Int16 getAbbrev(DmOpenRef pdbfd, UInt16 recNum, Int8 station); ! Boolean getNotesDefined(DmOpenRef pdbfd); Index: trainsched.c =================================================================== RCS file: /cvsroot/trainsched/trainsched/trainsched.c,v retrieving revision 1.25 retrieving revision 1.25.2.1 diff -C2 -d -r1.25 -r1.25.2.1 *** trainsched.c 26 Apr 2009 08:06:50 -0000 1.25 --- trainsched.c 2 May 2009 16:21:08 -0000 1.25.2.1 *************** *** 22,25 **** --- 22,27 ---- #include "timetable.h" #include "selectform.h" + #include "abbrevform.h" + #include "notesform.h" /* To store program preferences */ *************** *** 34,37 **** --- 36,42 ---- } prefType; + /* External veriables */ + extern UInt16 dbVersion; /* Version of currently open timetable DB. */ + /* Global variables */ LocalID pdbid=0; *************** *** 45,49 **** char DayNames[7][DAYMAXLENGTH+1]={{0},{0}}; UInt16 OffsetList[14]={0}; /* Max 7 days and 2 directions */ ! UInt16 numstations=0,numdays=0; Int16 ScrollValue=0; UInt8 FromStation = NOSELECTION; --- 50,54 ---- char DayNames[7][DAYMAXLENGTH+1]={{0},{0}}; UInt16 OffsetList[14]={0}; /* Max 7 days and 2 directions */ ! UInt16 numstations=0, numdays=0, numabbrev=0; Int16 ScrollValue=0; UInt8 FromStation = NOSELECTION; *************** *** 54,59 **** Boolean bUse3Cols = false; /* Whether to use Annotation column. */ UInt16 nIDofTable = resTimeTable; /* Which table to use 2 or 3 column one. */ ! char Abbreviations[MAX_ABBREVIATIONS][10]={{0},{0}}; /* Store abbreviations. */ ! Char szAbbreviations[300]; /* --- 59,65 ---- Boolean bUse3Cols = false; /* Whether to use Annotation column. */ UInt16 nIDofTable = resTimeTable; /* Which table to use 2 or 3 column one. */ ! char Abbreviations[MAX_ABBREVIATIONS][ABBREVLENGTH]={{0},{0}}; /* Store abbreviations. */ ! char AbbrevDeffs[MAX_ABBREVIATIONS][ABDEFLENGTH]={{0},{0}}; /* Store abbreviation deffs. */ ! char Notes[NOTESLENGTH]={0}; /* Store timetable notes. */ /* *************** *** 139,143 **** --- 145,153 ---- if (pdbid != 0) + { + DmDatabaseInfo(CardNo,pdbid,DBName,NULL,&dbVersion,NULL,NULL,NULL, + NULL,NULL,NULL,NULL,NULL); FrmGotoForm(resFormMain); + } } *************** *** 149,154 **** PDBTYPE, CREATORID, false, &CardNo, &pdbid)) { ! DmDatabaseInfo(CardNo,pdbid,DBName,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL); FrmGotoForm(resFormMain); --- 159,165 ---- PDBTYPE, CREATORID, false, &CardNo, &pdbid)) { ! DmDatabaseInfo(CardNo,pdbid,DBName,NULL,&dbVersion,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL); + HostTraceOutputTL(0, "Version of current PDB: %hu", dbVersion); FrmGotoForm(resFormMain); *************** *** 291,294 **** --- 302,308 ---- LoadMainFormTable(gpForm); handled=true; + } else if (event->data.ctlSelect.controlID == resNotesBtn) { + FrmPopupForm(notesForm); + handled = true; } } *************** *** 319,322 **** --- 333,345 ---- FrmSetEventHandler(pForm, (FormEventHandlerPtr)selectFormEventHandler); handled = true; + break; + case abbrevForm: + FrmSetEventHandler(pForm, (FormEventHandlerPtr)abbrevFormEventHandler); + handled = true; + break; + case notesForm: + FrmSetEventHandler(pForm, (FormEventHandlerPtr)notesFormEventHandler); + handled = true; + break; default: break; *************** *** 365,368 **** --- 388,392 ---- Err err = 0; + HostTraceInit(); if (launchCode == sysAppLaunchCmdNormalLaunch) { if ((err = StartApplication()) == 0) { *************** *** 371,374 **** --- 395,399 ---- } } + HostTraceClose(); return err; } *************** *** 382,385 **** --- 407,411 ---- status = getStationNames(pdbfd); + getAbbreviations(pdbfd); if (getAbbreviationsDefined()) *************** *** 387,391 **** bUse3Cols = true; nIDofTable = resTimeTable3c; /* Use 3 column table. */ - getAbbreviations(); } else --- 413,416 ---- *************** *** 405,408 **** --- 430,439 ---- status = getOffsets(pdbfd); + // Only show the notes button if there are timetable notes defined. + if (getNotesDefined(pdbfd)) + FrmShowObject(gpForm, FrmGetObjectIndex(gpForm, resNotesBtn)); + else + FrmHideObject(gpForm, FrmGetObjectIndex(gpForm, resNotesBtn)); + DmCloseDatabase(pdbfd); } *************** *** 446,450 **** } - popupDays=FrmGetObjectPtr(gpForm,(FrmGetObjectIndex (pForm,resDayList))); LstSetListChoices(popupDays,DayList,numdays); --- 477,480 ---- *************** *** 614,618 **** if (bUse3Cols) { ! TblSetItemInt(tableP, i, INFOCOL, getAbbrev(pdbfd, k)); } --- 644,648 ---- if (bUse3Cols) { ! TblSetItemInt(tableP, i, INFOCOL, getAbbrev(pdbfd, k, toStn)); } *************** *** 644,648 **** for (i=1; i<numRows; i++) { ! if (TblGetItemInt(tableP, i-1, FROMCOL) >= 0) { rowheight=TblGetRowHeight(tableP,i); --- 674,678 ---- for (i=1; i<numRows; i++) { ! if (TblGetItemInt(tableP, i-1, FROMCOL) != -1) { rowheight=TblGetRowHeight(tableP,i); *************** *** 667,676 **** { TablePtr tableP = (TablePtr)table; ! UInt16 data; char str[6]={0}; RectangleType rect; ! UInt8 Hour,Minute; char temp[8]={0}; - Int32 i; data = TblGetItemInt(tableP,row,column); --- 697,705 ---- { TablePtr tableP = (TablePtr)table; ! Int16 data; char str[6]={0}; RectangleType rect; ! Int8 Hour,Minute; char temp[8]={0}; data = TblGetItemInt(tableP,row,column); *************** *** 679,684 **** if ((bUse3Cols) && (column==INFOCOL)) { ! if (data && (data < MAX_ABBREVIATIONS)) ! StrCopy(str, Abbreviations[data]); else StrCopy(str, ""); --- 708,713 ---- if ((bUse3Cols) && (column==INFOCOL)) { ! if (data && (data <= numabbrev)) ! StrCopy(str, Abbreviations[data-1]); else StrCopy(str, ""); *************** *** 686,716 **** else { ! if(data==-1) { ! /* no data was found */ StrPrintF(str," "); - } else if (data==65535) { /* No train */ - StrPrintF(str," -- "); } else { ! ! StrIToA(temp, data); ! ! if (StrLen(temp) < 3) { /* train is between 00:00 and 00:09 */ ! // Hour = 0; ! // Minute = temp[0]; ! // } else if (StrLen(temp) == 2) { /* train is between 00:10 and 00:59 */ ! Hour = 0; ! Minute = StrAToI(temp); } else { ! i = StrLen(temp); ! Minute = (StrAToI(&temp[i-2])); ! ! temp[i-2] = '\0'; ! Hour = StrAToI(temp); } - - /* Maybe I should use TimeToAscii for that */ - if (Hour < 10) StrCat(str, "0"); - StrIToA(temp, Hour); - StrCat(str, temp); StrCat(str,":"); StrIToA(temp, Minute); --- 715,731 ---- else { ! Hour = data >> 8; ! Minute = data & 0xFF; ! if (Hour == -1) { ! /* no data was found or no train. */ StrPrintF(str," "); } else { ! if (Hour == -2) { /* Wildcard */ ! StrPrintF(str,"#"); } else { ! if (Hour < 10) StrCat(str, "0"); ! StrIToA(temp, Hour); ! StrCat(str, temp); } StrCat(str,":"); StrIToA(temp, Minute); *************** *** 769,773 **** case MainOptionsAbbreviations: ! FrmCustomAlert( alertAbbreviations, szAbbreviations, "", "" ); handled = true; break; --- 784,788 ---- case MainOptionsAbbreviations: ! FrmPopupForm(abbrevForm); handled = true; break; *************** *** 797,801 **** len = StrLen(DBName); ! if(len>31) len = 31; /* bad hack */ StrNCopy(FormTitle,DBName,len); --- 812,816 ---- len = StrLen(DBName); ! if(len>26) len = 26; /* bad hack, allow room for time. */ StrNCopy(FormTitle,DBName,len); Index: trainsched.rcp =================================================================== RCS file: /cvsroot/trainsched/trainsched/trainsched.rcp,v retrieving revision 1.15 retrieving revision 1.15.2.1 diff -C2 -d -r1.15 -r1.15.2.1 *** trainsched.rcp 26 Apr 2009 08:07:21 -0000 1.15 --- trainsched.rcp 2 May 2009 16:21:08 -0000 1.15.2.1 *************** *** 20,24 **** #include "trainsched.h" ! VERSION ID 1 "0.5.0" --- 20,24 ---- #include "trainsched.h" ! VERSION ID 1 "0.6.0 beta" *************** *** 74,79 **** USABLE ! ! BUTTON "Reverse" ID resReverseBtn AT (100 18 AUTO AUTO) END --- 74,79 ---- USABLE ! BUTTON "Reverse" ID resReverseBtn AT (64 18 AUTO AUTO) ! BUTTON "Notes" ID resNotesBtn AT (PREVRIGHT+8 18 AUTO AUTO) END *************** *** 110,114 **** LABEL "Released under the GNU GPL" AUTOID AT (8 PrevTop+16) FONT 1 ! LABEL "version 0.5.0pre2" AUTOID AT (8 PrevTop+12) FONT 1 BUTTON "Ok" ID aboutFormOkButton AT (100 138 36 AUTO) --- 110,114 ---- LABEL "Released under the GNU GPL" AUTOID AT (8 PrevTop+16) FONT 1 ! LABEL "version 0.6 beta" AUTOID AT (8 PrevTop+12) FONT 1 BUTTON "Ok" ID aboutFormOkButton AT (100 138 36 AUTO) *************** *** 134,137 **** --- 134,165 ---- END + /* Abbreviations Dialog box */ + FORM ID abbrevForm AT (2 2 156 156) USABLE MODAL + BEGIN + TITLE "Abbreviations" + + TABLE ID abbrevFrmTable AT (2 14 144 121) + ROWS 11 COLUMNS 2 COLUMNWIDTHS 40 104 + + SCROLLBAR ID abbrevFrmTableScrollBar AT (PREVRIGHT+2 PREVTOP 7 PREVHEIGHT) + USABLE + + BUTTON "Ok" ID abbrevFrmOKButton AT (100 PREVTOP+125 40 AUTO) USABLE + END + + /* Notes Dialog box */ + FORM ID notesForm AT (2 2 156 156) USABLE MODAL + BEGIN + TITLE "Timetable Notes" + + FIELD ID notesField AT (2 14 144 121) + NONEDITABLE MULTIPLELINES HASSCROLLBAR + + SCROLLBAR ID notesFieldScrollBar AT (PREVRIGHT+2 PREVTOP 7 PREVHEIGHT) + USABLE + + BUTTON "Ok" ID notesFrmOKButton AT (100 PREVTOP+125 40 AUTO) USABLE + END + ALERT ID alertDialog1 WARNING *************** *** 142,153 **** END - ALERT ID alertAbbreviations - INFORMATION - BEGIN - TITLE "Abbreviations" - MESSAGE "^1" - BUTTONS "OK" - END - STRING ID NO_PDB "No timetables found, please install one first (see http://trainsched.sf.net)." STRING ID NO_SELECTION "You must select a timetable first." --- 170,173 ---- Index: timetable.c =================================================================== RCS file: /cvsroot/trainsched/trainsched/timetable.c,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** timetable.c 26 Apr 2009 08:06:50 -0000 1.2 --- timetable.c 2 May 2009 16:21:08 -0000 1.2.2.1 *************** *** 25,33 **** extern char DayNames[7][DAYMAXLENGTH+1]; extern UInt16 OffsetList[14]; ! extern UInt16 numstations,numdays; ! extern char Abbreviations[MAX_ABBREVIATIONS][10]; ! extern char szAbbreviations[300]; UInt16 NumRecords=0; Boolean abbrevDefined; --- 25,35 ---- extern char DayNames[7][DAYMAXLENGTH+1]; extern UInt16 OffsetList[14]; ! extern UInt16 numstations, numdays, numabbrev; ! extern char Abbreviations[MAX_ABBREVIATIONS][ABBREVLENGTH]; ! extern char AbbrevDeffs[MAX_ABBREVIATIONS][ABDEFLENGTH]; ! extern char Notes[NOTESLENGTH]; UInt16 NumRecords=0; + UInt16 dbVersion; Boolean abbrevDefined; *************** *** 42,47 **** char *recordP; MemHandle rec_mh; ! UInt16 recPos; ! UInt16 strPos; Int16 result = false; --- 44,48 ---- char *recordP; MemHandle rec_mh; ! UInt16 recPos, strPos; Int16 result = false; *************** *** 82,86 **** // Special case if last Station name is DUMMY, it is the abbreviations column. if (StrNCompare("DUMMY", StationNames[numstations-1], 5) == 0) { ! abbrevDefined=true; numstations--; } --- 83,87 ---- // Special case if last Station name is DUMMY, it is the abbreviations column. if (StrNCompare("DUMMY", StationNames[numstations-1], 5) == 0) { ! abbrevDefined=true; // For 0.1 PDBs this is the only way to know. numstations--; } *************** *** 112,183 **** /* ! * Get the Abbreviations. This function sets the global variable Abbreviations ! * either from a defined database, or default values if the database does not exist. */ ! void getAbbreviations() { DmOpenRef hAbbrevDb; DmSearchStateType searchState; ! UInt16 nNumRecords, uCardNum; ! Int16 i, strLen; LocalID lID; MemHandle hAbbrevRec; ! uCardNum = 0; ! // See if there is an Abbreviations Database. ! if (0 == DmGetNextDatabaseByTypeCreator(true, &searchState, ABBR_PDB, CREATORID, false, &uCardNum, &lID)) { ! // Yes, load the defined Abbreviations from it. ! hAbbrevDb = DmOpenDatabase(uCardNum, lID, dmModeReadOnly); ! if (hAbbrevDb != 0) { ! hAbbrevRec = DmQueryRecord(hAbbrevDb, 0); ! StrCopy(szAbbreviations, MemHandleLock(hAbbrevRec)); ! MemHandleUnlock(hAbbrevRec); ! /* Convert '|' to '\n'. */ ! strLen = StrLen(szAbbreviations); ! for (i=0; i<strLen; i++) ! if (szAbbreviations[i] == '|') szAbbreviations[i] = '\n'; ! ! nNumRecords = DmNumRecords(hAbbrevDb); ! /* Read in the abbreviations. */ ! for (i=1; i<=MAX_ABBREVIATIONS; i++) { ! /* Default to an empty string. */ ! StrCopy(Abbreviations[i], ""); ! ! /* Ensure index is in range because some releases will */ ! /* display fatal error message if DmQueryRecords() called */ ! /* an out-of-range record number. */ ! if (i <= nNumRecords) { ! hAbbrevRec = DmQueryRecord(hAbbrevDb, i); ! if (hAbbrevRec != NULL) { ! StrCopy(Abbreviations[i], MemHandleLock(hAbbrevRec)); ! MemHandleUnlock(hAbbrevRec); } } } } } ! else { ! // No Abbreviations DB, use default values. ! StrCopy( szAbbreviations, "EWD = Mon to Sat\nM-F = Monday to Friday\nT-F = Tuesday to Friday\nMO/WO/FO/SO = Mon/Wed/Fri/Sat only\nWX/FX = Except Wed/Fri\nFSX = Fri/Sat excluded\nFSO = Fri/Sat only\nM-TH = Mon to Thurs" ); ! for (i=1; i<=MAX_ABBREVIATIONS; i++) StrCopy(Abbreviations[i], ""); ! StrCopy(Abbreviations[1], "EWD"); ! StrCopy(Abbreviations[2], "M-F"); ! StrCopy(Abbreviations[3], "FO"); ! StrCopy(Abbreviations[4], "SO"); ! StrCopy(Abbreviations[5], "T-F"); ! StrCopy(Abbreviations[6], "MO"); ! StrCopy(Abbreviations[7], "WO"); ! StrCopy(Abbreviations[8], "WX"); ! StrCopy(Abbreviations[9], "FX"); ! StrCopy(Abbreviations[10], "FSX"); ! StrCopy(Abbreviations[11], "FSO"); ! StrCopy(Abbreviations[12], "M-TH"); } } --- 113,263 ---- /* ! * Get the Abbreviations. This function sets the global variable Abbreviations. ! * For version 0.1 PDB files this is either from a defined database, or default ! * values if the database does not exist. For a 0.2 PDB file then it is from ! * within the PDB itself. */ ! void getAbbreviations(DmOpenRef pdbfd) { DmOpenRef hAbbrevDb; DmSearchStateType searchState; ! UInt16 nNumRecords, uCardNum=0; ! UInt16 recPos, strPos; ! Int16 i; LocalID lID; MemHandle hAbbrevRec; ! char *recordP; ! numabbrev = 0; ! ! if (dbVersion == VERSION_1_0) { ! // See if there is an Abbreviations Database. ! if (0 == DmGetNextDatabaseByTypeCreator(true, &searchState, ABBR_PDB, CREATORID, false, &uCardNum, &lID)) { ! // Yes, load the defined Abbreviations from it. ! hAbbrevDb = DmOpenDatabase(uCardNum, lID, dmModeReadOnly); ! if (hAbbrevDb != 0) { ! hAbbrevRec = DmQueryRecord(hAbbrevDb, 0); ! // StrCopy(szAbbreviations, MemHandleLock(hAbbrevRec)); ! MemHandleUnlock(hAbbrevRec); ! /* Convert '|' to '\n'. */ ! // strLen = StrLen(szAbbreviations); ! // for (i=0; i<strLen; i++) ! // if (szAbbreviations[i] == '|') szAbbreviations[i] = '\n'; ! ! nNumRecords = DmNumRecords(hAbbrevDb); ! /* Read in the abbreviations. */ ! for (i=1; i<=MAX_ABBREVIATIONS; i++) { ! /* Default to an empty string. */ ! StrCopy(Abbreviations[i], ""); ! ! /* Ensure index is in range because some releases will */ ! /* display fatal error message if DmQueryRecords() called */ ! /* an out-of-range record number. */ ! if (i <= nNumRecords) { ! hAbbrevRec = DmQueryRecord(hAbbrevDb, i); ! if (hAbbrevRec != NULL) ! { ! StrCopy(Abbreviations[i], MemHandleLock(hAbbrevRec)); ! MemHandleUnlock(hAbbrevRec); ! } } } + numabbrev = i; } } + else + { + // No Abbreviations DB, use default values. + StrCopy(Abbreviations[0], "EWD"); + StrCopy(Abbreviations[1], "M-F"); + StrCopy(Abbreviations[2], "FO"); + StrCopy(Abbreviations[3], "SO"); + StrCopy(Abbreviations[4], "T-F"); + StrCopy(Abbreviations[5], "MO"); + StrCopy(Abbreviations[6], "WO"); + StrCopy(Abbreviations[7], "WX"); + StrCopy(Abbreviations[8], "FX"); + StrCopy(Abbreviations[9], "FSX"); + StrCopy(Abbreviations[10], "FSO"); + StrCopy(Abbreviations[11], "M-TH"); + StrCopy(AbbrevDeffs[0], "Mon to Sat"); + StrCopy(AbbrevDeffs[1], "Monday to Friday"); + StrCopy(AbbrevDeffs[2], "Friday Only"); + StrCopy(AbbrevDeffs[3], "Saturday Only"); + StrCopy(AbbrevDeffs[4], "Tuesday to Friday"); + StrCopy(AbbrevDeffs[5], "Monday Only"); + StrCopy(AbbrevDeffs[6], "Wednesday Only"); + StrCopy(AbbrevDeffs[7], "Except for Wed"); + StrCopy(AbbrevDeffs[8], "Except for Fri"); + StrCopy(AbbrevDeffs[9], "Except for Fri & Sat"); + StrCopy(AbbrevDeffs[10], "Fri & Sat Only"); + StrCopy(AbbrevDeffs[11], "Monday to Thurs"); + numabbrev = 12; + } } ! if (dbVersion == VERSION_2_0) { ! // This version of PDB files has an abbreviations record) ! // Get number of records in database. ! if (NumRecords > ABDEFRECORD) // Since we will load both records. ! { ! // populate Abbreviations from database. ! hAbbrevRec = DmQueryRecord(pdbfd, ABBREVRECORD); ! if (hAbbrevRec) ! { ! recordP = MemHandleLock(hAbbrevRec); ! recPos = 0; ! strPos = 0; ! while (recordP[recPos] != '\0') { ! if(recordP[recPos] == '\t') { ! Abbreviations[numabbrev][strPos]='\0'; ! numabbrev++; ! strPos=0; ! } else { ! Abbreviations[numabbrev][strPos]=recordP[recPos]; ! strPos++; ! } ! recPos++; ! } ! Abbreviations[numabbrev][strPos]='\0'; ! numabbrev++; ! // release lock on record. ! MemHandleUnlock(hAbbrevRec); ! } ! // populate Abbreviation Deffs from database. ! hAbbrevRec = DmQueryRecord(pdbfd, ABDEFRECORD); ! if (hAbbrevRec) ! { ! recordP = MemHandleLock(hAbbrevRec); ! recPos = 0; ! strPos = 0; ! numabbrev = 0; ! while (recordP[recPos] != '\0') { ! if(recordP[recPos] == '\t') { ! AbbrevDeffs[numabbrev][strPos]='\0'; ! numabbrev++; ! strPos=0; ! } else { ! AbbrevDeffs[numabbrev][strPos]=recordP[recPos]; ! strPos++; ! } ! recPos++; ! } ! AbbrevDeffs[numabbrev][strPos]='\0'; ! numabbrev++; ! ! // release lock on record. ! MemHandleUnlock(hAbbrevRec); ! if (numabbrev > 1) { ! abbrevDefined = true; ! } ! } ! } } } *************** *** 272,276 **** /* * Get the time for a given timetable entry and station. Returns time as a ! * signed number (e.g. 07:45 = 745). -1 indicates no time for given station. */ Int16 getTime(DmOpenRef pdbfd, UInt16 recNum, Int8 station) --- 352,358 ---- /* * Get the time for a given timetable entry and station. Returns time as a ! * signed 16 bit value where the high byte is the hours and the low byte is ! * the minutes. If the high byte is -1 it indicates no time for given station, ! * if the high byte is -2 it indicates 'each hour'. */ Int16 getTime(DmOpenRef pdbfd, UInt16 recNum, Int8 station) *************** *** 279,282 **** --- 361,366 ---- char *recordP; Int16 time = -1; + Int8 hours = 0; + Int8 mins = 0; rec_mh = DmQueryRecord(pdbfd, recNum); *************** *** 284,288 **** { recordP = MemHandleLock(rec_mh); ! time = (recordP[(station*2)+1] & 0xFF) | (recordP[station*2] << 8); MemHandleUnlock(rec_mh); } --- 368,384 ---- { recordP = MemHandleLock(rec_mh); ! if (dbVersion == VERSION_1_0) ! { ! time = (recordP[(station*2)+1] & 0xFF) | (recordP[station*2] << 8); ! if (time != -1) { ! mins = time % 100; ! hours = time / 100; ! time = (hours << 8) + mins; ! } ! } ! else ! { ! time = (recordP[(station*3)+1] & 0xFF) | (recordP[station*3] << 8); ! } MemHandleUnlock(rec_mh); } *************** *** 294,298 **** * 0 if the database does not support abbreviations. */ ! Int16 getAbbrev(DmOpenRef pdbfd, UInt16 recNum) { MemHandle rec_mh; --- 390,394 ---- * 0 if the database does not support abbreviations. */ ! Int16 getAbbrev(DmOpenRef pdbfd, UInt16 recNum, Int8 station) { MemHandle rec_mh; *************** *** 306,313 **** { recordP = MemHandleLock(rec_mh); ! abbrev = (recordP[(numstations*2)+1] & 0xFF) | (recordP[numstations*2] << 8); MemHandleUnlock(rec_mh); } } return abbrev; ! } \ No newline at end of file --- 402,447 ---- { recordP = MemHandleLock(rec_mh); ! if (dbVersion == VERSION_1_0) ! abbrev = (recordP[(numstations*2)+1] & 0xFF) | (recordP[numstations*2] << 8); ! else ! abbrev = recordP[(station*3)+2]; MemHandleUnlock(rec_mh); } } return abbrev; ! } ! ! /* ! * Determines whether or not the current database contains timetable notes. ! * This will only be valid after the StationNames have been retrieved for the ! * first time. ! * Returns true if timetable notes are present. ! */ ! Boolean getNotesDefined(DmOpenRef pdbfd) ! { ! MemHandle rec_mh; ! char *recordP; ! ! if (dbVersion == VERSION_1_0) ! return false; ! ! // Otherwise read in the notes. ! if (NumRecords > NOTESRECORD) ! { ! // populate StationNames from database. ! rec_mh = DmQueryRecord(pdbfd,NOTESRECORD); ! if (rec_mh) ! { ! recordP = MemHandleLock(rec_mh); ! StrNCopy(Notes, recordP, NOTESLENGTH-1); ! ! // release lock on record. ! MemHandleUnlock(rec_mh); ! } ! } ! ! if (StrLen(Notes) > 0) ! return true; ! ! return false; ! } |