<?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=Creative_Commons_License_Machine%2FBadge_Script</id>
	<title>Creative Commons License Machine/Badge Script - 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=Creative_Commons_License_Machine%2FBadge_Script"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Creative_Commons_License_Machine/Badge_Script&amp;action=history"/>
	<updated>2026-06-20T22:20:32Z</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=Creative_Commons_License_Machine/Badge_Script&amp;diff=32402&amp;oldid=prev</id>
		<title>Zarf Vantongerloo: New page: &lt;pre&gt; float gTouchTimeout = 30.0; // constant integer gDialogChannel = 85021; // constant  integer gKioskChannel; integer gKioskListener;  key gOriginalKey = NULL_KEY;  list gParams;     /...</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Creative_Commons_License_Machine/Badge_Script&amp;diff=32402&amp;oldid=prev"/>
		<updated>2007-09-23T05:36:16Z</updated>

		<summary type="html">&lt;p&gt;New page: &amp;lt;pre&amp;gt; float gTouchTimeout = 30.0; // constant integer gDialogChannel = 85021; // constant  integer gKioskChannel; integer gKioskListener;  key gOriginalKey = NULL_KEY;  list gParams;     /...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
float gTouchTimeout = 30.0; // constant&lt;br /&gt;
integer gDialogChannel = 85021; // constant&lt;br /&gt;
&lt;br /&gt;
integer gKioskChannel;&lt;br /&gt;
integer gKioskListener;&lt;br /&gt;
&lt;br /&gt;
key gOriginalKey = NULL_KEY;&lt;br /&gt;
&lt;br /&gt;
list gParams;&lt;br /&gt;
    // user parameters, stride two: [ &amp;lt;param&amp;gt;, &amp;lt;value&amp;gt; ... ]&lt;br /&gt;
&lt;br /&gt;
string gLicenseImage;&lt;br /&gt;
string gLicenseURL;&lt;br /&gt;
string gLicenseName;&lt;br /&gt;
string gLicenseDescription;&lt;br /&gt;
&lt;br /&gt;
string gFullTitle;&lt;br /&gt;
string gShortTitle;&lt;br /&gt;
&lt;br /&gt;
integer gListener;&lt;br /&gt;
&lt;br /&gt;
integer gCatalog = FALSE;&lt;br /&gt;
float gCatalogRate = 86400.0; // once a day&lt;br /&gt;
float gCatalogTime;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
addParam(string param, string value)&lt;br /&gt;
{&lt;br /&gt;
    gParams += [ param, value ];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string&lt;br /&gt;
getParam(string param)&lt;br /&gt;
{&lt;br /&gt;
    integer i = llListFindList(gParams, [ param ]);&lt;br /&gt;
    if (i &amp;lt; 0) return &amp;quot;&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    return llList2String(gParams, i + 1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
reciteParam(string param, string prompt)&lt;br /&gt;
{&lt;br /&gt;
    string value = getParam(param);&lt;br /&gt;
    if (value == &amp;quot;&amp;quot;) return;&lt;br /&gt;
    &lt;br /&gt;
    llSay(0, prompt + value);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
aboutWork()&lt;br /&gt;
{&lt;br /&gt;
    llSetObjectName(gShortTitle);&lt;br /&gt;
    reciteParam(&amp;quot;title&amp;quot;,        &amp;quot;Title: &amp;quot;);&lt;br /&gt;
    reciteParam(&amp;quot;description&amp;quot;,  &amp;quot;Description: &amp;quot;);&lt;br /&gt;
    reciteParam(&amp;quot;tags&amp;quot;,         &amp;quot;Tags: &amp;quot;);&lt;br /&gt;
    reciteParam(&amp;quot;format&amp;quot;,       &amp;quot;Format: &amp;quot;);&lt;br /&gt;
    reciteParam(&amp;quot;creator&amp;quot;,      &amp;quot;Creator: &amp;quot;);&lt;br /&gt;
    reciteParam(&amp;quot;holder&amp;quot;,       &amp;quot;Copyright Holder: &amp;quot;);&lt;br /&gt;
    reciteParam(&amp;quot;year&amp;quot;,         &amp;quot;Copyright Year: &amp;quot;);&lt;br /&gt;
    reciteParam(&amp;quot;source&amp;quot;,       &amp;quot;Source URL: &amp;quot;);&lt;br /&gt;
    llSetObjectName(gFullTitle);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
emailCatalog()&lt;br /&gt;
{&lt;br /&gt;
    string message;&lt;br /&gt;
    &lt;br /&gt;
    message += &amp;quot;original-key: &amp;quot; + (string)gOriginalKey + &amp;quot;\n&amp;quot;;&lt;br /&gt;
    message += &amp;quot;current-key: &amp;quot; + (string)llGetKey() + &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    integer n = llGetListLength(gParams);&lt;br /&gt;
    integer i;&lt;br /&gt;
    for (i = 0; i &amp;lt; n; i += 2) {&lt;br /&gt;
        string param = llList2String(gParams, i);&lt;br /&gt;
        string value = llList2String(gParams, i + 1);&lt;br /&gt;
        message += param + &amp;quot;: &amp;quot; + value + &amp;quot;\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    llEmail(&amp;quot;ccsl-object@notabene-sl.com&amp;quot;, &amp;quot;list&amp;quot;, message);&lt;br /&gt;
    &lt;br /&gt;
    gCatalogTime = llGetGMTclock();  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addToCatalog()&lt;br /&gt;
{&lt;br /&gt;
    llInstantMessage(llGetOwner(), &amp;quot;Listing in catalog (takes about 20 seconds)...&amp;quot;);&lt;br /&gt;
    gCatalog = TRUE;&lt;br /&gt;
    emailCatalog();&lt;br /&gt;
    llInstantMessage(llGetOwner(), &amp;quot;...done.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
removeFromCatalog()&lt;br /&gt;
{&lt;br /&gt;
    llInstantMessage(llGetOwner(), &amp;quot;Removing from catalog (takes about 20 seconds)...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    gCatalog = FALSE;&lt;br /&gt;
&lt;br /&gt;
    string message;&lt;br /&gt;
    &lt;br /&gt;
    message += &amp;quot;original-key: &amp;quot; + (string)gOriginalKey + &amp;quot;\n&amp;quot;;&lt;br /&gt;
    message += &amp;quot;current-key: &amp;quot; + (string)llGetKey() + &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    llEmail(&amp;quot;ccsl-object@notabene-sl.com&amp;quot;, &amp;quot;unlist&amp;quot;, message);   &lt;br /&gt;
&lt;br /&gt;
    llInstantMessage(llGetOwner(), &amp;quot;...done.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
setUp()&lt;br /&gt;
{&lt;br /&gt;
    string commercialUse = getParam(&amp;quot;commercial-use&amp;quot;);&lt;br /&gt;
    string modifications = getParam(&amp;quot;modifications&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    string license = &amp;quot;by&amp;quot;;&lt;br /&gt;
    if (commercialUse == &amp;quot;no&amp;quot;)      { license += &amp;quot;-nc&amp;quot;; }&lt;br /&gt;
    if (modifications == &amp;quot;no&amp;quot;)      { license += &amp;quot;-nd&amp;quot;; }&lt;br /&gt;
    if (modifications == &amp;quot;share&amp;quot;)   { license += &amp;quot;-sa&amp;quot;; }&lt;br /&gt;
    &lt;br /&gt;
    gLicenseURL = &amp;quot;http://creativecommons.org/licenses/&amp;quot; + license + &amp;quot;/2.5/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    gLicenseName = &amp;quot;Creative Commons Attribution&amp;quot;;&lt;br /&gt;
    if (commercialUse == &amp;quot;no&amp;quot;)      { gLicenseName += &amp;quot;-NonCommercial&amp;quot;; }&lt;br /&gt;
    if (modifications == &amp;quot;no&amp;quot;)      { gLicenseName += &amp;quot;-NoDerivs&amp;quot;; }&lt;br /&gt;
    if (modifications == &amp;quot;share&amp;quot;)   { gLicenseName += &amp;quot;-ShareAlike&amp;quot;; }&lt;br /&gt;
    gLicenseName += &amp;quot; 2.5 License&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    gLicenseDescription = &amp;quot;This work is licensed under a &amp;quot; + gLicenseName;&lt;br /&gt;
    &lt;br /&gt;
    gLicenseImage = getParam(&amp;quot;image-key&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    gShortTitle = &amp;quot;CC Notice&amp;quot;;&lt;br /&gt;
    gFullTitle = &amp;quot;Creative Commons Notice&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    string title = getParam(&amp;quot;title&amp;quot;);&lt;br /&gt;
    if (title != &amp;quot;&amp;quot;) {&lt;br /&gt;
        gFullTitle += &amp;quot; for \&amp;quot;&amp;quot; + title + &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    llSetObjectName(gFullTitle);&lt;br /&gt;
    llSetObjectDesc(gLicenseDescription);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
showLicenseImage()&lt;br /&gt;
{&lt;br /&gt;
    llSetPrimitiveParams([&lt;br /&gt;
        PRIM_TEXTURE, 2, gLicenseImage, &amp;lt;1.0, 0.8, 1.0&amp;gt;, &amp;lt;0.0, 0.075, 0.0&amp;gt;, 0.0,&lt;br /&gt;
        PRIM_TEXTURE, 4, gLicenseImage, &amp;lt;1.0, 0.8, 1.0&amp;gt;, &amp;lt;0.0, 0.075, 0.0&amp;gt;, 0.0&lt;br /&gt;
        ]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
showBadgeImage()&lt;br /&gt;
{&lt;br /&gt;
    llSetPrimitiveParams([&lt;br /&gt;
        PRIM_TEXTURE, 2, &amp;quot;badge&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, &amp;lt;0.0, 0.0, 0.0&amp;gt;, 0.0,&lt;br /&gt;
        PRIM_TEXTURE, 4, &amp;quot;badge&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, &amp;lt;0.0, 0.0, 0.0&amp;gt;, 0.0&lt;br /&gt;
        ]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer ch) {&lt;br /&gt;
        if (ch == 0) {&lt;br /&gt;
            if (gOriginalKey != NULL_KEY) {&lt;br /&gt;
                llOwnerSay(&amp;quot;You took a copy of this cc license before it was ready, .  Please generate a new one.&amp;quot;);&lt;br /&gt;
                llDie();&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                // user rez from inventory of prototype&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            // rez from kiosk&lt;br /&gt;
            gOriginalKey = llGetKey();&lt;br /&gt;
            gKioskChannel = ch;   &lt;br /&gt;
            llListen(gKioskChannel, &amp;quot;&amp;quot;, NULL_KEY, &amp;quot;&amp;quot;);&lt;br /&gt;
            llSay(gKioskChannel, &amp;quot;go&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer ch, string who, key id, string what) {&lt;br /&gt;
        integer i = llSubStringIndex(what, &amp;quot;:&amp;quot;);&lt;br /&gt;
        if (i &amp;gt; 0) {&lt;br /&gt;
            string param = llGetSubString(what, 0, i - 1);&lt;br /&gt;
            string value = llGetSubString(what, i + 1, -1);&lt;br /&gt;
            addParam(param, value);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            if (llGetSubString(what, 0, 3) == &amp;quot;done&amp;quot;) {&lt;br /&gt;
                vector p = (vector)llGetSubString(what, 5, -1);&lt;br /&gt;
                vector s = &amp;lt;0.1, 0.512, 0.180&amp;gt;;&lt;br /&gt;
                llSetPrimitiveParams([&lt;br /&gt;
                    PRIM_SIZE, s,&lt;br /&gt;
                    PRIM_POSITION, p,&lt;br /&gt;
                    PRIM_TEXTURE, 2, &amp;quot;badge&amp;quot;, &amp;lt;1, 1, 1&amp;gt;, &amp;lt;0, 0, 0&amp;gt;, 0.0,&lt;br /&gt;
                    PRIM_TEXTURE, 4, &amp;quot;badge&amp;quot;, &amp;lt;1, 1, 1&amp;gt;, &amp;lt;0, 0, 0&amp;gt;, 0.0&lt;br /&gt;
                    ]);&lt;br /&gt;
                setUp();&lt;br /&gt;
                state ready;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer n) { }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state ready&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        llSay(0, &amp;quot;Take a copy of this badge, then attach it to the work.&amp;quot;);&lt;br /&gt;
        if (gKioskChannel != 0) {&lt;br /&gt;
            gKioskListener = llListen(gKioskChannel, &amp;quot;&amp;quot;, NULL_KEY, &amp;quot;&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    on_rez(integer n) {&lt;br /&gt;
        if (gKioskChannel != 0) {&lt;br /&gt;
            llListenRemove(gKioskListener);&lt;br /&gt;
            gKioskChannel = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }        &lt;br /&gt;
    &lt;br /&gt;
    state_exit() {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer n) {&lt;br /&gt;
        showLicenseImage();&lt;br /&gt;
        gListener = llListen(gDialogChannel, &amp;quot;&amp;quot;, NULL_KEY, &amp;quot;&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        integer i;&lt;br /&gt;
        for (i = 0; i &amp;lt; n; ++i) {&lt;br /&gt;
            key id = llDetectedKey(i);&lt;br /&gt;
            &lt;br /&gt;
            string message = &lt;br /&gt;
                gLicenseDescription&lt;br /&gt;
                + &amp;quot;\n\nDeed: go to deed page on web&amp;quot;&lt;br /&gt;
                + &amp;quot;\nAbout: speak details about the work&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            list buttons = [ &amp;quot;Deed&amp;quot;, &amp;quot;About&amp;quot; ];&lt;br /&gt;
            &lt;br /&gt;
            if (id == llGetOwner()) {&lt;br /&gt;
                if (!gCatalog) {&lt;br /&gt;
                    message += &amp;quot;\nList: add object to public catalog at http://www.notabene-sl.com/cc&amp;quot;;&lt;br /&gt;
                    buttons += [ &amp;quot;List&amp;quot; ];&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    message += &amp;quot;\nUnlist: remove item from public catalog at http://www.notabene-sl.com/cc&amp;quot;;&lt;br /&gt;
                    buttons += [ &amp;quot;Unlist&amp;quot; ];&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            llDialog(id, message, buttons, gDialogChannel);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        llSetTimerEvent(gTouchTimeout);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer ch, string who, key id, string what) {&lt;br /&gt;
        if (what == &amp;quot;Deed&amp;quot;) {&lt;br /&gt;
            llLoadURL(id, gLicenseName, gLicenseURL);&lt;br /&gt;
        }&lt;br /&gt;
        else if (what == &amp;quot;About&amp;quot;) {&lt;br /&gt;
            aboutWork();&lt;br /&gt;
        }&lt;br /&gt;
        else if (what == &amp;quot;die&amp;quot;) {&lt;br /&gt;
            llDie();&lt;br /&gt;
        }&lt;br /&gt;
        else if (id == llGetOwner()) {&lt;br /&gt;
            if (what == &amp;quot;List&amp;quot;) {&lt;br /&gt;
                addToCatalog();&lt;br /&gt;
            }&lt;br /&gt;
            else if (what == &amp;quot;Unlist&amp;quot;) {&lt;br /&gt;
                removeFromCatalog();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer() {&lt;br /&gt;
        showBadgeImage();&lt;br /&gt;
        llListenRemove(gListener);&lt;br /&gt;
        &lt;br /&gt;
        if (gCatalog) {&lt;br /&gt;
            if ((llGetGMTclock() - gCatalogTime) &amp;gt;= gCatalogRate) {&lt;br /&gt;
                emailCatalog();&lt;br /&gt;
            }&lt;br /&gt;
            llSetTimerEvent(gCatalogRate);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zarf Vantongerloo</name></author>
	</entry>
</feed>