diff options
-rwxr-xr-x | btc/mtgox/json_ticker_helper.py | 7 | ||||
-rwxr-xr-x | btc/mtgox/ticker_text.sh | 3 | ||||
-rw-r--r-- | cholerab/bling/krebs-v2_320x240.png | bin | 0 -> 1210 bytes | |||
-rw-r--r-- | cholerab/bling/krebs_inverse_r0ket.gif | bin | 0 -> 508 bytes | |||
-rw-r--r-- | cholerab/bling/krebs_plain_r0ket.gif | bin | 0 -> 508 bytes | |||
-rw-r--r-- | filebitch/README | 8 | ||||
-rwxr-xr-x | filebitch/connect_narf.pl | 2 | ||||
-rwxr-xr-x | filebitch/disconnect_narf.pl | 15 | ||||
-rw-r--r-- | kachelmann/Makefile | 11 | ||||
-rwxr-xr-x[-rw-r--r--] | kachelmann/changes | 8 | ||||
-rwxr-xr-x | kachelmann/wetter | 6 | ||||
-rw-r--r-- | morse/Makefile | 3 | ||||
-rw-r--r-- | oncology/lcd4linux.conf | 551 |
13 files changed, 593 insertions, 21 deletions
diff --git a/btc/mtgox/json_ticker_helper.py b/btc/mtgox/json_ticker_helper.py new file mode 100755 index 00000000..727dd594 --- /dev/null +++ b/btc/mtgox/json_ticker_helper.py @@ -0,0 +1,7 @@ +#!/usr/bin/python + +import json,sys + +result = json.load(sys.stdin) + +print "High: " + str(result["ticker"]["high"]) + " Low: " + str(result["ticker"]["low"]) + " Last: " + str(result["ticker"]["last"]) diff --git a/btc/mtgox/ticker_text.sh b/btc/mtgox/ticker_text.sh new file mode 100755 index 00000000..2bcac134 --- /dev/null +++ b/btc/mtgox/ticker_text.sh @@ -0,0 +1,3 @@ +#!/bin/sh +dirname=`dirname $(readlink -f $0)` +$dirname/mtgox.ticker | python $dirname/json_ticker_helper.py diff --git a/cholerab/bling/krebs-v2_320x240.png b/cholerab/bling/krebs-v2_320x240.png Binary files differnew file mode 100644 index 00000000..cae1e835 --- /dev/null +++ b/cholerab/bling/krebs-v2_320x240.png diff --git a/cholerab/bling/krebs_inverse_r0ket.gif b/cholerab/bling/krebs_inverse_r0ket.gif Binary files differnew file mode 100644 index 00000000..58c753e7 --- /dev/null +++ b/cholerab/bling/krebs_inverse_r0ket.gif diff --git a/cholerab/bling/krebs_plain_r0ket.gif b/cholerab/bling/krebs_plain_r0ket.gif Binary files differnew file mode 100644 index 00000000..d246d0c7 --- /dev/null +++ b/cholerab/bling/krebs_plain_r0ket.gif diff --git a/filebitch/README b/filebitch/README index 177bb374..5ae3a666 100644 --- a/filebitch/README +++ b/filebitch/README @@ -1,12 +1,14 @@ -The connec_sh script morses the IP + "connected" when a user connects to filebitchs proftpd server. +The connect_narf.pl script morses the IP + "connected" when a user connects to filebitchs proftpd server. +The disconnect_narf.pl scritp will do the obvious opposite. It will hopefully drive someone crazy. To make it run you need to add some lines to your proftpd config. I decided not to let Krebs do this as I didn't want to break your FTP Server (I know FTP is broken by default). The 5 necessary lines are: -ExtendedLog /var/log/proftpd/ftp_auth.log AUTH auth + <IfModule mod_exec.c> ExecEngine on - ExecOnConnect "/krebs/filebitch/connect_narf.pl" + ExecOnConnect "/krebs/filebitch/connect_narf.pl %a" + ExecOnExit "/krebs/filebitch/disconnect_narf.pl %a" </IfModule> diff --git a/filebitch/connect_narf.pl b/filebitch/connect_narf.pl index 97cc7750..8e984150 100755 --- a/filebitch/connect_narf.pl +++ b/filebitch/connect_narf.pl @@ -14,5 +14,5 @@ $ip =~ s/\b(25[0-5]|2[0-4][0-9]|[1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[1]?[0-9] system("morse -l 42 -f 2000 $ip"); system("morse -l 42 -f 3000 \"connected\""); -# my $ip = "USER"; +# Uncomment the beep below to play the enterprise connect sound # system("beep -l 42 -f 2000 -D 42 -n -l 42 -f 3337"); diff --git a/filebitch/disconnect_narf.pl b/filebitch/disconnect_narf.pl index af7bea6c..77fbf743 100755 --- a/filebitch/disconnect_narf.pl +++ b/filebitch/disconnect_narf.pl @@ -1,15 +1,16 @@ #!/usr/bin/perl #Please add the following to your proftpd config file -#ExtendedLog /var/log/proftpd/ftp_auth.log AUTH auth -#and #<IfModule mod_exec.c> # ExecEngine on -# ExecOnExit "/krebs/filebitch/disconnect_narf.pl" +# ExecOnExit "/krebs/filebitch/connect_narf.pli %a" #</IfModule> -#$ip = system("tail -n 1 /var/log/proftpd/ftp_auth.log"); +$ip = $ARGV[0]; #I'm very sorry for this regex, but i only wanted it to get _real_ IPv4 Adresses of the log file, not any kind of timestamp bullshit -#$ip =~ s/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b//g; +$ip =~ s/\b(25[0-5]|2[0-4][0-9]|[1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[1]?[0-9][0-9]?)\b//g; #getting some guys sitting next to the Server pissed :) -my $ip = "USER"; -system("beep -l 42 -f 2000 -D 42 -n -l 42 -f 1000"); +system("morse -l 42 -f 2000 $ip"); +system("morse -l 42 -f 3000 \"disconnected\""); + +# Uncomment the beep below to play the enterprise connect sound +# system("beep -l 42 -f 2000 -D 42 -n -l 42 -f 3337"); diff --git a/kachelmann/Makefile b/kachelmann/Makefile index 7fa3ec2d..3343d941 100644 --- a/kachelmann/Makefile +++ b/kachelmann/Makefile @@ -1,8 +1,7 @@ .PHONY: infect -INSTALL_DIR = /root/bin/ -infect: - mkdir -p /tmp/kachelmann/ - cp conditions ${INSTALL_DIR} - mv ${INSTALL_DIR}conditions ${INSTALL_DIR}kachelmann - chmod +x ${INSTALL_DIR}kachelmann +install: + # punani -Ei w3m php php-xml-simple + ln -s $$PWD/conditions ../bin/conditions + ln -s $$PWD/wetter ../bin/wetter + ln -s ${INSTALL_DIR}conditions ${INSTALL_DIR}kachelmann diff --git a/kachelmann/changes b/kachelmann/changes index 1875dabd..22116967 100644..100755 --- a/kachelmann/changes +++ b/kachelmann/changes @@ -10,15 +10,15 @@ my $condition_store = undef; my $data_old = $condition_store; while (1) { &xml_update(); + $data_old = $data_new; $data_new = $condition_store; - if($data_new == $data_old){ - system("espeak Das Wetter hat sich von $data_old in $data_new verändert"); + if($data_new ne $data_old){ + system("espeak \"Das Wetter hat sich von $data_old in $data_new verändert\n\""); } sleep 300; - $data_new = $data_old; } sub xml_update(){ - $xml_store = system("w3m -dump \"http://www.google.com/ig/api?weather=70327-stuttgart&hl=de\""); + $xml_store = `w3m -dump "http://www.google.com/ig/api?weather=70327-stuttgart&hl=de"`; $xml_store = $xml->XMLin($xml_store); $condition_store = $xml_store->{weather}->{current_conditions}->{condition}->{data}; } diff --git a/kachelmann/wetter b/kachelmann/wetter new file mode 100755 index 00000000..957e13e2 --- /dev/null +++ b/kachelmann/wetter @@ -0,0 +1,6 @@ +#!/usr/bin/perl +use XML::Simple; +my $result = `w3m -dump "http://www.google.com/ig/api?weather=70327-stuttgart&hl=de"`; +my $xml = new XML::Simple; +my $data = $xml->XMLin($result); +print ("$data->{weather}->{current_conditions}->{condition}->{data} bei $data->{weather}->{current_conditions}->{temp_c}->{data} Grad Zelsius\n"); diff --git a/morse/Makefile b/morse/Makefile new file mode 100644 index 00000000..2afa845e --- /dev/null +++ b/morse/Makefile @@ -0,0 +1,3 @@ +.phony: all +all: + ln -fs $$PWD/morse.sh ../bin/morse diff --git a/oncology/lcd4linux.conf b/oncology/lcd4linux.conf new file mode 100644 index 00000000..c8cbe75e --- /dev/null +++ b/oncology/lcd4linux.conf @@ -0,0 +1,551 @@ +Layout 'Krebs'
+Display 'DPF'
+
+Variables {
+ # Ticks:
+ second 1000
+ minute 60 * second
+
+ # Standard Dimensions:
+ linesize 53 # max line length, for status lines etc.
+ width100 51 # full width after padding (border)
+ width050 24 # 1/2 of full width
+ width033 17 # 1/3 of full width
+ width025 12 # 1/4 of full width
+ width010 5 # 1/10 of full width
+
+ # Colors:
+ # ToDo: Alphakanal ausnutzen
+ black '000000'
+ white 'ffffff'
+ red 'ff0000'
+ darkblue '000066'
+ lightgray 'b2b2b2'
+ darkgray '191919'
+ barcolor0 '5f5fff'
+ barcolor1 'ff5f5c'
+
+ # To be set later by timers:
+ FileMsg 'Dummy'
+}
+
+Display dpf {
+ Driver 'DPF'
+ Port 'usb0'
+ Font '6x8'
+ Foreground white
+ Background darkblue
+ Basecolor darkblue
+}
+
+Widget System {
+ class 'Text'
+ expression '*** ' . uname('nodename') . ' '. netinfo::ipaddr('eth0') . ' ***'
+ width linesize
+ align 'C'
+ update 0
+ Background lightgray
+ Foreground darkgray
+}
+
+Widget Time {
+ class 'Text'
+ expression strftime('%a, %d.%m.%Y %H:%M:%S', time()) . ' Up: ' . uptime('%d days %H:%M:%S')
+ width linesize
+ align 'C'
+ update 1 * second
+ Background lightgray
+ Foreground darkgray
+}
+
+Widget Busy {
+ class 'Text'
+ expression proc_stat::cpu('busy', 0.5 * second)
+ prefix 'Busy'
+ postfix '%'
+ width width050
+ precision 1
+ align 'R'
+ update 0.5 * second
+}
+
+Widget BusyBar {
+ class 'Bar'
+ expression proc_stat::cpu('busy', 0.5 * second)
+ expression2 proc_stat::cpu('system', 0.5 * second)
+ length width050
+ direction 'E'
+ update 0.5 * second
+ Background darkgray
+ BarColor0 barcolor0
+ BarColor1 barcolor1
+}
+
+Widget Load {
+ class 'Text'
+ expression loadavg(1)
+ prefix 'Load'
+ postfix loadavg(1) > 1.0 ? '!' : ' '
+ width width050
+ precision 1
+ align 'R'
+ update 0.5 * second
+# Foreground loadavg(1) > 1.0 ? red : white
+}
+
+Widget LoadBar {
+ class 'Bar'
+ expression loadavg(1)
+ max 4.0
+ length width050
+ direction 'E'
+ update 0.5 * second
+ Background darkgray
+ BarColor0 barcolor0
+ BarColor1 barcolor1
+}
+
+Widget Disk {
+ class 'Text'
+ # disk.[rw]blk return blocks, we assume a blocksize of 512
+ # to get the number in kB/s we would do blk*512/1024, which is blk/2
+ # expression (proc_stat::disk('.*', 'rblk', 0.5 * second)+proc_stat::disk('.*', 'wblk', 0.5 * second))/2
+ # with kernel 2.6, disk_io disappeared from /proc/stat but moved to /proc/diskstat
+ # therefore you have to use another function called 'diskstats':
+ expression (diskstats('sd[a-z]$', 'read_sectors', 0.5 * second) + diskstats('sd[a-z]$', 'write_sectors', 0.5 * second)) / 2 / 1024
+ prefix 'Disk'
+ postfix ' MB/s'
+ width width050
+ precision 1
+ align 'R'
+ update 0.5 * second
+}
+
+Widget DiskBar {
+ class 'Bar'
+ #expression proc_stat::disk('.*', 'rblk', 0.5 * second)
+ #expression2 proc_stat::disk('.*', 'wblk', 0.5 * second)
+ # for kernel 2.6:
+ expression diskstats('sd[a-z]$', 'read_sectors', 0.5 * second) / 2 / 1024
+ expression2 diskstats('sd[a-z]$', 'write_sectors', 0.5 * second) / 2 / 1024
+ length width050
+ direction 'E'
+ update 0.5 * second
+ Background darkgray
+ BarColor0 barcolor0
+ BarColor1 barcolor1
+}
+
+Widget Eth0 {
+ class 'Text'
+ expression (netdev('eth0', 'Rx_bytes', 0.5 * second) + netdev('eth0', 'Tx_bytes', 0.5 * second)) / 1024
+ prefix 'eth0'
+ postfix ' KB/s'
+ width width050
+ precision 1
+ align 'R'
+ update 0.5 * second
+}
+
+Widget Eth0Bar {
+ class 'Bar'
+ expression netdev('eth0', 'Rx_bytes', 0.5 * second) / 1024
+ expression2 netdev('eth0', 'Tx_bytes', 0.5 * second) / 1024
+ length width050
+ direction 'E'
+ update 0.5 * second
+ Background darkgray
+ BarColor0 barcolor0
+ BarColor1 barcolor1
+}
+
+Widget Eth0Traffic {
+ class 'Text'
+ expression (netdev('eth0', 'Rx_bytes', 0)+netdev('eth0', 'Tx_bytes', 0))/1024/1024/1024
+ prefix 'Traffic:'
+ postfix ' GB'
+ width 21
+ precision 3
+ align 'R'
+ update 10 * second
+}
+
+Widget MemoryTitle {
+ class 'Text'
+ expression 'Memory/Swap'
+ width width050
+ align 'L'
+ update 0
+}
+
+Widget MemoryTotal {
+ class 'Text'
+ expression meminfo('MemTotal') / 1024
+ prefix 'Memory Total '
+ postfix ' MB'
+ width width050
+ precision 0
+ align 'R'
+ update 0
+}
+
+Widget MemoryFree {
+ class 'Text'
+ expression (meminfo('MemFree') + meminfo('Cached')) / 1024
+ prefix 'Memory Free '
+ postfix ' MB'
+ width width050
+ precision 0
+ align 'R'
+ update 1 * second
+}
+
+Widget MemorySwappedTotal {
+ class 'Text'
+ expression (meminfo('SwapTotal')) / 1024
+ prefix 'Swap Total '
+ postfix ' MB'
+ width width050
+ precision 0
+ align 'R'
+ update 1 * second
+}
+
+Widget MemorySwappedFree {
+ class 'Text'
+ expression (meminfo('SwapTotal') - meminfo('SwapUsed')) / 1024
+ prefix 'Swap Free''
+ postfix ' MB'
+ width width050
+ precision 0
+ align 'R'
+ update 1 * second
+}
+
+Widget MemorySwappedUsed {
+ class 'Text'
+ expression (meminfo('SwapTotal') - meminfo('SwapFree')) / 1024
+ prefix 'Swap Used '
+ postfix ' MB'
+ width width050
+ precision 0
+ align 'R'
+ update 1 * second
+}
+
+Widget LoggedInTitle {
+ class 'Text'
+ expression 'Logged in users'
+ width width050
+ align 'L'
+ update 0
+}
+
+Widget LoggedIn {
+ class 'Text'
+ expression exec('who | awk \' { print $1 }\' | sort -ud | tr "\n" " "')
+ width width050
+ align 'L'
+ update 2 * second
+}
+
+Widget FSSpaceTitle {
+ class 'Text'
+ expression 'Disk Space available'
+ width width050
+ align 'L'
+ update 0
+}
+
+Widget FSSpace1 {
+ class 'Text'
+ expression statfs('/', 'bavail') * statfs('/', 'bsize') / 1024 / 1024 / 1024
+ prefix '/ (Root FS)'
+ postfix ' GB'
+ width width050
+ precision 2
+ align 'R'
+ update 10 * second
+}
+
+Widget HDDTempTitle {
+ class 'Text'
+ expression 'Disk Temperature°C'
+ width width050
+ align 'L'
+ update 0
+}
+
+Widget HDDTemp1 {
+ class 'Text'
+ expression hddtemp('/dev/sda')
+ width width010
+ precision 1
+ align 'R'
+ update 10 * second
+}
+
+Widget HDDTemp2 {
+ class 'Text'
+ expression hddtemp('/dev/sdb')
+ width width010
+ precision 1
+ align 'R'
+ update 10 * second
+}
+
+Widget HDDTemp3 {
+ class 'Text'
+ expression hddtemp('/dev/sdc')
+ width width010
+ precision 1
+ align 'R'
+ update 10 * second
+}
+
+Widget ServicesTitle {
+ class 'Text'
+ expression 'Services'
+ width width100
+ align 'C'
+ Background lightgray
+ Foreground darkgray
+}
+
+Widget ApacheStatus {
+ class 'Text'
+ expression 'Apache '
+ width width050
+ postfix strstr(exec('/etc/init.d/apache2 status', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget BindDNSStatus {
+ class 'Text'
+ expression 'Bind DNS '
+ width width050
+ postfix strstr(exec('/etc/init.d/bind9 status', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget MuninStatus {
+ class 'Text'
+ expression 'Monitoring '
+ width width050
+ postfix strstr(exec('/etc/init.d/munin-node status', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget MiniDLNAStatus {
+ class 'Text'
+ expression 'MiniDLNA '
+ width width050
+ postfix strstr(exec('/etc/init.d/minidlna status', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget MySQLStatus {
+ class 'Text'
+ expression 'MySQL '
+ width width050
+ postfix strstr(exec('/sbin/status mysql', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget MythTVStatus {
+ class 'Text'
+ expression 'MythTV Backend '
+ width width050
+ postfix strstr(exec('/sbin/status mythtv-backend', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget PostfixStatus {
+ class 'Text'
+ expression 'Postfix '
+ width width050
+ postfix strstr(exec('/etc/init.d/postfix status', 10 * second), 'not running') > 0 ? 'down!' : 'up'
+ update 10 * second
+}
+
+Widget ProFTPStatus {
+ class 'Text'
+ expression 'ProFTP '
+ width width050
+ postfix strstr(exec('/etc/init.d/proftpd status', 10 * second), 'not running') > 0 ? 'down!' : 'up'
+ update 10 * second
+}
+
+Widget SambaStatus {
+ class 'Text'
+ expression 'Samba '
+ width width050
+ postfix strstr(exec('/sbin/status smbd', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget SambaStatusDS {
+ class 'Text'
+ expression 'Samba '
+ width width050
+ postfix strstr(exec('/etc/init.d/samba status', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget SSHStatus {
+ class 'Text'
+ expression 'SSH '
+ width width050
+ postfix strstr(exec('/sbin/status ssh', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget SSHStatusDS {
+ class 'Text'
+ expression 'SSH '
+ width width050
+ postfix strstr(exec('/etc/init.d/ssh status', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget SWRAIDStatus {
+ class 'Text'
+ expression 'SW RAID '
+ width width050
+ postfix strstr(exec('cat /proc/mdstat', 10 * second), '[UUU]') > 0 ? 'up' : 'attention!'
+ update 10 * second
+}
+
+Widget TwonkyStatus {
+ class 'Text'
+ expression 'Twonkymedia '
+ width width050
+ postfix strstr(exec('/sbin/status twonkymedia', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget FileTitle {
+ class 'Text'
+ expression 'NumPad Logging'
+ width width100
+ align 'C'
+ Background lightgray
+ Foreground darkgray
+}
+
+Widget SetFileMsg {
+ class 'Timer'
+ expression FileMsg = exec('tail -n 1 /root/dskeylistener/listener.log', 2 * second)
+ active 1
+ update 2 * second
+}
+
+Widget File1 {
+ class 'Text'
+ expression substr(FileMsg, 0 * width100, width100)
+ width width100
+ align 'L'
+ Background darkgray
+ update 2 * second
+}
+
+Widget File2 {
+ class 'Text'
+ expression substr(FileMsg, 1 * width100, width100)
+ width width100
+ align 'L'
+ Background darkgray
+ update 2 * second
+}
+
+Widget File3 {
+ class 'Text'
+ expression substr(FileMsg, 2 * width100, width100)
+ width width100
+ align 'L'
+ Background darkgray
+ update 2 * second
+}
+
+Widget Weather1 {
+ class 'Text'
+ expression exec('/krebs/kachelmann/wetter', 10 * second)
+ prefix 'Wetter'
+ width width100
+ align 'L'
+ Background darkgray
+ update 10 * second
+}
+
+Widget Debug {
+ class 'Text'
+ expression 'Serverdisplay - pkern.at'
+ width linesize
+ align 'C'
+ Foreground lightgray
+}
+
+Widget na {
+ class 'Text'
+ expression 'n/a'
+ width 3
+ align 'L'
+}
+
+Widget Bgnd {
+ class 'Image'
+ file '/krebs/cholerab/bling/krebs-v2_320x240.png '
+ reload 0
+ update 0
+ inverted 0
+ visible 1
+}
+
+Layout Krebs {
+ Row01.Col01 'System'
+ Row02.Col01 'Time'
+ Row04.Col02 'Busy'
+ Row05.Col02 'BusyBar'
+ Row07.Col02 'Load'
+ Row08.Col02 'LoadBar'
+ Row10.Col02 'Disk'
+ Row11.Col02 'DiskBar'
+ Row13.Col02 'Eth0'
+ Row14.Col02 'Eth0Bar'
+ Row15.Col02 'Eth0Traffic'
+
+ Row04.Col28 'MemoryTitle'
+ Row05.Col29 'MemoryTotal'
+ Row06.Col29 'MemoryFree'
+ Row07.Col29 'MemorySwappedTotal'
+ Row08.Col29 'MemorySwappedUsed'
+ Row10.Col28 'LoggedInTitle'
+ #Row11.Col29 'LoggedIn'
+ Row13.Col28 'FSSpaceTitle'
+ Row14.Col29 'FSSpace1'
+
+ Row17.Col02 'ServicesTitle'
+ Row18.Col02 'BindDNSStatus'
+ Row19.Col02 'MuninStatus'
+ Row20.Col02 'ApacheStatus'
+ Row21.Col02 'MiniDLNAStatus'
+ Row18.Col29 'PostfixStatus'
+ Row19.Col29 'ProFTPStatus'
+ Row20.Col29 'SambaStatusDS'
+ Row21.Col29 'SSHStatusDS'
+
+ Row23.Col02 'Weather1'
+
+ Row25.Col02 'FileTitle'
+ Row26.Col02 'File1'
+ Row27.Col02 'File2'
+ Row28.Col02 'File3'
+
+ Row30.Col01 'Debug'
+
+ #Timer1 'SetFileMsg'
+
+ Layer 2 {
+ X1.Y1 'Bgnd'
+ }
+}
|