ANNOUNCE: polyXmass 0.10



2002-07-08  Filippo Rusconi  <filippo rusconi at nowhere dot org>

	* visuals-X.c (findvisual_make_canvas_items_in_GPA): corrected a
	bug which appeared when drawing the find/replace line under the
	monomer which were found when the found sequence element spanned
	more than two lines. This was due to not setting the coordinates
	of the right end of line point for the lines between the first and
	the last . Now seems to work perfectly well. Indeed, finding the
	whole sequence of the polymer will draw a line under all the
	monomers that make the sequence!

2002-07-01  Filippo Rusconi  <filippo rusconi at nowhere dot org>

	* seqed-wnd-X.c (seqed_wnd_delete_sequence_portion): changed
	function to take into account the fact that the user may ask the
	work to be done on the indexes or the pointers in the seqcoord
	parameter.
	(seqed_wnd_destroy_selected_oligomer): changed function to
	leverage the code in the function above:
	seqed_wnd_delete_sequence_portion ().

2002-06-29  Filippo Rusconi  <filippo rusconi at nowhere dot org>

	* monomerutil.c (write_seq_monomerprop_plugin_chooser): added
	coded which manages smoothly the cases for which the prop
	corresponding to the name passed as parameter may return a NULL
	function plugin when it makes no sense to write to the polymer
	sequence file a prop that was set to a monomer of the
	sequence. For example the FIND/REPLACE routines do set a number of
	prop instances in the monomers of the polymer sequence. These prop
	are not to be written to file!
	(write_monomerprop_to_seq_file): added code to handle smoothly the
	case when the pointer returned by
	write_seq_monomerprop_plugin_chooser () is NULL. See above for an
	explanation.

2002-06-28  Filippo Rusconi  <filippo rusconi at nowhere dot org>

	* findrep-X.c (findrep_find_results_wnd_replace_button_clicked):
	added this function which is responsible for making the
	replacement between a previously found motif in the sequence with
	a sequence string entered by the user in a GtkEntry. Still to be
	modified so that the user is asked to go on each time a
	replacement should occur.

	* seqed-wnd-X.c (seqed_wnd_seq_insert_into_polseq_with_string):
	modified function (and name) so that it now divides the work by
	first making an array of monomers with the replacement string and
	next calls a new function
	seqed_wnd_seq_insert_into_polseq_with_GPA () with this monomer
	array.

2002-06-26  Filippo Rusconi  <filippo rusconi at nowhere dot org>

	* findrep-X.c (findrep_find_results_wnd_list_button_press_event):
	added this handler so that when the user clicks onto a list item
	with the middle (2) mouse button, the corresponding sequence
	region is made visible in the sequence editor by passing to
	seqed_sw_scroll_ensure_region_visible () the start and end indexes
	of the region in question. This allows the user (without changing
	the currently effectively selected items) to visualize the
	sequence at the region of interest. This will be particularly
	important for when the user will want to check if the found motif
	is to be replaced or not (not yet coded, but this function was
	written with this in mind).

	* seqed-wnd-X.c (seqed_sw_scroll_show_cursor_and_sel): improved
	the computation which gives the vertical scroll to apply to the
	sequence editor scroll window so that the cursor along with the
	selection be fully visible at the bottom of the window. This is by
	taking into account the height of the horizontal scroll bar which
	is (I did not notice this) taken into account when the size
	allocation is done for the scrolled window. Depending on the Gtk
	themes used, the height of this horizontal scroll bar may be as
	large as the height of an icon, and this would lead to
	inconsistent scroll computations. This is now fixed up to the
	pixel precision.
	(seqed_sw_scroll_ensure_region_visible): added this function to
	compute and apply vertical scroll to the sequence editor scrolled
	window so that the region passed as parameter as two monomer
	indexes is fully visible in the sequence editor window. If the
	region is greater than what the seqeditor window can display, the
	monomer at index [start_idx] will be placed on top of the window.

2002-06-24  Filippo Rusconi  <filippo rusconi at nowhere dot org>

	* visuals-X.c (prop_findvisual_free): corrected a bug by using the
	prop_compare_data_with_gpointer function pointer as parameter to
	the function prop_find_in_GPA_with_cmp_func when searching for a
	prop which had p_data pointing to a p_findvisual instance. I had
	left this parameter NULL for each call, assuming (sillily) that
	the default comparison (using strcmp ()) would be enough. No, it
	would from time to time provide bad comparison, thus later leading
	to segfaults which were apparently un-explainable. Still need to
	check all this.

	* findrep-X.c (findrep_find_results_wnd_list_sel_child): added a
	test to verify that the widget selected did not have a findvisual
	prop already. If so first forces "unsel" fo the widget. This is
	necessary because if the list item widget is double clicked two
	sel_child signals are received (two findvisual instances made)
	with no "unsel_child" signal in between. This means that the list
	ends up not being "colinear" with all the findvisual instances
	stored in the seqedctxt array of visuals and in all the monomers
	concerned with the visual. Which means that if an item is
	unclicked, the graphical visual may not be erased from the
	sequence editor window... These error did cause segfaults...

2002-06-23  Filippo Rusconi  <filippo rusconi at nowhere dot org>

	* contexts.h (struct _seqedctxt): added a p_visuals_propGPA
	GPtrArray of prop instances which holds prop objects only aimed at
	rendering on a "plugin-like" basis any kind of graphical item
	needed. This process is exemplified with the rendering of the
	visual hinting required in response to the finding of polymer
	sequence elements. All this in visuals-X.c.

	* seqed-wnd-X.c (seqed_wnd_redraw_sequence): added a routine which
	iterates into the seqedctxt's p_visuals_propGPA array of
	properties, responsible for rendering on a "plugin" basis all the
	canvas items.

	* visuals-X.c: added the file pair visuals-X.[ch] in order to
	manage all the drawings that may be necessary to display what may
	be needed (in the form of rendering plugin functions).  To start
	with, the visual feedback, that is required when the user searches
	for a sequence motif in the polymer sequence, is managed by the
	"findvisual" series of functions in this file.

	* findrep-X.c: added the file pair findrep-X.[ch] in order to
	manage all the drawings that may be necessary to display in the
	sequence editor the visual feedback required for handling the
	find/replace actions in the sequence. Right now, only the find
	component of the find/replace pair is implemented.
	
	* findrep.c: added the file pair findrep.[ch] to manage in order
	to manage all the drawings that may be necessary to display in the
	sequence editor the visual feedback required for handling the
	find/replace actions in the sequence. Right now, only the find
	component of the find/replace pair is implemented.
	
2002-06-17  Filippo Rusconi  <filippo rusconi at nowhere dot org>

	* prop.c (prop_compare_data_with_gpointer): created this new
	function which takes a prop as the first param and a gpointer
	(data) as the second param. This function is now used in the
	prop_find_in_GPA_with_cmp_func () call whenever the
	prop_gpointerdata_cmp () function was erroneously used. Indeed,
	the latter one is only suitable to compare the data from two prop
	instance pointers, and NOT from a prop instance pointer and a
	gpointer. This lead to crashes which are now avoided properly.

2002-06-16  Filippo Rusconi  <filippo rusconi at nowhere dot org>

	* seqed-wnd-X.c (seqed_gnome_canvas_event): corrected small bug
	due to feeding the monomer position calculation bad xy
	coordinates.

	* writeseq.c (prepare_sequence_save): added this function to
	interface with some routines which had to save a polymer sequence,
	and which used to call the on_save_sequence_activate () function
	(the general menu handler) with a 'data' pointer pointing to the
	polymer context. But when this handler is called from the general
	menu, 'data' is not NULL (contrary to what I used to think) so the
	test NULL-non-NULL is not operating as expected.
	(on_save_sequence_as_activate): corrected a bug due to calling NOT
	this function in the program's general menu handler for "sequence
	save as", but calling the handler for the "sequence save" instead.

2002-06-03  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* atomedit-X.c: added icons to the atom and isotope nodes in the
	GtkCTree of the atom edit window.

2002-06-02  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole_project: added configurability for the fonts used in the
	console window, in some text displaying windows and in the
	About... window. The X style font names are stored in the resource
	file if the user requires so.

	* progresources-X.c: greatly improved the interface by using the
	powerful GtkOptionMenu widgets in all relevant places. Simplified
	the code by the same token.

	* about-X.c (setup_about_dialog): added a http button to the about
	box so that users can easily reach the polyXmass's www site. Also
	put the logo on top of the about window.

	* session-mngmt-X.c: added the session-mngmt-X.[ch] file pair to
	handle all the stuff pertaining to session management.

2002-06-01  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* init.c (pxm_store_session): added the
	pxm_store_session/pxm_restore_session pair of functions to handle
	the storing and restoring of a number of window positions
	(polymer/oligomer mass data display window, mass calc options
	window...) so that the user can construct a window layout that
	best suits his needs, and this layout be stored.

	* progresources-X.c (on_resources_prog_resources_config_activate):
	added the capability of the user to clean the geometry history of
	a number of windows (main program, console window, mass data
	options...) and improved the handling of the "clean files history"
	in the resource window.

	* seqed-dnd-sel-X.h (seqed_dnd_selection_owner_set): added this
	function to be called specifically by one sequence editor in
	response to a selection of a sequence portion.

	* seqed-dnd-sel-X.c (on_polseq_edit_copy_activate): corrected a
	bug due to taking for granted that the 'data' param was NULL in
	certain conditions. 'data' can contain junk material. So now the
	polymer context is only the last active one. Added one function to
	be called directly from the sequence editor
	(seqed_dnd_selection_owner_set function).

2002-05-30  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* seqed_related_files: split the huge seqeditor-X.c file into a
	number of files: seqed-wnd-X.c, seqed-pixbuf-X.c,
	seqed-monicon-X.c, seqed-kbd-X.c, seqed-dnd-sel-X.c in order to
	ease work on them and also as a primary step to code rewrite of
	all what pertains to the sequence editor.

2002-05-26  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* seqeditor-X.c (seqed_draw_sel_polygon): when the selection
	polygon is redrawn, now if some selection is made, polyXmass
	claims the X selection, so that a paste is possible automatically
	with the selected portion of the polymer sequence.
	(seqed_update_sel_polygon): when the selection polygon is updated,
	now if some selection is made, polyXmass claims the X selection,
	so that a paste is possible automatically with the selected
	portion of the polymer sequence.
	(seqed_selection_clear): added this X selection mechanism handler
	function which is called as soon as a selection is made (wherever
	it be: outside the program or in another sequence editor... or in
	whatever other widget which did not own the selection). This
	function is responsible for destroying the currently selection
	portion of the polymer sequence.

	* whole_project (whole_project): changed a bunch of #define
	statements to organized enum statements. Cleaned some code.

2002-05-22  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* seqeditor-X.c (seqed_insert_seq_element_into_polseq): added this
	function to insert a sequence element under the form of a string
	at the current cursor position in the sequence editor. If a
	sequence element is selected, it is replaced by the one which is
	to be inserted. A check is made on the string to make sure that it
	is made of valid and known monomer codes for the concerned polymer
	definition context.
	(seqed_selection_received): handles the X's "selection_received"
	mechanism. Calls seqed_insert_seq_element_into_polseq () with the
	string gotten from the X clipboard.
	(seqed_selection_get): handles the X's "selection_get"
	mechanism. If a selection is currently existent, then a string is
	made (by allocation) out of it, set to the clipboard data and then
	freed.
	(on_polseq_edit_copy_activate): added this function to handle the
	copying of a currently selected polymer sequence to the X
	clipboard.
	(on_polseq_edit_paste_activate): added this function to handle the
	pasting to the active polymer sequence of a sequence element under
	the form of a string present in the X clipboard.

2002-05-15  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* monomerutil.c (make_string_with_coords_from_monomer_GPA): added
	this function to handle the case for which the string to be
	allocated and filled corresponds to a portion of the array of
	monomers describing the sequence and not the whole array.

2002-05-12  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* progmenu-X.h (edit_menu): added Edit copy/cut/paste menus to the
	main menu without having coded them yet, the same for other menus
	like Find, Find again, Replace....
	(file_polseq_menu): replaced some menu items so that they use the
	GNOMEUIINFO_MENU_xxx macros to standardize the menu appearance.

2002-05-11  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* poldefedit-X.c (on_poldef_write_OK_clicked): when a polymer
	definition is saved under another file name, this file name is now
	added to the 'Recent files' history.

	* writeseq.c (on_sequence_write_OK_clicked): when a polymer
	sequence is saved under another file name, this file name is now
	added to the 'Recent files' history.

	* recent-X.c (prog_wnd_setup_recent_poldef_files_in_menu): now
	handles the special case when the file name contains underscore
	characters. Calls pxm_escape_underscore_strdup () before making
	the menu item label.
	(prog_wnd_setup_recent_poldef_files_in_menu): corrected a bug due
	to calling the polymer sequence file opening function instead of
	the polymer definition file function.

	* globals.c (pxm_escape_underscore_strdup): will replace '_' with
	"__" each time '_' occurs in string, so that the filenames
	containing '_' characters are correctly displayed in menu items
	(menu items take underscores as a means to make a shortcut key).

	* recent-X.[ch]: created new file pair to hold all 'Recent files'
	operations, so that progwindow.[ch] are not cluttered with this
	stuff.

	* progresources-X.c
	(prog_resources_wnd_varia_polseq_recent_files_button): added in
	the resource window a button to clear the list of recent polymer
	sequence files.
	(prog_resources_wnd_varia_poldef_recent_files_button): added in
	the resource window a button to clear the list of recent polymer
	definition files.

	* progwindow-X.c (setup_prog_window): after creation of the main
	program menu, the program now dynamically adds two subtrees (in
	the File menu subtrees for polymer sequence and polymer
	definition) to list the recently opened documents.

	* poldefedit-X.c (open_poldef_file_with_filename): any successfully
	polymer definition file is now stored in the [RECENT_POLDEF_FILES]
	section of the resource file, so that upon program initialization
	it will be possible to make a 'Recent files' menu subtree with the
	document history.

	* progmenu-X.h (all_menu_subtrees): corrected the Gnomified menu
	generation so that smaller menu-specific icons are used in from of
	the menu item text.

	* readseq.c (open_polseq_file_with_filename): any successfully
	polymer sequence file is now stored in the [RECENT_POLSEQ_FILES]
	section of the resource file, so that upon program initialization
	it will be possible to make a 'Recent files' menu subtree with the
	document history.

	* progwindow-X.c
	(prog_wnd_store_polseq_file_name_to_recent_files): new function
	that stores in the resource file the absolute file name passed as
	parameter.

	* progwindow-X.c
	(prog_wnd_store_poldef_file_name_to_recent_files): new function
	that stores in the resource file the absolute file name passed as
	parameter.

	* readseq.h: changed function name open_seq_file_with_filename
	to open_polseq_file_with_filename

	* progmenu-X.h (file_polseq_menu): added 'Recent files' menu
	subtree for polymer sequence submenu. This subtree will be filled
	with dynamically generated menu items, after the recent files'
	names are read from the resource file.

	* progmenu-X.h (file_poldef_menu): added 'Recent files' menu
	subtree for polymer definition submenu. This subtree will be
	filled with dynamically generated menu items, after the recent
	files' names are read from the resource file.

2002-05-07  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* init.c (pxm_uninit_prog): main program window and console window
	(this latter only if displayed) store their geometry in the
	resource file for use at next program startup. If the console
	window is not displayed, this is stored in the resource file so
	that at next run no console window is created.

	* permmodif-X.c (on_permmodif_activate): fixed a bug which
	originated in a junk pointer 'data' passed to the function when
	the menu item was selected (this changed after Gnomification of
	the menu). The 'data' pointer was thought to contain something
	valid and was used as a polymerctxt *, thus later giving a
	segfault. Removed the use of the 'data'.

2002-05-03  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* cutpolymer-X.c (cutpol_smdata_wnd_fill_ctree): frozen the
	GtkCTree before setting all oligomers to it, so that no flickering
	is observed.

	* fragpolymer-X.c (fragpol_smdata_wnd_fill_ctree): frozen the
	GtkCTree before setting all fragomers to it, so that no flickering
	is observed.

	* searchmass-polseq-X.c (search_masses_polseq_xwin): fixed two
	small memory leaks due to not freeing the memory allocated to
	construct the string displaying the number of found oligomers.
	(search_mass_polseq_fill_oligomer_ctree): frozen the GtkCTree
	before setting all oligomers to it, so that no flickering is
	observed.
	(search_masses_polseq_xwin): added a widget in the progress
	window, so that the currently searched mass is displayed real
	time.
	(search_mass_polseq_init_progress_wnd): added a cancel button so
	that the search mass operation, running in the window which called
	this one, can be stopped.
	(search_masses_polseq_xwin): added tests to check if the user
	asked that the search operation be cancelled. This is useful if
	the search operation is too lengthy due to too many masses
	searched or a tolerance so large that there are a huge amount of
	agreeing oligomers or the mass to be searched is so big that there
	are a huge number of tests for each oligomer to be done... The
	search operation will be stopped very quickly since the test is
	performed each time a new oligomer is tested by adding a monomer
	to the elongating oligomer. That's the finest granularity for the
	test that can be achieved.
	
	* fragpolymer-X.c (fragpol_fragdata_wnd_fill_ctree): frozen the
	GtkCTree before setting all fragomers to it, so that no flickering
	is observed.

	* cutpolymer-X.c (cutpol_cutdata_wnd_fill_ctree): frozen the
	GtkCTree before setting all oligomers to it, so that no flickering
	is observed.

	* progwindow-X.c (on_close_all_activate): added menu item in the
	main menu to close all the unmodified opened sequences.
	(on_close_all_no_save_activate): added menu item in the main menu
	to close with no save all the opened sequences.

	* progresources-X.c
	(prog_resources_wnd_show_choose_directory_window): now has a
	parameter holding a string to put as a title to the file selection
	window so that the user knows which directory he is choosing.
	(prog_resources_wnd_show_choose_directory_window): now effectively
	calls the proper function when CANCEL button is clicked upon, thus
	not erasing the text entry for which the file selection window was
	called.

2002-04-22  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole_project: release 0.09

	* documentation: removed the polyXmass.pdf file from the
	distribution. This file (very heavy file) has minor changes
	between a version and the other, and will be distributed as a
	standalone file. The package will have all the tex and other files
	required to construct (using pdflatex) the pdf file.

	* globals.c (pxm_log_error): the error log file is now in the
	working directory of the user, as pointed to by the str_workDir
	string.

2002-04-20  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* progresources-X.c
	(prog_resources_wnd_set_directories_data_to_entries): added a page
	in the prog resources window where the user can graphically define
	the directories where he wants that the program search for
	data. The reading/storage of these resource data is handled using
	the gnome_config_... () functions.

	* init.c (pxm_init_user_data): removed the old set of function
	calls that used to retrieve config data from the ressource
	files. Replaced them by the much more elegant versions of the
	gnome_config_get... series.

2002-04-19  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole_project (configure.in) Corrected a glitch by which when
	the configure script is run without the --prefix option, the
	prefix was not set to "/usr/local" by default, leading to an
	invalid AC_INSTALL_PATH value defined in config.h. This
	AC_INSTALL_PATH is the holder of the install directory for use in
	the whole program.

2002-04-19  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole_project (everywhere_needed): replaced "ressource" with
	"resource" wherever this typo occurred. Thanks Kurt.

2002-04-18  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* progconsole-X.c (on_prog_console_window_view_activate): added a
	submenu in the "View" submenu in the main menu to allow the user
	to re-display the console window if it was previously closed.

	* editpolseqprop-X.c (on_polseq_prop_edit_activate): added this
	pair of files to handle the window in which the user can view/edit
	the name/code/comment of the polymer sequence which is currently
	active. Added a new "Edit" submenu in the main menu.

2002-04-17  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole_project: release 0.08
	
	* init.c (pxm_init_prog): The str_installDir now uses the
	autoconf-declared AC_INSTALL_PATH value which reflects the
	directory that was passed to the configure script using the
	--prefix= option. If no option was given the install directory
	defaults to "/usr/local" according to the GNU autotools
	standards. This allows to install the program in whatever
	directory and removes the obligation that the installation is
	performed by a priviledged user or that the /etc/polyXmassrc file
	be edited by a priviledged user. Any user may install and run the
	program in his home directory (note that this applies only to the
	source tarball; the rpm packages are not relocatable and have to
	be installed into "/usr").
	
	* polyxmass.c (main): corrected a bug in which a string
	corresponding to an argument on the command line was freed without
	being duplicated first, thus leading to a segfault.

2002-04-16  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* about-X.c (setup_about_dialog): added a page to the about window
	notebook in order to display the contents of the THANKS
	file. Taken the opportunity to fix a small memory leak.

2002-04-13  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole_project (any_relevant_file): removed the use of any
	"polyXmass" string in any action in the code. Each time this
	string is required it is synthesized through the use of the
	globally defined PACKAGE def, which comes from the configure.in
	file in the first place. A particularly heavy task was the
	rewriting of the functions responsible for writing XML data, since
	the string "polyXmass" is part of each element as the namespace
	descriminator. The documentation was updated also from this point
	of view. The whole project should now be pretty fully automatable
	from a autotools point of view.
	
	* progressources-X.c: removed the proggenoptions files and
	replaced them with this set. Changed the menu from options to 
	ressources also.

2002-04-12  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole_project (any_relevant_file): removed the PXM_RELEASE stuff
	from configure.in and all other locations, as it has not proven
	any useful. Rather it introduced inconsistencies with the rpm
	packet managing which uses the release in a decoupled way with
	respect of the tar.gz file (many rpm releases are done using one
	same tar.gz source tarball).

	* init.c (pxm_init_prog): now use g_get_current_dir () of glib to
	get the current directory string (much better than using the
	g_getenv ("PWD") call).

2002-04-10  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* globals.c (pxm_log_error): added the date to the string that is
	written to the error logfile, so that the user knows when a
	message was logged.
	(pxm_log_critical): added the date to the string that is
	written to the error logfile, so that the user knows when a
	message was logged.

2002-04-09  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* init.c (pxm_check_user_ressource_dir_and_file): added a number
	of functions which must check that the user has a ".polyxmassrc.d"
	ressource directory in his $HOME directory. If not, the directory
	is created. Next the program must check that in this user's
	ressource directory a "polyxmassrc" is found. If not this file is
	created with default values for a number of ressource
	data. Finally, the course of the program initialization continues
	the usual way, by reading the "polyxmassrc" ressource file in the
	".polyxmassrc.d" ressource directory. This ensures that a uniform
	program behaviour is achieved whenever the user runs the program
	for the first time or not.

	* globals.c (write_and_free_key_value_pairs_array_to_file):
	brought several improvements to this function so that each line in
	the configuration file is guaranteed to be ended with a newline
	character. The last line in the configuration file also.
	(write_key_value_to_file): made corrections so that when a line is
	written to the file, it is guaranteed to be newline
	character-terminated.

2002-04-08  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole_project (every_fputs_function_return_value_check): I used
	to use the "if(result <= 0)" test to check the result from a call
	to fputs () when writing a string to file. But this function
	returns EOF when an error occurred, and EOF is #define (-1). This
	is why I changed at every such occurrence the "if(result <= 0)" to
	"if(result < 0)", so that if 0 is returned it is not considered an
	error. This is because I suspect that the Mac OS X's libc returns
	0 in some non-erroneous cases.

	* whole_project (polymer_data): corrected in the example polymer
	definition files the name of the polymer definition and the file
	name itself with respect to the corresponding line in the
	polymer.dic file.

	* whole_project (general_program_philosophy): I will start soon
	the full "Gnomification" of polyXmass. This is to take profit of
	the Gnome infrastructure which will bring to polyXmass a wealth of
	functionalities useful to make its use a more pleasant experience.
	
	* init.c (pxm_init_user_data): Changed the user's configuration
	file location. It was ".polyxmassrc" in $HOME, now it is
	"polyxmassrc" in a hidden directory:
	"$HOME/.polyxmassrc.d/polyxmassrc". The hidden directory will from
	now on only contain non-hidden files, and as many configuration
	files as needed. In the future, if the program is "Gnomified", the
	".polyxmassrc.d" directory will be located in "$HOME/.gnome".

	* proggenoptions-X.c
	(prog_genoptions_wnd_apply_num_formats_button): For now I have
	added the ability for the user to configure the way numerical data
	are to be displayed. The handling is performed through the
	standard C library printf () -like format strings that the user
	defines for the atom data, for the polymer masses, for the
	oligomer masses, the monomer masses and the fragomer
	masses. Default values are preset in the program if the
	.polyxmassrc file does not exist.

2002-04-02  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* proggenoptions-X.c (on_prefs_prog_genoptions_config_activate):
	added this pair of proggenoptions-X.[ch] new files in which all
	the user's .polyxmassrc file configuration data handling is going
	to be installed.

2002-03-28  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* init.c (pxm_init_prog): added the popt options' parsing
	feature. The program is now able to open as many files as given in
	the command line. Error checking insures that these files are
	effectively there. The dependency is libpopt.
	(pxm_init_prog): changed the call to gnome_init () to a call to
	gnome_init_with_popt_table ().

2002-03-26  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole_project.c (whole_project): Initialized to NULL absolutely
	all the pointers during their declaration, if not initialized
	immediately. This is to minimized alignment problem when polyXmass
	is compiled and executed on other non GNU/Linux platforms.

	* whole_project.c (whole_project): Removed the chembridge handling
	from the cutpolymer and related files. This feature was
	ill-designed, and I have to work on it much more to have a nice
	feature. For the moment the chembridge feature is only taken into
	account in the mass calculation for the whole polymer and if a
	selected polymer sequence region has an intra-oligomer bridge.

2002-03-26  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole_project.c (whole_project): changed every occurrence of the
	getline () function with the fgets () one. This is for better
	portability to non-GNU systems.

	* initpolseq-X.c (init_polseq_creation): fixed a bug due to not
	duplicating a string before setting it as a gtk object data with
	g_free as a callback function. Now polymer sequence creation
	should work.

2002-03-25  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* prop.c (prop_find_in_GPA_with_cmp_func): corrected a bug that
	lead in some circumstances to an infinite loop because iter would
	always be 0.

2002-03-24  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* seqeditor-X.c (whole_file_in_pixbuf_related_functions): totally
	rewrote all the pixbuf-generating functions (the ones for creating
	NON-modified monomer pixbufs as the ones for creating composited
	transparent/opaque modified monomer pixbufs). Thus modularized the
	process of allocating/modifying pixbufs and eliminated serious
	memory leaks. Thanks memprof.

2002-03-23  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* seqeditor-X.c (seqed_modify_monicon_at_idx): fixed a memory leak
	due to not freeing an allocated string that served as the key to a
	g_datalist_set_data () call. Thanks memprof.

2002-03-21  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* composition-X.c (polseq_compos_window_eventDelete): fixed a
	memory leak due to not freeing the array of monomer instances
	which holds the polymer monomer composition.

	* whole_project (compilation_flags): added a CFLAGS definition in
	the configure.in file, so that the whole project gets compiled
	with the proper flags. Also, added the "`xml2-config --cflags`" to
	the INCLUDES definition in the src/Makefile.am so that the
	compilation occurs properly with respect to inclusion of the
	/usr/include/libxml2/libxml/..h files (thanks Daniel Veillard for
	kindly answering a question about the "structure has no 'children'
	member" error after upgrading to libxml2-2.4.18).

	* parseformula.c (parse_formula_in_symbcount_GPA): switched all
	the formula parsing system from GSList to GPtrArray, which I find
	much more intuitive and easy to use. Big work to make the needed
	changes, as the program is very formula parsing
	functions-intensive and there are calls to these formula parsing
	functions everywhere. Seems OK... should be tested well.

	* chembridge-X.c (on_intrapolymer_chembridge_activate): added a
	new menu to let the user manage the chemical bridges in the
	polymer sequence graphically. The chembridge-X.[ch] files hold all
	what is necessary to view/edit/add/remove chemical bridges in the
	polymer sequence. A number of functions added for this purpose.

	* chembridge.c (chembridge_monomer_partners_new): added two
	parameters to receive the index of the monomer partners as this
	may be of interest in some occasions.

2002-03-20  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* chembridge.h (struct _chembridge): removed str_actionformula
	member from the chembridge struct, since the str_name name should
	be a modif instance's str_name member from which to get access to
	the str_actionformula. This means that a chembridge is nothing
	else than a modif instance with an str_actionformula responsible
	for the bridging of two monomers. Changed the chembridge reading
	plugin accordingly and all relevant functions also. ATTENTION,
	this means that the polymer sequence files that included
	MONOMER_CHEMBRIDGE elements have now one sub-element more than
	required (the sub-element holding the action-formula should be
	removed from the MONOMER_CHEMBRIDGE element, otherwise this new
	version will crash.

2002-03-18  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* seqedkbd-X.c (seqed_wnd_key_press_event): moved this function
	from seqeditor-X.c to seqedkbd-X.c.
	(seqed_wnd_key_release_event): moved this function
	from seqeditor-X.c to seqedkbd-X.c.

2002-03-15  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* fsconfig-X.c (fsconfig_pixmaps_dic_append_button): corrected a
	bug in which the pixmaps.dic's list validation procedure
	mistakenly checked that the graphic operations "T" or "O" were
	identical to the str_modif member string of xpmfilespecif and not
	str_action, so that it was never correct.
	(fsconfig_pixmaps_dic_insert_button): exactly same as above.

2002-03-15  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* searchmass-polseq-X.c (search_masses_polseq_xwin): fixed small
	memory leak due to not freeing 1 instance of each monoavg, calcopt
	and cutopt structure after the mass search process has finished
	-these are ancillary structures. Thanks memprof.

2002-03-14  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* poldefedit-X.c (on_poldef_write_OK_clicked): fixed small memory
	leak due to not freeing the old filename of the polymer definition
	context upon saving as a new file. Thanks memprof.

	* globals.c (duplicate_text_files_from_open_descriptors): fixed a
	memory leak due to not freeing the allocated string in which each
	file line is read using the getline () GNU mechanism. Thanks
	memprof.

	* fsconfig-X.c (fsconfig_polymer_dic_refresh_file_list_button):
	removed a string duplication which later was not freed. Thanks
	memprof.
	(fsconfig_polymer_dic_refresh_file_list_button): fixed a memory
	leak due to non-required string duplication and not freeing the
	string. Thanks memprof.

	* contexts.c (poldefctxt_free): added a final call to g_free () so
	that the poldefctxt structure itself is freed after all its
	members. Thanks memprof.

	* atomedit-X.c (atomctreedata_free): fixed a memory leak due to
	not actually freeing the atomctreedata passed as parameter. Atom
	editing/displaying is now memory leak-free.

2002-03-14  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* fragpolymer-X.c (fragpol_fragopt_wnd_init_window): this window is
	now automatically closed when the sequence editor corresponding to
	the polymer context for which it was opened is closed. Before the
	dependency was on the polymer definition context, which was not
	intuitive.

	* whole_project: bunch of tiny memory leaks fixed. Memprof no more
	detects memory leaks with all the allocations related to the
	following tasks:
	
	- polymer definition loading, parsing/polymer sequence
	loading/displaying.

	- polymer cleavage-generated oligomers

	- polymer fragmentation-generated fragomers
	
	* fragpolymer.c (fragomer_make_name_in_prop): removed a little
	memory leak, detected with memprof, due to duplicating a string
	and not freeing the template one. Changed so that no duplication
	is required anymore.

2002-03-13  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* cutpolymer-X.c (cutpol_cutopt_wnd_init_window): this window is
	now automatically closed when the sequence editor corresponding to
	the polymer context for which it was opened is closed. Before the
	dependency was on the polymer definition context, which was not
	intuitive. Fixed a memory leak when the prop was not freed itself,
	have having successfully freed its name and the p_data member
	(which is the cutting options window).

	* massformulautil.c (prop_monoavg_free): fixed a memory leak due
	to not freeing the prop instance itself, after having freed
	sucessfuly the str_name and p_data members of the prop.

2002-03-12  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* massformulautil.c (leftrightrule_free): added a call to g_free
	() onto the leftrightrule itself after having freed its allocated
	members.

2002-03-07  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole_project: bunch of tiny memory leaks fixed.
	
	* progwindow-X.*: new set of [ch] files by renaming appwindow-X.*
	
	* progconsole-X.*: new set of [ch] files by renaming appconsole-X.*
	
	* fsconfig-X.*: added the pair fsconfig-X.[ch] files to hold all
	the polyXmass filesystem configuration mechanisms. The editing of
	both polymer.dic and pixmaps.dic files is now feasible through a
	graphical interface.

2002-03-05  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* init.c (pxm_allocate_GPAs): make a call to
	calcmass_big_molecule_with_all_atoms () to compute the masses for
	the formula returned by ag_molecule_made_with_one_of_every_element
	().

	* atom.c (ag_molecule_made_with_one_of_every_element): added this
	useful function -in debugging situations- to compute a huge
	formula with one of every atom available to the program.

	* atomedit-X.c (atom_edit_wnd_tree_column_title_click): Switched
	to contextual menu for mass/error sorting instead of relying on
	column title button clicking. More intuitive and reliable. Also
	freeze/thaw the tree so that no flicking is observed during the
	sorting of the columnar data. Using the debugging functions
	calcmass_big_molecule_with_all_atoms () and
	ag_molecule_made_with_one_of_every_element (), checked that
	nothing else did change in the way the atoms are saved to disk.

	* searchmass-polseq-X.c
	(search_mass_polseq_tree_column_title_click): Switched to
	contextual menu for mass/error sorting instead of relying on
	column title button clicking. More intuitive and reliable.


2002-03-04  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* seqeditor-X.c (seqed_get_monicon_size_poltype): added a check
	that the line read from the pixmaps.dic does not start with '#',
	which is a comment.

	* readseq.c (open_seq_file_with_filename): better error checking
	during the many steps involved in the loading of a new polymer
	sequence.

2002-03-01  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* loadxmer.c (load_test_xmer_data): added this function which does
	the same as load_xmer_data, unless it does not issue warning
	messages. It just returns ERR_ERR or ERR_NOERR. Used for checking
	that polymer definition files are well-formed, and not because we
	want to indeed load a polymer definition file for doing chemistry.

	* globals.c (is_xml_format_file): added this function just to
	check if the first line in a file has the XML declaration (<?xml
	version="1.0"?>) without going to much in the details with the
	xml_parse stuff. This is to be very quick and to make the economy
	of a bunch of messages saying that parsing was wrong.

	* init.c (pxm_init_user_data): all the p_userdata file/dir names
	are now absolute. This eases very much the filesystem
	configuration stuff. The little memory cost is very much worth
	it. This is done upon parsing of the polymer.dic file, when a
	polymer definition context is created, by using the str_configDir
	member of the userdata structure, which is appended with the
	file/dir names from the lines of polymer.dic.

2002-02-28  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* globals-X.c (fill_xpmfilespecif_GPA_from_dict): corrected little
	memory leak: did not free a string if an error occurred in the
	function. Corrected a file stream not being closed if an error
	occured the function.

2002-02-28  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* globals.c (parse_xpmfilespecif_line_poldef_data): added, parses
	lines like "protein=protein.dat|prot-dir" from the polymer.dic
	configuration file. During this parsing allocates new polcfgspecif
	instances and adds these to the array passed as parameter.

	* globals.h (struct _polcfgspecif): added this new structure to
	hold the configuration data for a given polymer definition
	name. Three gchar* dynamically allocated to hold the polymer
	definition name, file and monomer pixmaps directory. Remove the
	str_polymerType, str_xpmDir correspondent members from the
	poldefctxt structure; thus made all the verifications and
	replacements in the code tree.

2002-02-27  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* writeseq.c (on_sequence_write_OK_clicked): when a sequence is
	saved under another name, the filename is updated in the sequence
	editor window title.

2002-02-27  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* seqeditor-X.c (seqed_toggle_dirty): now this function first set
	the polymerctxt->is_dirty to the gboolean passed as parameter,
	next uses this variable to set_active the checkbox in the
	seqeditor window.

2002-02-26  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* appwindow-X.c (on_prog_wnd_delete_event): first checks if at
	least one polymerctxt is dirty or not. If so opens a dialog
	(modal) asking if the user wants to exit anyway.

	* contexts.h (struct _polymerctxt): added gboolean is_dirty to
	store the state of the polymerctxt. is_dirty is TRUE if the
	polymerctxt has been modified, FALSE otherwise.

2002-02-26  Filippo Rusconi  <f dot rusconi at lptc dot u-bordeaux dot fr>

	* contexts.h (struct _seqedctxt): removed the isWaitingForClose
	member which is no more in use since a long time.
	
2002-02-24  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* init.c (pxm_init_user_data): now checks if the program is run as
	"root". If so alerts the user and exits.

	* searchmass-polseq-X.c (whole_file): fixed a number of
	non-critical things, like not opening any window if nothing is to
	be displayed in it. Also fixed the non-creation of an array if it
	is empty, so that emtpy lines do not show in the GtkCTree widget.
	
	* fragpolymer-X.c (mass-search-stuff): fixed a number of
	non-critical things, like not opening any window if nothing is to
	be displayed in it. Also fixed the non-creation of an array if it
	is empty, so that emtpy lines do not show in the GtkCTree widget.

	* cutpolymer-X.c (mass-search-stuff): fixed a number of
	non-critical things, like not opening any window if nothing is to
	be displayed in it. Also fixed the non-creation of an array if it
	is empty, so that emtpy lines do not show in the GtkCTree widget.

	* fragpolymer-X.c (whole_file): great rewriting of all the stuff
	in this file, because now three aspects are treated in this file:
	fragmenting a polymer, displaying the obtained fragomers in a new
	window, allowing mass search activity from this new window,
	searching masses in the array of fragomers and finally display of
	the found fragomers. Preliminary testing of the [search
	mass(es)/display found fragomers] functions indicates that it is
	OK. Certainly needs further testing.

2002-02-23  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* searchmass-polseq-X.c (whole_file): this newly added file
	contains all the functionality needed to search masses in a
	polymer sequence (AND NOT in an array of preexistent oligomers,
	which is WELL DIFFERENT). Preliminary testing seems to indicate
	that is OK. Certainly needs further testing.

	* cutpolymer-X.c (whole_file): great rewriting of all the stuff in
	this file, because now three aspects are treated in this file:
	cutting a polymer, displaying the obtained oligomers in a new
	window, allowing mass search activity from this new window,
	searching masses in the array of oligomers and finally display of
	the found oligomers. Preliminary testing of the [search
	mass(es)/display found oligomers] functions indicates that it is
	OK. Certainly needs further testing.

2002-02-22  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* oligomer.h (struct _oligomer): added a str_name gchar * to the
	structure and made modifications where required in order to
	reflect this new allocated string member.

	* oligomer.c (oligomer_dup): added this function, it is a deep
	duplicating function, because the array of prop instances is fully
	duplicated also.

	* prop.c (prop_GPA_dup): added this function because it was needed
	in the oligomer_dup () function. It might be used also somewhere
	else in the future.

	* fragpolymer.h: removed function frag_polymer_from_monomer_GPA ()
	since now the sequence cannot be in the form of a string, so we do
	not need any intermediate function to construct a GPtrArray of
	monomer's if the sequence is in a string form.

	* cutpolymer.h: removed function cut_polymer_from_monomer_GPA ()
	since now the sequence cannot be in the form of a string, so we do
	not need any intermediate function to construct a GPtrArray of
	monomer's if the sequence is in a string form.

	* polymer.h (struct _polymer): removed the str_seq member and made
	all the changes in the whole project to reflect this. From now on,
	a polymer sequence only exists as an ordered set of monomer
	instances in the p_monomerGPA GPtrArray that belongs to a polymer
	instance.

	* init.c (pxm_init_prog): moved the setlocale () calls to the end
	of this function, and namely after the gnome_init () call, which
	apparently overrode my setlocale () calls, which left these calls
	with no effect. Now finally the setlocale () "C" are taken into
	account, and my numbers are correctly POSIXLY displayed even if my
	LC_LANG is fr_FR!

2002-02-19  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* calcmass.c (incdecmass_formula): corrected a memory leak due to
	not calling g_free () on each allocated symbcount element that
	sits in the GSList that's used for calculating the mass of a
	formula. This leak was particularly visible when a huge amount of
	formulae had to be evaluated, as when a mass is searched in the
	polymer sequence.

2002-02-15  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* cutpolymer.c (fill_oligomer_GPA_with_cutpos_GA): removed an
	oligomer allocation which did not serve any purpose. This was a
	memory leak.

2002-02-13  Filippo Rusconi <f rusconi lptc u-bordeaux fr>

	* searchmass.h (struct _searchmass): added this new structure to
	hold the mass to search for, the type avg or mono and the
	tolerance. Wrote the usual allocating and freeing ancillary
	functions.

2002-02-13  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* searchmass-X.c (search_mass_options_wnd_search_button): among
	other functions, this new one is responsible for preparing the
	field to the mass search process. Still in early stage.

	* globals.c (pxm_strtod): added code to make sure the string to
	convert does not contain characters different than
	"0123456789.+-", and to make sure that the ".-+" characters are
	present only once. Once this has been checked the function is
	unchanged.

2002-02-12  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* searchmass-X.c: added this new file pair [ch] to hold functions
	pertaining to the displaying of mass search results.

	* searchmass.c: added this new file pair [ch] to hold data
	structures and functions pertaining to mass search facilities both
	in the polymer sequence and in arrays of oligomers/fragomers.

2002-02-12  Filippo Rusconi <f rusconi lptc u-bordeaux fr>

	* calcmass.c (ionize_with_ionizerule_and_level): removed
	G_LOG_LEVEL_MESSAGE that informed that an ionization level of 0
	was requested.

2002-02-08  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* seqeditor-X.c (seqed_modify_monicon_at_idx): corrected a bug in
	which the last monomer could not be modified intrinsically because
	of if (idx >= p_monomerGPA->len - 1) return ERR_ERR. Removed the
	"- 1". But then in the same function we had to add a test to
	determine if the idx at which a new monicon was to be added was
	equal or not to the length of the monicon array. If so do no use
	insert, but add.
	(seqed_unmodify_monicon_at_idx): corrected a bug in which the last
	monomer could not be modified intrinsically because of if (idx >=
	p_monomerGPA->len - 1) return ERR_ERR. Removed the "- 1". But then
	in the same function we had to add a test to determine if the idx
	at which a new monicon was to be added was equal or not to the
	length of the monicon array. If so do no use insert, but add.

	* intrmodif-X.c (intrmodif_wnd_unmodify_button_handler): now each
	modify/unmodify button has its callback function because relying
	on the button's label to know which button did call the sole
	handler function is not secure enough with translations
	starting...
	(intrmodif_wnd_modify_button_handler): now each modify/unmodify
	button has its callback function because relying on the button's
	label to know which button did call the sole handler function is
	not secure enough with translations starting...

	* permmodif-X.c (permmodif_wnd_unmodify_button_handler): now each
	modify/unmodify button has its callback function because relying
	on the button's label to know which button did call the sole
	handler function is not secure enough with translations
	starting...
	(permmodif_wnd_modify_button_handler): now each modify/unmodify
	button has its callback function because relying on the button's
	label to know which button did call the sole handler function is
	not secure enough with translations starting...

2002-01-26  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* calcmass.c (calcmass_oligomer_from_string_data): removed this
	function which is not useful. Now, the existence of data in the
	polymer's array of monomers is made at the beginning of the mass
	computation process, and if this array is NULL/empty and the
	str_seq member is not, the string sequence is used to fill the
	empty array. That's all. Look in
	calcmass_oligomer_with_polymer_data () the call to
	fill_monomer_GPA_from_string () is selfexplanatory.

2002-01-25  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* calcmass.c (calcmass_oligomer_from_GPA_data): corrected a bug in
	the calculation of the masses for oligomers that are generated
	with leftrightrule after cleavage, like with CyanogenBromide. The
	identity of the monomer sitting at the left end or the right end
	of the generated oligomer was performed by using the indexes in
	p_calcopt, while we know that the endIdx of p_calcopt corresponds
	to p_oligomer->endIdx +1. So, when you expect that the right end
	monomer of an oligomer "M" is 'M', you find that it is 'A',
	because the parent polymer sequence is "MAMIS...", and
	p_calcopt->endIdx = 0+1, so 'A', and since the leftrightrule
	stipulates that if the right end monomer is 'M' an actionformula
	should be applied, you discover that it is not. So changed
	p_monomer = g_ptr_array_index (p_polymer->p_monomerGPA,
	p_calcopt->startIdx); to p_monomer = g_ptr_array_index
	(p_polymer->p_monomerGPA, p_oligomer->startIdx); and the same for
	endIdx.

2002-01-21  Filippo Rusconi <f rusconi lptc u-bordeaux fr>

	* seqedkbd-X.c (seqed_kbd_alpha_char_handler): corrected editor
	error message entry behaviour forgetting to erase an error message
	when an error is corrected. Now, when a valid code character is
	entered, the previous error message is erased, so the messages are
	more "in-context".

	* monomerutil.c (get_monomer_idx_in_array_with_code): changed the
	function name is_monomer_in_array_with_code () to this one, since
	it now returns the index of the found monomer in the array passed
	as parameter.

	* contexts.c (is_monomer_code_valid): now checks the value
	returned by is_monomer_in_array_with_code () in order to know if
	return TRUE or FALSE.

	* seqedkbd-X.c (seqed_force_completion_building_code): changed the
	function body to force completion of a building code to the sole
	valid monomer code available. For example if typed "Gl" and
	available codes are "G", "Gl", "Gly", "Gar", then "Gl" being valid
	is evaluated without bothering with checking other available
	completions. This function thus solely matches exactly the
	building code.
	(seqed_check_completions_building_code): This function now does
	exactly what the seqed_force_completion_building_code () used to
	do. It now checks for all the available completions for a given
	building code. If more than one completion is available, (in the
	case above, two completions are available "Gl" and "Gly") a list
	of completions is displayed to the user so he can choose the right
	one.

	* monomerutil.c (is_monomer_in_array_with_code): now returns the
	index of the found monomer, and not TRUE or FALSE. If no monomer
	is found, returns -1

2002-01-13  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* init.c (pxm_init_user_data): corrected bug because initially
	thought that g_get_home_dir () allocates memory for the returned
	string. But it does not seem, so g_strdup () or g_strdup_printf ()
	is required.
	(pxm_init_user_data): in the .polyxmassrc private configuration
	file, "default" is now allowed for the UserWorkDir, UserDataDir,
	UserConfigDir, UserGladeDir keys. The initialization function will
	replace for these "default"s, the following values respectively:
	$HOME (using g_get_home_dir ()),
	installDir/share/polyxmass/sequences,
	installDir/share/polyxmass/config,
	installDir/share/polyxmass/glade-interface. Note that "installDir"
	if found in /etc/polyxmassrc. The same values are set if the
	private configuration file is not found.

	* initpolseq-X.c (init_polseq_creation): calls to g_strstrip ()
	now ensure that in the example line "protein =
	polyxmass-prot.dat", the spaces get eliminated thus being more
	foolproof than if we had to rely on the user not to put spaces
	around '='.

	* globals.c (ag_value_from_key_and_filename): the spaces around
	the '=' are no more meaningful, since a call to g_strstrip ()
	removes the spaces preceding and following the value.

2002-01-11  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* poldefedit-X.c (on_poldef_read_OK_clicked): added a check to
	verify if the string returned by gtk_file_selection_get_filename
	() is a directory with or without file name in the end. This
	check, along with action taken prevents a crash if user selects an
	empty filename "".

2002-01-10  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* fragpolymer-X.c (init_fragmentation_options_wnd): now this
	function receives from the on_polymer_fragmentation_activate ()
	function two more parameters, respectively the start position of
	the selection in the sequence editor (defining the oligomer to
	fragment) and the end position (note we say position and not
	indices!), so that it can display these values in the GtkEntrys in
	the fragmentation options window.

2002-01-09  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* seqeditor-X.c (seqed_display_polymer_sequence): at the end of
	displaying a loaded polymer sequence, now this function checks if
	there are permanent modifications. If so their name is displayed
	in new GtkEntry widgets at the bottom of the sequence editor
	window.

	* permmodif-X.c (on_permanent_modif_activate): wrote all the code
	pertaining to permanent modification of polymer sequences. This
	includes adding four new files: permmodif-X.[ch] and
	permmodif.[ch].

2002-01-08  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* globals-X.c (pxm_quickmessage): added this interesting
	all-purpose message displaying function in which up to three
	buttons can be displayed with customized labels and customized
	callback functions... An example of how to use it is in
	seqeditor-X.c.

	* whole_project: I've been working very hard on the documentation
	of the program and have rewritten a great many parts of the
	fragmentations code, after having found more elegant solutions
	with fragrules... during writing of the manual.
	
	* writeseq.c (on_save_sequence_activate): wrote this function. Now
	saves correctly the sequence upon clicking of the sequence save
	menu. Makes a backup copy of the file by appending ~ to the
	filename.
	(on_save_sequence_as_activate): same as above, but opens a
	fileselection window for the user to select a filename. If the
	selected filename corresponds to an existing file, makes a backup
	copy of the file by appending ~ to the filename.
	(on_sequence_write_OK_clicked): helper function which actually
	saves the polymer sequence to file by calling write_seq_file ()
	which exists already in the code since some time, but was unused.

	* seqeditor-X.c (seqed_wnd_delete_event): now when a sequence
	editor window is asked to be closed, the program checks if the
	sequence is dirty. If so it asks if it should be saved.

2001-11-23  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* intrinsmodif-X.c (intrinsic_modif_wnd_apply_modif_button): after
	a longish work, the modification process has been well started
	coding. First the X window interface, and now starting the process
	by which the modification is propagated in the polymer sequence
	according to monomer specification requirements.

2001-11-15  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* readseq.c: corrected incorrect behaviour of the file selection
	window when asking file name to open sequence. Now, if the
	filename (only name, no path) is zero-length the window remains
	open and a MESSAGE message is displayed to inform that the
	selection is bad. Then the function returns ERR_NOERR.

2001-11-06  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* contexts.c (seqed_get_sel_idces_loosy): corrected a bug which
	made not updatable the mass values in the selected sequence mass
	data. When no sequence is acutally selected the sel_monomerIdx1 is
	now set to -1 and not 0.

2001-11-03  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* fragpolymer.c (fragomer_mass_account_for_fragrule): tested the
	generation of fragments with fragrules in fragspecifs, with
	different combinations of thisCode/prevCode/nextCode with LC and
	RC fragments. Corrected a few bugs and now seems to compute masses
	correctly even taking into account the monomer modifs.

2001-11-02  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* fragspecif.h (struct _fragrule): added str_name to structure
	fragrule, since I found that it might be possible that two
	fragrules have the same str_thisCode and I wanted a means to
	unequivocally identify fragrule instances. When a polymer type
	definition file is loaded or written it is ensured that all the
	fragrule instances of a fragspecif instance have different names.

	* poldefedit-X.c (all_fragspecif_and_fragrule_functions): enabled
	the polymer type definition window to define fragspecif instances
	along with any fragrule specif. Saves the new data. Tested a bit,
	seems reliable.

2001-10-30  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* prop.c (prop_GPA_free): corrected a bug due to trying to remove
	two times a chembridge prop from the array in which it was,
	forgetting that a chembridge prop instance autoremoves itself from
	the array in which it is upon freeing of the monomer that contains
	it...

2001-10-29  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* prop.c (prop_name_data_both_strings_new): added assignments to
	the default stringdata dup/cmp/free functions for the relative
	custom function pointers, since both name and data are
	strings. The problem arose because upon freeing of oligomers (many
	functions called this one) we saw prop_free () complaining that no
	custom freeing function was defined.

	* fragpolymer-X.c (frag_xxxxx_column_header_click): added sorting
	capabilities to all the columns of the GtkCTree that displays de
	fragomers. Works OK.

	* fragspecif.h: add a str_comment member gchar* to both the
	fragspecif and fragrule structures to allow the user to explain
	the specifics of a given fragspecif or of a given
	fragrule. Updated all the relevant functions that dealt with the
	two struct. Eliminated from the fragspecif struct the uptoidx
	member which did not serve any purpose. Also updated the document
	type definition of the polyxmass-xxx.dat xml files.

	* globals-X.h: added this pair of files to act exactly as
	globals.h but for the X window stuff.

2001-10-28  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* monomerutil.c (is_code_in_codes_delimstring): changed from
	is_code_in_codes_string because it tells better that the string in
	which to check for presence of the code is a delimited string (by
	default the delimiter is '@'.

2001-10-24  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* fragspecif.c (fragspecif_dup): added deep-copy-duplication
	functions for fragspecif and fragrule structures.

	* loadxmer.c (polymer_handler): added code to handle the reading
	of the "fragspecifsection" element from a polymer definition xml
	file.

	* fragpolymer.h: added this file, which is the fragmentation
	counterpart to the cutpolymer one.

	* loadfragspecif.c (fragspecif_section_handler): new file to deal
	with the loading of fragspecif data from xml file data.

	* globals.h (enum): added two enums to store constant values:
	FRAG_WHICH_CAP and FRAG_UPTOIDX in the fragmentation context.

	* fragspecif.c (fragspecif_free): added this new file that holds
	the basic data description and functionalities for the fragspecif
	and fragrule new structures.

2001-10-23  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* fragspecifutil.c (fragspecif_GPA_free): added this new file to
	hold utility functions for fragmentations.

	* contexts.h (struct _poldefctxt): added a new p_fragspecifGPA
	array of fragspecif instances member. Going to check all the code
	for required changes.

	* loadcleavespecif.c (leftrightrule_section_handler): tidied the
	code, use of g_strdup () in place of g_malloc ()...

2001-10-21  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* calcmass.c (calcmass_oligomer_from_GPA_data): better error
	checking for the leftrightrule accounting process.
	(calcmass_oligomer_from_string_data): better error checking for
	the leftrightrule accounting process.

2001-10-20  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* prop.c (prop_GPA_free): corrected a bug in which the prop
	objects of the array were first removed from the array and next
	freed. But this is one rare circumstance where this is not
	possible, because for example with chembridge properties, it is
	still necessary that the prop be in the array at the moment it is
	freed. See prop_chembridge_free_full () to grasp the details.
	
	* chembridge.c (prop_chembridge_free_full): corrected a bug with
	freeing the name before using it to search the prop instances in
	the partner monomers' array of prop instances: does not make sense
	to destroy a hook that you'll need later!

2001-10-19  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* prop.c (prop_find_in_GPA_with_cmp_func): corrected a bug that
	crept when I changed the parameters to the custom prop data
	comparison function. There was still the two DATA, DATA parameters
	that used to be there. I removed one, and now it works. This is
	because, there is only one parameter now in the prototype,
	indicating what is to be compare in the prop instance.

	* whole_project: continued documentation and from place to place
	changed some parameters' names for consistency... cosmetic
	changes.
	
	* prop.c: profoundly reworked the system of custom function
	definition for prop objects containing complex structures as their
	p_data member pointer. Eliminated a huge number of accessory
	function (all the ones called
	allocset_something_to_something_from_something () that were not
	used. Changed in the whole code all the occurrences of function
	calls no longer valid. Simplified considerably the parameter
	system for the custom freeing function (now only pass a pointer to
	a prop instance), compare function (now pass only a parameter to
	indicate what is to be compared, name or data, and two pointers to
	prop)...

2001-10-17  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* modifutil.c (modif_GPA_free): changed the parameter from pointer
	to pointer to GPtrArray to pointer to GPtrArray.

2001-10-14  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* loadmonomer.c (monomer_load_data): moved from loadxmer.[ch] to a
	new file, loadmonomer.[ch] to augment modularity.

2001-10-05  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole-project: started the process of adding the support in the
	project for the Gtk-Doc-Sys. The HTML layout of this system is
	really very good so I decided that I wanted to come back to
	it. This corresponds to a major documentation rewrite, but this is
	good, since the first one was too badly done. I'll also need to
	change a number of function names since they are too long for the
	documentation system. This is not bad for the project !

	* init.c (pxm_init_user_data): rewrote all the configuration
	loading procedure. Also modified the way the installation
	directory (/usr or /usr/local or whatever) is stored for use by
	the program when running : a file /etc/polyxmassrc is written with
	this information both from the make install and from the rpm -ivh
	(see polyxmass.spec file for details and the top_src_dir
	Makefile.am for details). NOW I'm ready to make an import. But
	I'll have to be careful with all the binary graphic and other
	files in the import tree...

2001-10-04  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* seqeditor.c (sel_polygon_event): corrected a bug for which there
	was no update of the label giving the monomer under the cursor
	(without clicking) if the cursor was on top of a selected region
	of the polymer sequence.

	* cleavespecifutil.c (parse_monomer_codes_in_motif): corrected a
	bug that crept out in "more than 1-letter code mode" polymer's
	because the string in elongation while parsing the monomer code
	was not null terminated. This string is now completely filled with
	'\x0' chars before beginning the work, with a call memset
	(str_newCode, '\x0', MAX_MONOMER_CODE_LEN+1) ;

2001-10-04  Filippo Rusconi <f rusconi at lptc u-bordeaux fr>

	* globals.c (pxm_log_critical): The 'error.log' is now
	'.polyxmass-error.log' and is located by default (no config on
	this for the moment, that is hard coded) in the user's working
	directory. This working directory is user-definable, what is not
	is: the location and name of the error log file cannot be
	different than this working directory and '.polyxmass-error.log'.

	* whole-project: ENORMOUS work to make the project suitable for
	correct autoconf/automake compilation/installation. Also worked
	around rpm polyxmass.spec file so that the rpm file is constructed
	with a single command line : rpm -ba polyxmass.spec. Apparently
	works, but I need to check the rpm on a machine that does not have
	polyxmass on it. All the files are in the top_src/src
	directory. The data files are in the top_src/config directory. The
	sequences are in the top_src/sequences. This makes it easy to
	maintain the package with the Makefile.am files (which are
	actually pretty powerful once well understood). ALSO, the
	autoconf/automake system is gettext aware, and I finally got the
	system to effectively display a french version of the graphical
	interface. GNU gettext is pretty powerful once understood also. I
	must admit having the gettext framework do what you want is not
	simple at all.

2001-09-20  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* Makefile.am: switched from the libxml1 library to the one
	recommended by Daniel Veillard: libxml2. Today, the installed
	version at Vincennes is libxml2-2.4.3-1. Note that the libxml2
	library deals with blank spaces between elements. This brings
	incompatibility between the old XML parsing code and the new way
	of the libxml1. This is why for the moment I have put the
	following call " xmlKeepBlanksDefault (0) ; " into each file that
	parses an XML file. It works. Now I can use the new libxml2
	library exactly as if I did not change its version.

2001-09-15  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole-project: finished switching from my custom message logging
	to the new glib facilities for message logging with different
	levels. This work has involved making a review of all the messages
	throughout the program, which means it has been a huge work, that
	needs to be tested.

2001-08-24  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/chembridge.c
	(prop_chembridge_free_remove_from_monomers): corrected a bug that
	consisted of freeing first the str_name of the prop object, while
	this same str_name was necessary later to free de p_data member of
	the prop object. Now behaves correctly (does not crash any more)
	by inverting the sequence : first free the data of the prop, next
	the name.

	* pxm-genutil/monomerutil.c
	(read_seq_monomer_chembridge_prop_plugin): corrected a bug due to
	forgetting to set the custom freeing function pointer of the
	chembridge loaded from file to the proper function
	(prop_chembridge_free_remove_from_monomers()); this caused using
	the standard default string freeing function for the prop_free ()
	process, while it was necessary to consider the p_data member of
	the prop to be freed a chembridge. The new function also takes
	care of removing the prop from the two partner monomers' arrays of
	prop objects.

	* whole_project: changed ALL the "prop system" storage basis from
	GSList to GPtrArray. Ech "prop enabled" object now has a GPtrArray
	* p_propGPA in which the prop objects are stored. The rest of the
	functionality philosophy did not change. Note that the chembidge
	prop stuff is not stable at all for the moment and requires
	extensive testing.

	* pxm-generic/monomer.c (monomer_code_new): now more simply uses
	monomer_noprop_dup() on the monomer found in the array.

2001-08-19  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/seqeditor.c (seqed_sw_size_allocate): completely
	redesigned the process by which the size of the scroll window (in
	which sits the gnome_canvas of the seqeditor) is monitored real
	time. Now all the resizing activity is monitored in this function,
	and action is taken also here for redraw_sequence () and
	cursor_draw() calls. Note that these were initially dealt with in
	the seqed_wnd_event() function, which now is empty, simply
	returning FALSE.
	(seqed_sw_scroll_show_cursor_and_sel): added this function in
	order to manage that when the window is resized, the selection (if
	any) or at least the cursor still is visible in the seqeditor. If
	there is a selection, it is managed that the largest portion
	possible of this selection is visible, with the cursor being
	visible whatever the size of the selection.

2001-08-18  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/seqeditor.c (seqed_wnd_event): when size of the
	window is considerably changed, the cursor position could be
	either atop of the first visible line or below the last visible
	line. The correction brought in this function corrects this by
	checking after the size of the seqeditor window has changed if the
	cursor position is visible or not. If not, the view is scrolled
	such as to bring the line that contains the cursor (for the moment
	irrespective of the selection) to the first visible line in the
	seqeditor.

2001-08-17  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole_project: changed a host of old filenames (of the ancient
	epoch of glade without libglade) from xxx-i.[ch] to xxx.[ch].

	* pxm-graphitf/polcompos.c (on_monomcompo_button_clicked): A new
	improvement is that now the user has a checkbutton that allows him
	to ask that ---even if an oligomer is currently selected--- the
	monomer composition be computed for the whole polymer
	sequence. This is interesting if there is a specially difficult
	oligomer to select, or that the user does not want to "loose"
	while still willing to compute the monomer composition of the
	whole polymer sequence.

	* pxm-genutil/polymerutil.c (polymer_get_monomer_compos):
	corrected a bug for which a "MONOMER_MODIF" prop object was
	referenced from a momoner's GSList of prop's to another monomer's
	GSList of prop's without duplication, which means that when one of
	the monomers was freed, the modif was freed also, and when the
	other monomer was freed a corruption of memory occurred because
	the modif was no more in existence.$

	* pxm-graphitf/polcompos.c (on_polseq_composition): changed window
	so that it is possible to start a new monomer composition
	calculation without having to close the window. Now a button is
	there to elicit a new monomer composition calculation. Further,
	the computation of the monomer composition is now made by taking
	into account if a polymer sequence portion is selected, in which
	case the computation is made only on the selected oligomer. A
	checkbox allows the user to ask that the computations be
	incremental so that by clicking the button the monomer composition
	for the polymer/oligomer is "added" to the previous one (if
	existing; which is useful if the user wants to establish the
	summed monomer composition of two peptides that are not joined in
	the sequence, as for example when trying to get the monomer
	composition of a complex oligomer made of two oligomers bridged by
	a chembridge, for example).
	(polseq_compos_set_data_to_clist): fixed a bug in the way the
	clist item text was allocated/non allocated.

2001-08-16  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole_project: I corrected a number of bugs related to the way
	the g_ptr_array_remove_index () function works. I used to iterate
	in the array using a for loop, with incrementing the iteration
	variable after each g_ptr_array_remove_index () call. This is
	erroneous as if this function is called, then the length of the
	array changes. I replaced all the code involved by calls like this
	one : while (p_GPtrArrayName->len > 0) {p_item =
	g_ptr_array_remove_index (p_GPtrArrayName->len, 0) ; g_assert
	(p_item != NULL) ; item_free (p_item) ;}. And this works
	perfectly. See documentation for g_ptr_array_remove_index in the
	glib doc to see details.

	* whole_project: I made a number of changes in the way variables
	are named, mainly because I was fed up with longish function
	names... I'll continue this in order to have shorter variable
	names overall.
	
	* readseq.h: change filenames loadseq.[ch] to readseq.[ch] to make
	them symetrical to the writeseq.[ch]. Started the change from the
	previous code for handling the monomer/polymer prop objects to the
	new system of plugin functions that are called when the name of
	the property is known. I decided to do this change to go on with
	the pluginization that was started when the code for writing a
	sequence to a file was written. Now the processes are pretty
	symetrical between the way a polymer sequence is written to a XML
	file and the way it is read from the XML file : pluginized.

2001-08-15  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* writeatom.c: changed "basicdata-atoms" in the XML definition
	file for the atoms to "atomsdef" and consequently changed the atom
	definition writing functions in this file.

	* loadatom.c: changed "basicdata-atoms" in the XML definition file
	for the atoms to "atomsdef" and consequently changed the atom
	definition loading functions in this file.

2001-07-15  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/contexts-info.h: changed files infos-i.[ch] to
	contexts-info.[ch]. Also corrected a bug in the way the
	basicdatactxt name was (badly) used to be set in a GtkList without
	prior duplicating it. Started the porting of the graphic interface
	from the old glade way to the libglade way.

2001-07-11  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/poltype-edit.c
	(on_polymer_type_save_button_clicked): saves the polymer type
	definition to the same file as the one that was loaded.

	* writexmer.c (polyxmass_SOURCES): added couple writexmer.[ch] in
	order to set apart all the functions that are required to save a
	polymer type definition (in the form of data organized into a
	basicdatactxt instance) into a file.
	(basicdatactxt_write_to_file): handles the calling of different
	object-specific functions for writing to a file all the data that
	fully characterize a polymer type definition.
	(basicdatactxt_write_DTD_to_data_file): simply writes the DTD at
	beginning of a file.
	(basicdatactxt_write_monomer_data_to_file): iterates in a
	GPtrArray of monomers to write all the data to a file.
	(basicdatactxt_write_modif_data_to_file): iterates in a GPtrArray
	of modifs to write all the data to a file.
	(basicdatactxt_write_cleavespecif_data_to_file): iterates in a
	GPtrArray of cleavespecifs to write all the data to a file.

2001-07-10  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* parseformula.c (parse_formula_symbcount_GSList): corrected a bug
	in the formula parsing algorithm that missed the last atom count
	when not present, instead of indicating an error condition. In
	other words it did not see that "C2H4O" is bad since we cannot
	determine unambiguously the count number for the 'O' atom. Now
	this function returns an error upon parsing of this type of
	uncomplete formulas.

2001-07-08  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* loadxmer.c (load_xmer_data): changed all the DTD's of the
	polymer definition files (*.dat files) to contain only ONE
	"polymerdef" item.

2001-07-05  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* writeseq.h: changed references for files writepolymer to
	writeseq, and also the #def WRITEPOLYMER_H to WRITESEQ_H.

	* writeseq.c (write_polymerinfo_to_seq_file): update the stuff
	that goes to the file, since some informations previously not
	existent in the structure are now in this structure. This file has
	not been updated since already a very long time, so much code is
	no more up to date.

	* Makefile.am (polyxmass_SOURCES): changed file names
	writepolymer.[ch] to writeseq.[ch] for coherence with files
	loadseq.*.

2001-06-17  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* cutpolymer.c: huge work to set up the support for cutting a
	polymer into oligomers when there are chemical bridges all over
	the polymer. The calculations for the masses are not yet finished,
	but the process of sorting out oligomers that are chemically
	bridged to constitute conglomerated oligomers (conglomers) is
	written. Fairly complex. That's all for this week. Good night.

2001-06-14  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* elemcompos.c (monomer_elem_compos_account_for_chembridge): fixed
	a bug in the calculation of the elemental composition when the
	chembridges for monomers are asked to be taken into account.

	* loadmonomer.c (monomer_prop_load_monomer_chembridge): fixed a
	bug in the monomer chembridge loading code that overwrote the
	str_name chembridge member with newly read str_actionformula
	string, thus leaving the str_actionformula empty (with segfault
	when the mass/formula functions tried to access this
	str_actionformula chembridge member).

	* calcmass.c (calcmass_polymer): fixed a bug in the calculation of
	the masses when the chembridges for monomers are asked to be taken
	into account.

	* whole_project (freeing_functions): continued changing the
	paradigm of the freeing functions. Some custom prop functions were
	changed from a gpointer * parameter to a normal gpointer
	parameter. See item for 2001-06-10.
	
	* pxm-generic/chembridge.h (struct _chembridge): changed the
	member data of the chembridge struct. Two pointers for the partner
	monomers, two gint for the monomers' indexes and two pointer for
	the higher order structural entities whose pointers we might need
	(gpointer's that might point either to a polymer or to an
	oligomer, as when a polymer is cleaved, for example).

2001-06-10  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/polcleavage.c (init_cleavage_options_wnd): added a
	GtkEntry on top of window where the string representation of the
	polymerctxt pointer is displayed as a unambiguous identity number
	for the polymer context that was active when the window was asked
	to be opened. When results are displayed after cleavage has
	occurred, the window in which they will be displayed will contain
	the same identity number, so that it will be possible to know
	which sequence these results originated from.

	* pxm-graphitf/seqeditor-i.c (seqed_seqeditor_setup): added a
	GtkEntry on top of window where the string representation of the
	polymerctxt pointer is displayed as a unambiguous identity number
	for the polymer context, so that when operations are performed
	using this sequence editor window as active polymerctxt, it will
	be possible to know what results come from this precise window and
	which not. This is necessary because many seqeditor window might
	be openened at one, and also with the same name, so we had to find
	a way to identify them unambiguously.

	* whole-project (freeing_functions): for a number of structures I
	went back to the paradigm that when a free'ing function is called
	to free a struct instance, the simple pointer to that instance is
	passed as parameter, and not the address of this pointer. For
	example, to free a monomer instance we will call monomer_free
	(p_monomer) and not monomer_free (&p_monomer), with p_monomer
	being monomer *. I did this because that eases a very lot the use
	of those structures as p_data members of prop instances, since the
	call the the custom free'ing accessory function is made much more
	simpler.

2001-06-09  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* contexts.c (get_polymerctxt_from_GPtrArray): added this function
	to check if a given polymerctxt is present or not in a given
	GPtrArray of polymerctxt. Used to check if a polymerctxt is still
	in existence in the application, by checking its presence in the
	globally available p_progPolymerctxtGPtrArray GPtrArray of all the
	existent polymerctxt's.

	* pxm-graphitf/polcleavage.c (init_cleavage_options_wnd): big work
	around the cleavespecif options. Not finished yet.

	* pxm-generic/prop.c (prop_get_index_in_GSList_with_cmp_func):
	corrected a bug in the call to the accessory comparison function
	(two DATA first parameter were omitted).
	(prop_find_in_GSList_with_cmp_func): corrected a bug in the call
	to the accessory comparison function (two DATA first parameter
	were omitted).

2001-06-08  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* contexts.c (basicdatactxt_free): added a new member :
	masscalcOptionsWnd, pointer to the window that is responsible for
	the displaying/setting of the mass calculation options for a given
	basicdatactxt. Also added p_calcopt, a calcopt allocated structure
	to hold permanently the settings that are either by default or set
	by the user in the window described above.
	
2001-06-07  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/polcleavage.c (on_polseq_cleavage): added this file
	which will be in charge of graphically displaying the oligomer
	data obtained by cutting a polymer with a cleavage agent.

	* pxm-generic/globals.h: added a pointer to the window responsible
	for the displaying of the mass data for the currently selected
	oligomer : progOligomerMassdataWindow.

2001-06-05  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/globals.h: added a pointer to the window responsible
	for the displaying of the mass data for the entire polymer
	sequence : progPolymerMassdataWindow.

	* added a new file massdata-display.[ch] to handle the creation
	and initialization of the window responsible for the displaying
	(and setting of the relevant options) the mass values calculated
	for the polymer sequence currently active. This file will be
	responsible for displaying the mass data each time something
	happens with the sequence.

2001-06-04  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/seqeditor-i.c (seqed_sw_size_allocate): added this
	function to always trap a resize of the scroll window in which the
	canvas is embedded so that we can store the size of the scroll
	window into the seqedctxt member data (scrollwinHeight and
	scrollwinWidth). This was necessary because we could no more take
	the dimensions of the whole seqeditor window to compute all what
	is needed to perform scrolling of the sequence because now the
	seqeditor window no more contains only the scroll window with the
	canvas, but also some other widgets, which means that its height
	is no more relevant per se.

2001-05-29  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-genutil/monomerutil.c
	(is_code_known_in_monomer_GPtrArray_incremental): added this
	function so that we can say if a given building code could be a
	monomer code or not. The function calls strstr() instead of the
	strcmp() usually used to search for a monomer that has a given
	str_code. Here we do not want to match exactly, we just want to
	tell "L" is potentially a monomer code : indeed, there are in the
	array two monomers that have the codes "Lys" and "Leu".

	* pxm-graphitf/seqeditor-i.c (seqed_seqeditor_setup): reworked the
	interface of the seqeditor window so that we can display more
	information in the window than simply the canvas. All the
	pre-existing functionality is there. But HUGE, do you hear me ?,
	HUGE improvements mainly due to start of coding the functions
	necessary to handle the "more-than-one-letter-only" monomer
	codes. Very well under way. Dynamic display of what characters are
	being typed to construct a code is coded now, and display occurs
	in a GtkEntry at the bottom of the winddow. REMARKABLE libglade,
	which really transforms my life. Added a file in the
	glade.interface directory (seqeditor.glade).

2001-05-27  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* calcmass.c (calcmass_noncapped_monomer_GPtrArray): updated,
	where relevant, the mass calculation functions to take into
	account the chembridge instances that might be present in the
	monomers.

	* pxm-graphitf/polcompos.c (polseq_compos_init_window): this file
	has been chosen to make a real world trial of libglade
	functionality. No doubt that glade/libglade is going to be used a
	lot in the future of the project.

	* glade-interface/: added this directory to hold glade-produced
	XML files that later are loaded using libglade.

	* contexts.c (seqed_get_selection_indices): added this function to
	get the current selection indices (with selection or simple cursor
	point). The indexes returned by this function work perfectly with
	the elem_compos_noncapped_monomer_GPtrArray() function. See the
	explanations in the source code for this function. Handles
	seamlessly the borders of the selection.

	* elemcompos.c (elem_compos_noncapped_monomer_GPtrArray): added
	this new file that deals with elemental composition calculations,
	with a good modularization of the code, like it is for the mass
	calculation routines. Now computes correctly the non-capped
	polymer formula. Still needs some checking but seems robust.

	* pxm-generic/globals.h (struct _calcopt): added
	monomerChembridges member to tell if the chembridge objects must
	be taken into account when calculating masses or elemental
	compositions or ...

2001-05-25  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-genutil/monomerutil.c (is_monomer_code_syntax_OK): added
	more abstraction, so that the length of the code is no more hard
	coded, and the concept is as easy as "as long as the first
	character is Uppercase and the total length is equal or less than
	acceptable, return TRUE".

2001-05-24  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* calcmass.c (polymer_account_for_rightcap_modif): added this
	helper function (along with leftcap equivalent) to decongestionate
	some high level mass calculation functions.

2001-05-23  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* calcmass.c (calcmass_oligomer_with_polymer_data): changed the
	way the mass calculation is performed for oligomers, considering
	that it can only be done when a polymer exists for the oligomer to
	point to it to get the data. Better organized the mass calculation
	code in general. Still have to work out a universal solution for
	computing masses taking into account modif objects, chembridge
	objects. Seems difficult, I have to think on it a bit. A
	possibility would be that each chemical action on a polymer
	sequence might register a specific mass/formula computation
	function, in order to really set up a PLUGIN system where each
	newly defined object modifying a polymer sequence self accounts
	for the mass/formula changes.

2001-05-19  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/atom.c (massabund_new): added this function to make
	dynamic allocation of massabund objects.
	(massabund_free): the obvious corollary function to the one above.
	(atom_free): added a loop to iterated into the massabund GPtrArray
	to free individually each massabund instance.

	* loadatom.c (isotope_load_data): fixed a problem with allocation
	of memory for the massabund instance.

	* pxm-generic/prop.c (prop_find_in_GSList_with_cmp_func): changed
	function so that initial search step relies on the str_name
	parameter, which cannot be NULL.
	(prop_get_index_in_GSList_with_cmp_func): same as above.

2001-05-17  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/globals.c (alloc_get_value_from_key_and_filename):
	changed the file line reading system from fgets to getline since
	it is more secure.

2001-05-14  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* cutpolymer.c (cutopt_free): thorough work in the cutpolymer
	functions to port them to the new GPtrArray-based process of
	generating the oligomers. Indeed, with the new system of
	three-letter monomer codes, the string-base process of iterating
	in the sequence in search for cleavage motifs is no more
	valid. Which means now each time a sequence is going to be
	cleaved, either it already exists as a GPtrArray of monomer's, or
	its str_seq member will be converted to a GPtrArray of
	monomer's. From this GPtrArray of monomer's we'll construct
	oligomers that comply with the specificity dictated by the
	cleavespecif object's data members. I could successfully digest a
	model protein (with long monomer codes and not all of the same
	length !). Still have to check if the partial cleavagages are
	efficiently performed, however it must be clear that I did not
	rewrite all the functions. There was a very good code base for the
	oligomer generation. Simply, I had to set up a new system with the
	GPtrArray iteration instead of a string sequence.

2001-05-13  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/cleavespecif.c (cleavespecif_parse): considerably
	changed this function since now we use up to three letters for the
	code of the monomer, which means really working out a good
	solution for the parsing of the cleavespecif !
	(cleavespecif_parse_motif): added this function to parse a given
	motif for a cleavespecif. Indeed we have to deal with
	heterogeneous stuff like this : "LysArg/DPro" as a cleavage motif
	! For this we help ourselves with the function
	parse_monomer_codes_in_motif () which is responsible for iterating
	in "LysArg/DPro" and extracting each valid monomer code !
	(parse_monomer_codes_in_motif): responsible for iteration into the
	cleavage motif to check that each monomer code is valid, and find
	the '/' character that symbolizes the cut position in the motif.

2001-05-11  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/cleavemotif.c (polyxmass_LDADD): changed the
	cleavemotif structure to cleavespecif and the filenames
	accordingly and Makefiles...

2001-05-09  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/seqeditor-i.c: added handlers for a number of keys,
	specifically delete/backspace and direction keys (not all for the
	moment). The seqeditor starts to act like an editor when the
	keyboard is used !!!! Good night !!!!

2001-05-08  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* contexts.c (basicdatactxt_free): added GData member to hold the
	correspondences between a monomer str_code string GQuark and a
	GdkPixbuf*. This way we do not multiplicate anymore the graphical
	data related to each monomericon pixbuf !

	* whole_project: totally ported the graphic handling of the
	sequence in the seqeditor from the Imlib library to the GdkPixbuf
	library.

2001-05-04  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/modif.c (modif_name_new): changed the system of
	arriving and leaving formulas in modif objects. Now modif only has
	two strings : str_name and str_actionFormula. All the functions
	and function calls in all the relevant functions in all the
	relevant files have been changed to take this new approach into
	account. I decided to switch to this new system because that would
	allow to almost seamlessly deal with chembridge's and modif's the
	same way (saving to file, displaying in lists...) since they now
	have these two common member data.

	* pxm-graphitf/polcompos.c (on_elem_compos_calc_button_clicked):
	now when no selection is active, the paradigm is that selection is
	mimicked by considering that it goes from the beginning of the
	sequence until the position of the cursor (monomer left of the
	cursor comprised in the simulated selection).

	* calcmass.c: changed the naming of all the functions in
	"inc_dec_mass_..." into "incdecmass_..." for more coherence in the
	namings. Also makes shorter the function names.

	* pxm-graphitf/seqeditor-i.c (seqed_display_polymer_sequence):
	added code to set the values of the GtkAdjustment->step_increment
	values according to the widest/highest monomericon found in the
	sequence. Now clicking on the scrollbar's arrow yields good
	results.

2001-05-03  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/seqeditor-i.c (seqed_w_delete_event): added code to
	check if a dialog box is awaiting already an answer about closing
	the sequence editor.

	* contexts.h (struct _seqedctxt): added gboolean member
	isWaitingForClose to set a flag when the sequence editor is on the
	verge of being close, waiting for the user to answer yes or not in
	the gnome dialog. The flag is tested in order to avoid opening two
	identical gnome question flags (in some cases the closing by
	saying yes will provoke a segfault).

	* pxm-graphitf/seqeditor-i.c (redraw_sequence): changed the
	position of the labels in the margin of the seqeditor window. Now
	positioning of the labels is done as to give a centered position
	in the y direction (with respect to height of the monomer icons)
	and in the margin (in the x direction).

	* whole_project: added a src/pxm-genutil directory where the
	utility files are going to reside. Already populated the directory
	with monomerutil.*, polymerutil.* monomerutil.*. I wanted to add
	modularity in particular by putting in these files the function
	calls that needed too much of other files to be in the canonical
	monomer.h polymer.h oligomer.h files. I would like to render as
	self contained as possible all the files contained into the
	pxm-generic (primitives in fact) directory.

2001-04-27  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/monomer.c (monomer_prop_load_monomer_chembridge):
	implemented loading a monomer chembridge property object from the
	XML polymer sequence file.

2001-04-26  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* all_the_files: decided to better qualify the "MODIFICATION" prop
	str_name member to "MONOMER_MODIF" and "IDX_MODIFICATION" TO
	"IDX_MONOMER_MODIF" in prevision that other kinds of MODIF objects
	be attributed to other objects than monomer's. The replacement
	took place into all the project files.

2001-04-24  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/chembridge.c (chembridge_new): better thought about
	the new concept of chemical bridge. Now has gained better
	understanding that it will be a bondage between not necessarily
	two monomers, but between every type of molecular object that can
	handle GSList's of prop objects. The differentiation will be
	performed by the name of the prop : "MONOMER_CHEMBRIDGE" or
	"POLYMER_CHEMBRIDGE" or "OLIGOMER_CHEMBRIDGE". The basis of the
	"CHEMBRIDGE" is a struct chembridge that holds an action formula a
	str_name of the chmical agent, two gpointers to the partner of the
	bond (of any prop-compatible type as explained above).
	(chembridge_free): traditional struct freeing function.
	(monomer_chembridge_prop_free): example of a custom freeing
	function that will be called by the prop_free () call on a
	"MONOMER_CHEMBRIDGE" prop.
	(prop_monomer_chembridge_free): changed some function names so
	that the type of data concerned is immediately visible :
	chembridge_something, prop_monomer_chembridge_something...
	(chembridge_dup): added this traditional function for a given
	type.
	(prop_monomer_chembridge_new): new function to take advantage of a
	"new'ed" chembridge object to create a prop object that in the end
	will be set to a GSList of prop objects in the object linked by
	the chembridge (be it a monomer, a polymer, an oligomer...).

2001-04-22  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/chembridge.h: starting a new concept in the project
	with this file : the chembridge concept. Actually a chemical
	bridge is something similar to a sulfide bond, unless an
	actionformula is responsible for the chemical bridge. The
	chembridge concept might well be based on the prop object, being a
	prop object whose name is "CHEMBRIDGE" and whose data is a pointer
	to a structure that is still to be defined.

	* pxm-generic/prop.c (ALL_FUNCTIONS): I've been working very hard
	these days to introduce a huge level of flexibility with prop
	objects. Namely, it is now easy to set up a prop object that has
	really a structure as its p_data. Therefore it was necessary to
	change all the functions that dealt with this p_data member of
	struct prop to allow using customized free'ing, comparison,
	duplication functions. The prop object now contains three pointers
	to customizable functions pertaining to duplication, freeing,
	comparison of NAME/DATA/BOTH of a prop object. A huge work has
	been done to ensure that failback functions are set to these
	pointers if no special assignation has been done. Also, these
	failback functions are used whenever necessary in failback code.

2001-04-21  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/polcompos.c (on_elem_compos_calc_button_clicked):
	finished dealing with this window. Added option to let user know
	if she wants the polymer to be CAPPED or not. Also, when no good
	info is in the ionization entry's, then the basicdatactxt
	ionizerule data are used. Made testing with the string and
	GPtrArray helper functions to check that elemental composition
	determination is faithfully identical for the same polymer.

2001-04-20  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* calcmass.c (ionize_with_ionizerule_and_level): new function to
	replace the precedent one (ionize_with_options, if remember
	well). Now this function uses the ionizerule struct and a gint
	ionizationLevel as a params.

2001-04-19  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* contexts.h (struct): added the ionizerule struct (as a pointer)
	to the "basicdatactxt" structure, so that upon polymer definition
	load (loadxmer.c) it can be filled with data read from file. Also,
	this structure now contains what should be considered as the
	default ionization rule for the relevant polymer sequences.

	* I've added to the XML DTD two fields into the "polymer" element
	: ionizeactionformula and ionizenetcharge to reflect what is
	stored in the new structure ionizerule. In fact, I did this
	because I think that these data are specific of a given polymer
	type, with the ionize rule being "+H1" and netCharge of 1 for
	usual proteins, for example; for synthetic polymers it is known
	that cationization is done with Silver ("+Ag1", netCharge +1).

	* pxm-generic/globals.h (struct): added the ionizerule structure
	that should contain an actionFormula ("+Cd1-H1", for example)
	string and a charge gint member to hold the netCharge that is
	brought by making this ionization. Added the classical new'ing and
	free'ing functions.

	* contexts.c (polymerctxt_get_elemental_composition): added
	function that makes use of two other help functions for the case
	where the str_seq member of the polymer is NULL and where the
	p_monomerGPtrArray is NULL. As of now the str_seq variant works
	but without taking into account the ionization, since I'm in the
	process of reinventing this part.

2001-04-18  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/polymer.c (polymer_get_monomer_compos_in_GPtrArray):
	debugged a "processed = FALSE ;" statement which did not produce
	the expected effect.

2001-04-17  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/prop.c (prop_dup_from_GSList): changed the function
	name prop_get_in_GSList_new () to this one. This function
	allocates a new prop object identical to the one that was found in
	the GSList passed as param and which had name/value/both identical
	to the param(s) passed to the function.
	(prop_get_pointer_from_GSList): added this function which does not
	allocate anything, but only returns a pointer to the found prop
	object, exactly as the function prop_dup_from_GSList
	(). Interesting when a new prop object is not required, but only a
	prop pointer is needed just to make a value check, for example.

	* pxm-generic/polymer.c (polymer_get_monomer_compos_in_GPtrArray):
	added this function to fill a GPtrArray of monomer's with monomers
	created to contain a "COUNT" prop of which value is the number of
	these monomers contained into either a GPtrArray of monomers from
	a polymer object or into a str_seq member of a polymer object. If
	a given monomer is modified ("MODIFICATION"), then this
	modification will be stored into the "reported" monomer object.

2001-04-16  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/infos-i.c (populate_polymer_list): finished writing
	the functions to display some infos pertaining to the
	polymerctxt's currently in memory, all the infos are displayed
	into GtkEntry's and a GtkText in a window.

2001-04-15  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/seqeditor-i.c (seqed_w_focus_in_event): added this
	signal handler to always know which seqeditor window had at last
	the focus. Each signal gets a pointer to the polymerctxt, which is
	then stored in the global variable p_lastActivePC.
	(really_close_sequence_question): introduced check to see if the
	close polymerctxt was stored in the global variable
	p_lastActivePC, in which case the latter is set to NULL. Note that
	this means that p_lastActivePC is not necessarily NON-NULL, which
	means that it has to be tested each time.
	(really_delete_sequence_question): introduced check to see if the
	close polymerctxt was stored in the global variable
	p_lastActivePC, in which case the latter is set to NULL. Note that
	this means that p_lastActivePC is not necessarily NON-NULL, which
	means that it has to be tested each time.

2001-04-14  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/globals.h (pxm_error): now calls
	pxm_log_error_no_abort ( first with the __FILE__ and __LINE__
	details, and next pxm_log_error_abort () with the arguments passed
	to it. The second call effectively abort ()'s the program, but by
	this time the error.log file has all the details necessary to
	understand where the abort () has intervened.

	* pxm-generic/globals.c (pxm_log_error_no_abort): pxm_log_error ()
	changed to pxm_log_error_no_abort () and pxm_log_error_abort () in
	order to be able to call more than one time the error logging
	function, otherwise at the first call the abort () call would make
	the program abort, without continuing the logging of error details
	into the error.log file.

	* pxm-generic/globals.h (pxm_error): added this macro to handle
	error messages through use of two calls to pxm_log_error () first
	with __FILE__ and __LINE__ and secondly with the message passed to
	the macro.
	(pxm_log): added this macro to handle various levels of debugging
	info #ifdef DEBUG (single level warning, and multiple levels
	message).

	* pxm-generic/globals.c (pxm_log_error): added functionality to
	append to log file (error.log in user config dir) each message
	sent to this function. This is especially useful if program
	crashes. Added variable list of arguments support, to allow
	sending such kind of multiple parameter list to this function
	directly without having to first produce a single string.

2001-04-12  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* polyxmass.c (main): removed the g_atexit () function
	registration, since the cleaning functin (pxm_uninit_application
	()) is called from where it has to (specifically in the function
	app_window_eventDestroy ()).

	* pxm-graphitf/appmenu-i.c (on_file_exit): instead of calling
	gtk_main_quit (), now calls app_window_eventDestroy (NULL, NULL,
	NULL) ; to delegate closing behaviour.

	* pxm-graphitf/appwindow-i.c (app_window_eventDestroy): changed
	function name.
	(app_window_eventDelete): changed function name.

	* contexts.c (polymerctxt_GPtrArray_free): removed the
	g_ptr_array_remove_index () call to prevent modification of the
	array length while relying on an invariant len member of the
	GPtrArray to iterate through all the GPtrArray.
	(basicdatactxt_GPtrArray_free): removed the
	g_ptr_array_remove_index () call to prevent modification of the
	array length while relying on an invariant len member of the
	GPtrArray to iterate through all the GPtrArray.

2001-04-11  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/prop.c (all_functions): worked hard to change the
	prop value from gchar * to gpointer, which means that now whatever
	type of data can be set as prop data to an object supporting that
	kind of "modification". Also changed all the functions that dealt
	with prop value being a gchar * in order to make proper work with
	gpointer. Added three accessory functions (pointers actually) to
	the prop structure. These function pointers can be set by the user
	to perform customized duplication, cleaning, comparison of the
	prop data. The project compiles and run apparently ok. Some
	testing will certainly be required. Good night.

2001-04-09  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* graphic_interface (infos-i.[ch]): continued implementing
	functions to display informations on the basicdatactxt's currently
	active in the application. Added a str_codesAsString member to
	basicdatactxt to hold the string that contains all the codes for
	all the monomers of a given polymer type.
	
	* pxm-generic/polymer.c (get_polymer_type_seq_file): changed some
	return values from ERR_ERR to NULL since this function returns a
	pointer to gchar.

2001-04-08  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/appconsole-i.c (setup_app_console_window): added
	the definition of three colors red for errors, green for messages
	and blue for warnings. Starting to progressively change all the
	"d_printf" code to display the errors and warnings and messages to
	this console window.

	* pxm-graphitf/about-i.c (setup_about_dialog): added new set of
	files to deal with the "about" menu. Classical GNOME handling of
	the About dialog.

2001-04-07  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/appconsole-i.c (setup_app_console_window): added a
	new functionality to allow displaying of messages (error, warning)
	to a console window so that the application can be started in the
	background with no terminal at hand. The console window contains a
	GtkText widget in which the contents of gs_appMessages (global
	variable) are displayed. Some mechanism will someday allow to fix
	the length of this GString, and the possibility to erase it by
	asking for this.

	* loadseq.c (on_file_open_OKbutton_clicked): fixed a bug that lead
	to loading more than once the x_mer_data for a same polymer
	type. Introduced a check to see if the basicdatactxt is new or
	not.

	* contexts.c (polymerctxt_free): eliminated call to
	basicdatactxt_free().
	(polymerctxt_new): eliminated call to basicdatactxt_new() since
	this structure is allocated independently of the polymerctxt
	object during the process of loading a polymer sequence (only if
	no other polymer sequence of this polymer type has been loaded
	already).

2001-04-06  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* whole_project: totally encapsulated the loaded polymer
	sequence. Now the user will be able to load two different
	sequences of two different (or more, of course) polymer types and
	get the expected results either for the sequence display (this is
	already positively tested) or for the mass calculations/cleavage
	processes (yet to be tested/tweaked). Certainly the code will need
	some cleaning because this was a semi-quick hack to check if the
	total isolation of a new sequence polymer into a polymerctxt
	(polymer context envelope) was feasible. Apparently yes. Good
	night.

	* parseformula.c (alloc_fill_elem_compo_from_seq_string): removed
	this function that was called by nobody and that apparently is of
	no use.

2001-04-05  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* contexts.c (basicdatactxt_new): added the traditional new'ing
	and free'ing functions and other helper ones for the basidatactxt
	object.

	* contexts.h (struct): added the basicdatactxt struct to contain
	data that fully describe the basic data for a given polymer
	type. This will be useful when the application will allow loading
	of more than one polymer sequence of two different (or more) types
	of polymers. Each polymer sequence has to be aware of what polymer
	type it is so that basicdata are visited for the right polymer
	kind in order to calculate masses correctly for a given code (A is
	alanine or adenine, and they do not have the same formula !). This
	also applies to modification objects and cleavemotif objects !

2001-04-04  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* GOOD night (it's 00:55)

	* init.c (print_prog_desc_license): modified in a way that when
	'q' is pressed there is no core dump upon exiting the program
	(problem with gtk_main_quit being called twice, or something like
	that. In pxm_init_application () the return value of this function
	is now analyzed to take specific action.

	* pxm-generic/whatever-type.c (whatever-type_GPtrArray_free):
	cleaned and systematized warnings and error for each function
	dealing with GPtrArray freeing for atom, monomer, modif,
	cleavemotif, polymer, polymerctxt... More consistency in the
	warning messages and error messages is always good.

	* init.c (pxm_init_application): changed the way the GPtrArray's
	of either user basic data and "non changing" data are instanciated
	upon initialization of the program. Two functions are now called
	which do different initializations : basicdata_GPtrArray_allocate
	and pxm_allocate_GPtrArrays. This makes it possible to free
	GPtrArray's that are empty.

2001-04-02  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-generic/globals.h: changed the kind of array that holds all
		the basic data : no more GArray's but GPtrArray's. So we
		now have declared in globals.h the following GPtrArray's :
		GPtrArray * p_appMainAtomGPtrArray; GPtrArray *
		p_appMainMonomerGPtrArray; GPtrArray *
		p_appMainModifGPtrArray; GPtrArray *
		p_appMainCleavemotifGPtrArray;

		GPtrArray * p_appMainPolymerGPtrArray ;

	Changed all the code to add new elements, remove or access them
	with the new array systems. The cut/nocut GArray's of gint's did
	not change as they correspond to very little amount of
	memory. Also for the p_partcleaveGArray that holds the partial
	cleave's asked by the user.  All the rest is now GPtrArray !

	* whole_project: each time a something_free (something *
	p_something) function occurred I replaced it with a something_free
	(something ** pp_something) so that freeing effectively happens
	entirely with NULL'ation of the *pp_something pointer. The code
	compiles and executes perfectly.

	* pxm-generic/prop.c (prop_free): now this function takes as
	argument a pointer to pointer to prop object (&p_prop) so that
	NULL'ing the passed *pp_prop works ok.

	* contexts.c (polymerctxt_new): a polymerctxt (polymer context) is
	a structure that contains a pointer to a polymer and a pointer to
	a seqedctxt (sequence editor context). This structure contains all
	the information required to characterize a given polymer sequence
	either from the monomer point of view (mass calculations) and from
	the display point of view (sequence editor context describing
	fully the window in which the pixmaps are displayed to represent
	the polymer sequence). Each time a polymer sequence is loaded, its
	data are going to be stored in this structure a pointer of which
	is going to be added to the p_appPolymerctxtGArray (allocated in
	init.c).

	* init.c (pxm_allocate_GArrays): the p_appMainPolymerGArray has
	been replaced with a GArray that stores the pointers to
	polymerctxt objects created upon loading of polymer sequences.

2001-04-01  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* init.c (pxm_process_command_line): by creating manually two
	static seqedctxt objects I could successfully display a dna
	sequence into two distinct sequence editors that were effectively
	independently responding to my mouse playings ! so sequence editor
	context definition like it is now seems to fulfill the requirement
	of integral independence. NOTE that for the moment this is only
	something "graphical" and no mass computing happens behind the
	scenes... but my desire is that it will be possible to make
	totally independent the way functions are called with respect to
	two different polymers so that one will be able to load a protein
	in a seqeditor and compute masses, while at the same time a dna is
	loaded in another seqeditor, and masses can be compute also and
	displayed in the same "results window" as for the protein,
	depending on which seqeditor is "active". In a word, what is done
	for the seqeditor context should be done for all the information
	that pertains to a given polymer sequence/type that is
	loaded. Full independence of the way masses and so on are
	computed. Only one requirement : a given seqeditor should know
	what polymer it is working on, and the polymer context should
	allow to get data from the right place (protein with protein and
	dna with dna).

	* pxm-graphitf/seqeditor-i.c (sel_polygon_event): changed code so
	that when clicking occurs inside the selection polygon no change
	in the mouse X cursor is made.

	* WHOLE_PROJECT/: could successfully display a protein sequence
	with its set of pixmap files, and a dna sequence with its other
	set of pixmap files, these latter being larger than the orther
	ones. Monomer index calculations seemed to be perfectly ok.
	
	* pxm-graphitf/seqeditor-i.c
	(get_size_pixels_from_xpm_file_if_greater): finally this function
	is no more used since it is possible to get from the GDK image
	itself the size of the pixmap (fields rgb_width and rgb_height of
	the GdkImlibImage structure).  ALL THE FUNCTIONS were modified to
	take a seqeditor context argument so that each action is performed
	with respect to a given seqedctxt. This always in the aim to allow
	multiple seqeditor running simultaneously and independently.

	* pxm-graphitf/seqeditor-i.h (struct): added the seqedctxt
	"sequence editor context" that holds all the variables needed to
	construct and operate the sequence editor. The aim is that it
	should be possible to display simultaneously multiple sequences
	each one in its sequence editor, and to operate independently
	these different sequence editors (sequence selection, feedback on
	mouse position....).

	* pxm-generic/atom.c (atom_GArray_free): added call to
	g_array_free with param TRUE.

2001-03-31  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* pxm-graphitf/seqeditor-i.c (get_icon_size_pixels_from_xpm_file):
	added this function to extract from xpm file the size of the
	monomer icon dynamically.
	(get_icon_size_pixels_from_xpm_file_if_greater): as above but
	retrieval is performed only if the newly read values are superior
	to the ones stored in the parameters (pointers to
	gdoubles). Called when displaying a sequence into the sequence
	editor, so that the largest size for monomer icons is found
	amongst a number of different pixmap icon files.

2001-03-29  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* polyxmass.c (main): started working on the main window graphic
	interface. I realized that I would learn much more about GTK+ and
	GNOME if I were courageous to hand code the interface (which means
	without the aid of Glade). This is how I will work (for the moment
	at least). Added some graphic interface files in the
	src/pxm-graphitf directory.

2001-03-22  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* all.project (all project): changed the organization of the
	source code in order to have the possibility to compile and link
	together all the files corresponding to the user basic data (atom,
	monomer, modif, cleavemotif, polymer, oligomer, globals, prop...)
	independently of interface and other mass calculating
	functions. The main changes were to modify the file inclusion
	pattern for the files in order to have them compile correctly. The
	masscalcrule struct has been changed to leftfrightrule struct as
	it is of wide use even outside mass calculating function. It is
	now declared in globals.h. The project compile perfectly and runs
	perfectly as of now. I'm now going to change the organization of
	the source tree to make a library with all the code that I could
	"isolate".

2001-03-18  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* cutpolymer.c (cutopt_new): added to allocated the cutopt
	struct. Standardizes as far as possible the memory allocations on
	the heap. The correct functioning of the polymer cutting functions
	is tested OK.

	* calcmass.c (cap_oligomer): changed to take into account the new
	way to describe the left/right cap ending chemistry.
	(cap_polymer): changed to take into account the new way to
	describe the left/right cap ending chemistry.
	(apply_calcmassrule): new function that is in charge of
	decomposing correctly a set of chemistry reaction like
	"+H1-O2+NH2" into all the different formulas "H1", "O2",
	"NH2". Next it calls inc_dec_mass_formula () with the first
	parameter to INC or DEC depending on the sign associated with each
	formula (+ or -).
	(is_lr_actionformula_OK): new, in charge of checking that a given
	set of chemistry reactions described in the form "+H1-O2+NH2" is
	syntactically correct and that each subformula ("H1", "O2", "NH2")
	is also syntactically correct, referring to known atoms.

	* loadxmer.c (polymer_handler): changed the was the chemistry that
	caps the polymer is done. Now the way its works allows in one
	single step to described something that arrives and something that
	leaves the polymer. For example, upon leftcap capping, we can say
	that we want this chemistry done : +H1-NH2, which means that a
	proton is added and that a amine is eliminated.

	* cleavemotif.c (cleavemotif_new): now this function "news" a
	struct masscalcrule. This function is then filled upon loading of
	the XML userdata file. All calculations for the oligomers
	generated upon cleavage of a polymer with such a masscalcrule have
	been updated.

	* loadcleavemotif.h (masscalcrule_section_handler): added this
	function to handle the masscalcrule section into the cleavemotif
	element (in the XML userdata file).

	* calcmass.c (calcmass_oligomer_code_string): exactly as below.

2001-03-17  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* calcmass.c (calcmass_oligomer_monomer_GArray): added
	computations to take into account the masscalcrule parameter
	passed as argument.

	* calcmass.h (struct): added masscalcrule structure so that when a
	cleavage is performed the user can define some chemistry to happen
	to leftcap and/or rightcap of the generated oligomer. The
	structure allows to define what residue has to be either at
	leftcap and/or rightcap position to be modified. This is
	particularly interesting in chemical cleavages where the cleavage
	modifies one monomer and not the others (see the
	methionine/homoserine conversion upon cleavage of a protein with
	CNBr (cyanogen bromide)).

2001-02-18  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* calcmass.c (calcmass_noncapped_code_string): verified that mass
	calculations are OK when an oligomer is passed with only a
	"SEQUENCE" prop is given with the sequence.
	(calcmass_oligomer_code_string): verified that this function
	behaves correctly when an oligomer is passed with a "SEQUENCE"
	prop and a number of "IDX_MODIFICATION" properties. Works for
	taking into account the modifications passed as "IDX_MODIFICATION"
	prop's, even if more than one prop is listed in the GSList of
	prop's of the oligomer object.
	(calcmass_oligomer_code_string): verified that when oligomer
	contains "LEFTRIGHTCAP_OLIGOMER" prop either set to leftcap,
	rightcap or both and that other prop objects give the
	modifications for the leftcap and the rightcap, the mass
	calculations work as expected.
	(whole_project): started checking if with another set of files
	(namely a DNA sequence file and a DNA userbasicdata file, we would
	be dealing correctly with polymer sequences and with computing
	correctly masses. YES ! "ATGC" DNA sequence is correctly loaded,
	analyzed and mass is correctly computed for it.

2001-02-17  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	* cutpolymer.c (oligomer_with_options_new): verification of the
	functions dealing with polymer cleavage with a cleavemotif
	specification and partial cleavages also. Generation of oligomers
	seem to work, property setting seems to work at least for
	"PART_CLEAVAGE".
	(oligomer_with_options_new): verification of the generation of the
	oligomers with integration -in the form of a prop object- of the
	monomer modifications that might exist in the polymer
	sequence. Also verified that the polymer left/right cap
	modifications are also stored in the oligomers when they are
	either left or right cap terminal.
	(cutpolymer_test): checked that the sequence is correctly stored
	in each oligomer generated from the polymer upon cleavage (if
	asked). This happens in the form of a "SEQUENCE" prop object in
	the oligomer's GSList of prop objects. Works fine !

	* calcmass.c (calcmass.c): verified behaviour of mass calculations
	of proteic sequences when taking into account of internal modifs
	and/or left/right-cap modifs : OK.
	(ionize_with_options): verified that ionization gives proper mass
	results (tested with hydrogen by default).

	* all_project: big rework of all the project to incorporate the
	GNOME helper material in prevision to starting GUI
	programming. Also big rework to achieve the switch from "only
	protein"-oriented calculations to "whatever-the-polymer"-oriented
	calculations. Many files have been totally rewritten and a lot
	have been added to modularize the code. Right now apparently the
	file-loading functions and "protein" mass calculation functions
	seem to work. Atom data handling seems stable. I'm in the process
	of verifying all the functions that handle polymer cleavage. For
	the moment I assume that the monomer code length is 1 letter
	only. Later I'll manage to allow up to three letters for the code.

2001-01-11  Filippo Rusconi <f dot rusconi at lptc dot u-bordeaux dot fr>

	THE SWITCH FROM massdat to polyxmass has started with : 1. a sed
	automated editing of all the file with the following command :for
	i in *; do sed 's/massdat/polyxmass/g' $i > "$i-moment"; mv
	"$i-moment" "$i"; done THE SWITCH is now continuing with code
	modifications that will bring the full polyvalence of the
	application with respect to the many different kinds of polymers
	that it will be able to deal with.

	



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]