Monday, November 08, 2010 at 12:07 AM.


on structToFrontierValue (adrstruct, adrFrontierVal) {
	<<Thursday, November 11, 1999 at 2:28:23 AM by AR
		<<Implemented as a kernel verb in Frontier 6.1.
		<<Old code
			<<on structToFrontierValue (adrstruct, adrFrontierVal)
				<<a recursive routine that converts a complex xml-table structure to a frontier value
					<<<struct>s are converted to tables
					<<<array>s are converted to lists
				<<Fri, 04 Jun 1999 17:19:38 GMT by AR and PBS
					<<Added code to work around 255 chars address problem in xml.getAddressList, allowing the conversion of deeply nested arrays and structs.
				<<local (name = string.nthfield (nameof (adrstruct^), '\t', 2))
				<<case name
						<<new (tabletype, adrFrontierVal)
						<<local (i)
						<<for i = 1 to sizeOf (adrstruct^)
							<<local (itemName = string.nthField (nameOf (adrstruct^ [i]), '\t', 2))
							<<if itemName == "member"
								<<local (member = @adrstruct^ [i])
								<<local (name, adrvalue)
								<<name = xml.getValue (member, "name") 
								<<adrvalue = xml.getAddress (member, "value")
								<<if typeof (adrvalue^) == tabletype
									<<local (coercedvalue)
									<<xml.coercions.structToFrontierValue (@adrvalue^ [1], @coercedvalue)
									<<adrFrontierVal^.[name] = coercedvalue
									<<adrFrontierVal^.[name] = adrvalue^
						<<return (true)
						<<local (i, val = {}, adrdata = xml.getAddress (adrstruct, "data"))
						<<for i = 1 to sizeOf (adrdata^)
							<<local (itemName = string.nthField (nameOf (adrdata^ [i]), '\t', 2))
							<<if itemName == "value"
								<<local (adrvalue = @adrdata^ [i])
								<<if typeof (adrvalue^) == tabletype
									<<local (coercedvalue)
									<<xml.coercions.structToFrontierValue (@adrvalue^ [1], @coercedvalue)
									<<val = val + {coercedvalue}
									<<val = val + adrvalue^
						<<adrFrontierVal^ = val
						<<return (true)
					<<"base64" //2/28/99; 11:32:12 AM by DW
						<<adrFrontierVal^ = binary (base64.decode (adrstruct^))
						<<return (true)
				<<adrFrontierVal^ = adrstruct^
				<<return (true)
	kernel (xml.structtofrontiervalue)}

This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.