mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Parse 'Diving Log' cylinder working pressure
Oh Gods. Why are all other scuba programs so f*&% messed up? The Diving Log cylinder working pressure is in bar - which is all good. But their pressure *samples* are in PSI. Why the h*ll do people mix up units in the same damn file like that? I despair at the pure incompetence sometimes. I suspect the pressure samples aren't "really" in PSI: they are probably in some user-specified units. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									1cc62d5811
								
							
						
					
					
						commit
						61d0aa10e1
					
				
					 1 changed files with 43 additions and 15 deletions
				
			
		
							
								
								
									
										34
									
								
								parse-xml.c
									
										
									
									
									
								
							
							
						
						
									
										34
									
								
								parse-xml.c
									
										
									
									
									
								
							|  | @ -504,12 +504,37 @@ static void fahrenheit(char *buffer, void *_temperature) | |||
| 	free(buffer); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Did I mention how bat-shit crazy divinglog is? The sample | ||||
|  * pressures are in PSI. But the tank working pressure is in | ||||
|  * bar. WTF^2? | ||||
|  * | ||||
|  * Crazy stuff like this is why diveclog has everything in | ||||
|  * these inconvenient typed structures, and you have to say | ||||
|  * "pressure->mbar" to get the actual value. Exactly so that | ||||
|  * you can never have unit confusion. | ||||
|  */ | ||||
| static void psi(char *buffer, void *_pressure) | ||||
| { | ||||
| 	pressure_t *pressure = _pressure; | ||||
| 	union int_or_float val; | ||||
| 
 | ||||
| 	switch (integer_or_float(buffer, &val)) { | ||||
| 	case FLOAT: | ||||
| 		pressure->mbar = val.fp * 68.95 + 0.5; | ||||
| 		break; | ||||
| 	default: | ||||
| 		fprintf(stderr, "Crazy Diving Log PSI reading %s\n", buffer); | ||||
| 	} | ||||
| 	free(buffer); | ||||
| } | ||||
| 
 | ||||
| static int divinglog_fill_sample(struct sample *sample, const char *name, int len, char *buf) | ||||
| { | ||||
| 	return	MATCH(".p.time", sampletime, &sample->time) || | ||||
| 		MATCH(".p.depth", depth, &sample->depth) || | ||||
| 		MATCH(".p.temp", fahrenheit, &sample->temperature) || | ||||
| 		MATCH(".p.press1", pressure, &sample->cylinderpressure) || | ||||
| 		MATCH(".p.press1", psi, &sample->cylinderpressure) || | ||||
| 		0; | ||||
| } | ||||
| 
 | ||||
|  | @ -613,6 +638,7 @@ static int divinglog_dive_match(struct dive *dive, const char *name, int len, ch | |||
| 		MATCH(".entrytime", divetime, &dive->when) || | ||||
| 		MATCH(".depth", depth, &dive->maxdepth) || | ||||
| 		MATCH(".tanksize", cylindersize, &dive->cylinder[0].type.size) || | ||||
| 		MATCH(".presw", pressure, &dive->cylinder[0].type.workingpressure) || | ||||
| 		MATCH(".tanktype", utf8_string, &dive->cylinder[0].type.description) || | ||||
| 		MATCH(".comments", utf8_string, &dive->notes) || | ||||
| 		MATCH(".country.name", utf8_string, &country) || | ||||
|  | @ -1248,10 +1274,12 @@ static void DivingLog_importer(void) | |||
| 	 * | ||||
| 	 * Temperatures are in C, except in samples, | ||||
| 	 * when they are in Fahrenheit. Depths are in | ||||
| 	 * meters, but pressure is in PSI. | ||||
| 	 * meters, an dpressure is in PSI in the samples, | ||||
| 	 * but in bar when it comes to working pressure. | ||||
| 	 * | ||||
| 	 * Crazy f*%^ morons. | ||||
| 	 */ | ||||
| 	input_units = SI_units; | ||||
| 	input_units.pressure = PSI; | ||||
| } | ||||
| 
 | ||||
| static void uddf_importer(void) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue