int read_page() { int sum = 0; int bytes_read = 0; char record_command = read_bytes(1, &bytes_read, &sum); // Always 0x89 if ((0xff & record_command) == 0x89) { // 1. page # data int page_number = read_bytes(2, &bytes_read, &sum); // Page # int data_number = read_bytes(1, &bytes_read, &sum); // # of data in page if (page_number == 1 || (page_number == 64010 and secs == 0.0)) { // 2. Training Summary data (60 bytes)"; read_bytes(39, &bytes_read, &sum); int record_training_flag = read_bytes(1, &bytes_read, &sum); // Training Flag if ((record_training_flag & 0x01) == 0) { // Only new lap rideFile->addInterval(last_interval_secs, secs, QString("%1").arg(interval)); last_interval_secs = secs; interval ++; } read_bytes(20, &bytes_read, &sum); // Don't care } if (page_number == 1 || (page_number == 64010 and secs == 0.0)) { // Section Start time and date data (12 byte) int sec = read_bsd_byte(&bytes_read, &sum); // Section start time sec int min = read_bsd_byte(&bytes_read, &sum); // Section start time min int hour = read_bsd_byte(&bytes_read, &sum); // Section start time hour int day = read_bsd_byte(&bytes_read, &sum); // Section start time day int month = read_bytes(1, &bytes_read, &sum); // Section start time month int year = read_bsd_byte(&bytes_read, &sum); // Section start time year QDateTime t = QDateTime(QDate(2000+year,month,day), QTime(hour,min,sec)); if (secs == 0.0 || rideFile->startTime().toTime_t()<0) { rideFile->setStartTime(t); } else { int gap = (t.toTime_t() - rideFile->startTime().toTime_t()) - secs; secs += gap; } read_bytes(5, &bytes_read, &sum); // Don't care read_bytes(1, &bytes_read, &sum); // Data Flag data_number--; } for (int i = 0; i < data_number; ++i) { read_graph_data(&secs, &bytes_read, &sum); } int finish = 259-bytes_read; for (int i = 0; i < finish; i++) { read_bytes(1, &bytes_read, &sum); // to finish } read_bytes(1, &bytes_read, &sum); // Checksum } return bytes_read; }
/**************************************************************************** * * Procedure new_graph * * Arguments: filename: pointer to type char (optional) * * Returns: none * * Action: does everything to get space for and read in a new graph * ****************************************************************************/ void new_graph(char *filename) { char file_name[80]; char *theinline; char failed; FILE *infile; failed = 0; /* set up a new object to hold the graph */ makenewobject(); whichobj = head->obj; /* now build the graph primitive */ whichobj->prim = (prim_type *)D_CALLOC(1,sizeof(prim_type)); if( !whichobj->prim )fatal("Can't get space for graph primitive."); whichobj->prim->which = GRAPH; whichobj->prim->graph = (graph_type *)D_CALLOC(1,sizeof(graph_type)); if( !whichobj->prim->graph ) fatal("Can't get space for graph."); if( !filename ){ display("Look in the xterm..."); #ifndef USE_READLINE printf("Enter the file name containing the graph data: "); scanf("%s",file_name); #else theinline= readline("Enter the file name containing the graph data: "); add_history(theinline); if( theinline ){ sscanf(theinline,"%s",file_name); free(theinline); } else { error("Bad file name"); file_name[0] = 0; } #endif } else{ strcpy(file_name,filename); } /* open the file */ infile = fopen(file_name,"r"); if(!infile){ printf("Problems opening file: %s\n",file_name); display("oooooops!"); failed = 1; } if( !failed ){ read_graph_data(infile,whichobj->prim->graph,0,1); strcpy(whichobj->prim->graph->filename,file_name); } /* check to see if any curves were actually read in.... */ if(!whichobj->prim->graph->num_curves || failed ){ /* no... free the memory that we asked for */ D_FREE(whichobj->prim->graph); D_FREE(whichobj->prim); D_FREE(whichobj); whichobj=0; head->obj = 0; head = head->next; } else{ whichobj->scale.x=whichobj->scale.y=whichobj->scale.z=2.0*GRAPHICS_SCALE; whichobj->cent.x=-180;whichobj->cent.y=180; whichobj->cent.z=0*GRAPHICS_SCALE; whichobj->trans.x=0;whichobj->trans.y=0; whichobj->trans.z=0; /* make the button window */ #ifdef INTERACTIVE_USE build_graph_button_window(&button_wins,whichobj->prim->graph); whichobj->prim->but_win = button_wins; #endif } }