From d3e7adfd1f44694266d59a7dcad129b1bd67cc5b Mon Sep 17 00:00:00 2001 From: hummypkg Date: Tue, 7 Jun 2011 13:26:45 +0000 Subject: [PATCH] check in initial web interface git-svn-id: file:///root/webif/svn/humax/pkg/src/webif@161 2a923420-c742-0410-a762-8d5b09965624 --- var/mongoose/cgi-bin/epg_dump.jim | 35 + var/mongoose/cgi-bin/epg_search.jim | 144 ++++ var/mongoose/cgi-bin/epg_service.jim | 57 ++ var/mongoose/cgi-bin/service.jim | 15 + var/mongoose/cgi-bin/status.jim | 47 ++ var/mongoose/html/css/style.css | 201 +++++ var/mongoose/html/db.shtml | 4 + var/mongoose/html/epg.shtml | 9 + var/mongoose/html/img.html | 1040 ++++++++++++++++++++++++ var/mongoose/html/img/favicon.ico | Bin 0 -> 894 bytes var/mongoose/html/img/off.png | Bin 0 -> 1662 bytes var/mongoose/html/img/on.png | Bin 0 -> 2099 bytes var/mongoose/html/img/packages.jpg | Bin 0 -> 19821 bytes var/mongoose/html/img/percentback.png | Bin 0 -> 540 bytes var/mongoose/html/img/percentimage.png | Bin 0 -> 1023 bytes var/mongoose/html/img/prebg.png | Bin 0 -> 1072 bytes var/mongoose/html/img/spanner.jpg | Bin 0 -> 32376 bytes var/mongoose/html/index.shtml | 108 +++ var/mongoose/html/js/ajax.js | 24 + var/mongoose/html/js/highlight.js | 44 + var/mongoose/html/lib/footer.jim | 24 + var/mongoose/html/lib/footer.shtml | 15 + var/mongoose/html/lib/header.jim | 20 + var/mongoose/html/lib/header.shtml | 13 + var/mongoose/html/lib/topbar.jim | 22 + var/mongoose/html/lib/topbar.shtml | 17 + var/mongoose/html/packages.shtml | 14 + var/mongoose/html/sched.shtml | 4 + var/mongoose/html/services.shtml | 58 ++ var/mongoose/include/db.jim | 40 + var/mongoose/include/diskspace.jim | 24 + var/mongoose/include/epg.jim | 49 ++ var/mongoose/include/mediatomb.jim | 12 + var/mongoose/include/packages.jim | 54 ++ var/mongoose/include/sched.jim | 86 ++ var/mongoose/include/services.jim | 41 + var/mongoose/include/status.jim | 35 + var/mongoose/lib/altrow | 12 + var/mongoose/lib/cat | 9 + var/mongoose/lib/epg.class | 192 +++++ var/mongoose/lib/progressbar | 10 + 41 files changed, 2479 insertions(+) create mode 100755 var/mongoose/cgi-bin/epg_dump.jim create mode 100755 var/mongoose/cgi-bin/epg_search.jim create mode 100755 var/mongoose/cgi-bin/epg_service.jim create mode 100755 var/mongoose/cgi-bin/service.jim create mode 100755 var/mongoose/cgi-bin/status.jim create mode 100644 var/mongoose/html/css/style.css create mode 100644 var/mongoose/html/db.shtml create mode 100644 var/mongoose/html/epg.shtml create mode 100644 var/mongoose/html/img.html create mode 100644 var/mongoose/html/img/favicon.ico create mode 100644 var/mongoose/html/img/off.png create mode 100644 var/mongoose/html/img/on.png create mode 100644 var/mongoose/html/img/packages.jpg create mode 100644 var/mongoose/html/img/percentback.png create mode 100644 var/mongoose/html/img/percentimage.png create mode 100644 var/mongoose/html/img/prebg.png create mode 100644 var/mongoose/html/img/spanner.jpg create mode 100644 var/mongoose/html/index.shtml create mode 100644 var/mongoose/html/js/ajax.js create mode 100644 var/mongoose/html/js/highlight.js create mode 100644 var/mongoose/html/lib/footer.jim create mode 100644 var/mongoose/html/lib/footer.shtml create mode 100644 var/mongoose/html/lib/header.jim create mode 100644 var/mongoose/html/lib/header.shtml create mode 100644 var/mongoose/html/lib/topbar.jim create mode 100644 var/mongoose/html/lib/topbar.shtml create mode 100644 var/mongoose/html/packages.shtml create mode 100644 var/mongoose/html/sched.shtml create mode 100644 var/mongoose/html/services.shtml create mode 100755 var/mongoose/include/db.jim create mode 100755 var/mongoose/include/diskspace.jim create mode 100755 var/mongoose/include/epg.jim create mode 100755 var/mongoose/include/mediatomb.jim create mode 100755 var/mongoose/include/packages.jim create mode 100755 var/mongoose/include/sched.jim create mode 100755 var/mongoose/include/services.jim create mode 100755 var/mongoose/include/status.jim create mode 100644 var/mongoose/lib/altrow create mode 100644 var/mongoose/lib/cat create mode 100644 var/mongoose/lib/epg.class create mode 100644 var/mongoose/lib/progressbar diff --git a/var/mongoose/cgi-bin/epg_dump.jim b/var/mongoose/cgi-bin/epg_dump.jim new file mode 100755 index 0000000..93983da --- /dev/null +++ b/var/mongoose/cgi-bin/epg_dump.jim @@ -0,0 +1,35 @@ +#!/mod/bin/jimsh + +package require cgi +source /mod/var/mongoose/lib/epg.class + +puts "Content-Type: text/html" +puts "" + +source /mod/var/mongoose/html/lib/header.jim + +cgi_input +#cgi_dump + +set service 0 +set service 4351 +catch { set service [dict get $_cgi service] } +set event 0 +catch { set event [dict get $_cgi event] } +set raw 0 +catch { set raw [dict get $_cgi raw] } + +puts "
"
+if { $raw == 0 } {
+	puts [epg exec dump -raw 1 -service $service -event $event]
+	puts "
+		Click here for extended dump"
+} else {
+	puts [epg exec dumpraw -raw 1 -service $service -event $event]
+}
+
+puts "
" + +epg cleanup +source /mod/var/mongoose/html/lib/footer.jim + diff --git a/var/mongoose/cgi-bin/epg_search.jim b/var/mongoose/cgi-bin/epg_search.jim new file mode 100755 index 0000000..843f9ac --- /dev/null +++ b/var/mongoose/cgi-bin/epg_search.jim @@ -0,0 +1,144 @@ +#!/mod/bin/jimsh + +package require cgi +source /mod/var/mongoose/lib/epg.class +source /mod/var/mongoose/lib/altrow + +puts "Content-Type: text/html" +puts "" + +source /mod/var/mongoose/html/lib/header.jim + +puts "" + +cgi_input +#cgi_dump +#set _cgi [dict create term "doctor who"] +#set env(REQUEST_URI) "test" + +set term "" +catch { set term [dict get $_cgi term] } +set cmd "search" +if {[dict exists $_cgi full]} { set cmd "searchall" } +set ct 0 +catch { set ct [dict get $_cgi ct] } + +puts " +
+Search EPG: +Search descriptions as well as titles. + +" + +set db [sqlite3.open /var/lib/humaxtv/setup.db] +set res [$db query { + select itemBlob from TBL_USERCONFIG + where itemName like 'EPG\_KEYWORD\_%%' ESCAPE '\' +}] + +proc cts {type img text} { + puts " +  $text"; +} + +puts { +
+
+ Content Type Searches: +
+
+} +cts 1 "Movie" "Film/Drama" +cts 2 "News" "News/Current affairs" +cts 3 "Show" "Show/Game show" +cts 4 "Sports" "Sport" +cts 5 "Children" "Children" +cts 10 "Leisure" "Leisure" +puts { +
+
+} +cts 6 "Music" "Music/Ballet/Dance" +cts 7 "Art" "Arts/Culture" +cts 8 "Society" "Social/Political/Economic" +cts 9 "Education" "Education/Science/Factual" +puts {
} + +if {[llength $res] > 0} { + puts { +
+ Keyword Searches: +
+
+ } + set done 0 + foreach keyword $res { + if {$done == 1} { puts " | " } else { incr done } + set kw [string range [lindex $keyword 1] 1 end] + puts "$kw + " + } + puts "
" +} + +$db close + +puts "
" + +if {$ct > 0 } { + set records [epg fetch dump -type $ct] +} elseif {$term ne ""} { + set records [epg fetch $cmd -extra $term] +} + +puts { + + + + + + + +} + +proc rsort {v1 v2} { + set v1s [$v1 get start] + set v2s [$v2 get start] + + if {$v1s == $v2s} { return 0 } + if {$v1s > $v2s } { return 1 } + return -1 +} + + +set i 0 +foreach record [lsort -command rsort $records] { + altrow + puts "" + puts "" + puts "" + puts [$record cell] + puts "" + puts "" + flush stdout +} +puts "
DateChannelProgrammeSynopsis
+ [clock format [$record get start] -format "%a %d %b %Y"]
+ [clock format [$record get start] -format "%H:%M %Z"]
[$record get channel_num] + + [$record get channel_name] + [$record get text][$record get warning]
" + +if {$term != ""} { + puts " + + " +} + +epg cleanup +source /mod/var/mongoose/html/lib/footer.jim + diff --git a/var/mongoose/cgi-bin/epg_service.jim b/var/mongoose/cgi-bin/epg_service.jim new file mode 100755 index 0000000..0cd1dc4 --- /dev/null +++ b/var/mongoose/cgi-bin/epg_service.jim @@ -0,0 +1,57 @@ +#!/mod/bin/jimsh + +package require cgi +source /mod/var/mongoose/lib/epg.class +source /mod/var/mongoose/lib/altrow + +puts "Content-Type: text/html" +puts "" + +source /mod/var/mongoose/html/lib/header.jim + +cgi_input +#cgi_dump + +set service 0 +set service 4351 +catch { set service [dict get $_cgi service] } + +set records [epg fetch dump -service $service] + +set channel_num [[lindex $records 0] get channel_num] +set channel_name [[lindex $records 0] get channel_name] + +puts "

Channel: $channel_num - $channel_name

" + +puts { + + + + + + + + +} + +set i 0 +foreach record $records { + altrow + if {[$record showing]} { + puts "" + } else { puts "" } + puts "" + puts "" + puts [$record cell] + puts "" + puts "" + puts "" + flush stdout +} +puts "
DateTimeProgrammeSynopsis
+ [clock format [$record get start] -format "%a %d %b %Y"] + [clock format [$record get start] -format "%H:%M"][$record get text][$record get warning]
" + +epg cleanup +source /mod/var/mongoose/html/lib/footer.jim + diff --git a/var/mongoose/cgi-bin/service.jim b/var/mongoose/cgi-bin/service.jim new file mode 100755 index 0000000..784cb5e --- /dev/null +++ b/var/mongoose/cgi-bin/service.jim @@ -0,0 +1,15 @@ +#!/mod/bin/jimsh + +package require cgi + +puts "Content-Type: text/html" +puts "" + +cgi_input +#cgi_dump + +catch { set service [dict get $_cgi service] } +catch { set action [dict get $_cgi action] } + +catch { puts [exec /mod/bin/service $action $service] } + diff --git a/var/mongoose/cgi-bin/status.jim b/var/mongoose/cgi-bin/status.jim new file mode 100755 index 0000000..ce17849 --- /dev/null +++ b/var/mongoose/cgi-bin/status.jim @@ -0,0 +1,47 @@ +#!/mod/bin/jimsh + +set pid [exec pgrep humaxtv] + +if {[catch {set data [exec lsof -p $pid | grep Video | fgrep .ts]} ]} { + exit +} + +set lines [split $data "\n"] +foreach line $lines { + regsub -all -- {[[:space:]]+} $line " " line + set fields [split $line " "] + set name [lindex [split $line "/"] end] + set size($name) [lindex $fields 6] + set seen($name) 0 +} + +sleep 2 + +set data [exec lsof -p $pid | grep Video | fgrep .ts] +regsub -all -- {[[:space:]]+} $line " " line +set lines [split $data "\n"] +foreach line $lines { + regsub -all -- {[[:space:]]+} $line " " line + set fields [split $line " "] + set name [lindex [split $line "/"] end] + set size2 [lindex $fields 6] + + if { $size2 > $size($name) && $seen($name) < 1 } { + set mode "Recording" + set icon "745_1_11_Video_1REC.png" + } else { + set mode "Watching" + set icon "745_1_10_Video_2Live.png" + } + + incr seen($name) + + lappend output "$mode $name" +} + +if {[llength $output]} { + puts "Content-Type: text/html" + puts "" + puts [join $output "
\n"] +} + diff --git a/var/mongoose/html/css/style.css b/var/mongoose/html/css/style.css new file mode 100644 index 0000000..9b1a122 --- /dev/null +++ b/var/mongoose/html/css/style.css @@ -0,0 +1,201 @@ +html body +{ + line-height: 1.55em; + font-family: "Lucida Grande", verdana, lucida, helvetica, sans-serif; + background-color: #f8f8f8; + margin: 1em; + padding: 0; + font-size: small; +} + +html>body +{ + font-size: small; +} + +div.container +{ + position: relative; + padding-left: 30px; + padding-right: 30px; + height: 116px; +} + +div.container .left +{ + position: absolute; + left: 0px; + top: 0px; + width: 30px; + height: 116px; +} + +div.container .right +{ + position: absolute; + right: 0px; + top: 0px; + width: 30px; + height: 116px; +} + +div.container .middle +{ + background-image: url('/images/154_1_00_WIN_MD116_2C.png'); + background-repeat: repeat-x; + height: 116px; +} + +div.footer +{ + clear: both; + padding-top: 2em; +} + +table +{ + empty-cells: show; +} + +table.borders, table.borders td, table.borders th +{ + border: 1px solid #669933; + empty-cells: show; +} + +table tr.odd +{ + background: #ccff99; + color: black; +} + +table tr.even +{ + background: #ffffcc; + color: black; +} + +table td,table th +{ + font-size: small; +} + +table th +{ + font-weight: bold; + text-align: left; +} + +pre +{ + font-family: Consolas, 'Courier New', Courier, monospace; + color: black; + background: #f9d9b0 url('/img/prebg.png') repeat-x top; + line-height: 1.24; + padding: 3px 8px; + margin: 0 5em 1em 5em; + border-color: #f9d9b0; + border-bottom: 1px solid #f9bc6d; + border-top-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + -khtml-border-top-left-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + -khtml-border-top-right-radius: 4px; + + white-space: pre-wrap; + white-space: -moz-pre-wrap !important; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + white-space: break-word; +} + +.shadowbox +{ + background: #ccc; + position: relative; + width: 60%; + top: 2px; + left: 2px; +} + +.shadowbox div +{ + background: white; + color: #005000; + border: 1px solid #7a4707; + padding: 10px; + position: relative; + top: -2px; + left: -2px; +} + +:link:focus, +:visited:focus, +:link, +:visited, +:link:active, +:visited:active +{ + text-decoration: none; + color: #1e5bbd; + background-color: transparent; +} +/* +:link:hover, +:visited:hover +{ + text-decoration: underline; + background-color: #b4d5ff; + color: #1559B3; +} +*/ + +.footnote +{ + color: #ff4000; + background: transparent; + font-size: 70%; + font-weight: bold; +} + +.blueshade +{ + background: #b9daff; + color: black; +} + +.yellowshade +{ + background: #f6ff5b; + color: black; +} + +.pinkshade +{ + background: #ffccff; + color: black; +} + +.greenshade +{ + background: #e4faa8; + color: black; +} + +.orangeshade +{ + background: #ffeeaa; + color: black; +} + +img.progress +{ + background: transparent url(/img/percentback.png) top left no-repeat; + padding: 0; + margin: 0; + background-position: 1px 0; +} + diff --git a/var/mongoose/html/db.shtml b/var/mongoose/html/db.shtml new file mode 100644 index 0000000..4fe6b71 --- /dev/null +++ b/var/mongoose/html/db.shtml @@ -0,0 +1,4 @@ + + + + diff --git a/var/mongoose/html/epg.shtml b/var/mongoose/html/epg.shtml new file mode 100644 index 0000000..51c2e4a --- /dev/null +++ b/var/mongoose/html/epg.shtml @@ -0,0 +1,9 @@ + +
+Search EPG: +Search descriptions as well as titles. + +
+ + + diff --git a/var/mongoose/html/img.html b/var/mongoose/html/img.html new file mode 100644 index 0000000..a05ea79 --- /dev/null +++ b/var/mongoose/html/img.html @@ -0,0 +1,1040 @@ + +Images + +111_1_00_Cursor_1L_Arrow.png
+111_1_00_Cursor_2R_Arrow.png
+111_1_00_Cursor_S1_1L.png
+111_1_00_Cursor_S1_2C.png
+111_1_00_Cursor_S1_2C_30.png
+111_1_00_Cursor_S1_3R.png
+111_1_00_Cursor_S1_H_1L.png
+111_1_00_Cursor_S1_H_2C.png
+111_1_00_Cursor_S1_H_2C_30.png
+111_1_00_Cursor_S1_H_3R.png
+111_2_00_Cursor_S2_1L.png
+111_2_00_Cursor_S2_2C.png
+111_2_00_Cursor_S2_2C_30.png
+111_2_00_Cursor_S2_3R.png
+111_2_00_Cursor_S2_H_1L.png
+111_2_00_Cursor_S2_H_2C.png
+111_2_00_Cursor_S2_H_2C_30.png
+111_2_00_Cursor_S2_H_3R.png
+111_3_00_Cursor_S3_1L.png
+111_3_00_Cursor_S3_2C.png
+111_3_00_Cursor_S3_2C_30.png
+111_3_00_Cursor_S3_3R.png
+111_3_00_Cursor_S3_Arrow1.png
+111_3_00_Cursor_S3_Arrow2.png
+112_1_00_Cursor_W1_1L.png
+112_1_00_Cursor_W1_2C.png
+112_1_00_Cursor_W1_2C_30.png
+112_1_00_Cursor_W1_3R.png
+112_1_00_Cursor_W1_H_1L.png
+112_1_00_Cursor_W1_H_2C.png
+112_1_00_Cursor_W1_H_2C_30.png
+112_1_00_Cursor_W1_H_3R.png
+113_1_00_Cursor_D1_1L.png
+113_1_00_Cursor_D1_2C.png
+113_1_00_Cursor_D1_2C_30.png
+113_1_00_Cursor_D1_3R.png
+113_1_00_Cursor_D1_H_1L.png
+113_1_00_Cursor_D1_H_2C.png
+113_1_00_Cursor_D1_H_2C_30.png
+113_1_00_Cursor_D1_H_3R.png
+113_2_26_Cursor_M3_1L.png
+113_2_26_Cursor_M3_2C.png
+113_2_26_Cursor_M3_2C_30.png
+113_2_26_Cursor_M3_3R.png
+113_2_26_Cursor_M3_H_1L.png
+113_2_26_Cursor_M3_H_2C.png
+113_2_26_Cursor_M3_H_2C_30.png
+113_2_26_Cursor_M3_H_3R.png
+114_1_00_Cursor_C1.png
+114_1_00_Cursor_C1_H.png
+117_1_10_Cursor_M1_1L.png
+117_1_10_Cursor_M1_2C.png
+117_1_10_Cursor_M1_2C_30.png
+117_1_10_Cursor_M1_3R.png
+117_1_10_Cursor_M1_H_1L.png
+117_1_10_Cursor_M1_H_2C.png
+117_1_10_Cursor_M1_H_2C_30.png
+117_1_10_Cursor_M1_H_3R.png
+117_2_16_Cursor_M2_1L.png
+117_2_16_Cursor_M2_2C.png
+117_2_16_Cursor_M2_2C_30.png
+117_2_16_Cursor_M2_3R.png
+117_2_16_Cursor_M2_H_1L.png
+117_2_16_Cursor_M2_H_2C.png
+117_2_16_Cursor_M2_H_2C_30.png
+117_2_16_Cursor_M2_H_3R.png
+121_1_00_BTN_S1_C.png
+121_1_00_BTN_S1_D.png
+121_1_00_BTN_S1_N.png
+122_1_00_BTN_W1_C.png
+122_1_00_BTN_W1_N.png
+122_2_00_BTN_W2_C_1L.png
+122_2_00_BTN_W2_C_2C.png
+122_2_00_BTN_W2_C_2C_30.png
+122_2_00_BTN_W2_C_3R.png
+122_2_00_BTN_W2_H_1L.png
+122_2_00_BTN_W2_H_2C.png
+122_2_00_BTN_W2_H_2C_30.png
+122_2_00_BTN_W2_H_3R.png
+122_2_00_BTN_W2_N_1L.png
+122_2_00_BTN_W2_N_2C.png
+122_2_00_BTN_W2_N_2C_30.png
+122_2_00_BTN_W2_N_3R.png
+123_1_00_BTN_D1_C.png
+123_1_00_BTN_D1_N.png
+123_2_00_BTN_D2_C.png
+123_2_00_BTN_D2_N.png
+124_1_00_BTN_P1_C_Bar.png
+124_1_00_BTN_P1_C_PIN.png
+124_1_00_BTN_P1_H_Bar.png
+124_1_00_BTN_P1_H_PIN.png
+124_1_00_BTN_P1_N_Bar.png
+124_1_00_BTN_P1_N_PIN.png
+125_1_00_BTN_K1_C.png
+125_1_00_BTN_K1_D.png
+125_1_00_BTN_K1_N.png
+125_2_00_BTN_K2_C.png
+125_2_00_BTN_K2_N.png
+125_3_00_BTN_K3_C.png
+125_3_00_BTN_K3_N.png
+125_4_00_BTN_K4_C.png
+125_4_00_BTN_K4_N.png
+125_5_00_BTN_K5_C.png
+125_5_00_BTN_K5_D.png
+125_5_00_BTN_K5_N.png
+126_1_00_BTN_C1_C.png
+126_1_00_BTN_C1_H.png
+126_1_00_BTN_C1_N.png
+131_1_00_Cell_E1.png
+131_1_00_Cell_E2_1L.png
+131_1_00_Cell_E2_2C.png
+131_1_00_Cell_E2_2C_30.png
+131_1_00_Cell_E2_3R.png
+131_1_00_Cell_E3_1L.png
+131_1_00_Cell_E3_2C.png
+131_1_00_Cell_E3_2C_30.png
+131_1_00_Cell_E3_3R.png
+131_1_00_Cell_E4_1L.png
+131_1_00_Cell_E4_2C.png
+131_1_00_Cell_E4_2C_30.png
+131_1_00_Cell_E4_3R.png
+131_1_00_Cell_E5_1L.png
+131_1_00_Cell_E5_2C.png
+131_1_00_Cell_E5_2C_30.png
+131_1_00_Cell_E5_3R.png
+131_1_00_Cell_E6_1L.png
+131_1_00_Cell_E6_2C.png
+131_1_00_Cell_E6_2C_30.png
+131_1_00_Cell_E6_3R.png
+131_1_00_Cell_E7_1L.png
+131_1_00_Cell_E7_2C.png
+131_1_00_Cell_E7_2C_30.png
+131_1_00_Cell_E7_3R.png
+131_1_00_Cell_E8_1L.png
+131_1_00_Cell_E8_2C.png
+131_1_00_Cell_E8_2C_30.png
+131_1_00_Cell_E8_3R.png
+141_0_00_WIN_Dim.png
+141_1_00_WIN_ST2_1T_PopList.png
+141_1_00_WIN_ST2_2M_PopList.png
+141_1_00_WIN_ST2_3B_PopList.png
+141_2_00_WIN_ST2_1UP_Arrow.png
+141_2_00_WIN_ST2_2DN_Arrow.png
+141_3_00_WIN_ST3_1L.png
+141_3_00_WIN_ST3_2C.png
+141_3_00_WIN_ST3_3R.png
+142_1_00_WIN_SF1_iPlate.png
+142_1_00_WIN_SF2_1L_iPlate.png
+142_1_00_WIN_SF2_2C_iPlate.png
+142_1_00_WIN_SF2_3R_iPlate.png
+142_1_00_WIN_SF3_1L.png
+142_1_00_WIN_SF3_2C.png
+142_1_00_WIN_SF3_3R.png
+142_1_00_WIN_SF4_1L.png
+142_1_00_WIN_SF4_2C.png
+142_1_00_WIN_SF4_3R.png
+142_1_00_WIN_SF5_1L.png
+142_1_00_WIN_SF5_2C.png
+142_1_00_WIN_SF5_3R.png
+143_1_10_WIN_P1_1L.png
+143_1_10_WIN_P1_2C.png
+143_1_10_WIN_P1_3R.png
+144_1_00_WIN_E1_1L_Keyboard.png
+144_1_00_WIN_E1_2C_Keyboard.png
+144_1_00_WIN_E1_3R_Keyboard.png
+144_2_00_WIN_E2_1L_Calendar.png
+144_2_00_WIN_E2_2C_Calendar.png
+144_2_00_WIN_E2_3R_Calendar.png
+145_1_13_WIN_M1_1L_Arrow.png
+145_1_13_WIN_M1_2C.png
+145_1_13_WIN_M1_3R_Arrow.png
+145_2_17_WIN_M2_Connecting.png
+151_1_00_Process01.png
+151_1_00_Process02.png
+151_1_00_Process03.png
+151_1_00_Process04.png
+151_1_00_Process05.png
+151_1_00_Process06.png
+151_1_00_Process07.png
+151_1_00_Process08.png
+151_1_00_Process09.png
+151_1_00_Process10.png
+151_1_00_Process11.png
+151_1_00_Process12.png
+151_2_00_Process01_S.png
+151_2_00_Process02_S.png
+151_2_00_Process03_S.png
+151_2_00_Process04_S.png
+152_1_00_WIN_LD_1L.png
+152_1_00_WIN_LD_2C.png
+152_1_00_WIN_LD_3R.png
+153_0_00_WIN_TD_1L_Arrow.png
+153_0_00_WIN_TD_2R_Arrow.png
+153_1_00_WIN_TD160_1L.png
+153_1_00_WIN_TD160_2C.png
+153_1_00_WIN_TD160_3R.png
+153_2_00_WIN_TD230_1L.png
+153_2_00_WIN_TD230_2C.png
+153_2_00_WIN_TD230_3R.png
+153_2_00_WIN_TD243_1L.png
+153_2_00_WIN_TD243_2C.png
+153_2_00_WIN_TD243_3R.png
+153_2_00_WIN_TD261_1L.png
+153_2_00_WIN_TD261_2C.png
+153_2_00_WIN_TD261_3R.png
+153_2_00_WIN_TD271_1L.png
+153_2_00_WIN_TD271_2C.png
+153_2_00_WIN_TD271_3R.png
+153_2_00_WIN_TD288_1L.png
+153_2_00_WIN_TD288_2C.png
+153_2_00_WIN_TD288_3R.png
+153_2_00_WIN_TD299_1L.png
+153_2_00_WIN_TD299_2C.png
+153_2_00_WIN_TD299_3R.png
+153_3_00_WIN_TD320_1L.png
+153_3_00_WIN_TD320_2C.png
+153_3_00_WIN_TD320_3R.png
+153_3_00_WIN_TD335_1L.png
+153_3_00_WIN_TD335_2C.png
+153_3_00_WIN_TD335_3R.png
+153_3_00_WIN_TD343_1L.png
+153_3_00_WIN_TD343_2C.png
+153_3_00_WIN_TD343_3R.png
+153_3_00_WIN_TD362_1L.png
+153_3_00_WIN_TD362_2C.png
+153_3_00_WIN_TD362_3R.png
+153_3_00_WIN_TD368_1L.png
+153_3_00_WIN_TD368_2C.png
+153_3_00_WIN_TD368_3R.png
+153_3_00_WIN_TD370_1L.png
+153_3_00_WIN_TD370_2C.png
+153_3_00_WIN_TD370_3R.png
+153_4_00_WIN_TD400_1L.png
+153_4_00_WIN_TD400_2C.png
+153_4_00_WIN_TD400_3R.png
+153_4_00_WIN_TD406_1L.png
+153_4_00_WIN_TD406_2C.png
+153_4_00_WIN_TD406_3R.png
+153_4_00_WIN_TD412_1L.png
+153_4_00_WIN_TD412_2C.png
+153_4_00_WIN_TD412_3R.png
+153_4_00_WIN_TD419_1L.png
+153_4_00_WIN_TD419_2C.png
+153_4_00_WIN_TD419_3R.png
+153_4_00_WIN_TD444_1L.png
+153_4_00_WIN_TD444_2C.png
+153_4_00_WIN_TD444_3R.png
+153_4_00_WIN_TD456_1L.png
+153_4_00_WIN_TD456_2C.png
+153_4_00_WIN_TD456_3R.png
+153_4_00_WIN_TD462_1L.png
+153_4_00_WIN_TD462_2C.png
+153_4_00_WIN_TD462_3R.png
+153_4_00_WIN_TD488_1L.png
+153_4_00_WIN_TD488_2C.png
+153_4_00_WIN_TD488_3R.png
+153_4_00_WIN_TD493_1L.png
+153_4_00_WIN_TD493_2C.png
+153_4_00_WIN_TD493_3R.png
+153_5_00_WIN_TD500_1L.png
+153_5_00_WIN_TD500_2C.png
+153_5_00_WIN_TD500_3R.png
+153_5_00_WIN_TD506_1L.png
+153_5_00_WIN_TD506_2C.png
+153_5_00_WIN_TD506_3R.png
+153_5_00_WIN_TD517_1L.png
+153_5_00_WIN_TD517_2C.png
+153_5_00_WIN_TD517_3R.png
+153_5_00_WIN_TD532_1L.png
+153_5_00_WIN_TD532_2C.png
+153_5_00_WIN_TD532_2C_30.png
+153_5_00_WIN_TD532_3R.png
+153_5_00_WIN_TD550_1L.png
+153_5_00_WIN_TD550_2C.png
+153_5_00_WIN_TD550_3R.png
+154_0_00_WIN_MD082_1L.png
+154_0_00_WIN_MD082_2C.png
+154_0_00_WIN_MD082_3R.png
+154_0_00_WIN_MD_Pincode.png
+154_1_00_WIN_MD116_1L.png
+154_1_00_WIN_MD116_2C.png
+154_1_00_WIN_MD116_3R.png
+154_1_00_WIN_MD150_1L.png
+154_1_00_WIN_MD150_2C.png
+154_1_00_WIN_MD150_3R.png
+154_1_00_WIN_MD184_1L.png
+154_1_00_WIN_MD184_2C.png
+154_1_00_WIN_MD184_3R.png
+154_2_00_WIN_MD218_1L.png
+154_2_00_WIN_MD218_2C.png
+154_2_00_WIN_MD218_3R.png
+154_2_00_WIN_MD252_1L.png
+154_2_00_WIN_MD252_2C.png
+154_2_00_WIN_MD252_3R.png
+154_2_00_WIN_MD272_1L.png
+154_2_00_WIN_MD272_2C.png
+154_2_00_WIN_MD272_3R.png
+154_2_00_WIN_MD286_1L.png
+154_2_00_WIN_MD286_2C.png
+154_2_00_WIN_MD286_3R.png
+154_3_00_WIN_MD320_1L.png
+154_3_00_WIN_MD320_2C.png
+154_3_00_WIN_MD320_3R.png
+154_3_00_WIN_MD354_1L.png
+154_3_00_WIN_MD354_2C.png
+154_3_00_WIN_MD354_3R.png
+154_3_00_WIN_MD388_1L.png
+154_3_00_WIN_MD388_2C.png
+154_3_00_WIN_MD388_3R.png
+154_4_00_WIN_MD400_1L.png
+154_4_00_WIN_MD400_2C.png
+154_4_00_WIN_MD400_3R.png
+154_4_00_WIN_MD464_1L.png
+154_4_00_WIN_MD464_2C.png
+154_4_00_WIN_MD464_3R.png
+155_1_00_WIN_BD239_1L.png
+155_1_00_WIN_BD239_2C.png
+155_1_00_WIN_BD239_3R_Point.png
+155_1_00_WIN_BD283_1L.png
+155_1_00_WIN_BD283_2C.png
+155_1_00_WIN_BD283_3R_Point.png
+155_1_00_WIN_BD370_1L.png
+155_1_00_WIN_BD370_1L_Point.png
+155_1_00_WIN_BD370_2C.png
+155_1_00_WIN_BD370_3R.png
+155_1_00_WIN_BD370_3R_Point.png
+156_1_00_WIN_SD.png
+156_1_00_WIN_SD_1T.png
+156_1_00_WIN_SD_2M.png
+156_1_00_WIN_SD_3B.png
+156_1_00_WIN_SD_Icon.png
+161_1_00_Line_W1.png
+162_1_00_Box_B1_1T.png
+162_1_00_Box_B1_2M.png
+162_1_00_Box_B1_2M_30.png
+162_1_00_Box_B1_3B.png
+162_1_00_Box_B2_1T.png
+162_1_00_Box_B2_2M.png
+162_1_00_Box_B2_2M_30.png
+162_1_00_Box_B2_3B.png
+162_1_00_Box_B3_1T.png
+162_1_00_Box_B3_2M.png
+162_1_00_Box_B3_2M_30.png
+162_1_00_Box_B3_3B.png
+162_1_00_Box_B4_1L.png
+162_1_00_Box_B4_2C.png
+162_1_00_Box_B4_3R.png
+162_1_00_Box_B5_1L.png
+162_1_00_Box_B5_2C.png
+162_1_00_Box_B5_2C_473.png
+162_1_00_Box_B5_3R.png
+162_1_00_Box_B6_1L.png
+162_1_00_Box_B6_2C.png
+162_1_00_Box_B6_3R.png
+162_1_00_Box_B7_Find.png
+162_1_00_Box_B8.png
+163_1_00_Box_W1.png
+163_1_00_Box_W2.png
+163_1_00_Box_W3.png
+163_1_00_Box_W4.png
+163_1_00_Box_W5_1L.png
+163_1_00_Box_W5_2C.png
+163_1_00_Box_W5_3R.png
+163_1_00_Box_W6.png
+163_1_00_Box_W8.png
+164_1_00_Input_K1_1L.png
+164_1_00_Input_K1_2C.png
+164_1_00_Input_K1_3R.png
+164_2_00_Input_C1_1L.png
+164_2_00_Input_C1_2C.png
+164_2_00_Input_C2_1L.png
+164_2_00_Input_C2_2C.png
+165_1_00_Bar_W1_BG.png
+165_1_00_Bar_W1_LV.png
+165_1_00_Bar_W2_BG.png
+165_1_00_Bar_W2_LV.png
+165_1_00_Bar_W3_BG.png
+165_1_00_Bar_W3_LV.png
+165_1_11_Bar_W4_BG_1L.png
+165_1_11_Bar_W4_BG_2CR.png
+165_1_11_Bar_W4_LV1_Watch.png
+165_1_11_Bar_W4_LV2_Record.png
+165_2_00_Bar_B1_BG.png
+165_2_00_Bar_B1_LV.png
+165_2_00_Bar_B2_BG.png
+165_2_00_Bar_B2_LV.png
+165_2_00_Bar_B3_BG.png
+165_2_00_Bar_B3_LV.png
+165_2_00_Bar_B4_BG.png
+165_2_00_Bar_B4_LV.png
+165_2_00_Bar_B5_BG.png
+165_2_00_Bar_B5_Cursor.png
+165_2_00_Bar_B5_LV.png
+165_2_00_Bar_B5_LV_Disable.png
+165_2_00_Bar_B6_BG.png
+165_2_00_Bar_B6_LV.png
+165_2_00_Bar_B7_BG.png
+165_2_00_Bar_B7_LV.png
+165_2_10_Bar_B8_BG.png
+165_2_10_Bar_B8_LV1_TSR.png
+165_2_10_Bar_B8_LV2_PB.png
+165_2_10_Bar_B8_LV3_REC.png
+165_2_10_Bar_B8_LV3_REC_Disable.png
+165_2_11_Bar_B9_BG.png
+165_2_11_Bar_B9_LV.png
+166_1_00_Scroll_B1_1T.png
+166_1_00_Scroll_B1_2M.png
+166_1_00_Scroll_B1_3B.png
+166_2_00_Scroll_W1_1T.png
+166_2_00_Scroll_W1_2M.png
+166_2_00_Scroll_W1_3B.png
+166_2_00_Scroll_W1_4BG.png
+167_1_00_Check_B1_C_1On.png
+167_1_00_Check_B1_C_2Off.png
+167_1_00_Check_B1_N_1On.png
+167_1_00_Check_B1_N_2Off.png
+167_1_00_Check_B2_Video.png
+167_1_00_Check_B3_Music.png
+167_1_00_Check_B4_Wizard.png
+167_2_00_Check_W1_C_1On.png
+167_2_00_Check_W1_C_2Off.png
+167_2_00_Check_W1_N_1On.png
+167_2_00_Check_W1_N_2Off.png
+167_2_00_Check_W2_SUB.png
+168_1_00_Radio_B1_C_1On.png
+168_1_00_Radio_B1_C_2Off.png
+168_1_00_Radio_B1_N_1On.png
+168_1_00_Radio_B1_N_2Off.png
+171_1_00_CAS.png
+171_1_00_CAS_BD.png
+171_1_00_CAS_BT.png
+171_1_00_CAS_CR.png
+171_1_00_CAS_CX.png
+171_1_00_CAS_IR.png
+171_1_00_CAS_MG.png
+171_1_00_CAS_NA.png
+171_1_00_CAS_ND.png
+171_1_00_CAS_VA.png
+172_1_00_1080i.png
+172_1_00_576i.png
+172_1_00_576p.png
+172_1_00_720p.png
+172_1_00_HD.png
+172_1_26_HD_Simulcast.png
+172_1_26_SD.png
+172_1_26_SD_Simulcast.png
+172_3_00_16_9.png
+172_3_00_4_3.png
+173_1_00_G1_Art.png
+173_1_00_G1_Children.png
+173_1_00_G1_Education.png
+173_1_00_G1_Leisure.png
+173_1_00_G1_Movie.png
+173_1_00_G1_Music.png
+173_1_00_G1_News.png
+173_1_00_G1_Show.png
+173_1_00_G1_Society.png
+173_1_00_G1_Special.png
+173_1_00_G1_Sports.png
+173_1_26_G1_Not_Supported.png
+173_1_26_G1_Unclassified.png
+173_2_00_G2_Art.png
+173_2_00_G2_Children.png
+173_2_00_G2_Education.png
+173_2_00_G2_Leisure.png
+173_2_00_G2_Movie.png
+173_2_00_G2_Music.png
+173_2_00_G2_News.png
+173_2_00_G2_Show.png
+173_2_00_G2_Society.png
+173_2_00_G2_Special.png
+173_2_00_G2_Sports.png
+173_2_26_G2_Not_Supported.png
+173_2_26_G2_Unclassified.png
+173_3_00_G3_Art.png
+173_3_00_G3_Children.png
+173_3_00_G3_Education.png
+173_3_00_G3_Leisure.png
+173_3_00_G3_Movie.png
+173_3_00_G3_Music.png
+173_3_00_G3_News.png
+173_3_00_G3_Show.png
+173_3_00_G3_Society.png
+173_3_00_G3_Special.png
+173_3_00_G3_Sports.png
+173_3_26_G3_Not_Supported.png
+173_3_26_G3_Unclassified.png
+174_1_00_Raiting_04.png
+174_1_00_Raiting_05.png
+174_1_00_Raiting_06.png
+174_1_00_Raiting_07.png
+174_1_00_Raiting_08.png
+174_1_00_Raiting_09.png
+174_1_00_Raiting_10.png
+174_1_00_Raiting_11.png
+174_1_00_Raiting_12.png
+174_1_00_Raiting_13.png
+174_1_00_Raiting_14.png
+174_1_00_Raiting_15.png
+174_1_00_Raiting_16.png
+174_1_00_Raiting_17.png
+174_1_00_Raiting_18.png
+174_1_26_GuidancePolicy.png
+174_3_06_Raiting_21_Mark.png
+174_3_06_Raiting_22_Mark.png
+175_1_00_Reservation_Watch.png
+175_1_11_Reservation_Record.png
+175_1_11_Series_Record.png
+178_1_00_Icon_AD.png
+178_1_00_Icon_Dolby.png
+178_1_00_Icon_Dolby_Plus.png
+178_1_00_Icon_Lock.png
+178_1_00_Icon_Multiaudio.png
+178_1_00_Icon_Multifeed.png
+178_1_00_Icon_Serise.png
+178_1_00_Icon_Subtitle.png
+178_1_00_Icon_Teletext.png
+178_1_26_Icon_InteractiveMHEG.png
+178_1_26_Icon_Recommend.png
+178_1_26_Icon_Split.png
+178_2_00_Icon_Subtitle_DVB.png
+178_2_00_Icon_Subtitle_EBU.png
+181_1_00_Help1_Red.png
+181_1_00_Help2_Green.png
+181_1_00_Help3_Yellow.png
+181_1_00_Help4_Blue.png
+181_1_00_Help5_OPT_Plus.png
+181_1_00_Help7_Info.png
+181_1_00_Help9_EXIT.png
+181_1_18_Help10_Portal.png
+181_1_18_Help9_EXIT.png
+182_1_00_Help1_Red_D.png
+182_1_00_Help2_Green_D.png
+182_1_00_Help3_Yellow_D.png
+182_1_00_Help4_Blue_D.png
+182_1_00_Help5_OPT_Plus_D.png
+183_1_16_Help1_Red_H.png
+211_1_00_WIZ_BG.png
+211_1_00_WIZ_Install_BG.png
+212_1_00_WIZ_Step01.png
+212_1_00_WIZ_Step02.png
+212_1_00_WIZ_Step03.png
+212_1_00_WIZ_Step04.png
+212_1_00_WIZ_Step05.png
+212_1_00_WIZ_Step06.png
+212_1_00_WIZ_Step07.png
+213_1_00_WIZ_Help1_LR.png
+213_1_00_WIZ_Help2_UD.png
+213_1_00_WIZ_Help3_OK.png
+214_1_00_GMT1.png
+214_1_00_GMT2.png
+214_1_00_GMT3.png
+215_1_00_WIZ_1Auto_43.png
+215_1_00_WIZ_2Letter_43.png
+215_1_00_WIZ_3Centre_43.png
+215_2_00_WIZ_1Auto_169.png
+215_2_00_WIZ_2Pillar_169.png
+215_2_00_WIZ_3Zoom_169.png
+216_1_00_WIZ_1Quick.png
+216_1_00_WIZ_2Auto.png
+216_1_00_WIZ_3Skip.png
+216_1_00_WIZ_4Automatic_Search.png
+217_1_07_WIZ_LAN.png
+217_1_08_WIZ_WiFi.png
+311_1_00_Menu_BG.png
+321_1_00_Menu_CHList.png
+321_1_00_Menu_CHList_1UP.png
+321_1_00_Menu_CHList_2DN.png
+322_1_00_Menu_EPG.png
+322_1_00_Menu_EPG_1UP.png
+322_1_00_Menu_EPG_2DN.png
+323_1_10_Menu_Video.png
+323_1_10_Menu_Video_1UP.png
+323_1_10_Menu_Video_2DN.png
+324_1_12_Menu_Music.png
+324_1_12_Menu_Music_1UP.png
+324_1_12_Menu_Music_2DN.png
+325_1_13_Menu_Photo.png
+325_1_13_Menu_Photo_1UP.png
+325_1_13_Menu_Photo_2DN.png
+326_1_00_Menu_Settings.png
+326_1_00_Menu_Settings_1UP.png
+326_1_00_Menu_Settings_2DN.png
+327_1_18_Menu_Portal.png
+327_1_18_Menu_Portal_1UP.png
+327_1_18_Menu_Portal_2DN.png
+328_1_26_Menu_TV_Guide.png
+328_1_26_Menu_TV_Guide_2DN.png
+331_1_00_ST_MSG_Icon.png
+332_1_00_ST_1Auto_43.png
+332_1_00_ST_2Letter_43.png
+332_1_00_ST_3Centre_43.png
+332_2_00_ST_1Auto_169.png
+332_2_00_ST_2Pillar_169.png
+332_2_00_ST_3Zoom_169.png
+332_4_00_ST_DST.png
+334_1_00_ST_Install_BG.png
+345_1_27_ST_USB_01.png
+345_1_27_ST_USB_02.png
+345_1_27_ST_USB_03.png
+345_1_27_ST_USB_04.png
+345_1_27_ST_USB_05.png
+345_1_27_ST_USB_06.png
+345_1_27_ST_USB_07.png
+345_1_27_ST_USB_08.png
+345_1_27_ST_USB_09.png
+345_1_27_ST_USB_10.png
+345_1_27_ST_USB_11.png
+345_1_27_ST_USB_12.png
+345_1_27_ST_USB_13.png
+345_1_27_ST_USB_14.png
+345_1_27_ST_USB_15.png
+345_1_27_ST_USB_16.png
+345_1_27_ST_USB_17.png
+345_1_27_ST_USB_18.png
+345_1_27_ST_USB_19.png
+345_1_27_ST_USB_20.png
+345_1_27_ST_USB_21.png
+345_1_27_ST_USB_22.png
+345_1_27_ST_USB_23.png
+345_1_27_ST_USB_24.png
+345_1_27_ST_USB_25.png
+345_1_27_ST_USB_BG.png
+345_2_14_ST_HDD_01.png
+345_2_14_ST_HDD_02.png
+345_2_14_ST_HDD_03.png
+345_2_14_ST_HDD_04.png
+345_2_14_ST_HDD_05.png
+345_2_14_ST_HDD_06.png
+345_2_14_ST_HDD_07.png
+345_2_14_ST_HDD_08.png
+345_2_14_ST_HDD_09.png
+345_2_14_ST_HDD_10.png
+345_2_14_ST_HDD_11.png
+345_2_14_ST_HDD_12.png
+345_2_14_ST_HDD_13.png
+345_2_14_ST_HDD_14.png
+345_2_14_ST_HDD_15.png
+345_2_14_ST_HDD_16.png
+345_2_14_ST_HDD_17.png
+345_2_14_ST_HDD_18.png
+345_2_14_ST_HDD_19.png
+345_2_14_ST_HDD_20.png
+345_2_14_ST_HDD_21.png
+345_2_14_ST_HDD_22.png
+345_2_14_ST_HDD_23.png
+345_2_14_ST_HDD_24.png
+345_2_14_ST_HDD_25.png
+345_3_07_ST_LAN.png
+345_3_07_ST_LAN_DisCon.png
+345_4_08_ST_WiFi.png
+345_4_08_ST_WiFi_00.png
+345_4_08_ST_WiFi_01.png
+345_4_08_ST_WiFi_02.png
+345_4_08_ST_WiFi_03.png
+345_4_08_ST_WiFi_04.png
+345_4_08_ST_WiFi_05.png
+345_4_08_ST_WiFi_DisCon.png
+345_5_08_ST_WiFi_Signal_00.png
+345_5_08_ST_WiFi_Signal_01.png
+345_5_08_ST_WiFi_Signal_02.png
+345_5_08_ST_WiFi_Signal_03.png
+345_5_08_ST_WiFi_Signal_04.png
+345_5_08_ST_WiFi_Signal_05.png
+345_6_08_ST_Ad_Hoc.png
+411_1_00_CH_MBar.png
+411_1_00_CH_Number0.png
+411_1_00_CH_Number1.png
+411_1_00_CH_Number2.png
+411_1_00_CH_Number3.png
+411_1_00_CH_Number4.png
+411_1_00_CH_Number5.png
+411_1_00_CH_Number6.png
+411_1_00_CH_Number7.png
+411_1_00_CH_Number8.png
+411_1_00_CH_Number9.png
+412_1_00_IP_Quality_01.png
+412_1_00_IP_Quality_02.png
+412_1_00_IP_Quality_03.png
+412_1_00_IP_Quality_04.png
+412_1_00_IP_Quality_05.png
+412_1_00_IP_Quality_06.png
+412_1_00_IP_Quality_07.png
+412_1_00_IP_Quality_08.png
+412_1_00_IP_Quality_09.png
+412_1_00_IP_Quality_10.png
+413_1_00_IP_Strength_01.png
+413_1_00_IP_Strength_02.png
+413_1_00_IP_Strength_03.png
+413_1_00_IP_Strength_04.png
+413_1_00_IP_Strength_05.png
+413_1_00_IP_Strength_06.png
+413_1_00_IP_Strength_07.png
+413_1_00_IP_Strength_08.png
+413_1_00_IP_Strength_09.png
+413_1_00_IP_Strength_10.png
+414_1_00_IP_1L_Arrow.png
+414_1_00_IP_2R_Arrow.png
+414_1_00_IP_3U_Arrow.png
+414_1_00_IP_4D_Arrow.png
+421_1_00_CH_Title_1L_Arrow.png
+421_1_00_CH_Title_2R_Arrow.png
+422_1_00_CH_Group_1L_Arrow.png
+422_1_00_CH_Group_2R_Arrow.png
+422_1_00_CH_Group_WIN.png
+423_1_00_CH_FAV_1Focus_C.png
+423_1_00_CH_FAV_2Select_C.png
+423_1_00_CH_FAV_3Select_N.png
+423_1_00_CH_FAV_4Unselect_CN.png
+431_1_00_Audio_C_1L.png
+431_1_00_Audio_C_2R.png
+431_1_00_Audio_N_1L.png
+431_1_00_Audio_N_2R.png
+432_1_00_Audio_Dolby_C.png
+432_1_00_Audio_Dolby_N.png
+432_1_00_Audio_Dolby_Plus_C.png
+432_1_00_Audio_Dolby_Plus_N.png
+434_1_00_HardofHearing_C.png
+434_1_00_HardofHearing_N.png
+434_1_00_HardofHearing_W.png
+441_1_00_Mute.png
+441_1_00_Volume.png
+451_1_33_Radio_BG.png
+461_1_00_SF_1Auto_43.png
+461_1_00_SF_2Letter_43.png
+461_1_00_SF_3Centre_43.png
+461_2_00_SF_1Auto_169.png
+461_2_00_SF_2Pillar_169.png
+461_2_00_SF_3Zoom_169.png
+462_1_26_RCT_Icon.png
+467_1_00_SF_Dolby.png
+467_1_00_SF_Dolby_Plus.png
+468_1_00_SF_Not_Available.png
+469_1_18_Network_Error.png
+511_1_00_EPG_BG40.png
+511_1_00_EPG_PIG.png
+511_1_00_EPG_Time.png
+512_1_00_EPG_PIG_DL.png
+512_1_33_EPG_PIG_Radio.png
+513_1_00_EPG_Current.png
+514_1_11_DRM_Expiration.png
+514_1_11_DRM_No_Record.png
+515_1_11_EPG_REC.png
+516_1_26_Freeview_Logo.png
+517_1_26_EPG_DST.png
+519_1_26_Help.png
+519_2_26_Dot_1TM.png
+519_2_26_Dot_2B.png
+521_1_00_RP_Daily_C.png
+521_1_00_RP_Daily_N.png
+521_1_00_RP_Weekdays_C.png
+521_1_00_RP_Weekdays_N.png
+521_1_00_RP_Weekend_C.png
+521_1_00_RP_Weekend_N.png
+521_1_00_RP_Weekly_C.png
+521_1_00_RP_Weekly_N.png
+531_1_00_Find_1L_Arrow.png
+531_1_00_Find_2R_Arrow.png
+532_1_00_Find_Path_Arrow.png
+533_1_00_Find_Keyword_C.png
+533_1_00_Find_Keyword_N.png
+534_1_00_Find_1T_Arrow.png
+534_1_00_Find_2B_Arrow.png
+611_1_10_Bookmark.png
+611_1_10_Cursor.png
+611_1_10_Cursor_Time.png
+611_1_11_AutoSplitting.png
+611_1_11_ProgramDivision.png
+611_2_11_Sub_line_1M.png
+611_2_11_Sub_line_2B.png
+621_1_11_TSR_Play01.png
+621_1_11_TSR_Play02.png
+621_1_11_TSR_Play03.png
+621_1_11_TSR_Play04.png
+621_1_11_TSR_Play05.png
+621_1_11_TSR_Play06.png
+621_1_11_TSR_Play07.png
+621_1_11_TSR_Play08.png
+622_1_11_TSR_Pause.png
+623_1_11_TSR_FF_x02.png
+623_1_11_TSR_FF_x04.png
+623_1_11_TSR_FF_x08.png
+623_1_11_TSR_FF_x16.png
+623_1_11_TSR_FF_x32.png
+624_1_11_TSR_FB_x02.png
+624_1_11_TSR_FB_x04.png
+624_1_11_TSR_FB_x08.png
+624_1_11_TSR_FB_x16.png
+624_1_11_TSR_FB_x32.png
+625_1_11_TSR_Slow_x02.png
+625_1_11_TSR_Slow_x04.png
+625_1_11_TSR_Slow_x08.png
+631_1_10_PB_Play01.png
+631_1_10_PB_Play02.png
+631_1_10_PB_Play03.png
+631_1_10_PB_Play04.png
+631_1_10_PB_Play05.png
+631_1_10_PB_Play06.png
+631_1_10_PB_Play07.png
+631_1_10_PB_Play08.png
+631_2_10_PB_RCUKey.png
+632_1_10_PB_Pause.png
+633_1_10_PB_FF_x02.png
+633_1_10_PB_FF_x04.png
+633_1_10_PB_FF_x08.png
+633_1_10_PB_FF_x16.png
+633_1_10_PB_FF_x32.png
+634_1_10_PB_FB_x02.png
+634_1_10_PB_FB_x04.png
+634_1_10_PB_FB_x08.png
+634_1_10_PB_FB_x16.png
+634_1_10_PB_FB_x32.png
+635_1_10_PB_Slow_x02.png
+635_1_10_PB_Slow_x04.png
+635_1_10_PB_Slow_x08.png
+641_1_11_REC_Play01.png
+641_1_11_REC_Play02.png
+641_1_11_REC_Play03.png
+641_1_11_REC_Play04.png
+641_1_11_REC_Play05.png
+641_1_11_REC_Play06.png
+641_1_11_REC_Play07.png
+641_1_11_REC_Play08.png
+642_1_11_REC_Pause.png
+643_1_11_REC_FF_x02.png
+643_1_11_REC_FF_x04.png
+643_1_11_REC_FF_x08.png
+643_1_11_REC_FF_x16.png
+643_1_11_REC_FF_x32.png
+644_1_11_REC_FB_x02.png
+644_1_11_REC_FB_x04.png
+644_1_11_REC_FB_x08.png
+644_1_11_REC_FB_x16.png
+644_1_11_REC_FB_x32.png
+645_1_11_REC_Slow_x02.png
+645_1_11_REC_Slow_x04.png
+645_1_11_REC_Slow_x08.png
+646_1_11_Recording.png
+711_1_09_Media_Folder.png
+711_1_09_Media_Folder_C.png
+711_2_09_Media_Folder_Plus.png
+711_2_09_Media_Folder_Plus_C.png
+711_3_09_Media_Folder_UP.png
+711_4_14_Media_HDD.png
+711_4_14_Media_HDD_C.png
+711_5_15_Media_USB.png
+711_5_15_Media_USB_C.png
+711_6_17_Media_DLNA.png
+721_1_12_Music_Title.png
+722_1_12_Music_BTN_C.png
+722_1_12_Music_BTN_N.png
+723_1_12_Music_Info_BG.png
+724_1_12_Music_Preview1.png
+724_1_12_Music_Preview2.png
+725_1_12_Music_1Repeat.png
+725_1_12_Music_2RepeatAll.png
+725_1_12_Music_3Shuffle.png
+725_2_12_Music_1Play.png
+725_2_12_Music_2Pause.png
+725_3_12_Music_Album_BG.png
+731_1_13_Photo_Title.png
+732_1_13_Photo_BTN_C.png
+732_1_13_Photo_BTN_N.png
+733_1_13_Photo_Preview1.png
+741_1_10_Video_Title.png
+742_1_10_Video_BTN_C.png
+742_1_10_Video_BTN_N.png
+743_1_10_Video_New.png
+743_2_10_Video_Thumb_BG.png
+743_3_11_Video_REC_Fail.png
+743_4_10_Video_Xvid_File.png
+743_4_10_Video_Xvid_File_Fail.png
+743_5_00_Video_Auto_Delete.png
+744_1_10_Video_Preview.png
+744_1_11_Video_Preview_Radio.png
+744_1_33_Video_Preview_Radio.png
+745_1_10_Video_2Live.png
+745_1_11_Video_1REC.png
+745_1_11_Video_3REC_Live.png
+746_1_10_Video_Folder.png
+746_1_10_Video_Folder_Plus.png
+746_2_10_Video_Folder_UP.png
+747_1_17_Video_Folder_Net.png
+748_1_15_Video_Folder_USB.png
+749_1_26_Video_Copy_Protect.png
+749_1_26_Video_Encryption.png
+749_2_11_Video_DRM.png
+751_1_16_Copy_BTN_C.png
+751_1_16_Copy_BTN_N.png
+752_1_16_Copy_1Auto.png
+752_1_16_Copy_2Video.png
+752_1_16_Copy_3Music.png
+752_1_16_Copy_4Photo.png
+753_1_16_Copy_Num1.png
+753_1_16_Copy_Num1_H.png
+753_1_16_Copy_Num2.png
+753_1_16_Copy_Num2_H.png
+753_1_16_Copy_Num3.png
+753_1_16_Copy_Num3_H.png
+761_1_15_USB_BTN_C.png
+761_1_15_USB_BTN_N.png
+762_1_15_Connect_USB.png
+763_1_15_Media_USB_01.png
+763_1_15_Media_USB_02.png
+763_1_15_Media_USB_03.png
+763_1_15_Media_USB_04.png
+763_1_15_Media_USB_05.png
+763_1_15_Media_USB_06.png
+763_1_15_Media_USB_07.png
+763_1_15_Media_USB_08.png
+763_1_15_Media_USB_09.png
+763_1_15_Media_USB_10.png
+763_1_15_Media_USB_11.png
+763_1_15_Media_USB_12.png
+763_1_15_Media_USB_13.png
+763_1_15_Media_USB_14.png
+763_1_15_Media_USB_15.png
+763_1_15_Media_USB_16.png
+763_1_15_Media_USB_17.png
+763_1_15_Media_USB_18.png
+763_1_15_Media_USB_19.png
+763_1_15_Media_USB_20.png
+763_1_15_Media_USB_21.png
+763_1_15_Media_USB_22.png
+763_1_15_Media_USB_23.png
+763_1_15_Media_USB_24.png
+763_1_15_Media_USB_25.png
+763_1_15_Media_USB_BG.png
+764_1_15_HDD_Pairing.png
+771_1_14_HDD_BTN_C.png
+771_1_14_HDD_BTN_N.png
+772_1_14_Media_HDD_01.png
+772_1_14_Media_HDD_02.png
+772_1_14_Media_HDD_03.png
+772_1_14_Media_HDD_04.png
+772_1_14_Media_HDD_05.png
+772_1_14_Media_HDD_06.png
+772_1_14_Media_HDD_07.png
+772_1_14_Media_HDD_08.png
+772_1_14_Media_HDD_09.png
+772_1_14_Media_HDD_10.png
+772_1_14_Media_HDD_11.png
+772_1_14_Media_HDD_12.png
+772_1_14_Media_HDD_13.png
+772_1_14_Media_HDD_14.png
+772_1_14_Media_HDD_15.png
+772_1_14_Media_HDD_16.png
+772_1_14_Media_HDD_17.png
+772_1_14_Media_HDD_18.png
+772_1_14_Media_HDD_19.png
+772_1_14_Media_HDD_20.png
+772_1_14_Media_HDD_21.png
+772_1_14_Media_HDD_22.png
+772_1_14_Media_HDD_23.png
+772_1_14_Media_HDD_24.png
+772_1_14_Media_HDD_25.png
+781_1_17_DLNA_Title.png
+782_1_17_DLNA_BTN_C.png
+782_1_17_DLNA_BTN_N.png
+821_1_03_NUM0_A0.png
+821_1_03_NUM0_A1_80.png
+821_1_03_NUM0_A2_60.png
+821_1_03_NUM0_A3_40.png
+821_1_03_NUM0_A4_20.png
+821_1_03_NUM1_A0.png
+821_1_03_NUM1_A1_80.png
+821_1_03_NUM1_A2_60.png
+821_1_03_NUM1_A3_40.png
+821_1_03_NUM1_A4_20.png
+821_1_03_NUM2_A0.png
+821_1_03_NUM2_A1_80.png
+821_1_03_NUM2_A2_60.png
+821_1_03_NUM2_A3_40.png
+821_1_03_NUM2_A4_20.png
+821_1_03_NUM3_A0.png
+821_1_03_NUM3_A1_80.png
+821_1_03_NUM3_A2_60.png
+821_1_03_NUM3_A3_40.png
+821_1_03_NUM3_A4_20.png
+821_1_03_NUM4_A0.png
+821_1_03_NUM4_A1_80.png
+821_1_03_NUM4_A2_60.png
+821_1_03_NUM4_A3_40.png
+821_1_03_NUM4_A4_20.png
+821_1_03_NUM5_A0.png
+821_1_03_NUM5_A1_80.png
+821_1_03_NUM5_A2_60.png
+821_1_03_NUM5_A3_40.png
+821_1_03_NUM5_A4_20.png
+821_1_03_NUM6_A0.png
+821_1_03_NUM6_A1_80.png
+821_1_03_NUM6_A2_60.png
+821_1_03_NUM6_A3_40.png
+821_1_03_NUM6_A4_20.png
+821_1_03_NUM7_A0.png
+821_1_03_NUM7_A1_80.png
+821_1_03_NUM7_A2_60.png
+821_1_03_NUM7_A3_40.png
+821_1_03_NUM7_A4_20.png
+821_1_03_NUM8_A0.png
+821_1_03_NUM8_A1_80.png
+821_1_03_NUM8_A2_60.png
+821_1_03_NUM8_A3_40.png
+821_1_03_NUM8_A4_20.png
+821_1_03_NUM9_A0.png
+821_1_03_NUM9_A1_80.png
+821_1_03_NUM9_A2_60.png
+821_1_03_NUM9_A3_40.png
+821_1_03_NUM9_A4_20.png
+821_1_03_NUM_Dim.png
+822_1_03_Colon_A0.png
+822_1_03_Colon_A1_80.png
+822_1_03_Colon_A2_60.png
+822_1_03_Colon_A3_40.png
+822_1_03_Colon_A4_20.png
+823_1_03_Reflection_A0.png
+823_1_03_Reflection_A1_80.png
+823_1_03_Reflection_A2_60.png
+823_1_03_Reflection_A3_40.png
+823_1_03_Reflection_A4_20.png
+824_1_03_Flip1_A0.png
+824_1_03_Flip1_A1_80.png
+824_1_03_Flip1_A2_60.png
+824_1_03_Flip1_A3_40.png
+824_1_03_Flip1_A4_20.png
+824_1_03_Flip2_A0.png
+824_1_03_Flip2_A1_80.png
+824_1_03_Flip2_A2_60.png
+824_1_03_Flip2_A3_40.png
+824_1_03_Flip2_A4_20.png
+824_1_03_Flip3_A0.png
+824_1_03_Flip3_A1_80.png
+824_1_03_Flip3_A2_60.png
+824_1_03_Flip3_A3_40.png
+824_1_03_Flip3_A4_20.png
+ + diff --git a/var/mongoose/html/img/favicon.ico b/var/mongoose/html/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..189df8c94f4f1e7734553e83194e22a8637e1cf9 GIT binary patch literal 894 zcmZQzU<5(|0R}M0U}j(t1F|%L7$l?s#Ec9QK$3bO?LPyN2x2FZih;@~R}VA+%{pWe zO!Lu1@N+R;NF((SW8oy+M`+f;-2+z%WWW`}W$}yPm&LS^pn7BlXl(qZp(zG($x{#2 HMi&YI;4kIL literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/off.png b/var/mongoose/html/img/off.png new file mode 100644 index 0000000000000000000000000000000000000000..15a6f8e782beb7b5f03a8cd35ddc4708c470be56 GIT binary patch literal 1662 zcmV-^27&pBP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipY@ z3L6@A7b%qh00sU@L_t(&-tC*;YZO-$$3HVWn_aW12!#-6iME)QlEwxk22rqS)5Ja$ zOHmQ}q=*>v;$z!K|ANxTeX$P_Bqf+UC?N}Z4#I+okl+t6NWf=hf6VUe&h3NT;pXn0 zNwSSQWAVViFn4D5p7TB5bIv_?)^c4}0IaO6FgG{H%a<=Hm&<&R&PgtpqrbnO^XJbq zIywq~<+`r8efu_#A3x^jUw&d}@Edx1K0*kQXk{$R!gXC9J$l64+#G#?O62)SXQ>RXG`SN9~<>h5DJ3GtofBc4%N>i)VXf~U{1G;n? zFq0uI%fhlOQmGVOU0v9=&8=Iv7#bSl(4j-Ym}OZlKqUznAq2kf(`YpCJdb+4&hqjy zSFc{hx_R@anEY{^ufF`6QmKUJc>yRY2s$9|8X(<(Ca+JWQaFx7Pfri)>+38P78(2Y zds3;?wnGI7r6`1Lf5)CSPCzr<0(lbI=*vXf){V?xtS%$Ye64(`mZ8x&nYCFt%-P113&z zRA3s72I+JfAOOjcgF*;w+ivm9o#K6`bBt&vrQKivn1fWzZ z6@a(Egt0)MxV*1Z3JD>MA#68Ai8@yaRFW8@isLu|yCriR-3#|xA;ndZNx)S0sO&d| zVm%xtNmR!Hu%oIT)eyP?Ith$EhcHldrp1*P+tpRo$uY(4u<+JtMNQRMl=JAI=uAmE zYqo_q-81z`n@Z$3SYw)lI#-iJy$?)@1jb}^skmCH#ighUf(Z;$(tqCpGA4hih+aO& zNq=?KZmJGV^H;;y{{omKH~pfjwRYsqn>Q4TMe_MP0N1WvgsCHYR_h~WV2bu#>OZXi>$7$wm7UbcB9dt*=)8H zN~ZC)*EL}kj}BOpj{T?*Ez4qKV*`Nx{{FzAeSLiZY;0__yt~S#`{Z&t#>dB* zn3xEzsb2{RA()?^2cTZB8|N4`zAsHolR|O!%5=7-i>h{%w((|Fs-Kby@`tyLmJRb1U#(}q{r z99`EXlg(`V8pc%3CC$lnUF-Gw+aBG~qeofaTy0q&MCBZPrTngrsNARLpQlfs()-EB zMwaZR7>HYBNZs1nVqjnZ=iIq-{Ifj6XTN?yF4JR->#9<5Z9IjsRS1FWx-2X#&^=sk zVTqb6)DJe21dc4RU%!6M;^HFLuV2SGefl&{o;=~NzyIXBi61!j=`nJdoDq;Xt1`9y zBCpqKHJ&|t#)AhB$bOk(%URpDrjYZO?Rnq#jUSrFnJ0bUr&KDjwzkIo`}a9><_srK zp2VuvYQnZ{R#sM+ot^#gH;fo0m&j44;{X5v literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/on.png b/var/mongoose/html/img/on.png new file mode 100644 index 0000000000000000000000000000000000000000..4f538c8c1a9262fcd500337f22791e0e67593b87 GIT binary patch literal 2099 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

3)3)-WmK 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�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 WS9N9FK6OAd7(8A5T-G@yGywn#_*gms literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/spanner.jpg b/var/mongoose/html/img/spanner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f9f8f93c9c09ac58997f57c5a4a516c89026511 GIT binary patch literal 32376 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 CwTEl~ literal 0 HcmV?d00001 diff --git a/var/mongoose/html/index.shtml b/var/mongoose/html/index.shtml new file mode 100644 index 0000000..cd1c6b8 --- /dev/null +++ b/var/mongoose/html/index.shtml @@ -0,0 +1,108 @@ + + + + + + + + +
+
+ + + +
+ + Browse Media Files + +
+ + (NOTE: The files are encrypted if they were
+ recorded off air.) +
+
+ +
+ +
+
+ + + +
+ + EPG + +
+
+
+ + + + + + + diff --git a/var/mongoose/html/js/ajax.js b/var/mongoose/html/js/ajax.js new file mode 100644 index 0000000..5aacc99 --- /dev/null +++ b/var/mongoose/html/js/ajax.js @@ -0,0 +1,24 @@ +var request = false; + +/*@cc_on @*/ +/*@if (@_jscript_version >= 5) +try +{ + request = new ActiveXObject("Msxml2.XMLHTTP"); +} +catch (e) +{ + try + { + request = new ActiveXObject("Microsoft.XMLHTTP"); + } + case (e2) + { + request = false; + } +} +@end @*/ + +if (!request && typeof XMLHttpRequest != 'undefined') + request = new XMLHttpRequest(); + diff --git a/var/mongoose/html/js/highlight.js b/var/mongoose/html/js/highlight.js new file mode 100644 index 0000000..3f67115 --- /dev/null +++ b/var/mongoose/html/js/highlight.js @@ -0,0 +1,44 @@ + +function highlight(obj, searchTerm) +{ + var bodyText = obj.innerHTML; + + stag = ""; + etag = ""; + + var newText = ""; + var i = -1; + var lcSearchTerm = searchTerm.toLowerCase(); + var lcBodyText = bodyText.toLowerCase(); + + while (bodyText.length > 0) + { + i = lcBodyText.indexOf(lcSearchTerm, i + 1); + if (i < 0) + { + newText += bodyText; + bodyText = ""; + } + else + { + if (bodyText.lastIndexOf(">", i) >= + bodyText.lastIndexOf("<", i)) + { + if (lcBodyText.lastIndexOf("/script>", i) >= + lcBodyText.lastIndexOf("Rendered in: $rendertime seconds" + +puts { + + + + + +} + diff --git a/var/mongoose/html/lib/footer.shtml b/var/mongoose/html/lib/footer.shtml new file mode 100644 index 0000000..850397d --- /dev/null +++ b/var/mongoose/html/lib/footer.shtml @@ -0,0 +1,15 @@ + + + + + + diff --git a/var/mongoose/html/lib/header.jim b/var/mongoose/html/lib/header.jim new file mode 100644 index 0000000..c3d05b4 --- /dev/null +++ b/var/mongoose/html/lib/header.jim @@ -0,0 +1,20 @@ +puts { + + +Humax HD[R] Fox T2 + + + + +} + +source /mod/var/mongoose/html/lib/topbar.jim + +puts { +
+ + +} + +set renderstart [clock milliseconds] + diff --git a/var/mongoose/html/lib/header.shtml b/var/mongoose/html/lib/header.shtml new file mode 100644 index 0000000..44a9a37 --- /dev/null +++ b/var/mongoose/html/lib/header.shtml @@ -0,0 +1,13 @@ + + +Humax HD[R] Fox T2 + + + + + + + +
+ + diff --git a/var/mongoose/html/lib/topbar.jim b/var/mongoose/html/lib/topbar.jim new file mode 100644 index 0000000..3374573 --- /dev/null +++ b/var/mongoose/html/lib/topbar.jim @@ -0,0 +1,22 @@ +puts { + + +
+
+
+ + + Humax HD[R] Fox T2 + + +} +source /mod/var/mongoose/include/diskspace.jim +puts { + +
+
+
+ + +} + diff --git a/var/mongoose/html/lib/topbar.shtml b/var/mongoose/html/lib/topbar.shtml new file mode 100644 index 0000000..79d9a64 --- /dev/null +++ b/var/mongoose/html/lib/topbar.shtml @@ -0,0 +1,17 @@ + + +
+
+
+ + + Humax HD[R] Fox T2 + + + + +
+
+
+ + diff --git a/var/mongoose/html/packages.shtml b/var/mongoose/html/packages.shtml new file mode 100644 index 0000000..79369ca --- /dev/null +++ b/var/mongoose/html/packages.shtml @@ -0,0 +1,14 @@ + + +

Package Management

+ + + + + diff --git a/var/mongoose/html/sched.shtml b/var/mongoose/html/sched.shtml new file mode 100644 index 0000000..4cd719d --- /dev/null +++ b/var/mongoose/html/sched.shtml @@ -0,0 +1,4 @@ + + + + diff --git a/var/mongoose/html/services.shtml b/var/mongoose/html/services.shtml new file mode 100644 index 0000000..e529643 --- /dev/null +++ b/var/mongoose/html/services.shtml @@ -0,0 +1,58 @@ + + + + + + +

Service Management

+ + + + + + + + + +
ServiceAuto StartupStatus
+ diff --git a/var/mongoose/include/db.jim b/var/mongoose/include/db.jim new file mode 100755 index 0000000..50bf722 --- /dev/null +++ b/var/mongoose/include/db.jim @@ -0,0 +1,40 @@ +#!/mod/bin/jimsh + +package require sqlite3 + +proc db_info {db_file} { + set db [sqlite3.open $db_file] + set tables [$db query {SELECT name FROM sqlite_master WHERE type='table' ORDER BY name}] + + puts "

$db_file

" + + foreach table $tables { + set table_name [lindex $table 1] + set columns [$db query "pragma table_info($table_name)"] + set datas [$db query "SELECT * FROM $table_name"] + + puts "

$table_name

" + puts "" + puts " " + foreach column $columns { + puts " " + } + puts " " + foreach data $datas { + puts " " + + for {set i 1} {$i < [llength $data]} {incr i 2} { + puts " " + } + puts " " + } + puts "
[lindex $column 3]
[lindex $data $i]
" + } + + $db close +} + +puts {} +db_info /var/lib/humaxtv/rsv.db +db_info /var/lib/humaxtv/setup.db +db_info /var/lib/humaxtv/channel.db diff --git a/var/mongoose/include/diskspace.jim b/var/mongoose/include/diskspace.jim new file mode 100755 index 0000000..078a172 --- /dev/null +++ b/var/mongoose/include/diskspace.jim @@ -0,0 +1,24 @@ +#!/mod/bin/jimsh + +foreach df [split [exec df -h] "\n\r"] { + if [string match *sda2* $df] { + regsub -all -- {[[:space:]]+} $df " " df + set fields [split $df] + set size [lindex $fields 1] + set used [lindex $fields 2] + set perc [string trimright [lindex $fields 4] "%"] + } +} + +set file [format "%02d" [expr {$perc * 25 / 100 + 1}]] + +puts "
" +puts "" +puts "
" +puts "" +puts "
" +puts "Total space: $size
" +puts "Used: $used ($perc%)" +puts "
" + + diff --git a/var/mongoose/include/epg.jim b/var/mongoose/include/epg.jim new file mode 100755 index 0000000..0a3dc28 --- /dev/null +++ b/var/mongoose/include/epg.jim @@ -0,0 +1,49 @@ +#!/mod/bin/jimsh + +source /mod/var/mongoose/lib/epg.class +source /mod/var/mongoose/lib/altrow + +set start [clock milliseconds] +set records [epg fetch dump -time [clock seconds]] +set got [clock milliseconds] + +puts { + + + + + + +} + +proc rsort {v1 v2} { + set v1s [$v1 get channel_num] + set v2s [$v2 get channel_num] + + if {$v1s == $v2s} { return 0 } + if {$v1s > $v2s } { return 1 } + return -1 +} + +set i 0 +foreach record [lsort -command rsort $records] { + altrow + puts "" + puts "" + puts [$record cell] + puts [[$record next] cell] + puts "" +} +puts "
ChannelOn NowOn Next
[$record get channel_num] + + [$record get channel_name] +
" + +set end [clock milliseconds] +puts " + Retrieved now in: [expr [expr $got - $start] / 1000.0] seconds.
+ All rendered in: [expr [expr $end - $start] / 1000.0] seconds. +
" + +epg cleanup + diff --git a/var/mongoose/include/mediatomb.jim b/var/mongoose/include/mediatomb.jim new file mode 100755 index 0000000..c2ceae2 --- /dev/null +++ b/var/mongoose/include/mediatomb.jim @@ -0,0 +1,12 @@ +#!/mod/bin/jimsh + +if { [catch {set fd [open "/mod/mediatomb/config/mediatomb.html" r]} fid] } { + exit 0 +} +set data [read $fd] +close $fd +regexp {URL=([^"]*)} $data match +set url [string range $match 4 [string length $match]] + +puts ""; + diff --git a/var/mongoose/include/packages.jim b/var/mongoose/include/packages.jim new file mode 100755 index 0000000..1b77969 --- /dev/null +++ b/var/mongoose/include/packages.jim @@ -0,0 +1,54 @@ +#!/mod/bin/jimsh + +# Build a list of available packages + +set avail_pkgs {} +foreach pkg [split [exec /bin/opkg list] "\n"] { + if [regexp {^ } $pkg] { + append descr $pkg + } else { + if {[regexp {^([^ ]+) - ([^ ]+) - (.*)$} \ + $pkg full name ver descr] == 0} { continue } + } + set avail_pkgs($name) [concat $ver "$descr"] + #puts "Set: $name = ($ver, $descr)
" +} + +# Build a list of installed packages - just the names +set inst_pkgs {} +foreach pkg [split [exec /bin/opkg list-installed] "\n"] { + if {[regexp {^([^ ]+)} $pkg name] == 0} { continue } + lappend inst_pkgs $name + #puts "Inst: $name
" +} + +puts "" +puts "" +puts "" +puts "" +puts "" +puts "" +puts "" + +foreach name [lsort [array names avail_pkgs]] { + set value $avail_pkgs($name) + set ver [lindex $value 0] + set descr [lrange $value 1 [llength $value]] + + puts "" + puts "" + puts "" + puts "" + puts "" + puts "" +} + +puts "
InstalledNameVersionDescription
" + if {[lsearch $inst_pkgs $name] > -1} { + puts "" + } else { + puts "" + } + + puts "$name$ver$descr
" + diff --git a/var/mongoose/include/sched.jim b/var/mongoose/include/sched.jim new file mode 100755 index 0000000..e6425c9 --- /dev/null +++ b/var/mongoose/include/sched.jim @@ -0,0 +1,86 @@ +#!/mod/bin/jimsh + +package require sqlite3 + +source /mod/var/mongoose/lib/altrow + +set db [sqlite3.open /var/lib/humaxtv/rsv.db] +$db query {attach database '/var/lib/humaxtv/channel.db' as channel} + +set res [$db query { + select *, channel.TBL_SVC.szSvcName, channel.TBL_SVC.usLcn, + case when ersvtype > 3 then 1 else 0 end as sort + from tbl_reservation + left join channel.TBL_SVC + on main.TBL_RESERVATION.hSvc = channel.TBL_SVC.hSvc + order by sort, nsttime + }] + +puts "" +puts "" +#puts "" +puts "" +puts "" +puts "" +puts "" +puts "" +puts "" +puts "" +set i 0 +foreach r $res { + set name [string range $r(szevtname) 1 end] + if {[string first "i7" $name] == 0} { + set name [string range $name 2 end] + set b "*" + } else { + set b "" + } + + altrow + + set rsvicon "" + set alta "" + switch $r(ersvtype) { + 1 { set rsvicon "175_1_00_Reservation_Watch.png" } + 2 { set rsvicon "175_1_00_Reservation_Watch.png" } + 3 { set rsvicon "175_1_11_Reservation_Record.png" } + 5 { set rsvicon "745_1_10_Video_2Live.png"; set alta "Wake-up" } + 6 { set rsvicon "745_1_11_Video_1REC.png"; set alta "Sleep" } + 7 { set rsvicon "345_6_08_ST_Ad_Hoc.png" + set alta "Software Update" } + default { set alta "Unknown type $r(ersvtype)" } + } + if {$name == ""} { set name "-- $alta --" } + + if {$r(ucRecKind) == 4} { + set RKIcon "175_1_11_Series_Record.png" + } else { + switch $r(erepeat) { + 1 {set RKIcon "521_1_00_RP_Daily_C.png"} + 2 {set RKIcon "521_1_00_RP_Weekly_C.png"} + 3 {set RKIcon "521_1_00_RP_Weekdays_C.png"} + 4 {set RKIcon "521_1_00_RP_Weekend_C.png"} + default {set RKIcon ""} + } + } + + if {$rsvicon ne ""} { + set rsvicon " + } + if {$RKIcon ne ""} { + set RKIcon " + } + +# puts "" + puts "" + puts "" + puts "" + puts "" + puts "" + puts "" + puts "" + puts "" +} +puts "
SlotProgrammeDurationChannelDate/TimeModeSeries ID
{$r(ulslot)}$b$name[clock format $r(nduration) -format %T]$r(usLcn)[string range $r(szSvcName) 1 end][clock format $r(nsttime) -format {%c %Z}]$rsvicon $RKIcon$r(szCRID)
" +$db close + diff --git a/var/mongoose/include/services.jim b/var/mongoose/include/services.jim new file mode 100755 index 0000000..695d8a6 --- /dev/null +++ b/var/mongoose/include/services.jim @@ -0,0 +1,41 @@ +#!/mod/bin/jimsh + +set services [split [exec /mod/bin/service mlist]] + +proc button {state service action} { + puts -nonewline "
" + puts -nonewline "" + puts "" +} + +proc control {s a} { + return "" +} + +foreach service $services { + set data [split $service ":"] + set name [lindex $data 0] + set installed [lindex $data 1] + set auto [lindex $data 2] + set running [lindex $data 3] + + puts "$name" + if (!$installed) { + puts "Not installed" + continue + } + + puts "" + if ($auto) { button on $name auto } else { button off $name auto } + puts "" + + puts "" + if ($running) { button on $name toggle } else { + button off $name toggle } + puts "" + + puts "" +} + diff --git a/var/mongoose/include/status.jim b/var/mongoose/include/status.jim new file mode 100755 index 0000000..80d0bad --- /dev/null +++ b/var/mongoose/include/status.jim @@ -0,0 +1,35 @@ +#!/mod/bin/jimsh + +set ::env(PATH) "/mod/bin/busybox:/mod/bin:/bin" + +set pid [exec pgrep humaxtv] + +if {[catch {set line [exec lsof -p $pid | grep Video | fgrep .ts]} ]} { + exit +} + +regsub -all -- {[[:space:]]+} $line " " line +set fields [split $line " "] +set size [lindex $fields 6] + +sleep 2 + +set line [exec lsof -p $pid | grep Video | fgrep .ts] +regsub -all -- {[[:space:]]+} $line " " line +set fields [split $line " "] +set size2 [lindex $fields 6] + +if { $size2 > $size } { + set mode "Recording" + set icon "745_1_11_Video_1REC.png" +} else { + set mode "Watching" + set icon "745_1_10_Video_2Live.png" +} + +set name [lindex [split $line "/"] end] + +puts "
" +puts "$mode $name" +puts "
" + diff --git a/var/mongoose/lib/altrow b/var/mongoose/lib/altrow new file mode 100644 index 0000000..00a2023 --- /dev/null +++ b/var/mongoose/lib/altrow @@ -0,0 +1,12 @@ + +if {[expr ! [exists -proc altrow ]]} { + proc altrow {} {{i 0}} { + if { $i == 0 } { + puts "" + } else { + puts "" + } + set i [expr ! $i] + } +} + diff --git a/var/mongoose/lib/cat b/var/mongoose/lib/cat new file mode 100644 index 0000000..f80b25b --- /dev/null +++ b/var/mongoose/lib/cat @@ -0,0 +1,9 @@ + +if {[expr ! [exists -proc cat ]]} { + proc cat {file} { + if {[catch {set fp [open $file r]]} { return } + puts [read $fp] + close $fp + } +} + diff --git a/var/mongoose/lib/epg.class b/var/mongoose/lib/epg.class new file mode 100644 index 0000000..7887df6 --- /dev/null +++ b/var/mongoose/lib/epg.class @@ -0,0 +1,192 @@ + +if {[expr ! [exists -proc class ]]} { package require oo } +if {[expr ! [exists -proc sqlite3.open ]]} { package require sqlite3 } + +source /mod/var/mongoose/lib/progressbar + +set channeldb [sqlite3.open /var/lib/humaxtv/channel.db] + +# * service_id, event_id, start, duration, encrypted, name, text +# * warning, content code, content type, +# * event CRID, series CRID, rec CRID + +class epg { + service_id 0 + event_id 0 + start 0 + duration 0 + encrypted 0 + name "" + text "" + warning "" + content_code 0 + content_type "" + event_crid "" + series_crid "" + rec_crid "" + + channel_num 0 + channel_name "" +} + +epg method channel {chnum chname} { + set channel_num $chnum + set channel_name $chname +} + +epg method _parse {line} { + set vars [split $line "\t"] + + set service_id [lindex $vars 0] + set event_id [lindex $vars 1] + set start [lindex $vars 2] + set duration [lindex $vars 3] + set encrypted [lindex $vars 4] + set name [lindex $vars 5] + set text [lindex $vars 6] + set warning [lindex $vars 7] + set content_code [lindex $vars 8] + set content_type [lindex $vars 9] + set event_crid [lindex $vars 10] + set series_crid [lindex $vars 11] + set rec_crid [lindex $vars 12] +} + +epg method percent {} { + set now [clock seconds] + if {$start > $now} { return 0 } + if {$start + $duration < $now} { return 100 } + return [expr [expr $now - $start] * 100 / $duration] +} + +epg method showing {} { + set percent [$self percent] + if {$percent > 0 && $percent < 100} { return 1 } else { return 0 } +} + +epg method elapsed {} { + set percent [$self percent] + if {$percent == 0} { return 0 } + if {$percent == 100} { return $duration } + return [expr $duration * $percent / 100] +} + +epg method remaining {} { + return [expr $duration - [$self elapsed]] +} + +epg method cell {} { + set name [$self get name] + set text [$self get text] + + set percent [$self percent] + + puts "" + + set img "" + switch -- [$self get content_code] { + 1 { set img "Movie" } + 2 { set img "News" } + 3 { set img "Show" } + 4 { set img "Sports" } + 5 { set img "Children" } + 6 { set img "Music" } + 7 { set img "Art" } + 8 { set img "Society" } + 9 { set img "Education" } + 10 { set img "Leisure" } + } + if {$img != ""} { + puts "\"[$self" + } + if {[$self get series_crid] != ""} { + puts "" + } + puts " +
+ $name" + + puts "
" + + puts "" + puts "[clock format [$self get start] -format %H:%M]" + puts " ([clock format [$self get duration] -format %T])" + if {$percent > 0 && $percent < 100} { + puts "
[progressbar $percent]" + puts "$percent% [clock format [$self elapsed] -format %T] / + [clock format [$self remaining] -format %T]" + } + puts "
" + puts "" +} + +epg method next {} { + set tm [expr [$self get start] + [$self get duration] + 60] + set nextlist [epg fetch dump -service [$self get service_id] -time $tm] + + if {[llength nextlist] > 0} { + return [lindex $nextlist 0] + } else { + return "" + } +} + +proc {epg parse} {line} { + set e [epg new] + $e _parse $line + return $e +} + +proc {epg cleanup} {} { + global channeldb + + $channeldb close +} + +proc {epg exec} {mode args} { + set raw 0 + set cmd [list /mod/bin/epg] + set extra "" + foreach arg $args { + if {[string first "-" $arg] == 0} { + switch -- $arg { + -raw { set raw 1 } + -crid { lappend cmd -C $args($arg) } + -type { lappend cmd -T $args($arg) } + -service { lappend cmd -S $args($arg) } + -event { lappend cmd -E $args($arg) } + -time { lappend cmd -@ $args($arg) } + -extra { set extra $args($arg) } + default { error "Invalid option, $arg" } + } + } + } + if { $raw == 0 } { lappend cmd -p } + lappend cmd $mode + lappend cmd $extra + + #puts "CMD -$cmd-" + + return [exec {*}$cmd] +} + +proc {epg fetch} {mode args} { + global channeldb + + foreach line [split [epg exec $mode {*}$args] "\n"] { + set record [epg parse $line] + set chan [lindex [$channeldb query { + select szSvcName, usLcn from TBL_SVC + where usSvcId = %s} "[$record get service_id]" + ] 0] + $record channel $chan(usLcn) \ + [string range $chan(szSvcName) 1 end] + + lappend records $record + } + return $records +} + diff --git a/var/mongoose/lib/progressbar b/var/mongoose/lib/progressbar new file mode 100644 index 0000000..9763595 --- /dev/null +++ b/var/mongoose/lib/progressbar @@ -0,0 +1,10 @@ + +if {[expr ! [exists -proc progressbar ]]} { + proc progressbar {percent} { + set pos [expr 118 - $percent / 100.0 * 118] + return "\"$percent%\"" + } +} +