Inventory Name Reader

=Description=
The following script will read out an object's inventory. The script should work fine in both mono & LSO.
= Creator =
*
= Contributors =
Add yourself here if you change this script.
= License =
This script is released into Public Domain.
= Disclaimer =
These programs are distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
=Directions=
Create a prim. Fill its inventory. Place this script into that prim. Touch to read inventory.
This script will only print out the first 1024 characters of inventory.
It is more of an example for the use of the two functions getinventory and verifyinventory...this script doesn't demonstrate the best use of the two user functions...but its an example.
=Inventory Name Reader.lsl=
<lsl>
//***********************************************************************************************************
// *
// --Inventory Name Reader-- *
// *
//***********************************************************************************************************
// www.lsleditor.org by Alphons van der Heijden (SL: Alphons Jano)
//Creator: Bobbyb30 Swashbuckler
//Attribution: none
//Created: April 3, 2009
//Last Modified: March 19, 2010
//Released: Wed, March 19, 2010
//License: Public Domain
//Status: Fully Working/Production Ready
//Version: 1.0.7
//LSLWiki: https://wiki.secondlife.com/wiki/Inventory_Name_Reader
 
//Name: Inventory Name Reader.lsl
//Purpose: Reads the inventory of an object including the script.
//Technical Overview: fairly simple to follow
//Directions: Place objects into prim. Place this script into prim. Touch script to read.
 
//Compatible: Mono & LSL compatible
//Other items required: Inventory to read
//Notes: This isn't the best way to do it...more of an example
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
//this will verify that the inventory against the list provided
integer verifyinventory(list inventory)
{
 //this will get the number of items in inventory
 integer inventorylength = llGetInventoryNumber(INVENTORY_ALL);
 //check given list against actual inventory length
 if(llGetListLength(inventory) != inventorylength)
 return FALSE;
 integer counter;//the counter
 do
 {
 if(llGetInventoryName(INVENTORY_ALL,counter) != llList2String(inventory,counter))
 return FALSE;
 }while(++counter < inventorylength);
 return TRUE;
}
//This will return a list of inventory names including this script
list getinventorynames()
{
 integer counter;//the counter
 integer inventorylength = llGetInventoryNumber(INVENTORY_ALL);//this will get the number of items in inventory
 list listofinventorynames;//where the inventory name will be stored
 //string scriptname = llGetScriptName();//the name of this script...better to call it once here
 do
 {
 string inventoryname = llGetInventoryName(INVENTORY_ALL,counter);
 //if(inventoryname != scriptname)//make sure this script isn't added into the list...optional
 listofinventorynames += inventoryname;//add inventory name to the list
 }while(++counter < inventorylength);
 return listofinventorynames;
}
list myinventory;
default
{
 state_entry()
 {
 llOwnerSay("'Inventory Name Reader.lsl' released into Public Domain by Bobbyb30 Swashbuckler (C) 2010");
 llOwnerSay("Touch to read off my inventory");
 
 myinventory = getinventorynames();//get inventory
 }
 touch_start(integer total_number)
 {
 llOwnerSay("Your inventory is as follows:");
 //check if inventory changed
 if(!verifyinventory(myinventory))
 myinventory = getinventorynames();
 //prepare for reading
 string objectname = llGetObjectName();//get object name
 llSetObjectName("");//Remove object name
 //dump off inventory...there are better ways to do this
 llOwnerSay("/me " + llDumpList2String(myinventory,"\n"));
 //end of reading
 llSetObjectName(objectname);//Restore object name
 
 }
 changed(integer change)
 {
 if(change & CHANGED_INVENTORY)//check if inventory changed
 {
 if(!verifyinventory(myinventory))
 myinventory = getinventorynames();
 }
 }
}
</lsl>
=A shorter way=
This is probably a shorter/faster/more efficient way to do it
<lsl>
// www.lsleditor.org by Alphons van der Heijden (SL: Alphons Jano)
//a short way to read off the inventory..the proper way
//Bobbyb30 Swashbuckler released into Public Domain on March 19,2010 
default
{
 touch_start(integer total_number)
 {
 integer touchcounter;
 do
 {
 if(llDetectedKey(touchcounter) == llGetOwner())
 {
 llOwnerSay("Reading inventory");
 //prepare for reading
 string objectname = llGetObjectName();//get object name
 llSetObjectName("");//Remove object name
 
 integer counter;
 integer inventorylength = llGetInventoryNumber(INVENTORY_ALL);
 do
 {
 llOwnerSay("/me " + llGetInventoryName(INVENTORY_ALL,counter));
 }while(++counter < inventorylength);
 //end of reading
 llSetObjectName(objectname);//Restore object name
 
 llOwnerSay("Done Reading\n");
 touchcounter = total_number;
 }
 }while(++touchcounter < total_number);
 }
}
</lsl>
=Other=
If you find this script of use, please do let me know=D.