HTTPD: add mime for java
Makefile: echo site
WWW updates.

DOC/PersistentCluster.html:
	moved content from root/www/index.html.

Makefile:
	add support for HTML DOC.
	add PersistentCluster to root/www/doc.
	call make in web/www.neonics.com (if exists).

	TODO: copy/extract style and remove references to www.neonics.com/
	dir.

kernel/net/cloudnet.s:
	refactor the cluster_get_* html www expr code:

	* rename cluster_get_status to cluster_stream_cluster_status;
	* rename cluster_get_status_list to cluster_stream_nodes_list;
	* add cluster_stream_nodes_table;
	* add sockbuf_append_string$, which calls sockbuf_flush$ if needed;
	* add sockbuf_flush$
	* rework APPEND_STRING to SOCKBUF_APPEND_STRING calling
	  sockbuf_append_string$ using stackargs
	* add _html_item_open$, starting a <tr> or <li>;
	* add _html_cell$, adding </td><td> if table, else nop;
	* add _html_item_close$, closing <tr> or <li>;

	Feature changes:
	* cluster_get_status, now cluster_stream_cluster_status, no longer
	  also prints the <ul> list.
	* cluster_stream_nodes_(table|list) sets CSS class 'cur' if the node
	  is the current node.
	* cluster_stream-nodes_table adds a header row and removes text
	  from cells (birthdate, cluster since), and puts name and age
	  in separate cells.

kernel/net/httpd.s:
	change handler for cluster.status to cluster_stream_cluster_status.
	split cluster.status.list into cluster.nodes.(list|table).

kernel/print.s:
	update macros PUSH_TXT  and PUSHSTRING (alias for PUSH_TXT)
	to accept another argument indicating whether to also push
	the string length, with or without the trailing 0.

root/www/index.html:
	moved some content (persistent cluster, obj oriented asm etc)
	to DOC/PersistentCluster.html;

	add style for cluster box;
	comment out the table layout.
	reorder the content.

root/www/scene_pack.js:
	scrollLeft/scrollTop in document.body always returns 0;
	instead, use document.documentElement.scroll(Left|Top).

util/template.html:
	use HTML5 doctype, and not XML.
Add IGMPv3 support (experimental).

kernel/net/igmp.s:
	refactor printing messages;
	add and document IGMP v3 fields and messages - largely unused.
DNS: print AuthRR SOA, fix lookup return.

TODO:
	mark a bug with buffer confusion under certain conditions.

kernel/net/dns.s:
	add handling for SOA responses.

	preserve CF on error (nonzero) response code.

kernel/net/net.s:
	cmd_host: print error on lookup error.

kernel/print.s:
	add print_time_s_sparse which does not do 2 digit alignment
	and skips zero fields. (i.e., 1w00d00h00s -> 1w, and 01d00h01s->1d1s).

	update print_time_s to take a stack flag indicating sparse mode.

	TODO: add sprint_time_s_sparse / update sprint_time_s likewise.
	TODO: add csprint_time_s using a word buffer (char + color) as base.
BUILD: put all strings in .strings section

kernel/Makefile:
	add command to generate .obj from intermediate .obj.r file
	that was linked with kernel.link-sections, in preparation
	for string duplicate removal.

kernel/defines.s:
	remove definition for string subsection SECTION_DATA_STRINGS.

kernel/kernel.link:
	put .strings after .data in .text.

kernel/kernel.link-sections:
	record .strings section.

The rest of the files:
	replace all .data SECTION_DATA_STRINGS with .section .strings.
BUILD IMAGE: reorganize; commit to multi-obj.

	SUMMARY

		Commit to multiple objects and remove KERNEL_SPLIT_RINGS
		taking it to be true.

		Merge ring2 objects into a single object before final link.

		Update mem -s -c to reflect changes.

kernel/Makefile:
	remove the KERNEL_SPLIT_RINGS checks.
	Set KERNEL_OBJECTS to kernel.o and ring2.o only.

	change target ring2.o to ring2_.o.

	add target ring2.o merging ring2_.o and fs/oofs/oofs.o.
	put oofs.o after ring2.o.

kernel/kernel.link:
kernel/kernel.link-sections:
	add definition for data_ring2_strings_end.

kernel/kernel.s:
	factor out KERNEL_SPLIT_RINGS.

	Record .data16 subsection 1 (strings).

kernel/lib/mem.s:
	cmd_mem '-s -c':
		print string section sizes;
		alignment updates.
		add RING0/2 labels for data aswell.
		order updates.

kernel/ring2.s:
	factor out RING2_INCLUDED.
Add experimental stringdata optimization script.

util/stringdata.pl:
	reads the .strings section, and calculates the space saved
	by removing duplicate strings and using suffixes.

	TODO: read .strtab for code/data references to find which
	      strings are relocatable.
Begin GitFS implementation.

DOC/GitFS.txt:
	notes.

DOC/Storage.txt:
	notes on OO structure for mounting files as filesystems.

kernel/fs/oofs/oofs.s:
	include new sources.

kernel/fs/oofs/oofs_array.s: (ADD)
	base class for persistent array based data.
	On partial load loads the rest.

kernel/fs/oofs/oofs_hash.s: (ADD)
	hash array basis as per GitFS.txt.

kernel/fs/oofs/oofs_hashidx.s: (ADD)
	index2 array basis as per GitFS.txt.

	Treats oofs_hash as a single-sector object.

	Maintains reference list, each element describing the beginning
	and ending hashes the reference contains (which allows for gaps).

	When finding such a reference, it dereferences it by instantiating
	oofs_hash initialized with the LBA, loads it, and delegates
	the lookup.
OOFS improvements.

TODO:
	updates; add cloudnet timing issue with suspended VM.

kernel/fs.s:
	add mtab_get_mountpoint (by fs instance).

kernel/fs/fs_oofs.s:
	add more help, using new color escapes.

	oofs_drop$: change meaning of hex argument from LBA to entry index.

	oofs_add$: parse argument numsect (ascii).

kernel/fs/oofs/oofs_vol.s:
	rename oofs_array to oofs_vol_array for clarity.

	oofs_vol_onload:
		don't load the free space item but calculate it.
		add verification and auto-correction method, checking lba and
		size. If a region exceeds the partition size, truncate it,
		and print any items following that will be discarded.
		Also print notice that to persist the changes,
		oofs <mountpoint> save must be called.

	oofs_vol_delete:
		call class_deleteinstance for the removed object.
		proceed with compaction check if the object was not loaded.
		fix check for last item (off-by-one introduced by not counting
		the free space element).

	oofs_vol_print:
		print the hex entry index.
		mark the free space entry as such.

kernel/print.s:
	document format string.
	add "\\cX" color escape, i.e. "\\c\x07" for normal white on black.
Merge branch 'master' into gitfs
OOFS/GitFS/HashFS updates.

kernel/fs/oofs/oofs_array.s:
	rename oofs_array_header_end to oofs_array_persistent_header_end.
	remove undefined api methods (add, delete, lookup).
	add api method ofs_array_iterate taking ebx method pointer to be called
	for each entry.
	fix typo.

kernel/fs/oofs/oofs_hashidx.s:
	remove undefined globals.
	remove oofs_hashidx_print.
	update oofs_hashidx_list references to oofs_array_list.
	fix typo.
[minor] Web Update

util/template.html:
	make logo home link.
	add id for subtitle aka tagline to be changed for different sections
	of the site.

	NOTE. Much work has been done on the website, which is not part
	of this repository.
Merge branch 'master' into gitfs
OOFS: add load,show; make oofs_array flexible.

Makefile:
	make oofs.o dependent on kernel.

kernel/fs/fs_oofs.s:
	cmd_oofs:
		pass on class_fs_oofs to prevent having to look up oofs_table.

		add command 'show', calling the print method on the entry obj.
		add command 'load', to load an entry/region.

		add: sectors in hex; add entry to table aswell.
		drop: refactor; use new method oofs_table.clear_entry(index).

		print error when oofs not mounted at mountpoint instead of
		nothing.

kernel/fs/oofs/oofs.s:
	include array before alloc as alloc now extends array.

kernel/fs/oofs/oofs_alloc.s:
	have oofs_alloc_tbl extend oofs_array.
	move handle count field to end of static persistent data.

	remove load, save, onload: handled by array.

	add empty handle_get method, to be done.

	reserve all region space in free handle upon init.

	remove unused/copied code.

	print: call super.

kernel/fs/oofs/oofs_array.s:
	add fields array_persistent_start and array_start, to be initialized by
	extending class, and update code to read that value rather than using
	a static offset.
	This allows subclasses to designate any area as the array, and to
	prefix the dynamic array structure with statically structured data,
	such as linked-list pointers in oofs_alloc_tbl.

	The first dword in the array is taken to be the array element count.

kernel/fs/oofs/oofs_hash.s:
	update constructor: initialize array_start and array_persistent_start.

kernel/fs/oofs/oofs_hashidx.s:
	update constructor: initialize array_start and array_persistent_start.

	update verify: store 1 entry with lba -1 to indicate where/how.
	implement print_el.

kernel/fs/oofs/oofs_persistent.s:
	preserve edx.
	use PRINT_CLASS macro.

kernel/fs/oofs/oofs_table:
	maintain offset array for strings, initialized in onload.
	onload: clear all string entries beyond oofs_vol.count.

	add api method clear_entry, taking an index, and reducing both
	the offset array and the table size if it is the last entry.

	add method set: UNFINISHED; meant to replace a string value.

	NOTE: this class is not very sophisticated, and is meant as a string
	stack. It works properly if entries are added, and the last entries
	are removed, in conjunction with oofs_vol.

kernel/fs/oofs/oofs_vol.s:
	rename oofs_magic, oofs_count to oofs_vol_*.
	add: don't save the volume sector.
	load_entry: refactor: directly increase array capacity and set the
	entry rather than calling ptr_array_newentry repeatedly.

kernel/lib/hash.s:
	export buf_resize (called by oofs_vol).

kernel/lib/mem.s:
	mreallocz_: only copy min(newsize,oldsize) bytes.

	add int3 on mfree_ error (a recursion took place, unreproducable now;
	probably a bug somewhere else).

kernel/lib/mem_handle.s:
	add compile-time check to insure that the HANDLE_STRUCT_SIZE is 32.

kernel/oo.s:
	add debug.
	class_instance_resize: calculate old/new size and add (disabled)
	code to clear object data - as mreallocz was buggy.
	That is fixed now, but leaving this in.
IDT: minor fix

kernel/idt.s:
	add_irq_handler: preserve eax. (no change, no caller depends on
	eax/al being unmodified).
MEM: begin refactor linked list handles.

	SUMMARY

		mem_handles.s is tied closely to mem.s.
		This is a preparatory step to further decouple the linked list
		memory management code, by making it possible to use
		mem_handles in other contexts, such as for disk space
		allocation (at which point it will probably be renamed).

		This step prepares the way for mem_handles to take a base
		pointer to a structure containing linked list begin/end
		indices, aswell as the pointer to the handle array, it's
		size, and it's used entries,
		rather than being hardcoded to refer to malloc memory
		management data structures.

kernel/lib/ll.s:
	comment out (disabled) debug referencing mem_handles.

kernel/lib/mem.s:
	move mem_phys_total from mem_handles.s.

	update references to handle_f?_(first|last)
	to mem_handle_ll_f? + ll_(first|last).

	update references to handle_ll_f? to mem_handle_ll_f?.

kernel/lib/mem_handle.s:
	drop handle_f?_(first|last) and use
	mem_handle_ll_f? + ll_(first|last).

	rename handle_ll_f? to mem_handle_ll_f?.
MEM: refactor: use handles struct

	SUMMARY
		Update some public methods in mem_handles to be mem agnostic,
		using a pointer to a handles struct containing the handles
		pointer, size, max, linked lists etc.

kernel/lib/mem.s:
	update calls using esi=[mem_handles] to use esi=handles struct ptr
	(i.e., offset mem_handles), listed below.

	remove defunct code.

kernel/lib/mem_handle.s:
	Add handles struct, with the same layout as the fixed fields for mem_*
	(mem_handles, mem_numhandles, mem_maxhandles, mem_handles_handle, and
	the mem_handle_ll_(fa|fs|fh)_(first_last)).

	Replace some public methods called by mem_handle code itself, and by
	mem.s, to use esi = ptr to handles struct:
		- get_handle$		-> handle_get
		- find_handle$		-> handle_find
		- find_aligned_handle$	-> handle_find_aligned
		- get_handle_by_base$	-> handle_get_by_base

	Update some private methods that were called from the public methods
	using esi as struct ptr:
		- mem_split_handle_head$
		- mem_split_handle_tail$
		- alloc_handles$

	Remove defunct code.
MEM refactor: minor updates and fixes.

TODO:
	report memleak.

kernel/lib/mem.s:
	use MUTEX_SPINLOCK_ instead of MUTEX_SPINLOCK.

	mreallocz_:
		lock MEM mutex when looking up old size;
		add int3 when old size can't be found.

kernel/lib/mem_handle.s:
	mem_print_handles: factor out handles_print using handles struct ptr.

	remove defunct code find_handle_linear$.

	alloc_handles$: remove mem_* refs.
[minor] Fix pop sequence