TinTin++ Mud Client Scripts
This self loading script helps beta testers with updating source code and keeping track of versioning. Create a file named 'update' and copy the script into it. Next use 'chmod 700 update'. To run the file use ./update or sudo ./update with or without an optional argument.

This script is written for v2.01.97 and higher

#!/usr/local/bin/tt++

#EVENT {PROGRAM START}
{
    #info system save;
    #script {dir} {ls -d archive};
    #if {&dir[] == 0}
    {
        #system mkdir archive;
        #showme {<ffa>Created the <afa>archive<ffa> folder.}
    };
    #script {dir} {ls -d archive/bin};
    #if {&dir[] == 0}
    {
        #system mkdir archive/bin;
        #showme {<ffa>Created the <afa>archive/bin<ffa> folder.}
    };
    #draw {light orange} box 0 1 3 50 {<afa>TinTin++ $info[SYSTEM][CLIENT_VERSION] beta updater.};
    #switch {{%3}}
    {
        #case {{adi}}
        {
            adi
        };
        #case {{archive}}
        {
            archive
        };
        #case {{download}}
        {
            download
        };
        #case {{install}}
        {
            install
        };
        #case {{history}}
        {
            history
        };
        #case {{revert}}
        {
            revert
        };
        #default
        {
            #draw {light orange} box 0 1 8 50 {<ffa><afa>     adi<ffa>: archive + download + install}{<ffa><afa> archive<ffa>: archive current source and binary}{<ffa><afa>download<ffa>: download the beta source code}{<ffa><afa> install<ffa>: install downloaded source code}{<ffa><afa> history<ffa>: history of compiled binaries}{<afa><afa>  revert<ffa>: revert to an archived binary}
        }
    }
}

#ALIAS {adi}
{
    archive;
    download;
    install
}

#ALIAS {archive}
{
    #scan dir {tintin-beta.tar.gz} {file};
    #scan dir {tt/src/tt++} {exec};
    #showme {};
    #if {&file[tintin-beta.tar.gz]}
    {
        #format date {%t} {{%Y-%m-%d_%H:%M:%S} {$file[tintin-beta.tar.gz][TIME]}};
        #system mv tintin-beta.tar.gz archive/${date}_tintin-beta.tar.gz;
        #showme {};
        #showme {<ffa>Archiving <afa>tintin-beta.tar.gz<ffa> dated <afa>$date}
    };
    #else
    {
        #showme {<ffa>No archivable sourcecode found.}
    };
    #if {&exec[tt/src/tt++]}
    {
        #format date {%t} {{%Y-%m-%d_%H:%M:%S} {$exec[tt/src/tt++][TIME]}};
        #system mv tt/src/tt++ archive/bin/${date}_tt++;
        #showme {<ffa>Archiving <afa>tt++ executable   <ffa> dated <afa>$date}
    };
    #else
    {
        #showme {<ffa>No archivable binaries found.}
    }
}

#ALIAS {download}
{
    archive;
    #showme {};
    #showme {<ffa>Retrieving <afa>tintin-beta.tar.gz<ffa> from <afa>https://mudhalla.net};
    #system {wget https://mudhalla.net/tintin-beta.tar.gz};
    #script {file} {ls -l --time-style=full-iso tintin-beta.tar.gz};
    #if {&file[]}
    {
        #regexp {$file[1]} {%d-%d-%d %d:%d:%d}
        {
            #var date {&1-&2-&3_&4:&5:&6};#system cp tintin-beta.tar.gz archive/${date}_tintin-beta.tar.gz;#showme {};#showme {<ffa>Retrieved <afa>tintin-beta.tar.gz<ffa> dated <afa>$date}
        };
        #else
        {
            #showme {<ffa>Retrieved <afa>tintin-beta.tar.gz<ffa> dated <faa>unknown date}
        }
    };
    #else
    {
        #showme {<ffa>Failed to retrieve <afa>tintin-beta.tar.gz<ffa> <faa>file not found};
        #return
    }
}

#ALIAS {install}
{
    #showme {<ffa>Building <afa>TinTin++<ffa>, please remain seated.};
    #script {file} {ls tt/src/Makefile.in};
    #if {&file[]}
    {
        #system {cp tt/src/Makefile.in tt/src/Makefile.bak}
    };
    #system {tar -zxf tintin-beta.tar.gz};
    #script {diff} {diff tt/src/Makefile.in tt/src/Makefile.bak};
    #script {file} {ls tt/src/Makefile};
    #if {&diff[] == 0 && &file[]}
    {
        #showme {<ffa>Reconfiguration unnecessary.};
        #system {cd tt/src/;touch Makefile;make install}
    };
    #else
    {
        #showme {<ffa>Reconfiguration necessary.};
        #system {cd tt/src/;./configure;make install}
    };
    #showme {<ffa>Installation process finished.}
}

#ALIAS {history}
{
    #script {exec} {ls -l archive/bin};
    #if {&exec[] == 0}
    {
        #showme <ffa>No archived binaries found.;
        #return
    };
    #math count 0;
    #variable history {};
    #foreach {$exec[-20..-1]} {binary}
    {
        #regexp {$binary} {%d-%d-%d_%d:%d:%d_tt++}
        {
            #var date {&1-&2-&3 &4:&5:&6};#math count $count + 1;#list history insert 1 {&0};#echo {<afa>%+3s<ffa> - <afa>tt++<ffa> - <afa>%s} {$count} {$date}
        }
    };
    #if {$count == 0}
    {
        #showme <ffa>No archived binaries found.
    }
}

#ALIAS {revert}
{
    #if {{%0} == {}}
    {
        #script {exec} {ls -l archive/bin};
        #if {&exec[] == 0}
        {
            #showme <ffa>No archived binaries found.;
            #return
        };
        #showme {<ffa>You can revert to one of the following binaries:};
        #math count 0;
        #foreach {$exec[-20..-1]} {binary}
        {
            #regexp {$binary} {%d-%d-%d_%d:%d:%d_tt++}
            {
                #var date {&1-&2-&3 &4:&5:&6};#math count $count + 1;#list history insert 1 {&0};#echo {<afa>%+3s<ffa> - <afa>tt++<ffa> - <afa>%s} {$count} {$date}
            }
        };
        #showme {};
        #showme {<ffa>Currently installed binary:};
        #script {exec} {ls -l --time-style=full-iso /usr/local/bin/tt++};
        #if {&exec[] == 0}
        {
            #showme <ffa>No current binary found.
        };
        #else
        {
            #regexp {$exec[1]} {%d-%d-%d %d:%d:%d}
            {
                #var date {&1-&2-&3 &4:&5:&6};#echo {<afa>%+3s<ffa> - <afa>tt++<ffa> - <afa>%s} {} {$date}
            }
        };
        #showme <ffa>Use: revert <number> to revert.
    };
    #else
    {
        #if {%0 >= 1 && %0 <= 20}
        {
            #script {exec} {ls -l archive/bin};
            #if {&exec[] == 0}
            {
                #showme <ffa>No archived binaries found.;
                #return
            };
            #foreach {$exec[-1..-20]} {binary}
            {
                #regexp {$binary} {%d-%d-%d_%d:%d:%d_tt++}
                {
                    #var date {&1-&2-&3 &4:&5:&6};#math count $count - 1;#list history insert 1 {&0};
                }
            };
            #if {&history[%0]}
            {
                #system {cp -f archive/bin/$history[%0] /usr/local/tt++};
                #showme {<afa>archive/bin/$history[%0]<ffa> copied to <afa>/usr/local/tt++}
            }
        };
        #else
        {
            #showme <ffa>Use: revert <number> to revert.
        }
    }
}