| 
									
										
										
										
											2011-09-01 10:09:53 -07:00
										 |  |  | Half-arsed divelog software in C. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-03 08:53:05 -07:00
										 |  |  | I'm tired of java programs that don't work etc. | 
					
						
							| 
									
										
										
										
											2011-09-01 10:09:53 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | License: GPLv2 | 
					
						
							| 
									
										
										
										
											2011-09-03 08:53:05 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-22 15:20:26 -07:00
										 |  |  | You need libxml2-devel, gtk2-devel, glib-2.0 and GConf2-devel to build | 
					
						
							|  |  |  | this (and libusb-1.0 if you have libdivecomputer built with it, but then | 
					
						
							|  |  |  | you obviously already have it installed) | 
					
						
							| 
									
										
										
										
											2011-09-03 08:53:05 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-12 14:05:44 -07:00
										 |  |  | You also need to have libdivecomputer installed, which goes something like this: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	git clone git://libdivecomputer.git.sourceforge.net/gitroot/libdivecomputer/libdivecomputer | 
					
						
							|  |  |  | 	cd libdivecomputer | 
					
						
							|  |  |  | 	autoreconf --install | 
					
						
							|  |  |  | 	./configure | 
					
						
							|  |  |  | 	make | 
					
						
							|  |  |  | 	sudo make install | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-22 15:20:26 -07:00
										 |  |  | NOTE! You may need to tell the main Makefile where you installed | 
					
						
							|  |  |  | libdivecomputer if you didn't do it in the default /usr/local location. | 
					
						
							|  |  |  | I don't trust pkg-config for libdivecomputer, since pkg-config usually | 
					
						
							|  |  |  | doesn't work unless the project has been installed by the distro. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Just edit the makefile directly.  autoconf and friends are the devil's | 
					
						
							|  |  |  | tools. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-03 08:53:05 -07:00
										 |  |  | Usage: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	make | 
					
						
							| 
									
										
										
										
											2011-09-15 09:43:14 -07:00
										 |  |  | 	./subsurface dives/*.xml | 
					
						
							| 
									
										
										
										
											2011-09-03 08:53:05 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | to see my dives (with no notes or commentary). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-12 14:05:44 -07:00
										 |  |  | Or, if you have a dive computer supported by libdivecomputer (and | 
					
						
							|  |  |  | connected to /dev/ttyUSB0), you can just do | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	make | 
					
						
							| 
									
										
										
										
											2011-09-15 09:43:14 -07:00
										 |  |  | 	./subsurface | 
					
						
							| 
									
										
										
										
											2011-09-12 14:05:44 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | and select "Import" from the File menu, tell it what dive computer you | 
					
						
							|  |  |  | have, and hit "OK". | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There's a lot of duplicates in the XML files that come as an example, | 
					
						
							| 
									
										
										
										
											2011-09-15 09:43:14 -07:00
										 |  |  | and subsurface will de-duplicate the ones that are exactly the same | 
					
						
							|  |  |  | (just because they were imported multiple times).  But at least two of | 
					
						
							|  |  |  | the dives have duplicates that were edited by Dirk in the Suunto Dive | 
					
						
							| 
									
										
										
										
											2011-09-12 14:05:44 -07:00
										 |  |  | Manager, so they don't trigger the "exact duplicates" match. | 
					
						
							| 
									
										
										
										
											2011-09-03 08:53:05 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-20 12:40:34 -07:00
										 |  |  | Implementation details: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-22 15:20:26 -07:00
										 |  |  |   main.c     - program frame | 
					
						
							|  |  |  |   dive.c     - creates and maintaines the internal dive list structure | 
					
						
							|  |  |  |   libdivecomputer.c | 
					
						
							|  |  |  |   uemis.c | 
					
						
							|  |  |  |   parse-xml.c | 
					
						
							|  |  |  |   save-xml.c - interface with dive computers and the XML files | 
					
						
							|  |  |  |   profile.c  - creates the data for the profile and draws it using cairo | 
					
						
							| 
									
										
										
										
											2011-09-20 12:40:34 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | A first UI has been implemented in gtk and an attempt has been made to | 
					
						
							| 
									
										
										
										
											2011-09-22 15:20:26 -07:00
										 |  |  | separate program logic from UI implementation. | 
					
						
							| 
									
										
										
										
											2011-09-20 12:40:34 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-22 15:20:26 -07:00
										 |  |  |   gtk-gui.c  - overall layout, main window of the UI | 
					
						
							|  |  |  |   divelist.c  - list of dives subsurface maintains | 
					
						
							|  |  |  |   equipment.c - equipment / tank information for each dive | 
					
						
							|  |  |  |   info.c      - detailed dive info | 
					
						
							|  |  |  |   print.c     - printing | 
					
						
							| 
									
										
										
										
											2011-09-20 12:40:34 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-03 08:53:05 -07:00
										 |  |  | WARNING! I wasn't kidding when I said that I've done this by reading | 
					
						
							|  |  |  | gtk2 tutorials as I've gone along.  If somebody is more comfortable with | 
					
						
							|  |  |  | gtk, feel free to send me (signed-off) patches. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Just as an example of the extreme hackiness of the code, I don't even | 
					
						
							|  |  |  | bother connecting a signal for the "somebody edited the dive info" | 
					
						
							|  |  |  | cases.  I just save/restore the dive info every single time you switch | 
					
						
							|  |  |  | dives.  Christ! That's truly lame. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | NOTE! Some of the dives are pretty pitiful.  All the last dives are from | 
					
						
							|  |  |  | my divemaster course, so they are from following open water students | 
					
						
							|  |  |  | along (many of them the confined*water dives).  There a lot of the | 
					
						
							|  |  |  | action is at the surface, so some of the "dives" are 4ft deep and 2min | 
					
						
							|  |  |  | long. | 
					
						
							| 
									
										
										
										
											2011-09-06 12:32:51 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | Contributing: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Please either send me signed-off patches or a pull request with | 
					
						
							|  |  |  | signed-off commits.  If you don't sign off on them, I will not accept | 
					
						
							|  |  |  | them. This means adding a line that says "Signed-off-by: Name <email>" | 
					
						
							|  |  |  | at the end of each commit, indicating that you wrote the code and have | 
					
						
							|  |  |  | the right to pass it on as an open source patch. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | See: http://gerrit.googlecode.com/svn/documentation/2.0/user-signedoffby.html | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-06 14:58:05 -07:00
										 |  |  | Also, please write good git commit messages.  A good commit message | 
					
						
							|  |  |  | looks like this: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	header line: explaining the commit in one line | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Body of commit message is a few lines of text, explaining things | 
					
						
							|  |  |  | 	in more detail, possibly giving some background about the issue | 
					
						
							|  |  |  | 	being fixed, etc etc. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	The body of the commit message can be several paragrahps, and | 
					
						
							|  |  |  | 	please do proper word-wrap and keep columns shorter than about | 
					
						
							|  |  |  | 	74 characters or so. That way "git log" will show things | 
					
						
							|  |  |  | 	nicely even when it's indented. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Reported-by: whoever-reported-it | 
					
						
							|  |  |  | 	Signed-off-by: Your Name <youremail@yourhost.com> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | where that header line really should be meaningful, and really should be | 
					
						
							|  |  |  | just one line.  That header line is what is shown by tools like gitk and | 
					
						
							|  |  |  | shortlog, and should summarize the change in one readable line of text, | 
					
						
							|  |  |  | independently of the longer explanation. |