<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/index.php?action=history&amp;feed=atom&amp;title=WikiHUD_%28Source%29</id>
	<title>WikiHUD (Source) - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/index.php?action=history&amp;feed=atom&amp;title=WikiHUD_%28Source%29"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=WikiHUD_(Source)&amp;action=history"/>
	<updated>2026-04-06T15:42:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=WikiHUD_(Source)&amp;diff=54302&amp;oldid=prev</id>
		<title>Lillie Yifu: New page: For WikiHUD by User:Lillie Yifu  &lt;code&gt;   // wiki reader 1.03 Lillie Yifu  // http://sexsecond.blogspot.com  // chat on channel 4 the name of an article to get the top of the entry...</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=WikiHUD_(Source)&amp;diff=54302&amp;oldid=prev"/>
		<updated>2008-02-16T02:39:13Z</updated>

		<summary type="html">&lt;p&gt;New page: For &lt;a href=&quot;/wiki/WikiHUD&quot; title=&quot;WikiHUD&quot;&gt;WikiHUD&lt;/a&gt; by &lt;a href=&quot;/wiki/User:Lillie_Yifu&quot; title=&quot;User:Lillie Yifu&quot;&gt;User:Lillie Yifu&lt;/a&gt;  &amp;lt;code&amp;gt;   // wiki reader 1.03 Lillie Yifu  // http://sexsecond.blogspot.com  // chat on channel 4 the name of an article to get the top of the entry...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;For [[WikiHUD]] by [[User:Lillie Yifu]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 // wiki reader 1.03 Lillie Yifu&lt;br /&gt;
 // http://sexsecond.blogspot.com&lt;br /&gt;
 // chat on channel 4 the name of an article to get the top of the entry text&lt;br /&gt;
 // permission is granted to distribute this script free and open source with the header attached&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // adding second channel to listen for mode changes&lt;br /&gt;
 // adding category mode&lt;br /&gt;
 &lt;br /&gt;
 list wikis = [&amp;quot;wikia&amp;quot;,&amp;quot;lindenlabs&amp;quot;];&lt;br /&gt;
 list urls =  [&amp;quot;http://secondlife.wikia.com&amp;quot;,&amp;quot;http://wiki.secondlife.com&amp;quot;];&lt;br /&gt;
 // need to find the api.php for wiki.secondlife, seems like we will need some kind of list for languages, and for where various installations put files&lt;br /&gt;
&lt;br /&gt;
 integer sources;&lt;br /&gt;
 integer oldmode;&lt;br /&gt;
 integer wiki = 0;&lt;br /&gt;
 &lt;br /&gt;
 string redirect = &amp;quot;#REDIRECT&amp;quot;;&lt;br /&gt;
 integer section ;&lt;br /&gt;
 integer follow= 0;&lt;br /&gt;
 integer redirlen;&lt;br /&gt;
 string qname;&lt;br /&gt;
 list meta = [HTTP_MIMETYPE,&amp;quot;text/plain;charset=utf-8&amp;quot;];&lt;br /&gt;
 key hid;&lt;br /&gt;
 string name;&lt;br /&gt;
 string str_replace(string src, string from, string to)&lt;br /&gt;
 {//replaces all occurrences of &amp;#039;from&amp;#039; with &amp;#039;to&amp;#039; in &amp;#039;src&amp;#039;.&lt;br /&gt;
     integer len = (~-(llStringLength(from)));&lt;br /&gt;
     if(~len)&lt;br /&gt;
     {&lt;br /&gt;
         string  buffer = src;&lt;br /&gt;
         integer b_pos = -1;&lt;br /&gt;
         integer to_len = (~-(llStringLength(to)));&lt;br /&gt;
         @loop; //instead of a while loop, saves 5 bytes (and run faster).&lt;br /&gt;
         integer to_pos = ~llSubStringIndex(buffer, from);&lt;br /&gt;
         if(to_pos)&lt;br /&gt;
         {&lt;br /&gt;
             buffer = llGetSubString(src = llInsertString(llDeleteSubString(src, b_pos -= to_pos, b_pos + len), b_pos, to), (-~(b_pos += to_len)), 0x8000);&lt;br /&gt;
             jump loop;&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     return src;&lt;br /&gt;
 }&lt;br /&gt;
 key image = &amp;quot;f07b2853-6aa2-7819-cbde-a1bf4187091d&amp;quot;;&lt;br /&gt;
 vector large = &amp;lt;0.01,0.3,.3&amp;gt;;&lt;br /&gt;
 vector small = &amp;lt;0.01,0.1,0.1&amp;gt;;&lt;br /&gt;
 integer islarge =TRUE;&lt;br /&gt;
 integer qmode = 0;//mode of query&lt;br /&gt;
 integer mode = 0;//mode of command&lt;br /&gt;
 &lt;br /&gt;
 string url;&lt;br /&gt;
 integer modes;&lt;br /&gt;
 //action=query &amp;amp; list=search &amp;amp; srsearch=wikipedia &amp;amp; srlimit=10&lt;br /&gt;
 list modenames = [&amp;quot;summary&amp;quot;,&amp;quot;categories&amp;quot;,&amp;quot;word&amp;quot;,&amp;quot;full&amp;quot;,&amp;quot;source&amp;quot;,&amp;quot;wikis&amp;quot;];&lt;br /&gt;
 list phps = [ &lt;br /&gt;
 &amp;quot;/index.php?action=raw&amp;amp;title=&amp;quot;,&lt;br /&gt;
 &amp;quot;/api.php?format=xml&amp;amp;prop=categories&amp;amp;action=query&amp;amp;titles=&amp;quot;,&lt;br /&gt;
 &amp;quot;/api.php?format=xml&amp;amp;action=query&amp;amp;list=search&amp;amp;srlimit=20&amp;amp;srsearch=&amp;quot;,&lt;br /&gt;
 &amp;quot;/index.php?action=raw&amp;amp;title=&amp;quot;&lt;br /&gt;
 ];&lt;br /&gt;
 //string url = &amp;quot;http://en.wikipedia.org/index.php?action=raw&amp;amp;title=&amp;quot;;&lt;br /&gt;
 integer achan = 4;&lt;br /&gt;
 integer mchan = 5;&lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
     state_entry()&lt;br /&gt;
     {&lt;br /&gt;
         integer i = 0;&lt;br /&gt;
         url = llList2String(wikis,wiki);&lt;br /&gt;
         sources = llGetListLength(wikis);&lt;br /&gt;
         modes = llGetListLength(modenames);&lt;br /&gt;
         llSetTexture(image,ALL_SIDES);&lt;br /&gt;
         llOwnerSay(&amp;quot;Chat on channel &amp;quot;+(string) achan+&amp;quot; the name of an article to reference the Second Life Wiki.&amp;quot;);&lt;br /&gt;
         llOwnerSay(&amp;quot;Chat on channel &amp;quot;+(string) mchan+&amp;quot; to change query mode.&amp;quot;);&lt;br /&gt;
         for(;i&amp;lt;modes;++i) {&lt;br /&gt;
             llOwnerSay(llList2String(modenames, i));&lt;br /&gt;
         }&lt;br /&gt;
         &lt;br /&gt;
         llListen(achan,&amp;quot;&amp;quot;,llGetOwner(),&amp;quot;&amp;quot;);&lt;br /&gt;
         llListen(mchan,&amp;quot;&amp;quot;,llGetOwner(),&amp;quot;&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     listen(integer c,string n,key id,string m)&lt;br /&gt;
     {&lt;br /&gt;
         string article = str_replace(m,&amp;quot; &amp;quot;,&amp;quot;_&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
         if(achan==c) {&lt;br /&gt;
             if(0==mode|| 3==mode) {&lt;br /&gt;
                 qname=url+llList2String(phps,mode)+article;&lt;br /&gt;
                 name = qname +&amp;quot;&amp;amp;section=0&amp;quot;; // section postpend&lt;br /&gt;
                 llOwnerSay(name+&amp;quot; &amp;quot;+ llList2String(modenames,mode));&lt;br /&gt;
                 hid = llHTTPRequest(name, meta, &amp;quot;&amp;quot;);&lt;br /&gt;
                 qmode = mode;&lt;br /&gt;
                 section =-1;&lt;br /&gt;
                 &lt;br /&gt;
             } else if(1==mode) {&lt;br /&gt;
                 name = url+llList2String(phps,mode)+article;&lt;br /&gt;
                 llOwnerSay(name+&amp;quot; &amp;quot;+ llList2String(modenames,mode));&lt;br /&gt;
                 hid = llHTTPRequest(name, meta, &amp;quot;&amp;quot;);&lt;br /&gt;
                 qmode = mode;&lt;br /&gt;
             } else if(2==mode) {// will need a loop here&lt;br /&gt;
                 name = url+llList2String(phps,mode)+article;&lt;br /&gt;
                 llOwnerSay(name+&amp;quot; &amp;quot;+ llList2String(modenames,mode));&lt;br /&gt;
                 hid = llHTTPRequest(name, meta, &amp;quot;&amp;quot;);&lt;br /&gt;
                 qmode = mode;&lt;br /&gt;
             }&lt;br /&gt;
                 &lt;br /&gt;
         } else if (mchan ==c) { &lt;br /&gt;
         &lt;br /&gt;
             integer i =0;&lt;br /&gt;
              oldmode = mode;&lt;br /&gt;
             for(;i&amp;lt;modes;++i) {&lt;br /&gt;
                 if(llGetSubString(m,0,2) == llGetSubString(llList2String(modenames,i),0,2) ){&lt;br /&gt;
                     mode = i;&lt;br /&gt;
                     i=modes;&lt;br /&gt;
                     }&lt;br /&gt;
                 }// end look for mode&lt;br /&gt;
                 if(4 == mode) { // set source&lt;br /&gt;
                     list parse = llParseString2List(m,[&amp;quot; &amp;quot;],[]);&lt;br /&gt;
                     string newsource = llGetSubString(llList2String(parse,1),0,3);&lt;br /&gt;
                     for(i=0;i&amp;lt;sources;++i) { // I should sort and search... &lt;br /&gt;
                         if(llGetSubString(llList2String(wikis,i),0,3)==newsource) {&lt;br /&gt;
                             wiki = i;&lt;br /&gt;
                             url = llList2String(urls,wiki);&lt;br /&gt;
                             llOwnerSay(&amp;quot;Setting source to &amp;quot; + url);&lt;br /&gt;
                             i=sources;&lt;br /&gt;
                             }&lt;br /&gt;
                         }&lt;br /&gt;
                     mode = oldmode; // set mode to default, we should never stay here.&lt;br /&gt;
                 } else if(5 ==mode) {&lt;br /&gt;
                         llOwnerSay(&amp;quot;To change source chat  /&amp;quot; + (string)mchan + &amp;quot; source &amp;lt;wiki name&amp;gt;&amp;quot;);&lt;br /&gt;
                         for(i=0;i&amp;lt;sources;++i) {&lt;br /&gt;
                             llOwnerSay(llList2String(wikis,i) + &amp;quot;\t\t @ &amp;quot; + llList2String(urls,i));&lt;br /&gt;
                         }&lt;br /&gt;
                         mode = oldmode; // set mode  back, we should never stay here&lt;br /&gt;
                     } // end of mode processing&lt;br /&gt;
                 if(mode!= oldmode) {&lt;br /&gt;
                     llOwnerSay(&amp;quot;Setting mode to &amp;quot;+llList2String(modenames,mode));&lt;br /&gt;
                 }&lt;br /&gt;
             }// end channel 5&lt;br /&gt;
         }&lt;br /&gt;
             &lt;br /&gt;
             &lt;br /&gt;
             &lt;br /&gt;
     &lt;br /&gt;
     on_rez(integer p)&lt;br /&gt;
     {&lt;br /&gt;
         llResetScript();&lt;br /&gt;
     }&lt;br /&gt;
     touch_start(integer p)&lt;br /&gt;
     {&lt;br /&gt;
         if(1==p) {&lt;br /&gt;
         if(islarge) {&lt;br /&gt;
                 llSetScale(small);&lt;br /&gt;
                 islarge = FALSE;&lt;br /&gt;
                 llSetAlpha(.3,ALL_SIDES);&lt;br /&gt;
             } else {&lt;br /&gt;
                 llSetScale(large);&lt;br /&gt;
                 islarge = TRUE;&lt;br /&gt;
                 llSetAlpha(1.,ALL_SIDES);&lt;br /&gt;
             }&lt;br /&gt;
         } &lt;br /&gt;
     }&lt;br /&gt;
         &lt;br /&gt;
         timer()&lt;br /&gt;
         {&lt;br /&gt;
             if(hid){&lt;br /&gt;
                 hid = NULL_KEY;&lt;br /&gt;
                 follow = 0;&lt;br /&gt;
                 llOwnerSay(&amp;quot;Query timed out.&amp;quot;);&lt;br /&gt;
             }&lt;br /&gt;
             llSetTimerEvent(0.);&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
     http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
     {&lt;br /&gt;
         if(0==qmode || 3==qmode) { // article or full&lt;br /&gt;
             key image;&lt;br /&gt;
             if (request_id == hid) {&lt;br /&gt;
                     image = (key)llGetSubString(body,5,40); // image key if available&lt;br /&gt;
                     llSetTexture(image,ALL_SIDES);&lt;br /&gt;
                     follow = TRUE;&lt;br /&gt;
                 if(llSubStringIndex(body,redirect)!=0) { // no redirect&lt;br /&gt;
                     if( qmode == 0) { // if summary mode, or multipart query after first &lt;br /&gt;
                         llOwnerSay(body); &lt;br /&gt;
                         return;&lt;br /&gt;
                     } else {&lt;br /&gt;
                         if(0 == section &amp;amp;&amp;amp; llSubStringIndex(body,&amp;quot;=&amp;quot;)!=0) {&lt;br /&gt;
                             llOwnerSay(llGetSubString(body,0,llSubStringIndex(body,&amp;quot;\n=&amp;quot;))); //truncate at first line that starts with = &lt;br /&gt;
                         } else if(section &amp;gt;0)&lt;br /&gt;
                             llOwnerSay(body);&lt;br /&gt;
                         }&lt;br /&gt;
                         if(body !=&amp;quot;&amp;quot;) {    &lt;br /&gt;
                             ++section ; // increment section, will now be 0&lt;br /&gt;
                             name = qname + &amp;quot;&amp;amp;templates=expand&amp;amp;section=&amp;quot; + (string) section; // query name&lt;br /&gt;
                             hid = llHTTPRequest(name, meta, &amp;quot;&amp;quot;);&lt;br /&gt;
                         }&lt;br /&gt;
                     }&lt;br /&gt;
                         &lt;br /&gt;
                         &lt;br /&gt;
 &lt;br /&gt;
                 } else if(follow&amp;lt; 3) {// if redirect and less than 3 jumps&lt;br /&gt;
                     &lt;br /&gt;
                     integer start = llSubStringIndex(body,&amp;quot;[[&amp;quot;) + 2;&lt;br /&gt;
                     integer end = llSubStringIndex(body,&amp;quot;]]&amp;quot;) -1;&lt;br /&gt;
                     string m = llGetSubString(body,start, end);&lt;br /&gt;
                     ++follow ;&lt;br /&gt;
                     llSetTimerEvent(180.);&lt;br /&gt;
                     name=url+str_replace(m,&amp;quot; &amp;quot;,&amp;quot;_&amp;quot;);&lt;br /&gt;
                     llOwnerSay(&amp;quot;Following Redirect to \n&amp;quot;+name);&lt;br /&gt;
                     list meta = [HTTP_MIMETYPE,&amp;quot;text/plain;charset=utf-8&amp;quot;];&lt;br /&gt;
                     hid = llHTTPRequest(name, meta, &amp;quot;&amp;quot;);&lt;br /&gt;
                 } else {&lt;br /&gt;
                     hid = NULL_KEY;&lt;br /&gt;
                     follow=0;&lt;br /&gt;
                     llOwnerSay(&amp;quot;Too many redirects&amp;quot;);&lt;br /&gt;
                 }&lt;br /&gt;
             } else if(1 == qmode) {// xml categories&lt;br /&gt;
                 list catraw = llParseString2List(body,[&amp;quot;Category:&amp;quot;],[]);&lt;br /&gt;
                 integer i = 1;&lt;br /&gt;
                 string temp;&lt;br /&gt;
                 for(;i&amp;lt;llGetListLength(catraw);++i){&lt;br /&gt;
                     temp = llList2String(catraw,i);&lt;br /&gt;
                     llOwnerSay(llGetSubString(temp,0,llSubStringIndex(temp,&amp;quot;\&amp;quot;&amp;quot;)-1));&lt;br /&gt;
                 }&lt;br /&gt;
             } else if(2 == qmode) {&lt;br /&gt;
                  list catraw = llParseString2List(body,[&amp;quot;title=\&amp;quot;&amp;quot;],[]);&lt;br /&gt;
                 integer i = 1;&lt;br /&gt;
                 string temp;&lt;br /&gt;
                 for(;i&amp;lt;llGetListLength(catraw);++i){&lt;br /&gt;
                     temp = llList2String(catraw,i);&lt;br /&gt;
                     llOwnerSay(llGetSubString(temp,0,llSubStringIndex(temp,&amp;quot;\&amp;quot;&amp;quot;)-1));&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
     }&lt;br /&gt;
         &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lillie Yifu</name></author>
	</entry>
</feed>